附件內(nèi)容分享的是基于LabVIEW上位機與串口通信,通過LabVIEW上位機顯示波形,在分享其實現(xiàn)的源碼同時,分享一段LabVIEW上位機與串口通信工作原理。
基于LabVIEW的串口波形上位機界面展示:
定義通信格式及功能
因為數(shù)據(jù)不算復(fù)雜,所以定義簡單下位機幀格式:幀頭(0xAA) 類型字節(jié) 數(shù)據(jù)低8位 數(shù)據(jù)高8位 保留字節(jié)1 保留字節(jié)2 校驗字節(jié)
如果要傳送的數(shù)據(jù)比較多/復(fù)雜,則可以參考ModuleBus協(xié)議!
主要功能包括:
- 對幀中的類型字節(jié)進行解析,并多通道顯示在示波器上
- 幀偏差校正(這個一般人可能都沒有做,造成數(shù)據(jù)丟失,而我這只要串口傳輸?shù)臄?shù)據(jù)沒錯,就能無錯漏的解析每一幀)
- 實時顯示讀取的每個字節(jié)/雙字節(jié)/4字節(jié)
- 信號保存,保存文件名自動按時間命名,適合查閱
- 信號回放
- 對信號進行解析,用指示燈顯示
程序關(guān)鍵點展示:
上面雖然簡單,但卻是功能的最主要部分,包括幀頭查找和錯幀處理的程序。錯幀發(fā)送的情況是:比如從串口中獨到的幀并不是從幀頭開始而是幀中間開始,如 0x12(數(shù)據(jù)) 0x00 0x00 0x00 0xAA(幀頭) 0x00
其前面一幀可能是這樣:... 0xAA(幀頭) 0x01(類型) 0x01(數(shù)據(jù))
這樣,按查找?guī)^的方法,數(shù)據(jù)0x12就會丟失,實際數(shù)據(jù)按理應(yīng)該是0x02*256+0x01,錯幀處理就是將上一幀尾部不足一幀的部分加到下一幀中,這樣下一幀就變成了:0xAA(幀頭) 0x01(類型) 0x01(數(shù)據(jù)) 0x12(數(shù)據(jù)) 0x00 0x00 0x00 0xAA(幀頭) 0x00
判斷類型過程很簡單,使用switch結(jié)構(gòu)就行了(LabVIEW中就是條件結(jié)構(gòu)同時實現(xiàn)了if和switch),編程時就是注意必須設(shè)置默認(rèn)分支就行!
文件保存我使用了數(shù)據(jù)表,因為它確實簡單,這里的亮點是增加了按時間保存的功能,相當(dāng)于將時間字符串加入到文件名中,這樣便于后期對采集的數(shù)據(jù)進行查找,不至于混亂。
波形回放就是將存儲在數(shù)據(jù)表中的程序重新顯示一遍,比較簡單!