public ModbusConnector(ModbusCfg mb) { Port = mb.Port; IPAddress = mb.Address; FreqReadSec = mb.Freq; _myMbState = MbState.CREATING_MB_SOCKET; _alarmList = new List <MeasurePoint>(); _alarmOldList = new List <MeasurePoint>(); InitializeAlarmOldList(); // Populate buffer list with alarms 0 (not active) }
public void ModbusConnectorThread() { while (true) { switch (_myMbState) { case MbState.CREATING_MB_SOCKET: if (Connect()) { #if !DEMO IsConnected = true; _myMbState = MbState.CONNECTION_MB_ESTABLISHED; // Start threads _dataRetrievingThread = new Thread(DataRetrievingThread); _dataRetrievingThread.IsBackground = true; _alarmRetrievingThread = new Thread(AlarmRetrievingThread); _alarmRetrievingThread.IsBackground = true; _dataRetrievingThread.Start(); _alarmRetrievingThread.Start(); #else IsConnected = true; _myMbState = MbState.CONNECTION_MB_ESTABLISHED; _dataRetrievingThread = new Thread(DataRetrievingThread); _dataRetrievingThread.IsBackground = true; _dataRetrievingThread.Start(); #endif } else { IsConnected = false; if (_master != null) { _master.Dispose(); } if (_client != null) { _client.Close(); } System.Threading.Thread.Sleep(5000); // Re-try to connect after 5 seconds } break; case MbState.CONNECTION_MB_ESTABLISHED: #if !DEMO if (_dataRetrievingThread.ThreadState == ThreadState.Stopped || _alarmRetrievingThread.ThreadState == ThreadState.Stopped) { _dataRetrievingThread.Abort(); _dataRetrievingThread = null; _alarmRetrievingThread.Abort(); _alarmRetrievingThread = null; IsConnected = false; ErrorEvent?.Invoke(this, null); if (_master != null) { _master.Dispose(); } if (_client != null) { _client.Close(); } _myMbState = MbState.CREATING_MB_SOCKET; } #else if (_dataRetrievingThread.ThreadState == ThreadState.Stopped) { _dataRetrievingThread.Abort(); _dataRetrievingThread = null; IsConnected = false; ErrorEvent?.Invoke(this, null); if (_master != null) { _master.Dispose(); } if (_client != null) { _client.Close(); } _myMbState = MbState.CREATING_MB_SOCKET; } #endif break; } System.Threading.Thread.Sleep(100); } }