Ejemplo n.º 1
0
 /// <summary>
 /// 设备执行任务之前,检查是否路径被锁定,防止上下架冲突
 /// </summary>
 /// <param name="curNode"></param>
 /// <param name="curTask"></param>
 /// <param name="reStr">若可用,返回0,1:路径被锁定,不可用,2:其它错误,-1:系统异常</param>
 /// <returns></returns>
 public int TaskLockCheck(FlowCtlBaseModel.CtlNodeBaseModel curNode, CtlDBAccess.Model.ControlTaskModel curTask, ref string reStr)
 {
     try
     {
         lock (pathCheckLock)
         {
             if (curTask == null)
             {
                 reStr = "任务为空";
                 return(2);
             }
             CtlDBAccess.Model.MainControlTaskModel mainTask = mainCtlTaskBll.GetModel(curTask.MainTaskID);
             if (!wcsPathMap.Keys.Contains(mainTask.FlowPathKey))
             {
                 reStr = "不存在的路径:" + mainTask.FlowPathKey;
                 return(2);
             }
             FlowCtlBaseModel.WCSFlowPathModel wcsPath = wcsPathMap[mainTask.FlowPathKey];
             if (wcsPath.PathCata == "上架")
             {
                 // List<CtlDBAccess.Model.MainControlTaskModel> lockedMaintaskList = GetLockedTaskList(curNode, "下架");
                 if (!NodeLockedBytask(curNode, "下架"))
                 {
                     return(0);
                 }
                 else
                 {
                     return(1);
                 }
             }
             else if (wcsPath.PathCata == "下架")
             {
                 //List<CtlDBAccess.Model.MainControlTaskModel> lockedMaintaskList = GetLockedTaskList(curNode, "上架");
                 if (!NodeLockedBytask(curNode, "上架"))
                 {
                     return(0);
                 }
                 else
                 {
                     return(1);
                 }
             }
             else
             {
                 return(0);
             }
         }
     }
     catch (Exception ex)
     {
         reStr = ex.ToString();
         return(-1);
     }
 }
Ejemplo n.º 2
0
        private CtlDBAccess.Model.ControlTaskModel CreateStackerTask(int taskIndex, CtlDBAccess.Model.MainControlTaskModel mainTask, string stackerNodeID, TransDevModel.NodeTransStation portNode, string palletID, ref string reStr)
        {
            CtlDBAccess.Model.ControlTaskModel nextCtlTask = new CtlDBAccess.Model.ControlTaskModel();
            short nextCtlID = (short)ctlTaskBll.GetUnusedControlID();

            if (nextCtlID == 0)
            {
                reStr = "没有可用的控制ID";
                return(null);
            }

            nextCtlTask.TaskID     = System.Guid.NewGuid().ToString();
            nextCtlTask.DeviceID   = stackerNodeID;
            nextCtlTask.DeviceCata = "堆垛机";

            if (mainTask.TaskType == "上架")
            {
                nextCtlTask.StDevice       = portNode.NodeID;
                nextCtlTask.StDeviceCata   = portNode.DevCata;
                nextCtlTask.StDeviceParam  = "";
                nextCtlTask.EndDevice      = stackerNodeID;
                nextCtlTask.EndDeviceCata  = "货位";
                nextCtlTask.EndDeviceParam = mainTask.EndDeviceParam;
                nextCtlTask.TaskType       = (int)SysCfg.EnumAsrsTaskType.产品入库;
            }
            else if (mainTask.TaskType == "下架")
            {
                nextCtlTask.StDevice       = stackerNodeID;
                nextCtlTask.StDeviceCata   = "货位";
                nextCtlTask.StDeviceParam  = mainTask.StDeviceParam;
                nextCtlTask.EndDevice      = portNode.NodeID;
                nextCtlTask.EndDeviceCata  = portNode.DevCata;
                nextCtlTask.EndDeviceParam = "";
                nextCtlTask.TaskType       = (int)SysCfg.EnumAsrsTaskType.产品出库;
            }
            else
            {
                throw new NotImplementedException();
            }
            nextCtlTask.MainTaskID = mainTask.MainTaskID;
            nextCtlTask.PalletCode = palletID;
            nextCtlTask.ControlID  = nextCtlID;
            nextCtlTask.TaskIndex  = taskIndex;
            nextCtlTask.TaskParam  = "";
            nextCtlTask.TaskStatus = "待执行";
            nextCtlTask.TaskPhase  = 0;
            nextCtlTask.CreateTime = System.DateTime.Now;
            nextCtlTask.CreateMode = "自动";
            return(nextCtlTask);
        }
