1. 项目概述
在工业自动化控制系统中,人机界面(HMI)与变频器的通讯是实现设备监控和控制的基础功能。威纶(Weintek)触摸屏作为国内广泛使用的HMI设备,与台达(Delta)变频器通过RS485总线进行MODBUS RTU协议通讯,是一种经济高效的解决方案。
这种通讯方式主要解决以下问题:
- 实现远程控制变频器的启停、正反转、点动等基本操作
- 实时监控变频器运行参数(频率、电流、电压等)
- 减少传统硬接线方式带来的布线复杂度和维护成本
- 为后续系统集成和数据采集提供基础接口
2. 硬件连接与通讯基础
2.1 RS485物理连接
威纶触摸屏与台达变频器通常采用两线制RS485连接方式:
- 触摸屏的RS485接口(通常标记为485+/485-或A/B)
- 变频器的RS485通讯端子(具体端子号参考变频器手册)
接线注意事项:
必须确保所有设备的A/B线对应连接,不能交叉
总线两端需要加装120Ω终端电阻
避免与强电线路平行走线,防止干扰
2.2 MODBUS RTU协议要点
台达变频器通常支持MODBUS RTU从站模式,协议要点包括:
- 通讯速率:默认9600bps(可调整)
- 数据格式:8位数据位,1位停止位,偶校验
- 地址范围:变频器默认站号为1(可修改)
- 功能码支持:03H(读寄存器)、06H(写单个寄存器)
3. 威纶触摸屏配置详解
3.1 通讯参数设置
在威纶EasyBuilder Pro软件中配置通讯参数:
- 打开"系统参数"→"设备列表"
- 添加新设备,选择"MODBUS RTU"
- 设置与变频器一致的通讯参数:
- 波特率:9600
- 数据位:8
- 停止位:1
- 校验:Even
- 指定使用的COM口(根据实际硬件连接)
3.2 变量映射配置
需要创建以下关键变量:
| 变量名称 | 类型 | 地址 | 说明 |
|---|---|---|---|
| Start_CMD | BOOL | 0x0700 | 启动/停止控制位 |
| Forward_CMD | BOOL | 0x0701 | 正反转控制位 |
| Jog_CMD | BOOL | 0x0702 | 点动控制位 |
| Freq_Set | WORD | 0x2000 | 频率设定值(0.1Hz单位) |
| Freq_Value | WORD | 0x0200 | 实际频率读取 |
| Current_Value | WORD | 0x0202 | 输出电流读取(0.01A单位) |
| Voltage_Value | WORD | 0x0204 | 输出电压读取(0.1V单位) |
4. 台达变频器参数配置
4.1 基本通讯参数
需要设置的变频器参数(以台达VFD-M系列为例):
| 参数号 | 参数名称 | 设定值 | 说明 |
|---|---|---|---|
| P00.02 | 运转指令来源 | 1 | 通讯控制模式 |
| P00.03 | 主频率来源 | 1 | 通讯给定频率 |
| P01.00 | 通讯地址 | 1 | MODBUS从站地址 |
| P01.01 | 通讯波特率 | 3 | 对应9600bps |
| P01.02 | 通讯数据格式 | 2 | 8E1(8位数据,偶校验) |
4.2 控制寄存器映射
台达变频器常用控制寄存器:
| 寄存器地址 | 功能说明 | 数值定义 |
|---|---|---|
| 0x0700 | 运行控制 | 1:启动,0:停止 |
| 0x0701 | 方向控制 | 1:正转,0:反转 |
| 0x0702 | 点动控制 | 1:点动模式 |
| 0x2000 | 频率设定值 | 单位0.1Hz(如500=50.0Hz) |
5. 程序实现细节
5.1 控制功能实现
在威纶触摸屏的脚本编辑器中实现控制逻辑:
lua复制-- 启动/停止控制
function ControlStartStop()
local cmd = Start_CMD and 1 or 0
SetData(0x01, 0x06, 0x0700, cmd)
end
-- 正反转控制
function ControlDirection()
local cmd = Forward_CMD and 1 or 0
SetData(0x01, 0x06, 0x0701, cmd)
end
-- 点动控制
function ControlJog()
local cmd = Jog_CMD and 1 or 0
SetData(0x01, 0x06, 0x0702, cmd)
end
-- 频率设定
function SetFrequency()
local value = Freq_Set * 10 -- 转换为0.1Hz单位
SetData(0x01, 0x06, 0x2000, value)
end
5.2 数据采集实现
实时读取变频器运行参数:
lua复制-- 读取运行参数
function ReadParameters()
-- 读取频率(地址0x0200,长度2字节)
local freqData = GetData(0x01, 0x03, 0x0200, 0x0002)
Freq_Value = (freqData[1] << 8 | freqData[2]) / 10.0
-- 读取电流(地址0x0202,长度2字节)
local currentData = GetData(0x01, 0x03, 0x0202, 0x0002)
Current_Value = (currentData[1] << 8 | currentData[2]) / 100.0
-- 读取电压(地址0x0204,长度2字节)
local voltageData = GetData(0x01, 0x03, 0x0204, 0x0002)
Voltage_Value = (voltageData[1] << 8 | voltageData[2]) / 10.0
end
6. 常见问题与解决方案
6.1 通讯连接问题
现象:触摸屏显示"通讯超时"或"设备无响应"
排查步骤:
- 检查物理接线是否正确(A-A,B-B)
- 确认两端终端电阻是否安装
- 检查通讯参数(波特率、校验等)是否一致
- 使用MODBUS调试工具测试变频器是否响应
6.2 控制功能异常
现象:发送控制命令后变频器无动作
解决方案:
- 确认P00.02参数设置为1(通讯控制模式)
- 检查控制寄存器地址是否正确
- 监控实际发送的MODBUS报文是否符合协议规范
6.3 数据读取异常
现象:读取的频率/电流/电压值不正确
处理方法:
- 确认寄存器地址和数据类型是否正确
- 检查数据转换公式(如除以10或100)
- 验证变频器参数中相关参数的显示单位
7. 优化与扩展建议
-
通讯可靠性增强:
- 增加通讯超时重试机制
- 实现心跳包检测功能
- 添加CRC校验失败处理
-
功能扩展:
- 实现多台变频器轮询控制
- 增加故障报警和历史记录功能
- 开发参数批量设置界面
-
性能优化:
- 合理设置数据刷新周期(一般100-500ms)
- 分组读取数据,减少单次通讯数据量
- 使用异步通讯方式避免界面卡顿
在实际项目中,我发现合理设置通讯间隔非常重要。过快的刷新频率会导致通讯负荷增加,而过慢则会影响操作响应。经过多次测试,200-300ms的刷新间隔在大多数场景下都能取得良好平衡。