Modbus协议简介
- Modbus(RTU / ASCII / TCP)是一种串行通信协议,是Modicon(莫迪康)公司于1979年,为使用可编程逻辑控制器(PLC)而发表的
- Modbus协议的详细规格是公开的,只定义了通讯协议而没有规定物理层如通讯介质
- Modbus是工业领域通信协议的业界标准,并且现在是工业电子设备之间相当常用的通讯方式
- Modbus比其他通信协议使用的更广泛的主要原因有:
【1】公开发表并且无版税要求
【2】相对容易的工业网络部署
【3】对供应商来说,修改移动原生的位元或字节没有很多限制
Modbus功能码简介
代码 | 功能 | 寄存器PLC地址 | 位操作/字操作 | 操作数量 |
---|---|---|---|---|
01H | 读线圈状态 | 00001-09999 | 位操作 | 单个或多个 |
02H | 读离散输入状态 | 10001-19999 | 位操作 | 单个或多个 |
03H | 读保持寄存器 | 40001-49999 | 字操作 | 单个或多个 |
04H | 读输入寄存器 | 30001-39999 | 字操作 | 单个或多个 |
05H | 写单个线圈 | 00001-09999 | 位操作 | 单个 |
06H | 写单个保持寄存器 | 40001-49999 | 字操作 | 单个 |
0FH | 写多个线圈 | 00001-09999 | 位操作 | 多个 |
10H | 写多个保持寄存器 | 40001-49999 | 字操作 | 多个 |
- 功能码可以分为位操作和字操作两类。位操作的最小单位为BIT,字操作的最小单位为两个字节
- 位操作指令:读线圈状态01H,读(离散)输入状态02H,写单个线圈06H和写多个线圈0FH
- 字操作指令: 读保持寄存器03H,读输入寄存器04H,写单个寄存器06H,写多个保持寄存器10H
Modbus寄存器种类说明
寄存器种类 | 说明 | PLC类比 | 举例说明 |
---|---|---|---|
线圈状态 | 输出端口。可设定端口的输出状态,也可以读取该位的输出状态。可分为两种不同的执行状态,例如保持型或边沿触发型 | DO(数字量输出) | 电磁阀输出,MOSFET输出,LED显示等 |
离散输入状态 | 输入端口。通过外部设定改变输入状态,可读但不可写 | DI(数字量输入) | 拨码开关,接近开关等 |
保持寄存器 | 输出参数或保持参数,控制器运行时被设定的某些参数。可读可写 | AO(模拟量输出) | 模拟量输出设定值,PID运行参数,变量阀输出大小,传感器报警上限下限 |
输入寄存器 | 输入参数。控制器运行时从外部设备获得的参数。可读但不可写 | AI(模拟量输入) | 模拟量输入 |
Modbus寄存器地址
- Modbus寄存器地址分为Modbus寄存器PLC地址与Modbus寄存器协议地址
- Modbus寄存器PLC地址可以理解为协议地址的变种,在触摸屏和PLC编程中应用较为广泛
- Modbus寄存器PLC地址是在设备自己内部操作的地址
- Modbus寄存器协议地址是Modbus指令中使用的地址
- Modbus寄存器地址分配表:
寄存器PLC地址 | 寄存器协议地址 | 适用功能 | 寄存器种类 | 读写状态 | 区 |
---|---|---|---|---|---|
00001-09999 | 0000H-FFFFH | 01H、05H、0FH | 线圈状态 | 可读可写 | 0区 |
10001-19999 | 0000H-FFFFH | 02H | 离散输入状态 | 只读 | 1区 |
30001-39999 | 0000H-FFFFH | 04H | 输入寄存器 | 只读 | 3区 |
40001-49999 | 0000H-FFFFH | 03H、06H、0FH | 保持寄存器 | 可读可写 | 4区 |
- 寄存器PLC地址指存放于控制器中的地址,这些控制器可以是PLC,也可以使触摸屏,或是文本显示器。PLC地址一般采用10进制描述,共有5位,其中第一位代码寄存器类型(区0、区1、区3、区4)
- 寄存器协议地址指指通信时使用的寄存器地址
– 例如PLC地址40001对应寻址地址0x0000,40002对应寻址地址0x0001,寄存器寻址地址(也就是寄存器协议地址)一般使用16进制描述
– PLC寄存器地址40003对应协议地址0002,PLC寄存器地址30003对应协议地址0002,虽然使用相同的Modbus协议地址进行通信,但是需要使用不同的命令访问,所以访问时不存在冲突// 两条指令的Modbus寄存器协议地址都是0x0002,但是操作从站的Modbus寄存器PLC地址是不同的 01 03 00 02 00 01 25 CA // 协议地址0x0002表示操作PLC地址为40003 01 04 00 02 00 01 90 0A // 协议地址0x0002表示操作PLC地址为30003
- 有些资料就以其第一个数字区分各类地址:在实际编程中,由于前缀的区分作用,所以只需说明后4位数,而且需转换为4位十六进制地址
– 0x代表线圈(DO)类地址
– 1x代表触点(DI)类地址
– 3x代表输入寄存器(AI)类地址
– 4x代表输出寄存器(AO)类地址
来源:CSDN
作者:点康慕
链接:https://blog.csdn.net/MOOG007/article/details/104789714