最近需要實現基於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 繫結監聽...