0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Modbus通信協(xié)議報(bào)文分析

瑞薩MCU小百科 ? 來(lái)源:瑞薩MCU小百科 ? 2024-10-24 11:00 ? 次閱讀

10.4.7 字節(jié)序和大小端

Modbus中傳輸?shù)臄?shù)據(jù),按照“大字節(jié)序”來(lái)傳輸,比如:

362814be-91ab-11ef-a511-92fbcf53809c.jpg

寄存器數(shù)值是0x1234,先傳輸0x12,再傳輸0x34。

在Modbus寄存器中,對(duì)于一個(gè)由2字節(jié)組成的16數(shù),在內(nèi)存中存儲(chǔ)這兩個(gè)字節(jié)有兩種方法:一種是將低序字節(jié)存儲(chǔ)在起始地址為小端(Little-Endian)字節(jié)序;另一種方法是將高序字節(jié)存儲(chǔ)在起始地稱(chēng)為大端(Big-Endian)字節(jié)序。Modbus通信協(xié)議中具體規(guī)定了字節(jié)高低位發(fā)送順序,這樣就自然引出了字節(jié)序和大小端的問(wèn)題。

①什么是大端:

所謂大端,是指數(shù)據(jù)的低位保存在內(nèi)存的高地址中,數(shù)據(jù)的高位保存在內(nèi)存的低地址中。

②什么是小端:

所謂小端,是指數(shù)據(jù)的低位保存在內(nèi)存的低地址中,數(shù)據(jù)的高位保存在內(nèi)存的高地址中。

③為什么會(huì)有大小端:

計(jì)算機(jī)系統(tǒng)是以字節(jié)為單位的,每個(gè)地址單元都對(duì)應(yīng)著1個(gè)字節(jié),一個(gè)字節(jié)為8bit。但在C語(yǔ)言中除了8bit的char類(lèi)型,還有16bit的short類(lèi)型和32bit的long類(lèi)型,還有就是對(duì)于位數(shù)大于8位的處理器,如16位或32位的處理器,由于寄存器寬度大于一個(gè)字節(jié),那么必然存在一個(gè)如何將多個(gè)字節(jié)安排的問(wèn)題。因此就導(dǎo)致了大端存儲(chǔ)模式和小端存儲(chǔ)模式的出現(xiàn)。

低位字節(jié)和高位字節(jié):比如123456其中的1就是高位數(shù)字,6就是低位數(shù)字。

舉一個(gè)例子,在32位數(shù)字0x12345678在內(nèi)存中的表示形式為:

1)大端模式:

低地址 —— —— 高地址
0x12 0x34 0x56 0x78

2)小端模式:

低地址 —— —— 高地址
0x78 0x56 0x34 0x12

10.4.8 Modbus報(bào)文分析

在第二章中我們已經(jīng)生成了一個(gè)報(bào)文,我們就拿此報(bào)文來(lái)逐步分析一下,報(bào)文如下:

36351e98-91ab-11ef-a511-92fbcf53809c.png

我們可以看到上面報(bào)文都是循環(huán)發(fā)送的,這樣看起來(lái)不太容易分析,摘抄下來(lái)其中一組來(lái)給大家分析:

發(fā)送:

從機(jī)
地址
功能碼 起始地址高位 起始地址低位 寄存器數(shù)量高位 寄存器數(shù)量低位 CRC
高位
CRC低位
01 03 00 00 00 0A C5 CD

響應(yīng):

從機(jī)地址 功能碼 返回字節(jié)數(shù) 數(shù)據(jù)位 CRC高位 CRC低位
01 03 14 00 42… CF 10

這里我們就以03功能碼為例來(lái)分析一下報(bào)文:

03發(fā)送報(bào)文格式:從機(jī)地址+功能碼+加起始地址+寄存器數(shù)量+CRC校驗(yàn)

03接受報(bào)文格式:從機(jī)地址+功能碼+字節(jié)數(shù)+具體數(shù)據(jù)+CRC校驗(yàn)

首先我們看一下發(fā)送報(bào)文:

從機(jī)地址是01,功能碼03,起始地址00,寄存器數(shù)量是十六進(jìn)制0A也就是10,和門(mén)設(shè)置的是一樣的,我們來(lái)對(duì)對(duì)照一下我們?cè)O(shè)置的參數(shù)

3645f16e-91ab-11ef-a511-92fbcf53809c.jpg

我們?cè)賮?lái)看一下接收?qǐng)?bào)文:

