跳到主要内容

高速贴标机 (Labeling Station)

面向饮料、日化、医药、化妆品全自动不停机高速贴标场景。Darra 内置 色标跟踪 + 电子齿轮同步 + 飞剪 + 触发探针 (TouchProbe) 工艺对象, 在 500 µs 周期内完成"瓶座—标签带—色标"三轴同步并做实时相位补偿。


1. 设备简介

贴标机把标签带按色标逐枚切开并粘贴到瓶身, 关键在于 瓶子自转角度 ↔ 标签带线速 ↔ 色标相位 三者严格一致。典型指标:

项目参数
产能250 瓶 / 分钟 (实测 260)
贴标精度±0.5 mm (实测 ±0.3 mm)
色标跟踪误差< 1 mm (实测 0.6 mm)
标签利用率> 98% (实测 99.1%)
换标时间< 3 分钟
EtherCAT 周期500 µs, 抖动 < 10 µs
工艺模式圆瓶 / 方瓶 / 双面 / 顶部 / 套标撕贴
不良剔除视觉 + 气动剔除

整机工艺: 进瓶 → 瓶夹夹紧 → 瓶座自转 → 标签带同步供送 → 色标触发相位修正 → 压贴滚轮 → 视觉检测 → 合格出瓶 / 不良剔除。


2. 项目模块组成

项目职责
实时驱动DarraRT.sys + DarraRT_Eth.sys + DarraRT_PLC.sysEtherCAT + PLC VM
服务层Darra.PLC.Service永驻, EtherCAT SDK 调度
用户层Darra.PLC.Panel + Darra.PLC.IDE操作 + 开发
视觉层海康 SDK + Darra 视觉桥接剔除判定

PLC 项目单元:

单元周期说明
PRG_MAIN10 ms状态机
PRG_FEED1 ms进瓶节拍
PRG_GEAR_FRONT500 µs前标电子齿轮 + 色标
PRG_GEAR_REAR500 µs后标电子齿轮 + 色标
PRG_CUT500 µs标带飞剪
PRG_VISION10 ms视觉触发 / 判定
PRG_REJECT10 ms剔除节拍

3. 机械装配架构

  [进瓶输送带 (变频)]

[瓶夹上料 → 瓶座 (自转伺服)] ← 瓶子自转主轴 MasterBottle
↓ ↓
+-----+-----+ +---------+---------+
| | | |
[前标模组] [后标模组]
----------------- -----------------
· 标带盘 (恒张力) · 标带盘
· 牵引伺服 (从) · 牵引伺服 (从)
· 剥离板 · 剥离板
· 压贴滚轮 (气缸) · 压贴滚轮
· 色标传感器 → 伺服 TouchProbe · 色标传感器 → 伺服 TouchProbe
· 飞切刀辊 (分离单枚标签)
↓ ↓
\______ ______/
[视觉检测工位]

合格 → 出瓶 / 不良 → [剔除气缸]

轴汇总:

功能规格
Axis_Bottle瓶座自转 (主)SV660N 400 W
Axis_LabelF前标带 (从, 电子齿轮)SV660N 750 W + TouchProbe1
Axis_LabelR后标带 (从, 电子齿轮)SV660N 750 W + TouchProbe1
MTR_Conv进瓶输送带1.5 kW 变频

4. 程序架构

   Darra.PLC.IDE
| 下装
v
Darra.PLC.Service <---> Panel (HMI)
| IOCTL |
v | 视觉 TCP
DarraRT_PLC.sys =GlobalIO= DarraRT_Eth.sys <── 海康相机 GigE
| EtherCAT
v
AM600 → DI/DO → SV660N × 3 → 电磁阀岛
色标传感器 → 直连伺服驱动 DI (TouchProbe)

核心亮点: 色标传感器不进 EtherCAT PDO, 直接接到伺服驱动的探针输入脚, 硬件锁存位置, 响应 < 1 µs。主站通过 MC_TouchProbe 读取锁存值。

