Commit 54be25c3 张东亮

运行版1

1 个父辈 c0e49397
...@@ -451,7 +451,7 @@ namespace AGVControl ...@@ -451,7 +451,7 @@ namespace AGVControl
{ {
Msg1 msgs = JsonHelper.DeserializeJsonToObject<Msg1>(result); Msg1 msgs = JsonHelper.DeserializeJsonToObject<Msg1>(result);
if (msgs == null) if (msgs == null)
return ",,,D22"; return ",,,";
else else
{ {
Common.log.Debug(string.Format("{0}接驳台状态:{1}",lineName,msgs.Msg)); Common.log.Debug(string.Format("{0}接驳台状态:{1}",lineName,msgs.Msg));
...@@ -463,9 +463,58 @@ namespace AGVControl ...@@ -463,9 +463,58 @@ namespace AGVControl
catch (Exception ex) catch (Exception ex)
{ {
Common.log.Error(ex.Message); Common.log.Error(ex.Message);
return ",,,D22"; return ",,,";
} }
return ",,,D22"; return ",,,";
}
/// <summary>
/// 获取接驳台最外面料架
/// </summary>
/// <param name="lineName"></param>
/// <returns></returns>
public static string GetFirstRFID(string lineName)
{
string addr = "";
if (lineName.StartsWith(SettingString.D4_Name_Prefix))
{
addr = string.Format("http://{0}/LineGetRFID?line={1}", ConfigAppSettings.GetValue(SettingString.IP_4D_Light), lineName);
}
else if (lineName.StartsWith(SettingString.C4_Name_Prefix))
{
addr = string.Format("http://{0}/LineGetRFID?line={1}", ConfigAppSettings.GetValue(SettingString.IP_4C_Light), lineName);
}
try
{
string result = HttpHelper.Get(addr);
if (!result.Equals(""))
{
Msg1 msgs = JsonHelper.DeserializeJsonToObject<Msg1>(result);
if (msgs == null)
return "";
else
{
Common.log.Debug(string.Format("{0}接驳台状态:{1}", lineName, msgs.Msg));
string rfid = "";
foreach (string item in msgs.Msg.Split(','))
{
if(!item.Equals(""))
{
rfid = item;
}
}
return rfid;
}
}
}
catch (Exception ex)
{
Common.log.Error(ex.Message);
return "";
}
return "";
} }
/// <summary> /// <summary>
/// 删除接驳台料架 /// 删除接驳台料架
......
...@@ -617,8 +617,8 @@ namespace AGVControl ...@@ -617,8 +617,8 @@ namespace AGVControl
if (!Common.missionManager.GetUnlockRfids(Common.nodeInfo[idx].Name).Contains(nodeInfo[idx].RFID)) if (!Common.missionManager.GetUnlockRfids(Common.nodeInfo[idx].Name).Contains(nodeInfo[idx].RFID))
{ {
warnMsg = string.Format("料架{0}在接驳台{1}最外侧,但没有解绑信息,请检查", nodeInfo[idx].RFID, nodeInfo[idx].Name); warnMsg = string.Format("料架{0}在接驳台{1}最外侧,但没有解绑信息,请检查", nodeInfo[idx].RFID, nodeInfo[idx].Name);
Common.log.Error(warnMsg); Common.LogInfo(warnMsg);
return false; return true;
} }
rfid = nodeInfo[idx].RFID; rfid = nodeInfo[idx].RFID;
warnMsg = ""; warnMsg = "";
...@@ -664,8 +664,8 @@ namespace AGVControl ...@@ -664,8 +664,8 @@ namespace AGVControl
if (!Common.missionManager.GetUnlockRfids(Common.nodeInfo[idx].Name).Contains(nodeInfo[idx].RFID)) if (!Common.missionManager.GetUnlockRfids(Common.nodeInfo[idx].Name).Contains(nodeInfo[idx].RFID))
{ {
warnMsg = string.Format("料架{0}在接驳台{1}最外侧,但没有解绑信息,请检查", nodeInfo[idx].RFID, nodeInfo[idx].Name); warnMsg = string.Format("料架{0}在接驳台{1}最外侧,但没有解绑信息,请检查", nodeInfo[idx].RFID, nodeInfo[idx].Name);
Common.log.Error(warnMsg); Common.LogInfo(warnMsg);
return false; return true;
} }
rfid = nodeInfo[idx].RFID; rfid = nodeInfo[idx].RFID;
warnMsg = ""; warnMsg = "";
...@@ -705,8 +705,8 @@ namespace AGVControl ...@@ -705,8 +705,8 @@ namespace AGVControl
if (!Common.missionManager.GetUnlockRfids(Common.nodeInfo[idx].Name).Contains(nodeInfo[idx].RFID)) if (!Common.missionManager.GetUnlockRfids(Common.nodeInfo[idx].Name).Contains(nodeInfo[idx].RFID))
{ {
warnMsg = string.Format("料架{0}在接驳台{1}最外侧,但没有解绑信息,请检查", nodeInfo[idx].RFID, nodeInfo[idx].Name); warnMsg = string.Format("料架{0}在接驳台{1}最外侧,但没有解绑信息,请检查", nodeInfo[idx].RFID, nodeInfo[idx].Name);
Common.log.Error(warnMsg); Common.LogInfo(warnMsg);
return false; return true;
} }
rfid = nodeInfo[idx].RFID; rfid = nodeInfo[idx].RFID;
warnMsg = ""; warnMsg = "";
...@@ -727,8 +727,8 @@ namespace AGVControl ...@@ -727,8 +727,8 @@ namespace AGVControl
if (!Common.missionManager.GetUnlockRfids(Common.nodeInfo[idx].Name).Contains(nodeInfo[idx].RFID)) if (!Common.missionManager.GetUnlockRfids(Common.nodeInfo[idx].Name).Contains(nodeInfo[idx].RFID))
{ {
warnMsg = string.Format("料架{0}在接驳台{1}最外侧,但没有解绑信息,请检查", nodeInfo[idx].RFID, nodeInfo[idx].Name); warnMsg = string.Format("料架{0}在接驳台{1}最外侧,但没有解绑信息,请检查", nodeInfo[idx].RFID, nodeInfo[idx].Name);
Common.log.Error(warnMsg); Common.LogInfo(warnMsg);
return false; return true;
} }
rfid = nodeInfo[idx].RFID; rfid = nodeInfo[idx].RFID;
warnMsg = ""; warnMsg = "";
...@@ -757,8 +757,8 @@ namespace AGVControl ...@@ -757,8 +757,8 @@ namespace AGVControl
if (!Common.missionManager.GetUnlockRfids(Common.nodeInfo[idx].Name).Contains(nodeInfo[idx].RFID)) if (!Common.missionManager.GetUnlockRfids(Common.nodeInfo[idx].Name).Contains(nodeInfo[idx].RFID))
{ {
warnMsg = string.Format("料架{0}在接驳台{1}最外侧,但没有解绑信息,请检查", nodeInfo[idx].RFID, nodeInfo[idx].Name); warnMsg = string.Format("料架{0}在接驳台{1}最外侧,但没有解绑信息,请检查", nodeInfo[idx].RFID, nodeInfo[idx].Name);
Common.log.Error(warnMsg); Common.LogInfo(warnMsg);
return false; return true;
} }
rfid = nodeInfo[idx].RFID; rfid = nodeInfo[idx].RFID;
warnMsg = ""; warnMsg = "";
...@@ -779,8 +779,8 @@ namespace AGVControl ...@@ -779,8 +779,8 @@ namespace AGVControl
if (!Common.missionManager.GetUnlockRfids(Common.nodeInfo[idx].Name).Contains(nodeInfo[idx].RFID)) if (!Common.missionManager.GetUnlockRfids(Common.nodeInfo[idx].Name).Contains(nodeInfo[idx].RFID))
{ {
warnMsg = string.Format("料架{0}在接驳台{1}最外侧,但没有解绑信息,请检查", nodeInfo[idx].RFID, nodeInfo[idx].Name); warnMsg = string.Format("料架{0}在接驳台{1}最外侧,但没有解绑信息,请检查", nodeInfo[idx].RFID, nodeInfo[idx].Name);
Common.log.Error(warnMsg); Common.LogInfo(warnMsg);
return false; return true;
} }
rfid = nodeInfo[idx].RFID; rfid = nodeInfo[idx].RFID;
warnMsg = ""; warnMsg = "";
...@@ -796,12 +796,14 @@ namespace AGVControl ...@@ -796,12 +796,14 @@ namespace AGVControl
//4C车间备料区寻找 //4C车间备料区寻找
if (SettingString.C4_AGV_IPs.Contains(agv.IP)) if (SettingString.C4_AGV_IPs.Contains(agv.IP))
{ {
idx = nodeInfo.FindIndex(s => s.EmptyShelfCnt > 0 && s.Name.Equals(SettingString.C4FeederOut) && s.IsUse); idx = nodeInfo.FindIndex(s => s.EmptyShelfCnt > 0 && s.Name.Equals(SettingString.C4FeederOut) && !s.RFID.StartsWith("0") && s.IsUse);
if (idx > -1) if (idx > -1)
{ {
int idx1 = agvInfo.FindIndex(s => s.CurJob is EnterLeaveShelfJob && ((EnterLeaveShelfJob)s.CurJob).LineName.Equals(SettingString.C4FeederOut)); int idx1 = agvInfo.FindIndex(s => s.CurJob is EnterLeaveShelfJob && ((EnterLeaveShelfJob)s.CurJob).LineName.Equals(SettingString.C4FeederOut));
if (idx1 == -1) if (idx1 == -1)
{ {
rfid = nodeInfo[idx].RFID;
warnMsg = "";
nodeName = nodeInfo[idx].Name; nodeName = nodeInfo[idx].Name;
Common.log.Debug(agv.Name + " 双层线右侧需要料架,准备去4C-" + nodeName); Common.log.Debug(agv.Name + " 双层线右侧需要料架,准备去4C-" + nodeName);
return true; return true;
...@@ -812,9 +814,11 @@ namespace AGVControl ...@@ -812,9 +814,11 @@ namespace AGVControl
//4D车间备料区寻找 //4D车间备料区寻找
if (!SettingString.C4_AGV_IPs.Contains(agv.IP)) if (!SettingString.C4_AGV_IPs.Contains(agv.IP))
{ {
idx = nodeInfo.FindIndex(s => s.EmptyShelfCnt > 0 && s.Name.Equals(SettingString.D4FeederOut) && s.IsUse); idx = nodeInfo.FindIndex(s => s.EmptyShelfCnt > 0 && s.Name.Equals(SettingString.D4FeederOut) && !s.RFID.StartsWith("0")&& s.IsUse);
if (idx > -1) if (idx > -1)
{ {
rfid = nodeInfo[idx].RFID;
warnMsg = "";
nodeName = nodeInfo[idx].Name; nodeName = nodeInfo[idx].Name;
Common.log.Debug(agv.Name + " 双层线右侧需要料架,准备去4D-" + nodeName); Common.log.Debug(agv.Name + " 双层线右侧需要料架,准备去4D-" + nodeName);
return true; return true;
...@@ -891,8 +895,8 @@ namespace AGVControl ...@@ -891,8 +895,8 @@ namespace AGVControl
if (!Common.missionManager.GetUnlockRfids(Common.nodeInfo[idx].Name).Contains(nodeInfo[idx].RFID)) if (!Common.missionManager.GetUnlockRfids(Common.nodeInfo[idx].Name).Contains(nodeInfo[idx].RFID))
{ {
warnMsg = string.Format("料架{0}在接驳台{1}最外侧,但没有解绑信息,请检查", nodeInfo[idx].RFID, nodeInfo[idx].Name); warnMsg = string.Format("料架{0}在接驳台{1}最外侧,但没有解绑信息,请检查", nodeInfo[idx].RFID, nodeInfo[idx].Name);
Common.log.Error(warnMsg); Common.LogInfo(warnMsg);
return false; return true;
} }
rfid = nodeInfo[idx].RFID; rfid = nodeInfo[idx].RFID;
warnMsg = ""; warnMsg = "";
......
...@@ -18,6 +18,7 @@ namespace AGVControl.BLL ...@@ -18,6 +18,7 @@ namespace AGVControl.BLL
//private int areaC_Index; //private int areaC_Index;
private System.Timers.Timer AgvCallTimer; private System.Timers.Timer AgvCallTimer;
private System.Timers.Timer AgvStateTimer; private System.Timers.Timer AgvStateTimer;
private System.Timers.Timer NodeStateTimer;
//public List<string> Marks; //public List<string> Marks;
private const int REG_STATUS = 20; private const int REG_STATUS = 20;
//private List<string> shelfLockedNodeNames; //private List<string> shelfLockedNodeNames;
...@@ -42,6 +43,13 @@ namespace AGVControl.BLL ...@@ -42,6 +43,13 @@ namespace AGVControl.BLL
Enabled = false Enabled = false
}; };
AgvStateTimer.Elapsed += AgvStateTimer_Elapsed; AgvStateTimer.Elapsed += AgvStateTimer_Elapsed;
NodeStateTimer = new System.Timers.Timer
{
Interval = 5000,
AutoReset = true,
Enabled = false
};
NodeStateTimer.Elapsed += NodeStateTimer_Elapsed;
} }
...@@ -49,19 +57,67 @@ namespace AGVControl.BLL ...@@ -49,19 +57,67 @@ namespace AGVControl.BLL
{ {
AgvCallTimer.Enabled = true; AgvCallTimer.Enabled = true;
AgvStateTimer.Enabled = true; AgvStateTimer.Enabled = true;
NodeStateTimer.Enabled = true;
AgvCallTimer.Start(); AgvCallTimer.Start();
AgvStateTimer.Start(); AgvStateTimer.Start();
NodeStateTimer.Start();
} }
public void Stop() public void Stop()
{ {
AgvCallTimer.Enabled = false; AgvCallTimer.Enabled = false;
AgvStateTimer.Enabled = false; AgvStateTimer.Enabled = false;
NodeStateTimer.Enabled = false;
AgvCallTimer.Stop(); AgvCallTimer.Stop();
AgvStateTimer.Stop(); AgvStateTimer.Stop();
NodeStateTimer.Stop();
} }
private bool NodeStateInProcess = false;
private void NodeStateTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
if (NodeStateInProcess) return;
NodeStateInProcess = true;
try
{
String tmp = "";
for (int j = 0; j < Common.nodeInfo.Count; j++)
{
if (Common.nodeInfo[j].Name.StartsWith(SettingString.D4_Name_Prefix) || Common.nodeInfo[j].Name.StartsWith(SettingString.C4_Name_Prefix))
{
if (!Common.nodeInfo[j].Name.Equals(SettingString.C4FeederIn) && !Common.nodeInfo[j].Name.Equals(SettingString.C4FeederOut) &&
!Common.nodeInfo[j].Name.Equals(SettingString.D4FeederIn) && !Common.nodeInfo[j].Name.Equals(SettingString.D4FeederOut))
{
tmp = AGVManager.GetFirstRFID(Common.nodeInfo[j].Name);
if (!tmp.Equals(Common.nodeInfo[j].RFID))
{
Common.nodeInfo[j].RFID = tmp;
NodeChangedEvent?.Invoke(j);
}
}
if (Common.nodeInfo[j].Name.Equals(SettingString.C4FeederOut) || Common.nodeInfo[j].Name.Equals(SettingString.D4FeederOut))
{
if (Common.missionManager.GetUnlockCnt(Common.nodeInfo[j].Name) > 0)
{
tmp = Common.missionManager.GetUnlockRfids(Common.nodeInfo[j].Name)[0];
if (!tmp.Equals(Common.nodeInfo[j].RFID))
{
Common.nodeInfo[j].RFID = tmp;
NodeChangedEvent?.Invoke(j);
}
}
}
}
}
}
catch(Exception ex)
{
Common.log.Error("NodeStateTimer " + ex.Message + ex.StackTrace);
}
NodeStateInProcess = false;
}
private bool AgvStateInProcess = false; private bool AgvStateInProcess = false;
private eAGVState preAGVState = eAGVState.None; private eAGVState preAGVState = eAGVState.None;
private void AgvStateTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) private void AgvStateTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
...@@ -73,20 +129,6 @@ namespace AGVControl.BLL ...@@ -73,20 +129,6 @@ namespace AGVControl.BLL
String tmp = ""; String tmp = "";
for (int j = 0; j < Common.nodeInfo.Count; j++) for (int j = 0; j < Common.nodeInfo.Count; j++)
{ {
if(Common.nodeInfo[j].Name.StartsWith(SettingString.D4_Name_Prefix) || Common.nodeInfo[j].Name.StartsWith(SettingString.C4_Name_Prefix))
{
if(!Common.nodeInfo[j].Name.Equals(SettingString.C4FeederIn) && !Common.nodeInfo[j].Name.Equals(SettingString.C4FeederOut) &&
!Common.nodeInfo[j].Name.Equals(SettingString.D4FeederIn) && !Common.nodeInfo[j].Name.Equals(SettingString.D4FeederOut))
{
tmp = AGVManager.GetRFIDs(Common.nodeInfo[j].Name).Split(',')[3];
if(!tmp.Equals(Common.nodeInfo[j].RFID))
{
Common.nodeInfo[j].RFID = tmp;
NodeChangedEvent?.Invoke(j);
}
}
}
if (!Common.nodeInfo[j].Online) if (!Common.nodeInfo[j].Online)
{ {
msglist.Add(new AlarmMsg(Common.nodeInfo[j].AliceName, "lineAgv." + Common.nodeInfo[j].Name + ".OffLine", "离线")); msglist.Add(new AlarmMsg(Common.nodeInfo[j].AliceName, "lineAgv." + Common.nodeInfo[j].Name + ".OffLine", "离线"));
...@@ -116,7 +158,7 @@ namespace AGVControl.BLL ...@@ -116,7 +158,7 @@ namespace AGVControl.BLL
{ {
AgvChanged?.Invoke(i); AgvChanged?.Invoke(i);
} }
Common.log.Debug("获取AGV状态"); Common.log.Debug("获取AGV状态");
Thread.Sleep(50); Thread.Sleep(50);
rtn = Common.mir.Get_IO_Status(Common.agvInfo[i], out bool[] input, out bool[] output); rtn = Common.mir.Get_IO_Status(Common.agvInfo[i], out bool[] input, out bool[] output);
......
...@@ -214,9 +214,9 @@ namespace AGVControl ...@@ -214,9 +214,9 @@ namespace AGVControl
} }
dgvUnlockInfo.DataSource = bs; //赋值控件自动更新 dgvUnlockInfo.DataSource = bs; //赋值控件自动更新
dgvUnlockDetail.DataSource = bs2; dgvUnlockDetail.DataSource = bs2;
})); }));
this.Invoke(new Action(()=> this.Invoke(new Action(() =>
{ {
//grpUnlock.Text = "解绑总数:"+count; //grpUnlock.Text = "解绑总数:"+count;
} }
...@@ -616,9 +616,11 @@ namespace AGVControl ...@@ -616,9 +616,11 @@ namespace AGVControl
{ {
Task.Factory.StartNew(() => Task.Factory.StartNew(() =>
{ {
AGVManager.UpdateStatus(txtBoxRFID.Text.ToUpper(), txtBoxLineName.Text.ToUpper()); bool rtn = AGVManager.UpdateStatus(txtBoxRFID.Text.ToUpper(), txtBoxLineName.Text.ToUpper());
this.Invoke(new Action(() => { label11.Text = rtn ? "状态上报成功" : "状态上报失败"; }));
Common.LogInfo(string.Format("手动上报状态 产线{0} 物料状态更新成功[{1}]", txtBoxLineName.Text.ToUpper(), txtBoxRFID.Text.ToUpper())); Common.LogInfo(string.Format("手动上报状态 产线{0} 物料状态更新成功[{1}]", txtBoxLineName.Text.ToUpper(), txtBoxRFID.Text.ToUpper()));
txtBoxLineName.Text = "";
txtBoxRFID.Text = "";
}); });
} }
catch (Exception ex) catch (Exception ex)
...@@ -662,5 +664,23 @@ namespace AGVControl ...@@ -662,5 +664,23 @@ namespace AGVControl
} }
} }
private void btnGetStationRfid_Click(object sender, EventArgs e)
{
if (txtBoxLineName.Text.Equals(""))
return;
string res = AGVManager.GetRFIDs(txtBoxLineName.Text.ToUpper());
this.Invoke(new Action(() => { label11.Text = string.Format("由里到外料架顺序:{0}", res); }));
}
private void btnClearStationRFID_Click(object sender, EventArgs e)
{
if (!txtBoxLineName.Text.Equals("") && !txtBoxRFID.Text.Equals(""))
{
bool rtn = AGVManager.ClearRFID(txtBoxLineName.Text.ToUpper(), txtBoxRFID.Text.ToUpper());
this.Invoke(new Action(() => { label11.Text = rtn ? "清除接驳RFID成功:" + txtBoxLineName.Text + " " + txtBoxRFID.Text : "清除接驳RFID失败:" + txtBoxLineName.Text + " " + txtBoxRFID.Text; }));
txtBoxLineName.Text = "";
txtBoxRFID.Text = "";
}
}
} }
} }
...@@ -174,6 +174,9 @@ ...@@ -174,6 +174,9 @@
<metadata name="Column16.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> <metadata name="Column16.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value> <value>True</value>
</metadata> </metadata>
<metadata name="backgroundWorker1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value> <value>
......
...@@ -51,7 +51,7 @@ namespace AGVControl ...@@ -51,7 +51,7 @@ namespace AGVControl
Common.control = new BLL.Control(); Common.control = new BLL.Control();
//获取节点位置 //获取节点位置
//Common.GetNodesPosition(); Common.GetNodesPosition();
Common.control.Start(); Common.control.Start();
Common.server = new AgvServer(); Common.server = new AgvServer();
Common.server.Start(); Common.server.Start();
......
...@@ -56,7 +56,7 @@ namespace AGVControl ...@@ -56,7 +56,7 @@ namespace AGVControl
System.Threading.Interlocked.Increment(ref tmp); System.Threading.Interlocked.Increment(ref tmp);
EmptyCnt = tmp; EmptyCnt = tmp;
Rfids.Add(rfid, DateTime.Now.ToString("yyyy/MM/dd/HH:mm:ss,fff")); Rfids.Add(rfid, DateTime.Now.ToString("yyyy/MM/dd/HH:mm:ss,fff"));
// Common.WriteIni(NodeName, SettingString.EmptyShelfCnt, emptyCnt.ToString()); Common.WriteIni(NodeName, SettingString.EmptyShelfCnt, EmptyCnt.ToString());
//using (System.IO.StreamWriter file = new System.IO.StreamWriter(Common.CONFIG_PATH + "UnlockInfo.txt")) //using (System.IO.StreamWriter file = new System.IO.StreamWriter(Common.CONFIG_PATH + "UnlockInfo.txt"))
//{ //{
// foreach (var item in Rfids.Keys) // foreach (var item in Rfids.Keys)
...@@ -83,8 +83,12 @@ namespace AGVControl ...@@ -83,8 +83,12 @@ namespace AGVControl
int tmp = EmptyCnt; int tmp = EmptyCnt;
System.Threading.Interlocked.Decrement(ref tmp); System.Threading.Interlocked.Decrement(ref tmp);
EmptyCnt = tmp; EmptyCnt = tmp;
Rfids.Remove(rfid); if (EmptyCnt.Equals(0) && Rfids.Count >0)
//Common.WriteIni(nodeName, SettingString.EmptyShelfCnt, emptyCnt.ToString()); {
Rfids.Clear();
}
//Rfids.Remove(rfid);
Common.WriteIni(NodeName, SettingString.EmptyShelfCnt, EmptyCnt.ToString());
//using (System.IO.StreamWriter file = new System.IO.StreamWriter(Common.CONFIG_PATH + "UnlockInfo.txt")) //using (System.IO.StreamWriter file = new System.IO.StreamWriter(Common.CONFIG_PATH + "UnlockInfo.txt"))
//{ //{
// foreach (var item in Rfids.Keys) // foreach (var item in Rfids.Keys)
......
...@@ -19,7 +19,7 @@ namespace AGVControl ...@@ -19,7 +19,7 @@ namespace AGVControl
/// </summary> /// </summary>
/// <param name="agvPlae">小车当前位置,空表示在待机位</param> /// <param name="agvPlae">小车当前位置,空表示在待机位</param>
/// <param name="palce">空料架位置点</param> /// <param name="palce">空料架位置点</param>
public GoEmptyShelfLineJob(string agvPlae, string palce,string rfid) public GoEmptyShelfLineJob(string agvPlae, string palce, string rfid)
{ {
EmptyShelfPlace = palce; EmptyShelfPlace = palce;
this.agvPlae = agvPlae; this.agvPlae = agvPlae;
...@@ -63,10 +63,12 @@ namespace AGVControl ...@@ -63,10 +63,12 @@ namespace AGVControl
// CurTaskState = st; // CurTaskState = st;
if (TakeEmptyStep.IsStep(TAKE_EMPTY_STEP.NONE)) if (TakeEmptyStep.IsStep(TAKE_EMPTY_STEP.NONE))
{ {
if (nodeIdx == -1)
return null;
if (agvPlae.StartsWith(SettingString.C4_Name_Prefix) && EmptyShelfPlace.StartsWith(SettingString.D4_Name_Prefix))//4C->4D if (agvPlae.StartsWith(SettingString.C4_Name_Prefix) && EmptyShelfPlace.StartsWith(SettingString.D4_Name_Prefix))//4C->4D
{ {
TakeEmptyStep.ToNextStep(TAKE_EMPTY_STEP.WAIT_AGV_REACH_4D_DOOR); TakeEmptyStep.ToNextStep(TAKE_EMPTY_STEP.WAIT_AGV_REACH_4D_DOOR);
runInfo = "去空料架产线" + EmptyShelfPlace + ",先前往4D门[" + agvPlae + "->" + EmptyShelfPlace + "]"+"[RFID="+RFID+"]"; runInfo = "去空料架产线" + EmptyShelfPlace + ",先前往4D门[" + agvPlae + "->" + EmptyShelfPlace + "]" + "[RFID=" + RFID + "]";
msg += runInfo; msg += runInfo;
TakeEmptyStep.Msg = msg; TakeEmptyStep.Msg = msg;
Common.DoorMission(agv, SettingString.DoorCToD); Common.DoorMission(agv, SettingString.DoorCToD);
...@@ -76,15 +78,15 @@ namespace AGVControl ...@@ -76,15 +78,15 @@ namespace AGVControl
&& EmptyShelfPlace.StartsWith(SettingString.C4_Name_Prefix))//4D->4C && EmptyShelfPlace.StartsWith(SettingString.C4_Name_Prefix))//4D->4C
{ {
TakeEmptyStep.ToNextStep(TAKE_EMPTY_STEP.WAIT_AGV_REACH_4C_DOOR); TakeEmptyStep.ToNextStep(TAKE_EMPTY_STEP.WAIT_AGV_REACH_4C_DOOR);
runInfo= "去空料架产线" + EmptyShelfPlace + ",先前往4C门[" + agvPlae + "->" + EmptyShelfPlace + "]" + "[RFID=" + RFID + "]"; runInfo = "去空料架产线" + EmptyShelfPlace + ",先前往4C门[" + agvPlae + "->" + EmptyShelfPlace + "]" + "[RFID=" + RFID + "]";
msg += runInfo; msg += runInfo;
TakeEmptyStep.Msg = msg; TakeEmptyStep.Msg = msg;
Common.DoorMission(agv, SettingString.DoorDToC); Common.DoorMission(agv, SettingString.DoorDToC);
UpdateJobTaskInfo(agv.CurTaskName, agv.CurTaskID); UpdateJobTaskInfo(agv.CurTaskName, agv.CurTaskID);
} }
else if(agvPlae.StartsWith(SettingString.C4_Name_Prefix) && EmptyShelfPlace.StartsWith(SettingString.C4_Name_Prefix)) else if (agvPlae.StartsWith(SettingString.C4_Name_Prefix) && EmptyShelfPlace.StartsWith(SettingString.C4_Name_Prefix))
{ {
if(Common.Check4CTarget(agv, EmptyShelfPlace))//被占用 if (Common.Check4CTarget(agv, EmptyShelfPlace))//被占用
{ {
TakeEmptyStep.ToNextStep(TAKE_EMPTY_STEP.WAIT_REACH_TEMP_PLACE); TakeEmptyStep.ToNextStep(TAKE_EMPTY_STEP.WAIT_REACH_TEMP_PLACE);
runInfo = "目的地" + EmptyShelfPlace + "有小车占用,先到临时待机位" + "[RFID=" + RFID + "]"; runInfo = "目的地" + EmptyShelfPlace + "有小车占用,先到临时待机位" + "[RFID=" + RFID + "]";
...@@ -92,8 +94,8 @@ namespace AGVControl ...@@ -92,8 +94,8 @@ namespace AGVControl
TakeEmptyStep.Msg = msg; TakeEmptyStep.Msg = msg;
Common.MoveTo4CStandy(agv); Common.MoveTo4CStandy(agv);
UpdateJobTaskInfo(agv.CurTaskName, agv.CurTaskID); UpdateJobTaskInfo(agv.CurTaskName, agv.CurTaskID);
} }
else else
{ {
TakeEmptyStep.ToNextStep(TAKE_EMPTY_STEP.ASSIGN_AGV_TASK); TakeEmptyStep.ToNextStep(TAKE_EMPTY_STEP.ASSIGN_AGV_TASK);
runInfo = "开始执行回收空料架任务[" + agvPlae + "->" + EmptyShelfPlace + "]" + "[RFID=" + RFID + "]"; runInfo = "开始执行回收空料架任务[" + agvPlae + "->" + EmptyShelfPlace + "]" + "[RFID=" + RFID + "]";
...@@ -104,7 +106,7 @@ namespace AGVControl ...@@ -104,7 +106,7 @@ namespace AGVControl
else else
{ {
TakeEmptyStep.ToNextStep(TAKE_EMPTY_STEP.ASSIGN_AGV_TASK); TakeEmptyStep.ToNextStep(TAKE_EMPTY_STEP.ASSIGN_AGV_TASK);
runInfo= "开始执行回收空料架任务[" + agvPlae + "->" + EmptyShelfPlace + "]" + "[RFID=" + RFID + "]"; runInfo = "开始执行回收空料架任务[" + agvPlae + "->" + EmptyShelfPlace + "]" + "[RFID=" + RFID + "]";
msg += runInfo; msg += runInfo;
TakeEmptyStep.Msg = msg; TakeEmptyStep.Msg = msg;
} }
...@@ -164,7 +166,7 @@ namespace AGVControl ...@@ -164,7 +166,7 @@ namespace AGVControl
if (nodeIdx > -1) if (nodeIdx > -1)
{ {
TakeEmptyStep.ToNextStep(TAKE_EMPTY_STEP.WAIT_AGV_START_TASK); TakeEmptyStep.ToNextStep(TAKE_EMPTY_STEP.WAIT_AGV_START_TASK);
runInfo= "AGV 添加任务:移动到" + EmptyShelfPlace + "[RFID=" + RFID + "]"; runInfo = "AGV 添加任务:移动到" + EmptyShelfPlace + "[RFID=" + RFID + "]";
msg += runInfo; msg += runInfo;
TakeEmptyStep.Msg = msg; TakeEmptyStep.Msg = msg;
Common.MoveToNode(agv, EmptyShelfPlace); Common.MoveToNode(agv, EmptyShelfPlace);
...@@ -173,7 +175,7 @@ namespace AGVControl ...@@ -173,7 +175,7 @@ namespace AGVControl
else else
{ {
TakeEmptyStep.ToNextStep(TAKE_EMPTY_STEP.ASSIGN_AGV_TASK); TakeEmptyStep.ToNextStep(TAKE_EMPTY_STEP.ASSIGN_AGV_TASK);
runInfo= EmptyShelfPlace + " 不存在或未开启调用"; runInfo = EmptyShelfPlace + " 不存在或未开启调用";
msg += runInfo; msg += runInfo;
TakeEmptyStep.Msg = msg; TakeEmptyStep.Msg = msg;
} }
...@@ -183,7 +185,7 @@ namespace AGVControl ...@@ -183,7 +185,7 @@ namespace AGVControl
if (agv.CurTaskState.Equals(SettingString.Executing)) if (agv.CurTaskState.Equals(SettingString.Executing))
{ {
TakeEmptyStep.ToNextStep(TAKE_EMPTY_STEP.WAIT_REACH_PLACE); TakeEmptyStep.ToNextStep(TAKE_EMPTY_STEP.WAIT_REACH_PLACE);
runInfo= "AGV开始向目的地[" + EmptyShelfPlace + "]移动" + "[RFID=" + RFID + "]"; runInfo = "AGV开始向目的地[" + EmptyShelfPlace + "]移动" + "[RFID=" + RFID + "]";
msg += runInfo; msg += runInfo;
TakeEmptyStep.Msg = msg; TakeEmptyStep.Msg = msg;
} }
...@@ -203,7 +205,7 @@ namespace AGVControl ...@@ -203,7 +205,7 @@ namespace AGVControl
//else //else
{ {
TakeEmptyStep.ToNextStep(TAKE_EMPTY_STEP.WAIT_LINE_RESPONSE); TakeEmptyStep.ToNextStep(TAKE_EMPTY_STEP.WAIT_LINE_RESPONSE);
runInfo= "AGV到达 " + EmptyShelfPlace + " 向产线发送出料架请求[ReadyLeave]" + "[RFID=" + RFID + "]"; runInfo = "AGV到达 " + EmptyShelfPlace + " 向产线发送出料架请求[ReadyLeave]" + "[RFID=" + RFID + "]";
msg += runInfo; msg += runInfo;
TakeEmptyStep.Msg = msg; TakeEmptyStep.Msg = msg;
if (nodeIdx == -1) if (nodeIdx == -1)
...@@ -222,9 +224,9 @@ namespace AGVControl ...@@ -222,9 +224,9 @@ namespace AGVControl
} }
else if (TakeEmptyStep.IsStep(TAKE_EMPTY_STEP.WAIT_LINE_RESPONSE)) else if (TakeEmptyStep.IsStep(TAKE_EMPTY_STEP.WAIT_LINE_RESPONSE))
{ {
if(nodeIdx==-1) if (nodeIdx == -1)
{ {
runInfo= EmptyShelfPlace + " 未开启调用"; runInfo = EmptyShelfPlace + " 未开启调用";
msg += runInfo; msg += runInfo;
TakeEmptyStep.Msg = msg; TakeEmptyStep.Msg = msg;
return this; return this;
...@@ -260,18 +262,23 @@ namespace AGVControl ...@@ -260,18 +262,23 @@ namespace AGVControl
{ {
ClientNode node = Common.nodeInfo[nodeIdx]; ClientNode node = Common.nodeInfo[nodeIdx];
//回收空料架数量减少1 //回收空料架数量减少1
Common.missionManager.DelMission(EmptyShelfPlace,RFID); Common.missionManager.DelMission(EmptyShelfPlace, RFID);
runInfo= "空料架在[" + EmptyShelfPlace + "]进入小车完成" + "[RFID=" + RFID + "]"; if (!agvPlae.Equals(SettingString.D4FeederOut) && !agvPlae.Equals(SettingString.C4FeederOut))
AGVManager.ClearRFID(EmptyShelfPlace, RFID);
runInfo = "空料架在[" + EmptyShelfPlace + "]进入小车完成" + "[RFID=" + RFID + "]";
msg += runInfo; msg += runInfo;
TakeEmptyStep.Msg = msg; TakeEmptyStep.Msg = msg;
//4DfeederOut默认大料架 //4DfeederOut默认大料架
if (agv.Place.Equals(SettingString.D4FeederOut)) //if (agv.Place.Equals(SettingString.D4FeederOut))
return new EmptyShelfBackJob(EmptyShelfPlace, eShelfType.BigShelf); //{
else if(agv.Place.Equals(SettingString.C4FeederOut)) // return new EmptyShelfBackJob(EmptyShelfPlace, eShelfType.BigShelf);
return new EmptyShelfBackJob(EmptyShelfPlace, eShelfType.BigShelf); //}
else if (agv.RFID.StartsWith("D")) //else if(agv.Place.Equals(SettingString.C4FeederOut))
//{
// return new EmptyShelfBackJob(EmptyShelfPlace, eShelfType.BigShelf);
//}
if (agv.RFID.StartsWith("D"))
{ {
AGVManager.ClearRFID(EmptyShelfPlace, RFID);
return new EmptyShelfBackJob(EmptyShelfPlace, eShelfType.SmallShelf); return new EmptyShelfBackJob(EmptyShelfPlace, eShelfType.SmallShelf);
} }
else if (agv.RFID.StartsWith("C")) else if (agv.RFID.StartsWith("C"))
...@@ -285,7 +292,7 @@ namespace AGVControl ...@@ -285,7 +292,7 @@ namespace AGVControl
{ {
//链条停止 //链条停止
runInfo = "空料架在[" + EmptyShelfPlace + "]进入小车超时[" + timeOutValue.ToString("f1") + "秒],请检查料架进入小车的情况" + "[RFID=" + RFID + "]"; runInfo = "空料架在[" + EmptyShelfPlace + "]进入小车超时[" + timeOutValue.ToString("f1") + "秒],请检查料架进入小车的情况" + "[RFID=" + RFID + "]";
// msg += runInfo; // msg += runInfo;
//TakeEmptyStep.Msg = msg; //TakeEmptyStep.Msg = msg;
} }
......
...@@ -60,7 +60,7 @@ namespace AGVControl ...@@ -60,7 +60,7 @@ namespace AGVControl
{ {
return Common.missionManager.GetUnlockCnt(Name); return Common.missionManager.GetUnlockCnt(Name);
} }
return -1; return 0;
} }
} }
public string AliceName { get; set; } public string AliceName { get; set; }
......
...@@ -35,15 +35,12 @@ namespace AGVControl ...@@ -35,15 +35,12 @@ namespace AGVControl
{ {
if (!SettingString.C4_AGV_IPs.Contains(agv.IP)) if (!SettingString.C4_AGV_IPs.Contains(agv.IP))
continue; continue;
if (agv.CurJob is GoEmptyShelfLineJob || agv.CurJob is EmptyShelfBackJob) if (agv.CurJob is GoEmptyShelfLineJob)//|| agv.CurJob is EmptyShelfBackJob
{ {
emptyJobCnt++; emptyJobCnt++;
} }
} }
if ((SettingString.AGVCNT - emptyJobCnt).Equals(2))//保留2辆小车出满料架
{
return null;
}
//出工单料的目的地是否有空料架 //出工单料的目的地是否有空料架
if (Common.FindEmptyShelfBeforeSendFullShelf(out string nodeName,out rfid)) if (Common.FindEmptyShelfBeforeSendFullShelf(out string nodeName,out rfid))
{ {
...@@ -61,6 +58,10 @@ namespace AGVControl ...@@ -61,6 +58,10 @@ namespace AGVControl
} }
if (cnt < clientNode.EmptyShelfCnt) if (cnt < clientNode.EmptyShelfCnt)
{ {
if ((SettingString.AGVCNT / 2 - emptyJobCnt).Equals(2))//保留1辆小车出满料架
{
return null;
}
return new GoEmptyShelfLineJob(currentAgv.Place, nodeName,rfid); return new GoEmptyShelfLineJob(currentAgv.Place, nodeName,rfid);
} }
} }
...@@ -74,7 +75,13 @@ namespace AGVControl ...@@ -74,7 +75,13 @@ namespace AGVControl
{ {
int i = Common.agvInfo.FindIndex(s => s.CurJob is GoEmptyShelfLineJob && ((GoEmptyShelfLineJob)s.CurJob).EmptyShelfPlace.Equals(emptyNodeName)); int i = Common.agvInfo.FindIndex(s => s.CurJob is GoEmptyShelfLineJob && ((GoEmptyShelfLineJob)s.CurJob).EmptyShelfPlace.Equals(emptyNodeName));
if (i == -1) if (i == -1)
return new GoEmptyShelfLineJob(currentAgv.Place, emptyNodeName,rfid); {
if ((SettingString.AGVCNT / 2 - emptyJobCnt).Equals(2))//保留1辆小车出满料架
{
return null;
}
return new GoEmptyShelfLineJob(currentAgv.Place, emptyNodeName, rfid);
}
} }
} }
......
...@@ -38,15 +38,11 @@ namespace AGVControl ...@@ -38,15 +38,11 @@ namespace AGVControl
{ {
if (SettingString.C4_AGV_IPs.Contains(agv.IP)) if (SettingString.C4_AGV_IPs.Contains(agv.IP))
continue; continue;
if (agv.CurJob is GoEmptyShelfLineJob || agv.CurJob is EmptyShelfBackJob) if (agv.CurJob is GoEmptyShelfLineJob)//|| agv.CurJob is EmptyShelfBackJob
{ {
emptyJobCnt++; emptyJobCnt++;
} }
} }
if ((SettingString.AGVCNT / 2 - emptyJobCnt).Equals(1))//保留1辆小车出满料架
{
return null;
}
//出工单料的目的地是否有空料架 //出工单料的目的地是否有空料架
if (Common.FindEmptyShelfBeforeSendFullShelf(out string nodeName,out rfid)) if (Common.FindEmptyShelfBeforeSendFullShelf(out string nodeName,out rfid))
{ {
...@@ -66,6 +62,10 @@ namespace AGVControl ...@@ -66,6 +62,10 @@ namespace AGVControl
} }
if (cnt < clientNode.EmptyShelfCnt) if (cnt < clientNode.EmptyShelfCnt)
{ {
if ((SettingString.AGVCNT / 2 - emptyJobCnt).Equals(1))//保留1辆小车出满料架
{
return null;
}
return new GoEmptyShelfLineJob(currentAgv.Place, nodeName,rfid); return new GoEmptyShelfLineJob(currentAgv.Place, nodeName,rfid);
} }
} }
...@@ -78,7 +78,13 @@ namespace AGVControl ...@@ -78,7 +78,13 @@ namespace AGVControl
{ {
int i = Common.agvInfo.FindIndex(s => s.CurJob is GoEmptyShelfLineJob && ((GoEmptyShelfLineJob)s.CurJob).EmptyShelfPlace.Equals(emptyNodeName)); int i = Common.agvInfo.FindIndex(s => s.CurJob is GoEmptyShelfLineJob && ((GoEmptyShelfLineJob)s.CurJob).EmptyShelfPlace.Equals(emptyNodeName));
if (i == -1) if (i == -1)
return new GoEmptyShelfLineJob(currentAgv.Place, emptyNodeName,rfid); {
if ((SettingString.AGVCNT / 2 - emptyJobCnt).Equals(1))//保留1辆小车出满料架
{
return null;
}
return new GoEmptyShelfLineJob(currentAgv.Place, emptyNodeName, rfid);
}
} }
} }
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!