日期:2014-05-17  浏览次数:21189 次

C# dataReceived事件多个串口接受数据问题
串口的定义是根据外界设备数量来定义的...因此是动态的...我将每个串口的发送命令分别放在不同的线程了,接收就用一个事件,怎么处理数据才不会乱

------解决方案--------------------
comm1.DataReceived += comm1_DataReceived;
处理每条数据,比如我接受的都是9个字节的。
然后校验,如果数据正确,则取出 数据位,转换为十进制显示。
mb.CRC16(binary_crc)是crc校验后的两个字节的校验码

        void comm1_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            try
            {
                int n = comm.BytesToRead;
                byte[] buf = new byte[n];              
                comm.Read(buf, 0, n);
                buffer.AddRange(buf);
                if (buffer.Count==9)
                {
                    byte[] binary_data_1 = new byte[9];
                    byte[] binary_crc=new byte [7];
                    buffer.CopyTo(0, binary_data_1, 0, 9);
                    buffer.CopyTo(0, binary_crc, 0, 7);
                    buffer.Clear();
                    modbus mb = new modbus();
                    if (mb.CRC16(binary_crc)[0] == binary_data_1[8] && mb.CRC16(binary_crc)[1] == binary_data_1[7])
                    {