Exemple #1
0
        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);
            }
        }
Exemple #2
0
        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);
            }
        }
Exemple #3
0
 /// <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;
     }
 }
Exemple #4
0
        /// <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;
                }
            }
        }
Exemple #5
0
        /// <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;
                }
            }
        }