Ejemplo n.º 3
0
        private void WcsMainTaskCommit()
        {
            DataTable dt = this.dataGridView1.DataSource as DataTable;

            CtlDBAccess.BLL.MainControlTaskBll mainCtlTaskBll = new CtlDBAccess.BLL.MainControlTaskBll();
            foreach (DataRow dr in dt.Rows)
            {
                if (mainCtlTaskBll.Exists(dr["管理任务ID"].ToString()))
                {
                    continue;
                }
                CtlDBAccess.Model.MainControlTaskModel mainCtlTask = new CtlDBAccess.Model.MainControlTaskModel();
                mainCtlTask.WMSTaskID   = dr["管理任务ID"].ToString();
                mainCtlTask.MainTaskID  = dr["管理任务ID"].ToString();
                mainCtlTask.FlowPathKey = dr["起始设备号"].ToString() + "-" + dr["目标设备号"].ToString();
                mainCtlTask.PalletCode  = dr["托盘码"].ToString();
                mainCtlTask.TaskStatus  = "待启动";
                //if(wmsTask.Type == "下架")
                //{
                //    mainCtlTask.TaskType = "产品出库";
                //}
                //else if(wmsTask.Type=="上架")
                //{
                //    mainCtlTask.TaskType = "产品入库";
                //}
                //else
                //{
                //    mainCtlTask.TaskType = wmsTask.Type;
                //}
                mainCtlTask.TaskType = dr["任务类型"].ToString();

                mainCtlTask.StDevice      = dr["起始设备号"].ToString();
                mainCtlTask.StDeviceCata  = dr["起始设备类型"].ToString();//
                mainCtlTask.EndDevice     = dr["目标设备号"].ToString();
                mainCtlTask.EndDeviceCata = dr["目标设备类型"].ToString();
                if (mainCtlTask.StDeviceCata == "货位")
                {
                    mainCtlTask.StDeviceParam = dr["起始设备参数"].ToString();
                }
                if (mainCtlTask.EndDeviceCata == "货位")
                {
                    mainCtlTask.EndDeviceParam = dr["目标设备参数"].ToString();
                }
                mainCtlTask.CreateTime = System.DateTime.Now;
                mainCtlTask.CreateMode = "自动";
                mainCtlTaskBll.Add(mainCtlTask);
            }
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 得到一个对象实体
        /// </summary>
        public CtlDBAccess.Model.MainControlTaskModel GetModel(string MainTaskID)
        {
            StringBuilder strSql = new StringBuilder();

            strSql.Append("select  top 1  ");
            strSql.Append(" MainTaskID,WMSTaskID,FlowPathKey,PalletCode,TaskStatus,TaskType,StDevice,StDeviceCata,StDeviceParam,EndDevice,EndDeviceCata,EndDeviceParam,CreateTime,FinishTime,CreateMode,tag1,tag2,tag3,tag4,tag5 ");
            strSql.Append(" from MainControlTask ");
            strSql.Append(" where MainTaskID='" + MainTaskID + "' ");
            CtlDBAccess.Model.MainControlTaskModel model = new CtlDBAccess.Model.MainControlTaskModel();
            DataSet ds = DbHelperSQL.Query(strSql.ToString());

            if (ds.Tables[0].Rows.Count > 0)
            {
                return(DataRowToModel(ds.Tables[0].Rows[0]));
            }
            else
            {
                return(null);
            }
        }
Ejemplo n.º 5
0
 private bool AsrsHeightChecked(CtlDBAccess.Model.MainControlTaskModel mainTask, int height, ref string reStr)
 {
     try
     {
         if (mainTask == null)
         {
             reStr = "主控制任务为空";
             return(false);
         }
         if (mainTask.TaskType != "上架")
         {
             return(true);
         }
         List <string> checkAsrsList = new List <string>();
         checkAsrsList.AddRange(new string[] { "11003", "11004", "11005" });
         if (checkAsrsList.Contains(mainTask.EndDevice))
         {
             string[] cellArray = mainTask.EndDeviceParam.Split(new string[] { "-" }, StringSplitOptions.RemoveEmptyEntries);
             if (cellArray != null && cellArray.Count() < 3)
             {
                 reStr = "主任务目标货位参数错误";
                 return(false);
             }
             int layer = int.Parse(cellArray[2]);
             if (layer > 3)
             {
                 if (height > 1)
                 {
                     reStr = "目标货位限高!";
                     return(false);
                 }
             }
         }
         return(true);
     }
     catch (Exception ex)
     {
         reStr = ex.ToString();
         return(false);
     }
 }
Ejemplo n.º 6
0
        private void OnDelMaintask()
        {
            if (this.parentPNP.RoleID > 2)
            {
                MessageBox.Show("没有管理员权限");
                return;
            }
            int re = PoupAskmes("是否确定要删除?");

            if (re != 1)
            {
                return;
            }
            CtlDBAccess.BLL.MainControlTaskBll mainTaskBll = new CtlDBAccess.BLL.MainControlTaskBll();
            foreach (DataGridViewRow rw in  this.dataGridView1.SelectedRows)
            {
                string mainTaskID = rw.Cells["管理任务ID"].Value.ToString();
                CtlDBAccess.Model.MainControlTaskModel mainTask = mainTaskBll.GetModel(mainTaskID);
                if (mainTask == null)
                {
                    continue;
                }
                if (mainTask.TaskStatus == "执行中")
                {
                    if (parentPNP.RoleID == 1)
                    {
                        mainTaskBll.Delete(mainTaskID);
                    }
                }
                else
                {
                    mainTaskBll.Delete(mainTaskID);
                }
            }
            OnRefreshWMSDt();
        }
Ejemplo n.º 7
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);
            }
        }
