热收缩膜包装机 (Shrink Wrap)
面向饮料、洗化、纸品、小家电等集束包装场景。依托 Darra 电子凸轮 + 飞剪 + 定长切割 + 温度 PID 工艺对象, 在 250 µs~500 µs 周期内同时管理进膜、切膜、集束、热收缩、张力闭环全流程。
1. 设备简介
热收缩膜包装机把多个单瓶按集束阵型 (如 6×2=12) 聚拢, 自动包裹 PE 薄膜, 飞剪切断后送入热收缩通道, 经冷却定型后成束产出。典型指标:
| 项目 | 参数 |
|---|---|
| 包装速度 | ≥ 40 束 / 分钟 (实测 44) |
| 切膜长度精度 | ±1 mm (实测 ±0.6 mm) |
| 膜张力稳定性 | ±5 N (实测 ±2.8 N) |
| 热收缩温度精度 | ±1°C (实测 ±0.7°C) |
| 膜材利用率 | ≥ 95% (实测 97.2%) |
| EtherCAT 周期 | 500 µs, 抖动 < 5 µs |
| 换型时间 | ≤ 5 分钟 |
| 热收缩通道 | 4 区温区, 最高 230°C |
整机工艺: 进膜 → 横封飞剪 → 集束进入加热收缩通道 → 冷却定型 → 出束。
2. 项目模块组成
| 层 | 项目 | 职责 |
|---|---|---|
| 实时驱动 | DarraRT.sys + DarraRT_Eth.sys + DarraRT_PLC.sys | 内核调度 + EtherCAT |
| 服务层 | Darra.PLC.Service | 永驻, 管理 PLC 运行时 |
| 用户层 | Darra.PLC.Panel + Darra.PLC.IDE | 操作面板 + 开发环境 |
PLC 项目内部:
| 单元 | 周期 | 说明 |
|---|---|---|
| PRG_MAIN | 10 ms | 主状态机 |
| PRG_FEED | 1 ms | 进膜张力环 |
| PRG_CUTTER | 500 µs | 飞剪电子凸轮 + 定长切割 |
| PRG_BUNDLE | 1 ms | 集束成形 & 挤压 |
| PRG_OVEN | 10 ms | 4 区温控 PID |
| PRG_OUT | 10 ms | 冷却 + 出束 + 喷码接口 |
3. 机械装配架构
[瓶流进入] → [列队 + 集束成形 (6×2)] → [推入膜包]
↓
[膜卷 → 张力辊 → 折膜板 → 横封飞剪]
↓
[热收缩通道 (4 区 180..220°C)]
↓
[冷却辊 + 定型]
↓
[出束输送 → 喷码接口]
轴与电机:
| 轴 | 功能 | 规格 |
|---|---|---|
| Axis_Feed | 进膜轴 (虚拟主轴参考) | SV660N 750 W |
| Axis_Cutter | 刀辊飞剪 | SV660N 1.5 kW + 刀辊编码器 |
| Axis_Squeeze | 挤压轮 (成束) | SV660N 750 W |
| Axis_Outfeed | 出束轴 | SV660N 750 W |
| MTR_HotAir × 2 | 热风循环风机 | 5.5 kW 变频 |
| MTR_Cooler | 冷却风机 | 2.2 kW 变频 |
4. 程序架构
Darra.PLC.IDE (开发)
| 下装
v
Darra.PLC.Service <---> Darra.PLC.Panel (HMI)
| IOCTL
v
DarraRT_PLC.sys ==GlobalIO== DarraRT_Eth.sys
| EtherCAT
v
AM600 CPU → DI/DO/PT100/AO → SV660N × 4 → 电磁阀岛
任务调度:
- 500 µs:
PRG_CUTTER飞剪凸轮跟随进膜虚拟主轴 - 1 ms:
PRG_FEED(张力环),PRG_BUNDLE - 10 ms:
PRG_MAIN,PRG_OVEN,PRG_OUT, HMI 刷新
5. 硬件 BOM (国产化)
| 类别 | 型号 | 品牌 | 数量 | 单价 (¥) | 小计 |
|---|---|---|---|---|---|
| 工控机 | ARK-1124H | 研华 | 1 | 4,500 | 4,500 |
| HMI | TK6071iQ 7 寸 | 威纶通 | 1 | 1,280 | 1,280 |
| 伺服驱动 (刀辊) | SV660N-EtherCAT 1.5 kW | 汇川 | 1 | 3,200 | 3,200 |
| 伺服电机 (刀辊) | ISMH1-15C30CB | 汇川 | 1 | 2,800 | 2,800 |
| 伺服驱动 (进膜 / 挤压 / 出束) | SV660N-EtherCAT 750 W | 汇川 | 3 | 2,380 | 7,140 |
| 伺服电机 (配套) | ISMH1-75C30CB + 抱闸 | 汇川 | 3 | 1,850 | 5,550 |
| EtherCAT IO 主 | AM600-CPU1608TP | 汇川 | 1 | 1,800 | 1,800 |
| DI 模块 | AM600-1600END | 汇川 | 2 | 580 | 1,160 |
| DO 模块 | AM600-1600ETN | 汇川 | 2 | 580 | 1,160 |
| PT100 模块 | AM600-4PT | 汇川 | 2 | 1,200 | 2,400 |
| AO 模块 | AM600-4DA | 汇川 | 1 | 980 | 980 |
| 变频器 (热风) | MS300-5.5 kW | 台达 | 2 | 2,400 | 4,800 |
| SSR 固态继电器 | SSR-40DA | 国产 | 8 | 85 | 680 |
| 加热棒 2.5 kW | 陶瓷 | 国产 | 8 | 180 | 1,440 |
| PT100 传感器 | M8×60 | 国产 | 4 | 35 | 140 |
| 张力传感器 | 0~500 N 压轮式 | 国产 | 1 | 1,600 | 1,600 |
| 光电传感器 | 对射 M18 | 欧姆龙国产 | 10 | 65 | 650 |
| 色标传感器 | BC50D | 奥普 | 1 | 680 | 680 |
| 刀辊编码器 | 2500 ppr 增量 | 雷赛 | 1 | 480 | 480 |
| 安全光幕 | 1200 mm 20 光轴 | 舜驰 | 2 | 1,200 | 2,400 |
| 电磁阀岛 | EtherCAT 8 联 | 亚德客 | 1 | 1,800 | 1,800 |
| 气缸 | SC ø32 / ø63 | 亚德客 | 8 | 260 | 2,080 |
| 电控柜 | 800×1000×2000 + 空调 | 威图国产 | 1 | 2,800 | 2,800 |
| 端子 / 线缆 / 杂项 | - | - | 1 套 | 2,500 | 2,500 |
| 合计 | ¥54,020 |
6. IO 模块配置
6.1 配置流程
在 Darra.PLC.IDE 中:
- 设备视图 → 新建 EtherCAT 主站, 绑定 LAN2 网卡
- 扫描从站, 确认顺序: AM600 CPU → DI ×2 → DO ×2 → PT100 ×2 → AO → SV660N ×4 → 电磁阀岛
- 为各模块分配
SlaveIndex - 点击
自动生成 IO 表,%IX / %QX / %IW / %QW地址自动分配 - 为 4 台 SV660N 在
轴配置页给出别名:Axis_Feed,Axis_Cutter,Axis_Squeeze,Axis_Outfeed - 同步
PDO 映射: 控制字 0x6040 + 状态字 0x6041 + 目标位置 0x607A + 实际位置 0x6064 + 目标转速 0x60FF
6.2 关键 IO 表
| 地址 | 符号 | 说明 |
|---|---|---|
| I0.0 | SEN_BundleIn | 集束到位光电 |
| I0.1 | SEN_BundleCount | 集束计数 |
| I0.2 | SEN_FilmEnd | 膜末端检测 (自动接膜) |
| I0.3 | SEN_FilmColorMark | 膜色标 (切膜位置) |
| I0.4 | SEN_CutterHome | 刀辊原位 |
| I0.5 | SEN_HeatDoor | 热收缩炉门状态 |
| I0.6 | SEN_CoolOut | 冷却出口光电 |
| I0.7 | SEN_OverTemp | 超温开关 (安全链) |
| I1.0..3 | SB_Start/Stop/EStop/Reset | 按钮 |
| I1.4 | SW_Auto | 自动模式 |
| I1.5 | SEN_LightCurtain | 安全光幕 |
| AI0.0 | AI_FilmTension | 膜张力 0 |
| AI0.1..4 | AI_TempZone1..4 | 4 区温度 PT100 |
| Q0.0 | MTR_Squeeze_Run | 挤压轮使能 |
| Q0.1 | MTR_HotAir1 | 热风 1 变频使能 |
| Q0.2 | MTR_HotAir2 | 热风 2 变频使能 |
| Q0.3 | MTR_Cooler | 冷却风机使能 |
| Q0.4..7 | SSR_Heater1..4 | 4 区加热 SSR (PWM 软件) |
| Q1.0 | LAMP_Red | 报警灯 |
| Q1.1 | LAMP_Green | 运行灯 |
| Q1.2 | BUZZER | 蜂鸣器 |
| AO0.0..3 | AO_TempSet1..4 | 温度闭环输出 (0~10 V) |
6.3 伺服绑定
| 轴 | 位置 | 用途 |
|---|---|---|
| Axis_Feed | Slave 8 | 进膜 (虚拟主轴参考) |
| Axis_Cutter | Slave 9 | 飞剪刀辊, 从轴 |
| Axis_Squeeze | Slave 10 | 集束挤压 |
| Axis_Outfeed | Slave 11 | 出束 |
刀辊编码器额外接入 Axis_Cutter 的辅助编码器 (0x60B8 Touch Probe 1)。
7. 核心数据结构
TYPE RECIPE_SHRINK :
STRUCT
Name : STRING(32);
BundleRows : INT; // 2
BundleCols : INT; // 6
BottleDiameter : LREAL;
BottleHeight : LREAL;
FilmLength : LREAL; // 每束膜长 mm
FilmOverlap : LREAL; // 搭接 mm
LineSpeed : LREAL; // 进膜线速 mm/s
CutterRad : LREAL; // 刀辊半径 mm
CutterCamId : INT;
TempZone1 : LREAL;
TempZone2 : LREAL;
TempZone3 : LREAL;
TempZone4 : LREAL;
HotAirFreq : LREAL;
TensionTarget : LREAL;
END_STRUCT
END_TYPE
TYPE MACHINE_STATE :
(
Idle, PreHeat, Homing, Running, Paused, Fault
);
END_TYPE
TYPE TEMP_CONTROL :
STRUCT
Setpoint : LREAL;
Actual : LREAL;
Duty : LREAL; // 0~1
Kp : LREAL;
Ti : TIME;
Td : TIME;
InTolerance : BOOL;
END_STRUCT
END_TYPE
VAR_GLOBAL
gState : MACHINE_STATE := MACHINE_STATE#Idle;
gRecipe : RECIPE_SHRINK;
gTemp : ARRAY[1..4] OF TEMP_CONTROL;
gTension : LREAL;
END_VAR
8. 核心程序代码
8.1 主状态机
PROGRAM PRG_MAIN
CASE gState OF
MACHINE_STATE#Idle:
IF SB_Start AND NOT SB_EStop AND SEN_LightCurtain THEN
gState := MACHINE_STATE#PreHeat;
END_IF
MACHINE_STATE#PreHeat:
EnableHeaters();
IF AllZonesInTolerance() THEN
gState := MACHINE_STATE#Homing;
END_IF
MACHINE_STATE#Homing:
HomeCutter();
IF Axis_Cutter.Homed THEN
gState := MACHINE_STATE#Running;
END_IF
MACHINE_STATE#Running:
RunFeed();
RunFlyingCutter();
RunBundle();
RunOven();
RunOutfeed();
IF SB_Stop THEN gState := MACHINE_STATE#Paused; END_IF
IF AnyFault() THEN gState := MACHINE_STATE#Fault; END_IF
MACHINE_STATE#Paused:
StopAllAxes();
IF SB_Reset THEN gState := MACHINE_STATE#Idle; END_IF
MACHINE_STATE#Fault:
EmergencyStop();
LAMP_Red := TRUE;
BUZZER := TRUE;
END_CASE
END_PROGRAM
8.2 工艺对象 — 飞剪定长切割 (核心)
定长切割靠电子凸轮实现: 进膜走一个"膜长", 刀辊正好转一圈, 在接触段完成切断。
FUNCTION_BLOCK FB_FlyingCutter
VAR_INPUT
Execute : BOOL;
CutLength : LREAL; // mm (配方 FilmLength)
CutterRad : LREAL; // mm
CamTableId : INT;
END_VAR
VAR_IN_OUT
FilmAxis : AXIS_REF; // 主 (进膜)
CutterAxis : AXIS_REF; // 从 (刀辊)
END_VAR
VAR
camSel : MC_CamTableSelect;
camIn : MC_CamIn;
ratio : LREAL;
END_VAR
ratio := CutLength / (2.0 * 3.14159265 * CutterRad);
camSel(
CamTable := CAM_CutterTables[CamTableId],
Master := FilmAxis,
Slave := CutterAxis,
Periodic := TRUE,
MasterScaling := CutLength,
SlaveScaling := 1.0
);
camIn(
Master := FilmAxis,
Slave := CutterAxis,
MasterOffset := 0,
SlaveOffset := 0,
StartMode := MC_STARTMODE#Absolute,
Execute := Execute AND camSel.Done
);
END_FUNCTION_BLOCK
8.3 工艺对象 — 色标修正 (补偿膜印刷拉伸)
膜上有定位色标, 用触发探针锁存进膜编码器位置, 与期望位置差即修正量:
FUNCTION_BLOCK FB_ColorMarkCompensate
VAR_INPUT
Enable : BOOL;
ExpectedPos : LREAL;
Kp : LREAL := 0.5;
LimitMm : LREAL := 2.0;
END_VAR
VAR_IN_OUT
FilmAxis : AXIS_REF;
END_VAR
VAR
probe : MC_TouchProbe;
phase : MC_PhasingRelative;
err : LREAL;
corr : LREAL;
END_VAR
probe(Axis := FilmAxis, TriggerInput := 1, Execute := Enable);
IF probe.Done THEN
err := probe.RecordedPosition - ExpectedPos;
corr := -err * Kp;
corr := LIMIT(-LimitMm, corr, LimitMm);
phase(Master := FilmAxis, Slave := FilmAxis,
PhaseShift := corr, Velocity := 100,
Acceleration := 1000, Execute := TRUE);
END_IF
END_FUNCTION_BLOCK
8.4 工艺对象 — 4 区温度 PID
FUNCTION_BLOCK FB_OvenPID
VAR_INPUT
Setpoint : LREAL;
Actual : LREAL;
Kp : LREAL := 1.8;
Ti : TIME := T#24s;
Td : TIME := T#6s;
END_VAR
VAR_OUTPUT
Duty : LREAL; // 0..1
END_VAR
VAR
pid : FB_PIDT1;
END_VAR
pid(Setpoint := Setpoint, Actual := Actual,
Kp := Kp, Ti := Ti, Td := Td,
OutMin := 0.0, OutMax := 1.0);
Duty := pid.Out;
END_FUNCTION_BLOCK
Q0.4..7 由 10 Hz 软件 PWM 驱动 SSR (周期 100 ms, 占空比 = Duty)。
8.5 工艺对象 — 张力环
FUNCTION_BLOCK FB_FilmTension
VAR_INPUT
TensionMeas : LREAL;
Target : LREAL;
Kp : LREAL := 0.4;
Ki : LREAL := 2.0;
END_VAR
VAR_IN_OUT
FilmAxis : AXIS_REF;
END_VAR
VAR
err : LREAL;
intg : LREAL;
dv : LREAL;
END_VAR
err := Target - TensionMeas;
intg := intg + err * 0.001; // 1 ms 周期
dv := err * Kp + intg * Ki;
FilmAxis.ActualVel := LIMIT(50.0, gRecipe.LineSpeed + dv, gRecipe.LineSpeed + 200.0);
END_FUNCTION_BLOCK
9. 运行与调试
9.1 首次上电清单
- 气压 ≥ 0.5 MPa, 冷却水正常
- 4 路 PT100 读数接近室温, 无断路 (Darra 自动诊断)
- 急停复位 + 光幕无遮挡
- Panel → 诊断 → EtherCAT 从站数与配置一致
- 手动点动刀辊 1 圈, 检查原位
SEN_CutterHome
9.2 预热流程
HMI → "预热启动", PLC 进 PreHeat 状态:
- 4 区温度 PID 启动, 实测到达 ±1°C 公差保持 30 s 后放行
- 热风变频按配方频率运行
- 15~20 分钟后进入
Homing
9.3 凸轮标定
IDE → 工艺对象 → 电子凸轮 → Cutter → 可视化拖拽 30 点曲线 (含接触段 80%, 空程段 20%)。AI 助手可根据 FilmLength + CutterRad 自动生成。
9.4 膜利用率优化
- 张力环带宽从 10 Hz 提到 20 Hz
- 色标补偿 Kp 从 0.8 降到 0.5 (过大会导致相位震荡)
- 加减速段多项式改 B 样条, 切口平整度提升
9.5 故障现场图谱
| 现象 | 可能原因 |
|---|---|
| 切口参差 | 飞剪凸轮相位没锁定 (检查 TouchProbe 是否触发) |
| 膜跑偏 | 张力左右不均, 检查左右导辊 |
| 热收缩不均 | 某一区 PT100 断偶, PID 饱和 |
| 刀辊闷住 | 刀口钝, 更换 |
| SSR 烫手 | SSR 散热不良, 加风扇 |
| 集束散掉 | 挤压轮压力不够或膜上搭接余量不足 |
| 膜起皱 | 张力过大或预热温度过高 |
| 出束卡壳 | 冷却辊偏心 / 传送皮带张紧失效 |
9.6 切换配方步骤
- HMI → 配方页 → 选
新配方 - PLC 自动切凸轮表
CAM_CutterTables[CutterCamId] - 温度重新整定 (需 2~3 分钟达温)
- 线速从 5 m/min 逐步恢复到配方值
- 前 5 束人工检查合格后放行
9.7 接膜流程
膜卷即将用尽时 SEN_FilmEnd 触发:
- PLC 降速到 30%
- 操作工把旧膜末端与新膜起端用双面胶粘合
- 按 "接续完成" → PLC 恢复全速, 色标探针在新旧膜交界处会多出一次触发, 代码自动过滤
9.8 长时运行监控
| 指标 | 正常范围 |
|---|---|
| 张力波动 | ±5 N |
| 切膜位置离散 | < 1 mm |
| 主要区温度 | 设定值 ±1°C |
| 刀辊温升 | < 20 K (相对环境) |
| EtherCAT 帧丢失 | 0 帧/8 h |
10. Darra 功能对照表
| 工艺需求 | 使用的 Darra 功能 |
|---|---|
| 飞剪定长切割 | 电子凸轮 MC_CamIn + MC_CamTableSelect (周期模式) |
| 色标补偿膜拉伸 | MC_TouchProbe + MC_PhasingRelative |
| 进膜张力 | SCL 内置 PID + 速度补偿 |
| 热收缩温度 | FB_PIDT1 + 软件 PWM 驱 SSR |
| 虚拟主轴 | Darra 内置虚拟轴, 不依赖物理编码器 |
| 配方切换 | RECIPE_SHRINK + HMI 配方页 |
| EtherCAT 冗余 | Eth 驱动原生支持环形 |
| 远程运维 | Service 云 Agent 上报 |
| 事件记录 | LogManager.Get("ShrinkWrap") |
9.9 AI 调参助手
Darra IDE 的 AI 助手基于云端历史数据给出推荐:
- 输入: 瓶型 / 集束规格 / 膜材质 / 膜厚 / 目标产能
- 输出: 建议切膜长度 / 温度曲线 / 热风频率 / 张力值
- 现场验证: 试产 30 束, 合格率 > 95% 即保存为配方
历史数据积累下来, 第二台机上同种产品直接取云端参数, 调试时间从 8 小时降到 2 小时。
9.10 维护周期
| 项目 | 周期 | 说明 |
|---|---|---|
| 刀辊刃磨 | 30 天 | 切口边缘不整齐时提前 |
| 刀辊轴承加油 | 90 天 | 极压锂基脂 |
| 加热棒检查 | 30 天 | SSR 输入端用万用表测电阻 |
| 张力传感器零点 | 7 天 | 无膜时应读 0±0.5 N |
| PT100 精度验证 | 半年 | 沸水 / 冰水双点校准 |
11. 项目总结
- 整机 BOM ¥5.4 万: 国产 + 一台工控机 + 4 轴, 一次到位
- 关键工艺代码 < 300 行: 电子凸轮 / 定长切割 / 色标补偿 / 温度 PID 全部有现成积木
- 精度实测超标: 切膜 ±0.6 mm, 温度 ±0.7°C, 张力 ±2.8 N
- 调试周期缩短: 预热 → 空跑 → 带膜 → 带瓶, 一天内全部走完
- 可靠性: 连续 168 h 试产无报警, 故障均可自愈 (预警不停机)
下一步: 接入 AI 膜利用率预测, 云端根据膜卷状态主动提示换膜窗口, 进一步提升 OEE。
11.1 迭代路线
- V1.0 (当前): 飞剪 + 4 区温控 + 张力闭环, 达到 44 束/min
- V1.1 (计划): 接入 AI 膜用量预测, 提前 5 min 预警换膜
- V1.2 (计划): 冷却通道加入风速闭环 (风速传感器 + 变频)
- V2.0 (远期): 取消机械刀辊, 改用超声波切膜, 进一步降本
11.2 部署注意事项
- 首次投产建议全天有工程师跟线 24 h, 收集异常数据
- Darra 云端 Agent 默认开启, 不愿上传的客户可在 HMI 关闭
- 远程诊断通过云端 SSH 隧道, 工厂防火墙只需出方向允许 443 端口
11.3 参考指标对比
| 指标 | 进口机 | 本方案 |
|---|---|---|
| 包装速度 | 40 束/min | 44 束/min |
| 切膜精度 | ±1 mm | ±0.6 mm |
| 膜利用率 | 87% | 97.2% |
| 整机价 | ¥48 万 | ¥28 万 (售价) |
| 维保响应 | 4 h 到场 | 15 min 远程 |