1 概述
現(xiàn)場總線是一種用于智能化現(xiàn)場設備和自動化系統(tǒng)的開放式、數(shù)字化、雙向串行、多節(jié)點的通信總線。
在實際的生產建設中,我們將會經常遇到將不同現(xiàn)場總線的設備集成在一起或者在某一現(xiàn)場總線中利用其他現(xiàn)場總線協(xié)議的設備的問題。這就涉及到了不同的現(xiàn)場總線協(xié)議的協(xié)議轉化。數(shù)據(jù)鍵路層的幀轉換是這些協(xié)議轉化中的一個很關鍵的問題。
在這里,我們以Profibus-DP和CAN這兩種當今使用廣泛的現(xiàn)場總線來研究現(xiàn)場總線的協(xié)議幀轉化。
2 CAN現(xiàn)場總線的傳輸層協(xié)議簡介
傳輸層是CAN協(xié)議的核心。它把接收到的報文提供給對象層,以及接收來自對象層的報文。傳輸層負責位定時及同步、報文分幀、仲裁、應答、錯誤檢測和標定、故障界定。
報文路由:報文的內容由識別符命名。識別符不指出報文的目的地,但解釋數(shù)據(jù)的含義。因此,網絡上所有的節(jié)點可以通過報文濾波確定是否應對該數(shù)據(jù)做出反應。
報文傳輸由以下4個不同的幀類型所表示和控制:
·數(shù)據(jù)幀:數(shù)據(jù)幀攜帶數(shù)據(jù)從發(fā)送器至接收器。
·遠程幀:總線單元發(fā)出遠程幀,請求發(fā)送具有同一識別符的數(shù)據(jù)幀。
·錯誤幀:任何單元檢測到一總線錯誤就發(fā)出錯誤幀。
·過載幀:過載幀用以在先行的和后續(xù)的數(shù)據(jù)幀(或遠程幀)之間提供一附加的延時。
數(shù)據(jù)幀(或遠程幀)通過幀間空間與前述的各幀分開。
在這里我們以數(shù)據(jù)幀為例來分析CAN的幀結構。
2.1 數(shù)據(jù)幀
數(shù)據(jù)幀由7個不同的位場組成,如圖1所示:

(1)幀起始
它標志數(shù)據(jù)幀和遠程幀的起始,由一個單獨的“顯性”位組成。
(2)仲裁域
仲裁域包括識別符(ID)和遠程發(fā)送請求位(RTR)。
識別符(ID):識別符的長度為11位。這些位的發(fā)送順序是從ID-10到ID-0。最低位是ID-0。最高的7位(ID-10到ID-4)必須不能全是“隱性”。
RTR位:該位在數(shù)據(jù)幀里必須為“顯性”,而在遠程幀里必須為“隱性”

(3)控制域
控制域由6個位組成,包括數(shù)據(jù)長度代碼和兩個將來作為擴展用的保留位。所發(fā)送的保留位必須為“顯性”。數(shù)據(jù)長度代碼指示了數(shù)據(jù)域中字節(jié)數(shù)量,長度為4個位。
(4)CRC域
CRC域包括CRC序列,其后是CRC界定符,它包含一個單獨的“隱性”位。
(5)應答域
應答域長度為2位,包含應答間隙和應答界定符。在應答域里,發(fā)送站發(fā)送兩個“隱性”位。當接收器正確地接收到有效的報文,接收器就會在應答間隙期間發(fā)送ACK信號,向發(fā)送器發(fā)送一“顯性”的位以示應答。
(6)幀結尾
每一個數(shù)據(jù)幀和遠程幀均由一標志序列界定。這個標志序列由7個“隱性”位組成。
2.2 傳輸控制
(1)幀間空隙
對于不是“錯誤被動”的站,或者此站已作為前一報文的接收器,其幀間空隙如圖4所示:

對于已作為前——報文發(fā)送器的“錯誤被動”的站,其幀間空間如圖5所示:

