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
{
//多串口,要注意细节。延时啊什么的要调节好。
}
}