private string[] GetSwitchLineMods(int switchLineNo) { PLNodesBll plnodeBll = new PLNodesBll(); PLNodesModel plNode = plnodeBll.GetModel("OPC001"); if (plNode == null) { MessageBox.Show("不存在的工位号:OPC001"); return(null); } string[] modExistArray = null; if (switchLineNo == 1) { modExistArray = plNode.tag1.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); } else if (switchLineNo == 2) { modExistArray = plNode.tag2.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); } else if (switchLineNo == 3) { modExistArray = plNode.tag3.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); } else { modExistArray = plNode.tag4.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); } return(modExistArray); }
private bool UpdateSwitchLineMods(int switchLineNo, string[] mods) { PLNodesBll plnodeBll = new PLNodesBll(); PLNodesModel plNode = plnodeBll.GetModel("OPC001"); if (plNode == null) { MessageBox.Show("不存在的工位号:OPC001"); return(false); } string strMods = ""; for (int i = 0; i < mods.Count(); i++) { strMods += (mods[i] + ","); } if (switchLineNo == 1) { plNode.tag1 = strMods; } else if (switchLineNo == 2) { plNode.tag2 = strMods; } else if (switchLineNo == 3) { plNode.tag3 = strMods; } else { plNode.tag4 = strMods; } return(plnodeBll.Update(plNode)); }
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); } }