Modbus TCP通信协议 |
您所在的位置:网站首页 › rs232软件层协议 › Modbus TCP通信协议 |
编辑 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、协议是什么?二、Modbus协议1.概念2.支持接口和报文类型3.优点4.工作过程5.Modbus ASCII、RTU 三、Modbus TCP协议1.数据传输方式2.Modbus TCP数据帧2.1 报文头MBAP2.2 帧结构PDU2.3 数据报文结构举例 3.通信方式 前言最近工作需要用到Modbus-TCP通信协议,找了些资料开始学习,顺便记录学习过程。 提示:以下是本篇文章正文内容,下面案例可供参考 一、协议是什么?类似于人与人沟通用的语言,协议是设备之间沟通的语言,是通信双方都要遵守的内容规范,这样通信双方才能理解传递的数据代表的含义。 协议规范可以有很多种,来适应不同的设备以及通信要求,Modbus是一个串行通信协议。 我们在看Modbus的时候,经常会看到485串口,232串口,这些是什么呢? RS232,RS485是一种电平标准 数据在通信双方之间传输,本质是传输物理的电平 比方说传输5V的电压、-1V的电压信号,这些物理信号在传输过程中会受到很多干扰,比方说你传输一个5V的电压,到了接收端可能就变成了4.8V,并且通信的双方高低电平的参考电压可能不同。 那么这个时候就需要一个电平标准,来判断多少V的电压是高电平 1,多少V的电压是低电平 0 这就诞生了 RS-485 RS-232 也就是RS-485电平标准确定传输过来的数据是0还是1,在此基础上,这些字节数据根据modbus通信协议来进行数据的交互传输。 硬件层协议:解决0和1的可靠传输,常有RS232、RS485、CAN、IIC、SPI … 软件层协议:解决传输目的,常有Modbus、TCP/IP、CANopen … 二、Modbus协议 1.概念Modbus是一种应用层报文传输协议,定义了控制器能认识和使用的消息结构,位于OSI模型上的第七层应用层,协议本身并没有定义物理层,定义了控制器能够认识和使用的消息结构,不管它们是通过何种网络、何种端口进行通讯的。 简单来说,Modbus是一个总线通信协议,但是不依赖于硬件总线。 2.支持接口和报文类型Modbus协议支持多种电气接口,如串口和以太网口。 不同的电气接口对应使用不同的报文类型,Modbus报文类型分为ASCII、RTU和TCP/IP三种。 Modbus协议使用串口传输时可以选择ASCII或者RTU模式,支持RS232、RS422和RS485标准;通过以太网传输时使用TCP。 3.优点(1)公开发表并且无版权要求 (2)对供应商来说,修改移动本地的比特或字节没有很多限制。 (3)Modbus允许多个 (大约240个) 设备连接在同一个网络上进行通信 采用master/slave方式通信。 4.工作过程Modbus是一主多从的通信协议,工作过程如下: 主机(Master)向从机(Slave)发送请求; 从机分析并处理请求,并向主机发送结果; 如果有任何问题,从机将返回一个异常码。
Modbus的ASCII、RTU协议规定了消息、数据的结构、命令和就答的方式。一个ModBus命令包含了打算执行的设备的Modbus地址。所有设备都会收到命令,但只有指定位置的设备会执行及回应指令(地址0例外,指定地址0的指令是广播指令,所有收到指令的设备都会运行,不过不回应指令)。所有的Modbus命令包含了检查码,以确定到达的命令没有被破坏(数据校验)。基本的ModBus命令能指令一个RTU改变它的寄存器的某个值,控制或者读取一个I/O端口,以及指挥设备回送一个或者多个其寄存器中的数据。 三、Modbus TCP协议 1.数据传输方式Modbus的数据传输被定义为对存储区的读写,并且存储的数据类型可以分为布尔量(1位)和寄存器(16位)。 Modbus协议规定4个存储区: Modbus TCP的数据帧可以分为两部分:MBAP+PDU。
MBAP为报文头,长度为7字节,组成如下: 序号名称字节长度说明1事务处理标识2可以理解为报文的序号,一般每次通信之后就要加1以区别不同的通信数据报文。2协议标识200 00表示Modbus TCP协议3长度2表示接下来总字节数4单元标识符1可以理解为设备地址 2.2 帧结构PDUPDU由功能码+数据组成。功能码为1字节,数据长度不定,由具体功能决定。 PDU:协议数据单元,Modbus PDU(protocol data unit) modbus的操作对象有四种:线圈、离散输入、输入寄存器、保持寄存器。 根据对象的不同,Modbus的功能码有: 请求:00 00 00 00 00 06 09 03 00 00 00 01 响应:00 00 00 00 00 05 09 03 02 12 34 一次modbus tcp读取保持寄存器的通信分析(省略了ip/tcp头):从左向右分析该数据报文: 请求: 00 00为此次通信事务处理标识符,一般每次通信之后将被要求加1以区别不同的通信数据报文; 00 00表示协议标识符,00 00为modbus协议; 00 06为数据长度,用来指示接下来数据的长度,单位字节; 09为设备地址,用以标识连接在串行线或者网络上的远程服务端的地址。以上七个字节也被称为modbus报文头; 03为功能码,此时代码03为读取保持寄存器数据; 00 00为起始地址; 00 01为寄存器数量,(word数量)。 响应: 00 00为此次通信事务处理标识符,应答报文要求与先前对应的请求保持一致; 00 00为协议标识符,与先前对应的请求保持一致; 00 05为数据长度,用来指示接下来数据的长度,单位字节; 09为设备地址,应答报文要求与先前对应的请求保持一致; 03为功能码,正常情况下应答报文要求与先前对应的请求保持一致,如果出错则返回80h+先前的功能码; 02指示接下来数据的字节长度; 12 34为被读取的保持寄存器中的数据值,即要求被读取的地址为00 00的保持寄存器中的数值为1234h。 3.通信方式modbus设备可分为主站(poll)和从站(slave)。主站只有一个,从站有多个,主站向各从站发送请求帧,从站给予响应。在使用TCP通信时,主站为client端,主动建立连接;从站为server端,等待连接。 主站请求:功能码+数据 从站正常响应:请求功能码+响应数据 从站异常响应:异常功能码+异常码,其中异常功能码即将请求功能码的最高有效位置1,异常码指示差错类型 注意:需要超时管理机制,避免无期限的等待可能不出现的应答 参考博文:https://blog.csdn.net/as480133937/article/details/123197782?spm=1001.2014.3001.5502 https://blog.csdn.net/zwxue251/article/details/24154951 https://blog.csdn.net/lakerszhy/article/details/68927178?locationNum=4&fps=1 https://zhuanlan.zhihu.com/p/554975366?utm_id=0 https://baijiahao.baidu.com/s?id=1752820511641531972&wfr=spider&for=pc |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |