private void FIN_Click(object sender, RoutedEventArgs e) { try { if (DGtask.SelectedItem == null) { return; } if (!WindowCommon.ConfirmAction("是否确认完成任务!!")) { return; } string id = (DGtask.SelectedItem as DataRowView)["任务号"].ToString(); string f = (DGtask.SelectedItem as DataRowView)["来源"].ToString(); string t = (DGtask.SelectedItem as DataRowView)["目的"].ToString(); string type = (DGtask.SelectedItem as DataRowView)["任务类型"].ToString(); // 完成任务 string mes = null; switch (type) { case "入库": mes = ADS.mHttp.DoStockInFinishTask(t, id); break; case "出库": mes = ADS.mHttp.DoStockOutFinishTask(f, id); break; default: break; } if (mes.Contains("OK")) { CommonSQL.UpdateWms(id, (int)WmsTaskStatus.完成); Notice.Show("成功!", "完成", 3, MessageBoxIcon.Success); } else { Notice.Show(mes, "失败", 3, MessageBoxIcon.Warning); } Refresh_Click(sender, e); } catch (Exception ex) { Notice.Show(ex.Message, "错误", 3, MessageBoxIcon.Error); } }
private void TEST_Click(object sender, RoutedEventArgs e) { try { // 请求WMS入库任务 //WmsModel wms = ADS.mHttp.DoBarcodeScanTask("A01", ADS.GetGoodsCode(DateTime.Now.ToString("yyMMdd"))); WmsModel wms = ADS.mHttp.DoBarcodeScanTask("A01", "@20200906001|Afpz|B10*22|Dw|Ea1|F001|G2440*0600"); if (wms != null && !string.IsNullOrEmpty(wms.Task_UID)) { CommonSQL.InsertTaskInfo(wms.Task_UID, (int)wms.Task_type, wms.Barcode, wms.W_S_Loc, wms.W_D_Loc, ""); CommonSQL.UpdateWms(wms.Task_UID, (int)WmsTaskStatus.待分配); } Refresh_Click(sender, e); } catch (Exception ex) { Notice.Show(ex.Message, "错误", 3, MessageBoxIcon.Error); } }
/// <summary> /// WMS分配库位 /// </summary> /// <returns></returns> public static bool AssignInSite(string area, string tid) { try { bool res = false; WmsModel wms = null; if (!string.IsNullOrEmpty(area) && !string.IsNullOrEmpty(tid)) { // 请求WMS任务 wms = mHttp.DoReachStockinPosTask(area, tid); if (wms != null && !string.IsNullOrEmpty(wms.Task_UID)) { CommonSQL.UpdateWms(wms.Task_UID, (int)WmsTaskStatus.待执行, wms.W_S_Loc, wms.W_D_Loc); res = true; } } return(res); } catch (Exception ex) { throw ex; } }
/// <summary> /// 检测任务状态 /// </summary> //public void DoTask() //{ // if (task == null || task.Count == 0) return; // foreach (TaskAWC t in task) // { // //if (!t.activie) continue; // if (t.taskstatus == TaskStatus.finish) continue; // if (string.IsNullOrEmpty(t.device.devName)) // { // DevInfoAWC device = FindFreeDevice(t.area, t.flag); // if (device != null) // { // t.device = device; // t.device.IsLockUnlock(true, t.jobid); // t.UpdateDev(); // // 更新接送点 // t.takesiteX = t.takesiteX + t.device.gapX; // t.takesiteY = t.takesiteY + t.device.gapY; // t.takesiteZ = t.takesiteZ + t.device.gapZ; // t.givesiteX = t.givesiteX + t.device.gapX; // t.givesiteY = t.givesiteY + t.device.gapY; // t.givesiteZ = t.givesiteZ + t.device.gapZ; // t.UpdateSite(); // } // } // else // { // // 故障&异常 // if (t.device._.CommandStatus == CommandEnum.命令错误 || t.device._.DeviceStatus == DeviceEnum.设备故障) // { // continue; // } // switch (t.taskstatus) // { // case TaskStatus.init: // t.UpdateStatus(TaskStatus.totakesite); // break; // case TaskStatus.totakesite: // // |接货点 - 当前坐标| <= 允许范围 // if (Math.Abs(t.takesiteX - t.device._.CurrentSiteX) <= t.device.limitX && // Math.Abs(t.takesiteY - t.device._.CurrentSiteY) <= t.device.limitY) // { // if (t.device._.ActionStatus == ActionEnum.停止) // { // t.UpdateStatus(TaskStatus.ontakesite); // } // } // else // { // t.device.ToSite(t.takesiteX, t.takesiteY); // } // break; // case TaskStatus.ontakesite: // if (t.takeready) // { // if (t.device._.ActionStatus == ActionEnum.停止 && t.device._.GoodsStatus == AwcGoodsEnum.无货) // { // t.device.StartTake(t.takesiteZ); // } // if (t.device._.ActionStatus == ActionEnum.运行中 && t.device._.CurrentTask == AwcTaskEnum.取货任务) // { // t.UpdateStatus(TaskStatus.taking); // } // } // else // { // // 出库接货(取库存货位)直接执行; 入库接货(取运输车辊台)需判断执行 // if (t.tasktype == TaskTypeEnum.出库) // { // t.takeready = true; // } // else // { // // ? JOB 更新请求 // t.takeready = ADS.JobPartAWC_Take(t.taskid); // } // } // break; // case TaskStatus.taking: // if (t.device._.GoodsStatus == AwcGoodsEnum.有货) // { // if (t.device._.ActionStatus == ActionEnum.停止) // { // t.UpdateStatus(TaskStatus.taked); // } // } // else // { // t.device.StartTake(t.takesiteZ); // } // break; // case TaskStatus.taked: // t.UpdateStatus(TaskStatus.togivesite); // break; // case TaskStatus.togivesite: // // |送货点 - 当前坐标| <= 允许范围 // if (Math.Abs(t.givesiteX - t.device._.CurrentSiteX) <= t.device.limitX && // Math.Abs(t.givesiteY - t.device._.CurrentSiteY) <= t.device.limitY) // { // if (t.device._.ActionStatus == ActionEnum.停止) // { // t.UpdateStatus(TaskStatus.ongivesite); // } // } // else // { // t.device.ToSite(t.givesiteX, t.givesiteY); // } // break; // case TaskStatus.ongivesite: // if (t.giveready) // { // if (t.device._.GoodsStatus == AwcGoodsEnum.有货 && t.device._.ActionStatus == ActionEnum.停止) // { // t.device.StartGive(t.givesiteZ); // } // if (t.device._.ActionStatus == ActionEnum.运行中 && t.device._.CurrentTask == AwcTaskEnum.放货任务) // { // t.UpdateStatus(TaskStatus.giving); // } // } // else // { // // 入库送货(放库存货位)直接执行; 出库送货(放运输车辊台)需判断执行 // if (t.tasktype == TaskTypeEnum.入库) // { // t.giveready = true; // } // else // { // // ? JOB 更新请求 // t.giveready = ADS.JobPartAWC_Give(t.taskid); // } // } // break; // case TaskStatus.giving: // if (t.device._.GoodsStatus == AwcGoodsEnum.无货) // { // if (t.device._.ActionStatus == ActionEnum.停止) // { // t.UpdateStatus(TaskStatus.gived); // } // } // else // { // t.device.StartGive(t.givesiteZ); // } // break; // case TaskStatus.gived: // if (t.tasktype == TaskTypeEnum.入库) // { // // ? JOB 更新请求 // ADS.JobPartAWC_FinishIn(t.taskid); // } // // 解锁设备、完成任务 // t.device.IsLockUnlock(false); // t.device = new DevInfoAWC(); // t.UpdateStatus(TaskStatus.finish); // break; // default: // break; // } // } // } //} public void DoTaskNew() { if (devices == null || devices.Count == 0) { return; } foreach (DevInfoAWC d in devices) { try { if (!d.isUseful || !ADS.mSocket.IsConnected(d.devName) || d._.CommandStatus == CommandEnum.命令错误 || d._.DeviceStatus == DeviceEnum.设备故障) { continue; } if (!string.IsNullOrEmpty(d.lockID)) { switch (d.taskType) { case TaskTypeEnum.入库: InTask: if (d.IsOkLoc(false)) { if (d.isLock) { if (d._.ActionStatus == ActionEnum.停止) { if (d._.GoodsStatus == AwcGoodsEnum.无货 && (d._.FinishTask == AwcTaskEnum.放货任务 || d._.FinishTask == AwcTaskEnum.位任务)) { // 通知WMS完成 if (ADS.mHttp.DoStockInFinishTask(d.lockLocWMS, d.lockID).Contains("OK")) { // 解锁 if (d.IsOkLoc(true)) { CommonSQL.UpdateWms(d.lockID, (int)WmsTaskStatus.完成); d.IsLockUnlockNew(TaskTypeEnum.无, false); } } } else { // |送货点 - 当前坐标| <= 允许范围 if (Math.Abs(d.GiveSiteX - d._.CurrentSiteX) <= d.limitX && Math.Abs(d.GiveSiteY - d._.CurrentSiteY) <= d.limitY) { // 放货 d.StartGive(d.GiveSiteZ); } else { if (IsSafeDis(d.area, d.flag, d._.CurrentSiteX - d.gapX, d.GiveSiteX - d.gapX)) { // 定位 d.ToSite(d.GiveSiteX, d.GiveSiteY); } } } } } else { bool isOkRgv = false; // 是否对应运输车 if (ADS.mRgv.IsLockRGV(d.lockID, out int num)) { if (ADS.mRgv.MovingButtSite(d.lockID, num == 1 ? d.lockLocRGV1 : d.lockLocRGV2)) { isOkRgv = true; } } else { if (d._.GoodsStatus == AwcGoodsEnum.无货 && d._.ActionStatus == ActionEnum.停止) { // 解任务 d.IsLockUnlock(false); break; } } if (d._.ActionStatus == ActionEnum.停止) { if (d._.GoodsStatus == AwcGoodsEnum.货 && (d._.FinishTask == AwcTaskEnum.取货任务 || d._.FinishTask == AwcTaskEnum.位任务)) { if (ADS.mRgv.IsUnlock(d.lockID)) { // 锁定 d.IsLockUnlock(true, d.lockID); goto InTask; } } else { // |接货点 - 当前坐标| <= 允许范围 if (Math.Abs(d.TakeSiteX - d._.CurrentSiteX) <= d.limitX && Math.Abs(d.TakeSiteY - d._.CurrentSiteY) <= d.limitY) { if (isOkRgv) { // 取货 d.StartTake(d.TakeSiteZ); } } else { if (IsSafeDis(d.area, d.flag, d._.CurrentSiteX - d.gapX, d.TakeSiteX - d.gapX)) { // 定位 d.ToSite(d.TakeSiteX, d.TakeSiteY); } } } } else { if (d._.CurrentTask == AwcTaskEnum.取货任务 && d._.GoodsStatus == AwcGoodsEnum.货) { // 安全取货距离 int s = ADS.mDis.GetAwcTakeRgvDis(d.area); if (s == 0) { throw new Exception("无对应行车安全取完货距离!"); } // 解锁任务运输车 if (d._.CurrentSiteZ >= s) { if (ADS.mRgv.IsUnlock(d.lockID)) { // 锁定 //d.IsLockUnlock(true, d.lockID); } } } } } } break; case TaskTypeEnum.出库: OutTask: if (d.IsOkLoc(false)) { if (d.isLock) { bool isOkRgv = false; // 是否对应运输车 if (ADS.mRgv.IsLockRGV(d.lockID, out int num)) { if (ADS.mRgv.MovingButtSite(d.lockID, num == 1 ? d.lockLocRGV1 : d.lockLocRGV2)) { isOkRgv = true; } } if (d._.ActionStatus == ActionEnum.停止) { if (d._.GoodsStatus == AwcGoodsEnum.无货 && (d._.FinishTask == AwcTaskEnum.放货任务 || d._.FinishTask == AwcTaskEnum.位任务)) { // 通知WMS完成 if (ADS.mHttp.DoStockOutFinishTask(d.lockLocWMS, d.lockID).Contains("OK")) { if (ADS.mRgv.IsUnlock(d.lockID)) { // 解锁 if (d.IsOkLoc(true)) { CommonSQL.UpdateWms(d.lockID, (int)WmsTaskStatus.完成); d.IsLockUnlockNew(TaskTypeEnum.无, false); } } } } else { // |放货点 - 当前坐标| <= 允许范围 if (Math.Abs(d.GiveSiteX - d._.CurrentSiteX) <= d.limitX && Math.Abs(d.GiveSiteY - d._.CurrentSiteY) <= d.limitY) { if (isOkRgv) { // 送货 d.StartGive(d.GiveSiteZ); } } else { if (IsSafeDis(d.area, d.flag, d._.CurrentSiteX - d.gapX, d.GiveSiteX - d.gapX)) { // 定位 d.ToSite(d.GiveSiteX, d.GiveSiteY); } } } } else { if (d._.CurrentTask == AwcTaskEnum.放货任务 && d._.GoodsStatus == AwcGoodsEnum.无货) { // 安全放货距离 int s = ADS.mDis.GetAwcGiveRgvDis(d.area); if (s == 0) { throw new Exception("无对应行车安全放完货距离!"); } // 解锁任务运输车 if (d._.CurrentSiteZ >= s) { //ADS.mRgv.IsUnlock(d.lockID); } } } } else { if (d._.ActionStatus == ActionEnum.停止) { if (d._.GoodsStatus == AwcGoodsEnum.货 && (d._.CurrentTask == AwcTaskEnum.取货任务 || d._.CurrentTask == AwcTaskEnum.位任务)) { // 锁定 d.IsLockUnlock(true, d.lockID); goto OutTask; } else { // 是否对应运输车 if (ADS.mRgv.IsLockRGV(d.lockID, out int num)) { ADS.mRgv.MovingButtSite(d.lockID, num == 1 ? d.lockLocRGV1 : d.lockLocRGV2); } else { if (d._.GoodsStatus == AwcGoodsEnum.无货) { // 解任务 d.IsLockUnlock(false); break; } } // |取货点 - 当前坐标| <= 允许范围 if (Math.Abs(d.TakeSiteX - d._.CurrentSiteX) <= d.limitX && Math.Abs(d.TakeSiteY - d._.CurrentSiteY) <= d.limitY) { // 取货 d.StartTake(d.TakeSiteZ); } else { if (IsSafeDis(d.area, d.flag, d._.CurrentSiteX - d.gapX, d.TakeSiteX - d.gapX)) { // 定位 d.ToSite(d.TakeSiteX, d.TakeSiteY); } } } } } } break; default: break; } } } catch (Exception ex) { // LOG CommonSQL.LogErr("AWC.DoTaskNew()", "行车作业[设备]", (ex.Message + ex.Source), d.devName); continue; } } }
/// <summary> /// 检测任务状态 /// </summary> //public void DoTask() //{ // if (task == null || task.Count == 0) return; // foreach (TaskPKL t in task) // { // //if (!t.activie) continue; // if (t.taskstatus == TaskStatus.finish) continue; // if (string.IsNullOrEmpty(t.device.devName)) // { // DevInfoPKL device = FindFreeDevice(t.area); // if (device != null) // { // t.device = device; // t.device.IsLockUnlock(true, t.jobid); // t.UpdateDev(); // } // } // else // { // // 故障&异常 // if (t.device._.CommandStatus == CommandEnum.命令错误 || t.device._.DeviceStatus == DeviceEnum.设备故障) // { // continue; // } // switch (t.taskstatus) // { // case TaskStatus.init: // t.UpdateStatus(TaskStatus.ongivesite); // break; // case TaskStatus.totakesite: // break; // case TaskStatus.ontakesite: // break; // case TaskStatus.taking: // break; // case TaskStatus.taked: // break; // case TaskStatus.togivesite: // break; // case TaskStatus.ongivesite: // // 判断是否启动辊台送货 // if (t.giveready) // { // if (t.device._.GoodsStatus != GoodsEnum.辊台无货 && t.device._.ActionStatus == ActionEnum.停止) // { // t.device.StartGiveRoll(); // } // if (t.device._.CurrentTask == TaskEnum.辊台任务) // { // t.UpdateStatus(TaskStatus.giving); // } // } // else // { // // ? JOB 更新请求 // t.giveready = ADS.JobPartPKL_Give(t.jobid); // } // break; // case TaskStatus.giving: // if (t.device._.GoodsStatus == GoodsEnum.辊台无货) // { // if (t.device._.ActionStatus == ActionEnum.停止) // { // t.UpdateStatus(TaskStatus.gived); // } // else // { // t.device.StopTask(); // } // } // else // { // t.device.StartGiveRoll(); // } // break; // case TaskStatus.gived: // // 解锁设备、完成任务 // t.device.IsLockUnlock(false); // t.device = new DevInfoPKL(); // t.UpdateStatus(TaskStatus.finish); // break; // default: // break; // } // } // } //} public void DoTaskNew() { if (devices == null || devices.Count == 0) { return; } foreach (DevInfoPKL d in devices) { try { bool isCanWork = true; if (!d.isUseful || !ADS.mSocket.IsConnected(d.devName) || d._.CommandStatus == CommandEnum.命令错误 || d._.DeviceStatus == DeviceEnum.设备故障 || string.IsNullOrEmpty(d.lockID2)) { isCanWork = false; //continue; } int aid = 0; if (!d.isLock) { if (!PublicParam.IsDoJobAGV || !isCanWork) { continue; } if (d._.ActionStatus == ActionEnum.停止 && d._.GoodsStatus == GoodsEnum.辊台1有货) { if (string.IsNullOrEmpty(d.lockID1)) { aid = ADS.mNDCControl.IsExistLoad(d.devName); if (aid == 0) { // 没锁定就派车锁定 aid = CommonSQL.GetAGVid(); // NDC 任务是否存在 if (!ADS.mNDCControl.IsExist(aid)) { // ? NDC 生成 AGV 搬运任务 if (!ADS.mNDCControl.AddNDCTask(aid, d.devName, PublicParam.AgvUnLoadArea, out string result)) { // LOG CommonSQL.LogErr("PKL.DoTaskNew()", "AGV生成任务[ID,包装线辊台]", result, aid.ToString(), d.devName); continue; } } } if (aid != 0) { d.IsLockUnlockNew(true, aid.ToString(), d.lockID2); } } else { d.IsLockUnlockNew(true, d.lockID1, d.lockID2); } } } else { if (string.IsNullOrEmpty(d.lockID1)) { if (!isCanWork) { continue; } // 解锁 d.IsLockUnlockNew(false); continue; } else { aid = Convert.ToInt32(d.lockID1); // NDC 任务是否存在 if (!ADS.mNDCControl.IsExist(aid)) { if (!isCanWork) { continue; } // 解锁 d.IsLockUnlockNew(false); continue; } // NDC 任务状态 switch (ADS.mNDCControl.GetStatus(aid)) { case NDCPlcStatus.LoadUnReady: case NDCPlcStatus.LoadReady: if (!isCanWork) { break; } if (d._.ActionStatus == ActionEnum.停止 && d._.GoodsStatus == GoodsEnum.辊台1有货) { // NDC 请求 AGV 启动辊台装货 if (!ADS.mNDCControl.DoLoad(aid, out string result)) { // LOG if (!string.IsNullOrEmpty(result)) { CommonSQL.LogErr("PKL.DoTaskNew()", "AGV辊台装货[ID]", result, aid.ToString()); } } } break; case NDCPlcStatus.Loading: if (!isCanWork) { break; } if (d._.ActionStatus == ActionEnum.停止 && d._.GoodsStatus == GoodsEnum.辊台1有货) { d.StartGiveRoll(); } break; case NDCPlcStatus.Loaded: case NDCPlcStatus.UnloadUnReady: // NDC 任务是否需要重定向 if (!ADS.mNDCControl.IsRedirected(aid) && !string.IsNullOrEmpty(d.lockID2)) { // 获取WMS任务目的区域 string area = ADS.GetInAreaWMS(d.area, d.lockID2, out string tid); string frt = ADS.mFrt.GetRightFRT(area, TaskTypeEnum.入库); if (string.IsNullOrEmpty(area) || string.IsNullOrEmpty(frt)) { break; } // NDC 更新 AGV搬运卸货点 if (!ADS.mNDCControl.DoReDerect(aid, frt, out string result)) { // LOG CommonSQL.LogErr("PKL.DoTaskNew()", "AGV更新卸货点[ID]", result, aid.ToString()); break; } // 更新 CommonSQL.UpdateWms(tid, (int)WmsTaskStatus.待分配); } else { // 解锁 d.IsLockUnlockNew(false); } break; default: if (!isCanWork) { break; } // 解锁 d.IsLockUnlockNew(false); break; } } } } catch (Exception ex) { //if (ex.ToString().Contains("重复")) //{ // MessageBox.Show(d.devName + ex.ToString()); //} // LOG CommonSQL.LogErr("PKL.DoTaskNew()", "包装线作业[设备]", (ex.Message + ex.Source), d.devName); continue; } } }