其中,intermission是強制性的3個隱性位。
(2)位流編碼
幀的部分,諸如幀起始、仲裁域、控制域、數(shù)據(jù)域以及CRC序列,均通過位填充的方法編碼。無論何時,發(fā)送器只要檢測到位流里有5個連續(xù)識別值的位,便自動在位流里插入——補碼位。
數(shù)據(jù)幀或遠程幀(CRC界定符、應答域和幀末尾)的剩余位域形式相同,不填充。錯誤幀和過載幀的形式也相同,但并不通過位填充的方法進行編碼。其報文里的位流根據(jù)“不返回到零”之方法來編碼。這就是說,在整個位時間里,位電平要么為“顯性”,要么為“隱性”。
CAN協(xié)議范圍只規(guī)定了“顯性”和“隱性”兩種邏輯值,而沒有明確規(guī)定表示這些邏輯電平的物理狀態(tài)。根據(jù)邏輯關系,我們可以設“顯性”邏輯值為邏輯“0”,“隱性”邏輯值為邏輯1。
3 Profibus數(shù)據(jù)鏈路層幀格式及相關的地址規(guī)定
(1)幀字符(UART字符)
幀由幀字符組成
每個幀字符由11個位組成:1個開始位(ST);8個信息位;1個奇偶校驗位(P);1個停止位。
(2)幀格式舉例
Profibus的幀有4種
1)無數(shù)據(jù)字段的固定長度的幀

2)有數(shù)據(jù)字段的固定長度的幀

3)有可變數(shù)據(jù)字段長度的幀

4)令牌幀

其中:
SYN同步時間,所有的主動幀前都必須有。
SD1開始定界符,值l0H
SD2開始定界符,值68H
SD1開始定界符,值A2H
SD1開始定界符,值DCH LE信息字節(jié)長度。該長度包括DA, SA,FC和DATA_UNIT。
LEr重復信息字節(jié)長度。 DA目的地址
SA源地址 FC幀控制 DATA UNIT數(shù)據(jù)字段。在固定長度的幀中為8個字符,在可變數(shù)據(jù)字段長度的幀中由LE決定,最大246個字符。
FCS幀檢查順序 ED結束定界符,值16H。 SC短應答幀的單一字符,值E5H。
(3)地址
在幀首部的地址字符結構是這樣的:

地址位組的低7位為其所指示的站地址。這樣在不擴展的情況下就有127個站地址(0~126)可以提供給主站和從站(其中127是作為全局地址來用的)。
EXT位用來指示在DATA UNIT中有無地址擴展。為了效率的緣故,Profibus-DP的數(shù)據(jù)交換功能禁止了地址擴展。
(4)服務存取點SAP
ProfibuS-DP協(xié)議使用FDL的服務存取點SAP作為基本功能代碼。這個SAP有點類似于我們熟悉的TCP/IP協(xié)議中的端口:

