1. 项目背景与需求分析
最近接手了一个自动化产线改造项目,需要为三菱FX3U PLC开发一套16仓位的配方管理系统。这个系统要能存储不同产品的工艺参数,并在生产时快速调用。说实话,第一次做这种多仓位配方程序时踩了不少坑,今天就把完整的开发过程记录下来,希望能帮到有同样需求的同行。
FX3U作为三菱经典的PLC型号,在中小型自动化设备中应用广泛。16仓位意味着需要管理16组不同的工艺参数,每套参数可能包含温度、压力、时间等数十个变量。传统做法是用数据寄存器D一个个存储,但这样不仅编程复杂,后期维护更是噩梦。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 硬件配置与软件环境
2.1 硬件选型要点
我这次用的FX3U-64MT/ES-A主机,带两个FX3U-4AD模拟量输入模块。关键配置考虑:
- 内存容量:配方数据占用较多D寄存器,建议选择32K步以上的型号
- 扩展模块:根据实际需要配AD/DA模块,我这次用了4AD采集温度信号
- 通信接口:标配RS422接口用于HMI通信,另加FX3U-485BD模块用于条码枪通讯
重要提示:FX3U的D寄存器范围是D0-D7999,但实际可用数量受程序容量限制,规划数据区时要留足余量。
2.2 软件环境搭建
编程软件用GX Works2 1.91L版(兼容FX3U的最新版本),主要考虑:
- 支持ST语言和梯形图混合编程
- 配方功能比旧版GX Developer更完善
- 仿真调试方便,减少现场调试时间
安装时特别注意:
- 先装主程序再装补丁
- 驱动选择MT模式(对应FX3U型号)
- 记得勾选ST编程支持组件
3. 配方数据结构设计
3.1 寄存器规划方案
16仓位需要存储以下参数:
- 温度设定值(16个)
- 压力设定值(16个)
- 时间参数(16个×3个时段)
- 产品编码(16个ASCII码)
最终采用的存储方案:
st复制// 温度区 D100-D115
VAR
Temp_Set : ARRAY[1..16] OF DWORD := [D100,D104,...,D115];
// 压力区 D200-D215
Press_Set : ARRAY[1..16] OF DWORD := [D200,D204,...,D215];
// 时间区 D300-D347
Time_Set : ARRAY[1..16,1..3] OF DWORD := [
[D300,D304,D308], // 仓位1
...,
[D344,D348,D352] // 仓位16
];
END_VAR
3.2 数据持久化处理
FX3U断电后数据会丢失,三种解决方案对比:
- 电池备份:成本低但寿命有限(3-5年)
- 存储卡:FX3U-EEPROM-16适合小数据量
- HMI存储:推荐方案,我用威纶通HMI的配方功能做持久化
最终采用HMI存储方案,PLC只做运行时数据缓存。HMI与PLC的数据交互通过以下地址映射:
code复制HMI配方项 PLC地址 类型
Prod1_Temp D100 INT
Prod1_Press D200 INT
...
Prod16_Time3 D352 INT
4. 核心程序实现
4.1 仓位选择逻辑
用旋转编码器选择仓位号,程序处理如下:
st复制// 仓位选择程序
IF X001 THEN // 编码器A相
Curr_No := Curr_No + 1;
IF Curr_No > 16 THEN
Curr_No := 1;
END_IF;
EXECUTE Load_Recipe(Curr_No);
END_IF;
4.2 配方加载函数
ST语言实现的配方加载函数:
st复制FUNCTION Load_Recipe : BOOL
VAR_INPUT
Recipe_No : INT;
END_VAR
VAR
Base_Addr : INT;
BEGIN
// 参数校验
IF (Recipe_No < 1) OR (Recipe_No > 16) THEN
RETURN FALSE;
END_IF;
// 计算基地址
Base_Addr := 100 + (Recipe_No-1)*4;
// 加载温度参数
D500 := D[Base_Addr]; // 目标地址D500
D501 := D[Base_Addr+100]; // 压力参数
// 加载时间参数
FOR i := 0 TO 2 DO
D502[i] := D[Base_Addr+200 + i*4];
END_FOR;
RETURN TRUE;
END_FUNCTION
4.3 异常处理机制
实际运行中发现的问题及解决方案:
- 数据越界问题:添加参数范围校验
- 断电数据丢失:增加HMI自动备份功能
- 误操作防护:添加仓位锁定功能(M500为锁定标志)
st复制IF M500 THEN
Y001 := ON; // 报警灯
RETURN;
END_IF;
5. HMI界面设计要点
威纶通HMI的配方界面关键配置:
- 创建16个配方,每个配方包含:
- 温度设定(INT)
- 压力设定(INT)
- 3个时间参数(INT数组)
- 设置PLC地址映射(见3.2节)
- 添加配方选择下拉框,绑定PLC的D0(当前仓位号)
- 增加"保存到PLC"按钮,触发配方下载
调试技巧:
- 先测试单个配方传输
- 用HMI的离线模拟功能验证逻辑
- 最后测试连续切换配方时的响应速度
6. 现场调试经验
6.1 通信问题排查
遇到HMI与PLC通信中断时,按以下步骤排查:
- 检查PLC通信口指示灯状态
- 确认HMI通信参数(波特率、站号等)
- 用GX Works2的通信测试功能
- 检查接线(RS422需接SDA/SDB/RDA/RDB)
6.2 数据不同步处理
当HMI与PLC数据不一致时:
- 在HMI添加"强制同步"按钮
- 同步逻辑:
st复制IF X010 THEN // 同步按钮
FOR i := 1 TO 16 DO
EXECUTE Load_Recipe(i);
DELAY 100ms;
END_FOR;
END_IF;
7. 程序优化建议
经过实际运行验证的优化方案:
- 添加配方校验和:
st复制// 计算校验和
CheckSum := Temp_Set[1] XOR Press_Set[1] XOR Time_Set[1,1];
- 关键参数添加变化监控:
st复制IF D500 <> Prev_Temp THEN
Log_Change(D500);
Prev_Temp := D500;
END_IF;
- 增加配方版本管理(用D900存储版本号)
这套系统已经稳定运行半年多,期间根据操作人员反馈还增加了配方复制、批量修改等实用功能。对于更复杂的配方系统,建议考虑用FX5U系列,其内置的SD卡存储和更大内存更适合海量配方管理。
