基於C 的整車CAN通訊DBC檔案程式設計

2021-10-12 17:25:13 字數 2310 閱讀 1606

最近需要實現基於excel的發動機台架自動化測量系統,需要用到dbc通訊檔案,特著此文,給需要的人

首先要定義存放dbc資料的結構體:首先是 訊號類和報文類 定義。

此定義需遵循變數從屬關係(乙個dbc檔案內有多個bo_,乙個bo_下有多個sg_)

可以參考此文章,作者提供的思路比較清晰,本文所述**基於此思路進行詳細開發

//訊號類

public

class

typedef_sg

//報文類

public

class

typedef_bo

全域性變數宣告與定義

private

bool isedited =

false

;public

static dictionary<

string

,string

> dictdbc =

newdictionary

<

string

,string

>()

;//根據訊號名稱反查,方便後續使用

list bo_list =

newlist

<

typedef_bo

>()

;//將報文類構建成乙個報文列表

typedef_bo bo;

接下來定義了開啟dbc檔案的函式,

private

void

loaddbcfile()

);//startbit,length,codetype,datatype

sg.startbit = convert.

toint16

(sg4[0]

);sg.length = convert.

toint16

(sg4[1]

);sg.codetype = convert.

toint16

(sg4[2]

.substring(0

,1))

; sg.datatype = sg4[2]

.substring(1

,1);

string

sg5 = sg_line[5]

.split

(new

char[3

]);//factor,offset

sg.factor = convert.

todouble

(sg5[1]

);sg.offset = convert.

todouble

(sg5[2]

);string

sg6 = sg_line[6]

.split

(new

char[3

]);//minvalue,maxvalue,unit

sg.minvalue = convert.

todouble

(sg6[1]

);sg.maxvalue = convert.

todouble

(sg6[2]

);sg.unit = sg_line[7]

;//unit

bo.sg.

add(sg)

;//sg to list bo.sg

dictdbc.

add(sg.name, bo.id+

","+

(bo_index -1)

+","

+ sg_index)

;//新增元素key,value同步加入字典,實現根據sg.name反查出(bo.id, bo[bo_index], sg[sg_index])

sg_index++;}

if(regexbo.

ismatch

(str_line)

)//bo length=5

}catch

(exception ex)}}

sw.stop();}}

根據訊號名稱查詢dbc檔案對應行bo_及sg_資訊 函式定義如下

public

static

string

dictdbcsearch

(string sgname)

基於C 的UDP socket 通訊

udp是面向無連線的,盡最大努力交付的不可靠通訊協議。相比tcp,少了握手建立連線,維護連線,連線釋放等一系列過程,因此具有很小的資源消耗和處理速度快的點。可實現一對一,一對多,多對一,多地多的udp client通訊。不同於tcp,udp應用上已經無嚴格意義上的真正的伺服器和客戶端之分了,端點之間...

基於CAN匯流排智慧型建築監控系統的通訊協議設計

現代智慧型建築監控系統廣泛採用了現場匯流排技術。現場匯流排的種類目前有40多種,但適合智慧型建築且在我國推廣的主要有兩種 can control area network 匯流排和lonworks匯流排。can匯流排技術以其可靠性高,結構簡單,傳輸距離長和成本低而具有巨大的應用潛力。控制區域網can...

基於C 和TCP的Socket通訊

很長時間沒寫部落格了,希望自己可以堅持下去,從小白開始成長吧,也希望各位讀者能給點鼓勵。本文實現的功能是基於c 和tcp進行服務端客戶端進行通訊,希望給你給讀者一定的幫助。具體步驟 1 初始化scoket 資源,注意,一定要在同一段 中實現,不然可能會出問題。2 構造服務端socket 3 繫結監聽...