任务调度:

  • 500 µs: PRG_GEAR_FRONT / PRG_GEAR_REAR / PRG_CUT
  • 1 ms: PRG_FEED
  • 10 ms: PRG_MAIN / PRG_VISION / PRG_REJECT

5. 硬件 BOM (国产化)

类别型号品牌数量单价 (¥)小计
工控机ARK-1124H研华14,5004,500
HMITK6071iQ 7 寸威纶通11,2801,280
伺服驱动 (瓶座)SV660N 400 W汇川12,1002,100
伺服驱动 (前标)SV660N 750 W汇川12,3802,380
伺服驱动 (后标)SV660N 750 W汇川12,3802,380
伺服电机 (400 W + 750 W × 2)ISMH1 系列汇川3~2,0006,000
变频器 (进瓶)MS300 1.5 kW台达1780780
EtherCAT IO 主AM600-CPU1608TP汇川11,8001,800
DI 模块AM600-1600END汇川1580580
DO 模块AM600-1600ETN汇川1580580
色标传感器BC50-E1 双通道奥普27801,560
瓶到位光电E3F-DS30欧姆龙国产665390
标带线速编码器2500 ppr 增量雷赛2480960
视觉相机130 万像素 USB3海康13,2003,200
视觉光源 + 镜头25 mm + 条形 LED奥普1 套800800
剔除气缸SC ø32×100亚德客1240240
电磁阀岛EtherCAT 8 联亚德客11,8001,800
主机架 + 瓶座 + 输送铝型材 + 不锈钢自制112,00012,000
贴标模组 (机械)标带盘 + 剥离板 + 压轮自制28,00016,000
安全光幕600 mm 10 光轴舜驰1800800
电控柜600×600×1800威图国产12,4002,400
端子 / 线缆--1 套1,5001,500
合计¥63,530

6. IO 模块配置

6.1 配置步骤

  1. IDE → 设备视图 → 扫描 EtherCAT, 确认从站: AM600 CPU → DI → DO → SV660N ×3 → 电磁阀岛
  2. 3 台 SV660N 别名: Axis_Bottle, Axis_LabelF, Axis_LabelR
  3. 关键: 在每台标带伺服的参数里配置 TouchProbe:
    • 0x60B8.0 = 1 (使能探针 1)
    • 0x60B8.4 = 1 (上升沿触发)
    • 0x60BA = 读取锁存位置
  4. 色标传感器 24 V 信号直接接到伺服驱动的 DI 探针脚 (不经过 AM600)
  5. 视觉相机走 USB3 到工控机, 不占 EtherCAT 带宽
  6. IO 表自动生成

6.2 IO 清单

地址符号说明
I0.0SEN_BottleIn进瓶光电
I0.1SEN_BottleClamp瓶夹到位
I0.2SEN_LabelF_Out前标用完
I0.3SEN_LabelR_Out后标用完
I0.4SEN_VisionTrigger视觉触发信号反馈
I0.5SEN_RejectHome剔除气缸原位
I0.6SEN_LightCurtain光幕
I1.0..3SB_Start/Stop/EStop/Reset按钮
Q0.0MTR_Conv输送带变频使能
Q0.1SOL_Clamp瓶夹气缸
Q0.2SOL_CutF前标飞剪
Q0.3SOL_CutR后标飞剪
Q0.4SOL_Reject剔除气缸
Q0.5SOL_Vision_Light视觉光源
Q0.6LAMP_Run运行灯
Q0.7LAMP_Fault故障灯
伺服 TPTP_FrontColorMark前标色标 (伺服锁存)
伺服 TPTP_RearColorMark后标色标 (伺服锁存)

6.3 视觉触发链

瓶子到视觉工位光电 I0.4 (SEN_VisionTrigger)

PLC 发送相机触发命令 (TCP 到工控机本地海康 SDK)

相机拍照 → AI 模型判定 (合格 / 标歪 / 无标)

10 ms 内结果回传到 PLC 的 gVisionResult

