數(shù)控同步現(xiàn)場總線與CAN總線網(wǎng)關(guān)的設計
4 NCSF與CAN數(shù)據(jù)幀封裝轉(zhuǎn)換模塊
NCSF-CAN協(xié)議轉(zhuǎn)換模塊把CAN數(shù)據(jù)幀封裝在NCSF數(shù)據(jù)包中。NCSF應用層提供四類設備應用服務:計數(shù)器、操作站、伺服電機和簡單I/0設備,其中計數(shù)器設備服務數(shù)據(jù)包中可利用的字段比較多,所以選擇把CAN報文封裝在計數(shù)器數(shù)據(jù)包中。
CAN數(shù)據(jù)幀由七部分構(gòu)成:幀起始、仲裁場、控制場、數(shù)據(jù)場、CRC場、應答場和幀結(jié)尾。其中,幀起始為一個“顯性”位;仲裁場由11位標識符和遠程發(fā)送請求位(RTR)構(gòu)成;控制場有六位,最后四位是數(shù)據(jù)場長度,其余兩位保留;數(shù)據(jù)場是數(shù)據(jù)幀中的有效數(shù)據(jù),長度為0—8個字節(jié);應答場有兩位分別為應答間隙和應答定界符;最后是7位的幀結(jié)尾。CAN遠程幀沒有數(shù)據(jù)場,RTR位為“隱形”。綜合CAN的各種幀,NCSF—CAN網(wǎng)關(guān)需要把標識符、RTR位、數(shù)據(jù)長度字段、0—8字節(jié)的數(shù)據(jù)封裝在計數(shù)器數(shù)據(jù)包的計數(shù)器字段中,然后通過NCSF的鏈路傳送給主站。
計數(shù)器數(shù)據(jù)包長48個字節(jié),支持5個計數(shù)器,按絕對增量方式計數(shù),采用32位計數(shù)。由此每個計數(shù)器數(shù)據(jù)包傳輸20字節(jié)的數(shù)據(jù),每個CAN幀的數(shù)據(jù)至多8個字節(jié),再加上標識符等字段也不多于20字節(jié)。表1為計數(shù)器數(shù)據(jù)包與CAN數(shù)據(jù)幀的封裝轉(zhuǎn)換。
表1 計數(shù)器數(shù)據(jù)包與CAN數(shù)據(jù)幀的封裝轉(zhuǎn)換
為了區(qū)分普通計數(shù)器數(shù)據(jù)包和封裝CAN數(shù)據(jù)幀的特殊計數(shù)器數(shù)據(jù)包,規(guī)定前兩個字節(jié)為0x0101的計數(shù)器數(shù)據(jù)包為封裝CAN協(xié)議數(shù)據(jù)的數(shù)據(jù)包。IOIN和IO.OUT是輸入輸出端子控制字段。CNT0_CNT、CNTl_CNT、CNT2_CNT、CNT3_CNT和CNT4_CNT為五個計數(shù)器,在主站發(fā)往計數(shù)器從站的計數(shù)器數(shù)據(jù)包中這些字段為1表示對應的計數(shù)器清零,為0表示正常計數(shù),其它值沒有定義。
為了兼容主站的計數(shù)器命令,主站發(fā)往NCSF_CAN網(wǎng)關(guān)的計數(shù)器字段不能為0或1。為了達到此目的規(guī)定:CNTO_CNT、CNTI_CNT、CNT2_CNT、CNT3_CNT和CNT4_CNT最高位為1,即這些字段的最小值為Ox80000000。CNT0_CNT的0_15位對應于CAN數(shù)據(jù)幀的id字段的0-15位;CNT0_CNT的16位是擴展報文標志;17位對應為RTR位;CNT0_CNT的18位表示此數(shù)據(jù)包是否包含有效數(shù)據(jù),為1表示此數(shù)據(jù)包封裝了_個CAN數(shù)據(jù)幀,為0表示不含有效數(shù)據(jù)的計數(shù)器報文,直接轉(zhuǎn)發(fā)此幀即可;CNTO_CNT的19位,標識此數(shù)據(jù)包中信息是否為主站對NCSF_CAN網(wǎng)關(guān)的配置控制信息,為1表示配置數(shù)據(jù)用于配置網(wǎng)關(guān)的運行參數(shù),為0表示封裝的是CAN數(shù)據(jù)幀。CNT1_CNT的0—15位對應其余的CAN數(shù)據(jù)幀id字段位,這32位足以存儲CAN擴展報文29位長的id字段;CNT1_CNT的16—22位存儲數(shù)據(jù)長度。
5 NCSF主站對網(wǎng)關(guān)數(shù)據(jù)的處理
引入NCSF-CAN網(wǎng)關(guān)后,NCSF主站的軟件結(jié)構(gòu)如圖7所示。用戶層行規(guī)為用戶提供統(tǒng)一的接口服務,而服務映射管理層用于把用戶層行規(guī)的通用接口映射到具體協(xié)議的應用層服務。主站接收到計數(shù)器數(shù)據(jù)包頭部為OxO101時經(jīng)過CAN數(shù)據(jù)幀封裝轉(zhuǎn)換處理得到CAN數(shù)據(jù)幀,此幀經(jīng)過CAN的應用層,通過服務映射管理和用戶層行規(guī)提交給NC系統(tǒng),NC系統(tǒng)由此可以得知CAN總線上的設備狀態(tài)、I/0和傳感器數(shù)據(jù)等信息。NC系統(tǒng)向CAN總線上發(fā)送命令或數(shù)據(jù)時,先通過用戶層行規(guī)和服務映射管理層映射到相應的CAN應用層,然后把需要傳送的CAN數(shù)據(jù)幀封裝到NCSF計數(shù)器數(shù)據(jù)包中,通過NCSF的物理鏈路發(fā)到NCSF-CAN網(wǎng)關(guān),對數(shù)據(jù)包解析和轉(zhuǎn)換后,即可把相應的命令或數(shù)據(jù)發(fā)送到CAN總線上。
圖7所示軟件結(jié)構(gòu)也是其它現(xiàn)場總線與NCSF互聯(lián)的基本結(jié)構(gòu):用戶層行規(guī)為NC系統(tǒng)提供統(tǒng)一的服務接口,而服務映射管理層先把相應的命令或數(shù)據(jù)映射到具體的某一種協(xié)議應用層,然后封裝到NCSF應用層,通過NCSF的物理鏈路發(fā)送到NCSF與此協(xié)議的交互網(wǎng)關(guān),最后發(fā)送到特定的總線上。
圖7 引入NCSF-CAN網(wǎng)關(guān)后的主站軟件結(jié)構(gòu)
6 NCSF-CAN網(wǎng)關(guān)工作流程
NCSF-CAN網(wǎng)關(guān)設備加電后首先初始化NCSF模塊,接著初始化CAN模塊和數(shù)據(jù)幀封裝轉(zhuǎn)換模塊。初始化完成后,NCSF-CAN網(wǎng)關(guān)等待接收NCSF總線和CAN總線數(shù)據(jù)。為確保NCSF的實時性,NCSFCAN網(wǎng)關(guān)接收到每個數(shù)據(jù)包后應該在盡量短的時間內(nèi)把有效數(shù)據(jù)插入,然后轉(zhuǎn)發(fā)出去。為此,當收到NCSF數(shù)據(jù)幀后,并不等待CAN總線的響應,僅僅查看當前NCSF發(fā)送隊列中是否有數(shù)據(jù),沒則立即轉(zhuǎn)發(fā);有則封裝隊頭數(shù)據(jù)后再轉(zhuǎn)發(fā)。處理NCSF數(shù)據(jù)包的過程如圖8所示。
評論