Commit 0b847111 张东亮

1

1 个父辈 429e0b20
......@@ -55,7 +55,7 @@ namespace Common
public const string A5 = "A5";
public const string Line_Name_Prefix = "S";
public const string RoomD_Name_Prefix = "S";
public const string RoomS_Name_Prefix = "S";
public const string RoomC_Name_Prefix = "C";
public const string BigShelf_Prefix = "C";
public const string SmallShelf_Prefix = "D";
......@@ -64,7 +64,7 @@ namespace Common
public const string IP_3D_Light = "IP_3D_Light";
public const string IP_3C_Light = "IP_3C_Light";
public static List<string> Lines_In_Air_Door = new List<string>() { "C100" };
public static List<string> Lines_In_Air_Door = new List<string>() { "S1","S2" };
public static List<string> RoomC_AGV_IPs = new List<string>() { "10.85.199.666"};
public static List<string> FixedCharge_AGV_IPs = new List<string>() { "10.85.199.666" };
#region 配置名
......
......@@ -21,4 +21,12 @@ D21,备料区入口,060d5e35-75b0-11eb-8565-0001297a1dca
D22,备料区出口,fe89c587-75bf-11eb-a7fe-0001297a1dca
CheckShelf,检查负载情况,cc5f1d78-75a2-11eb-8565-0001297a1dca
Leave,出料,28a2ab7b-75ac-11eb-8565-0001297a1dca
Enter,进料,4bf5d4c5-75a4-11eb-8565-0001297a1dca
\ No newline at end of file
Enter,进料,4bf5d4c5-75a4-11eb-8565-0001297a1dca
S1,S1线,4bf5d4c5-75a4-11eb-8565-0001297a1dca
S2,S2线,4bf5d4c5-75a4-11eb-8565-0001297a1dca
DoorAirIn-1,进风淋门-停留点,4bf5d4c5-75a4-11eb-8565-0001297a1dca
DoorAirIn-2,进风淋门-进入,4bf5d4c5-75a4-11eb-8565-0001297a1dca
DoorAirIn-3,进风淋门-出去,4bf5d4c5-75a4-11eb-8565-0001297a1dca
DoorAirOut-1,出风淋门-停留点,4bf5d4c5-75a4-11eb-8565-0001297a1dca
DoorAirOut-2,出风淋门-进入,4bf5d4c5-75a4-11eb-8565-0001297a1dca
DoorAirOut-3,出风淋门-出去,4bf5d4c5-75a4-11eb-8565-0001297a1dca
\ No newline at end of file
......@@ -93,7 +93,7 @@ namespace DeviceLibrary
{
msglist.Add(new AlarmMsg(AGVManager.nodeInfo[j].AliceName, "lineAgv." + AGVManager.nodeInfo[j].Name + ".OffLine", "离线"));
}
if (AGVManager.nodeInfo[j].Name.StartsWith(SettingString.RoomD_Name_Prefix) || AGVManager.nodeInfo[j].Name.StartsWith(SettingString.RoomC_Name_Prefix))
if (AGVManager.nodeInfo[j].Name.StartsWith(SettingString.RoomS_Name_Prefix) || AGVManager.nodeInfo[j].Name.StartsWith(SettingString.RoomC_Name_Prefix))
{
if (!AGVManager.nodeInfo[j].Name.Equals(SettingString.RoomCFeederIn) && !AGVManager.nodeInfo[j].Name.Equals(SettingString.RoomCFeederOut) &&
!AGVManager.nodeInfo[j].Name.Equals(SettingString.RoomDFeederIn) && !AGVManager.nodeInfo[j].Name.Equals(SettingString.RoomDFeederOut))
......
......@@ -61,22 +61,13 @@ namespace DeviceLibrary
StartJobTime = curJobStep.startTime;
if (curJobStep.IsStep(EMPTY_SHELF_BACK_STEP.NONE))
{
if (AGVManager.CheckIsInAirDoor(EmptyShelfPlace))//C车间风淋门
if (AGVManager.CheckIsInAirDoor(EmptyShelfPlace))//车间风淋门
{
curJobStep.ToNextStep(EMPTY_SHELF_BACK_STEP.WAIT_AGV_REACH_AIR_DOOR);
runInfo = string.Format("从产线{0}过{1}风淋门", EmptyShelfPlace,SettingString.RoomC_Name);
curJobStep.ToNextStep(EMPTY_SHELF_BACK_STEP.OUT_AIR_DOOR_1);
runInfo = $"从产线{EmptyShelfPlace}去{SettingString.RoomD_Name}风淋门停留点";
msg += string.Format("[{0}] {1}", curJobStep.CurStep(),runInfo);
curJobStep.Msg = msg;
MissionSys.AssignMission(agv, SettingString.DoorAirOut);
UpdateJobTaskInfo(agv);
}
else if (EmptyShelfPlace.StartsWith(SettingString.RoomC_Name_Prefix))//C车间
{
curJobStep.ToNextStep(EMPTY_SHELF_BACK_STEP.WAIT_AGV_REACH_DOOR);
runInfo = string.Format("从产线{0}前往{1}门", EmptyShelfPlace,SettingString.RoomD_Name);
msg += string.Format("[{0}] {1}", curJobStep.CurStep(),runInfo);
curJobStep.Msg = msg;
MissionSys.AssignMission(agv, SettingString.DoorCToD);
MissionSys.AssignMission(agv, $"{SettingString.DoorAirOut}-1");
UpdateJobTaskInfo(agv);
}
else
......@@ -106,45 +97,59 @@ namespace DeviceLibrary
}
}
}
else if (curJobStep.IsStep(EMPTY_SHELF_BACK_STEP.WAIT_AGV_REACH_AIR_DOOR))
else if (curJobStep.IsStep(EMPTY_SHELF_BACK_STEP.OUT_AIR_DOOR_1))
{
CurTaskState = MissionSys.GetTakJobState(agv);
if (MissionSys.CheckTaskFinished(agv, SettingString.DoorAirOut, CurTaskState))
if (MissionSys.CheckTaskFinished(agv, $"{SettingString.DoorAirOut}-1", CurTaskState))
{
RecordRunLog(agv, curJobStep.CurStep(), runInfo, agv.Place);
curJobStep.ToNextStep(EMPTY_SHELF_BACK_STEP.WAIT_AGV_REACH_DOOR);
runInfo = string.Format("出风淋门,前往{0}门",SettingString.RoomD_Name);
msg += string.Format("[{0}] {1}", curJobStep.CurStep(),runInfo);
curJobStep.ToNextStep(EMPTY_SHELF_BACK_STEP.OUT_AIR_DOOR_2);
runInfo = string.Format("{0}到达风淋门停留点,进入{1}风淋门", agv.Place, SettingString.RoomD_Name);
msg += string.Format("[{0}] {1}", curJobStep.CurStep(), runInfo);
curJobStep.Msg = msg;
MissionSys.AssignMission(agv, SettingString.DoorCToD);
UpdateJobTaskInfo(agv);
MissionSys.AssignMission(agv, $"{SettingString.DoorAirOut}-2");
UpdateJobTaskInfo(agv);
}
}
else if (curJobStep.IsStep(EMPTY_SHELF_BACK_STEP.OUT_AIR_DOOR_2))
{
CurTaskState = MissionSys.GetTakJobState(agv);
if (MissionSys.CheckTaskFinished(agv, $"{SettingString.DoorAirOut}-2", CurTaskState))
{
RecordRunLog(agv, curJobStep.CurStep(), runInfo, agv.Place);
curJobStep.ToNextStep(EMPTY_SHELF_BACK_STEP.OUT_AIR_DOOR_3);
runInfo = string.Format("{0}进入风淋门,准备出{1}风淋门", agv.Place, SettingString.RoomD_Name);
msg += string.Format("[{0}] {1}", curJobStep.CurStep(), runInfo);
curJobStep.Msg = msg;
MissionSys.AssignMission(agv, $"{SettingString.DoorAirOut}-3");
UpdateJobTaskInfo(agv);
}
}
else if (curJobStep.IsStep(EMPTY_SHELF_BACK_STEP.WAIT_AGV_REACH_DOOR))
else if (curJobStep.IsStep(EMPTY_SHELF_BACK_STEP.OUT_AIR_DOOR_3))
{
CurTaskState = MissionSys.GetTakJobState(agv);
if (MissionSys.CheckTaskFinished(agv, SettingString.DoorCToD, CurTaskState))
if (MissionSys.CheckTaskFinished(agv, $"{SettingString.DoorAirOut}-3", CurTaskState))
{
RecordRunLog(agv, curJobStep.CurStep(), runInfo, agv.Place);
if (AGVManager.CheckA5A6State(agv, shelfType, out string nodeName))
{
EmptyShelfTargetPlace = nodeName;
curJobStep.ToNextStep(EMPTY_SHELF_BACK_STEP.WAIT_AGV_REACH_A5A6);
runInfo = string.Format("进{0}门,送往双层线{1}",SettingString.RoomD_Name, EmptyShelfTargetPlace);
msg += string.Format("[{0}] {1}", curJobStep.CurStep(),runInfo);
runInfo = string.Format("送往双层线{1}", SettingString.RoomD_Name, EmptyShelfTargetPlace);
msg += string.Format("[{0}] {1}", curJobStep.CurStep(), runInfo);
curJobStep.Msg = msg;
MissionSys.AssignMission(agv, EmptyShelfTargetPlace);
UpdateJobTaskInfo(agv);
UpdateJobTaskInfo(agv);
}
else
{
curJobStep.ToNextStep(EMPTY_SHELF_BACK_STEP.WAIT_AGV_REACH_STANDBY);
runInfo = string.Format("进{0}门,双层线暂不需要空料架,到待机位", SettingString.RoomD_Name);
runInfo = "进4D门,双层线暂不需要空料架,到待机位";
msg += string.Format("[{0}] {1}", curJobStep.CurStep(),runInfo);
runInfo = string.Format("双层线暂不需要空料架,到待机位", SettingString.RoomD_Name);
runInfo = "双层线暂不需要空料架,到待机位";
msg += string.Format("[{0}] {1}", curJobStep.CurStep(), runInfo);
curJobStep.Msg = msg;
MissionSys.AssignMission(agv, SettingString.Standby);
UpdateJobTaskInfo(agv);
UpdateJobTaskInfo(agv);
}
}
}
......@@ -260,13 +265,17 @@ namespace DeviceLibrary
/// </summary>
NONE,
/// <summary>
/// 等待到达4C风淋门
/// 去出3D风淋门等待位
/// </summary>
OUT_AIR_DOOR_1,
/// <summary>
/// 进风淋门
/// </summary>
WAIT_AGV_REACH_AIR_DOOR,
OUT_AIR_DOOR_2,
/// <summary>
/// 等待AGV到达
/// 出风淋
/// </summary>
WAIT_AGV_REACH_DOOR,
OUT_AIR_DOOR_3,
/// <summary>
/// 等待小车到达A5,A6
/// </summary>
......
......@@ -88,21 +88,12 @@ namespace DeviceLibrary
}
else if (AGVManager.CheckIsInAirDoor(agvPlace))
{
curJobStep.ToNextStep(GO_FULL_SHELF_STATION_STEP.WAIT_AGV_REACH_AIR_DOOR);
runInfo = "在风淋门内,先过风淋门";
curJobStep.ToNextStep(GO_FULL_SHELF_STATION_STEP.OUT_AIR_DOOR_1);
runInfo = "去风淋门停留点";
msg += string.Format("[{0}] {1}", curJobStep.CurStep(), runInfo);
curJobStep.Msg = msg;
MissionSys.AssignMission(agv, SettingString.DoorAirOut);
UpdateJobTaskInfo(agv);
}
else if (agvPlace.StartsWith(SettingString.RoomC_Name_Prefix))//4C车间
{
curJobStep.ToNextStep(GO_FULL_SHELF_STATION_STEP.WAIT_AGV_REACH_DOOR);
runInfo = string.Format("在{0}车间,向{1}门运行,再到双层线入料口", SettingString.RoomC_Name, SettingString.RoomD_Name);
msg += string.Format("[{0}] {1}", curJobStep.CurStep(), runInfo);
curJobStep.Msg = msg;
MissionSys.AssignMission(agv, SettingString.DoorCToD);
UpdateJobTaskInfo(agv);
MissionSys.AssignMission(agv, $"{SettingString.DoorAirOut}-1");
UpdateJobTaskInfo(agv);
}
else
{
......@@ -118,25 +109,24 @@ namespace DeviceLibrary
}
}
else if (curJobStep.IsStep(GO_FULL_SHELF_STATION_STEP.WAIT_AGV_REACH_AIR_DOOR))
else if (curJobStep.IsStep(GO_FULL_SHELF_STATION_STEP.OUT_AIR_DOOR_2))
{
CurTaskState = MissionSys.GetTakJobState(agv);
if (MissionSys.CheckTaskFinished(agv, SettingString.DoorAirOut, CurTaskState))
if (MissionSys.CheckTaskFinished(agv, $"{SettingString.DoorAirOut}-2", CurTaskState))
{
RecordRunLog(agv, curJobStep.CurStep(), runInfo, agv.Place);
curJobStep.ToNextStep(GO_FULL_SHELF_STATION_STEP.WAIT_AGV_REACH_DOOR);
runInfo = string.Format("过风淋门,向{0}门运行,再到双层线入料口{1}", SettingString.RoomD_Name,FullShelfStationPlace);
curJobStep.ToNextStep(GO_FULL_SHELF_STATION_STEP.OUT_AIR_DOOR_3);
runInfo = string.Format("{0}进入风淋门,准备出{1}风淋门", agv.Place, SettingString.RoomD_Name);
msg += string.Format("[{0}] {1}", curJobStep.CurStep(), runInfo);
curJobStep.Msg = msg;
MissionSys.AssignMission(agv, SettingString.DoorCToD);
UpdateJobTaskInfo(agv);
MissionSys.AssignMission(agv, $"{SettingString.DoorAirOut}-3");
UpdateJobTaskInfo(agv);
}
}
else if (curJobStep.IsStep(GO_FULL_SHELF_STATION_STEP.WAIT_AGV_REACH_DOOR))
else if (curJobStep.IsStep(GO_FULL_SHELF_STATION_STEP.OUT_AIR_DOOR_3))
{
CurTaskState = MissionSys.GetTakJobState(agv);
if (MissionSys.CheckTaskFinished(agv, SettingString.DoorCToD, CurTaskState))
if (MissionSys.CheckTaskFinished(agv, $"{SettingString.DoorAirOut}-3", CurTaskState))
{
RecordRunLog(agv, curJobStep.CurStep(), runInfo, agv.Place);
curJobStep.ToNextStep(GO_FULL_SHELF_STATION_STEP.WAIT_AGV_REACH_A6);
......@@ -144,9 +134,8 @@ namespace DeviceLibrary
msg += string.Format("[{0}] {1}", curJobStep.CurStep(), runInfo);
curJobStep.Msg = msg;
MissionSys.AssignMission(agv, FullShelfStationPlace);
UpdateJobTaskInfo(agv);
UpdateJobTaskInfo(agv);
}
}
else if (curJobStep.IsStep(GO_FULL_SHELF_STATION_STEP.WAIT_AGV_REACH_A6))
{
......@@ -286,13 +275,17 @@ namespace DeviceLibrary
/// </summary>
WAIT_CHECK_RESULT,
/// <summary>
/// 等待到达4C风淋门
/// 去出3D风淋门等待位
/// </summary>
OUT_AIR_DOOR_1,
/// <summary>
/// 进风淋门
/// </summary>
WAIT_AGV_REACH_AIR_DOOR,
OUT_AIR_DOOR_2,
/// <summary>
/// 等待AGV到达
/// 出风淋
/// </summary>
WAIT_AGV_REACH_DOOR,
OUT_AIR_DOOR_3,
/// <summary>
/// 等待到达A6
/// </summary>
......
......@@ -41,7 +41,7 @@ namespace DeviceLibrary
//出工单料的目的地是否有空料架
if (AGVManager.FindEmptyShelfBeforeSendFullShelf(out string nodeName))
{
if (nodeName.StartsWith(SettingString.RoomD_Name_Prefix) && !SettingString.RoomC_AGV_IPs.Contains(currentAgv.IP))
if (nodeName.StartsWith(SettingString.RoomS_Name_Prefix) && !SettingString.RoomC_AGV_IPs.Contains(currentAgv.IP))
{
ClientNode clientNode = AGVManager.nodeInfo.Find(s => s.Name.Equals(nodeName));
int cnt = 0;
......
......@@ -403,7 +403,7 @@ namespace DeviceLibrary
log.Debug("A6出满料架的产线有空料架,优先处理 " + FullShelfDestInfo.ShowInfo(line));
return true;
}
else if (FullShelfDestInfo.location.StartsWith(SettingString.RoomD_Name_Prefix) && !SettingString.RoomC_AGV_IPs.Contains(agv.IP))
else if (FullShelfDestInfo.location.StartsWith(SettingString.RoomS_Name_Prefix) && !SettingString.RoomC_AGV_IPs.Contains(agv.IP))
{
nodeName = FullShelfDestInfo.location;
GetLineNameByNodeName(nodeName, out string line);
......@@ -441,7 +441,7 @@ namespace DeviceLibrary
//Common.LogInfo("双层线正在出的工单目标产线有空料架,优先处4C-" + loc);
return true;
}
else if (loc.StartsWith(SettingString.RoomD_Name_Prefix) && !SettingString.RoomC_AGV_IPs.Contains(agv.IP))
else if (loc.StartsWith(SettingString.RoomS_Name_Prefix) && !SettingString.RoomC_AGV_IPs.Contains(agv.IP))
{
nodeName = loc;
log.Debug("双层线正在出的工单目标产线有空料架,优先处理4D-" + loc);
......@@ -475,7 +475,7 @@ namespace DeviceLibrary
//4D车间寻找
if (!SettingString.RoomC_AGV_IPs.Contains(agv.IP))
{
string nearNodeName = CalculateNearNode(agv, SettingString.RoomD_Name_Prefix);
string nearNodeName = CalculateNearNode(agv, SettingString.RoomS_Name_Prefix);
if (nearNodeName.Equals(""))
{
return false;
......@@ -532,7 +532,7 @@ namespace DeviceLibrary
//4D车间寻找
if (!SettingString.RoomC_AGV_IPs.Contains(agv.IP))
{
string nearNodeName = CalculateNearNode(agv, SettingString.RoomD_Name_Prefix);
string nearNodeName = CalculateNearNode(agv, SettingString.RoomS_Name_Prefix);
if (!nearNodeName.Equals(""))
{
nodeName = nearNodeName;
......@@ -569,28 +569,12 @@ namespace DeviceLibrary
}
}
if (CheckA6State(agv, eShelfType.BigShelf))
if (CheckA6State(agv, eShelfType.BigShelf) || CheckA6State(agv, eShelfType.SmallShelf))
{
//4C车间备料区寻找
if (SettingString.RoomC_AGV_IPs.Contains(agv.IP))
{
idx = nodeInfo.FindIndex(s => s.EmptyShelfCnt > 0 && s.Name.Equals(SettingString.RoomCFeederOut) && !s.RFID.StartsWith("0") && s.IsUse);
if (idx > -1)
{
int idx1 = agvInfo.FindIndex(s => s.CurJob is EnterLeaveShelfJob && ((EnterLeaveShelfJob)s.CurJob).LineName.Equals(SettingString.RoomCFeederOut));
if (idx1 == -1)
{
nodeName = nodeInfo[idx].Name;
log.Debug(agv.Name + " 双层线右侧需要料架,准备去4C-" + nodeName);
return true;
}
}
}
//4D车间备料区寻找
//D车间备料区寻找
if (!SettingString.RoomC_AGV_IPs.Contains(agv.IP))
{
idx = nodeInfo.FindIndex(s => s.EmptyShelfCnt > 0 && s.Name.Equals(SettingString.RoomDFeederOut) && s.RFID.StartsWith("D") && s.IsUse);
idx = nodeInfo.FindIndex(s => s.EmptyShelfCnt > 0 && s.Name.Equals(SettingString.RoomDFeederOut) && !s.RFID.StartsWith("0") && s.IsUse);
if (idx > -1)
{
nodeName = nodeInfo[idx].Name;
......@@ -626,7 +610,8 @@ namespace DeviceLibrary
return true;
}
else if (FullShelfDestInfo.location.StartsWith(SettingString.RoomD_Name_Prefix) && !SettingString.RoomC_AGV_IPs.Contains(agv.IP))
else if ((FullShelfDestInfo.location.StartsWith(SettingString.RoomS_Name_Prefix)|| FullShelfDestInfo.location.StartsWith(SettingString.SmallShelf_Prefix))
&& !SettingString.RoomC_AGV_IPs.Contains(agv.IP))
{
int i = agvInfo.FindIndex(s => s.CurJob is SendFullShelfToLineJob && !s.IP.Equals(agv.IP)
&& ((SendFullShelfToLineJob)s.CurJob).FullShelfPlace.Equals(FullShelfDestInfo.location));
......
......@@ -134,7 +134,11 @@ namespace DeviceLibrary
{
tempLocation = "3CFeederIn";
}
else if(res[0].location.StartsWith("D")|| res[0].location.StartsWith("C")
|| res[0].location.Equals("Feeder") || res[0].location.Equals("4DFeeder") || res[0].location.Equals("4CFeeder"))
{
tempLocation = "D0";
}
if (AGVManager.GetNodeNameByLineName(tempLocation, out string loc))
{
int i = AGVManager.FindNode(loc);
......@@ -525,7 +529,7 @@ namespace DeviceLibrary
{
string addr = "";
string lineName = "";
if (nodeName.StartsWith(SettingString.RoomD_Name_Prefix) && AGVManager.GetLineNameByNodeName(nodeName, out lineName))
if (nodeName.StartsWith(SettingString.RoomS_Name_Prefix) && AGVManager.GetLineNameByNodeName(nodeName, out lineName))
{
addr = string.Format("http://{0}/LineClearRFID?line={1}&rfid={2}", AppConfigHelper.GetValue(SettingString.IP_3D_Light), lineName, rfid);
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!