Modbus-TCP协议说明

这篇具有很好参考价值的文章主要介绍了Modbus-TCP协议说明。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

文章要说明Modbus TCP协议的相关内容。此协议是1996年施耐德公司推出的基于TCP/IP协议的Modbus协议。

一、协议的特点

此协议与Modbus-RTU协议最大的不同就是,使用了在TCP/IP协议上的专用的报文头识别Modbus应用数据单元。这种报文头被称为MBAP报文头。

Modbus-TCP协议说明

 报文头的长度是7个字节,分别有:事务处理标识符,长度为两个字节,用于事务处理配对。它是Modbus的事务处理码,每次通信后就要加一。协议标识符,长度为两个字节,用于系统内的多路复用。当它的值是0(00 00),表示使用Modbus协议。长度,由两个字节构成,用于说明下面还有多少个字节的数量。这样即使TCP将整个报文分为多个信息包传输,接收者也能识别报文的边界。单元标识符,由一个字节构成,当Modbus客户端在请求中设置这个域,在响应中服务器必须利用相同的值返回这个域,可以将其理解为设备地址。报文头之后的功能码和数据部分与Modbus-RTU协议相似。接下来我们还是以实际的报文加以说明。

Modbus-TCP协议说明

二、实验设备介绍

 实验中将网络调试助手软件作为客户机(主站),MT1004或MT2003远程I/O模块作为服务器(从站)。

Modbus-TCP协议说明

 MT1004有16个DO输出端口(线圈),

Modbus-TCP协议说明

 MT2003有8组AI端口,

Modbus-TCP协议说明

 它们可以测量电压和电流信号。模块的配套软件可以查询它的详细信息也具有修改端口号等功能。我们将端口号尽量设置在2000以上,避免与其他协议产生冲突。打开MT软件,找到模块的IP地址、网关、端口等信息。在网络调试助手的网络设置中,选择TCP Client协议类型,输入远程主机地址为192.168.1.200,远程主机端口为2000。接着改变电脑的IP地址,使它们处于同一个网段内。打开电脑的网络设置,选择以太网,点击属性,选中Internet协议版本4,点击属性,输入IP地址:192.168.1.111,子网掩码255.255.255.0,点击确定。返回网络调试助手,点击连接,这样就可以在客户端和服务器之间建立通信。此次通信我们没有将模块并联到一起,所以两模块的参数设置都是相同的。(此段内容是软件及电脑的设置内容,详细内容在文章下方推荐的视频链接中可以看到。)

三、报文详细说明

打开网络调试软件,点击左上角电脑图标,在工具选项中选择MODBUS调试器,在出现的窗口中选择Modbus-TCP协议。现在我们想读取模块DO 5~DO 10的状态。根据指令填写字节,设备默认ID是01,Do在Modbus中被称为线圈,所以选择01命令。这里我们给出协议中四种数据类型的特征以及常用功能码汇总。

Modbus-TCP协议说明

Modbus-TCP协议说明

 打开MT1004模块的用户手册选择相应的寄存器地址。

Modbus-TCP协议说明

 通道5的地址是00006,输入的地址应该是0x0005。读取数据的长度是6个。所以生成的报文为:00 04 00 00 00 06 01 01 00 05 00 06。

Modbus-TCP协议说明

 我们尝试分析这个报文:00 04,是报文头的事务处理标识,点击更新我们能看到它会加一,变为00 05;

Modbus-TCP协议说明

 00 00,是协议标识,说明使用Modbus协议;00 06,说明之后有六个字节的报文内容;01,是单元标识符,也就是设备地址;01,是功能码,表示读取线圈状态;00 05,是寄存器起始地址;00 06,是读取的线圈数量。调整接收设置的格式为HEX,服务器(从机)返回的响应报文是:00 05 00 00 00 04 01 01 01 00。