在Profibus-DP協(xié)議中通常使用的幀格式如下,其中地址欄的最高位是1
4 幀的內容的轉化
一般說來,Profibus現(xiàn)場總線是主從結構的,Master和Slave之間是通過輪詢來通訊的。CAN也有主從結構的,但它的通訊方式是優(yōu)先級逐位仲裁的競爭式通訊(CSMA/MBA)。
如果把這兩種現(xiàn)場總線連在一起的話,大多數(shù)情況下應該是把CAN段作為Profibus的Slave。
CAN的幀比較短,每個幀都有嚴格的差錯控制,在每個CAN的幀中,數(shù)據(jù)域最長是8個字節(jié);而Profibus常用的有可變數(shù)據(jù)字段的單幀數(shù)據(jù)容量可達246字節(jié),但它的每個字節(jié)(UART字符)都有比較好的差錯控制。在這種轉化中我們需要集中考慮地址轉化和幀的拆分問題。
4.1 地址轉化
如前所述,Profibus-DP的站地址(DA/SA)在幀中用1個字節(jié)的低7位來表示;但是CAN協(xié)議的幀中卻沒有明顯的地址位,它是利用仲裁域中的11位(CAN2. OA)或29位(CAN2.OB)表示符ID來表示幀的有關接收信息,讓接受節(jié)點自己來確定是否接收。這樣,實際上的地址信息就應當包含在ID中了。CAN協(xié)議沒有規(guī)定信息標識符(ID)的分配,可以根據(jù)不同的應用使用不同的方法。確定標識符的分配非常重要,是高層協(xié)議、應用層協(xié)議的一個主要研究項目。
在本文中,為簡單起見,我們只采用CAN2. OA格式的幀。首先我們來研究其標識符的分配方法。世界上已經有很多現(xiàn)場總線的高層協(xié)議是基于CAN協(xié)議的,如CANopen, Modbus,DeviceNET等。出于研究方便,現(xiàn)在我們就采用“HiLon協(xié)議B”,協(xié)議。
下面對“HiLon協(xié)議B”作簡單介紹。
HiLon協(xié)議B是一個通用協(xié)議。該協(xié)議基于對稱型多主網絡結構,支持廣播和點對點傳送命令數(shù)據(jù)。命令數(shù)據(jù)包可長達256字節(jié)。
協(xié)議以CAN2. OA幀結構為基礎。下圖是幀報文格式,一個CAN2. OA標準幀由11位ID、1位RTR、4位DLC、數(shù)據(jù)區(qū)(最多8個字節(jié))組成。

PRI:保留位(可作優(yōu)先級位)。通常,保留位設置為1。保留位亦可作為優(yōu)先級位,這時1為低優(yōu)先級0為高優(yōu)先級而剩余的優(yōu)先級由源地址決定,低地址優(yōu)先級高。該保留功能可有效支持緊急信息傳送,如報警等。
source address:源地址,表示發(fā)送數(shù)據(jù)的節(jié)點地址,范圍只能設定為0~125。
TYPE:幀類型。見下表中的幀類型說明。
DLC:每幀字節(jié)數(shù)(1~8)

