在comPort发送事件中获取返回数据

本文详细阐述了协议类的设计,包括初始化串口、发送数据、接收数据处理及错误处理机制,实现高效可靠的数据传输。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       /// <summary>协议类</summary>
        public class Protocol
        {
            public Protocol()
            {
                m_Port = new System.IO.Ports.SerialPort();
                m_Port.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(m_Port_DataReceived);
                m_CommData = new CommData();
                m_Event = new System.Threading.ManualResetEvent(false);  //初始化为阻塞状态
            }

            private System.Threading.ManualResetEvent m_Event = null;        //定义

           public bool SendData(ProtocolDataFormat sendData, ref ProtocolDataFormat receivedData, int waitTimeout)
            {

                     //开始发送数据
                    m_Event.Reset();        //将信号设置为不发送状态
                    try
                    {
                        m_Port.Write(byteSendData, 0, byteSendData.Length);
                    }
                    catch(Exception e)
                    {
                       // throw e; // new Exception("发送数据错误!");
                        return false;
                    }

                   m_Event.WaitOne(waitTimeout);     //如果获得信号(既信号为发送状态),线程继续执行,如果没有获得信号,等待waitTimeout之后,线程继续执行

                   if (m_CommData.IsReceived && waitTimeout != 0) //接收到返回值
                    {
                        if (m_CommData.ErrorNum == 0 && m_CommData.IsTimeOut == false)   //接收到正确的数据
                        {
                            receivedData = m_CommData.ReceivedData.Clone();  //复制串口接收的数据
                            return sendData.Command == receivedData.Command;
                        }
                        else return false;
                    }

           }

            

             /// <summary>数据接收处理</summary>
            private void DataReceived()
            {

                       //接收代码

                        m_CommData.IsReceived = true;
                        m_Event.Set();   //接收完毕,将信号设置为有信号状态

             }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值