<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 手機與無(wú)線(xiàn)通信 > 設計應用 > Modbus RTU通信協(xié)議在MCF51QE128上的實(shí)現

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

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

引言


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

Modbus協(xié)議


1 通信傳送方式


每一個(gè)數據字節包括:每個(gè)字節的位、1個(gè)起始位、8個(gè)數據位、最小的有效位先發(fā)送、1個(gè)奇偶校驗位(無(wú)校驗則無(wú))、1個(gè)停止位(有校驗時(shí))、2個(gè)停止位(無(wú)校驗時(shí))。


模式下每個(gè)字節的格式(11bit)如下:
編碼系統:8位二進(jìn)制
字節組成:1bit起始位、8bit數據位,最低位最先發(fā)送、1bit奇偶校驗位、1bit停止位(或者沒(méi)奇偶校驗位,就發(fā)送一個(gè)附加的停止位)。


2 數據幀結構


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


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

表1 每一個(gè)完整的數據幀構成

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


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


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


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


3 Modbus 數據幀結構


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


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


4 用到的功能代碼


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

表2 功能代碼

的主要特性


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

軟件設計


1 接收軟件流程
如圖1所示。

圖1 從機軟件流程


2 配置串口和定時(shí)器


void usart_init()
{
SCI1C1=0x13;//9bit character mode,odd parity
SCI1C2=0x2c;
SCI1BDL=0x29;//38400bps
SCI1BDH=0;
}
void timer3_init(void)//8MHz主時(shí)鐘1333Hz中斷判斷命令包結束
{
TPM3CNTH=0;
TPM3CNTL=0;
TPM3MODH=0x49;
TPM3MODL=0xbe;
TPM3SC=0x48;
}


3 解包modbus RTU的程序


void interrupt VectorNumber_ Vsci1rx SCI_RX_ISR(void)//字節接收程序
{
if(SCI1S1_PF==1)communication_error=1;//字節校驗錯誤置通信失敗標志位
*(pointer_RX1)=SCI1D;//將數據放入緩沖隊列
pointer_RX1++;//隊列指針后移
len_RX1++;//收到字節長(cháng)度加1
timer3_reset();//定時(shí)器復位
timer3_init();//定時(shí)器重啟動(dòng)
}
void interrupt VectorNumber_Vtpm3ovf Timer3_ISR(void)//判斷命令包接收結束
{
timer3_cnt++;//定時(shí)器中斷次數加1
if(timer3_cnt==2)
{
timer3_reset();//定時(shí)器復位
pointer_RX1=Buffer_RX1;//隊列指針初始化
full_RX1=1;//收完置標志位
}
}


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


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

總結


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



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>