回覆列表
-
1 # 契機來來來
-
2 # 使用者8461021162376
如果你每次收到的位元組數能確定(比如每條發過來的命令位元組數固定,或者最前一兩個位元組表示後面的位元組數),就按照位元組數接收。然後直接把收到的字串給顯示控制元件,不使用移位暫存器或反饋節點當然就不顯示之前的字元了。
別加“等待”之類的函式(手錶圖示哪個),串列埠讀取函式會在讀到指定數量的字元或到達超時之後返回讀到的字串。用它就能控制迴圈。也就是說來一條命令或者到達一次超時之後,自動迴圈一次,字串顯示控制元件裡面的值就是剛收到的字串了。
如下圖:
可以把圖片下載後直接拖入2012或2013的程式框圖中。外層的錯誤分支中有個串列埠配置失敗的彈窗提示。
串列埠的引數我就使用預設的“9600,8,n,1”了,超時值我設定的是100ms,為了讓程式執行時不會因為預設的10000ms超時顯得程式卡死。但是幾乎每100毫秒就會有一個超時錯誤並返回空字串,所以內層的錯誤分支什麼也沒做,在超時的時候不用空字串替換原有的顯示值。
如果字元數不確定,你還不想保留之前的值,那就不好辦了。很有可能會造成一句話分兩次顯示的情況,某次顯示前面一部分,後面一次顯示後一部分。
看下圖吧:
為減少上述情況的出現,我把超時值改為了1000ms,後面的條件分支根據讀到的位元組數區分。0的時候不更新顯示控制元件,其它值的時候顯示剛剛收到的字串。因為你不要和前面的拼湊,所以有可能是不完整的。
你選擇的採集方式為多通道多采樣,也就是說,你要採集2個以上通道的資料,每個通道的資料個數是前面乘法出來的數。這樣的話,你要是想單點顯示,需要加一個for迴圈,並且要設定每次迴圈的延遲時間,使得for迴圈總共的延遲時間與所採集的資料個數消耗的時間相同。如,你每通道採集256個點,那你可以放置一個for迴圈,迴圈的延遲為1ms,這樣的話,進行256次迴圈,消耗的時間是256ms,並且顯示方式是逐點顯示。