剔除工位光电 I0.5 到达前 PLC 决定是否驱动 Q0.4

7. 核心数据结构

TYPE RECIPE_LABEL :
STRUCT
Name : STRING(32);
BottleDiameter : LREAL;
BottleHeight : LREAL;
LabelLength : LREAL; // mm
LabelPitch : LREAL; // 色标间距
LabelOffsetF : LREAL; // 前标贴标偏移
LabelOffsetR : LREAL; // 后标贴标偏移
BottleLineSpeed : LREAL; // mm/s
GearRatioF : LREAL; // 前标齿轮比 (默认 1.0)
GearRatioR : LREAL; // 后标齿轮比
TrackingEnable : BOOL;
TrackingKp : LREAL;
TrackingLimit : LREAL; // ± mm
END_STRUCT
END_TYPE

TYPE VISION_RESULT :
(
Unknown, Pass, Skew, Missing, Double, Other
);
END_TYPE

VAR_GLOBAL
gState : MACHINE_STATE := MACHINE_STATE#Idle;
gRecipe : RECIPE_LABEL;
gVisionResult : VISION_RESULT;
gBottleCount : UDINT;
gRejectCount : UDINT;
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#Homing;
END_IF
MACHINE_STATE#Homing:
HomeBottleAxis();
IF Axis_Bottle.Homed THEN
gState := MACHINE_STATE#Running;
END_IF
MACHINE_STATE#Running:
RunFeed();
RunLabelGear();
RunTracking();
RunVision();
RunReject();
IF SB_Stop THEN gState := MACHINE_STATE#Paused; END_IF
MACHINE_STATE#Paused:
StopAllAxes();
IF SB_Reset THEN gState := MACHINE_STATE#Idle; END_IF
MACHINE_STATE#Fault:
EmergencyStop();
END_CASE
END_PROGRAM

8.2 工艺对象 — 电子齿轮同步

FUNCTION_BLOCK FB_LabelGear
VAR_INPUT
Execute : BOOL;
Ratio : LREAL;
END_VAR
VAR_IN_OUT
Master : AXIS_REF; // 瓶座
Slave : AXIS_REF; // 标带
END_VAR
VAR
gearIn : MC_GearIn;
END_VAR

gearIn(
Master := Master,
Slave := Slave,
RatioNumerator := DINT_TO_LREAL(1),
RatioDenominator := Ratio,
Acceleration := 5000,
Deceleration := 5000,
Jerk := 50000,
Execute := Execute
);
END_FUNCTION_BLOCK

8.3 工艺对象 — 色标跟踪 (核心亮点)

FUNCTION_BLOCK FB_ColorMarkTracking
VAR_INPUT
Enable : BOOL;
TargetPhase : LREAL; // 配方 LabelOffset
Kp : LREAL := 0.8;
LimitMin : LREAL := -3.5;
LimitMax : LREAL := +3.5;
END_VAR
VAR_IN_OUT
LabelAxis : AXIS_REF;
ProbeUnit : AXIS_PROBE;
END_VAR
VAR
probe : MC_TouchProbe;
phase : MC_PhasingRelative;
errPhase : LREAL;
corr : LREAL;
END_VAR

// 1. 启动硬件探针 (首次触发完成后会保持 Done)
probe(Axis := LabelAxis, Probe := ProbeUnit, Execute := Enable);

IF probe.Done THEN
// 2. 相位误差 = 实际锁存位置 - 期望位置
errPhase := probe.RecordedPosition - TargetPhase;

// 3. 比例控制 + 限幅
corr := -errPhase * Kp;
corr := LIMIT(LimitMin, corr, LimitMax);

// 4. 注入相位偏移
phase(Master := LabelAxis, Slave := LabelAxis,
PhaseShift := corr, Velocity := 500,
Acceleration := 10000, Execute := TRUE);

