Modbus RTU通信協(xié)議在MCF51QE128上的實(shí)現(xiàn)
發(fā)布時(shí)間:2008/8/18 0:00:00 訪(fǎng)問(wèn)次數(shù):486
引言
工業(yè)控制已從單機(jī)控制走向集中監(jiān)控、集散控制,如今已進(jìn)入網(wǎng)絡(luò)集約制造時(shí)代。工業(yè)控制器連網(wǎng)也為網(wǎng)絡(luò)管理提供了方便。modbus就是工業(yè)控制器的網(wǎng)絡(luò)協(xié)議中的一種。
modbus協(xié)議是應(yīng)用于電子控制器上的一種通信規(guī)約。通過(guò)此協(xié)議,控制器相互之間、控制器經(jīng)由網(wǎng)絡(luò)(例如以太網(wǎng))和其他設(shè)備之間可以通信。它已經(jīng)成為主流的工業(yè)標(biāo)準(zhǔn)之一。不同廠(chǎng)商生產(chǎn)的控制設(shè)備通過(guò)modbus協(xié)議可以連成工業(yè)網(wǎng)絡(luò),進(jìn)行集中監(jiān)控。
modbus通信協(xié)議
1 通信傳送方式
每一個(gè)數(shù)據(jù)字節(jié)包括:每個(gè)字節(jié)的位、1個(gè)起始位、8個(gè)數(shù)據(jù)位、最小的有效位先發(fā)送、1個(gè)奇偶校驗(yàn)位(無(wú)校驗(yàn)則無(wú))、1個(gè)停止位(有校驗(yàn)時(shí))、2個(gè)停止位(無(wú)校驗(yàn)時(shí))。
在rtu模式下每個(gè)字節(jié)的格式(11bit)如下:
編碼系統(tǒng):8位二進(jìn)制
字節(jié)組成:1bit起始位、8bit數(shù)據(jù)位,最低位最先發(fā)送、1bit奇偶校驗(yàn)位、1bit停止位(或者沒(méi)奇偶校驗(yàn)位,就發(fā)送一個(gè)附加的停止位)。
2 數(shù)據(jù)幀結(jié)構(gòu)
地址碼:地址碼為通信傳送的第一字節(jié)。這字節(jié)表明由用戶(hù)設(shè)定地址碼的從機(jī)將接收由主機(jī)發(fā)送來(lái)的信息。并且每個(gè)從機(jī)都有唯一的地址碼,并且響應(yīng)回送均以各自的地址碼開(kāi)始。主機(jī)發(fā)送的地址碼表明將發(fā)送到的從機(jī)地址,而從機(jī)發(fā)送的地址碼表明回送的從機(jī)地址。
功能碼:通信傳送的第二字節(jié)。modbus通信規(guī)約定義功能號(hào)為1~127。根據(jù)實(shí)際需要只利用其中的一部分功能碼。作為主機(jī)請(qǐng)求發(fā)送,通過(guò)功能碼告訴從機(jī)執(zhí)行什么動(dòng)作。作為從機(jī)響應(yīng),從機(jī)發(fā)送的功能碼與從主機(jī)發(fā)送來(lái)的功能碼一樣,并表明從機(jī)已響應(yīng)主機(jī)進(jìn)行操作。如果從機(jī)發(fā)送的功能碼的最高位為1,則表明從機(jī)沒(méi)有響應(yīng)操作或發(fā)送出錯(cuò)。
數(shù)據(jù)區(qū):數(shù)據(jù)區(qū)根據(jù)不同的功能碼而不同。數(shù)據(jù)區(qū)可以是實(shí)際數(shù)值、設(shè)置點(diǎn)、主機(jī)發(fā)送給從機(jī)或從機(jī)發(fā)送給主機(jī)的地址。
crc碼:二字節(jié)的錯(cuò)誤檢測(cè)碼。冗余循環(huán)碼檢查(crc)包含兩字節(jié),即16位二進(jìn)制。crc碼由發(fā)送設(shè)備計(jì)算,放置于發(fā)送信息的尾部。接收信息的設(shè)備再重新計(jì)算接收到信息的crc碼,比較計(jì)算得到的crc碼是否與接收到的相符,如果兩者不相符,則表明出錯(cuò)。crc碼的計(jì)算方法是,先預(yù)置16位寄存器全為1。再逐步把每8位數(shù)據(jù)信息進(jìn)行處理。在進(jìn)行crc碼計(jì)算時(shí)只用8位數(shù)據(jù)位、起始位及停止位,如有奇偶校驗(yàn)位的話(huà)也包括奇偶校驗(yàn)位,都不參與crc碼計(jì)算。
在計(jì)算crc碼時(shí),8位數(shù)據(jù)與寄存器的數(shù)據(jù)相異或,得到的結(jié)果向低位移一位,用0填補(bǔ)最高位。再檢查最低位,如果最低位為1,把寄存器的內(nèi)容與預(yù)置數(shù)相異或,如果最低位為0,不進(jìn)行異或運(yùn)算。
這個(gè)過(guò)程一直重復(fù)8次。第8次移位后,下一個(gè)8位再與現(xiàn)在寄存器的內(nèi)容相異或,這個(gè)過(guò)程與以上一樣重復(fù)8次。當(dāng)所有的數(shù)據(jù)信息處理完后,最后寄存器的內(nèi)容即為crc碼值。crc碼中的數(shù)據(jù)發(fā)送、接收時(shí)低字節(jié)在前。在實(shí)際應(yīng)用中,為了提高運(yùn)算速度,采用了查表的方法取代計(jì)算方法。
3 modbus rtu數(shù)據(jù)幀結(jié)構(gòu)
在rtu模式下,每一個(gè)數(shù)據(jù)幀之間的間隔至少是3.5個(gè)字符位。一個(gè)完整的數(shù)據(jù)幀必須要連續(xù)的傳送,當(dāng)一幀消息中兩字節(jié)間的間距大于1.5字符位時(shí),此數(shù)據(jù)幀錯(cuò)誤,被接受方放棄。
當(dāng)通信波特率小于等于19 200b/s。對(duì)1.5個(gè)字符位/3.5個(gè)字符位計(jì)算時(shí)間有嚴(yán)格要求。當(dāng)通信波特率大于19 200b/s。1.5個(gè)字符位固定為750μs,3.5個(gè)字符位固定為1.75ms。官方的modbus rtu規(guī)定標(biāo)準(zhǔn)為3.5個(gè)字符長(zhǎng)周期,不同的串口設(shè)備由于使用環(huán)境不同可能在發(fā)送中出現(xiàn)5~10字長(zhǎng)的間隙。對(duì)于modbus rtu來(lái)說(shuō)比較安全的設(shè)置為50ms。
4 用到的功能代碼
表2 功能代碼
mcf51qe128的主要特性
系統(tǒng)核心控制器采用的是freescale公司推出的32位單片機(jī)mcf51qe128。它是一款32位coldfire v1 mcu,特點(diǎn)包括:停止電流降至370na,6μs喚醒時(shí)間,超低運(yùn)行電流為50ma;50.33mhz coldfire v1內(nèi)核運(yùn)行頻率;25.165mhz的總線(xiàn)頻率;最大為8kb的ram;最高128kb的閃存;24信道的12位adc;兩個(gè)模擬比較器;2xsci、2xi2c、2xspi;一個(gè)6信道和兩個(gè)3信道的定時(shí)器pwm模塊;rtc;最多70路通用輸入/輸出(gpio);系統(tǒng)集成頻率鎖定環(huán)(fll)和軟件看門(mén)狗;內(nèi)部時(shí)鐘源(ics);低功耗外部32khz振蕩器;電壓范圍為1.8~ 3.6v;增強(qiáng)型內(nèi)部振蕩器、電壓調(diào)節(jié)器和實(shí)時(shí)計(jì)數(shù)器。通用開(kāi)發(fā)環(huán)境是codewarrior for microcontrollers 6.0。
軟件設(shè)計(jì)
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中斷判斷命令包結(jié)束
{
tpm3cnth=0;
tpm3cntl=0;
tpm3modh=0x49;
tpm3modl=0xbe;
tp
引言
工業(yè)控制已從單機(jī)控制走向集中監(jiān)控、集散控制,如今已進(jìn)入網(wǎng)絡(luò)集約制造時(shí)代。工業(yè)控制器連網(wǎng)也為網(wǎng)絡(luò)管理提供了方便。modbus就是工業(yè)控制器的網(wǎng)絡(luò)協(xié)議中的一種。
modbus協(xié)議是應(yīng)用于電子控制器上的一種通信規(guī)約。通過(guò)此協(xié)議,控制器相互之間、控制器經(jīng)由網(wǎng)絡(luò)(例如以太網(wǎng))和其他設(shè)備之間可以通信。它已經(jīng)成為主流的工業(yè)標(biāo)準(zhǔn)之一。不同廠(chǎng)商生產(chǎn)的控制設(shè)備通過(guò)modbus協(xié)議可以連成工業(yè)網(wǎng)絡(luò),進(jìn)行集中監(jiān)控。
modbus通信協(xié)議
1 通信傳送方式
每一個(gè)數(shù)據(jù)字節(jié)包括:每個(gè)字節(jié)的位、1個(gè)起始位、8個(gè)數(shù)據(jù)位、最小的有效位先發(fā)送、1個(gè)奇偶校驗(yàn)位(無(wú)校驗(yàn)則無(wú))、1個(gè)停止位(有校驗(yàn)時(shí))、2個(gè)停止位(無(wú)校驗(yàn)時(shí))。
在rtu模式下每個(gè)字節(jié)的格式(11bit)如下:
編碼系統(tǒng):8位二進(jìn)制
字節(jié)組成:1bit起始位、8bit數(shù)據(jù)位,最低位最先發(fā)送、1bit奇偶校驗(yàn)位、1bit停止位(或者沒(méi)奇偶校驗(yàn)位,就發(fā)送一個(gè)附加的停止位)。
2 數(shù)據(jù)幀結(jié)構(gòu)
地址碼:地址碼為通信傳送的第一字節(jié)。這字節(jié)表明由用戶(hù)設(shè)定地址碼的從機(jī)將接收由主機(jī)發(fā)送來(lái)的信息。并且每個(gè)從機(jī)都有唯一的地址碼,并且響應(yīng)回送均以各自的地址碼開(kāi)始。主機(jī)發(fā)送的地址碼表明將發(fā)送到的從機(jī)地址,而從機(jī)發(fā)送的地址碼表明回送的從機(jī)地址。
功能碼:通信傳送的第二字節(jié)。modbus通信規(guī)約定義功能號(hào)為1~127。根據(jù)實(shí)際需要只利用其中的一部分功能碼。作為主機(jī)請(qǐng)求發(fā)送,通過(guò)功能碼告訴從機(jī)執(zhí)行什么動(dòng)作。作為從機(jī)響應(yīng),從機(jī)發(fā)送的功能碼與從主機(jī)發(fā)送來(lái)的功能碼一樣,并表明從機(jī)已響應(yīng)主機(jī)進(jìn)行操作。如果從機(jī)發(fā)送的功能碼的最高位為1,則表明從機(jī)沒(méi)有響應(yīng)操作或發(fā)送出錯(cuò)。
數(shù)據(jù)區(qū):數(shù)據(jù)區(qū)根據(jù)不同的功能碼而不同。數(shù)據(jù)區(qū)可以是實(shí)際數(shù)值、設(shè)置點(diǎn)、主機(jī)發(fā)送給從機(jī)或從機(jī)發(fā)送給主機(jī)的地址。
crc碼:二字節(jié)的錯(cuò)誤檢測(cè)碼。冗余循環(huán)碼檢查(crc)包含兩字節(jié),即16位二進(jìn)制。crc碼由發(fā)送設(shè)備計(jì)算,放置于發(fā)送信息的尾部。接收信息的設(shè)備再重新計(jì)算接收到信息的crc碼,比較計(jì)算得到的crc碼是否與接收到的相符,如果兩者不相符,則表明出錯(cuò)。crc碼的計(jì)算方法是,先預(yù)置16位寄存器全為1。再逐步把每8位數(shù)據(jù)信息進(jìn)行處理。在進(jìn)行crc碼計(jì)算時(shí)只用8位數(shù)據(jù)位、起始位及停止位,如有奇偶校驗(yàn)位的話(huà)也包括奇偶校驗(yàn)位,都不參與crc碼計(jì)算。
在計(jì)算crc碼時(shí),8位數(shù)據(jù)與寄存器的數(shù)據(jù)相異或,得到的結(jié)果向低位移一位,用0填補(bǔ)最高位。再檢查最低位,如果最低位為1,把寄存器的內(nèi)容與預(yù)置數(shù)相異或,如果最低位為0,不進(jìn)行異或運(yùn)算。
這個(gè)過(guò)程一直重復(fù)8次。第8次移位后,下一個(gè)8位再與現(xiàn)在寄存器的內(nèi)容相異或,這個(gè)過(guò)程與以上一樣重復(fù)8次。當(dāng)所有的數(shù)據(jù)信息處理完后,最后寄存器的內(nèi)容即為crc碼值。crc碼中的數(shù)據(jù)發(fā)送、接收時(shí)低字節(jié)在前。在實(shí)際應(yīng)用中,為了提高運(yùn)算速度,采用了查表的方法取代計(jì)算方法。
3 modbus rtu數(shù)據(jù)幀結(jié)構(gòu)
在rtu模式下,每一個(gè)數(shù)據(jù)幀之間的間隔至少是3.5個(gè)字符位。一個(gè)完整的數(shù)據(jù)幀必須要連續(xù)的傳送,當(dāng)一幀消息中兩字節(jié)間的間距大于1.5字符位時(shí),此數(shù)據(jù)幀錯(cuò)誤,被接受方放棄。
當(dāng)通信波特率小于等于19 200b/s。對(duì)1.5個(gè)字符位/3.5個(gè)字符位計(jì)算時(shí)間有嚴(yán)格要求。當(dāng)通信波特率大于19 200b/s。1.5個(gè)字符位固定為750μs,3.5個(gè)字符位固定為1.75ms。官方的modbus rtu規(guī)定標(biāo)準(zhǔn)為3.5個(gè)字符長(zhǎng)周期,不同的串口設(shè)備由于使用環(huán)境不同可能在發(fā)送中出現(xiàn)5~10字長(zhǎng)的間隙。對(duì)于modbus rtu來(lái)說(shuō)比較安全的設(shè)置為50ms。
4 用到的功能代碼
表2 功能代碼
mcf51qe128的主要特性
系統(tǒng)核心控制器采用的是freescale公司推出的32位單片機(jī)mcf51qe128。它是一款32位coldfire v1 mcu,特點(diǎn)包括:停止電流降至370na,6μs喚醒時(shí)間,超低運(yùn)行電流為50ma;50.33mhz coldfire v1內(nèi)核運(yùn)行頻率;25.165mhz的總線(xiàn)頻率;最大為8kb的ram;最高128kb的閃存;24信道的12位adc;兩個(gè)模擬比較器;2xsci、2xi2c、2xspi;一個(gè)6信道和兩個(gè)3信道的定時(shí)器pwm模塊;rtc;最多70路通用輸入/輸出(gpio);系統(tǒng)集成頻率鎖定環(huán)(fll)和軟件看門(mén)狗;內(nèi)部時(shí)鐘源(ics);低功耗外部32khz振蕩器;電壓范圍為1.8~ 3.6v;增強(qiáng)型內(nèi)部振蕩器、電壓調(diào)節(jié)器和實(shí)時(shí)計(jì)數(shù)器。通用開(kāi)發(fā)環(huán)境是codewarrior for microcontrollers 6.0。
軟件設(shè)計(jì)
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中斷判斷命令包結(jié)束
{
tpm3cnth=0;
tpm3cntl=0;
tpm3modh=0x49;
tpm3modl=0xbe;
tp
熱門(mén)點(diǎn)擊
- 2G/3G RAN承載網(wǎng)解決方案
- GPRS DT/CQT測(cè)試中異常問(wèn)題分析
- Semtech推出集成IEEE1588 PT
- Linux串口通信編程(Linux Seri
- 采用開(kāi)放式芯片協(xié)議(OCP)總線(xiàn)的跟蹤儀器與
- Fulcrum推出10-Gigabit以太網(wǎng)
- H.248協(xié)議在通信網(wǎng)絡(luò)中的應(yīng)用
- SiGe半導(dǎo)體推出SE4150L超小雙天線(xiàn)輸
- LitePoint解密多種無(wú)線(xiàn)通訊標(biāo)準(zhǔn)的測(cè)試
- 輕量級(jí)TCP/IP協(xié)議棧OpenTCP的移植
推薦技術(shù)資料
- 首款新結(jié)構(gòu)硅基外腔混合集成光源芯片
- 全大核架構(gòu) X930 超大核的
- 計(jì)算子系統(tǒng)(Compute Sub Syst
- Neoverse CSS V3 架構(gòu)R
- Arm Neoverse CP
- Dimensity 9400芯
- 多媒體協(xié)處理器SM501在嵌入式系統(tǒng)中的應(yīng)用
- 基于IEEE802.11b的EPA溫度變送器
- QUICCEngine新引擎推動(dòng)IP網(wǎng)絡(luò)革新
- SoC面世八年后的產(chǎn)業(yè)機(jī)遇
- MPC8xx系列處理器的嵌入式系統(tǒng)電源設(shè)計(jì)
- dsPIC及其在交流變頻調(diào)速中的應(yīng)用研究