1. 项目背景与系统架构
去年接手了一套四轴定位设备的电气控制系统改造项目,核心控制器选用三菱FX5U-64MT PLC,搭配四个MR-JE-20A伺服驱动器,人机界面采用威纶通TK8071IP触摸屏。这个项目最有趣的地方在于,它需要同时满足三种不同机型的生产需求,而硬件配置完全相同。这就意味着我们需要在软件层面实现参数智能切换,这也是后来采用标签分层编程的根本原因。
整套系统包含六个核心组成部分:
- PLC主控程序(结构化标签编程)
- 伺服驱动参数组
- 威纶通HMI交互界面
- 电气原理图(含安全回路设计)
- 详细IO映射表
- 电气元件清单(含线号规范)
2. 伺服系统全局配置
2.1 轴参数结构体设计
在FX5U中,我们为每个轴创建了独立的结构体标签,包含以下关键参数:
structured-text复制AxisPara[0].PLS_MODE = K4 // 4倍频编码器模式
AxisPara[0].INPOS_RANGE = 50 // 到位判定范围±50脉冲
AxisPara[0].ACC_TIME = 300 // 加速时间300ms
AxisPara[0].DEC_TIME = 300 // 减速时间300ms
AxisPara[0].JOG_SPEED = 10000 // 手动速度10kHz
特别注意:电子齿轮比计算必须在PLC的第一个扫描周期完成(通过SM400触发),否则伺服驱动器会因初始位置异常发出刺耳的警报声。我们曾因此被车间投诉噪音超标。
2.2 多机型参数管理
通过全局变量MachineType实现机型切换:
structured-text复制CASE MachineType OF
1: // A机型参数
AxisPara[0].MAX_SPEED = 200000
AxisPara[0].HOME_POS = 5000
2: // B机型参数
AxisPara[0].MAX_SPEED = 150000
AxisPara[0].HOME_POS = 8000
3: // C机型参数
AxisPara[0].MAX_SPEED = 180000
AxisPara[0].HOME_POS = 3000
END_CASE
3. 运动控制核心功能实现
3.1 原点回归优化方案
经过多次现场调试,最终采用的双阶段回原策略:
ladder复制-[DSZR K5000 X0 Y0]-[ZRN K3000 Y0]-[ZP.Y0]-|
| 高速搜索阶段 | 低速爬行阶段 | 完成标志
关键调整参数:
- 伺服驱动器的GridMask灵敏度设为3(默认2)
- 近点信号X0的滤波时间设为5ms
- 爬行速度从初始的5kHz调整为3kHz
3.2 手动JOG安全逻辑
手动操作的安全联锁设计:
structured-text复制IF NOT bAutoMode AND NOT bAlarm THEN
JOG+ := X10 AND NOT X11 AND NOT LimitFwd
JOG- := X11 AND NOT X10 AND NOT LimitRev
TON(T_JOGStop, 500) // 持续5秒自动停止
// 增加速度斜坡
JOG_Speed := MIN(JOG_Speed + 100, AxisPara[AxisNo].JOG_SPEED)
END_IF
调试中发现的问题及解决:
- 初期定时器设为200ms导致动作卡顿 → 调整为500ms
- 增加速度斜坡后操作更平滑
- 限位信号增加10ms滤波防抖动
3.3 定位控制优化
绝对定位指令的改进版本:
ladder复制-[DDRVI K500000 Y0 Y10]-[M8029]-[MOVP K0 D10]-|
| 目标位置 | 完成标志 | 速度模式切换
位置补偿算法:
structured-text复制// 位置偏差补偿
IF ABS(ActualPos - TargetPos) > 50 THEN
Compensation := (ActualPos - TargetPos) * 0.6
DHSFR(Compensation, FilteredComp, 0.2)
END_IF
4. HMI交互设计要点
4.1 报警管理系统
报警信息采用二维数组存储:
structured-text复制AlarmMsg[1][1] := "过载保护" // 中文
AlarmMsg[1][2] := "Overload" // 英文
AlarmMsg[1][3] := "過負荷" // 日文
报警历史记录采用FIFO队列:
structured-text复制FIFO_WRITE(AlarmHistory, CurrentAlarm, 20)
4.2 多语言界面实现
语言切换逻辑:
structured-text复制Language := 1 // 1-中文 2-英文 3-日文
TextDisplay := "Msg_" + STR(Language) + "_" + STR(TextID)
字体设置必须选择支持多语言的字体(如宋体GB2312),否则会显示乱码。我们曾因使用默认字体导致日文显示异常。
5. 项目文档规范
5.1 IO表特殊标注
| 地址 | 设备名称 | 滤波时间 | 备注 |
|---|---|---|---|
| X0 | 原点信号 | 5ms | 需屏蔽干扰 |
| Y0 | 脉冲输出 | - | 禁止并联 |
5.2 电气清单细节
| 线号 | 颜色 | 规格 | 起始端 | 终止端 |
|---|---|---|---|---|
| 101 | 红 | 1.5mm² | Q0.0 | MR-JE-20A.PUL+ |
| 102 | 蓝 | 1.5mm² | Q0.1 | MR-JE-20A.DIR+ |
5.3 安全回路设计
急停回路必须满足:
- 双回路硬线连接
- NC触点串联
- 独立24V电源
- 复位前需确认所有轴停止
6. 调试经验总结
-
伺服参数备份:每次修改参数后,立即通过MR Configurator2工具备份参数文件。我们曾因未备份导致设备搬迁后无法恢复原参数。
-
位置校验机制:在自动运行前增加位置校验例程,防止机型切换导致的位置异常。
-
信号干扰处理:
- 脉冲线使用双绞屏蔽线
- 信号线远离动力线30cm以上
- 所有IO信号增加RC滤波
-
程序版本管理:使用GX Works3的版本控制功能,每次修改都添加注释说明。曾经因为版本混乱导致现场程序与文档不匹配。
这套架构后来成功应用于多个类似项目,最关键的改进是增加了机型参数的密码保护功能,防止误操作导致设备异常。现在回看这个项目,最大的收获是认识到好的程序架构应该像乐高积木——模块化设计可以让后续维护和扩展事半功倍。
