void SerialPortObject_DataReceived(object sender, SerialDataReceivedEventArgs e) { try { if (IsConnected) { //可以接收 QueueObject qo = new QueueObject(); qo.Buffer = new byte[SerialPortObject.BytesToRead]; qo.DataLength = SerialPortObject.Read(qo.Buffer, 0, qo.Buffer.Length); if (qo.DataLength > 0 && qo.Buffer.Length >= 1) { BufferStream.AddRangeWithLock(qo.Buffer); IMessageEntity msg = MessageDataAdapterObject.Resolve(); if (msg != null) { OnMessageReceived(new MessageReceivedEventArgs(msg)); } } } } catch (Exception ex) { logger.Error(ex.ToString(), ex); } }
/// <summary> /// 连接 /// </summary> public void Connect() { if (MessageDataAdapterObject == null) { return; } if (SerialPortObject == null) { return; } //设置串口数据适配器 MessageDataAdapterObject.SerialPortObject = this; MessageDataAdapterObject.BufferStream = BufferStream; //打开串口 SerialPortObject.Open(); //创建解析线程 _resolveWorker = new BackgroundWorker(); _resolveWorker.WorkerSupportsCancellation = true; _resolveWorker.DoWork += _resolveWorker_DoWork; _resolveWorker.RunWorkerAsync(); //断开重连线程 _connectionWorker = new BackgroundWorker(); _connectionWorker.WorkerSupportsCancellation = true; _connectionWorker.DoWork += _connectionWorker_DoWork; _connectionWorker.RunWorkerAsync(); }
/// <summary> /// 断开 /// </summary> public void Disconnect() { if (_connectionWorker != null) { _connectionWorker.CancelAsync(); _connectionWorker = null; } try { SerialPortObject.Close(); } catch (Exception ex) { } SerialPortObject = null; _bufferStream = new DataBufferObject(); }
/// <summary> /// 发送消息 /// </summary> /// <returns>True=成功,False=失败</returns> /// <param name="message">数据</param> public bool SendMessage(byte[] message) { bool success = false; if (IsConnected) { try { SerialPortObject.Write(message, 0, message.Length); success = true; logger.Debug(BitConverter.ToString(message)); } catch (Exception e) { logger.Error(e); } } return(success); }
void SerialPortObject_DataReceived(object sender, SerialDataReceivedEventArgs e) { try { if (IsConnected) { //可以接收 QueueObject qo = new QueueObject(); qo.Buffer = new byte[SerialPortObject.BytesToRead]; qo.DataLength = SerialPortObject.Read(qo.Buffer, 0, qo.Buffer.Length); if (qo.DataLength > 0 && qo.Buffer.Length >= 1) { BufferStream.AddRangeWithLock(qo.Buffer); } } } catch (Exception ex) { logger.Error(ex.ToString(), ex); } }
void _connectionWorker_DoWork(object sender, DoWorkEventArgs e) { while (!((BackgroundWorker)sender).CancellationPending) { if (SerialPortObject != null) { if (!SerialPortObject.IsOpen) { //重新连接 try { SerialPortObject.Open(); } catch (Exception ex) { } } } try { Thread.Sleep(3000); } catch (Exception ex) { } } }
public MessageSenderService(SerialPortObject serialPort) { SerialPortObject = serialPort; }
public MessageReaderService(SerialPortObject serialPort) { _serialPortObject = serialPort; _messageBuilder = new MessageBuilder("%", "#"); }