Commit 6d3a5d15 张东亮

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

1 个父辈 c519009b
文件属性发生变化
文件属性发生变化
文件属性发生变化
文件属性发生变化
文件属性发生变化
文件属性发生变化
文件属性发生变化
......@@ -516,9 +516,9 @@ namespace DeviceLibrary
private void UpdateNode(ClientNode node)
{
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;
}
......
文件属性发生变化
文件属性发生变化
文件属性发生变化
......@@ -29,7 +29,7 @@ namespace DeviceLibrary
/// <summary>
/// 空料架的产线位置
/// </summary>
private string EmptyShelfPlace { get; set; }
public string EmptyShelfPlace { get; set; }
/// <summary>
/// 空料架目的地
/// </summary>
......
......@@ -124,7 +124,7 @@ namespace DeviceLibrary
}
ClientNode node = AGVManager.nodeInfo[nodeIdx];
agv.RFID = node.RFID;
if (node.StateEquals(eNodeStatus.MayLeave))
//if (node.StateEquals(eNodeStatus.MayLeave))
{
if (!agv.CurTarName.Equals("Enter"))
{
......@@ -138,10 +138,10 @@ namespace DeviceLibrary
}
}
else if (jobStep.IsTimeOut(15000, out double timeOutValue))
{
jobStep.ToNextStep(TAKE_EMPTY_STEP.WAIT_REACH_PLACE);
}
//else if (jobStep.IsTimeOut(15000, out double timeOutValue))
//{
// jobStep.ToNextStep(TAKE_EMPTY_STEP.WAIT_REACH_PLACE);
//}
}
else if (jobStep.IsStep(TAKE_EMPTY_STEP.WAIT_TAKE_EMPTY_SHELF))
{
......
......@@ -154,7 +154,7 @@ namespace DeviceLibrary
if (!agv.CurTarName.Equals("Enter"))
{
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);
jobStep.Msg = msg;
MissionSys.AssignMission(agv, SettingString.Enter);
......@@ -174,11 +174,19 @@ namespace DeviceLibrary
CurTaskState = MissionSys.GetTakJobState(agv);
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)
{
jobStep.ToNextStep(GO_FULL_SHELF_STATION_STEP.WAIT_REACH_TEMP_PLACE);
runInfo = FullShelfStationPlace + "满料架进入小车完成,由于该料架无目的地,去临时点卸料";
runInfo = FullShelfStationPlace + "满料架进入小车完成并清除料架缓存,由于该料架无目的地,去临时点卸料";
msg += string.Format("[{0}] {1}", jobStep.CurStep(), runInfo);
jobStep.Msg = msg;
//FullShelfStationPlace = SettingString.A2;
......@@ -187,7 +195,7 @@ namespace DeviceLibrary
}
else
{
runInfo = FullShelfStationPlace + "满料架进入小车完成";
runInfo = FullShelfStationPlace + "满料架进入小车完成并清除料架缓存";
msg += string.Format("[{0}] {1}", jobStep.CurStep(), runInfo);
jobStep.Msg = msg;
return new SendFullShelfToLineJob(FullShelfDestInfo, RFID);
......
using Common;
using System.Collections.Generic;
namespace DeviceLibrary
{
/// <summary>
......@@ -53,12 +55,44 @@ namespace DeviceLibrary
agv.RFID = RFID;
if (jobStep.IsStep(SEND_FULL_SHELF_STEP.NONE))
{
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);
if(CheckLineTargetOccupy(agv, FullShelfPlace))
{
jobStep.ToNextStep(SEND_FULL_SHELF_STEP.WAIT_REACH_STANDY);
runInfo = "产线[" + FullShelfPlace + "]目前有其他车,先去待机位";
msg += string.Format("[{0}] {1}", jobStep.CurStep(), runInfo);
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))
......@@ -93,7 +127,44 @@ namespace DeviceLibrary
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>
/// AGV送满料架到产线
......@@ -105,6 +176,10 @@ namespace DeviceLibrary
/// </summary>
NONE,
/// <summary>
/// 等待到达待机位
/// </summary>
WAIT_REACH_STANDY,
/// <summary>
/// 等待小车到达目的地
/// </summary>
WAIT_AGV_REACH_LINE,
......
......@@ -66,7 +66,7 @@ namespace DeviceLibrary
}
catch (Exception ex)
{
log.Error("FindFullShelfTarget", ex);
log.Error("FindFullShelfTarget:rfid="+ rfid, ex);
return false;
}
}
......
文件属性发生变化
文件属性发生变化
......@@ -194,11 +194,14 @@ namespace AGVControl
destInfoMap.Add(SettingString.D1, node.RFID);
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))
{
......@@ -211,6 +214,10 @@ namespace AGVControl
{
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
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))
{
......@@ -252,7 +262,8 @@ namespace AGVControl
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
......@@ -278,7 +289,8 @@ namespace AGVControl
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))
{
......@@ -292,7 +304,8 @@ namespace AGVControl
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
......
......@@ -5,11 +5,11 @@ using System.Runtime.InteropServices;
// 有关程序集的一般信息由以下
// 控制。更改这些特性值可修改
// 与程序集关联的信息。
[assembly: AssemblyTitle("AGVControl-ProductionLine")]
[assembly: AssemblyTitle("AGVDispatch")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("AGVControl-ProductionLine")]
[assembly: AssemblyProduct("AGVDispatch")]
[assembly: AssemblyCopyright("Copyright © 2020")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
......
文件属性发生变化
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!