Modbus:报文介绍
2021-11-11 09:43:05 0 举报
AI智能生成
登录查看完整内容
工业控制规约modbus协议基础概念
作者其他创作
大纲/内容
Modbus官网
Modbus协议
Jamod - Java Modbus implementation
ModbusPal
Modbus4J
JLibModbus
Modbus技术资源
官方资料
Modbus Application Protocol specification V1.1b3
Modbus Protocol Reference Guide
Modbus用户手册
Modbus 通信使用手册
Modbus协议手册
Java实现ModbusTCP通信
MODBUS通讯协议完整介绍
【工控协议专题01】Modbus协议原理与安全性分析
一文看懂Modbus协议
Modbus通讯协议原来是这么回事!看完秒懂了
图文详解Modbus-RTU协议
WinCC通过MODBUS TCP通信读取PAC3200仪表的电能值
WinCC V7.2 Modbus TCP 通讯
WinCC V7.5 SP2:组态和通信
参考资料
0、1
位(bit)
一个字节是8位
字节(byte)
一个字是2个字节
字(word)
一个双字是4个字节
双字(dword)
一个寄存器2个字节
寄存器
字节单位
大端
Big-endian
N/A
Swap Mode
地址低位存储值的高位 地址高位存储值的低位
主机字节序:PowerPC 、SPARC和Motorola处理器是Big-Endian
JAVA字节序:BIG-ENDIAN
网络字节顺序是TCP/IP协议栈中规定好的一种数据表示格式,它与具体的CPU类型、操作系统等无关,从而可以保证数据在不同主机之间传输时能够被正确解释。
网络字节序:BIG-ENDIAN
场景
1234ABCD
小端
Little-endian
byte and word swap
地址低位存储值的低位 地址高位存储值的高位
主机字节序:IA架构(Intel、AMD)的CPU中是Little-Endian
4321DCBA
大端字节互换
Big-endian byte swap
byte swap
2143BADC
小端字节互换
Little-endian byte swap
word swap
3412CDAB
字节序
DigitalInput(数字输入,离散输入)
一个地址一个数据位,用户只能读取它的状态,不能修改。以一个 bit表示 On/Off,用来记录控制信号的状态输入
例如:开关,接触点,马达运转,超限switch…等等
于PLC上被称为Input relay、input coil等。
DI
DigitalOutput(数字输出,线圈输出)
一个地址一个数据位,用户可以置位、复位,可以回读状态。以一个 bit表示 On/Off,用来输出控制信号
例如:激活或停止马达,警铃,灯光…等等
于PLC上被称为Output relay、Output coil等。
DO
AnalogInput(模拟输入,输入寄存器)
一个地址16位数据,用户只能读,不能修改,以16 bits integer表示一个数值,用来记录控制信号的数值输入
例如:温度、流量、料量、速度、转速、文件板开度、液位、重量…等等
于PLC上被称为Input register
AI
AnalogOutput(模拟输出,保持寄存器)
一个地址16位数据,用户可以写,也可以回读,以16 bits integer表示一个数值,用来输出控制信号的数值
例如:温度、流量、速度、转速、文件板开度、饲料量…等等设定值
于PLC上被称为Output register、Holding register
AO
控制数据四种型式(参考PLC)
Modbus协议中寄存器地址从1开始,而实际存储中地址从0开始。假如要读取寄存器编号为40005(4为块编号,5为modbus中寄存器地址)的寄存器的数据,则应把0x0004放入报文的地址域。寄存器定义,又名码表或者信息点表,应由厂家提供的。
05功能码-单写
15功能码-单写
01功能码-读
开关量。该区域地址空间可读可写
0x,DO,输出(线圈)位寄存器
02功能码-读
开关量。该区域地址空间只读
1x,DI,输入(触点)位寄存器
04功能码-读
模拟量。该区域地址空间只读
操作 WORD
操作 Bit
3x-bit,输入寄存器-字位
操作 DWORD
3x-D,输入寄存器-双字
3x,输入寄存器
06功能码-单写
16功能码-多写
03功能码-读
模拟量。该区域地址空间可读可写
400001,400002,400003.....等
例如:
400006.00,400006.01,400006.02...等
(4x-bit)600.00,或(4x-bit)600 【威纶通MT8000】
例如
4x-bit,保持寄存器-字位
4x-D,保持寄存器-双字
4x,保持寄存器
常用地址表示方法
寄存器地址
[+1] = [0000 0001]原[-1] = [1000 0001]原
原码
正数的反码是其本身
[+1] = [0000 0001]原 = [0000 0001]反[-1] = [1000 0001]原 = [1111 1110]反
反码
正数的补码就是其本身
计算机用补码存储数据,以及进行计算
[+1] = [0000 0001]原 = [0000 0001]反 = [0000 0001]补[-1] = [1000 0001]原 = [1111 1110]反 = [1111 1111]补
补码
二进制存储
1bit(符号位)
指数范围:-127~+128
-2^128 ~ +2^128
-3.40E+38 ~ +3.40E+38
数值范围:
8bits(指数位)
精度是由尾数的位数来决定的
2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字;
23bits(尾数位)
Float
1bit(符号位)
指数范围:-1023~+1024
-2^1024 ~ +2^1024
-1.79E+308 ~ +1.79E+308
11bits(指数位)
2^52 = 4503599627370496,一共16位,同理,绝对能保证的为15位,double的精度为15~16位
52bits(尾数位)
Double
浮点数值类型
概念术语
图例
1字节
功能码
可变长度
数据域
协议数据单元(PDU)Protocol Data Unit
地址域
PDU(帧结构)
2字节
差错校验
应用数据单元(ADU)Application Data Unit
Modbus 通用数据帧格式
串口传输
采用16 位CRC校验
RTU模式
纵向冗余校验(Longitudinal Redundancy Check ,LRC)
采用LRC校验
消息帧以英文冒号(\":\",ASCII \"3A\" Hex)开始,以回车和换号(CRLF,ASCII \"0D\" and \"0A\" Hex)符号结束,允许的传输的字符集为十六进制的0~9和A~F
ASCII模式
以太网传输
不使用校验
常用TCP端口: 502
【1】传输标志可理解为序列号,防止 MODBUS TCP通信错位,例如后发生的响应先到了主机,而早发生的响应后到主机【2】单元标志可理解为从机地址,此时已经不再重要
MBAP(报文头)
TCP/IP模式
传输方式
异常码、错误代码
[设备地址] [功能码01] [起始线圈地址高8位] [低8位] [读取的线圈数量高8位] [低8位] [CRC低8位] [CRC高8位]
[11][01][00][13][00][37][CRC低][CRC高]
主机询问,起始地址为0x0013,线圈数量是0x0037个
主机发送
[11][01][05][CD][6B][B2][0E][1B] [CRC高] [CRC低]
由于每一个字节数据是一个8位的数,所以每一个字节数据表示8个开关量的值,每一位为0表示对应的开关断开,为1表示闭合。
如果询问的开关量不是8的整倍数,那么最后一个字节的高位部分无意义,置为0。
字节数是0x05,数据域为[CD][6B][B2][0E][1B]
4byte+(3个0+5bit)
bit0 - bit24
查询37bit数据,
[CD]
[6B]
[B2]
[0E]
[1B]
从机回复
0x01 读线圈状态
0x02 读离散量输入状态
主机发送:01 03 00 32 00 02 xx xx从机回复:01 03 04 01 02 03 04 xx xx
主机所发送的命令表示,想要读取1号从机从0x32开始的2个寄存器的内容,而从机回复0x32和0x33寄存器内的数据,总共4个字节。最后两个字节是校验码。
0x03 读保持寄存器
0x04 读输入寄存器
主机发送:11 05 00 AC FF 00 xx xx从机回复:11 05 00 AC FF 00 xx xx
FF00H值请求线圈处于ON状态,0000H值请求线圈处于OFF状态
0x05 写单个线圈状态
主机发送:01 06 00 32 12 32 xx xx从机回复:01 06 00 32 12 32 xx xx
该功能码,从机所回复的数据和主机下发的数据是一致的。该条指令的含义为:主机想给1号从机的0x32寄存器中写入0x1232数据,最后所跟的是校验码。
0x06 写单个保持寄存器
0x0F 写多个线圈状态
0x10功能码也是写寄存器,但是与0x06所不同的是该功能码可以连续写多个寄存器
主机下发的数据结构为:地址、功能码、寄存器起始地址、寄存器个数、要写入数据的字节数、数据、校验码等。从机回复的数据格式为:地址、功能码、寄存器起始地址、寄存器个数、校验码等
所表示的含义是,从0x0034开始连续写入四个字节的数据到2个寄存器中,最后两个字节是校验码。
0x10 写多个保持寄存器
地址(1字节)、功能码+0x80(1字节)、异常码(1字节)、校验码(2字节)
异常响应报文由从站地址、功能码以及异常码构成。其中,功能码与正常响应报文不同,在异常响应报文中,功能码最高位(即MSB)被设置为1。因为Modbus协议中功能码占用一个字节,故用表达式描述为:异常功能码=正常功能码+0x80。
异常报文格式
主机发送 :01 10 01 8E 00 01 02 00 00 69 BE(向寄存器0x018E写入一个数值为0的数据)从机正确回复:01 10 01 8E 00 01 60 1E (向寄存器地址0x018E写操作一个寄存器)从机错误回复:01 90 01 8D C0(写操作非法功能,可能是向输入寄存器写数据)
异常响应报文
功能代码
Modbus 基础概念
0 条评论
回复 删除
下一页