destination address:目標地址,表示接收數(shù)據(jù)的節(jié)點地址,范圍只能設定為0~125。
index:索引字節(jié)。對于單幀數(shù)據(jù),該字節(jié)表示傳輸數(shù)據(jù)的第一個字節(jié);對于多幀數(shù)據(jù),此字節(jié)表示索引字節(jié),即此幀數(shù)據(jù)在數(shù)據(jù)包中的位置。
data:數(shù)據(jù)。
Profibus有127個站地址,地址范圍是0~126,127是全局地址。
兩者的差距并不大。因為只是研究用,我們不妨把HilonB協(xié)議稍許修改,地址范圍擴充到0~126,這樣做,對整個CAN幀的長度和結構并無任何影響。
于是,我們就可以對所有的Profibus設備和CAN設備統(tǒng)一編址。整個系統(tǒng)里的站地址是唯一的,在幀轉化時我們只要把相應位的地址信息直接拷貝進去就是了。
4.2 幀的拆分和合并
要把profibus的長幀裝到CAN的短幀里去,就只能把Profibus的幀里的數(shù)據(jù)拆分成適合CAN的幀傳輸?shù)拈L度。
CAN幀里的數(shù)據(jù)域的長度最大只有8個字節(jié)。而且在我們給定的高層協(xié)議HiLon B中,又在數(shù)據(jù)域里拿了兩個字節(jié)作為目的地址和幀索引了,這樣就只剩下6個字節(jié)給我們傳輸數(shù)據(jù)。在最長的Profibus數(shù)據(jù)幀中,有246個數(shù)據(jù)字節(jié)。那么容納這個長幀的數(shù)據(jù)就需要246/6=41個CAN幀。剛才我們在CAN的幀里采用一個字節(jié)作為幀的索引字節(jié)。
我們在進行幀轉化時,把Profibus的幀拆分成每部分6字節(jié)后,加上目的地址和幀索引,就可以成為CAN幀中的內容了。目的節(jié)點收齊這些幀之后再把它們連接還原,就得到了要傳送給它的信息。
反向傳輸時,我們所要做的只是順序完全相反的事情。
4.3 幀的控制信息的轉換
Profibus數(shù)據(jù)幀中的其他控制信息還有 SD2 (68H),LE(數(shù)據(jù)長度),F(xiàn)C(幀控制八位組),F(xiàn)CS(幀檢查序列),ED(16H),這些信息都是根據(jù)幀本身的數(shù)據(jù)計算出來的,用于接收方對數(shù)據(jù)的識別。所以在協(xié)議轉換器正確的接收了幀之后,這些信息也就不需要了。接下來的工作就是把收到的信息編人CAN的幀,加上CAN的控制信息,計算出CRC序列,和在一起組成CAN的幀發(fā)到CAN節(jié)點上去;反過來,當協(xié)議轉換器要把CAN的幀轉換成Profibus的幀時,也是在正確地接收CAN的幀之后,只提取其數(shù)據(jù)內容,然后按照Profibus的協(xié)議生成一幅Profibus幀。
5 差錯控制
每種現(xiàn)場總線通訊協(xié)議幀都有它自己的錯誤檢測方式。我們在協(xié)議轉換的兩側,要按照它們各自的方法去檢測錯誤。我們的協(xié)議轉換器如果檢測到一個錯誤,應當攔截這個錯誤。
5.1 Profibus的錯誤檢測及控制
如前所述,Profibus幀中用的是UART字符。第10位是奇偶校驗位。檢測到任何一個字符的奇偶校驗出錯,我們就知道該字符有錯誤了。
Profibus的數(shù)據(jù)幀中有一個FCS位,是通過計算DA,SA,F(xiàn)C 和DATA UNIT的算術和獲得的一個檢驗八位組。這個八位組可供 我們在接收到一個幀時來檢驗數(shù)據(jù)的正確性。
另外,還有些能明顯被發(fā)現(xiàn)的錯誤:如超時運行、有缺陷的開始定界符和結束定界符、無效的幀長度、相應次數(shù)等。協(xié)議轉化器在Profibus總線一側,就是作為一個Profibus的節(jié)點在運行。當它不正確地接收到一個主動幀時,將不處理、應答或回答。在此時隙 時間期滿后,發(fā)起方將再重試此請求。僅在接收到一個有效回答或重試(多次)不成功后,發(fā)起方才算完成了此請求。同理,如果協(xié)議轉換器發(fā)送主動幀后沒有正確的收到一個應答幀,那么它也會不停的重試,直到一定次數(shù),才會把對方標記為不運行。
5.2 CAN的錯誤檢測及控制
5.2.1 錯誤類型
CAN協(xié)議列出了以下5種不同的錯誤類型。協(xié)議轉換器必須捕捉并處理這些錯誤。
(1)位錯誤
站單元在發(fā)送位的同時也對總線進行監(jiān)視。如果所發(fā)送的位值與所監(jiān)視的位值不相符合,則在此位時間里檢測到一個位錯誤(BIT ERROR)。
(2)填充錯誤
如果在使用位填充法進行編碼的信息中,出現(xiàn)了第6個連續(xù)相同的位電平時,將檢測到一個填充錯誤。
(3)CRC錯誤
CRC序列包括發(fā)送器的CRC計算結果。接收器計算CRC的方法與發(fā)送器相同。如果計算結果與接收到CRC序列的結果不相符,則檢測到一個CRC錯誤(CRC ERROR)。
(4)形式錯誤
當一個固定形式的位域含有1個或多個非法位,則檢測到一個“形式錯誤”(FORM ERROR)。
(5)應答錯誤
只要在ACK間隙(ACK SLOT)期間所監(jiān)視的位不為“顯性”,則發(fā)送器會檢測到一個“應答錯誤”(ACKNOWLEDGMENT ERROR)。
5.2.2 故障界定狀態(tài)
CAN定義了一個故障界定狀態(tài)機制。一個節(jié)點可能處于下列三種錯誤狀態(tài)中。
(1)錯誤主動當一個錯誤主動結點檢測到上述某個錯誤時,它將發(fā)送一個錯誤主動幀,該幀由6個連續(xù)的顯性位組成。這已發(fā)送覆蓋其他任何同時發(fā)送的幀,并導致其他節(jié)點都檢測到一個填充錯誤,并依次放棄當前幀。
(2)錯誤被動當一個錯誤被動節(jié)點檢測到上述的某一個錯誤時,它將發(fā)出一個錯誤被動幀。該幀由6個連續(xù)的隱性位組成。這個幀會被同時出現(xiàn)的其他發(fā)送所覆蓋,如果其他站點沒有檢測到這一錯誤,不會丟棄當前幀。
(3)離線
5.2.3 錯誤處理過程
為進行故障界定,我們的協(xié)議轉換器也應當設兩種計數(shù)器:發(fā)送錯誤計數(shù)器和接受錯誤計數(shù)器。然后,我們就可以把它作為一個普通的CAN接點參與到CAN網絡的運行,故障的處理方法也是一樣的。
(1)初始化錯誤計,數(shù)器的值等于0,節(jié)點開始錯誤主動狀態(tài),此時假設檢測到的所有錯誤都不是由該節(jié)點引起的。
(2)根據(jù)檢測到的錯誤類型使相應的計數(shù)器的值累加,有效的發(fā)送或接收又使這些計數(shù)器遞減,直至0。
(3)當這些計數(shù)器中的任何一個超出CAN定義的閾值時,該節(jié)點進人錯誤被動狀態(tài)。該節(jié)點被認為是導致錯誤的原因。
(4)當錯誤被動節(jié)點的發(fā)送及接收錯誤計數(shù)器值都減小到CAN定義的閾值以下時,節(jié)點重新進人錯誤主動狀態(tài)。
(5)當發(fā)送錯誤計數(shù)值超過CAN定義的另一個閾值時,該節(jié)點進人離線狀態(tài)。從離線狀態(tài)再進人錯誤主動狀態(tài)就需要人的干預了。
以上所述,是我們研究的現(xiàn)場總線協(xié)議轉換器在兩邊各自的現(xiàn)場總線范圍內的錯誤控制和處理方法。一定要先解決各自的錯誤,才能再進行幀的轉換。
從Pfofibus的幀轉換到CAN的幀時,就是在通過校驗確認幀的內容無誤后,才進行地址和內容的轉換,然后還要計算出該幀的CRC序列,供CAN段通訊用。反過來也是一樣。
6 結語
本文分析了Profibus和CAN的幀的特點,構思了在這兩種總線之間實現(xiàn)幀轉換的方法。但單純的幀轉換沒有意義,幀轉換只是現(xiàn)場總線的協(xié)議轉換中的一環(huán)。要實現(xiàn)幾種現(xiàn)場總線的協(xié)作,還有其他很多工作要做。
國際電工委員會IEC在1984年就開始籌備制定單一現(xiàn)場總線國際標準。然而,由于行業(yè)與地域發(fā)展等歷史原因,加上各公司和企業(yè)集團受自身利益的驅使,圍繞著現(xiàn)場總線技術的標準進行了一場大戰(zhàn),最后經過多方妥協(xié),于1999年年底通過了包含F(xiàn)F,Profibus等八種總線在內的IEC61158,沒有實現(xiàn)制定單一標準的目標。這個結局表明,在今后相當長一段時間內多種現(xiàn)場,總線將并存,控制網絡的系統(tǒng)集成與信息集成會面臨困難的復雜局面。無論是最終用戶還是制造商,普遍都在關注現(xiàn)場總線技術的發(fā)展新動向,都在尋求高性能低成本的解決方案。