工控智汇

工控智汇

RS485全系列合集,18篇好文一次讲清!modbusRTU报文格式,系列18

admin 145 158

之前在自由口的文章中我已经通过自定义的通讯协议向大家讲解了什么是报文,以及如何使用报文发送和接收数据。从本文开始我就一起剖析一下。modbusRTU协议的具体结构,帮助大家彻底掌握modbusRTU协议。

1、地址分类

modbusRTU协议中将数据地址类型分成4种,分别是离散量输入,线圈,输入寄存器和保持寄存器,下面我们一起来看看这些地址类型的特点。


这里大家需要注意的是0和1开头的地址每个通道都是1个位的大小,3和4开头的地址每个通道都是16位也就是1个字的大小。可能看到这里大家还是对这种地址的表达方式没有概念,那我们来看一下当S7-200PLC做modbusRTU从站时S7-200PLC中的地址是如何与上面的地址类型对应的。

线圈:对应S7-200中Q区,地址00001=

离散量输入:对应S7-200中I区,地址10001=

输入寄存器:对应S7-200中AI区,地址30001=AIW0

保持寄存器:具体对应地址可以进行设定,一般对应V区。

2、功能码01

功能码01的作用是读取线圈状态,下面我们来看看具体的报文格式。

主站请求报文:

图2-1

从站应答报文:

图2-2

下面我们先将从站库指令下载到S7-200PLC中让S7-200PLC成为modbusRTU从站具体从站参数设定可以参看图2‑3。

图2-3

将S7-200PLC设定成从站后我将S7-200PLC中和置位为1,保持为0然后用调试软件发送报文查询、、的状态。

图2-4

图2-4所示我们向从站发送0301000000037DE9其中03是从站地址,01是功能码,0000是指起始地址是,0003是指读取3个线圈,7DE9是前面数据的crc校验码。

注:这里需要注意我们按照crc校验算出来的校验码的顺序应该是E97D,而modbusRTU中crc校验计算出来后需要高低字节进行交换所以是7DE9

图2-5

图2-5PLC返回数值是030101059033,其中03是PLC站地址,01是功能码,01是返回给主站的数据小于或者等于1个字节,05的二进制代码是101表示=1、=0、=1,9033是前面数值的crc校验码。

以上就是01功能码的含义和用法。

作者:技成培训网(马乐)版权为技成所有,未经同意盗取必究!

到这里关于RS485的内容就给大家更新完毕啦!

一起来回顾一下之前的17篇文章吧!

看看高手讲解RS485,其实没你想的那么难!系列1

看看高手眼中的RS485有啥不一样?数据的发送(系列2)

看电气大神如何玩转RS-485,数据的接收1(系列3)

技术大牛的经验好文!教你学懂RS-485,数据的接收2(系列4)

RS-485经典好文,如何利用时间判断的方式来接收报文?(系列5)

RS-485通讯:如何对固定长度报文方式来编程?这种专业好文不多见

报文长度不固定,如何控制PLC接收信息?【RS-485专业讲解】系列7

「RS-485通讯」两个中断的使用,电气PLC必备,通俗易懂!系列8

PLC工程师判断站地址的独家见解!9篇485通讯文章汇总!(系列9)

玩PLC必备!【RS-485】又快又准判断站地址技巧!系列10

【玩转RS-485】看电气大牛是怎么做到快速读取从站数据?系列11

电气工程师PLC编程:485通讯中如何读取从站数据?系列12

电气高手讲RS-485:教你向从站写入数据,系列13

PLC编程:RS-485,教你向从站写入数据2「系列14」

RS485中的crc效验,你知道多少?「系列15」

「RS485」如何把crc校验加入到程序里?系列16

电气工程师专业概述modbus通讯,系列17