0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【实用篇】ModbusTCP协议详解

工控论坛 来源:工控论坛 2024-01-14 11:13 次阅读

概述

Modbus由MODICON公司于1979年开发,是一种工业现场总线协议标准。1996年施耐德公司推出基于以太网TCP/IP的Modbus协议:ModbusTCP。Modbus协议是一项应用层报文传输协议,包括ASCII、RTU、TCP三种报文类型。标准的Modbus协议物理层接口RS232RS422RS485和以太网接口,采用master/slave方式通信。 AModbus TCP数据帧 ModbusTCP的数据帧可分为两部分:MBAP+PDU。(一)报文头MBAP:MBAP为报文头,长度为7字节,组成如下:

25d87d9c-b21d-11ee-8b88-92fbcf53809c.png

25e2e750-b21d-11ee-8b88-92fbcf53809c.png

(二)帧结构PDU:PDU由功能码+数据组成。功能码为1字节,数据长度不定,由具体功能决定。

(1)功能码:Modbus的操作对象有四种:线圈、离散输入、保持寄存器、输入寄存器。

25ed2bc0-b21d-11ee-8b88-92fbcf53809c.png

(2)根据对象的不同,Modbus的功能码有:

25f11d52-b21d-11ee-8b88-92fbcf53809c.png

(3)说明更详细的表:

260752ac-b21d-11ee-8b88-92fbcf53809c.png

BPDU详细结构

(1)0x01:读线圈:在从站中读1~2000个连续线圈状态,ON=1,OFF=0

请求:MBAP 功能码 起始地址H 起始地址L 数量H 数量L(共12字节)

响应:MBAP 功能码 数据长度 数据(一个地址的数据为1位)

如:在从站0x01中,读取开始地址为0x0002的线圈数据,读0x0008位
00 01 00 00 00 06 01 01 00 02 00 08

回:数据长度为0x01个字节,数据为0x01,第一个线圈为ON,其余为OFF
00 01 00 00 00 04 01 01 01 01

(2)0x05:写单个线圈:将从站中的一个输出写成ON或OFF,0xFF00请求输出为ON,0x000请求输出为OFF。

请求:MBAP 功能码 输出地址H 输出地址L 输出值H 输出值L(共12字节)

响应:MBAP 功能码 输出地址H 输出地址L 输出值H 输出值L(共12字节)

如:将地址为0x0003的线圈设为ON
00 01 00 00 00 06 01 05 00 03 FF 00

回:写入成功
00 01 00 00 00 06 01 05 00 03 FF 00

(3)0x0F:写多个线圈:将一个从站中的一个线圈序列的每个线圈都强制为ON或OFF,数据域中置1的位请求相应输出位ON,置0的位请求响应输出为OFF。

请求:MBAP 功能码 起始地址H 起始地址L 输出数量H 输出数量L 字节长度 输出值H 输出值L

响应:MBAP 功能码 起始地址H 起始地址L 输出数量H 输出数量L

(4)0x02:读离散量输入:从一个从站中读1~2000个连续的离散量输入状态。

请求:MBAP 功能码 起始地址H 起始地址L 数量H 数量L(共12字节)

响应:MBAP 功能码 数据长度 数据(长度:9+ceil(数量/8))

如:从地址0x0000开始读0x0012个离散量输入
00 01 00 00 00 06 01 02 00 00 00 12

回:数据长度为0x03个字节,数据为0x01 04 00,表示第一个离散量输入和第11个离散量输入为ON,其余为OFF
00 01 00 00 00 06 01 02 03 01 04 00

(5)0x04:读输入寄存器:从一个远程设备中读1~2000个连续输入寄存器。

请求:MBAP 功能码 起始地址H 起始地址L 寄存器数量H 寄存器数量L(共12字节)

响应:MBAP 功能码 数据长度 寄存器数据(长度:9+寄存器数量×2)

如:读起始地址为0x0002,数量为0x0005的寄存器数据
00 01 00 00 00 06 01 04 00 02 00 05

回:数据长度为0x0A,第一个寄存器的数据为0x0c,其余为0x00
00 01 00 00 00 0D 01 04 0A 00 0C 00 00 00 00 00 00 00 00

(6)0x03:读保持寄存器:从远程设备中读保持寄存器连续块的内容。

请求:MBAP 功能码 起始地址H 起始地址L 寄存器数量H 寄存器数量L(共12字节)

响应:MBAP 功能码 数据长度 寄存器数据(长度:9+寄存器数量×2)

如:起始地址是0x0000,寄存器数量是 0x0003
00 01 00 00 00 06 01 03 00 00 00 03

回:数据长度为0x06,第一个寄存器的数据为0x21,其余为0x00
00 01 00 00 00 09 01 03 06 00 21 00 00 00 00

(7)0x06:写单个保持寄存器:在一个远程设备中写一个保持寄存器。

请求:MBAP 功能码 寄存器地址H 寄存器地址L 寄存器值H 寄存器值L(共12字节)

响应:MBAP 功能码 寄存器地址H 寄存器地址L 寄存器值H 寄存器值L(共12字节)

