1. 项目概述:三菱FX3U 16仓位配方控制系统
去年接手了一个自动化配料系统的改造项目,客户需要一套能同时管理16种原料的智能配料方案。经过三个月的开发和调试,最终基于三菱FX3U PLC打造了一套混合编程的解决方案。这个系统最让我自豪的是它的灵活性——既能通过扫码枪快速切换配方,也能在触摸屏上手动调整参数,完美适应了小批量、多品种的生产需求。
整套程序采用ST语言与梯形图混合编写,总步数达到12984步。核心功能包括:
- 16仓位配方自由配置(1-16种产品任意组合)
- 双电子秤协同工作(MODBUS协议通讯)
- 16路变频器精准控制(模拟量输出)
- 生产数据追溯系统(FTP远程下载)
- 智能报警诊断功能
2. 系统架构设计
2.1 硬件配置方案
经过多次现场勘测,最终确定的硬件配置如下表所示:
| 设备类型 | 型号规格 | 数量 | 功能说明 |
|---|---|---|---|
| PLC主控单元 | FX3U-128MT/ES-A | 1 | 系统主控制器 |
| 通讯模块 | FX3U-485ADP | 1 | 电子秤MODBUS通讯 |
| 模拟量输出模块 | FX3U-4DA | 4 | 变频器控制信号输出 |
| 触摸屏 | MT8101IE | 1 | 主操作界面 |
| 远程监控屏 | MT6071IP | 1 | 车间可视化监控 |
| 电子秤 | XK3190-A27E | 2 | 配料重量检测(8仓位/台) |
| 变频器 | FR-D720S-0.4K-CHT | 16 | 送料电机速度控制 |
实际部署时发现,FX3U-485ADP模块的通讯距离限制在15米内,超过此距离需要增加485中继器。这个经验教训花了我两天调试时间才找到原因。
2.2 软件架构设计
程序采用分层模块化设计,主要分为以下几个功能模块:
-
通讯处理层
- MODBUS RTU协议实现(ADPRW指令)
- 条形码解码程序(Code128标准)
- FTP文件传输服务
-
控制逻辑层
- 配方管理模块(结构体数组实现)
- 称重控制算法(PID调节)
- 变频器调速逻辑(快/慢/点动)
-
人机交互层
- 触摸屏画面组态
- 报警历史记录
- 生产报表生成
特别要说明的是,所有功能模块都采用FB(功能块)封装,通过IN/OUT参数实现数据交互。这种设计使得程序维护非常方便,比如当需要增加新的电子秤时,只需实例化新的功能块即可。
3. 核心功能实现细节
3.1 配方管理系统开发
配方数据采用结构体数组存储,这是程序中最精妙的设计之一:
st复制TYPE Recipe_Data :
STRUCT
MaterialNo : INT; // 原料编号
TargetWeight : REAL; // 目标重量
FastFeed : REAL; // 快加量
SlowFeed : REAL; // 慢加量
Tolerance : REAL; // 允许误差
END_STRUCT
END_TYPE
VAR
RecipeDB : ARRAY[1..16] OF Recipe_Data; // 16个仓位配方
CurrentRecipe : INT := 1; // 当前配方编号
END_VAR
通过触摸屏可以随时修改配方参数,修改后的数据会立即写入RecipeDB数组。实际使用中发现,结构体数组的大小需要预留20%的余量,否则频繁修改时容易出现内存溢出。
3.2 称重控制逻辑
称重过程分为三个阶段控制,以下是ST语言实现的简化代码:
st复制// 称重控制状态机
CASE Weight_State OF
0: // 快加阶段
IF CurrentWeight < (TargetWeight - FastFeed) THEN
SetFrequency(50); // 50Hz快加
ELSE
Weight_State := 1;
END_IF
1: // 慢加阶段
IF CurrentWeight < (TargetWeight - SlowFeed) THEN
SetFrequency(20); // 20Hz慢加
ELSE
Weight_State := 2;
END_IF
2: // 点动精加
IF ABS(CurrentWeight - TargetWeight) > Tolerance THEN
SetFrequency(5); // 5Hz点动
ELSE
Weight_State := 3;
StopFeed();
END_IF
END_CASE
实际调试中发现,不同物料的流动性差异会影响加料精度。最终通过实验确定了每种物料的最佳快/慢加转换点,并存储在配方参数中。
3.3 模拟量输出处理
4路模拟量输出采用统一的FB功能块实现:
st复制FUNCTION_BLOCK AnalogOutput
VAR_INPUT
Channel : INT; // 输出通道(1-4)
Value : REAL; // 输出值(0-10V对应0-100%)
END_VAR
VAR_OUTPUT
ActualOutput : REAL;// 实际输出电压
END_VAR
VAR
RawValue : INT; // 原始数字量
BEGIN
// 量程转换
RawValue := INT(Value * 4000 / 10); // FX3U-4DA分辨率为4000
// 通道选择与输出
CASE Channel OF
1: TO D100 := RawValue;
2: TO D101 := RawValue;
3: TO D102 := RawValue;
4: TO D103 := RawValue;
END_CASE
// 读取实际输出反馈
ActualOutput := FROM(Channel + 100) * 10 / 4000;
END_FUNCTION_BLOCK
特别注意:模拟量模块需要定期校准,我们制定了每月一次的校准计划。曾经因为模块漂移导致配料误差超标,这个教训让我们意识到定期维护的重要性。
4. 通讯系统实现
4.1 MODBUS称重通讯
电子秤通讯采用ADPRW指令实现,关键参数配置如下:
st复制// 读取电子秤1的重量值
ADPRW(
S1 := H1, // 站号1
S2 := H3, // 功能码03H读保持寄存器
S3 := H400, // 起始地址400H(实际为0400H)
S4 := H1, // 读取1个寄存器
D := D200, // 存储地址
N := H2 // 超时2秒
);
调试过程中总结出几个关键点:
- 电子秤的站地址必须唯一
- 寄存器地址需要加1(如手册标注400H,实际输入3FFH)
- 通讯间隔建议≥100ms
4.2 条形码解码实现
Code128解码算法的核心是校验和计算:
st复制FUNCTION Code128_CheckSum : INT
VAR_INPUT
Data : ARRAY[0..15] OF BYTE; // 条形码数据
Length : INT; // 有效数据长度
END_VAR
VAR
i, Sum : INT;
BEGIN
Sum := Data[0] - 32; // 起始字符值
FOR i := 1 TO Length-3 DO // 跳过起始/校验/终止符
Sum := Sum + (Data[i] - 32) * i;
END_FOR
RETURN Sum MOD 103 + 32; // 返回校验字符ASCII
END_FUNCTION
实际应用中发现,不同品牌的扫码枪输出格式可能不同,需要做兼容性处理。我们最终统一要求使用"*"作为起始/终止符的Code128C格式。
5. 生产数据管理系统
5.1 数据记录结构
采用循环队列存储最近1000批次的生产数据:
st复制TYPE Production_Record :
STRUCT
RecipeNo : INT; // 配方编号
Target : REAL; // 目标重量
Actual : REAL; // 实际重量
Error : REAL; // 误差值
Time : DT; // 生产时间
END_STRUCT
END_TYPE
VAR
DataLog : ARRAY[1..1000] OF Production_Record;
LogIndex : INT := 0;
END_VAR
5.2 FTP文件导出
通过触摸屏内置的FTP服务实现数据导出,关键配置参数:
- 服务器IP:192.168.1.100
- 端口:21
- 用户名:operator
- 密码:********
- 文件路径:/ProductionData/
在触摸屏脚本中设置定时任务,每天0点自动将数据导出为CSV格式。导出的文件命名规则为:YYYYMMDD_HHMMSS.csv,方便追溯。
6. 故障诊断与维护
6.1 报警代码体系
设计了三级报警系统,主要报警类型包括:
| 代码 | 类型 | 说明 | 处理建议 |
|---|---|---|---|
| E101 | 通讯故障 | 电子秤1无响应 | 检查接线和站地址 |
| E205 | 重量异常 | 实际值超出公差范围 | 检查传感器和校准参数 |
| E307 | 变频器故障 | 变频器3过载 | 检查电机机械部分 |
| W401 | 维护提醒 | 模拟量模块需要校准 | 执行校准程序 |
6.2 典型故障排查流程
以最常见的E205报警为例,排查步骤如下:
- 检查当前重量值是否稳定
- 确认传感器接线无松动
- 重新执行去皮操作
- 检查配方参数中的公差设置
- 观察加料过程是否过冲
根据现场统计,80%的报警都能通过触摸屏上的"复位+重试"操作解决。对于频繁出现的报警,建议检查硬件状态或调整控制参数。
7. 项目优化与改进
经过半年运行后,根据客户反馈做了以下改进:
- 配方组复制功能:新增"配方复制"按钮,可快速创建相似配方
- 批次预检功能:启动前自动检查各仓位原料余量
- 节能模式:无操作30分钟后自动降低背光亮度
- 快速校准向导:简化电子秤校准流程
特别值得一提的是中文变量命名带来的好处。在后期维护时,即使没有详细注释,通过变量名也能快速理解程序逻辑。例如"当前重量_仓位1"比"D100"直观得多。
这个项目让我深刻体会到结构化编程的重要性。所有功能模块都采用标准接口,当客户需要增加两个仓位时,我只用了3天就完成了扩容改造。如果当初用传统梯形图编写,至少需要两周时间。