我已經在VS2008 Express中設置了一個SerialDataReceivedEventHandler,它帶有一個基於表單的程序。我的串行端口設置如下:C#.Net Serial DataReceived對於高速率數據,事件響應速度太慢
115200,8N1
DTR和RTS啓用
ReceivedBytesThreshold = 1
我有我與通過藍牙,USB轉串口接口的設備。超級終端在任何數據速率下都可以很好地接收數據。數據以22字節長的數據包定期發送。該設備具有可調整的數據發送速率。在低數據速率,10-20Hz時,下面的代碼工作良好,沒有問題。但是,當我將數據速率提高到25Hz時,就開始在一次呼叫中接收多個數據包。我的意思是,每個傳入數據包都應該有一個事件觸發器。在更高的輸出速率下,當事件被調用時,我立即測試了緩衝區大小(BytesToRead命令),然後緩衝區中有多個數據包。我認爲這個事件緩慢發作,並且在達到代碼時,更多的包裝已經衝擊緩衝區。我做的一個測試是查看事件每秒觸發多少次。在10Hz時,我得到10個事件觸發器,真棒。在100Hz時,我得到了40個事件觸發器,不太好。我的目標數據速率是100HZ是可以接受的,200Hz的首選,和300Hz的最佳。這應該可以工作,因爲即使在300Hz時,也就是52800bps,不到波特率115200的一半。我在看什麼?
public Form1()
{
InitializeComponent();
serialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived);
}
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
this.Invoke(new EventHandler(Display_Results));
}
private void Display_Results(object s, EventArgs e)
{
serialPort1.Read(IMU, 0, serial_Port1.BytesToRead);
}
我試着刪除Invoke()調用,並直接在DataReceived()事件中讀取數據,結果相同。對不起,有點天真,但你能告訴我更多關於你如何排隊的原因,以及爲什麼這樣工作更快。謝謝您的幫助。 – Matthew 2010-06-02 05:52:15