1. 程式人生 > >LabVIEW上位機與串口通信

LabVIEW上位機與串口通信

學院 solid ans 串口通信 lob tps 使用 mas -s

淵源

大一的時候,學校開了門公共選修課,叫LabVIEW編程,當時的我當然還不知道LabVIEW是啥東東,但還是選了。上課的老師是機械學院的一個副教授。他給我們展示了好幾個用LabVIEW做的項目。譬如油箱監控上位機等,已經不太記得了。

後來隨著學習單片機、ARM等的串口操作。有時候一個美麗的上位機(尤其是能顯示波形的上位機)在項目中給用戶展示非常的實用。過了這麽多年,盡管以前也用LabVIEW寫過簡單的溫度監控上位機。但這次再拿起LabVIEW又好像從頭開始一樣,語法幾已忘記殆盡。

定義通信格式及功能

由於數據不算復雜,所以定義簡單下位機幀格式:

幀頭(0xAA) 類型字節 數據低8位 數據高8位 保留字節1 保留字節2 校驗字節

假設要傳送的數據比較多/復雜。則能夠參考ModuleBus協議!

主要功能包含:

  • 對幀中的類型字節進行解析,並多通道顯示在示波器上
  • 幀偏差校正(這個一般人可能都沒有做,造成數據丟失,而我這僅僅要串口傳輸的數據沒錯。就能無錯漏的解析每一幀)
  • 實時顯示讀取的每一個字節/雙字節/4字節
  • 信號保存,保存文件名稱自己主動按時間命名,適合查閱
  • 信號回放
  • 對信號進行解析。用指示燈顯示

界面展示

技術分享技術分享技術分享

程序關鍵點展示

技術分享

上面盡管簡單,但卻是功能的最主要部分。包含幀頭查找和錯幀處理的程序。錯幀發送的情況是:比方從串口中獨到的幀並非從幀頭開始而是幀中間開始。如

0x12(數據) 0x00 0x00 0x00 0xAA(幀頭) 0x00

其前面一幀可能是這樣:

... 0xAA(幀頭) 0x01(類型) 0x01(數據)

這樣。按查找幀頭的方法,數據0x12就會丟失,實際數據按理應該是0x02*256+0x01。錯幀處理就是將上一幀尾部不足一幀的部分加到下一幀中,這樣下一幀就變成了:

0xAA(幀頭) 0x01(類型) 0x01(數據) 0x12(數據) 0x00 0x00 0x00 0xAA(幀頭) 0x00

技術分享

推斷類型過程非常easy,使用switch結構即可了(LabVIEW中就是條件結構同一時候實現了if和switch),編程時就是註意必須設置默認分支即可!

技術分享

文件保存我使用了數據表,由於它確實簡單,這裏的亮點是添加了按時間保存的功能,相當於將時間字符串添加到文件名稱中。這樣便於後期對採集的數據進行查找,不至於混亂。

技術分享

波形回放就是將存儲在數據表中的程序又一次顯示一遍。比較簡單!

到如今為止,完整的程序請到https://github.com/xiahouzuoxin/zxSerial下載!

僅供研究使用,謝謝!

LabVIEW上位機與串口通信