Esempio n. 1
0
        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)
        }
Esempio n. 2
0
        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);
            }
        }