Ejemplo n.º 8
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);
            }
        }
Ejemplo n.º 9
0
        private void WMSTaskMonitorProc()
        {
            foreach (TaskDeviceModel stDev in wmsStDevList)
            {
                List <ManageTaskModel> wmsTasks = new List <ManageTaskModel>();
                ResposeData            res      = WmsSvc.GetWaittingToRunTaskList(stDev, ref wmsTasks);
                if (!res.Status)
                {
                    Console.WriteLine("获取{0}待执行管理任务失败{1}", stDev.DeviceCode, res.Describe);
                    continue;
                }
                foreach (ManageTaskModel wmsTask in wmsTasks)
                {
                    if (mainCtlTaskBll.Exists(wmsTask.TaskID))
                    {
                        continue;
                    }
                    CtlDBAccess.Model.MainControlTaskModel mainCtlTask = new CtlDBAccess.Model.MainControlTaskModel();
                    mainCtlTask.WMSTaskID   = wmsTask.TaskID;
                    mainCtlTask.MainTaskID  = wmsTask.TaskID;
                    mainCtlTask.FlowPathKey = wmsTask.StartDevice.DeviceCode + "-" + wmsTask.TargetDevice.DeviceCode;
                    mainCtlTask.PalletCode  = wmsTask.PalletCode;
                    mainCtlTask.TaskStatus  = "待启动";
                    //if(wmsTask.Type == "下架")
                    //{
                    //    mainCtlTask.TaskType = "产品出库";
                    //}
                    //else if(wmsTask.Type=="上架")
                    //{
                    //    mainCtlTask.TaskType = "产品入库";
                    //}
                    //else
                    //{
                    //    mainCtlTask.TaskType = wmsTask.Type;
                    //}
                    mainCtlTask.TaskType = wmsTask.Type;

                    mainCtlTask.StDevice      = wmsTask.StartDevice.DeviceCode;
                    mainCtlTask.StDeviceCata  = wmsTask.StartDevice.DeviceType;
                    mainCtlTask.EndDevice     = wmsTask.TargetDevice.DeviceCode;
                    mainCtlTask.EndDeviceCata = wmsTask.TargetDevice.DeviceType;
                    if (wmsTask.StartDevice.DeviceType == "货位")
                    {
                        mainCtlTask.StDeviceParam = wmsTask.StartDevice.ExtParam;
                    }
                    if (wmsTask.TargetDevice.DeviceType == "货位")
                    {
                        mainCtlTask.EndDeviceParam = wmsTask.TargetDevice.ExtParam;
                    }
                    mainCtlTask.CreateTime = System.DateTime.Now;
                    mainCtlTask.CreateMode = "自动";
                    mainCtlTaskBll.Add(mainCtlTask);
                }
            }
            string reStr = "";
            //分解主控制任务
            List <CtlDBAccess.Model.MainControlTaskModel> mainTasks = mainCtlTaskBll.GetModelList("TaskStatus = '待启动'");

            foreach (CtlDBAccess.Model.MainControlTaskModel mainTask in mainTasks)
            {
                string pathKey = mainTask.FlowPathKey;
                if (!wcsPathMap.Keys.Contains(pathKey))
                {
                    Console.WriteLine("不存在的路径配置:{0}", pathKey);
                    continue;
                }
                FlowCtlBaseModel.WCSFlowPathModel wcsPath = wcsPathMap[pathKey];
                if (wcsPath.NodeList.Count() < 1)
                {
                    continue;
                }
                FlowCtlBaseModel.WCSPathNodeModel stNode = wcsPath.NodeList[0];
                if (stNode.NodeFlag != "起点")
                {
                    continue;
                }
                string nodeID = stNode.NodeID;
                FlowCtlBaseModel.CtlNodeBaseModel node = NodeManager.GetNodeByID(nodeID);
                if (node == null)
                {
                    continue;
                }
                if (node.DevCata == "站台")
                {
                    if (node.Db2Vals[0] != 2)
                    {
                        continue;
                    }
                }
                if (!node.WCSMainTaskStart(mainTask, wcsPath, ref reStr))
                {
                    Console.WriteLine("{0} 启动任务:{1}失败,{2}", node.NodeName, mainTask.WMSTaskID, reStr);
                }
                else
                {
                    WmsSvc.UpdateManageTaskStatus(mainTask.WMSTaskID, "执行中");
                    Console.WriteLine("主控制任务{0},{1}->{2}准备启动", mainTask.MainTaskID, mainTask.StDevice, mainTask.EndDevice);
                }
            }

            /*
             * foreach(string pathKey in wcsPathMap.Keys)
             * {
             *  FlowCtlBaseModel.WCSFlowPathModel wcsPath = wcsPathMap[pathKey];
             *  if(wcsPath.NodeList.Count()<1)
             *  {
             *      continue;
             *  }
             *
             *  FlowCtlBaseModel.WCSPathNodeModel stNode= wcsPath.NodeList[0];
             *  if(stNode.NodeFlag !="起点")
             *  {
             *      continue;
             *  }
             *  string nodeID = stNode.NodeID;
             *  FlowCtlBaseModel.CtlNodeBaseModel node = NodeManager.GetNodeByID(nodeID);
             *  if(node == null)
             *  {
             *      continue;
             *  }
             *  //生成第一个控制任务
             *  List<CtlDBAccess.Model.MainControlTaskModel> mainTasks= mainCtlTaskBll.GetModelList(string.Format("TaskStatus = '待执行' and StDevice='{0}'", nodeID));
             *  foreach(CtlDBAccess.Model.MainControlTaskModel mainTask in mainTasks)
             *  {
             *      if(!node.WCSMainTaskStart(mainTask, wcsPath, ref reStr))
             *      {
             *          Console.WriteLine("{0} 启动任务:{1}失败,{2}", node.NodeName, mainTask.WMSTaskID,reStr);
             *      }
             *      else
             *      {
             *          WmsSvc.UpdateManageTaskStatus(mainTask.WMSTaskID, "执行中");
             *      }
             *  }
             * }*/
        }