// 5. 重新启动探针准备下一次锁存
probe(Axis := LabelAxis, Probe := ProbeUnit, Execute := FALSE);
probe(Axis := LabelAxis, Probe := ProbeUnit, Execute := TRUE);
END_IF
END_FUNCTION_BLOCK

8.4 工艺对象 — 飞切标带

FUNCTION_BLOCK FB_LabelCut
VAR_INPUT
Trigger : BOOL;
END_VAR
VAR
pulseT : TP;
END_VAR

pulseT(IN := Trigger, PT := T#50ms);
SOL_CutF := pulseT.Q; // 50 ms 脉冲驱刀辊
END_FUNCTION_BLOCK

8.5 视觉 + 剔除

PROGRAM PRG_VISION
VAR
shotPulse : R_TRIG;
END_VAR

shotPulse(CLK := SEN_VisionTrigger);
IF shotPulse.Q THEN
VisionClient.Trigger(); // 调用海康 SDK TCP 接口
END_IF

IF VisionClient.ResultReady THEN
gVisionResult := VisionClient.Result;
VisionClient.Ack();
IF gVisionResult <> VISION_RESULT#Pass THEN
gRejectCount := gRejectCount + 1;
ELSE
gBottleCount := gBottleCount + 1;
END_IF
END_IF
END_PROGRAM

PROGRAM PRG_REJECT
VAR
q : TP;
END_VAR
q(IN := (gVisionResult <> VISION_RESULT#Pass) AND SEN_BottleIn, PT := T#120ms);
SOL_Reject := q.Q;
END_PROGRAM

8.6 剔除节拍 (延时驱动)

剔除气缸距离视觉工位 1 个工位长度, 约 120 ms 节拍, 用移位寄存器跟踪瓶位:

FUNCTION_BLOCK FB_RejectShifter
VAR_INPUT
Trigger : BOOL; // 瓶进入视觉工位
VisionPass : BOOL; // 视觉判定结果
END_VAR
VAR_IN_OUT
RejectOut : BOOL; // 剔除气缸
END_VAR
VAR
fifo : ARRAY[0..5] OF BOOL; // 6 瓶缓冲
head : INT;
step : R_TRIG;
END_VAR

step(CLK := Trigger);
IF step.Q THEN
// 新瓶入队
fifo[head] := NOT VisionPass;
head := (head + 1) MOD 6;
// 队尾瓶到剔除工位
RejectOut := fifo[head];
END_IF
END_FUNCTION_BLOCK

8.7 全局故障汇总

FUNCTION AnyCriticalFault : BOOL
AnyCriticalFault :=
Axis_Bottle.Fault OR
Axis_LabelF.Fault OR
Axis_LabelR.Fault OR
(NOT SEN_LightCurtain) OR
SEN_LabelF_Out OR
SEN_LabelR_Out;
END_FUNCTION

9. 运行与调试

9.1 上电首检

  1. 气压 0.5 MPa, 视觉光源常亮无闪烁
  2. EtherCAT 扫描从站数一致 (6 个)
  3. 色标传感器直流输出用示波器观察, 上升沿整齐
  4. 标带盘张力弹簧预紧 2 N
  5. 视觉相机实时预览画面清晰, 标签前缘对比度 > 30%
  6. Panel → 诊断 → 3 个轴位置反馈跳动 < 0.02 mm

9.2 电子齿轮标定

  1. HMI 给齿轮比初值 1.0
  2. 瓶座转 10 圈, 测量标带走的长度 (应该 = 周长 × 10)
  3. 若偏差 +1%, 把齿轮比调成 1.010
  4. 再试 10 圈, 误差 < 0.1% 通过

9.3 色标跟踪标定

  1. HMI → 工艺页 → TrackingEnable = FALSE, 运行 5 瓶观察色标停止位
  2. 读取平均位置设成 TargetPhase
  3. 打开 Tracking, Kp 从 0.3 开始上调到 0.8
  4. 实测贴标位置离散 < 0.5 mm 通过

9.4 视觉训练

  1. 采集 500 张合格 + 200 张不良样本
  2. Darra 视觉桥接调用海康 AI 训练器生成模型
  3. 模型部署到工控机, PRG_VISION 直接调用

9.5 换标流程

在线换标不停机:

  1. HMI 按 "请求换标", 当前标带盘剩余不足时 SEN_LabelF_Out 触发
  2. PLC 自动把进瓶变频降到 30%, 瓶流分流到另一工位
  3. 工人换上新标带, 按 "接续完成"
  4. PLC 恢复全速, 5 秒内收敛

9.6 凸轮表 (圆瓶贴标)

圆瓶贴标其实是 1:1 电子齿轮而非凸轮, 但在方瓶 / 椭圆瓶场景必须用凸轮:

  • 方瓶: 贴标只在一个平面上, 瓶子转到该平面时标带全速, 其余空程 → 凸轮 4 段
  • 椭圆瓶: 沿椭圆周长变速, 用 36 点多项式凸轮拟合

9.7 关键日志

日志路径
贴标计数 / 剔除%AppData%/DarraPLC/logs/labeling_*.log
视觉响应时间%AppData%/DarraPLC/logs/vision_*.log
EtherCAT 帧Darra_EtherCAT_Master/debug_info.txt
色标探针命中%AppData%/DarraPLC/logs/touch_probe_*.log

9.8 常见故障

现象可能根因
标签贴歪 ±2 mmKp 过小或标带张力不稳
标签缺失飞剪时序偏, SOL_CutF 提前 50 ms
连贴双标标带剥离板间隙过大
视觉误报光源漂移, 重标定模板

10. Darra 功能对照表

工艺需求Darra 功能
瓶座 ↔ 标带 1:1 同步MC_GearIn (电子齿轮)
色标硬件锁存伺服 TouchProbe + MC_TouchProbe
相位实时补偿MC_PhasingRelative + P 控制
标签飞切TP 脉冲驱动气缸刀辊
视觉触发 / 剔除Darra 视觉桥接 + DI/DO 气缸
瓶型切换RECIPE_LABEL + HMI 配方页
状态机SCL CASE + Fault 自检
数据上云Service 内置云 Agent

9.9 瓶型切换 (高频操作)

化妆品代工厂一天要切 3~5 次瓶型:

  1. HMI → 配方页 → 选新瓶型 (例: "面霜方瓶 50 ml")
  2. PLC 加载 RECIPE_LABEL 新值
  3. 机械手动调: 瓶夹宽度、压轮高度、剥离板位置 (3 分钟)
  4. 启动试贴 3 瓶, 人工目视合格放行

9.10 季度保养清单

项目周期说明
标带盘轴承90 天6004 轴承加油
压贴滚轮硅胶更换180 天发硬即换
色标传感器镜头30 天无尘布 + IPA
视觉光源寿命12 个月LED 模块定期更换
瓶座编码器180 天粉尘清理

9.11 OEM License 管理

  • 出厂时用 Darra IDE 的 License 绑定工具 把该机 CPU 指纹写入授权文件
  • 云端记录该机 ID + 客户 ID + 到期日
  • 到期前 15 天 HMI 弹窗提示续费
  • 过期后 PLC 自动进 Paused 状态, 拒绝 Running

11. 项目总结

  • 整机 BOM ¥6.4 万: 机械自制占大头, 控制系统仅 ¥2.5 万左右
  • 核心工艺 2 块积木: 电子齿轮 + 色标 TouchProbe, 主代码 < 250 行
  • 精度: 贴标 ±0.3 mm, 色标跟踪 0.6 mm, 达高端化妆品标准
  • 产能: 实测 260 瓶/min, 超目标 4%
  • OEM 友好: Darra 按机器指纹发放 License, 适合给代工厂批量交付
  • 可扩展: 加第三标工位 (顶标) 只需多一台 SV660N 和色标探头, 软件复制粘贴

下一步: 用云端的贴标样本数据训练更强的视觉模型, 把剔除率降到 0.1% 以下。