MODBUS 协议在HMI中如何应用?
在人机界面设计应用中,经常碰到需要与自行设计的单片机控制板通讯的情况。在这些应用环境下,MODBUS 协议是 HMI 与设备间实现主从通信模式中的一种方式。
下面用单片机(以下称为 MCU)和 HMI 通过 MODBUS 协议(用 RTU 传输模式)的通信,来介绍如何使用MODBUS 协议实现 HMI 与 MCU 间通信。
HMI 与 MCU 间通过 MODBUS 协议通信主要有下面两种主从方式:
表6 MODBUS 协议通信的两种主从方式
主/从 |
使用通讯协议 |
优点 |
缺点 |
HMI 作主设备 MCU 作从设备 |
Modbus RTU |
HMI 直接访问 MCU 映射出来的 0X,1X,3X,4X 寄存器。 |
MCU 作为从设备,必须不断响应 HMI的查询,CPU 占用率高;MCU 须采用中断方式响应,编程相对困难。 |
MCU 作主设备 HMI 作从设备 |
Modbus RTU Slave |
MCU 作为主设备,可以主动发起通讯,不必占用过多 CPU 时间。HMI 本地地址 LW,LB 被映射为4X,0X 寄存器,由 MCU 写入或读取。 |
HMI 组态上 LW 数据被修改时,必须通过 MCU 的定期查询才能被读出,实现起来不方便。MCU 只能访问 HMI 本地字(LW),本地位(LB) |
HMI 作主,MCU 作从,使用 Modbus RTU 协议(HMI 作从,MCU 作主就不做说明了):
MCU 与 HMI 使用标准的 Modbus RTU 协议进行通信,HMI 为主控端, MCU 为从属端,在 MCU 中,需要编写通信中断服务程序,处理来自 HMI 的通讯请求。MCU 须支持标准 Modbus RTU 协议,同时 MCU 须映射出 0X,1X,3X,4X 寄存器(其中 0X,1X 为位寄存器;3X,4X 为字寄存器)
通讯的推荐参数为 19200,8 数据位,1 停止位,无校验位。协议支持除 7 数据位之外的所有设置组合。波特率范围1200-115200。
通讯处理流程
首先,HMI 发送一个请求给 MCU, MCU 接受请求之后,给 HMI 回复一个响应。MCU 能访问 HMI 中 4X,3X,0X,1X 寄存器,地址范围均为 1~65535。
HMI 上电通讯处理流程,当 HMI 上电后
(1)如果组态工程页面中没有放置任何元件,则 HMI 不会对外发送任何通讯数据包
(2)如果组态工程页面中放置了元件,且这些元件地址类型均为本地类型(LW,RW,RWI,LB,RB,RBI,LW.B),
则 HMI 不会对外发送任何通讯数据包
(3)如果组态工程页面中放置了元件,且这些元件地址类型不为本地类型,为 0X,1X,3X,4X,则 HMI 不断扫描
组态页面的这些寄存器,不断对外发送通讯数据包
(4)当使用定时器元件进行位元件批量写(连续地址传输个数大于 1)的时候,HMI 所发数据包中会封装功能码:
0x0F
(5)当使用定时器元件进行字元件批量写(连续地址传输个数大于 1)的时候,HMI 所发数据包中会封装功能码:0x10
(6)使用配方元件进行下载操作(即把 HMI 中本地字寄存器 RW 数据下载到 MCU 相应寄存器中)。