| | |
| | | using System.Reflection; |
| | | using System.Security.Cryptography; |
| | | using static HH.WCS.Mobox3.YNJT_BZP.util.Settings; |
| | | using static HH.WCS.Mobox3.YNJT_BZP.dispatch.WCSDispatch; |
| | | |
| | | namespace HH.WCS.Mobox3.YNJT_BZP.process { |
| | | internal class TaskProcess { |
| | |
| | | internal static void CacheBitCancelUpdate(WCSTask mst) { |
| | | //任务取消,取货完成前的,起点的loadingCount和终点unLoadingCount都清除,取货完成的只处理终点 |
| | | if (WCSHelper.CheckActionRecordExist(mst.S_CODE, 4) ) { |
| | | //根据客户现场要求,如果取货完成任务失败人工拉到终点,我们就当卸货完成处理;如果是人工拉走到其它区域,我们就解锁终点,删除托盘。 |
| | | //终点绑定 |
| | | if (!WCSHelper.CheckActionRecordExist(mst.S_CODE, 5)) { |
| | | CacheBitUpdate(mst, false); |
| | |
| | | //起点终点解锁 |
| | | LocationHelper.UnLockLoc(mst.S_START_LOC); |
| | | LocationHelper.UnLockLoc(mst.S_END_LOC); |
| | | //货位容器解绑 |
| | | LocationHelper.UnBindingLoc(mst.S_START_LOC, new List<string> { mst.S_CNTR_CODE }); |
| | | |
| | | } |
| | | |
| | | } |
| | |
| | | if (taskAction.N_S_STATUS == 1) |
| | | { |
| | | LogHelper.Info($"再次安全请求,设备已反馈", "AGV"); |
| | | NDCApi.ChangeOrderParam(no, 8, "1"); |
| | | /* NDCApi.ChangeOrderParam(no, 6, "1");*/ |
| | | } |
| | | } |
| | | else |
| | |
| | | bool result = false; |
| | | if (state == 1101) |
| | | { |
| | | result = WCSDispatch.safetyInteraction(cst.S_CODE, cst.S_START_LOC, "1"); //请求取货, |
| | | LogHelper.Info("向WCS发送取货申请信号", "AGV"); |
| | | /*result = WCSDispatch.safetyInteraction(cst.S_CODE, cst.S_START_LOC, "1"); //取货申请,*/ |
| | | result = true; |
| | | } |
| | | if (state == 1102) |
| | | { |
| | | //请求卸货, |
| | | LogHelper.Info("向WCS发送取货完成安全退出信号", "AGV"); |
| | | var locCntrRels = LocationHelper.GetLocCntr(cst.S_START_LOC); |
| | | if (locCntrRels.Count == 1) |
| | | { |
| | | var container = ContainerHelper.GetCntr(locCntrRels[0].S_CNTR_CODE); |
| | | if (container != null && container.N_TYPE == 0) |
| | | { |
| | | LogHelper.Info("取货完成后,起点货位存在母拖,下发母拖入库任务", "AGV"); |
| | | ApiHelper.baseTrayInStock(cst.S_START_LOC, mst.S_CODE); |
| | | } |
| | | } |
| | | /*result = WCSDispatch.safetyInteraction(cst.S_CODE, cst.S_START_LOC, "2"); //取货完成安全退出*/ |
| | | result = true; |
| | | } |
| | | if (state == 1103) //卸货申请, |
| | | { |
| | | var container = ContainerHelper.GetCntr(cst.S_CNTR_CODE); |
| | | // 胎圈入库,下发母拖出库任务 \ 帘布、内衬入库,下发托盘回库任务 |
| | | if (cst.S_TYPE.Contains("入库") && endLoc.N_LOCK_STATE == 0) |
| | |
| | | if (container1.N_TYPE == 0) |
| | | { |
| | | LogHelper.Info("非胎圈入库,接驳位存在母拖,下发母拖入库任务", "AGV"); |
| | | ApiHelper.baseTrayInStockAgv(endLoc.S_CODE, mst.S_CODE); |
| | | ApiHelper.autoBaseTrayInStock(endLoc.S_CODE, mst.S_CODE); |
| | | } |
| | | } |
| | | } |
| | |
| | | result = true; |
| | | } |
| | | } |
| | | |
| | | // 胎圈入库 |
| | | if (container.N_TYPE == 6 ) |
| | | { |
| | | else |
| | | { |
| | | // 胎圈入库 |
| | | if (endLoc.N_CURRENT_NUM == 0) |
| | | { |
| | | LogHelper.Info("胎圈入库,接驳位缺少母拖,下发母拖出库任务", "AGV"); |
| | | ApiHelper.baseTrayOutStockAgv(endLoc.S_CODE, mst.S_CODE); |
| | | ApiHelper.autoBaseTrayOutStock(endLoc.S_CODE, mst.S_CODE); |
| | | } |
| | | else if (endLoc.N_CURRENT_NUM == 1) |
| | | { |
| | |
| | | // 请求WCS是否允许放货 |
| | | if (result) |
| | | { |
| | | result = WCSDispatch.safetyInteraction(cst.S_CODE, cst.S_START_LOC, "2"); // 请求放货 |
| | | } |
| | | |
| | | if (result) |
| | | { |
| | | //根据终点判断,是cb02的入口,判断内存中状态(要状态时间),允许卸货,通知agv改参数 |
| | | var dic = new Dictionary<string, string>(); |
| | | //< Req >< Order No = 'TN2302020002' ParamNo = '18' Param1 = '12' /></ Req > |
| | | dic.Add("No", no); |
| | | dic.Add("ParamNo", "8"); |
| | | dic.Add("Param1", "1"); |
| | | NDC.ChangeOrder(dic); |
| | | //改完参数车子就会自己卸货 |
| | | LogHelper.Info("向WCS发送请求放货信号", "AGV"); |
| | | /*result = WCSDispatch.safetyInteraction(cst.S_CODE, cst.S_START_LOC, "3"); // 请求放货*/ |
| | | result = true; |
| | | } |
| | | } |
| | | if (state == 1103) |
| | | { |
| | | result = WCSDispatch.safetyInteraction(cst.S_CODE, cst.S_START_LOC, "3"); //取货完成允许离开 |
| | | } |
| | | |
| | | if (state == 1104) |
| | | { |
| | | result = WCSDispatch.safetyInteraction(cst.S_CODE, cst.S_START_LOC, "4"); //放货完成允许离开 |
| | | LogHelper.Info("向WCS发送卸货完成安全退出信号", "AGV"); |
| | | /*result = WCSDispatch.safetyInteraction(cst.S_CODE, cst.S_START_LOC, "4"); //卸货完成安全退出*/ |
| | | result = true; |
| | | } |
| | | |
| | | // 安全请求发送成功,添加任务动作记录 |
| | | if (result) |
| | | { |
| | | WCSHelper.AddActionRecord(no, state, forkliftNo, extData); |
| | | LogHelper.Info($"首次进行安全请求成功", "AGV"); |
| | | } |
| | | } |
| | |
| | | if (mst.N_B_STATE == 0) { |
| | | var startLoc = LocationHelper.GetLocation(mst.S_START_LOC); |
| | | var endLoc = LocationHelper.GetLocation(mst.S_END_LOC); |
| | | |
| | | if (mst.S_SCHEDULE_TYPE == "AGV") |
| | | { |
| | | AddOrderNewModel model = new AddOrderNewModel() |
| | |
| | | }; |
| | | List<Param> paramList = new List<Param>(); |
| | | var dic = new Dictionary<string, string>(); |
| | | dic.Add("IKey", mst.S_CODE); |
| | | dic.Add("From", startLoc.S_CODE); |
| | | dic.Add("To", endLoc.S_CODE); |
| | | |
| | | dic.Add("FUNC", "0"); |
| | | if (mst.S_TYPE.Contains("入库")) |
| | | { |
| | | dic.Add("DATA", "300"); |
| | | } |
| | | else |
| | | { |
| | | dic.Add("DATA", "0"); |
| | | } |
| | | dic.Add("Ctype", "0"); |
| | | foreach (var item in dic) |
| | | { |
| | | Param param = new Param |
| | |
| | | paramList.Add(param); |
| | | } |
| | | model.paramList = paramList; |
| | | LogHelper.Info($"向AGV下发任务,任务参数:{model}", "WMS"); |
| | | var res = NDCApi.AddOrderNew(model); |
| | | if (res != null && res.err_code == 0 || true) |
| | | { |
| | |
| | | } |
| | | else if (mst.S_SCHEDULE_TYPE == "WCS") |
| | | { |
| | | |
| | | if (true) |
| | | SendTaskModel sendTask = new SendTaskModel() |
| | | { |
| | | taskNo = mst.S_CODE, |
| | | taskType = mst.S_TYPE.Contains("入库") ? "1" : "2", |
| | | from = mst.S_START_LOC, |
| | | to = mst.S_END_LOC, |
| | | cntrNo = mst.S_CNTR_CODE, |
| | | }; |
| | | LogHelper.Info($"向WCS下发任务,任务参数:{sendTask}", "WMS"); |
| | | var bo = WCSDispatch.sendTask(sendTask); |
| | | if (true || bo) |
| | | { |
| | | //推送成功,修改任务优先级 |
| | | mst.N_B_STATE = 1; |