Modbus-TCP协议说明

 00 05,是此次通信的事务处理标识,与请求报文保持一致;00 00,是协议标识符,与请求报文一致;00 04,是提示之后有4个字节长度的内容;01,是设备地址;01,是功能码,与请求报文相同;01,说明接下来的报文长度;00,表明DO线圈均处于断开状态(0000 0000),高位用零补充。

接下来我们以闭合、断开的规律改变通道5~10的线圈状态,也就是进行写线圈操作,它的命令是0F。生成的报文是:00 07 00 00 00 08 01 0F 00 05 00 06 01 15。

Modbus-TCP协议说明

 报文的解释是:00 07,事务处理标识符;00 00,协议标识,说明使用Modbus协议;00 08,说明接下来有8个字节的报文长度;01,是设备地址;0F,是功能码,请求执行写线圈操作;00 05,是寄存器的起始地址;00 06,是写寄存器的个数;01,说明之后有一个字节的内容;15,反映了要写入的寄存器状态,我们将其写成二进制是:0001 0101,对应通道是10、9、8、7、6、5,最高两位以0补齐。

响应报文是:00 07 00 00 00 06 01 0F 00 05 00 06。

Modbus-TCP协议说明

 对它的解释是:00 07为事务处理标识符;00 00为协议标识符;00 06说明后面有6个字节的报文长度;01为设备地址;0F为功能码;00 05是开始寄存器的地址;00 06是服务器一共改写了6个线圈的状态,我们可以打开软件看一下。可见已经成功为线圈写入状态。

Modbus-TCP协议说明

 最后,我们将压力传感器连接到MT2003模块的AI 5通道上,尝试读取采集卡的输入寄存器的值,功能码是:04。设备的接线图如下图所示:

Modbus-TCP协议说明

 打开用户手册,AI 5 的寄存器地址是6(十进制),

Modbus-TCP协议说明

 所以生成的响应报文是:00 05 00 00 00 06 01 04 00 05 00 01。

Modbus-TCP协议说明

 返回的响应报文是:00 05 00 00 00 05 01 04 02 61 11。

Modbus-TCP协议说明

 通过报文可以看到,模块寄存器中的值是61 11,它反映了模块采集到的电流值的大小。将其转换为十进制是24849。根据用户手册,4mA~20mA的电流值对应0~65535(十进制)的数据值,所以24849对映的电流值为10.07mA。依据压力传感器的技术指标,其测量到的压力大小约为39.1MPa。计算过程如下图所示。

Modbus-TCP协议说明Modbus-TCP协议说明

 Modbus-TCP协议产生错误时返回的报文与Modbus-RTU协议一样,都是功能码加0x80后跟着一个字节的错误代码。大家可以观看我们发布的Modbus-RTU协议的文章,这里我们就不再赘述了。

Modbus-TCP协议说明

 以上就是Modbus-TCP协议的相关内容。

Modbus-TCP协议的视频链接是:https://www.bilibili.com/video/BV1Ed4y1D7jH/?spm_id_from=333.999.0.0&vd_source=a840efafc4eaad82ef9b216d7904def0

Modbus-RTU协议的说明链接是:https://blog.csdn.net/Smacq/article/details/127067002

文章中使用的软件是Modbus Poll,使用的模块可进入https://www.smacq.cn/查看。文章来源地址https://www.toymoban.com/news/detail-506554.html

