Commit a48bf027 张东亮

0808

1 个父辈 81316f3e
...@@ -60,7 +60,20 @@ namespace BLL ...@@ -60,7 +60,20 @@ namespace BLL
Marks.AddRange(arr); Marks.AddRange(arr);
} }
/// <summary>
/// 结构类型
/// </summary>
public enum ResultType
{
/// <summary>
/// 默认为无
/// </summary>
None,
/// <summary>
/// 无空料架
/// </summary>
NoEmptyShelf,
}
private void AgvCall() private void AgvCall()
{ {
...@@ -401,30 +414,28 @@ namespace BLL ...@@ -401,30 +414,28 @@ namespace BLL
foreach (var item in Common.nodeInfo) foreach (var item in Common.nodeInfo)
{ {
if (item.AgvName.Equals(agv.Name)) if (item.AgvName.Equals(agv.Name))
{
item.AgvName = ""; item.AgvName = "";
Common.log.OutInfo("清除节点的AGV名称: 节点名:" + item.Name + ";AGV名称:" + agv.Name);
}
} }
//B区域,需要出料,先拿料架 //B区域,需要出料,先拿料架
//Mark.Length>1防止Mark为0的情况,Mark=0是VMI的进料 //Mark.Length>1防止Mark为0的情况,Mark=0是VMI的进料
nodeIdx = Common.nodeInfo.FindIndex(s => s.Action == ClientAction.NeedEnter && s.AgvName.Equals("") && s.Mark.Length > 1 && s.IsUse); nodeIdx = Common.nodeInfo.FindIndex(s => s.Action == ClientAction.NeedEnter && s.AgvName.Equals("") && s.Mark.Length > 1 && s.IsUse);
if (nodeIdx == -1) if (nodeIdx == -1)
{ {
Common.log.OutInfo("B区没有找到新的NeedEnter的节点"); Common.log.OutInfo("B区没有找到NeedEnter的节点");
} }
else else//B区域需要出料
{ {
//Mark没有被缓存 //Mark没有被缓存
int n = Marks.FindIndex(t => t == Common.nodeInfo[nodeIdx].Mark); int n = Marks.FindIndex(t => t == Common.nodeInfo[nodeIdx].Mark);
if (n == -1) if (n == -1)//
{ {
//A4没有被占用 n = Common.nodeInfo.FindIndex(s => s.Name == "A7" && s.Action == ClientAction.NeedLeave &&
n = Common.nodeInfo.FindIndex(s => s.Name == "A4" && s.Action == ClientAction.NeedLeave && s.AgvName.Equals("") && s.IsUse); s.RFID.StartsWith("A") && s.AgvName.Equals("") && s.IsUse);
if (n == -1) if (n > -1)
{
nodeIdx = -1;
Common.log.OutInfo("A4不是NeedLeave或被占用");
Common.log.OutTextBox("A4没有架子或被占用");
}
else
{ {
agv.Place = Common.nodeInfo[n].Name; agv.Place = Common.nodeInfo[n].Name;
agv.Mark = Common.nodeInfo[nodeIdx].Mark; agv.Mark = Common.nodeInfo[nodeIdx].Mark;
...@@ -456,29 +467,113 @@ namespace BLL ...@@ -456,29 +467,113 @@ namespace BLL
Common.log.OutInfo(log); Common.log.OutInfo(log);
Common.log.OutTextBox(log); Common.log.OutTextBox(log);
} }
}
else
{
//A4没有被占用
n = Common.nodeInfo.FindIndex(s => s.Name == "A4" && s.Action == ClientAction.NeedLeave && s.AgvName.Equals("") && s.IsUse);
if (n == -1)
{
//nodeIdx = -1;
Common.log.OutInfo("A4不是NeedLeave或被占用");
Common.log.OutTextBox("A4没有架子或被占用");
n = Common.nodeInfo.FindIndex(s => s.Name == "A8" && s.Action == ClientAction.NeedEnter && s.AgvName.Equals("") && s.IsUse);
if (n == -1)
{
Common.log.OutInfo("A8不是NeedEnter或被占用");
Common.log.OutTextBox("A4、A7无空架子用与包装仓出库");
}
else
{
agv.Place = Common.nodeInfo[n].Name;
agv.Mark = Common.nodeInfo[nodeIdx].Mark;
//agv.CloseDoor = false;
rtn = Common.mir.Add_Mission_Fleet(agv, Common.agvMission["Move" + agv.Place]);
if (rtn)
{
agv.CloseDoor = false;
Common.nodeInfo[n].AgvName = agv.Name;
agv.TaskSend = true;
//_mark.Add(Common.nodeInfo[nodeIdx].Mark);
MarkAdd(Common.nodeInfo[nodeIdx].Mark);
Common.log.OutString("Mark缓存 " + string.Join(",", Marks.ToArray()));
log = string.Format("{0} Move To {1}[{2}] [{3}]", agv.Name, agv.Place,
Common.nodeInfo[nodeIdx].Action.ToString(), Common.nodeInfo[nodeIdx].Mark);
Common.log.OutInfo(log);
Common.log.OutTextBox(log);
Common.mir.State_Ready(agv);
Common.server.NodeRefresh(n);
}
else
{
agv.TaskSend = false;
log = string.Format("{0} Move To {1} 失败", agv.Name, agv.Place);
//防止上一个任务已执行但返回失败时,删除任务
//Common.mir.Del_Mission(agv);
Common.log.OutInfo(log);
Common.log.OutTextBox(log);
}
}
}
else
{
agv.Place = Common.nodeInfo[n].Name;
agv.Mark = Common.nodeInfo[nodeIdx].Mark;
//agv.CloseDoor = false;
rtn = Common.mir.Add_Mission_Fleet(agv, Common.agvMission["Move" + agv.Place]);
if (rtn)
{
agv.CloseDoor = false;
Common.nodeInfo[n].AgvName = agv.Name;
agv.TaskSend = true;
//_mark.Add(Common.nodeInfo[nodeIdx].Mark);
MarkAdd(Common.nodeInfo[nodeIdx].Mark);
Common.log.OutString("Mark缓存 " + string.Join(",", Marks.ToArray()));
log = string.Format("{0} Move To {1}[{2}] [{3}]", agv.Name, agv.Place,
Common.nodeInfo[nodeIdx].Action.ToString(), Common.nodeInfo[nodeIdx].Mark);
Common.log.OutInfo(log);
Common.log.OutTextBox(log);
Common.mir.State_Ready(agv);
Common.server.NodeRefresh(n);
}
else
{
agv.TaskSend = false;
log = string.Format("{0} Move To {1} 失败", agv.Name, agv.Place);
//防止上一个任务已执行但返回失败时,删除任务
//Common.mir.Del_Mission(agv);
Common.log.OutInfo(log);
Common.log.OutTextBox(log);
}
//_mark.Add(Common.nodeInfo[nodeIdx].Mark);
//Common.log.OutString("Mark缓存 " + string.Join(",", _mark.ToArray()));
//Common.nodeInfo[n].AgvName = agv.Name;
//agv.Place = Common.nodeInfo[n].Name;
//agv.Mark = Common.nodeInfo[nodeIdx].Mark;
//rtn = Common.mir.Add_Mission_Fleet(agv, Common.agvMission["Move" + agv.Place]);
//log = string.Format("{0} Move {1} {2} {3}", agv.Name, agv.Place, Common.nodeInfo[nodeIdx].Action.ToString(), Common.nodeInfo[nodeIdx].Mark); //_mark.Add(Common.nodeInfo[nodeIdx].Mark);
//Common.log.OutInfo(log); //Common.log.OutString("Mark缓存 " + string.Join(",", _mark.ToArray()));
//Common.log.OutTextBox(log);
//rtn = Common.mir.State_Ready(agv); //Common.nodeInfo[n].AgvName = agv.Name;
//Common.server.NodeRefresh(n); //agv.Place = Common.nodeInfo[n].Name;
//agv.Mark = Common.nodeInfo[nodeIdx].Mark;
//rtn = Common.mir.Add_Mission_Fleet(agv, Common.agvMission["Move" + agv.Place]);
AgvChanged?.Invoke(agvIdx); //log = string.Format("{0} Move {1} {2} {3}", agv.Name, agv.Place, Common.nodeInfo[nodeIdx].Action.ToString(), Common.nodeInfo[nodeIdx].Mark);
return; //Common.log.OutInfo(log);
//Common.log.OutTextBox(log);
//rtn = Common.mir.State_Ready(agv);
//Common.server.NodeRefresh(n);
AgvChanged?.Invoke(agvIdx);
return;
}
} }
} }
else else
{ {
...@@ -494,7 +589,7 @@ namespace BLL ...@@ -494,7 +589,7 @@ namespace BLL
for (int i = 0; i < Common.nodeInfo.Count; i++) for (int i = 0; i < Common.nodeInfo.Count; i++)
{ {
if (Common.nodeInfo[i].Action == ClientAction.NeedLeave && Common.nodeInfo[i].Name != "A4" && if (Common.nodeInfo[i].Action == ClientAction.NeedLeave && Common.nodeInfo[i].Name != "A4" &&
Common.nodeInfo[i].AgvName == "" && Common.nodeInfo[i].IsUse) Common.nodeInfo[i].Name != "A7" && Common.nodeInfo[i].AgvName == "" && Common.nodeInfo[i].IsUse)
{ {
switch (Common.nodeInfo[i].Level) switch (Common.nodeInfo[i].Level)
{ {
...@@ -578,7 +673,17 @@ namespace BLL ...@@ -578,7 +673,17 @@ namespace BLL
break; break;
} }
} }
else if (Common.nodeInfo[node[i]].Name == "C2" || Common.nodeInfo[node[i]].Name == "C4" || Common.nodeInfo[node[i]].Name == "C6")//C2,4,6准备出料,C7,A2需要料 else if (Common.nodeInfo[node[i]].Name == "A7" && Common.nodeInfo[node[i]].RFID.StartsWith("B"))//C7入料
{
int n = Common.nodeInfo.FindIndex(s => s.Name == "C7" && s.Action == ClientAction.NeedEnter && s.AgvName == "" && s.IsUse);
//入料口有一个没有占用
if (n > -1)
{
nodeIdx = node[i];
break;
}
}
else if (Common.nodeInfo[node[i]].Name == "C2" || Common.nodeInfo[node[i]].Name == "C4" || Common.nodeInfo[node[i]].Name == "C6")//C2,4,6准备出空架子,A2需要料
{ {
int n = Common.nodeInfo.FindIndex(s => s.Name == "C7" && s.Action == ClientAction.NeedEnter && s.AgvName == "" && s.IsUse); int n = Common.nodeInfo.FindIndex(s => s.Name == "C7" && s.Action == ClientAction.NeedEnter && s.AgvName == "" && s.IsUse);
if (n == -1) n = Common.nodeInfo.FindIndex(s => s.Name == "A2" && s.Action == ClientAction.NeedEnter && s.AgvName == "" && s.IsUse); if (n == -1) n = Common.nodeInfo.FindIndex(s => s.Name == "A2" && s.Action == ClientAction.NeedEnter && s.AgvName == "" && s.IsUse);
...@@ -589,9 +694,9 @@ namespace BLL ...@@ -589,9 +694,9 @@ namespace BLL
break; break;
} }
} }
else if (Common.nodeInfo[node[i]].Name == "C8")//C8出往A2 else if (Common.nodeInfo[node[i]].Name == "C8")//C8出往A8
{ {
int n = Common.nodeInfo.FindIndex(s => s.Name == "A2" && s.Action == ClientAction.NeedEnter && s.AgvName == "" && s.IsUse); int n = Common.nodeInfo.FindIndex(s => s.Name == "A8" && s.Action == ClientAction.NeedEnter && s.AgvName == "" && s.IsUse);
//入料口没有占用 //入料口没有占用
if (n > -1) if (n > -1)
{ {
...@@ -719,6 +824,7 @@ namespace BLL ...@@ -719,6 +824,7 @@ namespace BLL
//小车进料 //小车进料
case "A1": case "A1":
case "A4": case "A4":
case "A7":
case "C2": case "C2":
case "C4": case "C4":
case "C6": case "C6":
...@@ -752,6 +858,7 @@ namespace BLL ...@@ -752,6 +858,7 @@ namespace BLL
//出料 //出料
case "A2": case "A2":
case "A3": case "A3":
case "A8":
case "C1": case "C1":
case "C3": case "C3":
case "C5": case "C5":
...@@ -974,6 +1081,8 @@ namespace BLL ...@@ -974,6 +1081,8 @@ namespace BLL
rtn = A1Enter(agv); break; rtn = A1Enter(agv); break;
case "A4": case "A4":
rtn = A4Enter(agv); break; rtn = A4Enter(agv); break;
case "A7":
rtn = A7Enter(agv); break;
case "B1": case "B1":
case "B2": case "B2":
case "B3": case "B3":
...@@ -1009,6 +1118,10 @@ namespace BLL ...@@ -1009,6 +1118,10 @@ namespace BLL
} }
} }
/// <summary>
/// 料架离开小车完成【空车】
/// </summary>
/// <param name="agvIdx"></param>
private void StatusFinishLeave(int agvIdx) private void StatusFinishLeave(int agvIdx)
{ {
try try
...@@ -1027,6 +1140,8 @@ namespace BLL ...@@ -1027,6 +1140,8 @@ namespace BLL
rtn = A2Leave(agv); break; rtn = A2Leave(agv); break;
case "A3": case "A3":
rtn = A3Leave(agv); break; rtn = A3Leave(agv); break;
case "A8":
rtn = A8Leave(agv); break;
case "C1": case "C1":
rtn = C1Leave(agv); break; rtn = C1Leave(agv); break;
case "C3": case "C3":
...@@ -1129,7 +1244,7 @@ namespace BLL ...@@ -1129,7 +1244,7 @@ namespace BLL
} }
/// <summary> /// <summary>
/// 小车进入A1 /// 【满车】VMI A1出带料的料架/料串
/// </summary> /// </summary>
/// <param name="agv"></param> /// <param name="agv"></param>
/// <returns></returns> /// <returns></returns>
...@@ -1141,7 +1256,7 @@ namespace BLL ...@@ -1141,7 +1256,7 @@ namespace BLL
if (agv.RFID.Length == 0) //读不到RFID的放到A2 if (agv.RFID.Length == 0) //读不到RFID的放到A2
{ {
log = agv.Name + " 没有读到RFID MoveA2"; log = agv.Name + " A7出料架," + "没有读到RFID MoveA2";
Common.log.OutInfo(log); Common.log.OutInfo(log);
Common.log.OutTextBox(log); Common.log.OutTextBox(log);
rtn = FindNeedEnter(agv, "A2"); rtn = FindNeedEnter(agv, "A2");
...@@ -1159,21 +1274,21 @@ namespace BLL ...@@ -1159,21 +1274,21 @@ namespace BLL
} }
} }
} }
else if (agv.RFID[0] == 'A') //包装料架 else if (agv.RFID[0] == 'A') //包装料入库料
{ {
nodeIdx = FindAreaBEnter(); nodeIdx = FindAreaBEnter();
if (nodeIdx > -1) if (nodeIdx > -1)
{ {
Common.log.OutInfo(agv.Name + " A料架,去B区");
rtn = MoveNode(agv, nodeIdx); rtn = MoveNode(agv, nodeIdx);
if (rtn) if (rtn)
{ {
agv.NextMission = ""; agv.NextMission = "";
Common.server.EnterShelf(agv); Common.server.EnterShelf(agv);
Common.log.OutInfo(agv.Name + " A1出料架[" + agv.RFID + "],去[" + Common.nodeInfo[nodeIdx].Name + "]入库");
} }
else else
{ {
agv.NextMission = "B区"; agv.NextMission = Common.nodeInfo[nodeIdx].Name;
//Common.mir.Add_Mission_Fleet(agv, "Common.agvMission["MoveStandbyTemp"]"); //Common.mir.Add_Mission_Fleet(agv, "Common.agvMission["MoveStandbyTemp"]");
} }
} }
...@@ -1182,7 +1297,7 @@ namespace BLL ...@@ -1182,7 +1297,7 @@ namespace BLL
if (!agv.StandbyTemp) if (!agv.StandbyTemp)
{ {
agv.StandbyTemp = true; agv.StandbyTemp = true;
log = agv.Name + " B区暂时没有位置"; log = agv.Name + " A1出料架[" + agv.RFID + "] B区暂时没有位置";
agv.NextMission = "B区"; agv.NextMission = "B区";
Common.mir.Add_Mission_Fleet(agv, Common.agvMission["MoveStandbyTemp"]); Common.mir.Add_Mission_Fleet(agv, Common.agvMission["MoveStandbyTemp"]);
Common.log.OutInfo(log); Common.log.OutInfo(log);
...@@ -1191,20 +1306,20 @@ namespace BLL ...@@ -1191,20 +1306,20 @@ namespace BLL
} }
} }
else if (agv.RFID[0] == 'B') //料串 else if (agv.RFID[0] == 'B') //料串入库
{ {
nodeIdx = FindAreaC(); nodeIdx = FindAreaC();
if (nodeIdx > -1) if (nodeIdx > -1)
{ {
Common.log.OutInfo(agv.Name + " B料架,去C区");
rtn = MoveNode(agv, nodeIdx); rtn = MoveNode(agv, nodeIdx);
if (rtn) if (rtn)
{ {
agv.NextMission = ""; agv.NextMission = "";
Common.log.OutInfo(agv.Name + " A1出料串[" + agv.RFID + "],去[" + Common.nodeInfo[nodeIdx].Name + "]入库");
} }
else else
{ {
agv.NextMission = "C区"; agv.NextMission = Common.nodeInfo[nodeIdx].Name;
//Common.mir.Add_Mission_Fleet(agv, "Common.agvMission["MoveStandbyTemp"]"); //Common.mir.Add_Mission_Fleet(agv, "Common.agvMission["MoveStandbyTemp"]");
} }
} }
...@@ -1213,7 +1328,7 @@ namespace BLL ...@@ -1213,7 +1328,7 @@ namespace BLL
if (!agv.StandbyTemp) if (!agv.StandbyTemp)
{ {
agv.StandbyTemp = true; agv.StandbyTemp = true;
log = agv.Name + " C区暂时没有位置"; log = agv.Name + " A1出料串[" + agv.RFID + "] C区暂时没有位置";
agv.NextMission = "C区"; agv.NextMission = "C区";
Common.mir.Add_Mission_Fleet(agv, Common.agvMission["MoveStandbyTemp"]); Common.mir.Add_Mission_Fleet(agv, Common.agvMission["MoveStandbyTemp"]);
Common.log.OutInfo(log); Common.log.OutInfo(log);
...@@ -1224,7 +1339,7 @@ namespace BLL ...@@ -1224,7 +1339,7 @@ namespace BLL
} }
else else
{ {
log = agv.Name + " 没有读到RFID MoveA2"; log = agv.Name + " A1出料架," + "没有读到RFID MoveA2";
Common.log.OutInfo(log); Common.log.OutInfo(log);
Common.log.OutTextBox(log); Common.log.OutTextBox(log);
rtn = FindNeedEnter(agv, "A2"); rtn = FindNeedEnter(agv, "A2");
...@@ -1249,7 +1364,188 @@ namespace BLL ...@@ -1249,7 +1364,188 @@ namespace BLL
} }
/// <summary> /// <summary>
/// 小车进入A2 /// 【满车】分盘线A7出空料架/料串
/// </summary>
/// <param name="agv"></param>
/// <returns></returns>
private bool A7Enter(Agv_Info agv)
{
string log;
int nodeIdx;
bool rtn = false;
if (agv.RFID.Length == 0) //读不到RFID的放到A8
{
log = agv.Name + " A7出料架," + "没有读到RFID MoveA8";
Common.log.OutInfo(log);
Common.log.OutTextBox(log);
rtn = FindNeedEnter(agv, "A8");
if (rtn)
{
agv.NextMission = "";
}
else
{
if (!agv.StandbyTemp)
{
agv.NextMission = "A8";
agv.StandbyTemp = true;
Common.mir.Add_Mission_Fleet(agv, Common.agvMission["MoveStandbyTemp"]);
}
}
}
else if (agv.RFID[0] == 'A') //包装料架
{
int idx = Common.agvInfo.FindIndex(s => s.Name.Equals(agv.Name));
rtn = FindAreaBOutStore(idx,out ResultType resultType);
if (rtn)
{
Common.log.OutInfo(agv.Name + " A7出料架[" + agv.RFID + "],去B区");
if (rtn)
{
agv.NextMission = "";
//Common.server.EnterShelf(agv);
}
else
{
agv.NextMission = "B区";
//Common.mir.Add_Mission_Fleet(agv, "Common.agvMission["MoveStandbyTemp"]");
}
}
else
{
if (!agv.StandbyTemp)
{
agv.StandbyTemp = true;
log = agv.Name + " A7出料架[" + agv.RFID + "] B区暂时没有位置";
agv.NextMission = "B区";
Common.mir.Add_Mission_Fleet(agv, Common.agvMission["MoveStandbyTemp"]);
Common.log.OutInfo(log);
Common.log.OutTextBox(log);
}
}
}
else if (agv.RFID[0] == 'B') //出空料串
{
nodeIdx = Common.nodeInfo.FindIndex(s => s.Name.Equals("C7") && s.Action == ClientAction.NeedEnter && s.AgvName == "" && s.IsUse);
if (nodeIdx > -1)
{
Common.log.OutInfo(agv.Name + "A7出料串[" + agv.RFID + "],去C7");
rtn = MoveNode(agv, nodeIdx);
if (rtn)
{
agv.NextMission = "";
}
else
{
agv.NextMission = "C7";
//Common.mir.Add_Mission_Fleet(agv, "Common.agvMission["MoveStandbyTemp"]");
}
}
else
{
int idx = Common.agvInfo.FindIndex(s => s.Name.Equals(agv.Name));
rtn = FindAreaBOutStore(idx,out ResultType resultType);
if (!rtn && resultType.Equals(ResultType.NoEmptyShelf))
{
rtn = FindNeedEnter(agv, "A8");
if (rtn)
{
agv.NextMission = "";
Common.log.OutInfo(agv.Name + " A7出料串[" + agv.RFID + "],C7不需要且B区有出库任务,去A8");
//Common.server.EnterShelf(agv);
}
else
{
ClientNode a8Node = Common.nodeInfo.Find(s => s.Name.Equals("A8"));
log = string.Format("{0} A7出料串[{1}],C7不需要,B区有出库任务。{2}已满,不可将A7料串放到{2}[ClientAction={3}]。需要人工干预", agv.Name,agv.RFID, a8Node.Name, a8Node.Action.ToString());
Common.log.OutInfo(log);
Common.log.OutTextBox(log);
//agv.NextMission = "C7";
//Common.mir.Add_Mission_Fleet(agv, "Common.agvMission["MoveStandbyTemp"]");
}
}
else if(!rtn)
{
if(!agv.StandbyTemp)
{
agv.StandbyTemp = true;
log = agv.Name + " A7出料串[" + agv.RFID + "] C7暂时没有位置";
agv.NextMission = "C7";
Common.mir.Add_Mission_Fleet(agv, Common.agvMission["MoveStandbyTemp"]);
Common.log.OutInfo(log);
Common.log.OutTextBox(log);
}
}
}
}
else
{
log = agv.Name + " A7出料架," + "没有读到RFID MoveA8";
Common.log.OutInfo(log);
Common.log.OutTextBox(log);
rtn = FindNeedEnter(agv, "A8");
if (rtn)
{
agv.NextMission = "";
}
else
{
if (!agv.StandbyTemp)
{
agv.StandbyTemp = true;
agv.NextMission = "A8";
Common.mir.Add_Mission_Fleet(agv, Common.agvMission["MoveStandbyTemp"]);
}
}
}
//if (rtn) agv.NextMission = "";
return rtn;
}
/// <summary>
/// 【空车】分盘线A8进料架/料串
/// </summary>
/// <param name="agv"></param>
/// <returns></returns>
private bool A8Leave(Agv_Info agv)
{
bool rtn = false;
//添加包装料仓优先
int agvIdx = Common.agvInfo.FindIndex(s => s.Name == agv.Name);
rtn = FindAreaBOutStore(agvIdx, out ResultType resultType);
if (rtn)
Common.log.OutInfo(agv.Name + " 在A8送完料架,检测到B区有出库任务,开始执行");
if (!rtn && resultType.Equals(ResultType.NoEmptyShelf))
{
rtn = FindNeedEnter(agv, "A7");
if (rtn)
Common.log.OutInfo(agv.Name + " 在A8送完料架,检测到B区有出库任务,去A7");
}
if (!rtn)
{
rtn = FindNeedLeave(agv, "A1");
if (rtn)
Common.log.OutInfo(agv.Name + " 在A8送完料架,检测到A1有出料架/任务,开始执行");
}
if (!rtn)
{
rtn = MoveStandby(agv);
Common.log.OutInfo(agv.Name + " MoveStandby " + rtn.ToString());
}
return rtn;
}
/// <summary>
/// 【空车】料架离开小车,进入A2
/// </summary> /// </summary>
/// <param name="agv"></param> /// <param name="agv"></param>
/// <returns></returns> /// <returns></returns>
...@@ -1259,13 +1555,15 @@ namespace BLL ...@@ -1259,13 +1555,15 @@ namespace BLL
//添加包装料仓优先 //添加包装料仓优先
int agvIdx = Common.agvInfo.FindIndex(s => s.Name == agv.Name); int agvIdx = Common.agvInfo.FindIndex(s => s.Name == agv.Name);
rtn = FindAreaBLeave(agvIdx); rtn = FindAreaBOutStoreAndNeedLeave(agvIdx);
Common.log.OutInfo(agv.Name + " B区 " + rtn.ToString()); if (rtn)
Common.log.OutInfo(agv.Name + " 在A2送完料架,检测到B区有出库/出料架任务,开始执行");
if (!rtn) if (!rtn)
{ {
rtn = FindNeedLeave(agv, "A1"); rtn = FindNeedLeave(agv, "A1");
Common.log.OutInfo(agv.Name + " A1 " + rtn.ToString()); if (rtn)
Common.log.OutInfo(agv.Name + " 在A2送完料架,检测到A1有出料架/任务,开始执行");
} }
if (!rtn) if (!rtn)
...@@ -1277,30 +1575,50 @@ namespace BLL ...@@ -1277,30 +1575,50 @@ namespace BLL
} }
/// <summary>
/// 【空车】料架离开小车,进入A3
/// </summary>
/// <param name="agv"></param>
/// <returns></returns>
private bool A3Leave(Agv_Info agv) private bool A3Leave(Agv_Info agv)
{ {
bool rtn = FindNeedLeave(agv, "C8"); bool rtn = FindNeedLeave(agv, "C8");
Common.log.OutInfo(agv.Name + " C8 " + rtn.ToString()); if (rtn)
Common.log.OutInfo(agv.Name + " 在A3送完料架,检测到C8出料串任务,开始执行");
if (!rtn) if (!rtn)
{ {
rtn = FindNeedLeave(agv, "C2"); rtn = FindNeedLeave(agv, "C2");
Common.log.OutInfo(agv.Name + " C2 " + rtn.ToString()); if (rtn)
Common.log.OutInfo(agv.Name + " 在A3送完料架,检测到C2出料串任务,开始执行");
} }
if (!rtn) if (!rtn)
{ {
rtn = MoveStandby(agv); rtn = MoveStandby(agv);
Common.log.OutInfo(agv.Name + " MoveStandby " + rtn.ToString()); if (rtn)
Common.log.OutInfo(agv.Name + " 在A3送完料架,C8,C2暂无任务,回待机位");
} }
return rtn; return rtn;
} }
/// <summary>
/// A4出料架,用于包装仓出库【满车】
/// </summary>
/// <param name="agv"></param>
/// <returns></returns>
private bool A4Enter(Agv_Info agv) private bool A4Enter(Agv_Info agv)
{ {
return FindNeedEnterWithMark(agv); return FindNeedEnterWithMark(agv);
} }
/// <summary>
/// B区域出料架,【满车】
/// </summary>
/// <param name="agv"></param>
/// <returns></returns>
private bool B123456Enter(Agv_Info agv) private bool B123456Enter(Agv_Info agv)
{ {
int nodeIdx; int nodeIdx;
...@@ -1321,10 +1639,10 @@ namespace BLL ...@@ -1321,10 +1639,10 @@ namespace BLL
string[] ss = agv.Mark.Split(','); string[] ss = agv.Mark.Split(',');
switch (ss[1]) switch (ss[1])
{ {
case "urgent": name = "A2"; break; //紧急 case "urgent": name = "A8"; break; //紧急
case "cut": name = "A2"; break; //分盘 case "cut": name = "A8"; break; //分盘
case "pack": name = "A3"; break; //包装 case "pack": name = "A3"; break; //包装
default: name = "A2"; break; default: name = "A8"; break;
} }
rtn = FindNeedEnter(agv, name); rtn = FindNeedEnter(agv, name);
if (rtn) if (rtn)
...@@ -1392,35 +1710,49 @@ namespace BLL ...@@ -1392,35 +1710,49 @@ namespace BLL
} }
} }
/// <summary>
/// B区域进料架,【空车】
/// </summary>
/// <param name="agv"></param>
/// <returns></returns>
private bool B123456Leave(Agv_Info agv) private bool B123456Leave(Agv_Info agv)
{ {
bool rtn = false; bool rtn = false;
//添加包装料仓优先 //添加包装料仓优先
int agvIdx = Common.agvInfo.FindIndex(s => s.Name == agv.Name); int agvIdx = Common.agvInfo.FindIndex(s => s.Name == agv.Name);
rtn = FindAreaBLeave(agvIdx); rtn = FindAreaBOutStoreAndNeedLeave(agvIdx);
Common.log.OutInfo(agv.Name + " B区 " + rtn.ToString()); if (rtn)
Common.log.OutInfo(agv.Name + " 在B区域送完料架,检测到B区域有出库/出料架任务,开始执行");
if (!rtn) if (!rtn)
{ {
rtn = FindNeedLeave(agv, "C8"); rtn = FindNeedLeave(agv, "C8");
Common.log.OutInfo(agv.Name + " C8 " + rtn.ToString()); if (rtn)
Common.log.OutInfo(agv.Name + " 在B区域送完料架,检测到C8出料串任务,开始执行");
} }
if (!rtn) if (!rtn)
{ {
rtn = FindNeedLeave(agv, "C2"); rtn = FindNeedLeave(agv, "C2");
Common.log.OutInfo(agv.Name + " C2 " + rtn.ToString()); if (rtn)
Common.log.OutInfo(agv.Name + " 在B区域送完料架,检测到C2出料串任务,开始执行");
} }
if (!rtn) if (!rtn)
{ {
rtn = MoveStandby(agv); rtn = MoveStandby(agv);
Common.log.OutInfo(agv.Name + " MoveStandby " + rtn.ToString()); if (rtn)
Common.log.OutInfo(agv.Name + " 在B区域送完料架,C8,C2暂无任务,回待机位");
} }
return rtn; return rtn;
} }
/// <summary>
/// 【空车】料串离开小车,进入C1
/// </summary>
/// <param name="agv"></param>
/// <returns></returns>
private bool C1Leave(Agv_Info agv) private bool C1Leave(Agv_Info agv)
{ {
bool rtn = false; bool rtn = false;
...@@ -1428,11 +1760,13 @@ namespace BLL ...@@ -1428,11 +1760,13 @@ namespace BLL
if (nodeIdx > -1) if (nodeIdx > -1)
{ {
rtn = FindNeedLeave(agv, "C4"); rtn = FindNeedLeave(agv, "C4");
Common.log.OutInfo(agv.Name + " C4 " + rtn.ToString()); if (rtn)
Common.log.OutInfo(agv.Name + " 在C1送完料串,检测到C4出料串任务[A2可以进料],开始执行");
if (!rtn) if (!rtn)
{ {
rtn = FindNeedLeave(agv, "C6"); rtn = FindNeedLeave(agv, "C6");
Common.log.OutInfo(agv.Name + " C6 " + rtn.ToString()); if (rtn)
Common.log.OutInfo(agv.Name + " 在C1送完料串,检测到C6出料串任务[A2可以进料],开始执行");
} }
} }
...@@ -1442,11 +1776,13 @@ namespace BLL ...@@ -1442,11 +1776,13 @@ namespace BLL
if (nodeIdx > -1) if (nodeIdx > -1)
{ {
rtn = FindNeedLeave(agv, "C4"); rtn = FindNeedLeave(agv, "C4");
Common.log.OutInfo(agv.Name + " C4 " + rtn.ToString()); if (rtn)
Common.log.OutInfo(agv.Name + " 在C1送完料串,检测到C4出料串任务[A2不可以进料,C7可以进料],开始执行");
if (!rtn) if (!rtn)
{ {
rtn = FindNeedLeave(agv, "C6"); rtn = FindNeedLeave(agv, "C6");
Common.log.OutInfo(agv.Name + " C6 " + rtn.ToString()); if (rtn)
Common.log.OutInfo(agv.Name + " 在C1送完料串,检测到C6出料串任务[A2不可以进料,C7可以进料],开始执行");
} }
} }
} }
...@@ -1454,22 +1790,30 @@ namespace BLL ...@@ -1454,22 +1790,30 @@ namespace BLL
if (!rtn) if (!rtn)
{ {
rtn = FindNeedLeave(agv, "A1"); rtn = FindNeedLeave(agv, "A1");
Common.log.OutInfo(agv.Name + " A1 " + rtn.ToString()); if (rtn)
Common.log.OutInfo(agv.Name + " 在C1送完料串,检测到A1出料架/料串任务,开始执行");
} }
if (!rtn) if (!rtn)
{ {
rtn = FindNeedLeave(agv, "D2"); rtn = FindNeedLeave(agv, "D2");
Common.log.OutInfo(agv.Name + " D2 " + rtn.ToString()); if (rtn)
Common.log.OutInfo(agv.Name + " 在C1送完料串,检测到D2出料串任务[A1没有出料串任务],开始执行");
} }
if (!rtn) if (!rtn)
{ {
rtn = MoveStandby(agv); rtn = MoveStandby(agv);
Common.log.OutInfo(agv.Name + " MoveStandby " + rtn.ToString()); if (rtn)
Common.log.OutInfo(agv.Name + " 在C1送完料串,C4,C6,A1,D2暂无任务,回待机位");
} }
return rtn; return rtn;
} }
/// <summary>
/// 【空车】料串离开小车,进入C3
/// </summary>
/// <param name="agv"></param>
/// <returns></returns>
private bool C3Leave(Agv_Info agv) private bool C3Leave(Agv_Info agv)
{ {
bool rtn = false; bool rtn = false;
...@@ -1477,11 +1821,13 @@ namespace BLL ...@@ -1477,11 +1821,13 @@ namespace BLL
if (nodeIdx > -1) if (nodeIdx > -1)
{ {
rtn = FindNeedLeave(agv, "C4"); rtn = FindNeedLeave(agv, "C4");
Common.log.OutInfo(agv.Name + " C4 " + rtn.ToString()); if (rtn)
Common.log.OutInfo(agv.Name + " 在C3送完料串,检测到C4出料串任务[A2可以进料],开始执行");
if (!rtn) if (!rtn)
{ {
rtn = FindNeedLeave(agv, "C6"); rtn = FindNeedLeave(agv, "C6");
Common.log.OutInfo(agv.Name + " C6 " + rtn.ToString()); if (rtn)
Common.log.OutInfo(agv.Name + " 在C3送完料串,检测到C6出料串任务[A2可以进料],开始执行");
} }
} }
...@@ -1491,11 +1837,13 @@ namespace BLL ...@@ -1491,11 +1837,13 @@ namespace BLL
if (nodeIdx > -1) if (nodeIdx > -1)
{ {
rtn = FindNeedLeave(agv, "C4"); rtn = FindNeedLeave(agv, "C4");
Common.log.OutInfo(agv.Name + " C4 " + rtn.ToString()); if (rtn)
Common.log.OutInfo(agv.Name + " 在C3送完料串,检测到C4出料串任务[A2不可以进料,C7可以进料],开始执行");
if (!rtn) if (!rtn)
{ {
rtn = FindNeedLeave(agv, "C6"); rtn = FindNeedLeave(agv, "C6");
Common.log.OutInfo(agv.Name + " C6 " + rtn.ToString()); if (rtn)
Common.log.OutInfo(agv.Name + " 在C3送完料串,检测到C6出料串任务[A2不可以进料,C7可以进料],开始执行");
} }
} }
} }
...@@ -1504,17 +1852,20 @@ namespace BLL ...@@ -1504,17 +1852,20 @@ namespace BLL
if (!rtn) if (!rtn)
{ {
rtn = FindNeedLeave(agv, "A1"); rtn = FindNeedLeave(agv, "A1");
Common.log.OutInfo(agv.Name + " A1 " + rtn.ToString()); if (rtn)
Common.log.OutInfo(agv.Name + " 在C3送完料串,检测到A1出料架/料串任务,开始执行");
} }
if (!rtn) if (!rtn)
{ {
rtn = FindNeedLeave(agv, "D2"); rtn = FindNeedLeave(agv, "D2");
Common.log.OutInfo(agv.Name + " D2 " + rtn.ToString()); if (rtn)
Common.log.OutInfo(agv.Name + " 在C3送完料串,检测到D2出料串任务[A1没有出料串任务],开始执行");
} }
if (!rtn) if (!rtn)
{ {
rtn = MoveStandby(agv); rtn = MoveStandby(agv);
Common.log.OutInfo(agv.Name + " MoveStandby " + rtn.ToString()); if (rtn)
Common.log.OutInfo(agv.Name + " 在C3送完料串,C4,C6,A1,D2暂无任务,回待机位");
} }
...@@ -1526,6 +1877,11 @@ namespace BLL ...@@ -1526,6 +1877,11 @@ namespace BLL
return rtn; return rtn;
} }
/// <summary>
/// 【空车】料串离开小车,进入C5
/// </summary>
/// <param name="agv"></param>
/// <returns></returns>
private bool C5Leave(Agv_Info agv) private bool C5Leave(Agv_Info agv)
{ {
bool rtn = false; bool rtn = false;
...@@ -1533,7 +1889,8 @@ namespace BLL ...@@ -1533,7 +1889,8 @@ namespace BLL
if (nodeIdx > -1) if (nodeIdx > -1)
{ {
rtn = FindNeedLeave(agv, "C6"); rtn = FindNeedLeave(agv, "C6");
Common.log.OutInfo(agv.Name + " C6 " + rtn.ToString()); if (rtn)
Common.log.OutInfo(agv.Name + " 在C5送完料串,检测到C6出料串任务[A2可以进料],开始执行");
} }
if (!rtn) if (!rtn)
...@@ -1542,24 +1899,28 @@ namespace BLL ...@@ -1542,24 +1899,28 @@ namespace BLL
if (nodeIdx > -1) if (nodeIdx > -1)
{ {
rtn = FindNeedLeave(agv, "C6"); rtn = FindNeedLeave(agv, "C6");
Common.log.OutInfo(agv.Name + " C6 " + rtn.ToString()); if (rtn)
Common.log.OutInfo(agv.Name + " 在C5送完料串,检测到C6出料串任务[A2不可以进料,C7可以进料],开始执行");
} }
} }
if (!rtn) if (!rtn)
{ {
rtn = FindNeedLeave(agv, "A1"); rtn = FindNeedLeave(agv, "A1");
Common.log.OutInfo(agv.Name + " A1 " + rtn.ToString()); if (rtn)
Common.log.OutInfo(agv.Name + " 在C5送完料串,检测到A1出料架/料串任务,开始执行");
} }
if (!rtn) if (!rtn)
{ {
rtn = FindNeedLeave(agv, "D2"); rtn = FindNeedLeave(agv, "D2");
Common.log.OutInfo(agv.Name + " D2 " + rtn.ToString()); if (rtn)
Common.log.OutInfo(agv.Name + " 在C5送完料串,检测到D2出料串任务[A1没有出料串任务],开始执行");
} }
if (!rtn) if (!rtn)
{ {
rtn = MoveStandby(agv); rtn = MoveStandby(agv);
Common.log.OutInfo(agv.Name + " MoveStandby " + rtn.ToString()); if (rtn)
Common.log.OutInfo(agv.Name + " 在C3送完料串,C6,A1,D2暂无任务,回待机位");
} }
//bool rtn = FindNeedLeave(agv, "C6"); //bool rtn = FindNeedLeave(agv, "C6");
...@@ -1568,6 +1929,11 @@ namespace BLL ...@@ -1568,6 +1929,11 @@ namespace BLL
return rtn; return rtn;
} }
/// <summary>
/// 【空车】料串离开小车,进入C7
/// </summary>
/// <param name="agv"></param>
/// <returns></returns>
private bool C7Leave(Agv_Info agv) private bool C7Leave(Agv_Info agv)
{ {
bool rtn = false; bool rtn = false;
...@@ -1575,17 +1941,20 @@ namespace BLL ...@@ -1575,17 +1941,20 @@ namespace BLL
if (nodeIdx > -1) if (nodeIdx > -1)
{ {
rtn = FindNeedLeave(agv, "C8"); rtn = FindNeedLeave(agv, "C8");
Common.log.OutInfo(agv.Name + " C8 " + rtn.ToString()); if (rtn)
Common.log.OutInfo(agv.Name + " 在C7送完料串,检测到C8出料串任务[A2可以进料],开始执行");
if (!rtn) if (!rtn)
{ {
rtn = FindNeedLeave(agv, "C2"); rtn = FindNeedLeave(agv, "C2");
Common.log.OutInfo(agv.Name + " C2 " + rtn.ToString()); if (rtn)
Common.log.OutInfo(agv.Name + " 在C7送完料串,检测到C2出料串任务[A2可以进料,C8无出料串任务],开始执行");
} }
} }
if (!rtn) if (!rtn)
{ {
rtn = MoveStandby(agv); rtn = MoveStandby(agv);
Common.log.OutInfo(agv.Name + " MoveStandby " + rtn.ToString()); if (rtn)
Common.log.OutInfo(agv.Name + " 在C7送完料串,C8,C2暂无任务,回待机位");
} }
//bool rtn = FindNeedLeave(agv, "C8"); //bool rtn = FindNeedLeave(agv, "C8");
...@@ -1594,6 +1963,11 @@ namespace BLL ...@@ -1594,6 +1963,11 @@ namespace BLL
return rtn; return rtn;
} }
/// <summary>
/// 【满车】料串进入小车,离开C2,4,6
/// </summary>
/// <param name="agv"></param>
/// <returns></returns>
private bool C246Enter(Agv_Info agv) private bool C246Enter(Agv_Info agv)
{ {
string log; string log;
...@@ -1604,6 +1978,7 @@ namespace BLL ...@@ -1604,6 +1978,7 @@ namespace BLL
if (rtn) if (rtn)
{ {
agv.NextMission = ""; agv.NextMission = "";
Common.log.OutInfo(agv.Name + " 在C2/4/6进入空料串,检测到C7需要料串,开始执行");
return true; return true;
} }
...@@ -1611,6 +1986,7 @@ namespace BLL ...@@ -1611,6 +1986,7 @@ namespace BLL
if (rtn) if (rtn)
{ {
agv.NextMission = ""; agv.NextMission = "";
Common.log.OutInfo(agv.Name + " 在C2/4/6进入空料串,检测到D1需要料串,开始执行");
return true; return true;
} }
...@@ -1618,6 +1994,7 @@ namespace BLL ...@@ -1618,6 +1994,7 @@ namespace BLL
if (rtn) if (rtn)
{ {
agv.NextMission = ""; agv.NextMission = "";
Common.log.OutInfo(agv.Name + " 在C2/4/6进入空料串,检测到A2需要料串,开始执行");
return true; return true;
} }
...@@ -1625,26 +2002,33 @@ namespace BLL ...@@ -1625,26 +2002,33 @@ namespace BLL
{ {
agv.StandbyTemp = true; agv.StandbyTemp = true;
agv.NextMission = "A2"; agv.NextMission = "A2";
Common.mir.Add_Mission_Fleet(agv, Common.agvMission["MoveStandbyTemp"]); rtn = Common.mir.Add_Mission_Fleet(agv, Common.agvMission["MoveStandbyTemp"]);
if(rtn)
Common.log.OutInfo(agv.Name + " 在C2/4/6进入空料串,C7,D1,A2不需要料串,回待机位");
return false; return false;
} }
return false; return false;
} }
/// <summary>
/// 【满车】料串进入小车,离开C8
/// </summary>
/// <param name="agv"></param>
/// <returns></returns>
private bool C8Enter(Agv_Info agv) private bool C8Enter(Agv_Info agv)
{ {
string name; string name;
switch (agv.Mark) switch (agv.Mark)
{ {
case "urgent": name = "A2"; break; //紧急 case "urgent": name = "A8"; break; //紧急
case "cut": name = "A2"; break; //分盘 case "cut": name = "A8"; break; //分盘
default: name = "A2"; break; default: name = "A8"; break;
} }
Common.log.OutInfo("C8Enter Mark=" + agv.Mark); Common.log.OutInfo("C8Enter Mark=" + agv.Mark);
bool rtn = FindNeedEnter(agv, name); bool rtn = FindNeedEnter(agv, name);
if (rtn) if (rtn)
{ {
agv.NextMission = ""; agv.NextMission = "";
Common.log.OutInfo("C8出满料串到A8 [Mark=" + agv.Mark+"]");
} }
else else
{ {
...@@ -1652,7 +2036,9 @@ namespace BLL ...@@ -1652,7 +2036,9 @@ namespace BLL
{ {
agv.StandbyTemp = true; agv.StandbyTemp = true;
agv.NextMission = name; agv.NextMission = name;
Common.mir.Add_Mission_Fleet(agv, Common.agvMission["MoveStandbyTemp"]); rtn = Common.mir.Add_Mission_Fleet(agv, Common.agvMission["MoveStandbyTemp"]);
if(rtn)
Common.log.OutInfo("C8出满料串 [Mark=" + agv.Mark + "],A8暂时无法进入,先回待机位");
} }
} }
...@@ -1660,34 +2046,47 @@ namespace BLL ...@@ -1660,34 +2046,47 @@ namespace BLL
} }
/// <summary>
/// 【空车】料串离开小车,进入D1(点料机入口)
/// </summary>
/// <param name="agv"></param>
/// <returns></returns>
private bool D1Leave(Agv_Info agv) private bool D1Leave(Agv_Info agv)
{ {
bool rtn = false; bool rtn = false;
//添加包装料仓优先 //添加包装料仓优先
int agvIdx = Common.agvInfo.FindIndex(s => s.Name == agv.Name); int agvIdx = Common.agvInfo.FindIndex(s => s.Name == agv.Name);
rtn = FindAreaBLeave(agvIdx); rtn = FindAreaBOutStoreAndNeedLeave(agvIdx);
Common.log.OutInfo(agv.Name + " B区 " + rtn.ToString()); if(rtn)
Common.log.OutInfo(agv.Name + " 在D1送完料串,检测到B区域出库/出料架,开始执行");
if (!rtn) if (!rtn)
{ {
rtn = FindNeedLeave(agv, "C8"); rtn = FindNeedLeave(agv, "C8");
Common.log.OutInfo(agv.Name + " C8 " + rtn.ToString()); if (rtn)
Common.log.OutInfo(agv.Name + " 在D1送完料串,检测到C8出料串,开始执行");
} }
if (!rtn) if (!rtn)
{ {
rtn = FindNeedLeave(agv, "C2"); rtn = FindNeedLeave(agv, "C2");
Common.log.OutInfo(agv.Name + " C2 " + rtn.ToString()); if (rtn)
Common.log.OutInfo(agv.Name + " 在D1送完料串,检测到C2出料串,开始执行");
} }
if (!rtn) if (!rtn)
{ {
rtn = MoveStandby(agv); rtn = MoveStandby(agv);
Common.log.OutInfo(agv.Name + " MoveStandby " + rtn.ToString()); if (rtn)
Common.log.OutInfo(agv.Name + " 在D1送完料串,C8,C2无出料串任务,回待机位");
} }
return rtn; return rtn;
} }
/// <summary>
/// 【满车】料串进入小车,离开D2(点料机出口)
/// </summary>
/// <param name="agv"></param>
/// <returns></returns>
private bool D2Enter(Agv_Info agv) private bool D2Enter(Agv_Info agv)
{ {
string log; string log;
...@@ -1697,11 +2096,11 @@ namespace BLL ...@@ -1697,11 +2096,11 @@ namespace BLL
nodeIdx = FindAreaC(); nodeIdx = FindAreaC();
if (nodeIdx > -1) if (nodeIdx > -1)
{ {
Common.log.OutInfo(agv.Name + " B料架,去C区");
rtn = MoveNode(agv, nodeIdx); rtn = MoveNode(agv, nodeIdx);
if (rtn) if (rtn)
{ {
agv.NextMission = ""; agv.NextMission = "";
Common.log.OutInfo(agv.Name + " 在D2进入料串,送往C区");
} }
else else
{ {
...@@ -1714,7 +2113,7 @@ namespace BLL ...@@ -1714,7 +2113,7 @@ namespace BLL
if (!agv.StandbyTemp) if (!agv.StandbyTemp)
{ {
agv.StandbyTemp = true; agv.StandbyTemp = true;
log = agv.Name + " C区暂时没有位置"; log = agv.Name + " D2[点料机]出料架 C区暂时没有位置";
agv.NextMission = "C区"; agv.NextMission = "C区";
Common.mir.Add_Mission_Fleet(agv, Common.agvMission["MoveStandbyTemp"]); Common.mir.Add_Mission_Fleet(agv, Common.agvMission["MoveStandbyTemp"]);
Common.log.OutInfo(log); Common.log.OutInfo(log);
...@@ -1725,6 +2124,7 @@ namespace BLL ...@@ -1725,6 +2124,7 @@ namespace BLL
return rtn; return rtn;
} }
private int FindAreaC() private int FindAreaC()
{ {
//int idx; //int idx;
...@@ -1790,7 +2190,7 @@ namespace BLL ...@@ -1790,7 +2190,7 @@ namespace BLL
} }
/// <summary> /// <summary>
/// B区域入 /// B区域入
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
private int FindAreaBEnter() private int FindAreaBEnter()
...@@ -1846,54 +2246,287 @@ namespace BLL ...@@ -1846,54 +2246,287 @@ namespace BLL
} }
/// <summary> /// <summary>
/// B区域出 /// B区域出库/出料架
/// </summary> /// </summary>
/// <param name="agvIdx"></param> /// <param name="agvIdx"></param>
/// <returns></returns> /// <returns></returns>
private bool FindAreaBLeave(int agvIdx) private bool FindAreaBOutStoreAndNeedLeave(int agvIdx)
{
if (FindAreaBOutStore(agvIdx,out ResultType resultType))
return true;
if (FindAreaBNeedLeave(agvIdx))
return true;
return false;
#region 老程序-不用
//string log;
//int nodeIdx = -1;
//bool rtn;
//Agv_Info agv = Common.agvInfo[agvIdx];
//List<int> node = new List<int>();
//ClientNode a7Node = Common.nodeInfo.Find(s => s.Name.Equals("A7"));
//ClientNode a4Node = Common.nodeInfo.Find(s => s.Name.Equals("A4"));
//#region B区域,需要出库,先拿料架
////Mark.Length>1防止Mark为0的情况,Mark=0是VMI的进料
//nodeIdx = Common.nodeInfo.FindIndex(s => s.Action == ClientAction.NeedEnter && s.AgvName.Equals("") && s.Mark.Length > 1 && s.IsUse);
//if (nodeIdx == -1)
//{
// Common.log.OutInfo("B区没有找到NeedEnter的节点");
//}
////B区域有料需要出库
//else
//{
// int n = Marks.FindIndex(t => t == Common.nodeInfo[nodeIdx].Mark);
// //Mark没有被缓存
// if (n == -1)
// {
// n = Common.nodeInfo.FindIndex(s => s.Name == "A7" && s.Action == ClientAction.NeedLeave &&
// s.RFID.StartsWith("A") && s.AgvName.Equals("") && s.IsUse);
// //A7有空料架用于包装仓出库
// if (n > -1)
// {
// agv.Place = Common.nodeInfo[n].Name;
// agv.Mark = Common.nodeInfo[nodeIdx].Mark;
// //agv.CloseDoor = false;
// rtn = Common.mir.Add_Mission_Fleet(agv, Common.agvMission["Move" + agv.Place]);
// if (rtn)
// {
// agv.CloseDoor = false;
// Common.nodeInfo[n].AgvName = agv.Name;
// agv.TaskSend = true;
// //_mark.Add(Common.nodeInfo[nodeIdx].Mark);
// MarkAdd(Common.nodeInfo[nodeIdx].Mark);
// Common.log.OutString("Mark缓存 " + string.Join(",", Marks.ToArray()));
// log = string.Format("{0} Move To {1}[{2}] [{3}]", agv.Name, agv.Place,
// Common.nodeInfo[nodeIdx].Action.ToString(), Common.nodeInfo[nodeIdx].Mark);
// Common.log.OutInfo(log);
// Common.log.OutTextBox(log);
// Common.mir.State_Ready(agv);
// Common.server.NodeRefresh(n);
// AgvChanged?.Invoke(agvIdx);
// return true;
// }
// else
// {
// agv.TaskSend = false;
// log = string.Format("{0} Move To {1} 失败", agv.Name, agv.Place);
// //防止上一个任务已执行但返回失败时,删除任务
// //Common.mir.Del_Mission(agv);
// Common.log.OutInfo(log);
// Common.log.OutTextBox(log);
// }
// }
// else
// {
// log = string.Format("{0}无可用料架 [ClientAction={1}] [RFID={2}]", a7Node.Name, a7Node.Action.ToString(), a7Node.RFID);
// Common.log.OutInfo(log);
// Common.log.OutTextBox(log);
// n = Common.nodeInfo.FindIndex(s => s.Name == "A4" && s.Action == ClientAction.NeedLeave && s.AgvName.Equals("") && s.IsUse);
// //A4无空架子
// if (n == -1)
// {
// nodeIdx = -1;
// log = string.Format("{0}无可用料架 [ClientAction={1}] [RFID={2}]", a4Node.Name, a4Node.Action.ToString(), a4Node.RFID);
// Common.log.OutInfo(log);
// Common.log.OutTextBox(log);
// //n = Common.nodeInfo.FindIndex(s => s.Name == "A8" && s.Action == ClientAction.NeedEnter && s.AgvName.Equals("") && s.IsUse);
// //if (n == -1)
// //{
// // ClientNode a8Node = Common.nodeInfo.Find(s => s.Name.Equals("A8"));
// // log = string.Format("A4、A7均无空架用于包装仓出库,且{0}已满,不可将A7架子放到{0}。需要人工干预 [ClientAction={1}]", a8Node.Name, a8Node.Action.ToString());
// // Common.log.OutInfo(log);
// // Common.log.OutTextBox(log);
// //}
// ////A7,A4均无空架子,可将A7的架子移动到A8
// //else
// //{
// // agv.Place = "A7";
// // //agv.Mark = Common.nodeInfo[nodeIdx].Mark;
// // //agv.CloseDoor = false;
// // rtn = Common.mir.Add_Mission_Fleet(agv, Common.agvMission["Move" + agv.Place]);
// // if (rtn)
// // {
// // agv.CloseDoor = false;
// // Common.nodeInfo[n].AgvName = agv.Name;
// // agv.TaskSend = true;
// // //_mark.Add(Common.nodeInfo[nodeIdx].Mark);
// // //MarkAdd(Common.nodeInfo[nodeIdx].Mark);
// // log = string.Format("{0} Move To {1}[{2}] ", agv.Name, agv.Place,
// // "A7,A4无料架用与包装仓");
// // Common.log.OutInfo(log);
// // Common.log.OutTextBox(log);
// // Common.mir.State_Ready(agv);
// // Common.server.NodeRefresh(n);
// // AgvChanged?.Invoke(agvIdx);
// // return true;
// // }
// // else
// // {
// // agv.TaskSend = false;
// // log = string.Format("{0} Move To {1}失败[{2}] ", agv.Name, agv.Place,
// // "A7,A4无料架用与包装仓");
// // //防止上一个任务已执行但返回失败时,删除任务
// // //Common.mir.Del_Mission(agv);
// // Common.log.OutInfo(log);
// // Common.log.OutTextBox(log);
// // }
// //}
// }
// //A4没有被占用
// else
// {
// agv.Place = Common.nodeInfo[n].Name;
// agv.Mark = Common.nodeInfo[nodeIdx].Mark;
// //agv.CloseDoor = false;
// rtn = Common.mir.Add_Mission_Fleet(agv, Common.agvMission["Move" + agv.Place]);
// if (rtn)
// {
// agv.CloseDoor = false;
// Common.nodeInfo[n].AgvName = agv.Name;
// agv.TaskSend = true;
// //_mark.Add(Common.nodeInfo[nodeIdx].Mark);
// MarkAdd(Common.nodeInfo[nodeIdx].Mark);
// Common.log.OutString("Mark缓存 " + string.Join(",", Marks.ToArray()));
// log = string.Format("{0} Move To {1}[{2}] [{3}]", agv.Name, agv.Place,
// Common.nodeInfo[nodeIdx].Action.ToString(), Common.nodeInfo[nodeIdx].Mark);
// Common.log.OutInfo(log);
// Common.log.OutTextBox(log);
// Common.mir.State_Ready(agv);
// Common.server.NodeRefresh(n);
// AgvChanged?.Invoke(agvIdx);
// return true;
// }
// else
// {
// agv.TaskSend = false;
// log = string.Format("{0} Move To {1} 失败", agv.Name, agv.Place);
// //防止上一个任务已执行但返回失败时,删除任务
// //Common.mir.Del_Mission(agv);
// Common.log.OutInfo(log);
// Common.log.OutTextBox(log);
// }
// }
// }
// }
// else
// {
// Common.log.OutInfo("缓存中已存在 " + Common.nodeInfo[nodeIdx].Mark);
// nodeIdx = -1;
// }
//}
//#endregion
////搜索包装仓需要出料架的节点
//for (int i = 0; i < Common.nodeInfo.Count; i++)
//{
// if (Common.nodeInfo[i].Action == ClientAction.NeedLeave && Common.nodeInfo[i].Name.StartsWith("B") &&
// Common.nodeInfo[i].AgvName == "" && Common.nodeInfo[i].IsUse)
// {
// node.Add(i);
// }
//}
////测试,临时的
////for (int i = 0; i < node.Count; i++)
////{
//// Common.log.OutString(agv.Name + " Test " + node[i] + " Name=" + Common.nodeInfo[node[i]].Name + " Mark=" + Common.nodeInfo[node[i]].Mark);
////}
//nodeIdx = -1;
//if (node.Count == 0)
//{
// nodeIdx = -1;
// Common.log.OutInfo(agv.Name + " 包装仓没有需要出料架的");
//}
//else
//{
// //按顺序出包装仓的料架
// for (int i = 0; i < node.Count; i++)
// {
// if (Common.nodeInfo[node[i]].Mark == "0")
// {
// nodeIdx = node[i];
// break;
// }
// else
// {
// //在Mark缓存中,按照先后顺序出料,只有第一个出完才能出第二个
// int idx = Marks.FindIndex(s => s == Common.nodeInfo[node[i]].Mark);
// if (idx == 0)
// {
// nodeIdx = node[i];
// break;
// }
// }
// }
// if (nodeIdx > -1)
// {
// Common.log.OutInfo("包装仓出料架: " + agv.Name + " " + Common.nodeInfo[nodeIdx].Name + "[Mark=" + Common.nodeInfo[nodeIdx].Mark + "]");
// MoveNode(agv, nodeIdx);
// return true;
// }
//}
//return false;
#endregion
}
/// <summary>
/// B区域出库
/// </summary>
/// <param name="agvIdx"></param>
/// <returns>true:有出库任务,并拉空架子;false:无出库任务/有出库但无空架子</returns>
private bool FindAreaBOutStore(int agvIdx,out ResultType resultType)
{ {
string log; string log;
int nodeIdx = -1; int nodeIdx = -1;
bool rtn; bool rtn;
resultType = ResultType.None;
Agv_Info agv = Common.agvInfo[agvIdx]; Agv_Info agv = Common.agvInfo[agvIdx];
List<int> node = new List<int>(); List<int> node = new List<int>();
ClientNode a7Node = Common.nodeInfo.Find(s => s.Name.Equals("A7"));
ClientNode a4Node = Common.nodeInfo.Find(s => s.Name.Equals("A4"));
//B区域,需要出料,先拿料架 // B区域,需要出库,先拿料架
//Mark.Length>1防止Mark为0的情况,Mark=0是VMI的进料 //Mark.Length>1防止Mark为0的情况,Mark=0是VMI的进料
nodeIdx = Common.nodeInfo.FindIndex(s => s.Action == ClientAction.NeedEnter && s.AgvName.Equals("") && s.Mark.Length > 1 && s.IsUse); nodeIdx = Common.nodeInfo.FindIndex(s => s.Action == ClientAction.NeedEnter && s.AgvName.Equals("") && s.Mark.Length > 1 && s.IsUse);
if (nodeIdx == -1) if (nodeIdx == -1)
{ {
Common.log.OutInfo(agv.Name + " B区没有找到新的NeedEnter的节点"); Common.log.OutInfo("B区没有找到NeedEnter的节点");
} }
//B区域有料需要出库
else else
{ {
//Mark没有被缓存
int n = Marks.FindIndex(t => t == Common.nodeInfo[nodeIdx].Mark); int n = Marks.FindIndex(t => t == Common.nodeInfo[nodeIdx].Mark);
//Mark没有被缓存
if (n == -1) if (n == -1)
{ {
//A4没有被占用 n = Common.nodeInfo.FindIndex(s => s.Name == "A7" && s.Action == ClientAction.NeedLeave &&
n = Common.nodeInfo.FindIndex(s => s.Name == "A4" && s.Action == ClientAction.NeedLeave && s.AgvName.Equals("") && s.IsUse); s.RFID.StartsWith("A") && s.AgvName.Equals("") && s.IsUse);
if (n == -1) //A7有空料架用于包装仓出库
if (n > -1)
{ {
nodeIdx = -1;
Common.log.OutInfo("A4不是NeedLeave或被占用");
Common.log.OutTextBox("A4没有架子或被占用");
}
else
{
//清除当前任务点
int idx = Common.nodeInfo.FindIndex(s => s.Name == agv.Place);
if (idx > -1)
{
Common.nodeInfo[idx].AgvName = "";
Common.server.NodeRefresh(idx);
}
else
{
log = "清理AgvName,没有找到 " + agv.Name;
Common.log.OutInfo(log);
}
agv.Place = Common.nodeInfo[n].Name; agv.Place = Common.nodeInfo[n].Name;
agv.Mark = Common.nodeInfo[nodeIdx].Mark; agv.Mark = Common.nodeInfo[nodeIdx].Mark;
//agv.CloseDoor = false; //agv.CloseDoor = false;
...@@ -1908,26 +2541,123 @@ namespace BLL ...@@ -1908,26 +2541,123 @@ namespace BLL
MarkAdd(Common.nodeInfo[nodeIdx].Mark); MarkAdd(Common.nodeInfo[nodeIdx].Mark);
Common.log.OutString("Mark缓存 " + string.Join(",", Marks.ToArray())); Common.log.OutString("Mark缓存 " + string.Join(",", Marks.ToArray()));
log = string.Format("{0} Move {1} {2}", agv.Name, agv.Place, Common.nodeInfo[nodeIdx].Action.ToString()); log = string.Format("{0} Move To {1}[{2}] [{3}]", agv.Name, agv.Place,
Common.nodeInfo[nodeIdx].Action.ToString(), Common.nodeInfo[nodeIdx].Mark);
Common.log.OutInfo(log); Common.log.OutInfo(log);
Common.log.OutTextBox(log); Common.log.OutTextBox(log);
Common.mir.State_Ready(agv); Common.mir.State_Ready(agv);
Common.server.NodeRefresh(n); Common.server.NodeRefresh(n);
AgvChanged?.Invoke(agvIdx); AgvChanged?.Invoke(agvIdx);
return true; return true;
} }
else else
{ {
agv.TaskSend = false; agv.TaskSend = false;
log = string.Format("{0} Move {1} 失败", agv.Name, agv.Place); log = string.Format("{0} Move To {1} 失败", agv.Name, agv.Place);
//防止上一个任务已执行但返回失败时,删除任务 //防止上一个任务已执行但返回失败时,删除任务
//Common.mir.Del_Mission(agv); //Common.mir.Del_Mission(agv);
Common.log.OutInfo(log); Common.log.OutInfo(log);
Common.log.OutTextBox(log); Common.log.OutTextBox(log);
//return false;
} }
} }
else
{
log = string.Format("{0}无可用料架 [ClientAction={1}] [RFID={2}]", a7Node.Name, a7Node.Action.ToString(), a7Node.RFID);
Common.log.OutInfo(log);
Common.log.OutTextBox(log);
n = Common.nodeInfo.FindIndex(s => s.Name == "A4" && s.Action == ClientAction.NeedLeave && s.AgvName.Equals("") && s.IsUse);
//A4无空架子
if (n == -1)
{
resultType = ResultType.NoEmptyShelf;
log = string.Format("{0}无可用料架 [ClientAction={1}] [RFID={2}]", a4Node.Name, a4Node.Action.ToString(), a4Node.RFID);
Common.log.OutInfo(log);
Common.log.OutTextBox(log);
#region 有出库任务,但A7,A4无空架子
//n = Common.nodeInfo.FindIndex(s => s.Name == "A8" && s.Action == ClientAction.NeedEnter && s.AgvName.Equals("") && s.IsUse);
//if (n == -1)
//{
// ClientNode a8Node = Common.nodeInfo.Find(s => s.Name.Equals("A8"));
// log = string.Format("A4、A7均无空架用于包装仓出库,且{0}已满,不可将A7架子放到{0}。需要人工干预 [ClientAction={1}]", a8Node.Name, a8Node.Action.ToString());
// Common.log.OutInfo(log);
// Common.log.OutTextBox(log);
//}
////A7,A4均无空架子,可将A7的架子移动到A8
//else
//{
// agv.Place = "A7";
// //agv.Mark = Common.nodeInfo[nodeIdx].Mark;
// //agv.CloseDoor = false;
// rtn = Common.mir.Add_Mission_Fleet(agv, Common.agvMission["Move" + agv.Place]);
// if (rtn)
// {
// agv.CloseDoor = false;
// Common.nodeInfo[n].AgvName = agv.Name;
// agv.TaskSend = true;
// //_mark.Add(Common.nodeInfo[nodeIdx].Mark);
// //MarkAdd(Common.nodeInfo[nodeIdx].Mark);
// log = string.Format("{0} Move To {1}[{2}] ", agv.Name, agv.Place,
// "A7,A4无料架用于包装仓");
// Common.log.OutInfo(log);
// Common.log.OutTextBox(log);
// Common.mir.State_Ready(agv);
// Common.server.NodeRefresh(n);
// AgvChanged?.Invoke(agvIdx);
// }
// else
// {
// agv.TaskSend = false;
// log = string.Format("{0} Move To {1}失败[{2}] ", agv.Name, agv.Place,
// "A7,A4无料架用于包装仓");
// //防止上一个任务已执行但返回失败时,删除任务
// //Common.mir.Del_Mission(agv);
// Common.log.OutInfo(log);
// Common.log.OutTextBox(log);
// }
//}
#endregion
}
//A4没有被占用
else
{
agv.Place = Common.nodeInfo[n].Name;
agv.Mark = Common.nodeInfo[nodeIdx].Mark;
//agv.CloseDoor = false;
rtn = Common.mir.Add_Mission_Fleet(agv, Common.agvMission["Move" + agv.Place]);
if (rtn)
{
agv.CloseDoor = false;
Common.nodeInfo[n].AgvName = agv.Name;
agv.TaskSend = true;
//_mark.Add(Common.nodeInfo[nodeIdx].Mark);
MarkAdd(Common.nodeInfo[nodeIdx].Mark);
Common.log.OutString("Mark缓存 " + string.Join(",", Marks.ToArray()));
log = string.Format("{0} Move To {1}[{2}] [{3}]", agv.Name, agv.Place,
Common.nodeInfo[nodeIdx].Action.ToString(), Common.nodeInfo[nodeIdx].Mark);
Common.log.OutInfo(log);
Common.log.OutTextBox(log);
Common.mir.State_Ready(agv);
Common.server.NodeRefresh(n);
AgvChanged?.Invoke(agvIdx);
return true;
}
else
{
agv.TaskSend = false;
log = string.Format("{0} Move To {1} 失败", agv.Name, agv.Place);
//防止上一个任务已执行但返回失败时,删除任务
//Common.mir.Del_Mission(agv);
Common.log.OutInfo(log);
Common.log.OutTextBox(log);
}
}
}
} }
else else
{ {
...@@ -1936,10 +2666,22 @@ namespace BLL ...@@ -1936,10 +2666,22 @@ namespace BLL
} }
} }
return false;//无任务/无空架子
}
//需要出料架,且没有被标记 /// <summary>
//A4是包装料仓的进料,不包含在内 /// B区域出料架
//根据优先级调用 /// </summary>
/// <param name="agvIdx"></param>
/// <returns>true:有料架要出</returns>
private bool FindAreaBNeedLeave(int agvIdx)
{
int nodeIdx = -1;
Agv_Info agv = Common.agvInfo[agvIdx];
List<int> node = new List<int>();
//搜索包装仓需要出料架的节点
for (int i = 0; i < Common.nodeInfo.Count; i++) for (int i = 0; i < Common.nodeInfo.Count; i++)
{ {
if (Common.nodeInfo[i].Action == ClientAction.NeedLeave && Common.nodeInfo[i].Name.StartsWith("B") && if (Common.nodeInfo[i].Action == ClientAction.NeedLeave && Common.nodeInfo[i].Name.StartsWith("B") &&
...@@ -1952,17 +2694,17 @@ namespace BLL ...@@ -1952,17 +2694,17 @@ namespace BLL
//测试,临时的 //测试,临时的
for (int i = 0; i < node.Count; i++) for (int i = 0; i < node.Count; i++)
{ {
Common.log.OutString(agv.Name + " Test " + node[i] + " Name=" + Common.nodeInfo[node[i]].Name + " Mark=" + Common.nodeInfo[node[i]].Mark); Common.log.OutString(agv.Name + " BAreaNeedLeave " + node[i] + " [Name=" + Common.nodeInfo[node[i]].Name + "] [Mark=" + Common.nodeInfo[node[i]].Mark+"]");
} }
if (node.Count == 0) if (node.Count == 0)
{ {
nodeIdx = -1; nodeIdx = -1;
Common.log.OutInfo(agv.Name + " 没有找到新的NeedLeave的节点"); Common.log.OutInfo(agv.Name + " 包装仓没有需要出料架的");
} }
else else
{ {
//按顺序取符合要求的 //按顺序出包装仓的料架
for (int i = 0; i < node.Count; i++) for (int i = 0; i < node.Count; i++)
{ {
if (Common.nodeInfo[node[i]].Mark == "0") if (Common.nodeInfo[node[i]].Mark == "0")
...@@ -1985,19 +2727,23 @@ namespace BLL ...@@ -1985,19 +2727,23 @@ namespace BLL
if (nodeIdx > -1) if (nodeIdx > -1)
{ {
Common.log.OutInfo(agv.Name + " test2 " + agv.Name + " " + Common.nodeInfo[nodeIdx].Name); Common.log.OutInfo("包装仓出料架: " + agv.Name + " " + Common.nodeInfo[nodeIdx].Name + "[Mark=" + Common.nodeInfo[nodeIdx].Mark + "]");
MoveNode(agv, nodeIdx); MoveNode(agv, nodeIdx);
return true; return true;
} }
} }
return false;
return false;
} }
/// <summary>
/// 搜索需要料架/料串的节点
/// </summary>
/// <param name="agv"></param>
/// <param name="name">节点名称</param>
/// <returns>true:有需要料架的节点并移动</returns>
private bool FindNeedEnter(Agv_Info agv, string name) private bool FindNeedEnter(Agv_Info agv, string name)
{ {
//寻找下一个任务点 //寻找下一个任务点
...@@ -2062,6 +2808,12 @@ namespace BLL ...@@ -2062,6 +2808,12 @@ namespace BLL
} }
} }
/// <summary>
/// 寻找需要送出料架/料串的节点,并给小车发任务
/// </summary>
/// <param name="agv"></param>
/// <param name="name">节点名</param>
/// <returns></returns>
private bool FindNeedLeave(Agv_Info agv, string name) private bool FindNeedLeave(Agv_Info agv, string name)
{ {
bool rtn; bool rtn;
...@@ -2081,7 +2833,7 @@ namespace BLL ...@@ -2081,7 +2833,7 @@ namespace BLL
if (n == -1) n = Common.nodeInfo.FindIndex(s => s.Name == "C1" && s.Action == ClientAction.NeedEnter && s.AgvName == "" && s.IsUse); if (n == -1) n = Common.nodeInfo.FindIndex(s => s.Name == "C1" && s.Action == ClientAction.NeedEnter && s.AgvName == "" && s.IsUse);
if (n == -1) if (n == -1)
{ {
Common.log.OutInfo(agv.Name + " C1C3C5全部被占用"); Common.log.OutInfo(agv.Name + " C1C3C5全部被占用,不去A1");
return false; //入料口全部被占用 return false; //入料口全部被占用
} }
} }
...@@ -2096,7 +2848,7 @@ namespace BLL ...@@ -2096,7 +2848,7 @@ namespace BLL
} }
else else
{ {
log = agv.Name + " 清理AgvName,没有找到 " + agv.Name; log = "FindNeedLeave(): " + agv.Name + " 清理AgvName,没有找到 " + agv.Name;
Common.log.OutInfo(log); Common.log.OutInfo(log);
} }
...@@ -2138,6 +2890,12 @@ namespace BLL ...@@ -2138,6 +2890,12 @@ namespace BLL
} }
} }
/// <summary>
/// 移动到目的地
/// </summary>
/// <param name="agv"></param>
/// <param name="nodeIdx">节点索引</param>
/// <returns></returns>
private bool MoveNode(Agv_Info agv, int nodeIdx) private bool MoveNode(Agv_Info agv, int nodeIdx)
{ {
string log; string log;
...@@ -2151,7 +2909,7 @@ namespace BLL ...@@ -2151,7 +2909,7 @@ namespace BLL
} }
else else
{ {
log = "清理AgvName,没有找到 " + agv.Name; log = "清理任务点的AgvName,没有找到 " + agv.Name;
Common.log.OutInfo(log); Common.log.OutInfo(log);
} }
...@@ -2166,7 +2924,7 @@ namespace BLL ...@@ -2166,7 +2924,7 @@ namespace BLL
agv.CloseDoor = false; agv.CloseDoor = false;
Common.nodeInfo[nodeIdx].AgvName = agv.Name; Common.nodeInfo[nodeIdx].AgvName = agv.Name;
agv.TaskSend = true; agv.TaskSend = true;
log = string.Format("{0} Move {1} {2}", agv.Name, agv.Place, Common.nodeInfo[nodeIdx].Action.ToString()); log = string.Format("{0} MoveTtoNode {1} {2}", agv.Name, agv.Place, Common.nodeInfo[nodeIdx].Action.ToString());
Common.log.OutInfo(log); Common.log.OutInfo(log);
Common.log.OutTextBox(log); Common.log.OutTextBox(log);
Common.mir.State_Ready(agv); Common.mir.State_Ready(agv);
...@@ -2175,7 +2933,7 @@ namespace BLL ...@@ -2175,7 +2933,7 @@ namespace BLL
else else
{ {
agv.TaskSend = false; agv.TaskSend = false;
log = string.Format("{0} Move {1} 失败", agv.Name, agv.Place); log = string.Format("{0} MoveTtoNode {1} 失败", agv.Name, agv.Place);
//防止上一个任务已执行但返回失败时,删除任务 //防止上一个任务已执行但返回失败时,删除任务
//Common.mir.Del_Mission(agv); //Common.mir.Del_Mission(agv);
Common.log.OutInfo(log); Common.log.OutInfo(log);
......
...@@ -230,6 +230,7 @@ namespace AGVControl ...@@ -230,6 +230,7 @@ namespace AGVControl
return; return;
Common.agvInfo[idx].Place = ""; Common.agvInfo[idx].Place = "";
Common.agvInfo[idx].IsClearRunInfo = false; Common.agvInfo[idx].IsClearRunInfo = false;
Common.log.OutInfo("手动添加任务: " + LstAgvPlace.Text);
//if (LstAgvPlace.Text.StartsWith("Move") && LstAgvPlace.Text.Length ==6) //if (LstAgvPlace.Text.StartsWith("Move") && LstAgvPlace.Text.Length ==6)
//{ //{
// Common.agvInfo[idx].Place = LstAgvPlace.Text.Substring(4); // Common.agvInfo[idx].Place = LstAgvPlace.Text.Substring(4);
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!