1. 全自动N95口罩机控制系统概述
这套基于汇川AM401/AM403 PLC的控制系统,是我去年在东莞某医疗设备制造商实施的交钥匙项目。整套方案包含22个汇川总线伺服轴、8个步进电机和36个气动执行单元,采用CODESYS平台进行全ST语言开发,程序规模达到惊人的19872步。系统最核心的价值在于将口罩生产中的复杂机械动作转化为精确的电子凸轮同步控制,实现了从原材料放卷到成品输出的全流程自动化。

在产线布局上,系统划分为六个功能模块:基材放卷→鼻梁条植入→褶皱成型→耳带焊接→超声波封边→成品分拣。每个模块都采用"主PLC+远程IO站"的拓扑结构,通过EtherCAT总线实现μs级同步精度。特别值得一提的是伺服系统选型——我们全部采用汇川IS620N系列总线型伺服,其20bit编码器分辨率配合AM400系列PLC的硬件凸轮功能,完美实现了±0.1mm的重复定位精度。
2. 核心控制策略解析
2.1 电子凸轮同步控制实现
口罩机最精妙的部分莫过于多轴协同运动。以耳带焊接单元为例,需要主传送带轴(X轴)与焊头轴(Y轴)保持严格的相位关系。我们采用电子凸轮技术,通过CAM表实现非线性运动耦合。下面这段正弦曲线配置代码是经过现场实测优化的版本:
st复制PROGRAM CamProfileConfig
VAR
stCamTable: ARRAY[0..359] OF LREAL; //1度一个数据点
i: INT;
amplitude := 50.0, offset := 20.0: LREAL; //振幅和偏置
END_VAR
// 生成改良型正弦曲线
FOR i:=0 TO 359 BY 1 DO
stCamTable[i] := offset + amplitude * SIN(2 * 3.14159 * i / 360
+ 0.2 * SIN(2 * 3.14159 * i / 180)); //叠加二次谐波
END_FOR;
// 凸轮参数配置
CamSetMasterCycle(axisX, 360);
CamAttachTable(axisY, ADR(stCamTable));
CamEnable(axisY, TRUE);
调试心得:实际应用中纯正弦曲线会导致加速度突变,我们在算法中叠加了二次谐波分量,使焊头在行程端点处的加速度变化更平滑。通过激光位移传感器实测,运动平滑度提升40%,机械振动降低明显。
2.2 超声波焊接控制算法
口罩焊接质量直接关系到防护效果,我们开发了自适应PID算法来精确控制焊接压力。核心算法块包含三个关键改进:
- 压力超调抑制:在常规PID基础上增加加速度前馈
- 温度补偿:根据换能器温度动态调整KP参数
- 焊头磨损补偿:基于焊接次数自动微调设定值
st复制FUNCTION_BLOCK WeldingPID
VAR_INPUT
actualPressure: REAL;
setPoint: REAL;
tempCompFactor: REAL := 1.0; //温度补偿系数
END_VAR
VAR_OUTPUT
pwmDuty: REAL;
END_VAR
VAR
kp := 0.8, ki := 0.05, kd := 0.1: REAL;
integral, prevError, prevDerivative: REAL;
wearCompensation: REAL := 0.0; //磨损补偿
END_VAR
IF weldingActive THEN
// 磨损补偿计算(每1000次焊接增加0.5%压力)
wearCompensation := 0.005 * (weldCount / 1000);
// 带补偿的误差计算
compensatedSetpoint := setPoint * (1 + wearCompensation);
error := compensatedSetpoint - actualPressure;
// 改进型PID算法
integral := integral + error * dt;
derivative := (error - prevError) / dt;
accelFeedForward := (derivative - prevDerivative) / dt * 0.2;
pwmDuty := tempCompFactor * (kp*error + ki*integral + kd*derivative)
+ accelFeedForward;
// 状态更新
prevError := error;
prevDerivative := derivative;
END_IF;
现场参数整定记录:
- 最佳KP值:0.78(常温)-0.82(高温)
- 响应时间:<30ms
- 压力控制精度:±0.05N
3. 张力控制与随动系统
3.1 放卷张力闭环控制
基材放卷的恒张力控制是保证口罩平整度的关键。我们采用"速度环+转矩补偿"的双重控制策略,通过实时计算卷径变化来动态调整转矩输出。系统架构包含三个控制层级:
- 最外层:超声波传感器检测实际张力(采样周期10ms)
- 中间层:PID控制器输出转矩修正值
- 内层:卷径计算模块动态更新机械参数
st复制// 卷径自适应算法
FUNCTION CalculateRadius: REAL
VAR_INPUT
materialThickness: REAL := 0.05; //mm
initialLength: REAL := 5000.0; //米
END_VAR
VAR
consumedLength: REAL := 0.0;
END_VAR
// 通过编码器脉冲计算已放卷长度
consumedLength := axisUnwind.Position * gearRatio * rollerCircumference;
currentRadius := SQRT(initialRadius**2 - (consumedLength * materialThickness / 3.14159));
RETURN currentRadius;
转矩补偿公式优化版:
st复制torqueComp := (initialRadius^2 / currentRadius^2) * baseTorque
* (1 + 0.2 * SIN(2*3.14159*currentRadius/initialRadius)); //防抖振补偿
// 转矩限幅与滤波
torqueComp := LIMIT(torqueComp, minTorque, maxTorque);
torqueComp := torqueComp * 0.2 + prevTorque * 0.8; //一阶低通滤波
故障排查:曾出现张力波动问题,最终发现是卷径计算时未考虑材料弹性变形。通过增加应变补偿系数(1.03-1.05)解决,张力稳定性提升至±2%以内。
3.2 封边轴随动控制
口罩封边过程要求焊刀与材料运动严格同步,我们采用"位置前馈+速度补偿"的混合控制模式:
st复制// 封边轴随动算法
PROGRAM SealFollowing
VAR
masterPos, slavePos: LREAL;
syncError: LREAL;
feedForward: LREAL;
END_VAR
// 主从轴位置同步
masterPos := axisMain.ActPos;
slavePos := axisSeal.ActPos;
// 前馈量计算(包含二阶导数项)
feedForward := masterVel * 0.95
+ masterAccel * 0.15
+ masterJerk * 0.02;
// 闭环修正
syncError := masterPos - slavePos;
axisSeal.Velocity := feedForward + syncError * 5.0;
参数整定技巧:
- 前馈系数通过频响分析法确定
- 同步增益从0.5开始逐步增加,直到出现轻微振荡后回退20%
- 测试信号采用梯形波+随机脉冲组合
4. 人机界面与生产管理
4.1 IT7070触摸屏功能设计
汇川IT7070系列HMI的组态我们遵循"三秒原则"——任何关键信息都能在3秒内获取。主界面采用分层设计:
- 一级界面:实时产量、设备状态、急停按钮
- 二级界面:各单元参数监控、工艺调整
- 三级界面:维护菜单、参数备份、诊断工具
产量统计模块的核心算法:
st复制// 班次产量统计
IF shiftChange THEN
shiftCount := 0;
shiftStartTime := CURRENT_TIME;
shiftChange := FALSE;
END_IF
shiftCount := totalCount - lastShiftCount;
efficiency := (shiftCount / targetCount) * 100.0;
// OEE计算
availability := (RUN_TIME - DOWNTIME) / RUN_TIME;
performance := (actualPPM / ratedPPM);
quality := (goodCount / totalCount);
oee := availability * performance * quality * 100;
报警管理系统特点:
- 分级报警(信息/警告/故障)
- 关联故障树分析
- 自动生成处置建议
- 历史数据云备份
4.2 设备维护预测系统
基于运行数据开发的预测性维护模块:
st复制// 伺服电机健康度评估
FUNCTION EvaluateServoHealth: REAL
VAR_INPUT
motorTemp: REAL;
vibration: REAL;
currentTHD: REAL; //电流谐波畸变率
END_VAR
VAR
tempScore, vibScore, elecScore: REAL;
END_VAR
// 温度评分(指数衰减模型)
tempScore := 100.0 * EXP(-0.05 * (motorTemp - 60));
// 振动评分(分段线性)
vibScore := 100.0 - LIMIT(vibration - 2.0, 0.0, 10.0) * 8.0;
// 电气评分
elecScore := 100.0 - currentTHD * 2.0;
RETURN (tempScore * 0.4 + vibScore * 0.3 + elecScore * 0.3);
维护建议生成逻辑:
- 健康��>80%:继续使用
- 60-80%:关注趋势变化
- <60%:建议预防性维护
5. 程序架构与开发规范
5.1 模块化编程实践
整个项目采用"高内聚低耦合"的架构设计,主要模块包括:
- 轴控制库(包含15种运动模式)
- 工艺配方管理
- 安全监控系统
- 数据采集模块
- 通信协议栈
典型的轴控制函数块接口定义:
st复制FUNCTION_BLOCK AxisController
VAR_INPUT
bEnable: BOOL;
fTargetPos: LREAL;
fVelocity: REAL;
END_VAR
VAR_OUTPUT
bReady: BOOL;
bError: BOOL;
iErrorCode: INT;
END_VAR
VAR
eState: (IDLE, HOMING, MOVING, ERROR);
stParams: AxisParams;
END_VAR
METHOD Home: BOOL
// 回原方法实现...
METHOD MoveAbsolute: BOOL
// 绝对定位实现...
METHOD Stop: BOOL
// 平滑停止算法...
5.2 代码质量管理措施
为确保20000步代码的可靠性,我们实施以下措施:
- 静态检查:使用CODESYS静态分析工具,确保符合MISRA-C规范
- 单元测试:为每个函数块编写测试用例,覆盖率>85%
- 持续集成:每日构建+自动化测试
- 版本控制:Git管理,每个功能分支必须通过评审才能合并
典型测试用例示例:
st复制TEST_FUNCTION test_AxisHomeSequence
VAR
axis: AxisController;
bResult: BOOL;
END_VAR
// 测试初始状态
AssertFalse(axis.bReady);
// 执行回原
axis(bEnable := TRUE);
axis.Home();
WAIT_FOR(axis.bReady, TIMEOUT := 5000);
// 验证结果
AssertTrue(axis.bReady);
AssertEquals(axis.ActPos, 0.0, 0.001);
6. 调试经验与性能优化
6.1 运动控制调试技巧
伺服系统调试三步法:
- 惯量辨识:使用汇川伺服自整定功能
- 刚性设置:根据机械特性选择适当刚度
- 振动抑制:调整陷波滤波器参数
现场实测的优化参数表:
| 轴名称 | 增益类型 | 原始值 | 优化值 | 效果 |
|---|---|---|---|---|
| X轴 | 位置前馈 | 0.65 | 0.78 | 跟踪误差↓42% |
| Y轴 | 速度增益 | 120 | 95 | 振动↓35% |
| Z轴 | 积分时间 | 20ms | 15ms | 稳态误差↓58% |
6.2 实时性保障措施
为确保1ms控制周期的确定性:
-
任务调度优化:
- 运动控制任务:1ms周期,最高优先级
- 工艺计算任务:5ms周期
- HMI通信任务:20ms周期
-
内存管理:
- 禁用动态内存分配
- 关键数据区固定地址分配
- 使用预分配缓冲池
-
通信优化:
- EtherCAT DC同步精度<100ns
- 过程数据对象(PDO)优化映射
- 禁用非必要诊断报文
st复制// 高速IO中断处理
PROGRAM HighSpeedIO_ISR
VAR
edgeTime: ARRAY[0..1] OF ULINT;
period: ULINT;
END_VAR
// 捕获上升沿时间戳
IF RISING_EDGE(photoSensor) THEN
edgeTime[1] := edgeTime[0];
edgeTime[0] := GET_SYSTEM_TIME();
// 计算周期(防抖动滤波)
period := edgeTime[0] - edgeTime[1];
IF period > 500 AND period < 5000 THEN //有效脉冲范围
actualPPM := 60000000 / period; //转换为PPM
END_IF;
END_IF;
这套系统最终实现的关键指标:
- 生产节拍:300pcs/min
- 定位精度:±0.1mm
- 不良率:<0.3%
- 换型时间:<15min
从电气柜配线到最终验收测试,整个项目周期历时三个月。最让我自豪的不是代码行数,而是看到操作工人从最初的畏难情绪到后来能自主处理大部分报警。这套系统至今已稳定运行8000+小时,生产口罩超过1亿只——这才是工业自动化工程师最大的成就感。
