陳華明,張 剛
1 概述
在計(jì)算機(jī)工業(yè)控制系統(tǒng)中,一般包括智能I/O處理單元、主控單元(主CPU單元)和后臺(tái)處理系統(tǒng)。主控單元與后臺(tái)處理系統(tǒng)之間通過10/100Mbps以太網(wǎng)進(jìn)行連接;主控單元與智能I/O處理單元之間的連接采用現(xiàn)場(chǎng)總線,如Profibus、FF、LonWork、CAN Bus等。
CAN(Controller Area Network)是一種成熟的現(xiàn)場(chǎng)總線,由德國(guó)BOSCH公司開發(fā),最初用在汽車內(nèi)的自動(dòng)化系統(tǒng)中,由于其性能優(yōu)異、價(jià)格低廉,很快被推廣到工業(yè)控制現(xiàn)場(chǎng)。其物理層使用雙絞線,符合ISO DIS 11898標(biāo)準(zhǔn),其數(shù)據(jù)鏈路層采用了載波偵聽及碰撞檢測(cè)機(jī)制(CSMA/CD),同ETHERNET相似,不同的是CAN Bus在此基礎(chǔ)上增加了優(yōu)先級(jí)控制,使高優(yōu)先權(quán)的信息可以不受阻礙地立即傳送。CAN Bus的最大特點(diǎn)是其可靠性,按ISO DIS 11898標(biāo)準(zhǔn),雙絞線中即使有一條線接地或與電源短路,甚至斷線,它都可以正常地傳輸信息。其最高傳輸速率為1Mbps,最大傳輸距離為10km,網(wǎng)絡(luò)上的節(jié)點(diǎn)數(shù)量無特定限制。
與主從方式的現(xiàn)場(chǎng)總線不同,CAN Bus是一種對(duì)等式(Peer-to-Peer)的現(xiàn)場(chǎng)總線網(wǎng),采用CAN Bus連接主控單元與I/O單元,可以通過節(jié)點(diǎn)ID和ID掩碼的選擇,方便地實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)、點(diǎn)對(duì)多點(diǎn)和廣播等多種傳輸方式;可以提高主控單元與I/O單元,I/O單元之間的隔離性,便于實(shí)現(xiàn)模塊的冗余和不停機(jī)拆裝;可以實(shí)現(xiàn)無集中機(jī)柜的分散安裝方式,系統(tǒng)控制功能可進(jìn)一步向下分散。
目前使用的CAN Bus技術(shù)規(guī)范有兩部分,即CAN2.0A和CAN2.0B。CAN Bus的技術(shù)特點(diǎn)如下:
① 各個(gè)節(jié)點(diǎn)具有相同的總線訪問權(quán),Peer-to-Peer方式無需主節(jié)點(diǎn);
② 無破壞性的基于優(yōu)先權(quán)的總線仲裁策略;
③ 不需要發(fā)送目的地址,借助接收節(jié)點(diǎn)濾波實(shí)現(xiàn)向多點(diǎn)發(fā)送;
④ 數(shù)據(jù)幀、數(shù)據(jù)請(qǐng)求幀、出錯(cuò)幀和超載幀等四種幀格式;
⑤ 五種錯(cuò)誤檢驗(yàn);
⑥ 配置靈活性;
⑦ 全系統(tǒng)數(shù)據(jù)相容性;
⑧ 發(fā)送期間若丟失仲裁或由于出錯(cuò)而遭破壞的幀可自動(dòng)重發(fā);
⑨ 暫時(shí)錯(cuò)誤和永久性故障節(jié)點(diǎn)的判別及故障點(diǎn)的自動(dòng)化脫離;
⑩ 可程序控制的傳送速率。
CAN2.0B與CAN2.0A相比的最大區(qū)別在于CAN2.0B識(shí)別碼由11位擴(kuò)展到了29位,更為靈活方便。
SJA1000是一款常見的CAN2.0B控制器,用于汽車和一般工業(yè)環(huán)境中的控制器局域網(wǎng)絡(luò)(CAN)。它是PHILIPS半導(dǎo)體PCA82C200 CAN控制器(BasicCAN)的替代產(chǎn)品。而且,它增加了一種新的工作模式,即PeliCAN,這種模式支持具有很多新特性的CAN 2.0B協(xié)議。
其擴(kuò)展功能主要有:① 可讀/寫訪問的錯(cuò)誤計(jì)數(shù)器。② 可編程的錯(cuò)誤報(bào)警限制。③ 最近一次錯(cuò)誤代碼寄存器。④ 對(duì)每一個(gè)CAN Bus錯(cuò)誤的中斷。⑤ 具體控制位控制的仲裁丟失中斷。⑥ 單次發(fā)送(無重發(fā))。⑦ 偵聽模式(無應(yīng)答、無主動(dòng)的出錯(cuò)標(biāo)志)。⑧ 支持熱插拔(軟件實(shí)現(xiàn)的位速率檢測(cè))。⑨ 驗(yàn)收濾波器擴(kuò)展(4字節(jié)代碼、4字節(jié)屏蔽)。⑩ 自身信息接收(自接收請(qǐng)求)。
2 總線的應(yīng)用
要提高基于CAN Bus控制系統(tǒng)的性能,必須注重主控單元與I/O單元、I/O單元之間的通信效率和可靠性,充分合理的利用CAN控制器提供的功能,設(shè)計(jì)高效而又滿足應(yīng)用的應(yīng)用層協(xié)議。
下面就以SJA1000為例,描述在工業(yè)控制系統(tǒng)中CAN Bus的應(yīng)用設(shè)計(jì),包含通信速率、節(jié)點(diǎn)定義、幀結(jié)構(gòu)、過濾方式、識(shí)別碼格式和優(yōu)先級(jí)的定義等內(nèi)容。
2.1 通信速率
系統(tǒng)預(yù)設(shè)8種通信速率,根據(jù)SJA1000的實(shí)際時(shí)鐘頻率,計(jì)算出每種通信速率下SJA1000的BTR0 和BTR1寄存器的設(shè)置值。系統(tǒng)的通信速率由主控單元確定(根據(jù)組態(tài)軟件的設(shè)置來設(shè)置SJA1000),I/O單元自動(dòng)偵聽CAN Bus通信速率,并設(shè)置自身的SJA1000。
2.2 節(jié)點(diǎn)定義
主節(jié)點(diǎn): 主CPU(主控單元)節(jié)點(diǎn),允許單CPU、雙CPU、多CPU等配置方式。
從節(jié)點(diǎn): I/O單元節(jié)點(diǎn),允許單I/O、雙I/O冗余配置方式,同一CAN Bus上的從節(jié)點(diǎn)數(shù)目最大為64。
2.3 CAN通信幀結(jié)構(gòu)
所有在CAN Bus上傳送的信息都以幀為基本單元,每幀的長(zhǎng)度為5~13個(gè)字節(jié),具體長(zhǎng)度視傳送內(nèi)容確定。CAN通信幀結(jié)構(gòu)見表1。
表1 CAN通信幀結(jié)構(gòu)
Byte0 |
Frame information |
BIT7:1;BIT3-BIT0:0~8;其余位:0 |
Byte1 |
Identifier 1 |
報(bào)文標(biāo)識(shí)碼的ID.28~ID.21 |
Byte2 |
Identifier 2 |
報(bào)文標(biāo)識(shí)碼的ID.20~ID.13 |
Byte3 |
Identifier 3 |
報(bào)文標(biāo)識(shí)碼的ID.12~ID.5 |
Byte4 |
Identifier 4 |
高5位為報(bào)文標(biāo)識(shí)碼的ID.4~ID.0;其余位:0 |
Byte5 |
Data byte 1 |
數(shù)據(jù)1 |
Byte6 |
Data byte 2 |
數(shù)據(jù)2 |
Byte7 |
Data byte 3 |
數(shù)據(jù)3 |
Byte8 |
Data byte 4 |
數(shù)據(jù)4 |
Byte9 |
Data byte 5 |
數(shù)據(jù)5 |
Byte10 |
Data byte 6 |
數(shù)據(jù)6 |
Byte11 |
Data byte 7 |
數(shù)據(jù)7 |
Byte12 |
Data byte 8 |
數(shù)據(jù)8 |
2.4 過濾方式
為提高CAN Bus上通信效率和可靠性,并充分利用CAN Bus的優(yōu)先級(jí)仲裁機(jī)制,系統(tǒng)應(yīng)保證:
(1) CAN Bus不同節(jié)點(diǎn)所發(fā)送的通信幀其識(shí)別碼一定不同;
(2) 對(duì)于CAN Bus上的點(diǎn)對(duì)點(diǎn)通信幀,保證有且只有目的節(jié)點(diǎn)能接收到。
要滿足上述2個(gè)要求,在設(shè)計(jì)上應(yīng)使通信幀的識(shí)別碼與SJA1000驗(yàn)收濾波器互相配合。
SJA1000 驗(yàn)收濾波器由4 個(gè)驗(yàn)收碼寄存器ACR0、ACR1、ACR2和ACR3和4個(gè)驗(yàn)收屏蔽寄存器AMR0、AMR1、AMR2和AMR3組成。它們?cè)赟JA1000的復(fù)位模式下可由主控制器設(shè)置,從而可對(duì)接收信息構(gòu)成非常靈活的濾波。
在本系統(tǒng)中,CAN節(jié)點(diǎn)對(duì)通信幀的接收采用單過濾方式。單濾波是指只有1個(gè)由4個(gè)驗(yàn)收碼寄存器和4個(gè)驗(yàn)收屏蔽寄存器組成的驗(yàn)收濾波器,總線上的信息只有通過它的驗(yàn)收濾波才予以接收。ACR和AMR是配合在一起工作的,所有AMR 為0 的位,ACR和CAN通信幀識(shí)別碼的對(duì)應(yīng)位必須相同才能驗(yàn)收通過;所有AMR 為1 的位,ACR 對(duì)應(yīng)位的驗(yàn)收濾波功能則予以屏蔽,CAN 信息幀的相關(guān)位與驗(yàn)收結(jié)果無關(guān)。
節(jié)點(diǎn)的驗(yàn)收碼和屏蔽碼的設(shè)置見表2。
表2 CAN節(jié)點(diǎn)驗(yàn)收碼和屏蔽碼設(shè)置表
節(jié)點(diǎn)類型 |
驗(yàn)收碼 ACR0.7- ACR0.5 |
驗(yàn)收碼 ACR1 |
屏蔽碼 AMR0.7- AMR0.5 |
屏蔽碼 AMR1 |
主節(jié)點(diǎn)(CPU) |
0 1 0 |
00h |
110 |
0ffh |
從節(jié)點(diǎn)(I/O單元) |
0 0 1 |
ACR1 |
101 |
AMR1 |
對(duì)于所有類型的節(jié)點(diǎn),驗(yàn)收碼ACR0.4-ACR0.0、ACR2和ACR3的所有位均為0,屏蔽碼AMR0.4-AMR0.0、AMR2和AMR3的所有位均為1。
I/O單元各節(jié)點(diǎn)均分配一個(gè)邏輯ID,由此確定CAN通信的物理地址,從節(jié)點(diǎn)邏輯ID及驗(yàn)收碼ACR1和屏蔽碼AMR1的分配規(guī)則為:
從節(jié)點(diǎn)的驗(yàn)收碼ACR1的8位由4個(gè)“1”和4個(gè)“0”組成;
不同從節(jié)點(diǎn)的驗(yàn)收碼ACR1均不相同;
從節(jié)點(diǎn)邏輯ID越小,對(duì)應(yīng)的驗(yàn)收碼ACR1也越小;
從節(jié)點(diǎn)的屏蔽碼AMR1為其驗(yàn)收碼ACR1的反碼。
根據(jù)上述規(guī)則,可分配出70個(gè)從節(jié)點(diǎn),選取其中的64個(gè)作為系統(tǒng)的從節(jié)點(diǎn)。
2.5 CAN通信幀報(bào)文標(biāo)識(shí)碼(29位)定義
CAN通信幀報(bào)文標(biāo)識(shí)碼(29位)定義如下:
ID.28~ID.26:信息流向(MDIR),3位。具體含義見表3。
表3 CAN節(jié)點(diǎn)信息流向表
ID.25~ID.21:信息類型(MTP),5位;
ID.20~ID.13:從節(jié)點(diǎn)號(hào)索引(SNI),8位。CPU節(jié)點(diǎn)發(fā)送時(shí)表示目的從節(jié)點(diǎn),從節(jié)點(diǎn)向CPU節(jié)點(diǎn)發(fā)送時(shí)表示源從節(jié)點(diǎn),從節(jié)點(diǎn)之間通信時(shí)表示目的從節(jié)點(diǎn)。0ffh表示是廣播幀,發(fā)送點(diǎn)對(duì)點(diǎn)幀時(shí),SNI就是從節(jié)點(diǎn)邏輯ID號(hào)對(duì)應(yīng)的從節(jié)點(diǎn)驗(yàn)收碼ACR1。
ID.12~ID.5:信息編移(MOS),8位。對(duì)于點(diǎn)對(duì)點(diǎn)的CAN通信幀,此信息偏移表示該通信幀內(nèi)數(shù)據(jù)的偏移。對(duì)于CPU節(jié)點(diǎn)發(fā)送的廣播幀,此信息偏移用來表示發(fā)送此廣播幀的不同的CPU節(jié)點(diǎn),例如可以是CPU節(jié)點(diǎn)所在主控單元的系統(tǒng)網(wǎng)絡(luò)站號(hào)。
ID.4~ID.2:保留,3位。
ID.1~ID.0:源節(jié)點(diǎn)內(nèi)部單元序號(hào)(SNMN),2位。非冗余CPU節(jié)點(diǎn)發(fā)送時(shí),SNMN保留,為0;冗余CPU節(jié)點(diǎn)發(fā)送時(shí),為0和1分別表示該冗余CPU節(jié)點(diǎn)的A機(jī)和B機(jī)(為2和3保留)。非冗余I/O單元從節(jié)點(diǎn)發(fā)送時(shí),SNMN保留,為0;冗余I/O單元從節(jié)點(diǎn)發(fā)送時(shí),為0和1分別表示該冗余I/O單元的A單元和B單元(為2和3保留)。
2.6 CAN通信幀傳送優(yōu)先級(jí)
根據(jù)所定義的CAN通信幀報(bào)文標(biāo)識(shí)碼格式,CAN Bus上各通信幀傳送優(yōu)先級(jí)首先由MDIR決定。
按照MDIR,CAN通信幀優(yōu)先級(jí)由高到低依次為:
① 主節(jié)點(diǎn)(CPU節(jié)點(diǎn))向從節(jié)點(diǎn)發(fā)送的點(diǎn)對(duì)點(diǎn)幀,如主控單元向某一I/O單元發(fā)送配置數(shù)據(jù)。
② 主節(jié)點(diǎn)向所有從節(jié)點(diǎn)發(fā)送的廣播幀,如主節(jié)點(diǎn)向所有從節(jié)點(diǎn)請(qǐng)求I/O單元工作狀態(tài),或主節(jié)點(diǎn)向所有從節(jié)點(diǎn)請(qǐng)求當(dāng)前數(shù)據(jù)。
③ 主節(jié)點(diǎn)向主節(jié)點(diǎn)發(fā)送的點(diǎn)對(duì)點(diǎn)幀。
④ 主節(jié)點(diǎn)向所有主節(jié)點(diǎn)發(fā)送的廣播幀。
⑤ 從節(jié)點(diǎn)之間點(diǎn)對(duì)點(diǎn)通信幀。
⑥ 從節(jié)點(diǎn)向主節(jié)點(diǎn)發(fā)送的廣播幀。
上述6類通信幀中,常用到的有①、②和⑥這三種,能滿足數(shù)據(jù)采集與控制的基本應(yīng)用要求。
在MDIR后,CAN通信幀傳送優(yōu)先級(jí)由MTP決定。在MDIR相同的情況下,MTP對(duì)優(yōu)先級(jí)的確定起著決定作用,從而保證重要信息類型數(shù)據(jù)的優(yōu)先傳送。例如SOE(事件順序記錄)信息就可以比普通的巡檢數(shù)據(jù)優(yōu)先傳送。
常見的信息類型有網(wǎng)絡(luò)同步幀、請(qǐng)求配置、配置數(shù)據(jù)、SOE數(shù)據(jù)、巡檢數(shù)據(jù)、狀態(tài)數(shù)據(jù)等,在系統(tǒng)設(shè)計(jì)時(shí)可根據(jù)其重要程度排定優(yōu)先級(jí),并確定相應(yīng)的MTP數(shù)值。
在MTP后,CAN通信幀傳送優(yōu)先級(jí)由SNI決定。在MDIR和MTP都相同的情況下,CAN通信幀的優(yōu)先級(jí)取決于SNI,邏輯ID越小,其優(yōu)先級(jí)越高。
3 結(jié)語
本文以SJA1000為例,通過節(jié)點(diǎn)定義、幀結(jié)構(gòu)、過濾方式、識(shí)別碼定義和優(yōu)先級(jí)定義等方面的應(yīng)用設(shè)計(jì),可以實(shí)現(xiàn)工業(yè)控制系統(tǒng)中多冗余的主控單元和64個(gè)可冗余I/O節(jié)點(diǎn)之間的高效可靠的數(shù)據(jù)通信,實(shí)現(xiàn)不同流向的各種類型的通信幀的高效傳送。通信幀優(yōu)先級(jí)由MDIR、MTP和SNI依次決定,并保證CAN Bus上不會(huì)出現(xiàn)相同的識(shí)別碼。