介绍
本 HMI 支持 Modbus RTU、Modbus TCP、Modbus ASCII、ModbusServer RTU、ModbusServer TCP,一个端口可以挂载一种协议的多个设备。
传输格式
默认传输的数据格式为:
起始位:1bit
数据位:8bit
校验位:无
停止位:1bit
串口波特率:
- COM1 RS232 支持 1200 ~ 921600bps,典型波特率:115200bps
- COM2 RS485 支持 1200 ~ 115200bps,典型波特率:9600bps
- COM3 RS422 支持 1200 ~ 115200bps,典型波特率:9600bps
协议说明
HMI 会根据协议配置自动生成符合 MODBUS 协议的指令格式。所以用户不需要考虑屏幕如何生成 Modbus 报文、如何解析 Modbus 报文。屏做主机时,控件上绑定的设备变量通过串口或者网口周期性地发送这些指令到从机,接收从机响应的指令并解析后,更新被设备变量绑定的控件。
设备地址说明
| 寄存器 PLC 地址 | 寄存器协议地址 功能码 | 寄存器种类 读写状态 |
|---|---|---|
| 00001-09999 | 0000-FFFF | 01H、05H、0FH 线圈状态 可读可写 |
| 10001-19999 | 0000-FFFF | 02H 离散输入状态 可读 |
| 30001-39999 | 0000-FFFF | 04H 输入寄存器 可读 |
| 40001-49999 | 0000-FFFF | 03H、06H、10H 保持寄存器 可读可写 |
注意:HMI 中软元件地址统一为 10 进制,只需将协议地址转化为 HMI 设备地址即可读写该 PLC 地址的寄存器或继电器。ModBus 协议一个地址一个寄存器默认为 2 个字节的字。所以设备变量类型一般选择 16 位整形。继电器为单个位操作,默认为 bool 类型操作单个位。也可改其他类型操作多个位。
使用方法
添加设备
ModBus 做主机
RTU/ASCII右键 设备管理 进行添加,下拉框中选择 Modbus,进而选择 Modbus/RTU 按分区/Modbus/ASCII 按分区

添加完成后,设置通讯串口。根据设备任意设置串口并配置参数。注意:如需在屏下测试,还需要配置 HMI 参数,如下图所示:

在端口号配置上,我们提供了三个 COM 口。COM1 对应 232 电平,COM2 对应 485 电平,COM3 对应 TTL 电平(如遇多个 485-定制板,COM3 也对应 485 电平)。填写其他端口号无效。
TCP右键 设备管理 进行添加,下拉框中选择 Modbus,进而选择 Modbus/TCP按分区。添加完成后,设置通讯网口。根据设备设置配置参数。注意:如需在屏下测试,还需要配置 HMI 参数,如下图所示:

IP 地址为从机地址。(例如我的屏的地址为 192.168.1.100,Modbus 模拟设备的地址为电脑地址 192.168.1.10。通过网线将屏和电脑连在一起。)端口为 TCP 常用 502 端口。注意:端口请谨慎填写。
ModBus 做从机
RTU 选择 ModbusServer/RTU,连接方法同ModBus RTU
选择 ModbusServer/TCP 。IP 地址固定,将会随着屏上地址变化而变化
参数说明
协议参数

- 站点编号:Modbus 只能有一个主站存在,主站在 Modbus 网络上没有地址,从站的地址范围为 0 - 247,其中 0 为广播地址,从站的实际地址范围为 1 - 247。
- 最小采样周期:设备变量生成读写指令队列后的查询轮询时间,默认为 100ms。
- 最大读取字节数:查询指令最大读取字节数,部分设备不相同,默认为 120。
- 最大写入字节数:写入指令最大读取字节数,部分设备不相同,默认为 120。
- 地址段间隔:连续同类型地址的软元件组包的地址段间隔。
- 通讯超时:发送查询指令后最大等待时间。。
- 帧延时:串口或网口收发帧后延时时间单位 ms。
- 字节序:Modbus 默认为小端模式,部分设备字节序不相同。
- 字符串编码格式:未启用,当前 HMI 默认编码格式为 UTF-8。
- 重发次数:默认为 3 次,当 3 次都无信息返回则默认设备离线。
设备变量
添加完设备后,即可添加相应地址的设备变量。下面将展示两种格式:


- Modbus 协议软元件都 按区 来区分
- 设备:HMI 可添加多个设备,不同设备下可添加不同的设备变量。
- 软元件类型:ModBus 设备分 6 种软元件,3 区和 4 区 BIT 都是补充 3 区和 4 区的位操作。
- 地址:协议地址,格式为 10 进制,如果有位操作,则位格式一般为 0.0-0.15
- 变量名字:可自定义软元件名字方便后续引用。
- 数据类型:ModBus 协议寄存器为 2 字节,故寄存器操作多以 16 位整形为主。注:连续地址的多字节读取写入可选择字符串类型来完成。
- 字节数:除字符串类型需自定义,其他类型自动生成字节数大小,按 C++11 标准。
- 变量定义:系统自动生成标识。
构建工程
通过控件绑定

拖动控件并设置关联变量即可实现控件绑定。
ModBusRTU连接视频
ModBusTCP连接视频
通过脚本编写
应用示例示例一:使用 VM 读整型或 BOOL 类型设备变量,其他类型同理。
c++ 复制代码int value =0;
vm->getInt("4区1地址设备变量", value);
示例二:使用 VM 写整型或 BOOL 类型写设备变量,其他类型同理。
c++ 复制代码int value =99;
vm->setInt("4区1地址设备变量", value);
示例三:使用 VM 立即读整型或 BOOL 类型设备变量,其他类型同理。
c++ 复制代码int value =0;
vm->getInt("4区1地址设备变量", value,true);
示例四:使用 VM 立即写整型或 BOOL 类型写设备变量,其他类型同理。
c++ 复制代码int value =99;
vm->setInt("4区1地址设备变量", value,true);
读写注意
变量取反 c++ 复制代码
- 如果不使用第三个参数,如示例一与示例二,则设备变量的读取和写入都为采集线程通讯的参数,如果采集超时或者写队列指令过多,可能会导致采集现场写队列重复。
- 如果 设备变量 设置为 驻留 ,则 全局采集 这个设备变量的地址(即不在当前页面也能及时获取设备变量的刷新)。
- 如果 设备变量 设置为 不驻留,则 当前页面如果有设备变量引用 才会采集该设备变量(即若当前页面设备变量与控件相绑定才可以实时获取设备变量的值)。
- 如果使用第三个参数并设置为 true ,如示例三与示例四,则为单独通道去读写该地址,可以按读写时序操作,完成较为复杂的逻辑。
static bool ison = false;
if(!ison){
vm->setInt("变量_3", 1, true);
vm->setInt("变量_4", 1, true);
vm->setInt("变量_5", 1, true);
ison = true;
}else{
vm->setInt("变量_3", 0, true);
vm->setInt("变量_4", 0, true);
vm->setInt("变量_5", 0, true);
ison = false;
}
注意事项
设置变量驻留

仅有 设备变量 可以设置驻留(其他驱动同理)。
设置驻留的变量不能过多。否则会严重影响执行效率。
关于通用网口
eth0 通常固定为 IP 为 192.168.1.100,默认网关为 192.168.1.1 。
双网口机型 eth1 默认为固定 IP 为 192.168.0.100,默认网关为 192.168.0.1 。
连接视频
D