我正在開發一些基於串行通信協議的監控工具。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