读书人

C# dataReceived事件多个串口接受数据

发布时间: 2014-01-19 01:28:51 作者: rapoo

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的...


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

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

读书人网 >C#

热点推荐