1. 项目概述:西门子1200五轴控制系统实战
这个项目用西门子S7-1200 PLC控制五台台达B2伺服驱动器,其中三轴组成机械手完成取放料动作,另外两轴实现收放卷功能。整套系统采用模块化设计思路,从PLC程序到威纶通HMI界面都做了深度优化,特别适合需要快速搭建运动控制系统的工程师参考。
项目亮点在于将复杂的五轴控制拆解成标准化功能块:PTO脉冲定位控制三轴联动、模拟量控制收放卷、完善的报警系统和断电保持功能。我实际测试下来,这套架构在2000mm/s的机械手运行速度下,重复定位精度能达到±0.1mm,收放卷张力控制误差小于5%,完全满足大多数工业场景需求。
2. 硬件配置与电气设计
2.1 核心器件选型
-
PLC:西门子S7-1214C DC/DC/DC(6ES7 214-1AG40-0XB0)
- 选型理由:自带4路100kHz高速脉冲输出,正好满足三轴PTO控制需求;2路模拟量输出可用于收放卷控制
- 扩展模块:SM1223 16DI/16DO(6ES7 223-1BH32-0XB0)用于气缸和传感器信号
-
伺服系统:台达B2系列750W伺服电机(ECMA-C20607RS)+驱动器(ASD-B2-0721-B)
- 关键参数设置:
ini复制P1-00=0(位置模式) P1-01=1(脉冲+方向输入) P1-44=2000(电子齿轮分子,对应每转脉冲数) P1-45=1(电子齿轮分母)
- 关键参数设置:
-
HMI:威纶通MT8071iP 7寸触摸屏
- 通讯设置:通过PROFINET与S7-1200直连,IP地址192.168.0.2
2.2 电气图纸设计要点
主电路采用三相380V供电,伺服驱动器电源端需加装滤波器(如台达EMI滤波器EFB-01-505)。特别要注意的是:
- 脉冲信号布线必须使用双绞屏蔽线(如BELDEN 8761),屏蔽层单端接地
- 模拟量信号(0-10V)需与动力线分开走线,避免干扰
- 急停回路采用硬线连接,不经过PLC程序控制
实际调试中发现,伺服电机接地不良会导致脉冲丢失,建议每个电机单独用6mm²导线接至接地铜排。
3. PLC程序架构解析
3.1 模块化功能块设计
程序采用"一个功能一个FB"的设计原则,主要功能块包括:
| 功能块名称 | 功能描述 | 关键接口参数 |
|---|---|---|
| FB_AxisControl | 轴基本控制(使能/点动) | Axis、Enable、Jog_Pos/Neg |
| FB_PositionMove | 绝对定位控制 | TargetPos、Velocity、Accel |
| FB_WindControl | 收放卷控制 | Torque_Set、Speed_Mode |
| FB_AlarmManager | 报警集中管理 | ErrorArray、AlarmText |
| FB_CylinderCtrl | 气缸控制 | Out_Signal、In_Sensor |
3.2 三轴联动实现细节
机械手采用PTO脉冲控制,关键代码段:
st复制// 在OB1中调用
MC_MoveAbsolute(
Axis := "X_Axis",
Execute := TRUE,
Position := 500.0, // 目标位置(mm)
Velocity := 2000.0, // 速度(mm/s)
Acceleration := 3000.0,
Deceleration := 3000.0,
BufferMode := 1 // 缓冲执行
);
联动技巧:
- 三轴都使用BufferMode=1发送指令
- 最后调用MC_MoveStart同时触发所有轴运动
- 在轴参数中设置相同的加减速时间
3.3 收放卷控制方案
放卷轴采用速度模式,通过模拟量输出0-10V控制线速度:
st复制// 速度给定计算
"Wind_Voltage" := ("Line_Speed" / 10.0) * 32767;
AQW0 := INT_TO_WORD("Wind_Voltage");
收卷轴切换扭矩模式的步骤:
- 先将速度给定降至0
- 通过MODBUS写入参数0020=3(扭矩模式)
- 等待500ms模式切换完成
- 施加初始张力扭矩
4. HMI界面开发要点
威纶通触摸屏主要实现以下功能界面:
4.1 主操作界面
- 模式切换旋钮(手动/自动/单步)
- 三轴位置实时显示
- 急停按钮(直接映射PLC输入点)
4.2 参数设置界面
- 机械手各点位坐标设置
- 收放卷张力参数
- 速度/加速度参数
4.3 报警历史记录
- 采用循环队列存储最近100条报警
- 报警信息从PLC的String数组读取
界面开发技巧:所有操作元件都绑定到PLC的DB块变量,避免直接使用M区地址,方便后期维护。
5. 调试经验与故障排查
5.1 常见问题速查表
| 故障现象 | 可能原因 | 解决方案 |
|---|---|---|
| 脉冲输出轴不运动 | 伺服未就绪 | 检查MC_Power的Status位 |
| 定位完成后有±2mm偏差 | 电子齿轮比设置错误 | 核对P1-44/P1-45参数 |
| 收卷张力波动大 | 扭矩模式响应慢 | 调整伺服参数P2-64(增益) |
| HMI显示数据不更新 | 通讯周期设置过长 | 修改PROFINET通讯周期为100ms |
5.2 关键调试步骤
-
伺服参数自整定:
- 先进行惯量辨识(P2-08=1)
- 再做频响分析(P2-08=2)
- 最后保存参数(P0-10=1)
-
机械手精度校准:
st复制// 在手动模式下运行以下测试程序 MC_MoveAbsolute(X_Axis, 100.0); MC_MoveAbsolute(X_Axis, 0.0); // 重复5次后测量实际行程 -
断电保持测试:
- 记录当前各轴位置
- 断电重启后比较位置值
- 偏差大于0.5mm需检查DB块保持设置
6. 项目优化建议
在实际运行三个月后,我总结了以下优化点:
-
增加振动抑制:
- 在MC_Move指令中启用Jerk控制
- 设置合理的加加速度值(通常为加速度的2-3倍)
-
完善安全逻辑:
st复制// 在OB35(循环中断)中添加 IF "Emergency_Stop" THEN MC_Halt(X_Axis); MC_Halt(Y_Axis); MC_Halt(Z_Axis); END_IF; -
开发远程监控:
- 通过S7-1200的Web服务器功能
- 暴露关键变量到PUT/GET接口
- 配合Node-RED实现手机监控
这套架构已经成功复制到三个类似项目,平均开发时间缩短40%。特别是模块化的设计,让新工程师也能快速上手维护。对于想深入学习结构化编程的同仁,建议重点研究报警管理FB和轴控制FB的接口设计,这是整个程序可扩展性的关键。
