我正在开发一些基于串行通信协议的监控工具。C#serialPort速度
Serial BaudRate = 187,5kb 我使用System.IO.Ports.SerialPort类。
该协议有4种帧。他们有1Byte,3Bytes,6Bytes,10-255Bytes。 我可以和他们一起工作,但我收到他们来不及回复。
一开始我收到第一个包装后,前。 96ms(太晚),它包含大约1000B。这意味着20-50帧(太多,太晚)。 后来它的工作比较稳定,3-10Bytes但由于它包含了1-2帧,所以还为时过晚。当然第1帧是可以的,但是2太迟了。
您能指出我该如何处理它更可靠吗?我知道这是可能的。
Revision1:
我试着笔直的路:
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
if (!serialPort1.IsOpen) return;
this.BeginInvoke(new EventHandler(this.DataReceived));
}
和研究背景工人: 而且......新胎面(读) 和...总是一样的。太迟了,太慢了。 我是否必须回到WinApi并导入一些kernel32.dll函数?
修订2: 这是踏入方式代码中使用的部分:
int c = serialPort1.BytesToRead;
byte[] b = new byte[c];
serialPort1.Read(b, 0, c);
我想这是有些问题SerialPort类里面流使用。或者有一些同步问题。
修订3: 我一次不使用两个!我只是尝试了不同的方式。
问候 MarekK
没有某种代码和某种信息,很少有人能够帮助你。你如何从港口读书? – 2009-08-21 12:47:15
一般的代码工作,是相当大的。它看起来代码的某些部分正在等待某件事。我不知道女巫。 – MrHIDEn 2009-08-21 12:57:00
**我试图使用BaseStream这是SerialPort子类。 我得到了同样的结果。但是!!!!!! 我开始为我的笔记本电脑寻找PCIe卡,并且我发现即使在PCI Express卡中,基于USB的转换器也不能提供良好的通信级别,这是因为USB堆栈。据我所知,数据流正在等待USB程序。我可以想象这会造成最大的困难。我打算购买PCIe 232卡。** – MrHIDEn 2009-08-27 14:01:28