2009-08-21 124 views
3

我正在开发一些基于串行通信协议的监控工具。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

+0

没有某种代码和某种信息,很少有人能够帮助你。你如何从港口读书? – 2009-08-21 12:47:15

+0

一般的代码工作,是相当大的。它看起来代码的某些部分正在等待某件事。我不知道女巫。 – MrHIDEn 2009-08-21 12:57:00

+0

**我试图使用BaseStream这是SerialPort子类。 我得到了同样的结果。但是!!!!!! 我开始为我的笔记本电脑寻找PCIe卡,并且我发现即使在PCI Express卡中,基于USB的转换器也不能提供良好的通信级别,这是因为USB堆栈。据我所知,数据流正在等待USB程序。我可以想象这会造成最大的困难。我打算购买PCIe 232卡。** – MrHIDEn 2009-08-27 14:01:28

回答

1

也许你应该阅读这first,因为这个错误有DataReceived事件检索不有时火做的,现在还没有固定的框架3.0/3.5。另外,你应该阅读here关于这个海报谁向微软报告,当他有问题使用VS2008/NET 3.5下的问题......我不能说这是否是真的......但值得记住的东西关于......并且微软确实对.NET版本2中引入的.NET版本有一定的难度。

当时我使用的是.NET 1.1,我遇到过使用该版本的建议与VB6的ActiveX控件一起使用,根据互联网上的sources,它是最好的串行通信控件!

你可能会更好地调查使用第三方代码来处理串行通信,通常是在托管世界之外编写的,即使用大量p/invokes进行非托管的。

我已经使用了MSDN文章here,我确实发现在发现约翰·欣德版的尝试很倒胃口,因为没有办法做到这一点异步,再加上它是一个可怕的编码经验..

我最终使用了由Franson提供的产品,其结果比Hind的代码更好。

希望这会有所帮助, 最好的问候, 汤姆。