Ejemplo n.º 10
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);
            }
        }
Ejemplo n.º 11
0
 /// <summary>
 /// 得到一个对象实体
 /// </summary>
 public CtlDBAccess.Model.MainControlTaskModel DataRowToModel(DataRow row)
 {
     CtlDBAccess.Model.MainControlTaskModel model = new CtlDBAccess.Model.MainControlTaskModel();
     if (row != null)
     {
         if (row["MainTaskID"] != null)
         {
             model.MainTaskID = row["MainTaskID"].ToString();
         }
         if (row["WMSTaskID"] != null)
         {
             model.WMSTaskID = row["WMSTaskID"].ToString();
         }
         if (row["FlowPathKey"] != null)
         {
             model.FlowPathKey = row["FlowPathKey"].ToString();
         }
         if (row["PalletCode"] != null)
         {
             model.PalletCode = row["PalletCode"].ToString();
         }
         if (row["TaskStatus"] != null)
         {
             model.TaskStatus = row["TaskStatus"].ToString();
         }
         if (row["TaskType"] != null)
         {
             model.TaskType = row["TaskType"].ToString();
         }
         if (row["StDevice"] != null)
         {
             model.StDevice = row["StDevice"].ToString();
         }
         if (row["StDeviceCata"] != null)
         {
             model.StDeviceCata = row["StDeviceCata"].ToString();
         }
         if (row["StDeviceParam"] != null)
         {
             model.StDeviceParam = row["StDeviceParam"].ToString();
         }
         if (row["EndDevice"] != null)
         {
             model.EndDevice = row["EndDevice"].ToString();
         }
         if (row["EndDeviceCata"] != null)
         {
             model.EndDeviceCata = row["EndDeviceCata"].ToString();
         }
         if (row["EndDeviceParam"] != null)
         {
             model.EndDeviceParam = row["EndDeviceParam"].ToString();
         }
         if (row["CreateTime"] != null && row["CreateTime"].ToString() != "")
         {
             model.CreateTime = DateTime.Parse(row["CreateTime"].ToString());
         }
         if (row["FinishTime"] != null && row["FinishTime"].ToString() != "")
         {
             model.FinishTime = DateTime.Parse(row["FinishTime"].ToString());
         }
         if (row["CreateMode"] != null)
         {
             model.CreateMode = row["CreateMode"].ToString();
         }
         if (row["tag1"] != null)
         {
             model.tag1 = row["tag1"].ToString();
         }
         if (row["tag2"] != null)
         {
             model.tag2 = row["tag2"].ToString();
         }
         if (row["tag3"] != null)
         {
             model.tag3 = row["tag3"].ToString();
         }
         if (row["tag4"] != null)
         {
             model.tag4 = row["tag4"].ToString();
         }
         if (row["tag5"] != null)
         {
             model.tag5 = row["tag5"].ToString();
         }
     }
     return(model);
 }
