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