1. 项目背景与整体架构
这个三菱Q系列PLC大型生产线项目是我去年带队完成的典型案例,整个系统包含15个工位、8台工业机器人、6台触摸屏和完整的MES系统对接。项目最值得分享的是其结构化编程架构设计,通过模块化编程思路将整条产线的控制逻辑分解为可复用的功能块(FB)和函数(FC),极大提升了开发效率和系统可维护性。
1.1 硬件配置方案
项目采用双PLC冗余架构,主要硬件配置如下:
- 主控制器:2台三菱Q系列CPU(Q06UDVCPU)
- HMI系统:6台威纶MT8102iE触摸屏(1主5从)
- 通讯网络:
- PLC间:以太网通讯(QJ71E71-100模块)
- 远程IO:CC-Link IE Field网络
- 设备层:RS232/485串口通讯
- 关键设备:
- 安川MH50机器人×8台
- Keyence CV-X200系列CCD
- 阿特拉斯拧紧枪系统
- 霍尼韦尔扫码枪
硬件选型经验:Q系列CPU选择带以太网端口的型号可以省去独立通讯模块,但考虑到本项目需要同时连接MES和视觉系统,最终选择了带双网口的Q06UDVCPU,一个端口用于内部设备通讯,另一个专用于MES对接。
1.2 软件架构设计
整个项目采用GX Works2进行结构化编程,软件架构分为三个层级:
- 设备控制层:直接对接传感器、执行器等物理设备
- 工艺逻辑层:实现各工位的生产工艺流程
- 系统管理层:处理生产调度、数据统计等全局功能
这种分层架构使得:
- 单个工位调试时不会影响整体系统
- 设备更换只需修改对应功能块接口
- 工艺变更只需调整中间层逻辑
2. 核心功能模块解析
2.1 气缸控制功能块(FB_Cylinder)
这是使用率最高的功能块之一,支持单控/双控气缸的通用控制逻辑。其内部实现要点包括:
st复制FUNCTION_BLOCK FB_Cylinder
VAR_INPUT
// 基础控制信号
xAutoMode : BOOL; // 自动模式使能
xManualExtend : BOOL; // 手动伸出信号
xManualRetract : BOOL; // 手动缩回信号
xSensorExtend : BOOL; // 伸出到位信号
xSensorRetract : BOOL; // 缩回到位信号
// 高级参数
tExtendTimeout : TIME := T#5S; // 伸出超时时间
tRetractTimeout : TIME := T#5S; // 缩回超时时间
END_VAR
VAR_OUTPUT
yOutputA : BOOL; // 输出A(双控时对应伸出)
yOutputB : BOOL; // 输出B(双控时对应缩回)
xError : BOOL; // 故障信号
END_VAR
VAR
tExtendTimer : TON; // 伸出计时器
tRetractTimer : TON; // 缩回计时器
END_VAR
关键设计细节:
- 通过
xAutoMode切换自动/手动控制模式 - 双控气缸使用时,两个输出信号会互锁
- 内置超时检测功能,防止气缸卡死
- 所有输入信号都经过滤波处理
调试心得:气缸动作超时时间需要根据实际行程调整,我们最终采用
tExtendTimeout := 实际动作时间 × 1.5的经验公式。
2.2 机器人控制功能块(FB_Robot)
针对安川MH50机器人开发的专用控制模块,主要特点包括:
- 通讯协议封装:
st复制// 机器人命令枚举
TYPE E_RobotCommand :
(
CMD_HOME, // 回原点
CMD_START, // 启动程序
CMD_STOP, // 急停
CMD_RESET // 复位
);
END_TYPE
FUNCTION F_SendRobotCommand : BOOL
VAR_INPUT
nRobotID : INT; // 机器人编号(1-8)
eCommand : E_RobotCommand;// 命令类型
END_VAR
VAR
sSendData : STRING(20);
END_VAR
// 生成命令字符串
CASE eCommand OF
CMD_HOME: sSendData := '$HOMEPOS';
CMD_START: sSendData := '$RUN:';
// ...其他命令处理
END_CASE;
// 通过串口发送(实际项目使用以太网通讯)
SerialSend(nRobotID, sSendData);
- 状态监控机制:
- 实时读取机器人各轴位置
- 故障代码自动解析
- 运动完成信号检测
典型问题解决方案:
当遇到机器人响应超时的情况,功能块会:
- 首先重发命令(最多3次)
- 仍无响应则触发报警
- 记录最后一次有效通讯时间
3. 触摸屏系统设计
3.1 主从架构实现
6台触摸屏采用主从架构设计,关键技术点包括:
- 型号管理同步:
- 主屏修改型号参数后,通过宏指令自动生成广播报文
- 从屏接收到广播后更新本地数据
- 采用CRC校验确保数据一致性
- 数据同步逻辑:
st复制// 主站触摸屏宏指令示例
macro_command main()
// 获取修改后的参数
short nNewModel = GetData("ModelNo")
int nSpeed = GetData("LineSpeed")
// 生成同步数据包
char sPacket[100]
sprintf(sPacket, "SYNC|%d|%d|...", nNewModel, nSpeed)
// 发送给所有从站
for(int i=1; i<=5; i++)
SetData(sPacket, "HMI"+i+".SyncData")
end for
end macro_command
3.2 HMI界面优化技巧
- 页面加载优化:
- 使用"延迟加载"技术,非当前页面元素不立即渲染
- 高频刷新区域单独处理
- 背景图片压缩处理
- 报警界面设计:
- 按工位分区显示
- 未确认报警闪烁提示
- 支持按严重程度过滤
- 配方管理:
- 采用树形结构组织
- 版本控制功能
- 导入/导出为CSV格式
4. 系统集成与调试
4.1 通讯网络配置
项目涉及多种通讯协议,配置要点如下:
| 通讯类型 | 设备 | 参数设置 | 注意事项 |
|---|---|---|---|
| CC-Link IE | 远程IO站 | 波特率:10Mbps 站号:1-15 |
终端电阻必须启用 |
| Ethernet/IP | 机器人 | IP:192.168.1.10-17 RPI:20ms |
需要配置EDS文件 |
| RS485 | 拧紧枪 | 波特率:19200 数据位:8 |
极性不能接反 |
4.2 典型调试问题
- 通讯干扰问题:
- 现象:CC-Link网络随机丢包
- 排查:使用示波器检查网络波形
- 解决:增加磁环并调整终端电阻值
- 机器人同步偏差:
- 现象:多机器人协作时出现位置偏差
- 分析:检查各轴伺服响应时间
- 优化:调整加减速曲线参数
- 触摸屏刷新延迟:
- 现象:从站数据显示滞后
- 检测:抓取网络数据包分析
- 改进:将广播间隔从500ms调整为300ms
5. 项目总结与经验分享
这个项目成功实施的关键在于前期的架构设计,特别是功能块的合理划分。我们总结出以下经验:
- FB设计原则:
- 单一职责:每个FB只处理一种设备类型
- 参数化设计:所有时间、速度等参数可外部设置
- 状态完备:包含运行、故障、维护等全状态
- 数据流管理技巧:
- 全局变量按功能分组
- 重要数据双重备份
- 添加变更时间戳
- 团队协作建议:
- 建立统一的命名规范
- 使用GX Works2的库功能共享FB
- 每日进行代码合并
这套架构已经成功复用在3个类似项目上,平均节省开发时间40%以上。特别是气缸控制FB,经过多次优化后已成为我们的标准模块。对于想要学习结构化编程的同行,建议从小功能块开始实践,逐步构建自己的模块库。
