?
講完串口,這邊再講一個labveiw工控程式中比較常用的CAN通訊吧,很久沒有寫過CAN通訊的程式了,網上一搜就是什么現場總線,控制器局域網總線,然后一堆復雜的協議,在這里還是一樣的,具體的底層協議不多說,大家自行百度哦(別問,問就是忘記了),主要還是跟大家講一下在labview應用端如何用代碼實作通訊,一般是針對汽車產品,才會用到(做汽車儀表,音響導航類的公司就會經常用到),大廠用的CAN盒,CAN卡大多是NI的,小小的一塊東西就要幾千上萬,小公司一般是買國內的,比如周立功這些相對便宜的CAN工具,甚至有自己拿單片機開發CAN通訊工具的,這種穩定性可能不太好,會有丟包的現象,汽車產品如果用這些CAN工具做的測驗,是很難讓客戶認可的,希望國產的CAN工具越做越好吧,下面搬一個高速CAN 500K的一個寫入和讀取的例程,然后再給個讀寫一體的范例吧,
1、寫入例程

?編輯
這里不具體描述上面的函式是怎么點開的,一般裝了NI的CAN驅動包后,在函式 測量I/O那里會有CAN的Frame API函式介面,在上面看一下就可以了,先配置500K的波特率,選擇CAN0打開,打開一般加個延時會穩定一些,寫入的資料格式如圖所示,Timestamp這個時間戳這里用不上,一般用的時候是讀取資料,或者在編輯DBC檔案(可以理解為一個包含了產品所有通訊指令的CAN資料庫)的時候可能會用到,ArbitrationId是發送指令的地址,這個一般產品端會告訴你,往哪個地址發CAN資料,IsRemote沒用過,有知道的可以跟我說一下,哈哈,DataLength資料長度,一般高速500K和低速125K的大多用8位長度資料,當然也有其他更多位的,看產品端的需求吧,最后那個Data就是資料了,
2、讀取例程

?編輯
大致跟寫入相同,就是讀取函式前面要加一個讀取的設定,從之前使用的經驗來看,加了read entries pending 的讀取配置后,能有效避免因大量資料快速匯入而引起的輸出例外,資料慢或少的話看不出效果,
3,讀寫一體

?編輯
從應用上來說,labview的操作還是特別簡單的,至少比C#上寫winform簡單多了,不過從編程的角度上來看,labview會榷訓撰寫文本代碼的能力,所以適用物件我認為還是偏硬體的技識訓測驗人員,當然也包括單片機開發(帶作業系統的同仁就不大需要labview了,可以往QT這些方向),這里可以嘗試使用之前講的狀態機來寫,我直接用了多執行緒的方式了,在labview里面,拉幾個while回圈,就是多執行緒了,這個從寫法上來說,跟其他語言的不太一樣,labview很粗暴地直接拉while回圈就可以實作多執行緒了(labview通過跑副本的方式,也可以實作多執行緒,這里不擴展),傳統的CAN最高是1M波特率,后面出了超過1M的FDCAN,還有單線通訊的LIN,可以說都是CAN的升級版了,最終的方向還是更快更簡單(使用上的簡單),對某個部分有興趣或有疑問的小伙伴,留言探討哦!
原創不易,一鍵三連啦!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/498598.html
標籤:其他
