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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于AVR ATmega128的工業(yè)網(wǎng)關(guān)的實(shí)現(xiàn)

          基于AVR ATmega128的工業(yè)網(wǎng)關(guān)的實(shí)現(xiàn)

          作者: 時(shí)間:2008-01-17 來(lái)源:網(wǎng)絡(luò) 收藏

          摘要:介紹一種橋接不同現(xiàn)場(chǎng)總線(xiàn)網(wǎng)絡(luò)的解決方案。該方案采用高性能為其控制核心。采用ModBus/RTU協(xié)議與計(jì)算機(jī)通信,通過(guò)多處理器通信模式與其他分控設(shè)備通信。本方案經(jīng)過(guò)在實(shí)際中運(yùn)行,證明其設(shè)計(jì)是可行的。
          關(guān)鍵詞、Modbus/RTU、AVR多處理器通信模式、CRC16

          1 引言

          如今,電子技術(shù)發(fā)展迅猛,尤其是單片機(jī)已廣泛地應(yīng)用于通信、交通、家用電器、便攜式智能儀表、機(jī)器人制作等領(lǐng)域,產(chǎn)品功能、精度和質(zhì)量大幅度提高,且電路簡(jiǎn)單,故障率低,可靠性高,成本低廉。在單片機(jī)某些應(yīng)用方面,對(duì)網(wǎng)絡(luò)靈活性和多樣性需求的不斷增加,網(wǎng)絡(luò)之間的互聯(lián)顯得越來(lái)越重要。為橋接不同現(xiàn)場(chǎng)總線(xiàn)網(wǎng)絡(luò)提供了一種解決方案。

          2 網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)

          網(wǎng)絡(luò)連接的拓?fù)浣Y(jié)構(gòu)如圖1所示。

          (圖1)

          RS-232C是廣泛應(yīng)用的串口通信標(biāo)準(zhǔn),但因其推出較早,在現(xiàn)代網(wǎng)絡(luò)通信中已暴露出數(shù)據(jù)傳輸速度慢、傳輸距離短、接口處各信號(hào)間容易產(chǎn)生干擾等明顯的缺點(diǎn)。RS-485是一種多發(fā)送器的電路標(biāo)準(zhǔn),它擴(kuò)展了RS-422A的性能,允許雙絞線(xiàn)上一個(gè)發(fā)送器驅(qū)動(dòng)32個(gè)負(fù)載設(shè)備,負(fù)載設(shè)備可以是被動(dòng)發(fā)送器、接收器或收發(fā)器,RS-485最大傳輸距離為1200m,最大傳送速率可達(dá)10Mb/s。因此,RS-485在遠(yuǎn)程通信和多機(jī)總線(xiàn)系統(tǒng)中具有很大的吸引力。

          如圖1所示,將AVR ATmega128的標(biāo)準(zhǔn)的通用異步接收/發(fā)送通信接口0(UART0)轉(zhuǎn)換成半雙工485串口。同樣,PC機(jī)的RS-232C串口也轉(zhuǎn)換成485串口。它們之間采用Modbus/RTU協(xié)議進(jìn)行通信,AVR ATmega128作為從設(shè)備。AVR ATmega128與其下行的AVR分控設(shè)備通過(guò)485串行總線(xiàn)并在一起。它們之間采用AVR單片機(jī)特有的多機(jī)通信方式進(jìn)行通信。其中AVR ATmega128是主控設(shè)備,其他的AVR分控設(shè)備是從控設(shè)備。

          3 AVR ATmega128單片機(jī)

          ATmega128單片機(jī)為AVR RISC結(jié)構(gòu)的8位低功耗CMOS微處理器。由于其先進(jìn)的指令集以及單周期指令執(zhí)行時(shí)間,ATmega128單片機(jī)的數(shù)據(jù)吞吐率高達(dá)1MIPS/MHz,故可以緩減系統(tǒng)的功耗和處理速度之間的矛盾。AVR單片機(jī)內(nèi)核具有豐富的指令集和32個(gè)通用工作寄存器。所有的寄存器都直接與算術(shù)邏輯單元(ALU)相連接,使得一條指令可以在一個(gè)時(shí)鐘周期內(nèi)同時(shí)訪(fǎng)問(wèn)兩個(gè)獨(dú)立的寄存器。這種結(jié)構(gòu)大大提高了代碼效率,并且具有比普通的復(fù)雜指令集微處理器高10倍的數(shù)據(jù)吞吐量。ATmega128單片機(jī)內(nèi)部帶有128KB的系統(tǒng)內(nèi)可編程Flash程序存儲(chǔ)器,具有在寫(xiě)的過(guò)程中還可以讀的能力,即同時(shí)讀寫(xiě)(RWW); 4KB的EEPROM;4KB的SRAM;53個(gè)通用I/O端口線(xiàn);32個(gè)通用工作寄存器;實(shí)時(shí)時(shí)鐘(RTC);4個(gè)靈活的具有比較模式和PWM功能的定時(shí)器/記數(shù)器(T/C);2個(gè)USART;面向字節(jié)的兩線(xiàn)接口(TWI);8通道10位ADC;可選的可編程增益;片內(nèi)振蕩器的可編程看門(mén)狗定時(shí)器;串行外圍設(shè)備接口(SPI);與IEEE 1149.1規(guī)范兼容的JTAG測(cè)試接口,此接口同時(shí)還可以用于片上調(diào)試;6種可以通過(guò)軟件選擇的省電模式。

          4 Modbus通信協(xié)議

          Modbus協(xié)議是應(yīng)用于電子控制器上的一種通用語(yǔ)言。通過(guò)此協(xié)議,控制器相互之間、控制器經(jīng)由網(wǎng)絡(luò)(例如以太網(wǎng))和其他設(shè)備之間可以通信。它已經(jīng)成為一通用標(biāo)準(zhǔn)。有了它,不同廠商生產(chǎn)的控制設(shè)備可以連成網(wǎng)絡(luò),進(jìn)行集中監(jiān)控。此協(xié)議定義了一個(gè)控制器能認(rèn)識(shí)使用的消息結(jié)構(gòu),而不管它們是經(jīng)過(guò)何種網(wǎng)絡(luò)進(jìn)行通信的。它描述了一控制器請(qǐng)求訪(fǎng)問(wèn)其它設(shè)備的過(guò)程,如果回應(yīng)來(lái)自其它設(shè)備的請(qǐng)求,以及怎樣偵測(cè)錯(cuò)誤并記錄。它制定了消息域格局和內(nèi)容的公共格式。當(dāng)在一Modbus網(wǎng)絡(luò)上通信時(shí),此協(xié)議決定了每個(gè)控制器須要知道它們的設(shè)備地址,識(shí)別按地址發(fā)來(lái)的消息,決定要產(chǎn)生何種行動(dòng)。如果需要回應(yīng),控制器將生成反饋信息并用Modbus協(xié)議發(fā)出。在其它網(wǎng)絡(luò)上,包含了Modbus協(xié)議的消息轉(zhuǎn)換為在此網(wǎng)絡(luò)上使用的幀或包結(jié)構(gòu)。這種轉(zhuǎn)換也擴(kuò)展了根據(jù)具體的網(wǎng)絡(luò)解決節(jié)地址、路由路徑及錯(cuò)誤檢測(cè)的方法。

          Modbus網(wǎng)絡(luò)能設(shè)置為兩種傳輸模式(ASCII或RTU)中的任何一種進(jìn)行通信。用戶(hù)選擇想要的模式,包括串口通信參數(shù)(波特率、校驗(yàn)方式等),在配置每個(gè)控制器的時(shí)候,在一個(gè)Modbus網(wǎng)絡(luò)上的所有設(shè)備都必須選擇相同的傳輸模式和串口參數(shù)。

          當(dāng)控制器設(shè)為在Modbus網(wǎng)絡(luò)上以RTU(遠(yuǎn)程終端單元)模式通信,在消息中的每個(gè)8Bit字節(jié)包含兩個(gè)4Bit的十六進(jìn)制字符。這種方式的主要優(yōu)點(diǎn)是:在同樣的波特率下,可比ASCII方式傳送更多的數(shù)據(jù)。

          代碼系統(tǒng):

          8位二進(jìn)制,十六進(jìn)制數(shù)0...9,A...F

          消息中的每個(gè)8位域都是一個(gè)兩個(gè)十六進(jìn)制字符組成

          每個(gè)字節(jié)的位:

          1個(gè)起始位

          8個(gè)數(shù)據(jù)位,最小的有效位先發(fā)送

          1個(gè)奇偶校驗(yàn)位,無(wú)校驗(yàn)則無(wú)

          1個(gè)停止位(有校驗(yàn)時(shí)),2個(gè)Bit(無(wú)校驗(yàn)時(shí))

          錯(cuò)誤檢測(cè)域

          CRC(循環(huán)冗長(zhǎng)檢測(cè))

          使用RTU模式,消息發(fā)送至少要以3.5個(gè)字符時(shí)間的停頓間隔開(kāi)始。在網(wǎng)絡(luò)下多樣的字符時(shí)間,這是最容易的(如下圖2所示)。傳輸?shù)牡谝粋€(gè)域是設(shè)備地址??梢允褂玫膫鬏斪址鞘M(jìn)制的0…9,A…F。網(wǎng)絡(luò)設(shè)備不斷偵測(cè)網(wǎng)絡(luò)總線(xiàn),包括停頓間隔時(shí)間內(nèi)。當(dāng)?shù)谝挥颍ǖ刂酚颍┙邮盏?,每個(gè)設(shè)備都進(jìn)行解碼以判斷是否發(fā)往自己的。在最后一個(gè)傳輸字符之后,一個(gè)至少3.5個(gè)字符時(shí)間的停頓標(biāo)定了消息的結(jié)束。一個(gè)新的消息可在停頓后開(kāi)始。

          整個(gè)消息幀必須作為一連續(xù)的流傳輸。如果在幀完成之前有超過(guò) 3.5個(gè)字符時(shí)間的停頓時(shí)間,接收設(shè)備將刷新不完整的消息并假定下一字節(jié)是一個(gè)新消息的地址域。同樣地,如果一個(gè)新消息在小于3.5個(gè)字符時(shí)間內(nèi)接著前個(gè)消息開(kāi)始,接收的設(shè)備將認(rèn)為它是前一消息的延續(xù)。這將導(dǎo)致一個(gè)錯(cuò)誤,因?yàn)樵谧詈蟮腃RC域的值不可能是正確的。一典型的RTU消息幀如下所示:

          起始位

          設(shè)備地址

          功能代碼

          數(shù)據(jù)

          CRC校驗(yàn)

          結(jié)束符

          T1-T2-T3-T4

          8Bit

          8Bit

          N個(gè)8Bit

          16Bit

          T1-T2-T3-T4

          當(dāng)消息在標(biāo)準(zhǔn)的Modbus系列網(wǎng)絡(luò)傳輸時(shí),每個(gè)字符或字節(jié)以如下方式發(fā)送(從左到右):最低有效位...最高有效位。

          使用RTU字符幀時(shí),位的序列是:

          有奇偶校驗(yàn)

          啟始位

          1

          2

          3

          4

          5

          6

          7

          8

          奇偶位

          停止位

          無(wú)奇偶校驗(yàn)

          啟始位

          1

          2

          3

          4

          5

          6

          7

          8

          停止位

          停止位

          5 CRC16檢測(cè)

          循環(huán)冗余碼CRC檢驗(yàn)技術(shù)廣泛應(yīng)用于測(cè)控及通信領(lǐng)域。CRC計(jì)算可以靠專(zhuān)用的硬件來(lái),但是對(duì)于低成本的微控制器系統(tǒng),在沒(méi)有硬件支持下CRC檢驗(yàn),關(guān)鍵的問(wèn)題就是如何通過(guò)軟件來(lái)完成CRC計(jì)算,也就是CRC算法的問(wèn)題。計(jì)算CRC16有三種算法:按位計(jì)算CRC、字節(jié)計(jì)算CRC、半字節(jié)計(jì)算CRC。這三種算法它們稍有不同,按位求法速度較慢,但占用最小的內(nèi)存空間;按字節(jié)查表求CRC的方法速度較快,但占用較大的內(nèi)存;按半字節(jié)查表求CRC的方法是前兩者的均衡,即不會(huì)占用太多的內(nèi)存,同時(shí)速度又不至于太慢,比較適合8位小內(nèi)存的單片機(jī)的應(yīng)用場(chǎng)合。

          6 AVR單片機(jī)多處理器通信模式

          置位UCSRA 的多處理器通信模式位(MPCM) 可以對(duì)USART 接收器接收到的數(shù)據(jù)幀進(jìn)行過(guò)濾。那些沒(méi)有地址信息的幀將被忽略,也不會(huì)存入接收緩沖器。在一個(gè)多處理器系統(tǒng)中,處理器通過(guò)同樣的串行總線(xiàn)進(jìn)行通信,這種過(guò)濾有效的減少了需要CPU 處理的數(shù)據(jù)幀的數(shù)量。MPCM位的設(shè)置不影響發(fā)送器的工作,但在使用多處理器通信模式的系統(tǒng)中,它的使用方法會(huì)有所不同。如果接收器所接收的數(shù)據(jù)幀長(zhǎng)度為5 到8 位,那么第一個(gè)停止位表示這一幀包含的是數(shù)據(jù)還是地址信息。如果接收器所接收的數(shù)據(jù)幀長(zhǎng)度為9 位,那么由第9 位(RXB8) 來(lái)確定是數(shù)據(jù)還是地址信息。如果確定幀類(lèi)型的位( 第一個(gè)停止位或第9 個(gè)數(shù)據(jù)位) 為1,那么這是地址幀,否則為數(shù)據(jù)幀。在多處理器通信模式下,多個(gè)從處理器可以從一個(gè)主處理器接收數(shù)據(jù)。首先要通過(guò)解碼地址幀來(lái)確定所尋址的是哪一個(gè)處理器。如果尋址到某一個(gè)處理器,它將正常接收后續(xù)的數(shù)據(jù),而其他的從處理器會(huì)忽略這些幀直到接收到另一個(gè)地址幀。

          對(duì)于一個(gè)作為主機(jī)的處理器來(lái)說(shuō),它可以使用9 位數(shù)據(jù)幀格式(UCSZ = 7)。如果傳輸?shù)氖且粋€(gè)地址幀(TXB8 = 1) 就將第9 位(TXB8) 置1,如果是一個(gè)數(shù)據(jù)幀(TXB = 0) 就將它清零。在這種幀格式下,從處理器必須工作于9 位數(shù)據(jù)幀格式。

          下面即為在多處理器通信模式下進(jìn)行數(shù)據(jù)交換的步驟:

          5.1 所有從處理器都工作在多處理器通信模式(UCSRA 寄存器的MPCM 置位)。

          5.2 主處理器發(fā)送地址幀后,所有從處理器都會(huì)接收并讀取此幀。從處理器UCSRA寄存器的RXC 正常置位。

          5.3 每一個(gè)從處理器都會(huì)讀取UDR 寄存器的內(nèi)容已確定自己是否被選中。如果選中,就清零UCSRA 的MPCM 位,否則它將等待下一個(gè)地址字節(jié)的到來(lái),并保持MPCM 為1。

          5.4 被尋址的從處理器將接收所有的數(shù)據(jù)幀,直到收到一個(gè)新的地址幀。而那些保持MPCM 位為1 的從處理器將忽略這些數(shù)據(jù)。

          5.5被尋址的處理器接收到最后一個(gè)數(shù)據(jù)幀后,它將置位MPCM,并等待主處理器發(fā)送下一個(gè)地址幀。然后第2 步之后的步驟重復(fù)進(jìn)行。

          使用5 至8 比特的幀格式是可以的,但是不實(shí)際,因?yàn)榻邮掌鞅仨氃谑褂胣 和n+1 幀格式之間進(jìn)行切換。由于接收器和發(fā)送器使用相同的字符長(zhǎng)度設(shè)置,這種設(shè)置使得全雙工操作變得很困難。如果使用5 至8 比特的幀格式,發(fā)送器應(yīng)該設(shè)置兩個(gè)停止位(USBS = 1),其中的第一個(gè)停止位被用于判斷幀類(lèi)型。不要使用讀- 修改- 寫(xiě)指令(SBI 和CBI) 來(lái)操作MPCM 位。MPCM 和TXC 標(biāo)志使用相同的I/O 單元,使用SBI 或CBI 指令可能會(huì)不小心將它清零。在本設(shè)計(jì)方案中,AVR ATmega128作為多處理器通信模式中的主處理器,其他的AVR分控設(shè)備做為從處理器。

          7結(jié)束語(yǔ)

          采用本方案所介紹的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),由于AVR ATmega128與上位機(jī)之間通信是Modbus標(biāo)準(zhǔn)協(xié)議,而與其他的AVR分控設(shè)備之間采用AVR單片機(jī)所特有的多處理器通信。因此,在保證系統(tǒng)開(kāi)放性的同時(shí),又能保證數(shù)據(jù)處理效率的提高。在交通控制、智能化停車(chē)場(chǎng)管理系統(tǒng)等方面,本設(shè)計(jì)方案有一定的參考價(jià)值。

          參考文獻(xiàn)

          [1] 陳冬云,杜敬倉(cāng),任柯燕. ATmega 128單片機(jī)原理與開(kāi)發(fā)指導(dǎo).機(jī)械工業(yè)出版社,2006.

          [2] Richard Barnett,Larry O’Cull,Sarah Cox. 嵌入式C編程與Atmel AVR.北京:清華大學(xué)出版社,2003.

          [3] Modicon.Modbus Protocol Reference Guide.1996

          [4] 朱懿,蔣念平.ModBus協(xié)議在工業(yè)控制系統(tǒng)中的應(yīng)用.微計(jì)算機(jī)信息,2006,4-1:118-120.



          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(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); })();