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);
     }
 }
예제 #2
0
        /// <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);
        }
예제 #5
0
 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) { }
            }
        }
예제 #7
0
 public MessageSenderService(SerialPortObject serialPort)
 {
     SerialPortObject = serialPort;
 }
 public MessageReaderService(SerialPortObject serialPort)
 {
     _serialPortObject = serialPort;
     _messageBuilder   = new MessageBuilder("%", "#");
 }