public PLCModBusRtuDriver(PLCDescriptor descriptor) { sendCommandDateTime = DateTime.Now; this.descriptor = descriptor; parseLock = new object(); sendLock = new object(); receBytesCache = new List <byte>(); fastQueue = new Queue <RtuRegistPackage>(); sendQueue = new Queue <RtuRegistPackage>(); parseTd = new Thread(new ThreadStart(ParseModBusPackage)); parseTd.IsBackground = true; parseTd.Start(); sendTd = new Thread(new ThreadStart(SendModBusPackage)); sendTd.IsBackground = true; sendTd.Start(); tcpPort = new TcpClientPort(descriptor.IpAddress, descriptor.Port, descriptor.AutoReConnInterval); tcpPort.OnConnNotify += TcpPort_OnConnNotify; tcpPort.OnExceptionHappened += TcpPort_OnExceptionHappened; tcpPort.OnPortDataReceived += TcpPort_OnPortDataReceived; heartTimer = new System.Timers.Timer(); heartTimer.Interval = descriptor.SendInterval * 1000; heartTimer.Elapsed += SendTimer_Elapsed; heartTimer.Enabled = true; }
public void Stop() { heartTimer.Enabled = false; isExit = true; if (sendTd.IsAlive) { sendTd.Abort(); } if (tcpPort != null) { tcpPort.Stop(); } tcpPort = null; }