1. 项目背景与核心需求
在工业自动化产线中,PLC与HMI的稳定通信是保证生产顺畅的基础设施。这次我们要解决的是汇川AM402系列PLC与台达DOP107EG触摸屏之间的数据交互问题,同时开发一套标准化的气缸上下料模板程序。这个组合在3C电子和汽车零部件行业特别常见,主要应对小型自动化工作站的需求。
AM402作为汇川的中端PLC,支持标准的Modbus RTU/TCP协议,而台达DOP107EG则是7寸触摸屏中的性价比之选。两者通信看似简单,但实际调试时会遇到协议匹配、地址映射、数据刷新率等一系列"坑"。气缸控制模板更是产线调试的痛点——每次新项目都要重新编写基本动作逻辑,既浪费时间又容易出错。
2. 通信协议配置详解
2.1 硬件连接方案选择
推荐采用RS485通信(两线制),接线时注意:
- AM402的COM2口(自带RS485)与DOP107EG的RS485端口对接
- 终端电阻根据线路长度决定,超过20米建议在两端各加120Ω电阻
- 线缆选用双绞屏蔽线,屏蔽层单端接地(通常在PLC侧)
重要提示:AM402的RS485接口定义与常规PLC不同,其DB9接口的引脚3为B,引脚8为A,接反会导致通信失败
2.2 通信参数匹配设置
在AM402编程软件(InoProShop)中配置:
plaintext复制站号:1(主站)
波特率:19200(与触摸屏保持一致)
数据位:8
停止位:1
校验方式:偶校验
DOP107EG侧的对应设置路径:
plaintext复制系统参数 -> 通信设置 -> COM1
协议类型:Modbus RTU
站号:2(从站)
其他参数与PLC完全一致
2.3 地址映射技巧
AM402的寄存器地址需要转换为Modbus地址格式:
- 输入寄存器:4x地址,如%IW100对应400101
- 保持寄存器:4x地址,如%MW50对应400051
- 线圈:0x地址,如%QX0.0对应00001
在DOP屏上建立变量时,直接填写转换后的地址。建议建立地址对照表:
| PLC地址 | Modbus地址 | 数据类型 | 注释 |
|---|---|---|---|
| %MW100 | 400101 | INT | 产品计数 |
| %QX0.1 | 00002 | BOOL | 气缸伸出信号 |
3. 气缸控制模板程序设计
3.1 标准动作流程分解
典型上下料气缸控制包含以下状态:
- 初始位置检测(磁性开关)
- 伸出动作(带超时保护)
- 末端位置确认
- 缩回动作
- 复位完成检测
在AM402中用结构化文本(ST)实现:
st复制// 气缸控制功能块
FUNCTION_BLOCK FB_CylinderControl
VAR_INPUT
bManualMode: BOOL; // 手动模式
bAutoStart: BOOL; // 自动启动
tExtendTime: TIME := T#2S; // 伸出超时
END_VAR
VAR_OUTPUT
bExtendOK: BOOL; // 伸出到位
bRetractOK: BOOL; // 缩回到位
END_VAR
VAR
tExtendTimer: TON;
END_VAR
// 主逻辑
IF NOT bManualMode THEN
IF bAutoStart AND NOT bExtendOK THEN
// 驱动气缸伸出
%QX0.0 := TRUE;
tExtendTimer(IN:=TRUE, PT:=tExtendTime);
// 超时报警处理
IF tExtendTimer.Q THEN
// 触发报警代码
%MW200 := 16#1001;
END_IF
END_IF
END_IF
3.2 HMI操作界面设计要点
在DOP107EG上建议布局:
- 状态显示区:气缸位置、报警代码
- 手动操作区(带权限控制)
- 参数设置区:超时时间、动作延时等
- 计数信息区:循环次数、NG次数
使用宏指令实现模式切换互锁:
vb复制' 自动模式切换脚本
If Screen.Active Then
If ManualMode.Value = 1 Then
AutoStart.Enable = 0
ExtendBtn.Enable = 1
RetractBtn.Enable = 1
Else
AutoStart.Enable = 1
ExtendBtn.Enable = 0
RetractBtn.Enable = 0
End If
End If
4. 调试问题排查实录
4.1 通信故障处理清单
| 现象 | 可能原因 | 排查步骤 |
|---|---|---|
| 通信时断时续 | 终端电阻未接 | 测量AB线间电阻应为60Ω |
| 数据错乱 | 波特率不匹配 | 用USB转485适配器抓包 |
| 完全无响应 | 地址映射错误 | 用Modscan测试PLC寄存器 |
4.2 气缸动作异常处理
案例1:气缸伸出后不缩回
- 检查磁性开关信号是否正常(%IX0.0状态)
- 确认气源压力是否≥0.4MPa
- 排查电磁阀线圈电阻(正常值约20Ω)
案例2:HMI按钮操作无响应
- 检查PLC与HMI的通信指示灯状态
- 确认变量地址是否被其他功能占用
- 查看PLC程序是否处于RUN模式
5. 模板程序优化技巧
5.1 标准化功能块封装
将气缸控制逻辑封装成可复用的功能块,通过实例化调用:
st复制// 在全局变量中声明
VAR_GLOBAL
Cylinder1: FB_CylinderControl;
Cylinder2: FB_CylinderControl;
END_VAR
// 在程序中调用
Cylinder1(
bManualMode := %MX100.0,
bAutoStart := %MX100.1,
tExtendTime := T#1S500MS
);
5.2 报警管理策略
建立统一的报警处理机制:
- 报警代码结构:
- 高字节:设备编号(1#气缸=0x10)
- 低字节:错误类型(超时=0x01)
- HMI报警页面配置:
- 使用"事件显示"元件
- 绑定报警字%MW200
- 设置报警优先级过滤
5.3 生产数据统计
在HMI上实现:
- 班次产量统计(掉电保持)
- 设备OEE计算
- 气缸动作次数监控
对应的PLC程序实现:
st复制// 产量计数器
IF %IX0.5 THEN // 检测到位信号
%MW110 := %MW110 + 1;
IF %MW110 >= 100 THEN
%MW111 := %MW111 + 1; // 班次计数
%MW110 := 0;
END_IF
END_IF
这套模板在实际项目中已经验证过30+台设备,通信稳定性方面有两个关键经验:一是RS485接线一定要用双绞线且屏蔽层单端接地;二是HMI的刷新周期建议设置为300ms,过快的刷新率反而会导致通信拥堵。气缸控制模板最大的优势是标准化——新项目只需修改I/O映射和时序参数,基础逻辑完全复用,调试时间能缩短60%以上。