在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<abbr id="27omo"></abbr>

<menu id="27omo"><dl id="27omo"></dl></menu>
    • <label id="27omo"><tt id="27omo"></tt></label>

      關(guān) 閉

      新聞中心

      EEPW首頁 > 工控自動化 > 設(shè)計(jì)應(yīng)用 > Modbus RTU協(xié)議在MCF51QE128上的實(shí)現(xiàn)

      Modbus RTU協(xié)議在MCF51QE128上的實(shí)現(xiàn)

      作者: 時間:2008-07-21 來源:網(wǎng)絡(luò) 收藏

        工業(yè)控制已從單機(jī)控制走向集中監(jiān)控、集散控制,如今已進(jìn)入網(wǎng)絡(luò)集約制造時代。工業(yè)控制器連網(wǎng)也為網(wǎng)絡(luò)管理提供了方便。就是工業(yè)控制器的網(wǎng)絡(luò)協(xié)議中的一種。協(xié)議是應(yīng)用于電子控制器上的一種。通過此協(xié)議,控制器相互之間、控制器經(jīng)由網(wǎng)絡(luò)(例如以太網(wǎng))和其他設(shè)備之間可以通信。它已經(jīng)成為主流的工業(yè)標(biāo)準(zhǔn)之一。不同廠商生產(chǎn)的控制設(shè)備通過協(xié)議可以連成工業(yè)網(wǎng)絡(luò),進(jìn)行集中監(jiān)控。

        Modbus

        1 通信傳送方式

        每一個數(shù)據(jù)包括:每個的位、1個起始位、8個數(shù)據(jù)位、最小的有效位先發(fā)送、1個奇偶校驗(yàn)位(無校驗(yàn)則無)、1個停止位(有校驗(yàn)時)、2個停止位(無校驗(yàn)時)。

        在模式下每個的格式(11bit)如下:

        編碼系統(tǒng):8位二進(jìn)制

        字節(jié)組成:1bit起始位、8bit數(shù)據(jù)位,最低位最先發(fā)送、1bit奇偶校驗(yàn)位、1bit停止位(或者沒奇偶校驗(yàn)位,就發(fā)送一個附加的停止位)。

        2 數(shù)據(jù)幀結(jié)構(gòu)

        地址碼:地址碼為通信傳送的第一字節(jié)。這字節(jié)表明由用戶設(shè)定地址碼的從機(jī)將接收由主機(jī)發(fā)送來的信息。并且每個從機(jī)都有唯一的地址碼,并且響應(yīng)回送均以各自的地址碼開始。主機(jī)發(fā)送的地址碼表明將發(fā)送到的從機(jī)地址,而從機(jī)發(fā)送的地址碼表明回送的從機(jī)地址。

        :通信傳送的第二字節(jié)。ModBus定義功能號為1~127。根據(jù)實(shí)際需要只利用其中的一部分。作為主機(jī)請求發(fā)送,通過告訴從機(jī)執(zhí)行什么動作。作為從機(jī)響應(yīng),從機(jī)發(fā)送的功能碼與從主機(jī)發(fā)送來的功能碼一樣,并表明從機(jī)已響應(yīng)主機(jī)進(jìn)行操作。如果從機(jī)發(fā)送的功能碼的最高位為1,則表明從機(jī)沒有響應(yīng)操作或發(fā)送出錯。

        表1 每一個完整的數(shù)據(jù)幀構(gòu)成

        

        數(shù)據(jù)區(qū):數(shù)據(jù)區(qū)根據(jù)不同的功能碼而不同。數(shù)據(jù)區(qū)可以是實(shí)際數(shù)值、設(shè)置點(diǎn)、主機(jī)發(fā)送給從機(jī)或從機(jī)發(fā)送給主機(jī)的地址。

        碼:二字節(jié)的錯誤檢測碼。冗余循環(huán)碼檢查()包含兩字節(jié),即16位二進(jìn)制。碼由發(fā)送設(shè)備計(jì)算,放置于發(fā)送信息的尾部。接收信息的設(shè)備再重新計(jì)算接收到信息的CRC碼,比較計(jì)算得到的CRC碼是否與接收到的相符,如果兩者不相符,則表明出錯。CRC碼的計(jì)算方法是,先預(yù)置16位寄存器全為1。再逐步把每8位數(shù)據(jù)信息進(jìn)行處理。在進(jìn)行CRC碼計(jì)算時只用8位數(shù)據(jù)位、起始位及停止位,如有奇偶校驗(yàn)位的話也包括奇偶校驗(yàn)位,都不參與CRC碼計(jì)算。

        在計(jì)算CRC碼時,8位數(shù)據(jù)與寄存器的數(shù)據(jù)相異或,得到的結(jié)果向低位移一位,用0填補(bǔ)最高位。再檢查最低位,如果最低位為1,把寄存器的內(nèi)容與預(yù)置數(shù)相異或,如果最低位為0,不進(jìn)行異或運(yùn)算。

        這個過程一直重復(fù)8次。第8次移位后,下一個8位再與現(xiàn)在寄存器的內(nèi)容相異或,這個過程與以上一樣重復(fù)8次。當(dāng)所有的數(shù)據(jù)信息處理完后,最后寄存器的內(nèi)容即為CRC碼值。CRC碼中的數(shù)據(jù)發(fā)送、接收時低字節(jié)在前。在實(shí)際應(yīng)用中,為了提高運(yùn)算速度,采用了查表的方法取代計(jì)算方法。

        3 Modbus 數(shù)據(jù)幀結(jié)構(gòu)

        在模式下,每一個數(shù)據(jù)幀之間的間隔至少是3.5個字符位。一個完整的數(shù)據(jù)幀必須要連續(xù)的傳送,當(dāng)一幀消息中兩字節(jié)間的間距大于1.5字符位時,此數(shù)據(jù)幀錯誤,被接受方放棄。

        當(dāng)通信波特率小于等于19 200b/s。對1.5個字符位/3.5個字符位計(jì)算時間有嚴(yán)格要求。當(dāng)通信波特率大于19 200b/s。1.5個字符位固定為750μs,3.5個字符位固定為1.75ms。官方的Modbus RTU規(guī)定標(biāo)準(zhǔn)為3.5個字符長周期,不同的由于使用環(huán)境不同可能在發(fā)送中出現(xiàn)5~10字長的間隙。對于Modbus RTU來說比較安全的設(shè)置為50ms。

        4 用到的功能代碼

        用到的功能代碼如表2所示。

        表2 功能代碼

        

        MCF51QE128的主要特性

        系統(tǒng)核心控制器采用的是Freescale公司推出的32位單片機(jī)MCF51QE128。它是一款32位ColdFire V1 MCU,特點(diǎn)包括:停止電流降至370nA,6μs喚醒時間,超低運(yùn)行電流為50mA;50.33MHz ColdFire V1內(nèi)核運(yùn)行頻率;25.165MHz的總線頻率;最大為8KB的RAM;最高128KB的閃存;24信道的12位ADC;兩個;2xSCI、2xI2C、2xSPI;一個6信道和兩個3信道的定時器PWM模塊;RTC;最多70路通用輸入/輸出(GPIO);系統(tǒng)集成頻率鎖定環(huán)(FLL)和軟件看門狗;內(nèi)部時鐘源(ICS);低功耗外部32kHz振蕩器;電壓范圍為1.8~ 3.6V;增強(qiáng)型內(nèi)部振蕩器、電壓調(diào)節(jié)器和實(shí)時計(jì)數(shù)器。通用開發(fā)環(huán)境是CodeWarrior for Microcontrollers 6.0。

        軟件設(shè)計(jì)

        1 接收軟件流程

        如圖1所示。

        

        

        圖1 從機(jī)軟件流程

        2 配置串口和定時器

        void usart_init()

        {

        SCI1C1=0x13;//9bit character mode,odd parity

        SCI1C2=0x2c;

        SCI1BDL=0x29;//38400bps

        SCI1BDH=0;

        }

        void timer3_init(void)//8MHz主時鐘1333Hz中斷判斷命令包結(jié)束

        {

        TPM3CNTH=0;

        TPM3CNTL=0;

        TPM3MODH=0x49;

        TPM3MODL=0xbe;

        TPM3SC=0x48;

        }

        3 MCF51QE128解包modbus RTU的程序

        void interrupt VectorNumber_ Vsci1rx SCI_RX_ISR(void)//字節(jié)接收程序

        {

        if(SCI1S1_PF==1)communication_error=1;//字節(jié)校驗(yàn)錯誤置通信失敗標(biāo)志位

        *(pointer_RX1)=SCI1D;//將數(shù)據(jù)放入

        pointer_RX1++;//隊(duì)列指針后移

        len_RX1++;//收到字節(jié)長度加1

        timer3_reset();//定時器復(fù)位

        timer3_init();//定時器重啟動

        }

        void interrupt VectorNumber_Vtpm3ovf Timer3_ISR(void)//判斷命令包接收結(jié)束

        {

        timer3_cnt++;//定時器中斷次數(shù)加1

        if(timer3_cnt==2)

        {

        timer3_reset();//定時器復(fù)位

        pointer_RX1=Buffer_RX1;//隊(duì)列指針初始化

        full_RX1=1;//收完置標(biāo)志位

        }

        }

        4 CRC查表產(chǎn)生函數(shù)

        由于篇幅有限,此處不再詳述,表具體內(nèi)容可參照相關(guān)參考文獻(xiàn)。

        總結(jié)

        筆者的設(shè)計(jì)基于MCF51QE128控制核心來實(shí)現(xiàn)Modbus協(xié)議,已經(jīng)成功進(jìn)行了實(shí)際應(yīng)用,通信可靠,而且實(shí)現(xiàn)起來比較容易。該設(shè)計(jì)為采用MCF51QE128微控制器進(jìn)行工業(yè)產(chǎn)品設(shè)計(jì)通信的應(yīng)用提供了參考方案。



      評論


      相關(guān)推薦

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

      關(guān)閉