1. 项目概述:工业自动化产线的结构化编程实战
这个三菱Q系列PLC项目堪称工业自动化领域的"航空母舰"级案例。作为主导过多个汽车产线项目的工程师,我至今记得第一次看到这个架构时的震撼——两台Q06HCPU通过以太网协同控制15个工位,6台威纶通触摸屏实现分布式监控,整套系统包含2000+IO点和8台工业机器人。最令人惊艳的是其模块化设计:将气缸控制、串口通信、产量统计等36种常用功能封装成标准功能块(FB),通过结构化编程实现了90%代码复用率。
2. 系统架构设计精要
2.1 网络拓扑与通信规划
项目采用分层式网络架构:
- 控制层:两台Q系列PLC通过以太网模块QJ71E71-100建立实时数据交换,每秒同步5000+个标签数据。这里特别采用生产者/消费者模式,设置主PLC为数据发布者,从PLC订阅关键生产数据。
- 设备层:CC-LINK IE Field网络连接32个远程IO站,波特率设置10Mbps。每个站配置RJ61CC11模块,通过双绞线实现环网拓扑,确保任一节点故障不影响整体通信。
- HMI层:主触摸屏(MT8102iE)通过宏指令控制5台从屏(MT8071iE),采用事件触发式数据同步机制。实测显示,传统轮询方式下6台屏同步需1.2秒,而本架构仅需200ms。
关键技巧:在GX Works2中配置以太网通信时,务必设置Q参数->内置以太网端口->协议->TCP/UDP->固定缓冲通信,将通信超时设为3000ms,重试次数3次。
2.2 硬件配置方案
| 设备类型 | 型号 | 数量 | 关键参数 |
|---|---|---|---|
| 主PLC | Q06HCPU | 1 | 程序容量60K步 |
| 从PLC | Q04UDHCPU | 1 | 带运动控制功能 |
| 通信模块 | QJ71E71-100 | 2 | 100BASE-TX |
| CC-LINK主站 | QJ61BT11N | 1 | 最大连接64站 |
| 串口模块 | QJ71C24N-R2 | 4 | RS232/485自适应 |
| HMI主站 | MT8102iE | 1 | 10.1寸 1280×800 |
| HMI从站 | MT8071iE | 5 | 7寸 800×480 |
3. 核心功能模块解析
3.1 气缸控制FB的标准化设计
st复制FUNCTION_BLOCK FB_Cylinder
VAR_INPUT
bManualMode: BOOL; // 手动模式使能
bAutoTrigger: BOOL; // 自动触发信号
iCylinderType: INT; // 气缸类型(1=单控,2=双控)
tDelayTime: TIME := T#500ms; // 动作延时
END_VAR
VAR_OUTPUT
bOut1: BOOL; // 输出信号1
bOut2: BOOL; // 输出信号2
bCylinderReady: BOOL; // 气缸就绪信号
END_VAR
// 加入互锁保护和超时监控
IF iCylinderType = 1 THEN
bOut1 := (bManualMode OR bAutoTrigger) AND NOT bOut2;
bOut2 := FALSE;
ELSE
IF bManualMode OR bAutoTrigger THEN
bOut1 := NOT bOut2;
bOut2 := NOT bOut1;
TON(IN:=TRUE, PT:=tDelayTime);
IF TON.Q THEN
bCylinderReady := TRUE;
END_IF;
END_IF;
END_IF;
此FB的创新点在于:
- 通过iCylinderType参数实现单控/双控自适应
- 内置互锁逻辑防止电磁阀同时得电
- 加入延时监控确保气缸动作到位
- 输出就绪信号供上级逻辑判断
3.2 产线节拍控制方案
项目采用"主时钟+局部同步"的节拍控制策略:
- 主时钟发生器:使用周期脉冲波FB产生1Hz基准脉冲
st复制FUNCTION_BLOCK FB_PulseGenerator
VAR_INPUT
fFrequency: REAL := 1.0; // 频率(Hz)
END_VAR
VAR_OUTPUT
bPulseOut: BOOL;
END_VAR
VAR
rPeriod: REAL := 1.0 / fFrequency;
tonTimer: TON;
END_VAR
tonTimer(IN:=NOT tonTimer.Q, PT:=REAL_TO_TIME(rPeriod/2));
bPulseOut := tonTimer.Q;
- 工位同步机制:各工位FB接收主脉冲后,根据本地偏移量(0-300ms)延迟触发,避免同时启动造成的电源冲击。
4. 触摸屏高级应用
4.1 型号管理宏指令设计
主触摸屏的型号同步逻辑包含三个关键部分:
- 参数数据库:在PLC中建立DB2000数据块存储100个型号参数
- 型号选择界面:使用威纶通的"下拉列表"元件绑定PLC变量
- 同步宏指令:
vb复制Sub Macro_SyncModel()
' 读取当前选择型号
Dim modelIndex As Integer
modelIndex = GetData("ModelList", "SelectedIndex")
' 写入PLC型号索引
SetData "DB2000.D0", modelIndex
' 触发同步指令
SetData "M1000", 1
Delay 50
SetData "M1000", 0
' 更新从站显示
ExecMacro "RefreshSlaves"
End Sub
4.2 HMI报警分级显示
| 报警级别 | 颜色 | 处理时限 | 触发条件 |
|---|---|---|---|
| 紧急停止 | 红色 | 立即 | 安全回路断开 |
| 设备故障 | 橙色 | 5分钟 | 伺服驱动器报警 |
| 工艺异常 | 黄色 | 30分钟 | 拧紧扭矩超差 |
| 提示信息 | 蓝色 | 不限 | 料仓空预警 |
5. 工程实施经验
5.1 现场调试避坑指南
-
CC-LINK网络问题:
- 终端电阻必须设置为110Ω
- 站号设置避免使用0和64
- 电缆长度超过20m时需增加中继器
-
以太网通信优化:
ini复制[PLC网络配置] IP地址规划: - 主PLC:192.168.1.10/24 - 从PLC:192.168.1.20/24 - HMI主站:192.168.1.100/24 - HMI从站:192.168.1.101-105/24建议设置Q参数->内置以太网端口->通信数据代码->ASCII/BINARY选择BINARY格式,可提升30%通信效率。
5.2 程序架构优化技巧
-
变量命名规范:
st复制// 全局变量前缀 g_ : 全局变量 fb_ : 功能块实例 st_ : 结构体变量 // 数据类型后缀 _i : INT类型 _r : REAL类型 _s : STRING类型 -
状态机设计模式:
st复制CASE iSysState OF
0: // 初始化状态
IF bPowerOn THEN
iSysState := 1;
END_IF;
1: // 待机状态
IF bStartButton THEN
ExecuteSelfTest();
iSysState := 2;
END_IF;
2: // 自检状态
IF bSelfTestOK THEN
iSysState := 3;
ELSIF tSelfTestTimeout.Q THEN
iSysState := 99;
END_IF;
// ...其他状态
99: // 故障状态
AlarmHandler();
END_CASE;
6. 项目升级与扩展
6.1 MES系统对接方案
通过QJ71E71-100模块的Socket接口实现:
-
通信协议:采用MODBUS TCP标准协议
-
数据映射:
- DB2100:生产订单信息
- DB2101:工艺参数集
- DB2102:质量数据包
-
心跳检测机制:
st复制// 在系统管理FB中添加
IF NOT bMesConnected THEN
fb_TcpConnect(
EN := TRUE,
sIP := '192.168.1.200',
iPort := 502);
ELSE
fb_Heartbeat(
EN := TRUE,
TIMEOUT := T#30s,
IN := bMesActive);
END_IF;
6.2 机器人协同控制
通过串口FB实现PLC与机器人的I/O交互:
-
通信格式:
- 波特率:115200bps
- 数据位:8位
- 停止位:1位
- 校验:无
-
指令封装示例:
st复制FUNCTION FC_RobotCmd : BOOL
VAR_INPUT
iRobotID: INT;
sCommand: STRING;
END_VAR
VAR
sFrame: STRING := '$';
END_VAR
sFrame := CONCAT(sFrame, INT_TO_STRING(iRobotID));
sFrame := CONCAT(sFrame, ',');
sFrame := CONCAT(sFrame, sCommand);
sFrame := CONCAT(sFrame, '*');
sFrame := CONCAT(sFrame, CalcChecksum(sFrame));
// 调用串口发送FB
fb_SerialSend(
EN := TRUE,
sData := sFrame,
iComPort := 1);
这个项目让我深刻体会到,优秀的自动化工程应该是"三分硬件、七分软件、十二分架构"。那些看似复杂的产线控制,拆解到底层无非是传感器信号处理、执行器驱动和状态管理。真正考验工程师功力的,是如何用最简洁可靠的架构把这些基础元素组织成有机整体。
