一,功能概述:
python界面發(fā)送診斷請求報文后, 可以收到一幀診斷響應(yīng)報文。
TI bb black充當(dāng)usb轉(zhuǎn)CAN測試工具。
二,功能詳述
python端
- 三個線程:一個GUI交互及TCP client發(fā)送線程,一個TCP接收線程, 一個TCP心跳發(fā)送線程。send分布在2個線程中,所以加了一對互斥鎖。
- GUI界面點擊send可以發(fā)送請求報文,并且更新treeview窗口。
- GUI界面的cycle打鉤后,可以按設(shè)置的周期,自動發(fā)送報文,更新窗口。
- python為TCP client,每隔3s在后臺發(fā)送一幀心跳數(shù)據(jù)。
- python后臺接收TCP響應(yīng)數(shù)據(jù),會更新時間,若15s內(nèi)沒有收到服務(wù)器發(fā)來的響應(yīng)報文,則斷開連接,重新連接。
arm端
- arm端3個線程,一個TCP發(fā),一個TCP收(select方式20s接收超時)。一個socketCAN。socketCAN和TCP的收發(fā)數(shù)據(jù)buf和通知flag加了互斥鎖。tcp的收和發(fā)flag加了一對互斥鎖。
- arm端為TCP server,開啟后不退出,20s內(nèi)沒有收到客戶端發(fā)的消息則斷開重新等待新的客戶端連接。
- arm端收可以接收心跳報文,然后恢復(fù)一幀4個byte的心跳報文。
- arm端收到TCP的client診斷報文,則設(shè)置flag通知socketCAN轉(zhuǎn)發(fā)給TC275。等socketCAN接收TC275的報文后,會通過flag通知TCP發(fā)送給client。
- socketCAN用阻塞write和read方式。
TC275
- 單片機(jī)程序,收到一幀721后才能發(fā)送一幀729。UDS協(xié)議還沒添加,僅完成底層通信。
驗證成功
ip link set can0 type can bitrate 500000
ip link set can0 up
candump can0 &
./DiagCAN
python放在ubuntu上運行的

image.png
源碼上傳gitee路徑
https://gitee.com/applecai/DiagTool