從機(jī)地址是01,功能碼03,返回字節(jié)數(shù)是十六進(jìn)制14也就是返回20給字節(jié),我們發(fā)送是個(gè)返回20個(gè)字節(jié)也是對(duì)的上的,第一個(gè)數(shù)據(jù)位是00 42也是和我們發(fā)送的可以對(duì)上,十六機(jī)制42,也就66,我們來(lái)看一下我們之前設(shè)置的參數(shù):

365a8a8e-91ab-11ef-a511-92fbcf53809c.jpg

10.4.9 Moubus TCP消息幀格式

1. 協(xié)議描述

在Modbus TCP/IP中,串行鏈路中的主/從設(shè)備分別演變?yōu)榭蛻?hù)端/服務(wù)器端設(shè)備,即客戶(hù)端相當(dāng)于主站設(shè)備,服務(wù)器端設(shè)備相當(dāng)于從設(shè)備?;赥CP/IP網(wǎng)絡(luò)的傳輸特性,串行鏈路上一主多從的機(jī)構(gòu)也演變?yōu)槎嗫蛻?hù)端/多服務(wù)器端的構(gòu)造模型。Modbus協(xié)議在TCP/IP上的實(shí)現(xiàn)是在TCP/IP層上的應(yīng)用,它需要一個(gè)完整的TCP/IP棧作為支撐,Modbus TCP/IP服務(wù)器端通常使用端口502作為接收?qǐng)?bào)文的端口。

下圖為Moubus TCP的通訊結(jié)構(gòu):

3668a0e2-91ab-11ef-a511-92fbcf53809c.jpg

ModbusTCP與ModbusUDP的報(bào)文格式是一樣的,它們之間的區(qū)別其實(shí)就是TCP與UDP的區(qū)別,因此下面就針對(duì)ModbusTCP的協(xié)議進(jìn)行分析,ModbusTCP與ModbusRtu(ModbusASCII)之間的區(qū)別如下圖:

367eb2ce-91ab-11ef-a511-92fbcf53809c.png

從上圖可以看出,ModbusTCP在Modbus串行通信的基礎(chǔ)上,去除了校驗(yàn)(由于TCP本身就帶有校驗(yàn)和)和設(shè)備地址(ModbusTCP弱化了設(shè)備地址,用IP地址來(lái)取代),再加上MBAP報(bào)文頭(占7bytes),下面針對(duì)MBAP進(jìn)行分析說(shuō)明:

369c4e4c-91ab-11ef-a511-92fbcf53809c.png

事務(wù)處理標(biāo)識(shí)符:

事務(wù)處理標(biāo)識(shí)用于在查詢(xún)報(bào)文與未來(lái)響應(yīng)之間建立聯(lián)系。因此,對(duì)TCP/IP連接來(lái)說(shuō),在同一時(shí)刻這個(gè)標(biāo)識(shí)符必須是唯一的。有以下幾種使用此標(biāo)識(shí)符的方式。

例如,可以將傳輸標(biāo)識(shí)作為一個(gè)帶有計(jì)數(shù)器的簡(jiǎn)單“TCP發(fā)送順序號(hào)”,在每個(gè)請(qǐng)求發(fā)送時(shí)自動(dòng)+1;也可以用作智能索引或指針,用來(lái)識(shí)別事務(wù)處理的內(nèi)容,以便記憶當(dāng)前的遠(yuǎn)端服務(wù)器和未處理的請(qǐng)求。

服務(wù)器端可接收的請(qǐng)求數(shù)量取決于其容量,即服務(wù)器資源量和TCP窗口尺。

同樣,客戶(hù)端同時(shí)啟動(dòng)事務(wù)處理的數(shù)量也取決于客戶(hù)端的資源容量。

單元標(biāo)識(shí)符:

在對(duì)Modbus或Modbus+等串行鏈路子網(wǎng)中的設(shè)備進(jìn)行尋址時(shí),這個(gè)域用于路由的目的。在這種情況下,單元標(biāo)識(shí)符(Unit Identifier)攜帶一個(gè)遠(yuǎn)端設(shè)備的Modbus從站地址。

