/// <summary> /// 启动线程 /// </summary> /// <param name="plc"></param> public void SpinUp(CGJMI_10 devMon, bool autoMode = false) { this._devMon = devMon; this.autoMode = autoMode; if (_threadMon == null) { _dispose = false; if (_autoMode) { _paused = false; _threadStatus = EThreadStatus.运行; } else { _paused = true; _threadStatus = EThreadStatus.暂停; } _iniOK = false; _threadMon = new Thread(OnStart); _threadMon.Name = _name; _threadMon.IsBackground = true; _threadMon.Start(); OnStatusArgs.OnEvented(new CConArgs(idNo, name, "创建" + _threadMon.Name + "监控线程")); } }
/// <summary> /// 启动线程 /// </summary> /// <param name="plc"></param> public void SpinUp(CFMBCom devFMB, bool autoMode = false) { this._devFMB = devFMB; this.autoMode = autoMode; if (_threadFMB == null) { _dispose = false; if (_autoMode) { _paused = false; _threadStatus = EThreadStatus.运行; } else { _paused = true; _threadStatus = EThreadStatus.暂停; } _iniOK = false; _threadFMB = new Thread(OnStart); _threadFMB.Name = _name; _threadFMB.IsBackground = true; _threadFMB.Start(); OnStatusArgs.OnEvented(new CConArgs(CLanguage.Lan("创建监控线程") + _threadFMB.Name)); } }
/// <summary> /// 恢复线程 /// </summary> public void Continued() { if (!_autoMode && _threadMon != null) { _paused = false; _threadStatus = EThreadStatus.运行; } }
/// <summary> /// 暂停线程 /// </summary> public void Paused() { if (!_autoMode && _threadMon != null) { _paused = true; _threadStatus = EThreadStatus.暂停; } }
/// <summary> /// 暂停线程运行 /// </summary> public void paused() { if (!_autoMode && _ThreadPLC != null) { _paused = true; _threadStatus = EThreadStatus.暂停; } }
/// <summary> /// 启动线程 /// </summary> /// <param name="plc"></param> public void SpinUp(CIOCom devIO, bool autoMode = true) { this._devIO = devIO; this._autoMode = autoMode; if (threadIO == null) { _dispose = false; if (_autoMode) { _paused = false; _threadStatus = EThreadStatus.运行; } else { _paused = true; _threadStatus = EThreadStatus.暂停; } foreach (string keyVal in rIOREG.Keys) { if (rIOVal.ContainsKey(keyVal)) { rIOVal[keyVal] = -1; } } foreach (string keyVal in wIOREG.Keys) { if (wIOVal.ContainsKey(keyVal)) { wIOVal[keyVal] = -1; } } threadIO = new Thread(OnStart); threadIO.Name = _name; threadIO.IsBackground = true; threadIO.Start(); OnStatusArgs.OnEvented(new CConArgs(CLanguage.Lan("创建监控线程") + threadIO.Name)); } }
/// <summary> /// 启动线程 /// </summary> /// <param name="devPLC">PLC设备</param> /// <param name="autoMode">自动模式:不间断扫描;手动模式:需手动启动扫描</param> /// <param name="plcAddr">PLC地址:默认为1,TCP通信该参数无效</param> public void SpinUp(CPLCCOM devPLC, bool autoMode = true, int plcAddr = 1) { try { this._devPLC = devPLC; this._autoMode = autoMode; this._plcAddr = plcAddr; _complete = false; _dispose = false; if (_autoMode) { _paused = false; _threadStatus = EThreadStatus.运行; } else { _paused = true; _threadStatus = EThreadStatus.暂停; } if (_ThreadPLC == null) { _ThreadPLC = new Thread(OnRun); _ThreadPLC.Name = _name; _ThreadPLC.IsBackground = true; _ThreadPLC.Start(); } } catch (Exception) { throw; } }
/// <summary> /// 启动监控 /// </summary> private void OnStart() { try { while (true) { if (_dispose) { return; } Thread.Sleep(_delayMs); if (!_autoMode && _paused) { continue; } Stopwatch wather = new Stopwatch(); wather.Start(); string er = string.Empty; if (_iniOK) { if (!WriteData(out er)) { OnDataArgs.OnEvented(new CDataArgs(idNo, name, er, false, true)); } } if (!ReadData(out er)) { OnDataArgs.OnEvented(new CDataArgs(idNo, name, er, false, true)); } _iniOK = true; wather.Stop(); if (!_autoMode) { _paused = true; _threadStatus = EThreadStatus.暂停; OnDataArgs.OnEvented(new CDataArgs(idNo, name, "监控扫描时间:" + wather.ElapsedMilliseconds.ToString() + "ms")); continue; } _threadStatus = EThreadStatus.运行; } } catch (Exception ex) { OnStatusArgs.OnEvented(new CConArgs(idNo, name, _threadMon.Name + "监控线程异常错误:" + ex.ToString(), true)); } finally { _dispose = false; _threadStatus = EThreadStatus.退出; OnStatusArgs.OnEvented(new CConArgs(idNo, name, _threadMon.Name + "监控线程销毁退出", true)); } }
/// <summary> /// 线程方法 /// </summary> private void OnStart() { try { while (true) { if (_dispose) { return; } Thread.Sleep(_delayMs); if (!_autoMode && _paused) { continue; } Stopwatch wather = new Stopwatch(); wather.Start(); string er = string.Empty; //初始化读取控制板状态 if (!readInitial(out er)) { OnDataArgs.OnEvented(new CDataArgs(er, false, true)); } //快速写入操作 if (!readAndWriteData(out er)) { OnDataArgs.OnEvented(new CDataArgs(er, false, true)); } ////设置快充板信号 //if (!writeData(out er)) // OnDataArgs.OnEvented(new CDataArgs(er, false, true)); ////读取快充板信号及电压值 //if (!readData(out er)) // OnDataArgs.OnEvented(new CDataArgs(er, false, true)); _iniOK = true; wather.Stop(); if (!_autoMode) { _paused = true; _threadStatus = EThreadStatus.暂停; OnDataArgs.OnEvented(new CDataArgs(CLanguage.Lan("监控扫描时间") + ":" + wather.ElapsedMilliseconds.ToString() + "ms")); continue; } _threadStatus = EThreadStatus.运行; } } catch (Exception ex) { OnStatusArgs.OnEvented(new CConArgs(_threadFMB.Name + CLanguage.Lan("监控线程异常错误") + ":" + ex.ToString(), true)); } finally { _dispose = false; _threadStatus = EThreadStatus.退出; OnStatusArgs.OnEvented(new CConArgs(_threadFMB.Name + CLanguage.Lan("监控线程销毁退出"), true)); } }
/// <summary> /// 线程方法 /// </summary> private void OnStart() { try { while (true) { if (_dispose) { return; } Thread.Sleep(_delayMs); if (!_autoMode && _paused) { continue; } Stopwatch wather = new Stopwatch(); wather.Start(); string er = string.Empty; if (!writeIO(out er)) { OnDataArgs.OnEvented(new CDataArgs(er, false, true)); } if (!writeMutiIO(out er)) { OnDataArgs.OnEvented(new CDataArgs(er, false, true)); } if (!readIO(out er)) { OnDataArgs.OnEvented(new CDataArgs(er, false, true)); } wather.Stop(); if (!_autoMode) { _paused = true; _threadStatus = EThreadStatus.暂停; OnDataArgs.OnEvented(new CDataArgs(CLanguage.Lan("扫描时间") + ":" + wather.ElapsedMilliseconds.ToString() + "ms")); continue; } _threadStatus = EThreadStatus.运行; } } catch (Exception ex) { OnStatusArgs.OnEvented(new CConArgs(threadIO.Name + CLanguage.Lan("监控线程异常错误") + ":" + ex.ToString(), true)); } finally { _dispose = false; _threadStatus = EThreadStatus.退出; OnStatusArgs.OnEvented(new CConArgs(threadIO.Name + CLanguage.Lan("监控线程销毁退出"), true)); } }
/// <summary> /// PLC线程 /// </summary> private void OnRun() { try { OnConArgs.OnEvented(new CPLCConArgs(_idNo, _name, _name + CLanguage.Lan("监控线程启动"), EMessage.启动)); while (true) { Thread.Sleep(_delayMs); if (_dispose) { return; } if (!_devPLC.conStatus) { continue; } if (!_autoMode && _paused) { Thread.Sleep(_delayMs); continue; } string er = string.Empty; Stopwatch watcher = new Stopwatch(); watcher.Start(); if (!writeMutiREG(out er)) { setPLCDataAlarm(er); } if (!writeREG(out er)) { setPLCDataAlarm(er); } if (!readREG(out er)) { setPLCDataAlarm(er); } watcher.Stop(); _complete = true; if (!_autoMode) { _paused = true; _threadStatus = EThreadStatus.暂停; OnDataArgs.OnEvented(new CPLCDataArgs(_idNo, _name, watcher.ElapsedMilliseconds.ToString(), EMessage.暂停)); } else { OnDataArgs.OnEvented(new CPLCDataArgs(_idNo, _name, watcher.ElapsedMilliseconds.ToString(), EMessage.正常)); } } } catch (Exception ex) { OnConArgs.OnEvented(new CPLCConArgs(_idNo, _name, _name + CLanguage.Lan("监控线程错误") + ":" + ex.ToString(), EMessage.异常)); } finally { _dispose = false; OnConArgs.OnEvented(new CPLCConArgs(_idNo, _name, _name + CLanguage.Lan("监控线程退出"), EMessage.退出)); } }