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