Exemple #1
0
        private bool ExeSndTaskBusiness(ref string reStr)
        {
            try
            {
                switch (this.currentTaskPhase)
                {
                case 1:
                {
                    this.currentTaskDescribe = "等待有板信号";
                    this.rfidUID             = "";
                    this.db1ValsToSnd[5]     = 0;
                    this.db1ValsToSnd[6]     = 1;
                    this.db1ValsToSnd[7]     = 0;
                    this.db1ValsToSnd[8]     = 0;
                    this.db1ValsToSnd[9]     = 0;
                    if (this.db2Vals[0] != 2)
                    {
                        break;
                    }
                    if (SysCfg.SysCfgModel.SimMode)
                    {
                        this.rfidUID = this.SimRfidUID;
                        logRecorder.AddDebugLog(this.nodeName, "读到托盘号:" + this.rfidUID);
                    }
                    else
                    {
                        if (this.barcodeRW != null && barcodeCheck)
                        {
                            this.rfidUID = this.barcodeRW.ReadBarcode().Trim();        //this.barcodeRW.Trim();
                            if (string.IsNullOrWhiteSpace(this.rfidUID))
                            {
                                break;
                            }
                            logRecorder.AddDebugLog(this.nodeName, "读到托盘号:" + this.rfidUID);
                        }
                    }
                    this.currentTaskPhase++;
                    break;
                }

                case 2:
                {
                    this.currentTask    = null;
                    currentTaskDescribe = "等待检索待执行任务";
                    List <CtlDBAccess.Model.ControlTaskModel> taskList = ctlTaskBll.GetTaskToRunList((int)SysCfg.EnumAsrsTaskType.输送机送出, "待执行", this.nodeID);
                    //  CtlDBAccess.Model.ControlTaskModel taskToRun = null;

                    foreach (CtlDBAccess.Model.ControlTaskModel task in taskList)
                    {
                        if (0 != dlgtPathLockcheck(this, task, ref reStr))
                        {
                            continue;
                        }
                        if (barcodeCheck)
                        {
                            if (task.PalletCode == this.rfidUID)
                            {
                                this.currentTask = task;
                                break;
                            }
                        }
                        else
                        {
                            this.currentTask = task;
                            break;
                        }
                    }
                    if (this.currentTask == null)
                    {
                        this.currentTaskDescribe = string.Format("没有匹配托盘{0}的任务", this.rfidUID);
                        if (this.barcodeRW != null && barcodeCheck)
                        {
                            if (SysCfg.SysCfgModel.SimMode)
                            {
                                this.rfidUID = this.SimRfidUID;
                            }
                            else
                            {
                                this.rfidUID = this.barcodeRW.ReadBarcode().Trim();        //this.barcodeRW.Trim();
                            }

                            if (string.IsNullOrWhiteSpace(this.rfidUID))
                            {
                                break;
                            }
                        }
                        break;
                    }
                    if (this.currentTask.TaskIndex == 1)
                    {
                        CtlDBAccess.BLL.MainControlTaskBll     mainTaskBll = new CtlDBAccess.BLL.MainControlTaskBll();
                        CtlDBAccess.Model.MainControlTaskModel mainTask    = mainTaskBll.GetModel(this.currentTask.MainTaskID);
                        if (dlgtHeightChecked != null)
                        {
                            if (!dlgtHeightChecked(mainTask, db2Vals[2], ref reStr))
                            {
                                string strHeightExceed = string.Format("货物{0}超高,与{1}目标货位{2}冲突", this.rfidUID, mainTask.EndDevice, mainTask.EndDeviceParam);
                                if (this.db1ValsToSnd[0] != 3)
                                {
                                    logRecorder.AddDebugLog(nodeName, strHeightExceed);
                                }
                                this.currentTaskDescribe = strHeightExceed;
                                this.db1ValsToSnd[0]     = 3;
                                break;
                            }
                        }
                        if (mainTask != null)
                        {
                            mainTask.TaskStatus = "执行中";
                            mainTaskBll.Update(mainTask);
                        }
                    }
                    //发送任务参数
                    this.db1ValsToSnd[6] = 1;
                    this.db1ValsToSnd[7] = 21;
                    this.db1ValsToSnd[8] = (short)this.currentTask.ControlID;
                    this.db1ValsToSnd[9] = short.Parse(this.currentTask.EndDevice);
                    if (!string.IsNullOrWhiteSpace(this.rfidUID))
                    {
                        logRecorder.AddDebugLog(this.nodeName, "读到托盘号:" + this.rfidUID);
                    }
                    logRecorder.AddDebugLog(nodeName, string.Format("控制ID{0}执行到第2步,发送参数,等待PLC读数据完成", this.currentTask.ControlID));
                    this.currentTaskPhase++;
                    break;
                }

                case 3:
                {
                    this.db1ValsToSnd[5]        = 1;  //写入数据
                    this.currentTask.TaskStatus = "执行中";
                    ctlTaskBll.Update(currentTask);
                    //等待PLC 读数据完成
                    this.currentTaskDescribe = "等待输送机读数据完成";
                    if (this.db2Vals[5] != 2)
                    {
                        break;
                    }
                    this.db1ValsToSnd[5] = 2;
                    this.db1ValsToSnd[7] = 0;
                    this.db1ValsToSnd[8] = 0;
                    this.db1ValsToSnd[9] = 0;
                    logRecorder.AddDebugLog(nodeName, string.Format("控制ID{0}任务执行到第3步,参数复位", this.currentTask.ControlID));
                    this.currentTaskPhase++;
                    ctlTaskBll.Update(currentTask);
                    break;
                }

                case 4:
                {
                    this.currentTaskDescribe = "输送任务发送完毕";

                    currentTask = null;
                    break;
                }

                default:
                {
                    break;
                }
                }
                return(true);
            }
            catch (Exception ex)
            {
                reStr = ex.ToString();
                return(false);
            }
        }