Ejemplo n.º 12
0
        /// <summary>
        /// 增加一条数据
        /// </summary>
        public bool Add(CtlDBAccess.Model.MainControlTaskModel model)
        {
            StringBuilder strSql  = new StringBuilder();
            StringBuilder strSql1 = new StringBuilder();
            StringBuilder strSql2 = new StringBuilder();

            if (model.MainTaskID != null)
            {
                strSql1.Append("MainTaskID,");
                strSql2.Append("'" + model.MainTaskID + "',");
            }
            if (model.WMSTaskID != null)
            {
                strSql1.Append("WMSTaskID,");
                strSql2.Append("'" + model.WMSTaskID + "',");
            }
            if (model.FlowPathKey != null)
            {
                strSql1.Append("FlowPathKey,");
                strSql2.Append("'" + model.FlowPathKey + "',");
            }
            if (model.PalletCode != null)
            {
                strSql1.Append("PalletCode,");
                strSql2.Append("'" + model.PalletCode + "',");
            }
            if (model.TaskStatus != null)
            {
                strSql1.Append("TaskStatus,");
                strSql2.Append("'" + model.TaskStatus + "',");
            }
            if (model.TaskType != null)
            {
                strSql1.Append("TaskType,");
                strSql2.Append("'" + model.TaskType + "',");
            }
            if (model.StDevice != null)
            {
                strSql1.Append("StDevice,");
                strSql2.Append("'" + model.StDevice + "',");
            }
            if (model.StDeviceCata != null)
            {
                strSql1.Append("StDeviceCata,");
                strSql2.Append("'" + model.StDeviceCata + "',");
            }
            if (model.StDeviceParam != null)
            {
                strSql1.Append("StDeviceParam,");
                strSql2.Append("'" + model.StDeviceParam + "',");
            }
            if (model.EndDevice != null)
            {
                strSql1.Append("EndDevice,");
                strSql2.Append("'" + model.EndDevice + "',");
            }
            if (model.EndDeviceCata != null)
            {
                strSql1.Append("EndDeviceCata,");
                strSql2.Append("'" + model.EndDeviceCata + "',");
            }
            if (model.EndDeviceParam != null)
            {
                strSql1.Append("EndDeviceParam,");
                strSql2.Append("'" + model.EndDeviceParam + "',");
            }
            if (model.CreateTime != null)
            {
                strSql1.Append("CreateTime,");
                strSql2.Append("'" + model.CreateTime + "',");
            }
            if (model.FinishTime != null)
            {
                strSql1.Append("FinishTime,");
                strSql2.Append("'" + model.FinishTime + "',");
            }
            if (model.CreateMode != null)
            {
                strSql1.Append("CreateMode,");
                strSql2.Append("'" + model.CreateMode + "',");
            }
            if (model.tag1 != null)
            {
                strSql1.Append("tag1,");
                strSql2.Append("'" + model.tag1 + "',");
            }
            if (model.tag2 != null)
            {
                strSql1.Append("tag2,");
                strSql2.Append("'" + model.tag2 + "',");
            }
            if (model.tag3 != null)
            {
                strSql1.Append("tag3,");
                strSql2.Append("'" + model.tag3 + "',");
            }
            if (model.tag4 != null)
            {
                strSql1.Append("tag4,");
                strSql2.Append("'" + model.tag4 + "',");
            }
            if (model.tag5 != null)
            {
                strSql1.Append("tag5,");
                strSql2.Append("'" + model.tag5 + "',");
            }
            strSql.Append("insert into MainControlTask(");
            strSql.Append(strSql1.ToString().Remove(strSql1.Length - 1));
            strSql.Append(")");
            strSql.Append(" values (");
            strSql.Append(strSql2.ToString().Remove(strSql2.Length - 1));
            strSql.Append(")");
            int rows = DbHelperSQL.ExecuteSql(strSql.ToString());

            if (rows > 0)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
Ejemplo n.º 13
0
        /// <summary>
        /// 更新一条数据
        /// </summary>
        public bool Update(CtlDBAccess.Model.MainControlTaskModel model)
        {
            StringBuilder strSql = new StringBuilder();

            strSql.Append("update MainControlTask set ");
            if (model.WMSTaskID != null)
            {
                strSql.Append("WMSTaskID='" + model.WMSTaskID + "',");
            }
            if (model.FlowPathKey != null)
            {
                strSql.Append("FlowPathKey='" + model.FlowPathKey + "',");
            }
            if (model.PalletCode != null)
            {
                strSql.Append("PalletCode='" + model.PalletCode + "',");
            }
            if (model.TaskStatus != null)
            {
                strSql.Append("TaskStatus='" + model.TaskStatus + "',");
            }
            if (model.TaskType != null)
            {
                strSql.Append("TaskType='" + model.TaskType + "',");
            }
            if (model.StDevice != null)
            {
                strSql.Append("StDevice='" + model.StDevice + "',");
            }
            if (model.StDeviceCata != null)
            {
                strSql.Append("StDeviceCata='" + model.StDeviceCata + "',");
            }
            if (model.StDeviceParam != null)
            {
                strSql.Append("StDeviceParam='" + model.StDeviceParam + "',");
            }
            else
            {
                strSql.Append("StDeviceParam= null ,");
            }
            if (model.EndDevice != null)
            {
                strSql.Append("EndDevice='" + model.EndDevice + "',");
            }
            if (model.EndDeviceCata != null)
            {
                strSql.Append("EndDeviceCata='" + model.EndDeviceCata + "',");
            }
            if (model.EndDeviceParam != null)
            {
                strSql.Append("EndDeviceParam='" + model.EndDeviceParam + "',");
            }
            else
            {
                strSql.Append("EndDeviceParam= null ,");
            }
            if (model.CreateTime != null)
            {
                strSql.Append("CreateTime='" + model.CreateTime + "',");
            }
            if (model.FinishTime != null)
            {
                strSql.Append("FinishTime='" + model.FinishTime + "',");
            }
            else
            {
                strSql.Append("FinishTime= null ,");
            }
            if (model.CreateMode != null)
            {
                strSql.Append("CreateMode='" + model.CreateMode + "',");
            }
            if (model.tag1 != null)
            {
                strSql.Append("tag1='" + model.tag1 + "',");
            }
            else
            {
                strSql.Append("tag1= null ,");
            }
            if (model.tag2 != null)
            {
                strSql.Append("tag2='" + model.tag2 + "',");
            }
            else
            {
                strSql.Append("tag2= null ,");
            }
            if (model.tag3 != null)
            {
                strSql.Append("tag3='" + model.tag3 + "',");
            }
            else
            {
                strSql.Append("tag3= null ,");
            }
            if (model.tag4 != null)
            {
                strSql.Append("tag4='" + model.tag4 + "',");
            }
            else
            {
                strSql.Append("tag4= null ,");
            }
            if (model.tag5 != null)
            {
                strSql.Append("tag5='" + model.tag5 + "',");
            }
            else
            {
                strSql.Append("tag5= null ,");
            }
            int n = strSql.ToString().LastIndexOf(",");

            strSql.Remove(n, 1);
            strSql.Append(" where MainTaskID='" + model.MainTaskID + "' ");
            int rowsAffected = DbHelperSQL.ExecuteSql(strSql.ToString());

            if (rowsAffected > 0)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }