Commit 6d3a5d15 张东亮

agv到达缓存线出口信号捕捉不到导致信号重发问题

1 个父辈 c519009b
文件属性发生变化
文件属性发生变化
文件属性发生变化
文件属性发生变化
文件属性发生变化
文件属性发生变化
文件属性发生变化
...@@ -516,9 +516,9 @@ namespace DeviceLibrary ...@@ -516,9 +516,9 @@ namespace DeviceLibrary
private void UpdateNode(ClientNode node) private void UpdateNode(ClientNode node)
{ {
int idx = AGVManager.nodeInfo.FindIndex(s => s.Name == node.Name); int idx = AGVManager.nodeInfo.FindIndex(s => s.Name == node.Name);
if (idx == -1) if (idx == -1 || idx >= AGVManager.nodeInfo.Count)
{ {
//log.Error("UpdateNode " + node.Name + " 不存在"); log.Error("UpdateNode " + node.Name + " 不存在");
return; return;
} }
......
文件属性发生变化
文件属性发生变化
文件属性发生变化
...@@ -29,7 +29,7 @@ namespace DeviceLibrary ...@@ -29,7 +29,7 @@ namespace DeviceLibrary
/// <summary> /// <summary>
/// 空料架的产线位置 /// 空料架的产线位置
/// </summary> /// </summary>
private string EmptyShelfPlace { get; set; } public string EmptyShelfPlace { get; set; }
/// <summary> /// <summary>
/// 空料架目的地 /// 空料架目的地
/// </summary> /// </summary>
......
...@@ -124,7 +124,7 @@ namespace DeviceLibrary ...@@ -124,7 +124,7 @@ namespace DeviceLibrary
} }
ClientNode node = AGVManager.nodeInfo[nodeIdx]; ClientNode node = AGVManager.nodeInfo[nodeIdx];
agv.RFID = node.RFID; agv.RFID = node.RFID;
if (node.StateEquals(eNodeStatus.MayLeave)) //if (node.StateEquals(eNodeStatus.MayLeave))
{ {
if (!agv.CurTarName.Equals("Enter")) if (!agv.CurTarName.Equals("Enter"))
{ {
...@@ -138,10 +138,10 @@ namespace DeviceLibrary ...@@ -138,10 +138,10 @@ namespace DeviceLibrary
} }
} }
else if (jobStep.IsTimeOut(15000, out double timeOutValue)) //else if (jobStep.IsTimeOut(15000, out double timeOutValue))
{ //{
jobStep.ToNextStep(TAKE_EMPTY_STEP.WAIT_REACH_PLACE); // jobStep.ToNextStep(TAKE_EMPTY_STEP.WAIT_REACH_PLACE);
} //}
} }
else if (jobStep.IsStep(TAKE_EMPTY_STEP.WAIT_TAKE_EMPTY_SHELF)) else if (jobStep.IsStep(TAKE_EMPTY_STEP.WAIT_TAKE_EMPTY_SHELF))
{ {
......
...@@ -154,7 +154,7 @@ namespace DeviceLibrary ...@@ -154,7 +154,7 @@ namespace DeviceLibrary
if (!agv.CurTarName.Equals("Enter")) if (!agv.CurTarName.Equals("Enter"))
{ {
jobStep.ToNextStep(GO_FULL_SHELF_STATION_STEP.WAIT__FULL_SHELF_IN_AGV); jobStep.ToNextStep(GO_FULL_SHELF_STATION_STEP.WAIT__FULL_SHELF_IN_AGV);
runInfo = "收到请求[ReadyLeave]的响应 " + FullShelfStationPlace + "出料架,小车链条运行"; runInfo = "收到请求[ReadyLeave]的响应 " + FullShelfStationPlace + "出料架,小车链条运行,准备清除料架缓存";
msg += string.Format("[{0}] {1}", jobStep.CurStep(), runInfo); msg += string.Format("[{0}] {1}", jobStep.CurStep(), runInfo);
jobStep.Msg = msg; jobStep.Msg = msg;
MissionSys.AssignMission(agv, SettingString.Enter); MissionSys.AssignMission(agv, SettingString.Enter);
...@@ -174,11 +174,19 @@ namespace DeviceLibrary ...@@ -174,11 +174,19 @@ namespace DeviceLibrary
CurTaskState = MissionSys.GetTakJobState(agv); CurTaskState = MissionSys.GetTakJobState(agv);
if (MissionSys.CheckTaskFinished(agv, SettingString.Enter, CurTaskState)) if (MissionSys.CheckTaskFinished(agv, SettingString.Enter, CurTaskState))
{ {
HttpManager.AgvRemoveRfid(RFID); System.Threading.Tasks.Task task = System.Threading.Tasks.Task.Factory.StartNew(new System.Action(()=>{
while(true)
{
if (HttpManager.AgvRemoveRfid(RFID))
break;
System.Threading.Thread.Sleep(1000);
}
}));
task.Wait();
if (noneTargetHandle) if (noneTargetHandle)
{ {
jobStep.ToNextStep(GO_FULL_SHELF_STATION_STEP.WAIT_REACH_TEMP_PLACE); jobStep.ToNextStep(GO_FULL_SHELF_STATION_STEP.WAIT_REACH_TEMP_PLACE);
runInfo = FullShelfStationPlace + "满料架进入小车完成,由于该料架无目的地,去临时点卸料"; runInfo = FullShelfStationPlace + "满料架进入小车完成并清除料架缓存,由于该料架无目的地,去临时点卸料";
msg += string.Format("[{0}] {1}", jobStep.CurStep(), runInfo); msg += string.Format("[{0}] {1}", jobStep.CurStep(), runInfo);
jobStep.Msg = msg; jobStep.Msg = msg;
//FullShelfStationPlace = SettingString.A2; //FullShelfStationPlace = SettingString.A2;
...@@ -187,7 +195,7 @@ namespace DeviceLibrary ...@@ -187,7 +195,7 @@ namespace DeviceLibrary
} }
else else
{ {
runInfo = FullShelfStationPlace + "满料架进入小车完成"; runInfo = FullShelfStationPlace + "满料架进入小车完成并清除料架缓存";
msg += string.Format("[{0}] {1}", jobStep.CurStep(), runInfo); msg += string.Format("[{0}] {1}", jobStep.CurStep(), runInfo);
jobStep.Msg = msg; jobStep.Msg = msg;
return new SendFullShelfToLineJob(FullShelfDestInfo, RFID); return new SendFullShelfToLineJob(FullShelfDestInfo, RFID);
......
using Common; using Common;
using System.Collections.Generic;
namespace DeviceLibrary namespace DeviceLibrary
{ {
/// <summary> /// <summary>
...@@ -53,12 +55,44 @@ namespace DeviceLibrary ...@@ -53,12 +55,44 @@ namespace DeviceLibrary
agv.RFID = RFID; agv.RFID = RFID;
if (jobStep.IsStep(SEND_FULL_SHELF_STEP.NONE)) if (jobStep.IsStep(SEND_FULL_SHELF_STEP.NONE))
{ {
jobStep.ToNextStep(SEND_FULL_SHELF_STEP.WAIT_AGV_REACH_LINE); if(CheckLineTargetOccupy(agv, FullShelfPlace))
runInfo = "从云仓送往[" + FullShelfPlace + "]"; {
msg += string.Format("[{0}] {1}", jobStep.CurStep(), runInfo); jobStep.ToNextStep(SEND_FULL_SHELF_STEP.WAIT_REACH_STANDY);
jobStep.Msg = msg; runInfo = "产线[" + FullShelfPlace + "]目前有其他车,先去待机位";
MissionSys.AssignMission(agv, FullShelfPlace); msg += string.Format("[{0}] {1}", jobStep.CurStep(), runInfo);
UpdateJobTaskInfo(agv); jobStep.Msg = msg;
MissionSys.AssignMission(agv, SettingString.Standby);
UpdateJobTaskInfo(agv);
}
else
{
jobStep.ToNextStep(SEND_FULL_SHELF_STEP.WAIT_AGV_REACH_LINE);
runInfo = "从云仓送往[" + FullShelfPlace + "]";
msg += string.Format("[{0}] {1}", jobStep.CurStep(), runInfo);
jobStep.Msg = msg;
MissionSys.AssignMission(agv, FullShelfPlace);
UpdateJobTaskInfo(agv);
}
}
else if (jobStep.IsStep(SEND_FULL_SHELF_STEP.WAIT_REACH_STANDY))
{
CurTaskState = MissionSys.GetTakJobState(agv);
if (MissionSys.CheckTaskFinished(agv, SettingString.Standby, CurTaskState))
{
if (!CheckLineTargetOccupy(agv, FullShelfPlace))
{
jobStep.ToNextStep(SEND_FULL_SHELF_STEP.WAIT_AGV_REACH_LINE);
runInfo = "[" + FullShelfPlace + "]的车辆已返回,开始去产线";
msg += string.Format("[{0}] {1}", jobStep.CurStep(), runInfo);
jobStep.Msg = msg;
MissionSys.AssignMission(agv, FullShelfPlace);
UpdateJobTaskInfo(agv);
}
}
} }
else if (jobStep.IsStep(SEND_FULL_SHELF_STEP.WAIT_AGV_REACH_LINE)) else if (jobStep.IsStep(SEND_FULL_SHELF_STEP.WAIT_AGV_REACH_LINE))
...@@ -93,7 +127,44 @@ namespace DeviceLibrary ...@@ -93,7 +127,44 @@ namespace DeviceLibrary
return this; return this;
} }
/// <summary>
/// 检查该目的地是否有车占用
/// </summary>
/// <param name="nodeName"></param>
/// <returns>false:未被占用</returns>
private bool CheckLineTargetOccupy(Agv_Info agv, string nodeName)
{
List<Agv_Info> agvs = AGVManager.agvInfo.FindAll(s => !s.IP.Equals(agv.IP) && (s.CurJob is SendFullShelfToLineJob || s.CurJob is EmptyShelfBackJob)
);
if (agvs.Count.Equals(0))
return false;
else if (agvs.Count > 0)
{
foreach (Agv_Info item in agvs)
{
if (item.CurJob is EmptyShelfBackJob)
{
if (((EmptyShelfBackJob)item.CurJob).EmptyShelfPlace.Equals(nodeName))
{
LogUtil.debug(item.Name + " 在目的地:" + ((EmptyShelfBackJob)item.CurJob).EmptyShelfPlace + " " + agv.Name + "暂不去" + nodeName);
return true;
}
}
else if (item.CurJob is SendFullShelfToLineJob)
{
if (((SendFullShelfToLineJob)item.CurJob).FullShelfPlace.Equals(nodeName) && item.CurTarName.Equals(nodeName))
{
LogUtil.debug(item.Name + " 在目的地:" + ((SendFullShelfToLineJob)item.CurJob).FullShelfPlace + " " + agv.Name + "暂不去" + nodeName);
return true;
}
}
}
}
return false;
}
} }
/// <summary> /// <summary>
/// AGV送满料架到产线 /// AGV送满料架到产线
...@@ -105,6 +176,10 @@ namespace DeviceLibrary ...@@ -105,6 +176,10 @@ namespace DeviceLibrary
/// </summary> /// </summary>
NONE, NONE,
/// <summary> /// <summary>
/// 等待到达待机位
/// </summary>
WAIT_REACH_STANDY,
/// <summary>
/// 等待小车到达目的地 /// 等待小车到达目的地
/// </summary> /// </summary>
WAIT_AGV_REACH_LINE, WAIT_AGV_REACH_LINE,
......
...@@ -66,7 +66,7 @@ namespace DeviceLibrary ...@@ -66,7 +66,7 @@ namespace DeviceLibrary
} }
catch (Exception ex) catch (Exception ex)
{ {
log.Error("FindFullShelfTarget", ex); log.Error("FindFullShelfTarget:rfid="+ rfid, ex);
return false; return false;
} }
} }
......
文件属性发生变化
文件属性发生变化
...@@ -194,11 +194,14 @@ namespace AGVControl ...@@ -194,11 +194,14 @@ namespace AGVControl
destInfoMap.Add(SettingString.D1, node.RFID); destInfoMap.Add(SettingString.D1, node.RFID);
if (!destInfo.data.ToLower().Equals("none") && !AGVManager.GetLineNameByNodeName(destInfo.data, out line)) if (!destInfo.data.ToLower().Equals("none") && !AGVManager.GetLineNameByNodeName(destInfo.data, out line))
{ {
lblD1Warn.Text = string.Format("{0}的料架[{1}]目的地不存在:{2}\r\n", node.LineName, node.RFID,destInfo.data); lblD1Warn.Text = string.Format("{0}的料架[{1}]目的地不存在:{2}\r\n", node.LineName, node.RFID, destInfo.data);
} }
} }
else
{
lblD1Warn.Text = string.Format("{0}的料架[{1}]请求服务端无反馈\r\n", node.LineName, node.RFID);
}
} }
else if (!destInfoMap[SettingString.D1].Equals(node.RFID)) else if (!destInfoMap[SettingString.D1].Equals(node.RFID))
{ {
...@@ -211,6 +214,10 @@ namespace AGVControl ...@@ -211,6 +214,10 @@ namespace AGVControl
{ {
lblD1Warn.Text = string.Format("{0}的料架[{1}]目的地不存在:{2}\r\n", node.LineName, destInfo.data); lblD1Warn.Text = string.Format("{0}的料架[{1}]目的地不存在:{2}\r\n", node.LineName, destInfo.data);
} }
else
{
lblD1Warn.Text = string.Format("{0}的料架[{1}]请求服务端无反馈\r\n", node.LineName, node.RFID);
}
} }
} }
...@@ -238,7 +245,10 @@ namespace AGVControl ...@@ -238,7 +245,10 @@ namespace AGVControl
lblD2Warn.Text = string.Format("{0}的料架[{1}]目的地不存在:{2}\r\n", node.LineName, node.RFID, destInfo.data); lblD2Warn.Text = string.Format("{0}的料架[{1}]目的地不存在:{2}\r\n", node.LineName, node.RFID, destInfo.data);
} }
} }
else
{
lblD2Warn.Text = string.Format("{0}的料架[{1}]请求服务端无反馈\r\n", node.LineName, node.RFID);
}
} }
else if (!destInfoMap[SettingString.D2].Equals(node.RFID)) else if (!destInfoMap[SettingString.D2].Equals(node.RFID))
{ {
...@@ -252,7 +262,8 @@ namespace AGVControl ...@@ -252,7 +262,8 @@ namespace AGVControl
lblD2Warn.Text = string.Format("{0}的料架[{1}]目的地不存在:{2}\r\n", node.LineName, node.RFID, destInfo.data); lblD2Warn.Text = string.Format("{0}的料架[{1}]目的地不存在:{2}\r\n", node.LineName, node.RFID, destInfo.data);
} }
} }
else
lblD2Warn.Text = string.Format("{0}的料架[{1}]请求服务端无反馈\r\n", node.LineName, node.RFID);
} }
} }
else else
...@@ -278,7 +289,8 @@ namespace AGVControl ...@@ -278,7 +289,8 @@ namespace AGVControl
lblD3Warn.Text = string.Format("{0}的料架[{1}]目的地不存在:{2}\r\n", node.LineName, node.RFID, destInfo.data); lblD3Warn.Text = string.Format("{0}的料架[{1}]目的地不存在:{2}\r\n", node.LineName, node.RFID, destInfo.data);
} }
} }
else
lblD3Warn.Text = string.Format("{0}的料架[{1}]请求服务端无反馈\r\n", node.LineName, node.RFID);
} }
else if (!destInfoMap[SettingString.D3].Equals(node.RFID)) else if (!destInfoMap[SettingString.D3].Equals(node.RFID))
{ {
...@@ -292,7 +304,8 @@ namespace AGVControl ...@@ -292,7 +304,8 @@ namespace AGVControl
lblD3Warn.Text = string.Format("{0}的料架[{1}]目的地不存在:{2}\r\n", node.LineName, node.RFID, destInfo.data); lblD3Warn.Text = string.Format("{0}的料架[{1}]目的地不存在:{2}\r\n", node.LineName, node.RFID, destInfo.data);
} }
} }
else
lblD3Warn.Text = string.Format("{0}的料架[{1}]请求服务端无反馈\r\n", node.LineName, node.RFID);
} }
} }
else else
......
...@@ -5,11 +5,11 @@ using System.Runtime.InteropServices; ...@@ -5,11 +5,11 @@ using System.Runtime.InteropServices;
// 有关程序集的一般信息由以下 // 有关程序集的一般信息由以下
// 控制。更改这些特性值可修改 // 控制。更改这些特性值可修改
// 与程序集关联的信息。 // 与程序集关联的信息。
[assembly: AssemblyTitle("AGVControl-ProductionLine")] [assembly: AssemblyTitle("AGVDispatch")]
[assembly: AssemblyDescription("")] [assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")] [assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")] [assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("AGVControl-ProductionLine")] [assembly: AssemblyProduct("AGVDispatch")]
[assembly: AssemblyCopyright("Copyright © 2020")] [assembly: AssemblyCopyright("Copyright © 2020")]
[assembly: AssemblyTrademark("")] [assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")] [assembly: AssemblyCulture("")]
......
文件属性发生变化
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!