Exemple #2
0
        public override bool WCSMainTaskStart(CtlDBAccess.Model.MainControlTaskModel mainTask, WCSFlowPathModel wcsPath, ref string reStr)
        {
            if (!base.WCSMainTaskStart(mainTask, wcsPath, ref reStr))
            {
                return(false);
            }
            WCSPathNodeModel wcsNode     = wcsPath.GetNodeByID(nodeID);
            WCSPathNodeModel wcsNodeNext = wcsPath.GetNodeByID(wcsNode.NextNodeID);

            CtlDBAccess.Model.ControlTaskModel ctlTask = null;
            ctlTask                = new CtlDBAccess.Model.ControlTaskModel();
            ctlTask.TaskID         = System.Guid.NewGuid().ToString();
            ctlTask.StDevice       = nodeID;
            ctlTask.StDeviceCata   = devCata;
            ctlTask.StDeviceParam  = mainTask.StDeviceParam;
            ctlTask.EndDevice      = wcsNode.NextNodeID;
            ctlTask.EndDeviceCata  = wcsNodeNext.DevCata;
            ctlTask.EndDeviceParam = mainTask.EndDeviceParam;
            ctlTask.MainTaskID     = mainTask.MainTaskID;
            ctlTask.PalletCode     = mainTask.PalletCode;
            UInt16 controlID = ctlTaskBll.GetUnusedControlID();

            if (controlID < 1)
            {
                reStr = "没有可用的控制任务ID";
                return(false);
            }
            ctlTask.ControlID  = controlID;
            ctlTask.TaskIndex  = 1;
            ctlTask.TaskParam  = "";
            ctlTask.TaskStatus = "待执行";
            ctlTask.TaskPhase  = 0;
            ctlTask.CreateTime = System.DateTime.Now;
            ctlTask.CreateMode = "自动";

            if (wcsNodeNext.DevCata == "库房")
            {
                ctlTask.DeviceID   = wcsNodeNext.NodeID;
                ctlTask.DeviceCata = "堆垛机";
                ctlTask.TaskType   = (int)SysCfg.EnumAsrsTaskType.产品入库;
            }
            else if (wcsNodeNext.DevCata == "RGV")
            {
                ctlTask.DeviceID   = wcsNodeNext.NodeID;
                ctlTask.DeviceCata = wcsNodeNext.DevCata;
                ctlTask.TaskType   = (int)SysCfg.EnumAsrsTaskType.RGV上下料;
            }
            else
            {
                ctlTask.DeviceID   = nodeID;
                ctlTask.DeviceCata = devCata;
                ctlTask.TaskType   = (int)SysCfg.EnumAsrsTaskType.输送机送出;
            }
            if (ctlTask == null)
            {
                return(false);
            }
            bool re = ctlTaskBll.Add(ctlTask);

            // return re;
            if (re)
            {
                mainTask.TaskStatus = "已启动";
                CtlDBAccess.BLL.MainControlTaskBll mainTaskBll = new CtlDBAccess.BLL.MainControlTaskBll();
                return(mainTaskBll.Update(mainTask));
            }
            else
            {
                return(false);
            }
        }