如果Modbus服務(wù)器連接到Modbus+或Modbus串行鏈路子網(wǎng),并通過(guò)一個(gè)網(wǎng)橋或網(wǎng)關(guān)配置這個(gè)服務(wù)器的IP地址,則Modbus單元標(biāo)識(shí)符對(duì)識(shí)別連接到網(wǎng)橋或網(wǎng)關(guān)后的子網(wǎng)的從站設(shè)備是必需的。TCP連接中的目的IP地址識(shí)別了網(wǎng)橋本身的地址,而網(wǎng)橋則使用Modbus單元標(biāo)識(shí)符將請(qǐng)求轉(zhuǎn)交給正確的從站設(shè)備。分配給串行鏈路上的Modbus從站設(shè)備地址為1~247(十進(jìn)制),地址0作為廣播地址。

對(duì)單純的Modbus TCP/IP設(shè)備來(lái)說(shuō)用IP地址即可尋址Modbus服務(wù)器端設(shè)備,此時(shí)Modbus單元標(biāo)識(shí)符是無(wú)用的,必須使用值0xFF填充。當(dāng)對(duì)直接連接到TCP/IP網(wǎng)絡(luò)上的Modbus服務(wù)器尋址時(shí),建議不要在“單元標(biāo)識(shí)符”域使用有效的Modbus從站地址。

以上是MBAP報(bào)文頭個(gè)字段含義的詳細(xì)說(shuō)明。

實(shí)際上,在Modbus TCP/IP傳輸過(guò)程中,服務(wù)端(從機(jī))返回的響應(yīng)報(bào)文中同樣包含MBAP報(bào)頭,除了Length字段外,其他字段均與客戶(hù)端一致。Modbus消息TCP/IP層提供,不需要像串行鏈路那樣自己判斷一幀是否結(jié)束,所有數(shù)據(jù)傳輸均由TCP/IP層處理。因?yàn)榈讓覶CP/IP確保了端到端的連接,而且TCP/IP鏈路層已確保傳輸數(shù)據(jù)的準(zhǔn)確性,所以Modbus TCP/IP中已不再需要LRC或CRC等校驗(yàn)功能。

2. 查詢(xún)與響應(yīng)報(bào)文示例

對(duì)于Modbus TCP消息幀格式,下面舉例說(shuō)明各部分的含義。

①查詢(xún)報(bào)文:00 00 00 00 00 06 09 03 00 04 00 01。

1)0x06:后續(xù)還有6字節(jié)。

2)0x09:?jiǎn)卧獦?biāo)識(shí)符為9。

3)0x03:功能碼3,即讀保持寄存器的值。

4)0x00 0x04:Modbus起始地址4(即40005)。

5)0x00 0x01:讀取寄存器個(gè)數(shù)為1。

②響應(yīng)報(bào)文:00 00 00 00 00 05 09 03 02 00 05。

1)0x05:表示后續(xù)還有5字節(jié)。

2)0x09:同查詢(xún)報(bào)文,單元標(biāo)識(shí)符。

3)0x03:功能碼,同查詢(xún)報(bào)文。

4)0x02:返回?cái)?shù)據(jù)字節(jié)數(shù)。

5)0x00 0x05:寄存器的值。

可見(jiàn),在Modbus TCP模式下,差錯(cuò)校驗(yàn)字段已不復(fù)存在。但在某些特殊場(chǎng)合,例如串行Modbus協(xié)議轉(zhuǎn)Modbus TCP的情況下,串行協(xié)議數(shù)據(jù)可以完整地裝載到Modbus TCP的數(shù)據(jù)字段,這時(shí)CRC或LRC差錯(cuò)校驗(yàn)字段仍然存在。例如,Modbus RTU Over TCP/IP或Modbus ASCII Over TCP/IP等。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5343

    瀏覽量

    120348
  • MODBUS
    +關(guān)注

    關(guān)注

    28

    文章

    1805

    瀏覽量

    76992
  • MPU
    MPU
    +關(guān)注

    關(guān)注

    0

    文章

    359

    瀏覽量

    48794
  • 工業(yè)控制
    +關(guān)注

    關(guān)注

    38

    文章

    1454

    瀏覽量

    85852

原文標(biāo)題:字節(jié)序與Modbus通信 - RZ MPU工業(yè)控制教程連載(29)

