工控小知识Mod(报文寄存器标识符字节工控)

三分钟学习一个工控小知识,今天讲ModBusTCP
ModBusTCP一共有4个存储区,分别为:103、4区
·1区输入线圈表示只读不值
·0区输出线圈表示可读写不值
·3区输入寄存器表示只读16位整型
·4区输出寄存器表示可读写16位整型
每个区表示什么意思?拿4区举例,已知4区表示输出寄存器
什么是输出寄存器?输出寄存器表示可读、可写16位有符号整型,其实就是表示每个寄存器的数据容量都是负32768到正32767
4区到底有多少个寄存器?就要说到长短地址模型了
先说长地址模型,长地址模型表示65535个数量,使用长地址模型时4区就有65535个寄存器,相应其他区也是一样
再来看短地址模型,表示每个区类型数量有9998个数据类型
怎样从这些区中读出数据?这时就要用到报文了
什么是报文?打个比喻,这是一个外星人,这是一个中国人
外星人这时给中国人说我要看电视,中国人回答我听不懂,他们只有都说中国话双方才能交流,跟报文有什么关系?同理这是两台设备,它们想要实现通信并且还能做到双方都能解析,就可以给它制定一个协议报文,比如:ModBusTCP
定义了协议报文,具体该怎样操作?还是拿4区举例,假设现在想对4区进行读取操作,读取的过程中不仅仅需要协议报文还需要功能码,比如03功能码读取输出寄存器,再比如04功能码读取输入寄存器,相应不同的区读取和写入都有不同的功能码对应
先讲03功能码读取输出寄存器
先来看请求数据报文,MBAP报文头加功能码加起始地址加读取数量,将请求报文发送给服务器会返回一串数据报文给我们,返回报文格式如下:已知发送接受报文格式
接下来用一个案例给大家演示一下
打开Slave软件,选中Connection第一项,选中Mod busTCP,IP输入127.0.0.1本机号,端口输入502,确定
再选中Setup第一项,站号输入1,区域选中4区输出寄存器,从0开始开30个输出寄存器,确定
·再打开Poll软件,同样选中Connection第一项,协议统一Mod busTCP,IP输入Slave软件设置的IP才能连接,端口也一样
下期细节讲解一下什么是IP和端口,确定
·再选中Setup第一项,站号1和Slave一样才能正常通信,功能码选择零3功能码读取输出寄存器,从0开始读取数量3,确定
·再给寄存器一点值,最后选择display最后一项就能看见发送和接收报文了
·再点击Stop停止,按下Control鼠标多选复制
来对报文做一个解析,它们都是16进制表示,Tx表示请求数据报文,也就是Poll软件发送的报文,Rx表示Slave返回的报文,Slave表示服务器
先来讲请求报文,先将前面部分抹去,前面七个字节表示MBAP报文头,由事务标识符占两个字节
什么是事务标识符?这是刚刚Poll软件上的发送和接收报文表,这是所有报文的事物标识符
先来解析第一串收发报文事务标识符,打开计算器,选择程序员模式,选择HEX16进制,输入2D00不用管,转换成DEC十进制,十进制结果45
再来看第二组,同样打开计算器,在X16进制中输入21,转换10进制的结果为46
这时就发现了规律,每组收发报文事务标识符都在递增,没错,其实事务标识符就是用来记录收发报文次数的
再来看协议标识符,它占两个字节都是固定零零永远都不会变,除非写错
再来看长度占两个字节,10进制转换为6,这里的6表示长度后一共还有6个字节
最后一个字节表示单元标识符十进制转换为1,单元标识符也可以称它为站号
再来看零3功能码占一个字节,然后其实地址占两个字节十进制转换为0,最后两个字节表示读取数量十进制转换为3
刚好和发送报文格式对上
再来看一下返回报文,同样先来看MBAP报文头,前两个字节表示事务标识符,然后协议标识符,长度标识符9,单元标识符也就是站号1
·再然后零三功能码占一个字节,字节计数占一个字节,十进制转换为六,这里的字节计数也和长度标识符一样表示后面还剩下几个字节
一共读取了三个寄存器,这是第一个寄存器的值占两个字节,也就是十六位,十进制转换为一二三,同样第二个、第三个,最后完全和Poll软件上读取到的数据值一致
感谢你的观看,视频制作不易,期待你的双击加关注,谢谢支持
工控小知识Mod(报文寄存器标识符字节工控)
(图片来源网络,侵删)

联系我们

在线咨询:点击这里给我发消息