最近在寫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掉多少

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 wrijLove 的頭像
    wrijLove

    宅宅情侶的成長日記

    wrijLove 發表在 痞客邦 留言(0) 人氣()