close
最近在寫C# Serial Port程式時,遇到了奇怪的問題,事情是這樣的,我的資料一開始都是對的,例如像下面這樣:
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
以Baudrate 230400 bps 收資料時,會發現一開始前十筆資料都是正確的,但是第11筆突然開始有奇怪的情況發生了,像這樣:
1 | 2 | 3 | 4 | 5 | 6 | 8 | 9 | 8 |
可以發現後面開始冒出了一些應該出現在開頭的數列,但是不對啊,我的這段資料還沒收完全啊
想破了頭還是想不出來到底發生什麼事
後來跟有經驗的學長討論之後
才了解到原來是發生了下面的事情:
掉資料的過程
一開始是這樣......
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
但是不幸的,資料處理的速度遠不及資料灌進來的速度,於是就出現了這種情況...... (紅色部分是來不及進buffer的資料)
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
因為有一部分lost掉了,最後就會有奇怪的資料開始插進來了......
1 | 2 | 3 | 4 | 5 | 6 | 8 | 9 | 8 |
所以就造成了上述資料不連續的現象
如何解決呢?目前使用的方法是在開始收取下一筆資料前先做這件事
port.DiscardInBuffer();
來清除不連續資料的可能性
雖然這個Method可以暫時解決資料不連續的問題
但是長遠來看,總是會有些資料lost掉的
所以目前還是得測試看看資料lost掉多少
全站熱搜