1. 项目概述:汇川H5U与MCGS触摸屏的三轴示教系统开发
去年入手了一套汇川H5U PLC和MCGS触摸屏组合,原本只是想学习基础的运动控制,没想到这套系统的开放程度远超预期。这个三轴示教系统不仅实现了XYZ轴的精准控制,更重要的是提供了完整可修改的源码,注释详细到每个寄存器用途都有说明,对于工控开发者来说简直就是开箱即用的教学宝典。
系统核心功能包括:
- 可视化示教点录入(支持坐标实时显示与修改)
- 三轴联动直线插补运动
- 完整的离线仿真体系(无需实际硬件即可调试)
- 模块化程序架构(运动控制、通讯、HMI完全解耦)
特别适合以下场景:
- 机械臂控制入门学习
- 小型自动化设备原型开发
- 运动控制算法验证平台
- 工业HMI二次开发实战
2. 硬件环境搭建要点
2.1 设备选型建议
这套系统的核心硬件包括:
- 汇川H5U-1616MT-XP PLC(16点输入/16点晶体管输出)
- MCGS TPC7062Ti触摸屏(7寸高亮度屏)
- 三台伺服电机(推荐汇川IS620P系列)
- 24V开关电源(建议留30%功率余量)
注意:如果仅用于学习,可以先用PLC+触摸屏组合进行仿真,实际电机等后续再添置。
接线时需要特别注意:
- PLC的脉冲输出口(Y0-Y3)必须使用屏蔽双绞线连接伺服驱动器
- 急停回路必须采用常闭触点串联接线
- 伺服使能信号建议增加中间继电器隔离
2.2 软件环境配置
开发环境需要准备:
- AutoShop V3.08(汇川H5U编程软件)
- MCGS Pro 3.8(组态软件)
- Modbus Poll(通讯调试工具)
安装时要特别注意:
- AutoShop需要单独安装H5U的设备描述文件
- MCGS软件需安装对应型号的设备驱动包
- 建议关闭所有杀毒软件再安装(工业软件常误报)
3. 核心功能实现解析
3.1 示教点管理系统设计
示教点的存储采用环形缓冲区结构,在PLC中定义了如下数据结构:
st复制TYPE TeachPoint :
STRUCT
X : REAL; // X轴坐标
Y : REAL; // Y轴坐标
Z : REAL; // Z轴坐标
Time : STRING(16); // 记录时间
END_STRUCT
END_TYPE
VAR
PointBuffer : ARRAY[1..50] OF TeachPoint; // 50个点位容量
CurrentIndex : INT; // 当前点位指针
END_VAR
触摸屏上的保存逻辑采用事件驱动方式:
- 点击"记录点位"按钮触发脚本
- 读取各轴当前位置(通过Modbus保持寄存器)
- 生成时间戳字符串
- 写入PLC的PointBuffer数组
实操技巧:在MCGS脚本中使用System.TimeNow()获取时间时,建议格式化为"HH:MM:SS"格式,避免长字符串占用过多寄存器。
3.2 运动控制模块详解
三轴联动采用汇川的MC库函数实现,核心运动指令参数配置如下:
| 参数名 | 数据类型 | 典型值 | 说明 |
|---|---|---|---|
| Velocity | REAL | 5000 | 合成速度(单位:pulse/s) |
| Acceleration | REAL | 300 | 加速度(单位:pulse/s²) |
| Jerk | REAL | 5000 | 加加速度(影响运动平滑度) |
| BufferMode | ENUM | Aborting | 运动指令缓冲模式 |
直线插补的典型调用示例:
st复制MC_MoveLinear(
AxisGroup:=GroupXYZ, // 三轴组
PosX:=PointBuffer[10].X,
PosY:=PointBuffer[10].Y,
PosZ:=PointBuffer[10].Z,
Velocity:=5000,
Acceleration:=300,
Jerk:=5000,
BufferMode:=MC_Aborting);
调试中发现的关键点:
- 加速度参数对机械冲击影响最大,建议从低值开始逐步上调
- 启用Jerk控制可显著减少机械振动(需驱动器支持)
- Aborting模式适合示教场景,但连续运动建议用MC_Buffered
4. 离线仿真系统搭建
4.1 虚拟环境配置步骤
- 在AutoShop中创建虚拟PLC设备
- MCGS Pro中添加虚拟串口驱动(如COM3)
- 使用Virtual Serial Port工具创建端口对(如COM3<->COM4)
- PLC程序设置仿真标志位:
st复制VAR_GLOBAL
SimMode : BOOL := TRUE; // 仿真模式开关
END_VAR
IF SimMode THEN
CurrentPosX := TargetPosX; // 直接跳转位置
CurrentPosY := TargetPosY;
CurrentPosZ := TargetPosZ;
AxisX.Status := MC_AxisStatus.Ready; // 模拟轴就绪状态
END_IF
4.2 仿真调试技巧
- 运动轨迹可视化:在MCGS中创建XYZ坐标趋势图
- 使用Modbus Poll监控关键寄存器变化
- 模拟异常情况(如急停触发、限位报警等)
常见仿真问题处理:
- 通讯超时:检查虚拟串口是否被占用
- 位置不更新:确认PLC的SimMode已启用
- 按钮无响应:检查HMI元件地址与PLC变量映射
5. 系统扩展与二次开发
5.1 运动模式扩展方法
以增加圆弧插补为例:
- 在PLC程序运动控制模块添加case分支:
st复制CASE CurrentMode OF
0: // 直线插补
MC_MoveLinear(...);
1: // 新增圆弧插补
MC_MoveCircular(
CenterX := Radius * COS(Angle),
CenterY := Radius * SIN(Angle),
EndPosZ := TargetZ,
Direction := MC_CircularDirection.CW);
- 在HMI界面添加模式选择按钮
- 增加半径、角度等参数输入框
5.2 高级功能开发建议
- 轨迹复现:录制时间戳+位置序列
- 外部传感器集成:通过PLC扩展模块接入
- 云端监控:通过MQTT协议上传运行数据
特别实用的代码结构设计:
- 使用FB功能块封装运动控制逻辑
- 建立全局错误代码体系
- 采用状态机模式管理业务流程
6. 实战经验与避坑指南
6.1 通讯系统优化方案
原始ModbusTCP通讯存在以下可改进点:
- 心跳检测优化方案:
st复制// 原方案:定时器超时重置
IF HeartbeatTimer.Q THEN
ReconnectCounter += 1;
FB_InitPlcConnection();
END_IF
// 改进方案:指数退避重连
IF HeartbeatTimer.Q THEN
ReconnectInterval := ReconnectInterval * 2;
IF ReconnectInterval > T#10S THEN
ReconnectInterval := T#1S;
END_IF
HeartbeatTimer(PT:=ReconnectInterval);
END_IF
- 数据打包传输建议:
- 将相邻寄存器打包为块传输
- 使用功能码23(读写多寄存器)
- 设置合理的轮询间隔(建议≥100ms)
6.2 运动控制常见问题
- 原点回归异常排查流程:
- 检查减速信号接线
- 验证编码器计数方向
- 调整回归速度参数(分阶段设置)
- 位置超差处理步骤:
- 检查伺服增益参数
- 验证机械传动间隙
- 增加位置容差判断逻辑
- 多轴同步问题:
- 使用MC_SyncGroup功能块
- 调整各轴伺服响应特性
- 考虑机械耦合补偿
这套系统最令我惊喜的是其模块化设计思想,每个功能区域都有清晰的接口定义。比如要更换触摸屏型号,只需修改HMI通讯模块;要增加运动轴数,扩展轴控制模块即可。这种设计使得它成为我后续多个项目的开发模板,大大缩短了原型开发周期。