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