到了这里,关于Modbus-TCP协议说明的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java与Modbus-TCP/IP网络通讯

    通过Java与Modbus-TCP/IP网络通讯实现举例5中的功能

    2024年02月10日
    浏览(45)
  • TwinCAT3 Modbus-TCP Client/Server使用

    目录 一、环境配置和准备 1、PLC中安装TF6250-Modbus-TCP库 2、勾选TF6250的license 3、PLC工程中添加Tc2_ModbusSrv库文件 4、分别创建测试ModbusTCP测试的Server和Client程序 二、PLC作为Client端 1、设置测试电脑IP地址 2、运行MobusTCP测试工具 3、PLC端程序编写 (1)读取离散量输入 (2)读取线圈

    2024年01月16日
    浏览(43)
  • Python 解析HJ212-2017并输出Modbus-TCP

    功能:   利用python开启服务端口,接受来着环保数采仪上传的HJ212-2017报文数据,解析后并输出Modbus-TCP给上位机或PLC读取,可同时连10个主站。 应用场景: 污水厂进出水在线监测环保数采仪的数据协议转换成通用标准协议。 本次实验由于没有数采仪只能通过TCP客户端模拟报

    2024年02月02日
    浏览(51)
  • 用Python采用Modbus-Tcp的方式读取PLC模块数据

    使用计算器得到需要的寄存器地址 这里PLC地址是83,对应的程序16进制读取地址是53 实际上由于PLC地址从1开始,所以这里实际地址应该是52,因为计算机从0开始 使用网络调试助手生成报文 使用Python中的内置函数int()。以下是将人员卡号’b’3b44’\\\'转换为十进制的示例代码: 使

    2024年02月16日
    浏览(53)
  • 用Python采用Modbus-Tcp的方式读取485电子水尺数据

    使用Python开发服务器程序,实现以下功能: 采用问询的方式读取各类传感器数据 正确高速解析各类传感器的数据 存储解析后的各类传感器数据 存储程序运行过程中的log 管理log,超过一定量、一定时间自动删除log 打包发布 或者 在后台运行py服务器程序 该传感器支持485通信

    2024年02月16日
    浏览(56)
  • CCLINK转MODBUS-TCP网关cclink通讯接线图 终端电阻

    大家好,今天我们要聊的是生产管理系统中的CCLINK和MODBUS-TCP协议,它们的不同使得数据互通比较困难,但捷米JM-CCLK-TCP网关的出现改变了这一切。 1捷米JM-CCLK-TCP是一款自主研发的CCLINK从站功能的通讯网关,它的主要功能是将各种MODBUS-TCP设备接入到CCLINK总线中。网关连接到C

    2024年02月13日
    浏览(42)
  • Codesys与Modbus TCP从站通信详细说明+实例代码+Modbus软件助手

    一、 说明 codesys 软件版本: 3.5.17 测试助手软件 : Modbus Poll 程序和软件下载 : 在底部 二、Codesys设置 1 新建项目 2 选择控制器类型和语言 3 右键点击【Device】选择【添加设备】添加网络驱动 4 再添加Modbus Tcp Slave Device 5 扫描网络并确定 6 扫描Ethernet网络接口 7 设置从站端口号

    2024年01月16日
    浏览(64)
  • Modbus tcp转ETHERCAT网关modbus tcp/ip协议

    捷米JM-ECT-TCP网关能够连接到Modbus tcp总线和ETHERCAT总线中,实现两种不同协议设备之间的通讯。这个网关能够大大提高工业生产的效率和生产效益,让生产变得更加智能化。捷米JM-ECT-TCP 是自主研发的一款 ETHERCAT 从站功能的通讯网关。该产品主要功能是将 ETHERCAT 网络和 MODB

    2024年02月15日
    浏览(72)
  • Modbus TCP通信协议详解

    一、Modbus TCP通信概述 MODBUS/TCP是简单的、中立厂商的用于管理和控制自动化设备的MODBUS系列通讯协议的派生产品,显而易见,它覆盖了使用TCP/IP协议的“Intranet”和“Internet”环境中MODBUS报文的用途。协议的最通用用途是为诸如PLC,I/O模块,以及连接其它简单域总线或I/O模块的

    2024年02月08日
    浏览(156)
  • 嵌入式通信协议【Modbus】Modbus TCP的帧格式

    Client request:例: 19 B2 00 00 00 06 06 03 00 27 00 02 上面是modbus客户端发出的报文内容,为modbus tcp/ip协议格式,其前面的六个字节为头字节( header handle); 19 B2 00 00 00 06 19 B2  00 00 00 06 两个Client发出的检验信息,Sever端只是需要将这两个字节的内容copy以后再放到response的报文的相应位

    2024年02月05日
    浏览(79)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包