用Labview寫一個電子稱的485串口程序
關鍵詞:Labview +串口程序
232、485串口通訊是最常見的儀器儀表通訊方式之一,本文詳細介紹,用Labview編寫一個電子秤的485串口程序.
一.前面板的編寫
串口指示燈:如圖,當串口通訊正常時,通訊等亮(綠色),BOOL控件。
串口指示窗口:當串口通訊正常時,顯示:串口on,字符串控件。
數字顯示窗口:顯示電子秤的讀數,112.345,字符串控件。
時間顯示窗口:顯示當前時間,16:56:25,字符串控件。
單位顯示窗口:單位:g,字符串控件。
圖1:電子秤的前面板
報文顯示窗口:顯示時間和報文,用于實時看到電子秤的報文顯示,用表格控件顯示。
圖2:電子秤的前面板
二.各個功能的實現
系統時間的顯示
系統時間的顯示
按鈕的禁用和變灰操作
當串口打開時:串口打開按鈕需要變灰和禁用,當串口關閉時:串口關閉和零點標定等按鈕需要禁用變灰。
如圖所示,通過對對應按鈕的屬性節點的操作,完成相對應的功能,需要其變灰和隱藏時,寫入禁用變灰,需要其有效時,寫入Enabled值即可。
按鈕禁用變灰處理
按鈕禁用變灰處理
打開串口和關閉串口的操作
打開串口和關閉串口可以通過狀態機+消息隊列+串口的對象化編程來實現,本文要實現的功能比較簡單,介紹一種簡單的方式。通過條件結構和循環來實現。
通過循環和條件結構的嵌套,即可完成打開串口和關閉串口的功能實現。這種框架的弊端在于,處理錯誤時比較費事。用消息隊列狀態機來實現,就會很好的處理一些串口錯誤的發生,后期會講到。
串口讀寫及配置
如圖所示,串口的配置比較簡單,本電子秤的配置為:9600 N 8 1。如圖配置皆可。沒什么可講的。
如圖所示,報文的讀取是通過VISA讀取VI來實現的,指定需要讀取的字節數即可,沒什么好講的,需要說的是,需要把讀取放入條件結構中,然后放一個讀取字節數的屬性節點來檢測讀取到的報文,當緩沖區有報文時再觸發讀取VISA來讀取。如果沒有這個結構,讀取VISA VI將一直等待,直到指定的字節數再讀取出來。
如圖所示,報文的吸入是通過VISA寫入 VI來實現的,需要寫入時觸發條件結構把報文發出即可。
著重需要說明的是報文的處理。
寫入報文的處理
如圖所示,讀取重量的報文為 01 03 00 00 00 02 XX,剛入門時,不需要去理解特定的報文結構,有些報文時是標準格式,有些報文是自定義的,只需要直到這么發出去,電子秤就會返回重量報文。本條報文01是地址,03是功能碼,00 00寄存器地址,后面的XX表示CRC檢驗碼。需要注意的是,都是16進制。把幾個16進制字節用字符串連接VI連接起來發出去即可。
如果報文時固定的,直接用一個字符串產量發出去即可。
如圖所示的CRC檢驗子VI是本作者(Labview十年工控702)自己用公式節點寫的,需要的可以留言。
16進制報文的正常顯示
如圖所示,因為寫入報文為16進制,要在表格控件中正常顯示,需要轉換一下。
讀取報文的處理
讀取報文的處理,主要就是把需要的數據解析出來, Labview讀取出來的報文是十六進制的字符串格式。
如本文介紹的這種,一條報文只有一個數據的,可以把需要的字符串截取出來,用強制轉換VI轉換成16位的U16數據,然后轉換成需要的帶小數點的實數數據即可。
如果是一條報文里面有好幾個數據,比如XX XX 01 02 03 04 05 06 XX XX這條報文里面01 02表示溫度,03 04表示壓力,05 06表示二氧化碳濃度。可以用上的方法,先截取在轉換。也可以批量處理更簡單便利一些,先截取6個字節,然后轉成U16數組,然后通過索引的方式處理數據。
報文的校驗和亂碼的處理
在實際項目中,經常會遇到報文錯位和亂碼的情況。尤其是一些儀器儀表抗干擾能力比較弱的時候。此時所有解析出來的數據都是錯位的,都是錯的。這時候就需要來校驗和亂碼處理了。
在解析報文時,加一個判斷即可,可以用地址+功能碼判斷,也可以用CRC判斷。作者(Labview十年工控702)喜歡簡單一點,直接用前兩個字節來判斷即可。只有判斷報文沒亂時再解析,如果判斷出來報文有誤,清空緩沖區即可。
有其余問題,請加群交流。需要CRC校驗源碼和16進制轉字符串顯示源碼的,請留言或加群交流。Labview項目分享Q群:241388930
審核編輯 黃宇
-
LabVIEW
+關注
關注
1995文章
3670瀏覽量
333016 -
串口通訊
+關注
關注
1文章
264瀏覽量
25380
發布評論請先 登錄
評論