/// <summary> /// 更新实际u坐标 /// </summary> public void UpdateSite() { string wms; switch (tasktype) { case TaskTypeEnum.入库: wms = givesite; break; case TaskTypeEnum.出库: wms = takesite; break; default: return; } WCS_CONFIG_LOC list = CommonSQL.GetLocInfo(wms); if (list == null) { return; } site = new JobSite { arfbuttfrt = CommonSQL.GetArfByFrt(dev), rgvsite1 = int.Parse(list.RGV_LOC_1 ?? "0"), rgvsite2 = int.Parse(list.RGV_LOC_2 ?? "0"), awcbuttRgv = list.AWC_LOC_TRACK ?? "", awcsite = list.AWC_LOC_STOCK ?? "" }; }
/// <summary> /// 固定辊台对接摆渡车点位 /// </summary> /// <returns></returns> public static int FRTbuttARF(string frt) { try { return(CommonSQL.GetArfByFrt(frt)); } catch (Exception ex) { throw ex; } }
/// <summary> /// 摆渡车作业对接固定辊台坐标? /// </summary> public static int JobPartARF_Site(string jobid) { string frt = mFrt.GetFrtName(jobid); if (string.IsNullOrEmpty(frt)) { return(0); } else { return(CommonSQL.GetArfByFrt(frt)); } }
/// <summary> /// 检测任务状态 /// </summary> //public void DoTask() //{ // if (task == null || task.Count == 0) return; // foreach (TaskFRT t in task) // { // //if (!t.activie) continue; // if (t.taskstatus == TaskStatus.finish) continue; // if (string.IsNullOrEmpty(t.device.devName)) // { // DevInfoFRT device = FindFreeDevice(t.area, t.tasktype, t.frt); // if (device != null) // { // t.device = device; // t.device.IsLockUnlock(true, t.jobid); // t.UpdateDev(); // // AGV搬运 同辊台第2托货按收2货运行 // if (t.fromdev == DevType.AGV && // t.device._.GoodsStatus != GoodsEnum.辊台满货 && t.device._.GoodsStatus != GoodsEnum.辊台无货) // { // t.goodsnum = 2; // } // } // } // 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 (t.fromdev == DevType.空设备) // { // t.UpdateStatus(TaskStatus.togivesite); // } // else // { // t.UpdateStatus(TaskStatus.ontakesite); // } // break; // case TaskStatus.ontakesite: // // 判断是否启动辊台接货 // if (t.takeready) // { // if (t.device._.GoodsStatus != GoodsEnum.辊台满货 && t.device._.ActionStatus == ActionEnum.停止) // { // t.device.StartTakeRoll(t.tasktype, t.goodsnum); // } // if (t.device._.RollerStatus != RollerStatusEnum.辊台停止 && t.device._.CurrentTask == TaskEnum.辊台任务) // { // t.UpdateStatus(TaskStatus.taking); // } // } // else // { // // ? JOB 更新请求 // t.takeready = ADS.JobPartFRT_Take(t.jobid, t.fromdev); // } // break; // case TaskStatus.taking: // bool isNext = false; // switch (t.fromdev) // { // case DevType.摆渡车: // if ((t.goodsnum == 1 && t.device._.GoodsStatus != GoodsEnum.辊台无货 && t.device._.GoodsStatus != GoodsEnum.辊台满货) || // (t.goodsnum == 2 && t.device._.GoodsStatus == GoodsEnum.辊台满货)) // { // isNext = true; // } // break; // case DevType.AGV: // if ((t.goodsnum == 1 && t.device._.GoodsStatus != GoodsEnum.辊台无货) || // (t.goodsnum == 2 && t.device._.GoodsStatus == GoodsEnum.辊台满货)) // { // isNext = true; // } // break; // default: // break; // } // if (isNext) // { // if (t.device._.ActionStatus == ActionEnum.停止) // { // t.UpdateStatus(TaskStatus.taked); // } // } // else // { // t.device.StartTakeRoll(t.tasktype, t.goodsnum); // } // break; // case TaskStatus.taked: // // AGV搬运 直接完成 // if (t.tasktype == TaskTypeEnum.无) // { // t.UpdateStatus(TaskStatus.gived); // } // else // { // t.UpdateStatus(TaskStatus.togivesite); // } // break; // case TaskStatus.togivesite: // // 无目的设备 直接送货中(出库暂无后续流程) // if (t.todev == DevType.空设备) // { // t.UpdateStatus(TaskStatus.giving); // } // else // { // t.UpdateStatus(TaskStatus.ongivesite); // } // break; // case TaskStatus.ongivesite: // // 判断是否启动辊台送货 // if (t.giveready) // { // if (t.device._.GoodsStatus != GoodsEnum.辊台无货 && t.device._.ActionStatus == ActionEnum.停止) // { // t.device.StartGiveRoll(t.tasktype); // } // if (t.device._.RollerStatus != RollerStatusEnum.辊台停止 && t.device._.CurrentTask == TaskEnum.辊台任务) // { // t.UpdateStatus(TaskStatus.giving); // } // } // else // { // // ? JOB 更新请求 // t.giveready = ADS.JobPartFRT_Give(t.jobid); // } // break; // case TaskStatus.giving: // if (t.device._.GoodsStatus == GoodsEnum.辊台无货) // { // if (t.device._.ActionStatus == ActionEnum.停止) // { // t.UpdateStatus(TaskStatus.gived); // } // } // else // { // t.device.StartGiveRoll(t.tasktype); // } // break; // case TaskStatus.gived: // // 解锁设备、完成任务 // t.device.IsLockUnlock(false); // t.device = new DevInfoFRT(); // t.UpdateStatus(TaskStatus.finish); // break; // default: // break; // } // } // } //} public void DoTaskNew() { if (devices == null || devices.Count == 0) { return; } foreach (DevInfoFRT d in devices) { try { if (!d.isUseful || !ADS.mSocket.IsConnected(d.devName) || d._.CommandStatus == CommandEnum.命令错误 || d._.DeviceStatus == DeviceEnum.设备故障) { continue; } if (d._.CurrentTask == TaskEnum.辊台任务 && d._.FinishTask == TaskEnum.辊台任务) { d.StopRoller(); } switch (d.taskType) { case TaskTypeEnum.入库: InTask: if (d.isLock) { if (d._.GoodsStatus == GoodsEnum.辊台无货) { // 锁定摆渡车 if (ADS.mArf.LockARF(d.area, d.taskType)) { // 解锁 d.IsLockUnlockNew(false); d.StopRoller(); } } else { // 判断当前运输车任务 if (ADS.mRgv.GetNowTaskType(d.area) != TaskTypeEnum.出库) { // 空闲摆渡车 if (ADS.mArf.IsFreeARF(d.area, d.taskType)) { int site = CommonSQL.GetArfByFrt(d.devName); if (site == 0) { throw new Exception("无对应固定辊台-摆渡车对接点!"); } // 摆渡车来接货 if (ADS.mArf.MovingButtSite(d.area, d.taskType, site)) { // 启动摆渡车接货 if (ADS.mArf.IsTaking(d.area, d.taskType)) { // 送货 d.StartGiveRoll(d.taskType); } } } } } } else { // agv任务 int aid = ADS.mNDCControl.IsExistUnLoad(d.devName); if (d._.ActionStatus == ActionEnum.停止) { switch (d._.GoodsStatus) { case GoodsEnum.辊台无货: if (aid != 0) { // 只启动辊台2扫码 d.StartTakeRoll(d.taskType, 1, true); d.isAGV = true; } else { if (!string.IsNullOrEmpty(d.lockID1)) { d.IsLockUnlockNew(false); } } break; case GoodsEnum.辊台中间有货: case GoodsEnum.辊台2有货: if (string.IsNullOrEmpty(d.lockID1)) { //MessageBox.Show(d.devName + "辊台没扫到码!"); throw new Exception(d.devName + "辊台没扫到码!"); } else { if (aid != 0) { // 接货到辊台2 d.StartTakeRoll(d.taskType, 2); d.isAGV = true; } else { // 接货到辊台1 d.StartTakeRoll(d.taskType, 1); d.isAGV = false; } } break; case GoodsEnum.辊台1有货: if (aid != 0) { // 接货到辊台2 d.StartTakeRoll(d.taskType, 2); d.isAGV = true; } else { if (!PublicParam.IsDoJobIn) { break; } // 每次只能做一个辊台 if (IsLockInFRT(d.area)) { break; } // 是否满足任务 if (!string.IsNullOrEmpty(d.lockID1)) { // 是否有超时任务 if (CommonSQL.IsTimeOut(d.lockID1)) { // 锁定 d.IsLockUnlockNew(true, d.lockID1); goto InTask; } } } break; case GoodsEnum.辊台满货: if (!PublicParam.IsDoJobIn) { break; } // 每次只能做一个辊台 if (IsLockInFRT(d.area)) { break; } // 是否满足任务 if (!string.IsNullOrEmpty(d.lockID1) && !string.IsNullOrEmpty(d.lockID2)) { // 锁定 d.IsLockUnlockNew(true, d.lockID1, d.lockID2); goto InTask; } break; default: break; } } else { if (aid != 0) { if (d.isAGV) { // NDC 请求 AGV 启动辊台卸货 if (!ADS.mNDCControl.DoUnLoad(aid, out string result)) { // LOG CommonSQL.LogErr("FRT.DoTaskNew()", "AGV辊台卸货[ID]", result, aid.ToString()); } } } } } break; case TaskTypeEnum.出库: int p = CommonSQL.GetArfByFrt(d.devName); if (p == 0) { throw new Exception("无对应固定辊台-摆渡车对接点!"); } if (d.isLock) { if (d._.ActionStatus == ActionEnum.停止 && d._.GoodsStatus == GoodsEnum.辊台无货) { // 解锁 d.IsLockUnlock(false); } // 是否有锁定摆渡车 if (ADS.mArf.IsLockARF(d.area, d.taskType, out int goods)) { // 摆渡车过来待命 if (ADS.mArf.MovingButtSite(d.area, d.taskType, p)) { // 都只有1货,接过去 //if (goods == 1 && d._.GoodsStatus == GoodsEnum.辊台2有货) //{ // // 接货 // d.StartTakeRoll(d.taskType, 2); // if (d._.ActionStatus == ActionEnum.运行中) // { // // 摆渡车送货 // ADS.mArf.IsGiving(d.area, d.taskType); // } //} } } } else { // 空闲摆渡车 if (ADS.mArf.IsFreeARF(d.area, d.taskType)) { if ((d._.GoodsStatus == GoodsEnum.辊台满货 && d._.RollerStatus == RollerStatusEnum.辊台停止) || (d._.GoodsStatus == GoodsEnum.辊台2有货 && d._.RollerStatus != RollerStatusEnum.辊台2启动 && d._.RollerStatus != RollerStatusEnum.辊台全启动)) { d.StopRoller(); // 锁定 d.IsLockUnlock(true); } else { if (d._.GoodsStatus != GoodsEnum.辊台无货) { // 接货 d.StartTakeRoll(d.taskType, 1); } } } else { // 是否有锁定摆渡车 if (ADS.mArf.IsLockARF(d.area, d.taskType, out int goods)) { // 摆渡车来送货 if (ADS.mArf.MovingButtSite(d.area, d.taskType, p)) { // 试探接货,防止光电干扰 d.StartTakeRoll(d.taskType, 2); if (d._.GoodsStatus != GoodsEnum.辊台满货 || goods != 0) { // 接货 d.StartTakeRoll(d.taskType, 2); if (d._.ActionStatus == ActionEnum.运行中) { // 摆渡车送货 ADS.mArf.IsGiving(d.area, d.taskType); } } else { if ((d._.GoodsStatus == GoodsEnum.辊台满货 && d._.RollerStatus == RollerStatusEnum.辊台停止) || (d._.GoodsStatus == GoodsEnum.辊台2有货 && d._.RollerStatus != RollerStatusEnum.辊台2启动 && d._.RollerStatus != RollerStatusEnum.辊台全启动)) { d.StopRoller(); // 锁定 d.IsLockUnlock(true); } else { if (d._.GoodsStatus != GoodsEnum.辊台无货) { // 接货 d.StartTakeRoll(d.taskType, 1); if (d._.RollerStatus != RollerStatusEnum.辊台停止 && goods == 1) { // 摆渡车送货 ADS.mArf.IsGiving(d.area, d.taskType); } } } } } } } } break; default: break; } } catch (Exception ex) { // LOG CommonSQL.LogErr("FRT.DoTaskNew()", "固定辊台作业[设备]", (ex.Message + ex.Source), d.devName); continue; } } }