如:向地址是0x0000的寄存器写入数据0x000A
00 01 00 00 00 06 01 06 00 00 00 0A

回:写入成功
00 01 00 00 00 06 01 06 00 00 00 0A

(8)0x10:写多个保持寄存器:在一个远程设备中写连续寄存器块(1~123个寄存器)。

请求:MBAP 功能码 起始地址H 起始地址L 寄存器数量H 寄存器数量L 字节长度 寄存器值(13+寄存器数量×2)

响应:MBAP 功能码 起始地址H 起始地址L 寄存器数量H 寄存器数量L(共12字节)

如:向起始地址为0x0000,数量为0x0001的寄存器写入数据,数据长度为0x02,数据为0x000F
00 01 00 00 00 09 01 10 00 00 00 01 02 00 0F

回:写入成功
00 01 00 00 00 06 01 10 00 00 00 01

CModbus TCP示例报文

ModBusTcp与串行链路Modbus的数据域是一致的,具体数据域可以参考串行Modbus。这里给出几个ModbusTcp的链路解析说明,辅助新人分析报文。

261be500-b21d-11ee-8b88-92fbcf53809c.jpg

26206aa8-b21d-11ee-8b88-92fbcf53809c.jpg

263c2b26-b21d-11ee-8b88-92fbcf53809c.jpg

264fbe20-b21d-11ee-8b88-92fbcf53809c.jpg

DModbus TCP通信

(一)通信方式

Modbus设备可分为主站(poll)和从站(slave)。主站只有一个,从站有多个,主站向各从站发送请求帧,从站给予响应。在使用TCP通信时,主站为client端,主动建立连接;从站为server端,等待连接。

主站请求:功能码+数据

从站正常响应:请求功能码+响应数据

从站异常响应:异常功能码+异常码,其中异常功能码即将请求功能码的最高有效位置1,异常码指示差错类型

需要超时管理机制,避免无期限的等待可能不出现的应答

IANA(Internet Assigned Numbers Authority,互联网编号分配管理机构)给Modbus协议赋予TCP端口号为502,这是目前在仪表与自动化行业中唯一分配到的端口号。

(二)通信过程

connect 建立TCP连接

准备Modbus报文

使用send命令发送报文

在同一连接下等待应答

使用recv命令读取报文,完成一次数据交换

通信任务结束时,关闭TCP连接

E仿真软件

Modbus poll 和Modbus slave是一组Modbus仿真软件,可以实现Modbus RTU、TCP、串口仿真等。

仿真软件网址:https://modbustools.com/download.html

在ModbusTCP中,Modbus poll 作为客户端请求数据,Modbus slave 作为服务器端处理请求。

使用c语言编写客户端连接Modbus slave时,注意数据格式,一条指令一次性发出,否则连接会出错。

使用软件时,需要指定功能码,在setup->slave definition或者poll definition中进行设置。
– slave ID:从站编号(事务标识符)
– function:功能码,0x01对应线圈操作,0x02对应离散量操作,0x03对应保持寄存器操作,0x04对应输入寄存器操作
– address:开始地址
– quantity:寄存器/线圈/离散量 的数量

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    31

    文章

    5304

    浏览量

    119887
  • MODBUS
    +关注

    关注

    28

    文章

    1759

    浏览量

    76775
  • 服务器
    +关注

    关注

    12

    文章

    8983

    浏览量

    85109

原文标题:【实用篇】ModbusTCP协议详解

