大家好,欢迎来到IT知识分享网。
之前在自由口的文章中我已经通过自定义的通讯协议向大家讲解了什么是报文,以及如何使用报文发送和接收数据。从本文开始我就一起剖析一下。modbus RTU协议的具体结构,帮助大家彻底掌握modbus RTU协议。
1、地址分类
modbus RTU协议中将数据地址类型分成4种,分别是离散量输入,线圈,输入寄存器和保持寄存器,下面我们一起来看看这些地址类型的特点。
这里大家需要注意的是0和1开头的地址每个通道都是1个位的大小,3和4开头的地址每个通道都是16位也就是1个字的大小。可能看到这里大家还是对这种地址的表达方式没有概念,那我们来看一下当S7-200PLC做modbus RTU从站时S7-200PLC中的地址是如何与上面的地址类型对应的。
线圈:对应S7-200中Q区,地址00001 =Q0.0
离散量输入:对应S7-200中I区,地址10001 = I0.0
输入寄存器:对应S7-200中AI区,地址30001 =AIW0
保持寄存器:具体对应地址可以进行设定,一般对应V区。
2、功能码01
功能码01的作用是读取线圈状态,下面我们来看看具体的报文格式。
主站请求报文:
从站应答报文:
下面我们先将从站库指令下载到S7-200PLC中让S7-200PLC成为modbus RTU 从站具体从站参数设定可以参看图 2‑3。
将S7-200PLC设定成从站后我将S7-200PLC中Q0.0和Q0.2置位为1,Q0.1保持为0然后用调试软件发送报文查询Q0.0、Q0.1、Q0.2的状态。
图2-4所示我们向从站发送03 01 00 00 00 03 7D E9其中03是从站地址,01是功能码,00 00是指起始地址是Q0.0, 00 03是指读取3个线圈,7D E9是前面数据的crc校验码。
注: 这里需要注意我们按照crc校验算出来的校验码的顺序应该是E9 7D,而modbus RTU中crc校验计算出来后需要高低字节进行交换所以是7D E9
图 2-5PLC返回数值是03 01 01 05 90 33,其中03是PLC站地址,01是功能码,01是返回给主站的数据小于或者等于1个字节,05的二进制代码是101表示Q0.0 = 1、Q0.1 = 0、Q0.2 = 1,90 33是前面数值的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
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/51201.html