Modbus

流过昼夜 提交于 2020-03-11 12:12:35

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)类地址
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!