文章出处:【微信号:gkongbbs,微信公众号:工控论坛】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    ProfibusDP主站转ModbusTCP协议转换网关技术需求干货讲解

    ProfibusDP主站转ModbusTCP协议转换网关的技术参数● 支持的波特率:9.6Kbps~12Mbps● 供电:24VDC(±5%),最大功率3.5W● 工作环境温度:-25~55℃,湿度
    发表于 11-13 15:23

    ModbusTCP转Profinet协议转化网关功能与配置详解

    怎么样让ModbusTCP和Profinet通讯连接起来?这几天有几个客户朋友咨询到这个问题,作者在这里统一为大家回复一下。想要解决这个问题其实也非常简单,只需要用到一个设备,名为YC-TCP-PN
    的头像 发表于 07-30 11:21 296次阅读
    <b class='flag-5'>ModbusTCP</b>转Profinet<b class='flag-5'>协议</b>转化网关功能与配置<b class='flag-5'>详解</b>

    Profinet转ModbusTCP网关模块的配置与应用详解

    Profinet转ModbusTCP网关模块(XD-ETHPN20)是一种常见的工业通信设备,广泛应用于现代工业自动化系统中。通过使用Profinet转Modbus TCP网关模块
    的头像 发表于 07-26 09:51 410次阅读
    Profinet转<b class='flag-5'>ModbusTCP</b>网关模块的配置与应用<b class='flag-5'>详解</b>

    EtherNet IP转ModbusTCP协议网关功能与配置详解

    怎么样才能把EtherNet/IP和ModbusTCP网络连接起来呢? 这几天有几个朋友问到了这个问题,作者在这里统一为大家详细说明一下。其实有一个设备可以很轻松地解决这个问题,名为
    的头像 发表于 07-25 16:18 321次阅读
    EtherNet IP转<b class='flag-5'>ModbusTCP</b><b class='flag-5'>协议</b>网关功能与配置<b class='flag-5'>详解</b>

    EtherCAT转ModbusTCP IP协议转化网关功能与配置详解

    起来。 这款网关连接到EtherCAT总线中做为从站使用,连接到TCP/IP网络中做为服务器或客户端使用。 EtherCAT转ModbusTCP/IP协议
    的头像 发表于 07-25 14:26 365次阅读
    EtherCAT转<b class='flag-5'>ModbusTCP</b> IP<b class='flag-5'>协议</b>转化网关功能与配置<b class='flag-5'>详解</b>

    Profinet转ModbusTCP协议网关协议经典通讯案例

    怎么样把Profinet与ModbusTCP连接起来呢?最近这几天有很多朋友想要了解这个问题,在这里统一为大家详细说明一下。其实有一个设备可以很轻松地解决这个问题,名为YC-PNM-TCP,下面
    的头像 发表于 07-23 15:05 273次阅读
    Profinet转<b class='flag-5'>ModbusTCP</b><b class='flag-5'>协议</b>网关<b class='flag-5'>协议</b>经典通讯案例

    ModbusTCP转ProfibusDP协议转化网关通讯解决方案

    ModbusTCP转ProfibusDP协议转化网关 二,设备拓扑图 ModbusTCP转ProfibusDP协议转化网关 三,配置工程的网络拓扑图如下
    的头像 发表于 07-23 10:30 183次阅读
    <b class='flag-5'>ModbusTCP</b>转ProfibusDP<b class='flag-5'>协议</b>转化网关通讯解决方案

    Profibus DP转ModbusTCP网关模块连马保与上位机通讯

    Profibus_DP转ModbusTCP网关模块(XD-ETHPB20)实现Profibus与ModbusTCP协议转换,支持无缝转换、多种网络配置和Web配置,可以将Profibus网络中
    的头像 发表于 07-10 15:59 1082次阅读
    Profibus DP转<b class='flag-5'>ModbusTCP</b>网关模块连马保与上位机通讯

    Profibus转ModbusTCP网关模块实现Profibus_DP向ModbusTCP转换

    Profibus和ModbusTCP是工业通信协议,利用Profibus转ModbusTCP网关模块(XD-ETHPBM20)可实现协议转换,优化能源管理,提升楼宇智能化水平。本文介绍
    的头像 发表于 07-09 16:21 292次阅读
    Profibus转<b class='flag-5'>ModbusTCP</b>网关模块实现Profibus_DP向<b class='flag-5'>ModbusTCP</b>转换

    LwIP协议栈源码详解—TCP/IP协议的实现

    电子发烧友网站提供《LwIP协议栈源码详解—TCP/IP协议的实现.pdf》资料免费下载
    发表于 07-03 11:22 3次下载

    智能楼宇系统canopen协议ModbusTCP协议进行通讯

    通过CANopen转ModbusTCP网关设备进行转换:可以使用一个CANopen转ModbusTCP网关设备,将CANopen协议转换为Modbus TCP协议。该CANopen转
    的头像 发表于 01-03 15:20 449次阅读
    智能楼宇系统canopen<b class='flag-5'>协议</b>与<b class='flag-5'>ModbusTCP</b><b class='flag-5'>协议</b>进行通讯

    智能楼宇系统canopen协议ModbusTCP协议进行通讯

    通过耐特森CANopen转ModbusTCP网关设备进行转换:可以使用一个CANopen转ModbusTCP网关设备,将CANopen协议转换为Modbus TCP协议。该CANope
    的头像 发表于 01-03 15:17 476次阅读

    港口跨运车通信系统的ModbusTCP转CAN协议的连接案例

    港口跨运车通信系统的ModbusTCP转CAN协议的连接案例 WLJS的系列嵌入式通信模块,允许与特定工业网络进行通信。这些模块是可互换的,这意味着用户可以轻松连接到任何所需的网络。可与所有
    的头像 发表于 01-03 13:53 355次阅读

    通过Profinet转ModbusTCP协议连接储能飞轮的解决方案

    通过使用Profinet转ModbusTCP网关的方式实现了Profinet转ModbusTCP协议的转换,解决了不同设备之间的通信障碍。Profinet转ModbusTCP网关配置软
    的头像 发表于 01-02 16:56 553次阅读
    通过Profinet转<b class='flag-5'>ModbusTCP</b><b class='flag-5'>协议</b>连接储能飞轮的解决方案

    ModbusTCP转CanOpen网关助力工控行业

    在工业自动化领域,协议转换网关一直扮演着至关重要的角色。其中,modbustcp转canopen网关以其独特的优势,成为不同设备间通信的桥梁。这款网关将modbus TCP协议的设备与CANopen
    发表于 12-11 10:53