进制转换
HEX 16进制 (0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F表示0-15)
dec 10进制
n(16进制) -> 10
abcd.efg(n) = d*n^0 + c*n^1 + b*n^2 + a*n^3 + e*n^-1 + f*n^-2 + g*n^-3(10)
10 -> n(16进制)
Modbus基础概念
高位为NUM_H,低位为NUM_L
2F 3D
S7协议对接遇到的问题:
平台s7协议轮训取数据,连接不上设备,一直断开链接。
原因:有模拟软件连接着设备,故平台连接不上。关闭模拟软件等几分钟即可。
1.Modbus按照一般维度分为Modbus Rtu、Modbus ASCII、Modbus TCP三种模式。从接口类型维度来说,Modbus Rtu和ASCII基于串行链路(串行传输),属于串行通讯口(serial port)[ 各种介质,如有线RS-232-/422/485等串口连接线,接DTU设备(将RS485数据转为tcp数据双向)进行无线传输 ],Mobus tcp基于TCP/IP协议,属于网络(以太网)通讯口[以太网网线、无线4G传输等]。 高速令牌传输网络,相应的通信模式是Modbus PLUS。
协议分为硬件协议和软件协议。而通讯协议属于软件协议,它包含报头包围的格式,MODBUS是应用层的通讯协议,主要用于传送和接收文件包的格式。而RS232,RS485是物理层的串行接口,它可以支持几十种通讯协议,MODBUS只是其中的一种。RS232、RS485是一个工业常用的物理接口,是物理层的硬件设备(串口)。
Modbus通讯物理接口可以选用串口(包括RS232和RS485),也可以选择以太网口
2.串口是一种接口标准,它规定了接口的电气标准,简单说只是物理层的一个标准。没有规定接口插件电缆以及使用的协议,所以只要我们使用的接口插件电缆符合串口标准就可以在实际中灵活使用,在串口接口标准上使用各种协议进行通讯及设备控制。所以485的使用范围广,通用性强。典型的串行通讯标准是RS232和RS485。
3.DTU串口服务器
(1)DTU是一种现代物联网行业广泛使用的无线数据终端设备,DTU 支持数据的双向转换,支持将 RS232、RS485、RS422 等常见的串口数据与 TCP/IP 数据进行相互转换,并通过无线通信网络进行传输。dtu串口服务器可实现跨网段传输
对于不方便拉宽带线或则无法随时拉宽带联网却要实现连网远程监控控制就需要到了同时具备工业4G路由器联网和串口转4G/WIFI模块的DTU
工业4G路由器实现串口转4G/WiFi/以太网过程中需要到一种网络通信传输协议叫TCP/IP.( TCP 握手 UDP 不握手 )
4.常见有线通信协议
(1)USB
(2)串口连接线(RS485/RS232):
(3)以太网网线
5.MODBUS是一种标准的工业控制数据交换协议,可以通过RTU和ASCII交换协议数据。RTU通过二进制数据直接传输数据,而TCP通过将每个字节的二进制数据转换成固定的二位十六进制字符串,然后依次串联,以TCP代码的形式传输数据。RTU通常使用最多比较简单。
Modbus协议属于应用层(OSI模型第7层)协议,TCP/UDP协议属于传输层(OSI模型第4层)协议
Modbus TCP协议则是在RTU协议上加一个MBAP报文头,
由于TCP是基于可靠连接的服务,RTU协议中的CRC校验码就不再需要,所以在Modbus TCP协议中是没有CRC校验码,用一句比较通俗的话说就是:Modbus TCP协议就是Modbus RTU协议在前面加上五个0以及一个6,然后去掉两个CRC校验码字节就OK.虽然这句话说得不是特别准确,但是也基本上把RTU与TCP之间的区别说得比较清楚了
iot.modbus.client 数据采集服务,传输层通过tcp传输,顶层应用层协议是modbus。(tcp双向连接协议。udp单向无连接协议)
如果你这个硬件设备支持modbus tcp可以不用dtu,用dtu主要就是把485信号转成tcp的
1.MODBUS RTU
Modbus设备一般通过dtu,连接modbus采集服务(将485信号转为tcp),配置dtu服务器的目标ip和目标端口为10.1.1.115、60001(dtu作为tcp客户端连接到115的60001)。 此方式由于dtu串口服务器可实现跨网段传输,故可在内网使用,也可以在外网通过域名使用。
dtu作为tcp客户端通过tcp与modbus采集服务通讯,进行数据传输。
2.MODBUS TCP
通过tcp协议通道,iot.modbus.client 采集服务作为tcp客户端,配置目标ip和端口,连接到modbus设备主机上(此时其作为tcp服务器端)。
注意:此方式只能用于内网使用。
PS:路由器一般都提供内网透传功能:比如tp-link 可以将内网端口映射到外网端口上,可以通过外网端口进行访问。
配置tp-link:传输控制-NAT设置-虚拟服务器。增加iot.modbus.client映射60001,ecmaster 8088映射,mqtt 8083(ws) 1883(mqtt)映射。并配置环回地址:10.0.0.0/8
Modbus通信协议原理具备如下的特征:
一次只有一个主机(Master)连接到网络
只有主设备(Master)可以启动通信并向从设备(Slave)发送请求
主设备(Master)可以使用其特定地址单独寻址每个从设备(Slave),也可以使用地址0(广播)同时寻址所有从设备(Slave)
从设备(Slave)只能向主设备(Master)发送回复
从设备(Slave)无法启动与主设备(Master)或其他从设备(Slave)的通信
Modbus通信协议 RTU通讯案例
以温湿度变送器(485型)为例
1 通讯基本参数
编 码 |
8位二进制 |
数据位 |
8位 |
奇偶校验位 |
无 |
停止位 |
1位 |
错误校验 |
CRC(冗余循环码) |
波特率 |
2400bit/s、4800bit/s、9600 bit/s可设,出厂默认为4800bit/s |
2 通讯基本参数
采用Modbus-RTU通讯规约,格式如下:
初始结构 ≥4 字节的时间
地址码 = 1 字节
功能码 = 1 字节
数据区 = N 字节
错误校验 = 16 位CRC 码
结束结构 ≥4 字节的时间
地址码:为变送器的地址,在通讯网络中是唯一的(出厂默认0x01)。
功能码:主机所发指令功能指示,本变送器只用到功能码0x03(读取寄存器数据)。
数据区:数据区是具体通讯数据,注意16bits数据高字节在前!
CRC码:二字节的校验码。
主机问询帧结构:
地址码 |
功能码 |
寄存器起始地址 |
寄存器长度 |
校验码低位 |
校验码高位 |
1字节 |
1字节 |
2字节 |
2字节 |
1字节 |
1字节 |
从机应答帧结构:
地址码 |
功能码 |
有效字节数 |
数据一区 |
第二数据区 |
第N数据区 |
校验码 |
1字节 |
1字节 |
1字节 |
2字节 |
2字节 |
2字节 |
2字节 |
3 寄存器地址
寄存器地址(16进制) |
PLC或组态地址 |
内容 |
操作 |
0000H |
40001 |
湿度(实际值10倍) |
只读 |
0001H |
40002 |
温度(实际值10倍) |
只读 |
0050H |
40081 |
温度校准(实际值10倍) |
读写 |
0051H |
40082 |
湿度校准(实际值10倍) |
读写 |
07D0H |
42001 |
设备地址 |
读写 |
07D1H |
42002 |
设备波特率 |
读写 |
4 通讯协议实例以及解释
举例:读取设备地址0x01(十进制地址为1)的温湿度值
问询帧(十六进制):
地址码 |
功能码 |
起始地址 |
数据长度 |
校验码低位 |
校验码高位 |
0x01 |
0x03 |
0x00 0x00 |
0x00 0x02 |
0xC4 |
0x0B |
应答帧(十六进制): (例如读到湿度为65.8%RH,温度为15.5℃)
地址码 |
功能码 |
返回有效字节数 |
湿度值 |
温度值 |
校验码低位 |
校验码高位 |
0x01 |
0x03 |
0x04 |
0x02 0x92 |
0x00 0x9B |
0x5A |
0x3D |
温度计算:
温度:009BH(十六进制)=155=>温度=15.5℃
湿度计算:
湿度:292H(十六进制)=658=>湿度=65.8%RH
关于通信速率问题
MODBUS 协议本身没有规定最大通信速率。甚至也没有规定电气协议,一般使用 RS232
或者 RS485 的电气协议。
RS485 协议的通讯速率可以达到 10M 以上的,所以理论上,注意是理论上,MODBUS 的
通讯速率是可以做到十几兆的。
由于 MODBUS 属于总线协议,总线上的所有站点要求有相同的通信速率(及相同的奇偶校
验设置),最大的通信速率自然由总线上最慢的站点决定。
使用Mthings模拟器 进行modbus数据模拟测试
mthings官网下载安装即可
1.通道配置
2.从机设备创建
注意:此步骤中批量添加的数据,要与下图中配置的批量数据读取数量一致。