文章出處:【微信號(hào):瑞薩MCU小百科,微信公眾號(hào):瑞薩MCU小百科】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Modbus?串行通信協(xié)議概述

    Modbus是一種串行通信協(xié)議,是Modicon公司(現(xiàn)在的施耐德電氣 Schneider Electric)于1979年為使用可編程邏輯控制器(PLC)通信而發(fā)表。Modbus已經(jīng)成
    發(fā)表于 09-02 10:58 ?1383次閱讀

    淺談Modbus通信協(xié)議

    Modbus通信協(xié)議是一種工業(yè)現(xiàn)場(chǎng)總線協(xié)議標(biāo)準(zhǔn),常用的Modbus協(xié)議有以下三種類(lèi)型:Modbus TCP、
    發(fā)表于 09-20 15:56 ?4730次閱讀
    淺談<b class='flag-5'>Modbus</b><b class='flag-5'>通信協(xié)議</b>

    Modbus通信協(xié)議和多機(jī)通信例程

    Modbus通信協(xié)議介紹Modbus多機(jī)通信例程
    發(fā)表于 12-18 06:17

    Modbus通信協(xié)議的錯(cuò)誤及解決辦法

    Modbus通信協(xié)議可能出現(xiàn)的錯(cuò)誤Modbus通信協(xié)議錯(cuò)誤的解決辦法
    發(fā)表于 01-11 07:32

    Modbus通信協(xié)議的相關(guān)資料分享

    Modbus通信協(xié)議Modicon公司1979在發(fā)展中,適用于工業(yè)現(xiàn)場(chǎng)總線協(xié)議控制。Modbus通信系統(tǒng)包含芯片的節(jié)點(diǎn),并與組合物可編程控制
    發(fā)表于 11-24 08:01

    了解一下MODBUS通信協(xié)議

    目錄前言MODBUS協(xié)議簡(jiǎn)介MODBUS通信格式信息幀格式前言近期需要制作一個(gè)MODBUS/RTU轉(zhuǎn)MODBUS/TCP 的網(wǎng)關(guān)。首先需要了
    發(fā)表于 01-14 06:19

    Modbus通信協(xié)議的相關(guān)資料下載

    Modbus通信協(xié)議是在RS-485串口實(shí)驗(yàn)的基礎(chǔ)上實(shí)現(xiàn)的,簡(jiǎn)單說(shuō)就是首先要實(shí)現(xiàn)RS-485的串口通信,對(duì)所收發(fā)的數(shù)據(jù)串按照Modbus的規(guī)則編寫(xiě)(比作數(shù)據(jù)的加密處理)因此在程序編寫(xiě)上
    發(fā)表于 02-09 07:47

    淺析ModBus通信協(xié)議的相關(guān)知識(shí)

      概 述   Modbus是一種串行通信協(xié)議,是Modicon公司(現(xiàn)在的施耐德電氣Schneider Electric)于1979年為使用可編程邏輯控制器(PLC)通信而發(fā)表。Modbus
    發(fā)表于 05-05 15:51

    ModBus通信協(xié)議.pdf

    ModBus通信協(xié)議.pdf
    發(fā)表于 04-09 22:24 ?90次下載

    S7-200 Modbus通信協(xié)議手冊(cè)

    使用Modbus通信協(xié)議是Modicon公司提出的一種報(bào)文傳輸協(xié)議,它廣泛應(yīng)用于工業(yè)控制領(lǐng)域,并已經(jīng)成為一種通用的行業(yè)標(biāo)準(zhǔn)。不同廠商提供的控制設(shè)置可通過(guò)
    發(fā)表于 04-18 16:40 ?336次下載
    S7-200 <b class='flag-5'>Modbus</b><b class='flag-5'>通信協(xié)議</b>手冊(cè)

    Modbus通信協(xié)議詳解

    關(guān)于Modbus通信協(xié)議的詳解和應(yīng)用分析
    發(fā)表于 10-12 16:54 ?150次下載
    <b class='flag-5'>Modbus</b><b class='flag-5'>通信協(xié)議</b>詳解

    Modbus通信協(xié)議教程

    Modbus通信協(xié)議教程Modbus通信協(xié)議教程Modbus通信協(xié)議教程
    發(fā)表于 12-08 14:14 ?75次下載

    ModBus通信協(xié)議及編程

    ModBus通信協(xié)議及編程。
    發(fā)表于 05-11 16:40 ?21次下載

    ModBus通信協(xié)議及編程_朱小襄

    ModBus通信協(xié)議及編程_朱小襄
    發(fā)表于 03-21 20:01 ?2次下載

    Modbus通信協(xié)議為什么這么受歡迎?

    01什么是ModbusModbus即總線協(xié)議,此協(xié)議多用于工業(yè)領(lǐng)域。Modbus是一種串行通信協(xié)議
    的頭像 發(fā)表于 02-13 10:41 ?1778次閱讀
    <b class='flag-5'>Modbus</b><b class='flag-5'>通信協(xié)議</b>為什么這么受歡迎?