1.Modbus简介——来自维基百科
Modbus是一种串行通信协议,是Modicon于1979年,为使用可编程逻辑控制器(PLC)而发表的。MODBUS是工业领域通信协议的业界标准,并且现在是工业电子设备之间相当常用的连接方式。Modbus比其他通信协议使用的更广泛的主要原因有:
1.公开发表并且无版税要求
2.相对容易的工业网络部署
3.对供应商来说,修改移动原生的位元或字节没有很多限制
2.MODBUS指令说明 2.1 读线圈寄存器01H 1) 描述: 读MODBUS从机线圈寄存器当前状态。 2) 查询: 例如从机地址为11H,线圈寄存器的起始地址为0013H,结束地址为0037H。该次查询总共访问37个线圈寄存器。 表2.1.1 读线圈寄存器-查询 | Hex | 从机地址 | 11 | 功能码 | 01 | 寄存器起始地址高字节 | 00 | 寄存器起始地址低字节 | 13 | 寄存器数量高字节 | 00 | 寄存器数量低字节 | 25 | CRC校验高字节 | 0E | CRC校验低字节 | 84 |
3) 响应 响应负载中的各线圈状态与数据内容每位相对应。1代表ON,0代表OFF。若返回的线圈数不为8的倍数,则在最后数据字节未尾使用0代替。 表2.1.2 读线圈寄存器-响应 | Hex | 从机地址 | 11 | 功能码 | 01 | 返回字节数 | 05 | 数据1(线圈0013H-线圈001AH) | CD | 数据2(线圈001BH-线圈0022H) | 6B | 数据3(线圈0023H-线圈002AH) | B2 | 数据4(线圈0032H-线圈002BH) | 0E | 数据5(线圈0037H-线圈0033H) | 1B | CRC校验高字节 | 45 | CRC校验低字节 | E6 |
线圈0013H到线圈001AH的状态为CDH,二进制值为11001101,该字节的最高字节为线圈001AH,最低字节为线圈0013H。线圈001AH到线圈0013H的状态分别为ON-ON-OFF-OFF-ON-ON-OFF-ON。 表2.1.3 线圈0013H到001A状态 001AH | 0019H | 0018H | 0017H | 0016H | 0015H | 0014H | 0013H | ON | ON | OFF | OFF | ON | ON | OFF | ON |
最后一个数据字节中,线圈0033H到线圈0037状态为1BH(二进制00011011),线圈0037H是左数第4位,线圈0033H为该字节的最低字节,线圈0037H至线圈0033H的状态分别为ON-ON-OFF-ON-ON,剩余3位使用0填充。 表2.1.4 线圈0033H到线圈0037状态 003AH | 0039H | 0038H | 0037H | 0036H | 0035H | 0034H | 0033H | 填充 | 填充 | 填充 | ON | ON | OFF | ON | ON |
2.2 读离散输入寄存器 02H 1) 说明 读离散输入寄存器状态。 2) 查询 从机地址为11H。离散输入寄存器的起始地址为00C4H,结束寄存器地址为00D9H。总共访问32个离散输入寄存器。 表 2.2.1 读离散输入寄存器——查询 | Hex | 从机地址 | 11 | 功能码 | 02 | 寄存器地址高字节 | 00 | 寄存器地址低字节 | C4 | 寄存器数量高字节 | 00 | 寄存器数量低字节 | 16 | CRC校验高字节 | BA | CRC校验低字节 | A9 |
3) 响应 响应各离散输入寄存器状态,分别对应数据区中的每位值,1 代表ON;0 代表OFF。第一个数据字节的LSB(最低字节)为查询的寻址地址,其他输入口按顺序在该字节中由低字节向高字节排列,直到填充满8位。下一个字节中的8个输入位也是从低字节到高字节排列。若返回的输入位数不是8的倍数,则在最后的数据字节中的剩余位至该字节的最高位使用0填充。 表2.2.1 读输入寄存器-响应
| Hex | 从机地址 | 11 | 功能码 | 02 | 返回字节数 | 03 | 数据1(00C4H-00CBH) | AC | 数据2(00CCH-00D3H) | DB | 数据3(00D4H-00D9H) | 35 | CRC校验高字节 | 20 | CRC校验低字节 | 18 |
离散输入寄存器00D4H到00D9H的状态为35H (二进制00110101)。输入寄存器00D9H为左数第3位,输入寄存器00D4为最低位,输入寄存器00D9H到00D4H的状态分别为ON-ON-OFF-ON-OFF-ON。00DBH寄存器和00DAH寄存器被0填充。 表2.2.2 离散输入寄存器00C4H到00DBH状态 00CBH | 00CAH | 00C9H | 00C8H | 00C7H | 00C6H | 00C5H | 00C4H | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | 00D3H | 00D2H | 00D1H | 00D0H | 00CFH | 00CEH | 00CDH | 00CCH | 1 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 00DBH | 00DAH | 00D9H | 00D8H | 00D7H | 00D6H | 00D5H | 00D4H | 填充 | 填充 | 1 | 1 | 0 | 1 | 0 | 1 |
|