Пример #1
0
        public bool ReconnectPlc()
        {
            Stopwatch sw = new Stopwatch();

            sw.Start();
            while (true)
            {
                // 等待5s的重连
                if (sw.Elapsed > TimeSpan.FromSeconds(5))
                {
                    break;
                }
                int result = _s7Client.ConnectTo(PlcIPAddress, Rack, Slot);
                Thread.Sleep(50);
                if (result == 0)
                {
                    ReconnectEvent?.Invoke(this, null);
                    _isConnected = true;
                    break;
                }
                Thread.Sleep(800);
            }
            sw.Stop();
            if (_isConnected)
            {
                _hbTimer.Start();
            }
            return(_isConnected);
        }
Пример #2
0
        private void InitPlcConnect(object state)
        {
            CancellationToken token = (CancellationToken)state;
            int result = _s7Client.ConnectTo(PlcIPAddress, Rack, Slot);

            Thread.Sleep(10); // 很小的复位时间
            while (true)
            {
                if (token.IsCancellationRequested)
                {
                    break;
                }
                if (result == 0 /* && _s7Client.Connected()*/)
                {
                    _initEvent.Set();
                    ReconnectEvent?.Invoke(this, null);
                    _isConnected    = true;
                    _initPlcConnect = true;
                    break;
                }
                Thread.Sleep(2000); // 等待2s延时连接
                result = _s7Client.Connect();
                Thread.Sleep(10);
            }
        }