public bool ProcessInit(ref string reStr)
        {
            try
            {
                this.devList        = new List <CtlDevBaseModel>();
                this.nodeList       = new List <CtlNodeBaseModel>();
                this.nodeStatusList = new List <CtlNodeStatus>();
                threadList          = new List <ThreadBaseModel>();
                this.rfidRWs        = new List <IrfidRW>();
                this.barcodeRWs     = new List <IBarcodeRW>();
                //this.printerRWs = new List<IPrinterInfoDev>();
                this.plcRWs = new List <IPlcRW>();
                this.ccdRWs = new List <MingmeiDeviceAcc>();

                string xmlCfgFile = System.AppDomain.CurrentDomain.BaseDirectory + @"data/PLConfig.xml";
                if (!File.Exists(xmlCfgFile))
                {
                    reStr = "系统配置文件:" + xmlCfgFile + " 不存在!";
                    return(false);
                }
                if (!PLProcessModel.SysCfgModel.LoadCfg(xmlCfgFile, ref reStr))
                {
                    return(false);
                }

                XElement root = XElement.Load(xmlCfgFile);
                //1 解析通信设备信息

                XElement commDevXERoot = root.Element("CommDevCfg");
                if (!ParseCommDevCfg(commDevXERoot, ref reStr))
                {
                    // return false;
                }
                //2 解析结点信息
                XElement lineRoot = root.Element("LineCfg");
                if (!ParsePLines(lineRoot, ref reStr))
                {
                    return(false);
                }
                foreach (CtlLineBaseModel line in lineList)
                {
                    if (!line.AllocCommObj(rfidRWs, barcodeRWs, plcRWs, ccdRWs, ref reStr))
                    {
                        return(false);
                    }
                }
                if (lineList != null && lineList.Count() > 0)
                {
                    foreach (CtlLineBaseModel line in lineList)
                    {
                        nodeList.AddRange(line.NodeList);
                        devList.AddRange(line.DevList);
                    }
                }
                PLNodesBll plNodeBll = new PLNodesBll();
                foreach (CtlDevBaseModel dev in this.devList)
                {
                    dev.LogRecorder = logRecorder;
                }
                foreach (CtlNodeBaseModel node in this.nodeList)
                {
                    this.nodeStatusList.Add(node.CurrentStat);
                    node.LogRecorder = logRecorder;
                    if (!plNodeBll.Exists(node.NodeID))
                    {
                        PLNodesModel plNode = new PLNodesModel();
                        plNode.nodeID        = node.NodeID;
                        plNode.nodeName      = node.NodeName;
                        plNode.enableRun     = true;
                        plNode.checkRequired = true;
                        plNode.tag1          = "";
                        plNode.tag2          = "";
                        plNode.tag3          = "";
                        plNode.tag4          = "";
                        plNode.tag5          = "";
                        plNodeBll.Add(plNode);
                        node.plNodeModel = plNode;
                    }
                    else
                    {
                        PLNodesModel plNode = plNodeBll.GetModel(node.NodeID);
                        node.plNodeModel = plNode;
                    }
                }

                //3 给节点分配设备读写接口对象

                //for (int i = 0; i < nodeList.Count(); i++)
                //{
                //    CtlNodeBaseModel node = nodeList[i];

                //    node.SimMode = SysCfgModel.SimMode;
                //}

                // prienterRW = this.printerRWs[0];
                //(GetNodeByID("8001") as NodePack).PrienterRW = prienterRW;
                //4 线程-结点分配
                XElement ThreadnodeRoot = root.Element("ThreadAlloc");
                if (!ParseTheadNodes(ThreadnodeRoot, ref reStr))
                {
                    return(false);
                }

                foreach (ThreadBaseModel threadObj in this.threadList)
                {
                    threadObj.LogRecorder = logRecorder;
                }


                if (!SysCfgModel.SimMode)
                {
                    CommDevConnect();//通信设备连接
                }

                foreach (CtlNodeBaseModel node in nodeList)
                {
                    if (!node.DevStatusRestore())
                    {
                        reStr = "恢复投产位状态失败";
                        //logRecorder.AddLog(new LogModel(objectName, reStr, EnumLoglevel.错误));
                        logRecorder.AddDebugLog(node.NodeName, reStr);
                        //return false;
                    }
                }

                SetMesconnStat();

                mainThread = new ThreadBaseModel(1, "业务线程");
                mainThread.LoopInterval = 100;
                mainThread.SetThreadRoutine(new DelegateThreadRoutine(BusinessLoop));
                if (!mainThread.TaskInit(ref reStr))
                {
                    logRecorder.AddLog(new LogModel(objectName, reStr, EnumLoglevel.错误));

                    return(false);
                }

                historyDataClearThread = new ThreadBaseModel(2, "日志清理线程");
                historyDataClearThread.LoopInterval = 5000;//5秒清理一次
                historyDataClearThread.SetThreadRoutine(ClearLogLoop);
                if (!historyDataClearThread.TaskInit(ref reStr))
                {
                    logRecorder.AddLog(new LogModel(objectName, reStr, EnumLoglevel.错误));
                }

                devWarnMonitorThread = new ThreadBaseModel(3, "设备报警数据采集线程");
                devWarnMonitorThread.LoopInterval = 1000;
                devWarnMonitorThread.SetThreadRoutine(DevMonitorLoop);
                devWarnMonitorThread.TaskInit(ref reStr);

                //mesTopMonitorThread = new ThreadBaseModel(4,"mes停机监控");
                //mesTopMonitorThread.LoopInterval = 1000;
                //mesTopMonitorThread.SetThreadRoutine(MesStopstatMonitor);
                //mesTopMonitorThread.TaskInit(ref reStr);

                for (int i = 0; i < lineList.Count(); i++)
                {
                    view.InitLineMonitor(i + 1, lineList[i]);
                }


                this.fxjDataUploadThread = new ThreadBaseModel(4, "分选机上报MES线程");
                if (SysCfgModel.SimMode == true)
                {
                    this.fxjDataUploadThread.LoopInterval = 1000 * 5;//测试5秒
                }
                else
                {
                    this.fxjDataUploadThread.LoopInterval = 1000 * 60 * 5;//5分钟上报一次
                    //this.fxjDataUploadThread.LoopInterval = 1000 * 10;//5分钟上报一次
                }


                this.fxjDataUploadThread.SetThreadRoutine(FXJDataUploadToMesHandler);
                if (!this.fxjDataUploadThread.TaskInit(ref reStr))
                {
                    logRecorder.AddLog(new LogModel(objectName, "分选机线程初始化失败:" + reStr, EnumLoglevel.错误));
                }

                offlineDataUploadThread = new ThreadBaseModel(5, "离线数据上报MES线程");
                if (SysCfgModel.SimMode == true)
                {
                    this.offlineDataUploadThread.LoopInterval = 1000 * 5;//测试5秒
                }
                else
                {
                    this.offlineDataUploadThread.LoopInterval = 1000 * 60 * 5;//5分钟上报间隔
                }
                this.offlineDataUploadThread.SetThreadRoutine(OfflineDataUploadMesHandler);
                if (!this.offlineDataUploadThread.TaskInit(ref reStr))
                {
                    logRecorder.AddLog(new LogModel(objectName, "离线数据上报MES线程:" + reStr, EnumLoglevel.错误));
                }

                return(true);
            }
            catch (Exception ex)
            {
                reStr = ex.ToString();
                return(false);
            }
        }