<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > Profibus和CAN現(xiàn)場(chǎng)總線的幀轉(zhuǎn)換

          Profibus和CAN現(xiàn)場(chǎng)總線的幀轉(zhuǎn)換

          作者: 時(shí)間:2016-12-20 來源:網(wǎng)絡(luò) 收藏

          CAN幀里的數(shù)據(jù)域的長(zhǎng)度最大只有8個(gè)字節(jié)。而且在我們給定的高層協(xié)議HiLon B中,又在數(shù)據(jù)域里拿了兩個(gè)字節(jié)作為目的地址和幀索引了,這樣就只剩下6個(gè)字節(jié)給我們傳輸數(shù)據(jù)。在最長(zhǎng)的Profibus數(shù)據(jù)幀中,有246個(gè)數(shù)據(jù)字節(jié)。那么容納這個(gè)長(zhǎng)幀的數(shù)據(jù)就需要246/6=41個(gè)CAN幀。剛才我們?cè)贑AN的幀里采用一個(gè)字節(jié)作為幀的索引字節(jié)。

          我們?cè)谶M(jìn)行幀轉(zhuǎn)化時(shí),把Profibus的幀拆分成每部分6字節(jié)后,加上目的地址和幀索引,就可以成為CAN幀中的內(nèi)容了。目的節(jié)點(diǎn)收齊這些幀之后再把它們連接還原,就得到了要傳送給它的信息。

          反向傳輸時(shí),我們所要做的只是順序完全相反的事情。

          4.3 幀的控制信息的轉(zhuǎn)換

          Profibus數(shù)據(jù)幀中的其他控制信息還有 SD2 (68H),LE(數(shù)據(jù)長(zhǎng)度),F(xiàn)C(幀控制八位組),F(xiàn)CS(幀檢查序列),ED(16H),這些信息都是根據(jù)幀本身的數(shù)據(jù)計(jì)算出來的,用于接收方對(duì)數(shù)據(jù)的識(shí)別。所以在協(xié)議轉(zhuǎn)換器正確的接收了幀之后,這些信息也就不需要了。接下來的工作就是把收到的信息編人CAN的幀,加上CAN的控制信息,計(jì)算出CRC序列,和在一起組成CAN的幀發(fā)到CAN節(jié)點(diǎn)上去;反過來,當(dāng)協(xié)議轉(zhuǎn)換器要把CAN的幀轉(zhuǎn)換成Profibus的幀時(shí),也是在正確地接收CAN的幀之后,只提取其數(shù)據(jù)內(nèi)容,然后按照Profibus的協(xié)議生成一幅Profibus幀。

          5、差錯(cuò)控制

          每種現(xiàn)場(chǎng)總線通訊協(xié)議幀都有它自己的錯(cuò)誤檢測(cè)方式。我們?cè)趨f(xié)議轉(zhuǎn)換的兩側(cè),要按照它們各自的方法去檢測(cè)錯(cuò)誤。我們的協(xié)議轉(zhuǎn)換器如果檢測(cè)到一個(gè)錯(cuò)誤,應(yīng)當(dāng)攔截這個(gè)錯(cuò)誤。

          5.1 Profibus的錯(cuò)誤檢測(cè)及控制

          如前所述,Profibus幀中用的是UART字符。第10位是奇偶校驗(yàn)位。檢測(cè)到任何一個(gè)字符的奇偶校驗(yàn)出錯(cuò),我們就知道該字符有錯(cuò)誤了。

          Profibus的數(shù)據(jù)幀中有一個(gè)FCS位,是通過計(jì)算DA,SA,F(xiàn)C 和DATA UNIT的算術(shù)和獲得的一個(gè)檢驗(yàn)八位組。這個(gè)八位組可供 我們?cè)诮邮盏揭粋€(gè)幀時(shí)來檢驗(yàn)數(shù)據(jù)的正確性。

          另外,還有些能明顯被發(fā)現(xiàn)的錯(cuò)誤:如超時(shí)運(yùn)行、有缺陷的開始定界符和結(jié)束定界符、無效的幀長(zhǎng)度、相應(yīng)次數(shù)等。協(xié)議轉(zhuǎn)化器在Profibus總線一側(cè),就是作為一個(gè)Profibus的節(jié)點(diǎn)在運(yùn)行。當(dāng)它不正確地接收到一個(gè)主動(dòng)幀時(shí),將不處理、應(yīng)答或回答。在此時(shí)隙 時(shí)間期滿后,發(fā)起方將再重試此請(qǐng)求。僅在接收到一個(gè)有效回答或重試(多次)不成功后,發(fā)起方才算完成了此請(qǐng)求。同理,如果協(xié)議轉(zhuǎn)換器發(fā)送主動(dòng)幀后沒有正確的收到一個(gè)應(yīng)答幀,那么它也會(huì)不停的重試,直到一定次數(shù),才會(huì)把對(duì)方標(biāo)記為不運(yùn)行。

          5.2 CAN的錯(cuò)誤檢測(cè)及控制

          5.2.1 錯(cuò)誤類型

          CAN協(xié)議列出了以下5種不同的錯(cuò)誤類型。協(xié)議轉(zhuǎn)換器必須捕捉并處理這些錯(cuò)誤。

          (1)位錯(cuò)誤

          站單元在發(fā)送位的同時(shí)也對(duì)總線進(jìn)行監(jiān)視。如果所發(fā)送的位值與所監(jiān)視的位值不相符合,則在此位時(shí)間里檢測(cè)到一個(gè)位錯(cuò)誤(BIT ERROR)。

          (2)填充錯(cuò)誤

          如果在使用位填充法進(jìn)行編碼的信息中,出現(xiàn)了第6個(gè)連續(xù)相同的位電平時(shí),將檢測(cè)到一個(gè)填充錯(cuò)誤。

          (3)CRC錯(cuò)誤

          CRC序列包括發(fā)送器的CRC計(jì)算結(jié)果。接收器計(jì)算CRC的方法與發(fā)送器相同。如果計(jì)算結(jié)果與接收到CRC序列的結(jié)果不相符,則檢測(cè)到一個(gè)CRC錯(cuò)誤(CRC ERROR)。

          (4)形式錯(cuò)誤

          當(dāng)一個(gè)固定形式的位域含有1個(gè)或多個(gè)非法位,則檢測(cè)到一個(gè)“形式錯(cuò)誤”(FORM ERROR)。

          (5)應(yīng)答錯(cuò)誤

          只要在ACK間隙(ACK SLOT)期間所監(jiān)視的位不為“顯性”,則發(fā)送器會(huì)檢測(cè)到一個(gè)“應(yīng)答錯(cuò)誤”(ACKNOWLEDGMENT ERROR)。

          5.2.2 故障界定狀態(tài)

          CAN定義了一個(gè)故障界定狀態(tài)機(jī)制。一個(gè)節(jié)點(diǎn)可能處于下列三種錯(cuò)誤狀態(tài)中。

          (1)錯(cuò)誤主動(dòng)當(dāng)一個(gè)錯(cuò)誤主動(dòng)結(jié)點(diǎn)檢測(cè)到上述某個(gè)錯(cuò)誤時(shí),它將發(fā)送一個(gè)錯(cuò)誤主動(dòng)幀,該幀由6個(gè)連續(xù)的顯性位組成。這已發(fā)送覆蓋其他任何同時(shí)發(fā)送的幀,并導(dǎo)致其他節(jié)點(diǎn)都檢測(cè)到一個(gè)填充錯(cuò)誤,并依次放棄當(dāng)前幀。

          (2)錯(cuò)誤被動(dòng)當(dāng)一個(gè)錯(cuò)誤被動(dòng)節(jié)點(diǎn)檢測(cè)到上述的某一個(gè)錯(cuò)誤時(shí),它將發(fā)出一個(gè)錯(cuò)誤被動(dòng)幀。該幀由6個(gè)連續(xù)的隱性位組成。這個(gè)幀會(huì)被同時(shí)出現(xiàn)的其他發(fā)送所覆蓋,如果其他站點(diǎn)沒有檢測(cè)到這一錯(cuò)誤,不會(huì)丟棄當(dāng)前幀。

          (3)離線

          5.2.3 錯(cuò)誤處理過程

          為進(jìn)行故障界定,我們的協(xié)議轉(zhuǎn)換器也應(yīng)當(dāng)設(shè)兩種計(jì)數(shù)器:發(fā)送錯(cuò)誤計(jì)數(shù)器和接受錯(cuò)誤計(jì)數(shù)器。然后,我們就可以把它作為一個(gè)普通的CAN接點(diǎn)參與到CAN網(wǎng)絡(luò)的運(yùn)行,故障的處理方法也是一樣的。

          (1)初始化錯(cuò)誤計(jì),數(shù)器的值等于0,節(jié)點(diǎn)開始錯(cuò)誤主動(dòng)狀態(tài),此時(shí)假設(shè)檢測(cè)到的所有錯(cuò)誤都不是由該節(jié)點(diǎn)引起的。

          (2)根據(jù)檢測(cè)到的錯(cuò)誤類型使相應(yīng)的計(jì)數(shù)器的值累加,有效的發(fā)送或接收又使這些計(jì)數(shù)器遞減,直至0。

          (3)當(dāng)這些計(jì)數(shù)器中的任何一個(gè)超出CAN定義的閾值時(shí),該節(jié)點(diǎn)進(jìn)人錯(cuò)誤被動(dòng)狀態(tài)。該節(jié)點(diǎn)被認(rèn)為是導(dǎo)致錯(cuò)誤的原因。

          (4)當(dāng)錯(cuò)誤被動(dòng)節(jié)點(diǎn)的發(fā)送及接收錯(cuò)誤計(jì)數(shù)器值都減小到CAN定義的閾值以下時(shí),節(jié)點(diǎn)重新進(jìn)人錯(cuò)誤主動(dòng)狀態(tài)。

          (5)當(dāng)發(fā)送錯(cuò)誤計(jì)數(shù)值超過CAN定義的另一個(gè)閾值時(shí),該節(jié)點(diǎn)進(jìn)人離線狀態(tài)。從離線狀態(tài)再進(jìn)人錯(cuò)誤主動(dòng)狀態(tài)就需要人的干預(yù)了。

          以上所述,是我們研究的現(xiàn)場(chǎng)總線協(xié)議轉(zhuǎn)換器在兩邊各自的現(xiàn)場(chǎng)總線范圍內(nèi)的錯(cuò)誤控制和處理方法。一定要先解決各自的錯(cuò)誤,才能再進(jìn)行幀的轉(zhuǎn)換。

          從Pfofibus的幀轉(zhuǎn)換到CAN的幀時(shí),就是在通過校驗(yàn)確認(rèn)幀的內(nèi)容無誤后,才進(jìn)行地址和內(nèi)容的轉(zhuǎn)換,然后還要計(jì)算出該幀的CRC序列,供CAN段通訊用。反過來也是一樣。

          6、結(jié)語

          本文分析了Profibus和CAN的幀的特點(diǎn),構(gòu)思了在這兩種總線之間實(shí)現(xiàn)幀轉(zhuǎn)換的方法。但單純的幀轉(zhuǎn)換沒有意義,幀轉(zhuǎn)換只是現(xiàn)場(chǎng)總線的協(xié)議轉(zhuǎn)換中的一環(huán)。要實(shí)現(xiàn)幾種現(xiàn)場(chǎng)總線的協(xié)作,還有其他很多工作要做。

          國(guó)際電工委員會(huì)IEC在1984年就開始籌備制定單一現(xiàn)場(chǎng)總線國(guó)際標(biāo)準(zhǔn)。然而,由于行業(yè)與地域發(fā)展等歷史原因,加上各公司和企業(yè)集團(tuán)受自身利益的驅(qū)使,圍繞著現(xiàn)場(chǎng)總線技術(shù)的標(biāo)準(zhǔn)進(jìn)行了一場(chǎng)大戰(zhàn),最后經(jīng)過多方妥協(xié),于1999年年底通過了包含F(xiàn)F,Profibus等八種總線在內(nèi)的IEC61158,沒有實(shí)現(xiàn)制定單一標(biāo)準(zhǔn)的目標(biāo)。這個(gè)結(jié)局表明,在今后相當(dāng)長(zhǎng)一段時(shí)間內(nèi)多種現(xiàn)場(chǎng),總線將并存,控制網(wǎng)絡(luò)的系統(tǒng)集成與信息集成會(huì)面臨困難的復(fù)雜局面。無論是最終用戶還是制造商,普遍都在關(guān)注現(xiàn)場(chǎng)總線技術(shù)的發(fā)展新動(dòng)向,都在尋求高性能低成本的解決方案。


          上一頁(yè) 1 2 3 下一頁(yè)

          關(guān)鍵詞: ProfibusCAN現(xiàn)場(chǎng)總線幀轉(zhuǎn)

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();