Example #1
0
        //   public CtlManage.CommDevManage DevCommManager { get; set; }
        public bool CtlInit(XElement CtlnodeRoot, ref string reStr)
        {
            monitorNodeList = new List <CtlNodeBaseModel>();
            if (CtlnodeRoot == null)
            {
                reStr = "系统配置文件错误,不存在CtlNodes节点";
                return(false);
            }
            try
            {
                IEnumerable <XElement> nodeXEList =
                    from el in CtlnodeRoot.Elements()
                    where el.Name == "Node"
                    select el;
                foreach (XElement el in nodeXEList)
                {
                    string           className = (string)el.Attribute("className");
                    CtlNodeBaseModel ctlNode   = null;
                    switch (className)
                    {
                    case "TransDevModel.NodeTransStation":
                    {
                        ctlNode = new TransDevModel.NodeTransStation();
                        break;
                    }

                    case "TransDevModel.NodeRGV":
                    {
                        ctlNode = new TransDevModel.NodeRGV();
                        break;
                    }

                    default:
                        break;
                    }
                    if (ctlNode != null)
                    {
                        if (!ctlNode.BuildCfg(el, ref reStr))
                        {
                            return(false);
                        }

                        this.monitorNodeList.Add(ctlNode);
                    }
                }
            }
            catch (Exception ex)
            {
                reStr = ex.ToString();
                return(false);
            }

            return(true);
        }
Example #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);
        }
Example #3
0
        /// <summary>
        /// 系统控制初始化
        /// </summary>
        /// <returns></returns>
        public bool SysCtlInit()
        {
            try
            {
                mesAcc = new PrcsCtlModelsAoyou.MesAccAoyou();

                ctlNodeManager.DevCommManager = devCommManager;
                // 1加载配置文件
                string   reStr = "";
                XElement root  = null;
                SysCfg.SysCfgModel.cfgFilefullPath = AppDomain.CurrentDomain.BaseDirectory + @"\data\AoyouWCSCfg.xml";
                if (!SysCfg.SysCfgModel.LoadCfg(ref root, ref reStr))
                {
                    Console.WriteLine("系统配置解析错误,{0}", reStr);
                    return(false);
                }

                if (root.Element("sysSet").Element("ExtLogSrc") != null)
                {
                    string logSrcStr = root.Element("sysSet").Element("ExtLogSrc").Value.ToString();
                    ExtLogSrc = logSrcStr.Split(new string[] { ",", ";" }, StringSplitOptions.RemoveEmptyEntries);
                }


                //2 初始化通信模块
                XElement commDevXERoot = root.Element("CommDevCfg");
                if (!devCommManager.ParseCommdev(commDevXERoot, ref reStr))
                {
                    Console.WriteLine("通信设备配置参数解析设备:" + reStr);
                    return(false);
                }
                devCommManager.CommDevConnect();
                //3 初始化立库控制系统

                XElement asrsRoot = root.Element("AsrsNodes");
                if (!asrsPresenter.CtlInit(asrsRoot, ref reStr))
                {
                    Console.WriteLine("立库控制系统初始化失败:" + reStr);
                    return(false);
                }
                foreach (AsrsControl.AsrsCtlModel asrsCtl in asrsPresenter.AsrsCtls)
                {
                    asrsCtl.dlgtAsrsOutportBusiness = AsrsOutportBusiness;

                    asrsCtl.dlgtGetLogicArea = AsrsAreaToCheckin;
                }


                //4 初始化流水线控制系统
                XElement prcsNodeRoot = root.Element("CtlNodes");
                if (!prsNodeManager.CtlInit(prcsNodeRoot, ref reStr))
                {
                    Console.WriteLine("流水线系统初始化失败:" + reStr);
                    return(false);
                }

                //5 注册控制节点
                ctlNodeManager.AddCtlNodeRange(prsNodeManager.GetAllCtlNodes());
                ctlNodeManager.AddCtlNodeRange(asrsPresenter.GetAllCtlNodes());
                foreach (FlowCtlBaseModel.CtlNodeBaseModel node in ctlNodeManager.MonitorNodeList)
                {
                    node.MesAcc = mesAcc;
                }
                foreach (AsrsControl.AsrsCtlModel asrsCtl in asrsPresenter.AsrsCtls)
                {
                    asrsCtl.MesAcc = mesAcc;
                }


                taskRunCtl             = new PrcsCtlModelsAoyou.CtlTaskManage();
                taskRunCtl.WmsSvc      = WmsSvc;
                taskRunCtl.NodeManager = ctlNodeManager;
                if (!taskRunCtl.Init())
                {
                    Console.WriteLine("任务控制管理初始化失败");
                    return(false);
                }

                XElement wcsPathRoot = root.Element("WCSPath");
                if (!taskRunCtl.BuildFlowPath(wcsPathRoot, ref reStr))
                {
                    Console.WriteLine("WCS路径配置错误,{0}", reStr);
                    return(false);
                }
                //注册限高检测委托
                List <string> heightCheckStations = new List <string>();
                heightCheckStations.AddRange(new string[] { "12112" });
                foreach (string devID in heightCheckStations)
                {
                    TransDevModel.NodeTransStation transDev = ctlNodeManager.GetNodeByID(devID) as TransDevModel.NodeTransStation;
                    if (transDev == null)
                    {
                        continue;
                    }
                    transDev.dlgtHeightChecked = AsrsHeightChecked;
                }
                //6 通信设备分配
                ctlNodeManager.AllocateCommdev();

                asrsPresenter.DevStatusRestore();
                prsNodeManager.DevStatusRestore();

                //建立节点路径
                //  ctlNodeManager.BuildNodePath();

                //7 线程分配
                XElement threadRoot = root.Element("ThreadAlloc");
                if (!ctlNodeManager.ParseTheadNodes(threadRoot, ref reStr))
                {
                    Console.WriteLine("分配线程时出现错误");
                    return(false);
                }


                return(true);
            }
            catch (Exception ex)
            {
                Console.WriteLine("控制系统初始化错误:" + ex.ToString());
                return(false);
            }
        }
Example #4
0
        private CtlDBAccess.Model.ControlTaskModel CreateRGVTask(int taskIndex, string mainTaskID, TransDevModel.NodeRGV rgv, TransDevModel.NodeTransStation stNode, TransDevModel.NodeTransStation targetNode, 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       = rgv.NodeID;
            nextCtlTask.DeviceCata     = rgv.DevCata;
            nextCtlTask.StDevice       = stNode.NodeID;
            nextCtlTask.StDeviceCata   = stNode.DevCata;
            nextCtlTask.StDeviceParam  = "";
            nextCtlTask.EndDevice      = targetNode.NodeID;
            nextCtlTask.EndDeviceCata  = targetNode.DevCata;
            nextCtlTask.EndDeviceParam = "";
            nextCtlTask.MainTaskID     = mainTaskID;
            nextCtlTask.PalletCode     = palletID;
            nextCtlTask.ControlID      = nextCtlID;
            nextCtlTask.TaskIndex      = taskIndex;
            nextCtlTask.TaskType       = 13;
            nextCtlTask.TaskParam      = "";
            nextCtlTask.TaskStatus     = "待执行";
            nextCtlTask.TaskPhase      = 0;
            nextCtlTask.CreateTime     = System.DateTime.Now;
            nextCtlTask.CreateMode     = "自动";
            return(nextCtlTask);
        }