Exemplo n.º 1
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;
                }
            }
        }