首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C# dataReceived事件多个串口接受数据有关问题

2014-01-19 
C# dataReceived事件多个串口接受数据问题串口的定义是根据外界设备数量来定义的...因此是动态的...我将每

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])
                    {
                        string data = binary_data_1[3].ToString("X2") + binary_data_1[4].ToString("X2") + binary_data_1[5].ToString("X2") + binary_data_1[6].ToString("X2");
                        int hex = Convert.ToInt32(data, 16);
                        this.Invoke((EventHandler)(delegate { this.textBox2.Text = hex.ToString(); }));
                    }
                }
            }
            finally
            {
                //多串口,要注意细节。延时啊什么的要调节好。
            }
        }

[解决办法]
引用:
串口是动态的,是我从数据库中搜出来,有多少个外接设备,再定义多少个SerialPort的...


有多少个外设,可以从注册表里读到。
干嘛要读数据库呢?

[解决办法]
怎么能处理多个串口同这个一个事件的:
有多少个串口就开多少个线程读,收到数据后用委托到同一个事件处理过程,收到哪个串口的数据就回写给哪个.
[解决办法]
写一个类,用了多少个穿个就实例化多少个,然后在解析每个接收事件的值

热点排行