黃智淵,楊興星
(中國人民解放軍92574部隊(duì),上海 200436)
工業(yè)現(xiàn)場(chǎng)中需要對(duì)大量壓力儀表的數(shù)據(jù)進(jìn)行監(jiān)控和數(shù)據(jù)共享,傳統(tǒng)RS485 模式下壓力儀表可實(shí)現(xiàn)數(shù)據(jù)的中心的集采,但是操作現(xiàn)場(chǎng)的不同位置很難實(shí)時(shí)共享以獲取不同點(diǎn)位的壓力數(shù)據(jù)(壓力變送器、壓力開關(guān)),應(yīng)用CsCAN總線將多臺(tái)OCS 控制器實(shí)現(xiàn)壓力模擬量和數(shù)字量的互聯(lián)互通,可有效提升壓力儀表的監(jiān)控效率和可靠性[1,2]。
CAN 是Controller Area Network 的縮寫,是由Bosch 博世公司研發(fā)。CAN 總線具有布線簡(jiǎn)單,典型的總線型結(jié)構(gòu),可最大限度地節(jié)約布線與維護(hù)成本,穩(wěn)定可靠,實(shí)時(shí)、抗干擾能力強(qiáng),傳輸距離遠(yuǎn)等特點(diǎn)。此后,CAN 通過ISO11898 及ISO11519 進(jìn)行了標(biāo)準(zhǔn)化。由于CAN 總線本身只定義ISO/OSI 模型中的第一層(物理層)和第二層(數(shù)據(jù)鏈路層),在實(shí)際使用中,用戶還需要自己定義應(yīng)用層的協(xié)議,因而在CAN 總線的發(fā)展過程中出現(xiàn)了各種版本的CAN 應(yīng)用層協(xié)議,現(xiàn)階段最流行的CAN 應(yīng)用層協(xié)議主要有CANopen、DeviceNet 和J1939 等協(xié)議。HORNER 的CsCAN 協(xié)議也是基于CAN2.0A 標(biāo)準(zhǔn)發(fā)展出來的一種應(yīng)用層協(xié)議。OSI 參考模型包括:①物理層和;②數(shù)據(jù)鏈路層(ISO11898,ISO11519);③網(wǎng)絡(luò)層;④傳輸層;⑤會(huì)話層;⑥表示層和⑦應(yīng)用層(CSCAN、CANOPEN、DEVICENET和SAEJ1939)[3]。
圖1 CsCAN網(wǎng)絡(luò)的總線拓?fù)浣Y(jié)構(gòu)圖Fig.1 Bus topology of CsCAN network
圖2 CsCAN網(wǎng)絡(luò)的波特率和通信距離的關(guān)系圖Fig.2 Relationship between baud rate and communication distance of CsCAN network
CsCAN 協(xié)議是HORNER 公司在CAN 2.0A 基礎(chǔ)上開發(fā)的一種高速通信協(xié)議,主要用于實(shí)現(xiàn)HORNER 產(chǎn)品之間的數(shù)據(jù)交互。其主要特性如下:
1)通信網(wǎng)絡(luò)介質(zhì):CAN 總線電纜(四芯屏蔽雙絞鍍錫銅線,121Ω 特征阻抗)。
2)通信速率:目前支持50Kbps,125Kbps(默認(rèn)),250Kbps,500Kbps,1Mbps。
3)通信距離:使用標(biāo)準(zhǔn)粗纜(18AWG)情況下,不加中繼器通信距離500m;網(wǎng)絡(luò)最多允許使用3 個(gè)中繼器,使網(wǎng)絡(luò)拓展到2000m。
4)接點(diǎn)數(shù)量:在不使用中繼器的情況下,單個(gè)網(wǎng)段最多有64 個(gè)節(jié)點(diǎn)設(shè)備;每增加1 個(gè)中繼器,網(wǎng)絡(luò)可增加64 個(gè)節(jié)點(diǎn);最多允許使用3 個(gè)中繼器,但總節(jié)點(diǎn)數(shù)不超過253 個(gè)。
5)網(wǎng)絡(luò)終端電阻:網(wǎng)絡(luò)兩端需要安裝終端電阻,121 Ω,1%精度,功率不小于1/4 W。CAN 總線上的所有節(jié)點(diǎn)沒有主從之分,大家都處于平等的地位。反應(yīng)在數(shù)據(jù)傳輸上,即是:在總線空閑狀態(tài),任意節(jié)點(diǎn)都可以向總線上發(fā)送消息。CsCAN 總線可以實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)通信和數(shù)據(jù)的廣播交互,因此CsCAN 網(wǎng)絡(luò)上的任意控制器/模塊均可以接收到其他控制器/模塊的數(shù)據(jù),也可以把自身的數(shù)據(jù)廣播到網(wǎng)絡(luò)中去[4,5]。
CsCAN 總線通信中,關(guān)于供電和屏蔽線纜的連接方式,請(qǐng)注意:網(wǎng)絡(luò)兩端需要安裝終端電阻。每段不相連的屏蔽電纜的屏蔽層只能單端接地;幾段屏蔽電纜的屏蔽層可以連接在一起,但是也只能單端接地。如果網(wǎng)絡(luò)中存在IO 模塊,一般通過總線供電,V+、V-需要連接電源。如果只是控制器間的通信,CAN 端子的V+可以不連接起來,但V-需要連接。
OCS 控制器外圍具有RS485、RS232、AI 和DI 功能,通過Modbus RTU/ASCII 協(xié)議或自定義協(xié)議采集485 輸出的壓力儀表數(shù)據(jù),通過AI 4mA~20mA 電流采集壓力變送器的輸出,通過DI 采集壓力開關(guān)儀表的工作狀態(tài)。CAN 總線接口采用RJ45 網(wǎng)口形式,8 針分別對(duì)應(yīng):1-CAN 數(shù)據(jù)高、2-CAN 數(shù)據(jù)低、3-公共端、4-NC、5-NC、6-屏蔽連接、7-公共端0V 和8-NC。OCS 控制器內(nèi)置120Ω 總線終端電阻,應(yīng)用%SR152.4 控制是否啟用CAN 總線的終端電阻。以控制器間的CsCAN 總線通信舉例,連接兩臺(tái)用于壓力監(jiān)控的OCS 控制器,實(shí)現(xiàn)功能如下:
1)控制器A 發(fā)送1 個(gè)16 位的整數(shù)到控制器B。
2)控制器B 發(fā)送1 個(gè)16 位的整數(shù)到控制器A。
3)控制器A 發(fā)送16 個(gè)數(shù)字量到控制器B。
4)控制器B 發(fā)送16 個(gè)數(shù)字量到控制器A。
5)控制器A 需要知道當(dāng)前網(wǎng)絡(luò)的通信狀態(tài),B 是否能和它通信正常。
因?yàn)镃sCAN 網(wǎng)絡(luò)上的每個(gè)設(shè)備需要有不重復(fù)的ID,所以這里把控制器A 的ID 設(shè)置為1,B 的ID 設(shè)置為2。此項(xiàng)操縱可以在控制器屏幕上的系統(tǒng)菜單中完成,也可以在Cscape 編程軟件中的Controller -> Set Local Network ID 實(shí)現(xiàn)。設(shè)置完成后,編程軟件右下方連接到的控制器的Local ID 地址就會(huì)變?yōu)樗O(shè)定的地址。OCS 控制器將壓力數(shù)據(jù)進(jìn)行本地和服務(wù)器同步存儲(chǔ),本地采用SD 卡進(jìn)行數(shù)據(jù)記錄(CSV 格式),服務(wù)器側(cè)通過串口或網(wǎng)口將數(shù)據(jù)實(shí)時(shí)傳輸。所獲取的壓力數(shù)據(jù)都帶有時(shí)間戳標(biāo)識(shí),可以進(jìn)行曲線繪制和閾值邏輯判斷。
圖3 CsCAN模擬量OCS發(fā)送配置圖Fig.3 Configuration diagram of CsCAN analog quantity OCS transmission
2.2.1 壓力模擬量發(fā)送
壓力數(shù)據(jù)通過CsCAN 協(xié)議在OCS 控制器之間實(shí)現(xiàn)數(shù)據(jù)共享,以控制器A 和B 的收發(fā)為例??刂破鰽 發(fā)送1 個(gè)16 位的整數(shù)(壓力值)到控制器B,發(fā)送數(shù)據(jù)包所使用的CsCAN ID 號(hào),可以使用常數(shù)或者寄存器,范圍1~253。Format 中選擇全局?jǐn)?shù)據(jù)模式Global Data,Data 中因?yàn)橐l(fā)送模擬量值,選Analog,CsCAN 中每個(gè)ID 號(hào)下可以最多發(fā)送32 個(gè)模擬量值。這個(gè)WORD Offset 指的是該功能塊發(fā)送的數(shù)據(jù)的偏移量是多少,如果是0,便是這32 個(gè)值中的第1 個(gè)數(shù),相應(yīng)的接收塊的偏移量也應(yīng)為0。如果Send on Change of State 選上,里面設(shè)定為%S8,只有當(dāng)從%R1 開始的要發(fā)送的數(shù)據(jù)發(fā)生變化時(shí),控制器才向總線發(fā)送1 次數(shù)據(jù);如果不勾選,則只要該功能塊在掃描周期導(dǎo)通,都會(huì)向總線發(fā)送1 次數(shù)據(jù)。所以,本例中這樣配置的優(yōu)勢(shì)在于可以控制控制器CsCAN 網(wǎng)絡(luò)的通信量。綜上所述,該功能塊實(shí)現(xiàn)了把從%R1 開始的連續(xù)1 個(gè)字長(zhǎng)的數(shù)據(jù),以CsCAN 節(jié)點(diǎn)號(hào)1 發(fā)送到網(wǎng)絡(luò)中,%R1 在該數(shù)據(jù)包中所處的位置為模擬量第1 個(gè)數(shù)據(jù)(偏移量0)。
圖4 CsCAN模擬量OCS接收配置圖Fig.4 CsCAN Analog quantity OCS receiving configuration diagram
2.2.2 壓力模擬量接收
OCS 控制器A 接收1 個(gè)控制器B 發(fā)出的模擬量(壓力值),Network Data 中ID 是要接收的數(shù)據(jù)包所使用的CsCAN ID 號(hào),可以使用常數(shù)或者寄存器,范圍1~253。依舊選擇全局?jǐn)?shù)據(jù)Global Data,因?yàn)橐邮漳M量值,選Analog;因?yàn)樵诳刂破鰾 中發(fā)出的數(shù)據(jù)偏移量為1,所以這里接收也配置為1。在Destination Data 的Address 中配置要接收的寄存器的起始地址,如%R2。Num Words 是從Destination Data 開始的要接收的數(shù)據(jù)字長(zhǎng),1~32。該功能塊實(shí)現(xiàn)了把網(wǎng)絡(luò)中以CsCAN 節(jié)點(diǎn)ID2 發(fā)送的模擬量數(shù)據(jù),從其第2 個(gè)數(shù)據(jù)(偏移量1)開始的連續(xù)1 個(gè)字的數(shù)據(jù)接收到本機(jī)從%R2 開始的連續(xù)寄存器中。
2.2.3 壓力數(shù)字量發(fā)送
OCS 控制器A 發(fā)送16 個(gè)數(shù)字量(壓力開關(guān)狀態(tài)量)到OCS 控制器B。發(fā)送數(shù)據(jù)包所使用的CsCAN ID 號(hào),可以使用常數(shù)或者寄存器,范圍1~253。Format 中選擇全局?jǐn)?shù)據(jù)模式Global Data,因?yàn)橐l(fā)送開關(guān)量值,選Digital,CsCAN 中每個(gè)ID 號(hào)下可以最多發(fā)送64 個(gè)數(shù)字量值。這個(gè)WORD Offset 指的是該功能塊發(fā)送的數(shù)據(jù)的偏移量是多少,如果是0,便是這64 個(gè)值中的第1 個(gè)數(shù),相應(yīng)的接收塊的偏移量也應(yīng)為0,數(shù)字量模式下的數(shù)據(jù)起始地址必須為%T1,%T17,%T33,%M49……這類地址,即每16 個(gè)位中的第1 位地址開始。如果把Send on Change of State 選上,里面設(shè)定為%S8,只有當(dāng)從%T1 開始的要發(fā)送的數(shù)據(jù)發(fā)生變化時(shí),控制器才向總線發(fā)送1 次數(shù)據(jù);如果不勾選,則只要該功能塊在掃描周期導(dǎo)通,都會(huì)向總線發(fā)送1 次數(shù)據(jù)。所以,本例中這樣配置的優(yōu)勢(shì)在于可以控制控制器CsCAN網(wǎng)絡(luò)的通信量。該功能塊實(shí)現(xiàn)了把從%T1 開始的連續(xù)1 個(gè)字長(zhǎng)的數(shù)據(jù),以CsCAN 節(jié)點(diǎn)號(hào)1 發(fā)送到網(wǎng)絡(luò)中,%T1 在該數(shù)據(jù)包中所處的位置為數(shù)字量第1 個(gè)數(shù)據(jù)(偏移量0)。
圖5 CsCAN數(shù)字量OCS發(fā)送配置圖Fig.5 CsCAN Digital quantity OCS transmission configuration diagram
2.2.4 壓力數(shù)字量接收
OCS 控制器A 接收16 個(gè)OCS 控制器B 發(fā)出的數(shù)字量(壓力開關(guān)的當(dāng)前狀態(tài)),要接收的數(shù)據(jù)包所使用的CsCAN ID 號(hào)可以使用常數(shù)或者寄存器,范圍1~253。選擇全局?jǐn)?shù)據(jù)Global Data,因?yàn)橐邮諗?shù)字量值,選Digital,因?yàn)樵诳刂破鰾 中發(fā)出的數(shù)據(jù)偏移量為1,所以這里接收也配置為1,Destination Data 是要接收的寄存器的起始地址,從Destination Data 開始的要接收的數(shù)據(jù)字長(zhǎng),1~4。該功能塊實(shí)現(xiàn)了把網(wǎng)絡(luò)中以CsCAN 節(jié)點(diǎn)ID2 發(fā)送的數(shù)字?jǐn)?shù)據(jù),從其第2 個(gè)數(shù)據(jù)(偏移量1)開始的連續(xù)1 個(gè)字的數(shù)據(jù)接收到本機(jī)從%T17 開始的連續(xù)寄存器中。
壓力儀表數(shù)據(jù)的實(shí)時(shí)監(jiān)控和共享,需要知道當(dāng)前的網(wǎng)絡(luò)通信狀態(tài),以確保數(shù)據(jù)真實(shí)有效。如OCS 控制器A 需要知道當(dāng)前網(wǎng)絡(luò)的通信狀態(tài),判斷OCS 控制器B 是否能和它通信正常。使用Network Get/Put Heart Beat 模塊,配置Network ID 要接收的心跳包所使用的CsCAN ID 號(hào),可以使用常數(shù)或者寄存器,范圍1~253。Timeout(ms)項(xiàng)通信超時(shí)時(shí)間,單位ms,范圍1~6553:在控制器B 的程序中,會(huì)看到一段心跳發(fā)送程序以100ms 為周期向網(wǎng)絡(luò)發(fā)送心跳。本例中,如果A 站300ms 接收不到B 的心跳,則認(rèn)為通信超時(shí),%T101 會(huì)從ON 變?yōu)镺FF,直到再次收到心跳。一般地,該超時(shí)時(shí)間應(yīng)該大于心跳發(fā)送時(shí)間??刂破鰾 的程序和A 基本一致,只是心跳塊不同。要發(fā)送的心跳包所使用的CsCAN ID 號(hào),可以使用常數(shù)或者寄存器,范圍1~253。%SR29 是系統(tǒng)寄存器,表示本機(jī)的CsCAN 網(wǎng)絡(luò)ID。心跳包發(fā)送間隔時(shí)間,單位1ms,范圍1~6553,配置為100 時(shí),B 站以100ms 為間隔向網(wǎng)絡(luò)發(fā)送心跳。Status狀態(tài)寄存器用于內(nèi)部使用,無意義,占用1 個(gè)字[6-8]。
壓力儀表的模擬量數(shù)據(jù)一般使用浮點(diǎn)數(shù)float 類型,占用兩個(gè)%R 字。從上面可以看到,1 個(gè)ID 號(hào)最多只能發(fā)送32 個(gè)模擬量,64 個(gè)開關(guān)量。如果需要傳遞的數(shù)據(jù)比較多,可以讓1 個(gè)控制器占用多個(gè)ID 號(hào),進(jìn)而發(fā)送更多的數(shù)據(jù)。要實(shí)現(xiàn)該功能,首先要進(jìn)入Program 菜單下的Network Configuration,在彈出的窗口中的Number of Network 項(xiàng),給控制器分配連續(xù)的ID 號(hào)。下例中控制器占用3 個(gè)網(wǎng)絡(luò)ID,故填3。另外,在做此類通信時(shí),使用時(shí)需要注意CAN 總線的網(wǎng)絡(luò)負(fù)荷,系統(tǒng)寄器%SR187~%SR192 分別給出了網(wǎng)絡(luò)和本機(jī)的實(shí)時(shí)CAN 總線負(fù)荷率,數(shù)據(jù)類型為INT,單位0.1%。比如,如果看到的數(shù)值為123,則網(wǎng)絡(luò)占用率為12.3%。多個(gè)OCS 控制器監(jiān)控壓力儀表時(shí),盡量控制平均網(wǎng)絡(luò)負(fù)荷在85%以下,否則可能造成通信數(shù)據(jù)失。%SR187代表平均網(wǎng)絡(luò)負(fù)荷,%SR188 代表最小網(wǎng)絡(luò)負(fù)荷,%SR189代表最大網(wǎng)絡(luò)荷,%SR190 代表本機(jī)使用網(wǎng)絡(luò)造成的平均負(fù)荷,%SR191 代表本機(jī)使用網(wǎng)絡(luò)造成的最小負(fù)荷,%SR192代表本機(jī)使用網(wǎng)絡(luò)造成的最大負(fù)荷。
應(yīng)用CsCAN 協(xié)議將多臺(tái)OCS 控制實(shí)現(xiàn)CAN 總線連接,并使用OCS 控制器的RS485、RS23、AI、DO 采集壓力儀表的模擬量和數(shù)字量以實(shí)現(xiàn)工業(yè)現(xiàn)場(chǎng)中多個(gè)壓力儀表數(shù)據(jù)的實(shí)時(shí)監(jiān)控和數(shù)據(jù)共享。以兩臺(tái)OCS 控制器的數(shù)據(jù)交互為例,詳細(xì)介紹了壓力變送器模擬量和壓力開關(guān)數(shù)字量數(shù)據(jù)發(fā)送和接收,大量數(shù)據(jù)共享及OCS 控制器通信狀態(tài)的配置方法。經(jīng)測(cè)試比較,基于CsCAN 總線的壓力儀表監(jiān)控系統(tǒng)具有良好的交互性能,有效地提高了現(xiàn)場(chǎng)計(jì)量效率和操作可靠性,達(dá)到了預(yù)期的設(shè)計(jì)效果。