應用背景:
隨著生活水平提升,越來越多的車進去用戶家庭,車輛在保養健康維護過程中好多隱藏的問題不便于拆卸和查看,比如hud模塊,是否有遇到過高壓沖擊,是否有點擊、led、屏、間斷性失去通訊等一些列隱藏故障以及版本是否較老,有新版本軟件更新迭代是否可以升級等等。針對這一類問題,車身模塊本身有版本定義、故障碼診斷反饋以及uds測試模式調圖等功能,這時候需要有一定的診斷設備發特定報文與模塊通訊才能請求到uds診斷信息。
于是就有了這個便攜診斷工具設計。為了方便4S店以及維修人員對車輛的健康狀態的維護和保養,快捷的獲取車輛狀態等信息,該診斷儀當前可用于對汽車的診斷模塊版本信息,uds診斷調節基本功能檢查是否有故障,部分模塊切換測試圖查看顯示效果是否異常,讀取故障狀態等,最終聯網數據儲存服務器,便于后續統計車輛維護狀態,歷史故障情況
另外該診斷工具小巧,便于攜帶,一些不便于攜帶大件行李情況下可以方便攜帶,裝口袋即可;未來對于一些有一定專業技能的人士可以添加診斷報文用戶定義編譯,可以指定報文發送請求,這樣對于使用的廣泛性得以擴大。
實現功能:
通過按鍵以及調節滑塊等操作發出指定uds診斷報文,請求對應診斷模塊的故障狀態顯示出來。另外可以連接網絡上報服務器此次診斷具體信息,用于服務器統計記錄該車歷史排查維修記錄,方便排查歷史記錄
正文:
1.效果展示
設計操作頁面如下,通過點擊按鈕可發出can診斷報文,等待回應狀態顯示到診斷儀上。最終連接網絡,上傳診斷數據信息。整體ui效果頁面如下:
2.硬件框架
硬件結構上比較簡單,框架設計如下,芯片的can 口通過OBD連接車身can網,wifi模塊連接在服務器局域網內(當然在不方便聯網情況下可以先進行診斷,后面將數據存儲診斷儀flash中,待有網絡下聯網上報診斷數據)
3.軟件框架
軟件結構上主要是上電啟動后注冊驅動,初始化完can wifi等外設后加載ui,隨后子線程中信號阻塞監聽can報文,直到接收到了can報文,單片機中斷,發出信號量,子線程讀取can報文內容。
Ui任務中按鈕以及滑塊等用戶交互接口會觸發對應點擊事件,收到按鈕點擊后組包發出一條can診斷報文,等待can回應信息后,解析回應內容存儲對應buffer中,并更新ui顯示內容。
Tcp連接按鈕按下會在子線程創建socket任務,等待上傳任務或者再次點下按鈕終止任務。上傳按鈕按下會將診斷信息從buffer中取出,重新組包,按字符串形式存儲,之后調用先前創建的socket中send指令發出
4.軟件邏輯
a) Ui使用SquareLine工具設計,開機后加載ui,如下是繪制的ui效果
b) 配置can數據波特率500kbit/s,初始化設備驅動后打開設備,創建線程不斷監聽can信息
子線程中通過阻塞監聽信號量,而信號量是由can收到數據中斷發出信號量,配置驅動中Every Message觸發can中斷,再讀取can數據解析打印出來。
開機后點擊按鈕,可以看到can接受線程打印的log,can發送接受數據正常
c) Wifi使用板子上rw007模塊,使能ifconfig等工具方便調試,在加載ui后配置了wifi名字和密碼3次請求連接
復位開機后串口中也可以看到wifi連接是成功的
d) Can診斷統一封裝到can_port_req_uds_cmd接口請求和第四個參數為返回結構體指針,void*類型可按個人需求封裝數據結構,最終返回了id,len長度以及data指針,最終數據按對應格式調整顯示
e) Tcp客戶端在按鈕connect點擊后創建新線程連接,連接后保持等待,直到提交數據按鈕按下時
診斷到的信息打包成對應格式按字符串方式傳遞,通過socket實例發送出去給服務器端
通過tcp上位機監聽和串口打印信息,可以看到診斷信息上傳ok
-
上位機
+關注
關注
27文章
927瀏覽量
54560 -
診斷儀
+關注
關注
1文章
77瀏覽量
8800 -
TCP通信
+關注
關注
0文章
146瀏覽量
4184 -
RTThread
+關注
關注
7文章
132瀏覽量
40684 -
LVGL
+關注
關注
0文章
79瀏覽量
2737
發布評論請先 登錄
相關推薦
評論