分布式CAN通信網ID分配方法
在介紹本方法前,先構建CAN通信網系統(tǒng)模型:只有一個管理中心節(jié)點,其他均為從節(jié)點。主節(jié)點可與所有從節(jié)點之間相互通信,從節(jié)點之間不相互通信。CAN通信網采用網橋擴展方式增大網絡中的節(jié)點。
報文幀格式
幀信息
IDE=1
RTR=0
X
X
DLC
擴展幀
遠程幀
保留位
幀數(shù)據(jù)部分長度(不大于8)
幀標
識符
ID28
ID27
ID26
ID25
ID24
ID24
ID22
ID21
DestMACID(目標節(jié)點編碼)
ID20
ID19
ID18
ID17
ID16
ID15
ID14
ID13
xxxxxxx xxxxxxx
ID12
ID11
ID10
ID9
ID8
ID7
ID6
ID5
SrcMACID(源節(jié)點編碼)
ID4
ID3
ID2
ID1
ID0
X
X
X
0
保留位
當使用擴展幀進行數(shù)據(jù)傳輸時,擴展幀ID由STID+EXID組成。例如,在STM32中設置ExtID=0X1234時,則
CAN_FilterIdHigh=0x0000,CAN_FilterIdLow=(0x1234)X8+4= 0x91A4;
如果設置ExtID=0X5678,則
CAN_FilterMaskIdHigh=(u32(0x5678)X8/(0x10000)=0x0002; CAN_FilterMaskIdLow=(0x5678)X8+4=0xB3C4;(溢出,截高位,剩下的就是這個數(shù))。
為方便計算,我們把ID最后一位直接置為0。ID28~ID01這28位平分,前14位為DestMACID(目標節(jié)點),后14位為SrcMACID(源節(jié)點)。對于前14位,ID28~ID22作為網橋標號,ID21~ID15作為子網內編號。后14位采用相同編號方式。
其中,地址0000000/0000000設置主地址
網橋編號為, 0000001/xxxxxxx~1101110/xxxxxxx,也就是1~110
網橋內子節(jié)點編號為xxxxxxx/0000001~xxxxxxx/1101110,也就是1~110
規(guī)定xxxxxxx/0000000,為網橋內廣播地址。廣播地址,其中,xxxxxxx!=0000000。這主要是為了管理中心向各個從節(jié)點采集數(shù)據(jù)(心跳連接)時使用的。通過網橋內廣播,則管理中心最少只需要發(fā)送110次查詢信息,就可以獲取所有井蓋終端的井蓋當前狀態(tài)。
例如,某節(jié)點地址為0000010/0000100,則表示為網橋2內的第4個節(jié)點
如果整個29位的ID設置為0000000/0000000 0000010/0000100 0,則表示數(shù)據(jù)從網橋2內的第4個節(jié)點,發(fā)送至管理中心;如果整個29位的ID設置為0000010/0000100 0000000/0000000 0,則表示數(shù)據(jù)從管理中心,發(fā)送至網橋2內的第4個節(jié)點。注意,源地址和目的地址必須有一個是管理中心的地址,因為各個井蓋節(jié)點之間不相互傳送數(shù)據(jù)。