Exemple #3
0
        public bool CreateNodeNextTask(FlowCtlBaseModel.CtlNodeBaseModel curNode, CtlDBAccess.Model.ControlTaskModel curTask, ref string reStr)
        {
            try
            {
                CtlDBAccess.Model.MainControlTaskModel mainTask = mainCtlTaskBll.GetModel(curTask.MainTaskID);
                if (mainTask == null)
                {
                    reStr = "主任务为空,不存在的主任务ID:" + curTask.MainTaskID;
                    return(false);
                }
                FlowCtlBaseModel.WCSFlowPathModel wcsPath = null;
                if (wcsPathMap.Keys.Contains(mainTask.FlowPathKey))
                {
                    wcsPath = wcsPathMap[mainTask.FlowPathKey];
                }
                else
                {
                    reStr = "路径不存在:" + mainTask.FlowPathKey;
                    return(false);
                }

                FlowCtlBaseModel.WCSPathNodeModel wcsNode = wcsPath.GetNodeByID(curNode.NodeID);
                if (wcsNode.NodeFlag == "终点")
                {
                    //管理任务完成
                    WMS_Interface.ResposeData res = WmsSvc.UpdateManageTaskStatus(mainTask.WMSTaskID, "已完成");
                    if (!res.Status)
                    {
                        reStr = string.Format("更新WMS任务:{0}状态失败,{1}", mainTask.WMSTaskID, res.Describe);
                        return(false);
                    }
                    mainTask.TaskStatus = "已完成";
                    mainTask.FinishTime = System.DateTime.Now;
                    if (!mainCtlTaskBll.Update(mainTask))
                    {
                        reStr = string.Format("更新主控制任务:{0}状态失败", mainTask.MainTaskID);
                        return(false);
                    }
                    return(true);
                }
                FlowCtlBaseModel.CtlNodeBaseModel nextNode = NodeManager.GetNodeByID(wcsNode.NextNodeID);
                if (curNode.DevCata == "站台")
                {
                    if (nextNode.DevCata == "站台")
                    {
                        CtlDBAccess.Model.ControlTaskModel nextCtlTask = CreateConveyorTask(curTask.TaskIndex + 1, mainTask.MainTaskID, curNode as TransDevModel.NodeTransStation, nextNode as TransDevModel.NodeTransStation, curTask.PalletCode, ref reStr);
                        if (nextCtlTask == null)
                        {
                            return(false);
                        }
                        return(ctlTaskBll.Add(nextCtlTask));
                    }
                    else if (nextNode.DevCata == "RGV")
                    {
                        FlowCtlBaseModel.WCSPathNodeModel rgvTargetWcsNode = wcsPath.GetNodeByID(wcsNode.NextNodeID);
                        FlowCtlBaseModel.CtlNodeBaseModel nextNode2        = NodeManager.GetNodeByID(rgvTargetWcsNode.NextNodeID);
                        if (nextNode2 == null)
                        {
                            reStr = "不存在的设备号:" + wcsNode.NextNodeID;
                            return(false);
                        }
                        FlowCtlBaseModel.WCSPathNodeModel nextWcsNode = wcsPath.GetNodeByID(nextNode2.NodeID);
                        if (nextWcsNode == null)
                        {
                            reStr = "路径配置,RGV路径缺少下料站台";
                            return(false);
                        }
                        CtlDBAccess.Model.ControlTaskModel nextCtlTask = CreateRGVTask(curTask.TaskIndex + 1, mainTask.MainTaskID, nextNode as TransDevModel.NodeRGV, curNode as TransDevModel.NodeTransStation, nextNode2 as TransDevModel.NodeTransStation, curTask.PalletCode, ref reStr);
                        if (nextCtlTask == null)
                        {
                            return(false);
                        }
                        return(ctlTaskBll.Add(nextCtlTask));
                    }
                    else if (nextNode.DevCata == "堆垛机")
                    {
                        CtlDBAccess.Model.ControlTaskModel nextCtlTask = CreateStackerTask(curTask.TaskIndex + 1, mainTask, nextNode.NodeID, curNode as TransDevModel.NodeTransStation, curTask.PalletCode, ref reStr);
                        if (nextCtlTask == null)
                        {
                            return(false);
                        }
                        return(ctlTaskBll.Add(nextCtlTask));
                    }
                }
                else if (curNode.DevCata == "RGV")
                {
                    if (nextNode.DevCata != "站台")
                    {
                        reStr = "RGV目标设备应该为站台";
                        return(false);
                    }
                    FlowCtlBaseModel.WCSPathNodeModel rgvTargetWcsNode = wcsPath.GetNodeByID(wcsNode.NextNodeID);
                    if (rgvTargetWcsNode.NodeFlag == "终点")
                    {
                        //管理任务完成
                        WMS_Interface.ResposeData res = WmsSvc.UpdateManageTaskStatus(mainTask.WMSTaskID, "已完成");
                        if (!res.Status)
                        {
                            reStr = string.Format("更新WMS任务:{0}状态失败,{1}", mainTask.WMSTaskID, res.Describe);
                            return(false);
                        }

                        mainTask.TaskStatus = "已完成";
                        mainTask.FinishTime = System.DateTime.Now;
                        if (!mainCtlTaskBll.Update(mainTask))
                        {
                            reStr = string.Format("更新主控制任务:{0}状态失败", mainTask.MainTaskID);
                            return(false);
                        }

                        return(true);
                    }
                    FlowCtlBaseModel.CtlNodeBaseModel rgvTargetNode = NodeManager.GetNodeByID(rgvTargetWcsNode.NodeID);
                    FlowCtlBaseModel.CtlNodeBaseModel nextNode2     = NodeManager.GetNodeByID(rgvTargetWcsNode.NextNodeID);
                    if (nextNode2.DevCata == "站台")
                    {
                        CtlDBAccess.Model.ControlTaskModel nextCtlTask = CreateConveyorTask(curTask.TaskIndex + 1, mainTask.MainTaskID, rgvTargetNode as TransDevModel.NodeTransStation, nextNode2 as TransDevModel.NodeTransStation, curTask.PalletCode, ref reStr);
                        if (nextCtlTask == null)
                        {
                            return(false);
                        }
                        return(ctlTaskBll.Add(nextCtlTask));
                    }
                    else if (nextNode2.DevCata == "堆垛机")
                    {
                        CtlDBAccess.Model.ControlTaskModel nextCtlTask = CreateStackerTask(curTask.TaskIndex + 1, mainTask, nextNode2.NodeID, rgvTargetNode as TransDevModel.NodeTransStation, curTask.PalletCode, ref reStr);
                        if (nextCtlTask == null)
                        {
                            return(false);
                        }
                        return(ctlTaskBll.Add(nextCtlTask));
                    }
                    else
                    {
                        reStr = "错误的路径配置,两台RGV不允许共用一个接驳站台";
                        return(false);
                    }
                }
                else if (curNode.DevCata == "堆垛机")
                {
                    if (nextNode.DevCata != "站台")
                    {
                        reStr = "堆垛机目标设备应该为站台";
                        return(false);
                    }
                    FlowCtlBaseModel.WCSPathNodeModel targetWcsNode = wcsPath.GetNodeByID(wcsNode.NextNodeID);
                    if (targetWcsNode.NodeFlag == "终点")
                    {
                        //管理任务完成
                        WMS_Interface.ResposeData res = WmsSvc.UpdateManageTaskStatus(mainTask.WMSTaskID, "已完成");
                        if (!res.Status)
                        {
                            reStr = string.Format("更新WMS任务:{0}状态失败,{1}", mainTask.WMSTaskID, res.Describe);
                            return(false);
                        }
                        mainTask.TaskStatus = "已完成";
                        mainTask.FinishTime = System.DateTime.Now;
                        if (!mainCtlTaskBll.Update(mainTask))
                        {
                            reStr = string.Format("更新主控制任务:{0}状态失败", mainTask.MainTaskID);
                            return(false);
                        }

                        return(true);
                    }
                    FlowCtlBaseModel.CtlNodeBaseModel nextNode2 = NodeManager.GetNodeByID(targetWcsNode.NextNodeID);
                    if (nextNode2.DevCata == "站台")
                    {
                        CtlDBAccess.Model.ControlTaskModel nextCtlTask = CreateConveyorTask(curTask.TaskIndex + 1, mainTask.MainTaskID, nextNode as TransDevModel.NodeTransStation, nextNode2 as TransDevModel.NodeTransStation, curTask.PalletCode, ref reStr);
                        if (nextCtlTask == null)
                        {
                            return(false);
                        }
                        return(ctlTaskBll.Add(nextCtlTask));
                    }
                    else if (nextNode2.DevCata == "RGV")
                    {
                        FlowCtlBaseModel.WCSPathNodeModel targetWcsNode2 = wcsPath.GetNodeByID(nextNode2.NodeID);
                        FlowCtlBaseModel.CtlNodeBaseModel nextNode3      = NodeManager.GetNodeByID(targetWcsNode2.NextNodeID);
                        if (nextNode3 == null)
                        {
                            return(false);
                        }
                        CtlDBAccess.Model.ControlTaskModel nextCtlTask = CreateRGVTask(curTask.TaskIndex + 1, mainTask.MainTaskID, nextNode2 as TransDevModel.NodeRGV, nextNode as TransDevModel.NodeTransStation, nextNode3 as TransDevModel.NodeTransStation, curTask.PalletCode, ref reStr);
                        if (nextCtlTask == null)
                        {
                            return(false);
                        }
                        return(ctlTaskBll.Add(nextCtlTask));
                    }
                }
                return(true);
            }
            catch (Exception ex)
            {
                reStr = ex.ToString();
                Console.WriteLine(ex.ToString());
                return(false);
            }
        }