/// <summary> /// 是否存在未装货任务 /// </summary> /// <param name="taskid"></param> /// <returns></returns> public int IsExistLoad(string loadSite) { int id = 0; if (!string.IsNullOrEmpty(loadSite)) { NDCItem item = Items.Find(c => { return(c._mTask.LOADSITE == loadSite && c.PLCStatus <= NDCPlcStatus.Loading); }); if (item != null) { id = item._mTask.TASKID; } } return(id); }
/// <summary> /// /// </summary> /// <param name="ndcItem"></param> private void CheckCanUpdateTaskList(NDCItem ndcItem) { if (ndcItem._mTask.IKEY != 0 && ndcItem._mTask.ORDERINDEX != 0 && ndcItem._mTask.TASKID != 0) { if (TaskGridUpdate != null) { TaskGridUpdate(ndcItem); } else { if (_initItems.Contains(ndcItem)) { return; } _initItems.Add(ndcItem); } } }
/// <summary> /// 检查AGV 棍台消息任务 /// </summary> /// <param name="item"></param> /// <param name="v"></param> private void CheckPlc(NDCItem item, Message_vpil v) { Console.WriteLine("PLC:" + v.PlcLp1 + " Value:" + v.Value1); if (v.PlcLp1 == 29 && v.Value1 == 1) { //装货中 item.PLCStatus = NDCPlcStatus.Loading; LoadItemList.Remove(item._mTask.NDCINDEX); //通知WCS _NoticeWcsLoading(item._mTask.TASKID, item.CARRIERID + ""); } else if (v.PlcLp1 == 29 && v.Value1 == 2) { //卸货中 item.PLCStatus = NDCPlcStatus.Unloading; UnLoadItemList.Remove(item._mTask.NDCINDEX); } }
/// <summary> /// 更新S消息 /// </summary> /// <param name="message"></param> internal override void UpdateItem(Message_s message) { try { //找出被挂起的任务的重定向站点,重新重定向任务 if (message.Magic == 32) //32 Carwash sends this request { //TODO Carwash 重定向 DoCarWashReDirect(message); return; } NDCItem ndcItem = Items.Find(c => { return(c._mTask.NDCINDEX == message.Index); }); if (ndcItem == null) { ndcItem = TempItems.Find(c => { return(c._mTask.NDCINDEX == message.Index); }); if (ndcItem != null) { ndcItem.CARRIERID = message.CarrierNumber; } else { ndcItem = new NDCItem(); ndcItem.CARRIERID = message.CarrierNumber; ndcItem._mTask.NDCINDEX = message.Index; TempItems.Add(ndcItem); } } ndcItem.SetSMessage(message); if (ndcItem.StatusInfo != "") { Console.WriteLine(ndcItem.StatusInfo); log.LOG(ndcItem.StatusInfo); } CheckMagic(ndcItem, message); _NoticeUpdate(ndcItem); } catch (Exception e) { Console.WriteLine(e.Message); log.LOG(e.Message); } }
public void Update(NDCItem item) { if (taskid != item._mTask.TASKID) { TaskID = item._mTask.TASKID; } if (ikey != item._mTask.IKEY) { IKey = item._mTask.IKEY; } if (order != item._mTask.NDCINDEX) { Order = item._mTask.NDCINDEX; } if (agvname != item.CARRIERID) { AgvName = item.CARRIERID; } if (loadsite != item._mTask.LOADSITE) { LoadSite = item._mTask.LOADSITE; } if (unloadsite != item._mTask.UNLOADSITE) { UnLoadSite = item._mTask.UNLOADSITE; } if (redirectsite != item._mTask.REDIRECTSITE) { RedirectSite = item._mTask.REDIRECTSITE; } if (hasload != item._mTask.HADLOAD) { HasLoad = item._mTask.HADLOAD; } if (pause != item._mTask.PAUSE) { pause = item._mTask.PAUSE; Pause = ""; } }
public void Update(NDCItem item) { if (taskid != item._mTask.TASKID) { TaskID = item._mTask.TASKID; } if (ikey != item._mTask.IKEY) { IKey = item._mTask.IKEY; } if (order != item._mTask.ORDERINDEX) { Order = item._mTask.ORDERINDEX; } if (agvname != item.CarrierId) { AgvName = item.CarrierId; } if (loadsite != item._mTask.LOADSITE) { LoadSite = item._mTask.LOADSITE; } if (unloadsite != item._mTask.UNLOADSITE) { UnLoadSite = item._mTask.UNLOADSITE; } if (redirectsite != item._mTask.REDIRECTSITE) { RedirectSite = item._mTask.REDIRECTSITE; } if (hasload = item._mTask.HADLOAD) { HasLoad = item._mTask.HADLOAD; } if (hasunload = item._mTask.HADUNLOAD) { HasUnLoad = item._mTask.HADUNLOAD; } }
/// <summary> /// 检查任务状态 /// </summary> /// <param name="status"></param> private void CheckStatus(NDCItem item, Message_b b) { switch (item.Status) { case 37: //小车已经分配 item.CarrierId = b.ParNo; break; case 3: //任务完成 item.IsFinish = true; item.finishTime = DateTime.Now; break; case 27: //IKEY in use TempItem temp = TempList.Find(c => { return(c.IKey.Equals("" + item._mTask.IKEY)); }); if (temp != null) { temp.IKey = Ikey++; DoStartOrder(temp); } break; } }
/// <summary> /// 更新B消息 /// </summary> /// <param name="message"></param> internal override void UpdateItem(Message_b message) { try { NDCItem ndcItem = Items.Find(c => { return(c._mTask.NDCINDEX == message.Index); }); if (ndcItem == null) { ndcItem = TempItems.Find(c => { return(c._mTask.NDCINDEX == message.Index); }); if (ndcItem != null) { ndcItem._mTask.IKEY = message.IKEY; } else { ndcItem = new NDCItem(); ndcItem._mTask.IKEY = message.IKEY; ndcItem._mTask.NDCINDEX = message.Index; TempItems.Add(ndcItem); } } ndcItem.SetBMessage(message); if (ndcItem.TaskInfo != "") { Console.WriteLine(ndcItem.TaskInfo); log.LOG(ndcItem.TaskInfo); } CheckStatus(ndcItem, message); _NoticeUpdate(ndcItem); } catch (Exception e) { Console.WriteLine(e.Message); log.LOG(e.Message); } }
/// <summary> /// 将任务状态置为挂起/执行 /// </summary> /// <param name="i"></param> /// <param name="v"></param> public void PauseNdcTask(NDCItem i, bool v) { string sql = string.Format(@"update WCS_NDC_TASK set PAUSE = '{0}' where TASKID = '{1}'", v ? Yes : No, i._mTask.TASKID); mysql.ExcuteSql(sql); }
internal override void _NoticeDelete(NDCItem i) { NoticeDelete?.Invoke(i); }
internal override void _NoticeRedirect(NDCItem i) { NoticeRedirect?.Invoke(i); }
/// <summary> /// 检查任务进程 /// </summary> /// <param name="index"></param> /// <param name="magic"></param> private void CheckMagic(NDCItem item, Message_s s) { int index = item._mTask.ORDERINDEX; switch (item.Magic) { case 2: //确定生成任务 item._mTask.NDCLOADSITE = item.s.Magic2 + ""; item._mTask.NDCUNLOADSITE = item.s.Magic3 + ""; break; case 4: //小车到达接货点 if (item.DirectStatus != NDCItemStatus.HasDirectInfo) { item.DirectStatus = NDCItemStatus.CanRedirect; } if (!ReDirectList.Contains(item._mTask.ORDERINDEX)) { ReDirectList.Add(item._mTask.ORDERINDEX); } //TODO 告诉WCS 车已经到达 //准备好装货了 item.PLCStatus = NDCPlcStatus.LoadReady; break; case 6: //小车接货完成 if (item.DirectStatus == NDCItemStatus.CanRedirect || item.DirectStatus == NDCItemStatus.Init) { if (item.HadDirectInfo) { item.DirectStatus = NDCItemStatus.HasDirectInfo; } else { item.DirectStatus = NDCItemStatus.NeedRedirect; } } if (!ReDirectList.Contains(item._mTask.ORDERINDEX)) { ReDirectList.Add(item._mTask.ORDERINDEX); } //装货完成 item.PLCStatus = NDCPlcStatus.Loaded; item._mTask.HADLOAD = true; if (item.DirectStatus == NDCItemStatus.NeedRedirect) { NoticeRedirect?.Invoke(item); } break; case 254: //重新定位成功 item.DirectStatus = NDCItemStatus.Redirected; ReDirectList.Remove(item._mTask.ORDERINDEX); break; case 8: //到达卸货点 //准备好卸货了 item.PLCStatus = NDCPlcStatus.UnloadReady; break; case 10: //卸货完成 //卸货完成 item.PLCStatus = NDCPlcStatus.Unloaded; item._mTask.HADUNLOAD = true; break; case 11: //任务完成 item.IsFinish = true; item.finishTime = DateTime.Now; break; default: break; } GetTempInfo(item); }
internal abstract void _NoticeRedirect(NDCItem model);
internal abstract void _NoticeUpdate(NDCItem model);
internal abstract void _NoticeDelete(NDCItem model);
/// <summary> /// 重新读取装货点,卸货点对应NDC实际使用信息 /// </summary> public void DoReadSQL() { try { NDCSQLControl control = new NDCSQLControl(); control.ReadWcsNdcSite(out loadStaDic, out unLoadStaDic); control.ReadNDCServerAndIKEY(out IPaddress, out Port, out Ikey); if (control.ReadUnFinishTask(out List <WCS_NDC_TASK> list)) { foreach (var i in list) { if (i.ORDERINDEX == 0) { TempItem item = TempList.Find(c => { return(c.TaskID == i.TASKID || c.IKey == i.IKEY); }); if (item == null) { TempList.Add(new TempItem() { TaskID = i.TASKID, IKey = i.IKEY, LoadSite = i.LOADSITE, UnloadSite = i.UNLOADSITE, RedirectSite = i.REDIRECTSITE, NdcLoadSite = i.NDCLOADSITE, NdcUnloadSite = i.NDCUNLOADSITE, NdcRedirectSite = i.NDCREDIRECTSITE }); } } else { NDCItem item = Items.Find(c => { return(c._mTask.IKEY == i.IKEY || c._mTask.TASKID == i.TASKID || c._mTask.ORDERINDEX == i.ORDERINDEX); }); if (item != null) { item._mTask = i; } else { NDCItem it = new NDCItem() { _mTask = i }; Items.Add(it); CheckCanUpdateTaskList(it); } } } control.DelectUnFinishTaskAfter(); } }catch (Exception e) { Console.WriteLine(e.Message); } }
/// <summary> /// 检查任务进程 /// </summary> /// <param name="index"></param> /// <param name="magic"></param> private void CheckMagic(NDCItem item, Message_s s) { int index = item._mTask.NDCINDEX; switch (item.Magic) { case 2: //确定生成任务 item._mTask.NDCLOADSITE = s.Magic2 + ""; item._mTask.NDCUNLOADSITE = s.Magic3 + ""; break; case 5: #region 小车到达接货点 if (item.DirectStatus != NDCItemStatus.HasDirectInfo) { item.DirectStatus = NDCItemStatus.CanRedirect; } if (!ReDirectList.Contains(item._mTask.NDCINDEX)) { ReDirectList.Add(item._mTask.NDCINDEX); } //准备好装货了 item.PLCStatus = NDCPlcStatus.LoadReady; #endregion break; case 6: #region 小车接货完成 if (item.DirectStatus == NDCItemStatus.CanRedirect || item.DirectStatus == NDCItemStatus.Init) { if (item.HadDirectInfo) { item.DirectStatus = NDCItemStatus.HasDirectInfo; } else { item.DirectStatus = NDCItemStatus.NeedRedirect; } } if (!ReDirectList.Contains(item._mTask.NDCINDEX)) { ReDirectList.Add(item._mTask.NDCINDEX); } //装货完成 item.PLCStatus = NDCPlcStatus.Loaded; item._mTask.HADLOAD = true; if (item.DirectStatus == NDCItemStatus.NeedRedirect) { _NoticeRedirect(item); } #endregion break; case 254: //重新定位成功 item.DirectStatus = NDCItemStatus.Redirected; ReDirectList.Remove(item._mTask.NDCINDEX); break; case 9: //到达卸货点 //准备好卸货了 item.PLCStatus = NDCPlcStatus.UnloadReady; break; case 10: //卸货完成 item.PLCStatus = NDCPlcStatus.Unloaded; item._mTask.HADUNLOAD = true; break; case 255: //取消任务 case 48: //取消任务 if (!item.CancleFromSystem) //Carwash { item._mTask.PAUSE = true; } break; case 11: //任务完成 if (item.PLCStatus != NDCPlcStatus.Unloaded && item._mTask.PAUSE) { item.IsFinish = false; //装货前 取消任务不用恢复,只需重新呼叫AGV if (!item._mTask.HADLOAD && !item._mTask.HADUNLOAD) { item.BeforeReCall(Ikey++); DoStartOrder(item); log.LOG(item._mTask.TASKID + ":任务车出现问题,现在重新呼叫AGV"); } } else { item.IsFinish = true; item.finishTime = DateTime.Now; } break; default: break; } MatchTempInfo(item); }
/// <summary> /// 根据任务ID,重新定位卸货地点 /// </summary> /// <param name="taskid"></param> /// <param name="unloadstation"></param> /// <returns></returns> public bool DoReDerect(int taskid, string unloadstation, out string result, int order = -1) { NDCItem item = Items.Find(c => { return(c._mTask.TASKID == taskid && (order == -1 || c._mTask.ORDERINDEX == order)); }); if (item == null) { TempItem temp = TempList.Find(c => { return(c.TaskID == taskid); }); if (temp != null) { if (unLoadStaDic.TryGetValue(unloadstation, out string ndcUnloadSta)) { temp.RedirectSite = unloadstation; temp.NdcRedirectSite = ndcUnloadSta; } else { result = "该区域的对应关系还没有"; return(false); } } else { result = "并未找到任务ID为:" + taskid + "的任务"; return(false); } } else { if (item.DirectStatus == NDCItemStatus.Redirected) { result = "任务已经重定位了"; return(false); } else { if (unLoadStaDic.TryGetValue(unloadstation, out string ndcUnloadSta)) { item._mTask.NDCREDIRECTSITE = ndcUnloadSta; item._mTask.REDIRECTSITE = unloadstation; if (item.DirectStatus == NDCItemStatus.NeedRedirect) { item.DirectStatus = NDCItemStatus.HasDirectInfo; } else if (item.DirectStatus == NDCItemStatus.CanRedirect || item.DirectStatus == NDCItemStatus.Init) { item.HadDirectInfo = true; } } else { result = "该区域的对应关系还没有"; return(false); } } CheckCanUpdateTaskList(item); } result = ""; return(true); }