跳到正文
Learn-LAD
示例库/输送带分拣

输送带分拣

9 个网络的分拣产线:输送、检测、推料与状态指示。

综合 S7-300 输送线 置位复位 多步动作

导入到我的 TIA 项目

通过 TiaLink 把本示例的 2 个对象导入你当前打开的 TIA Portal 项目。导入前会先预检,默认不覆盖同名对象,导入后不会自动保存。

TiaLink 设置

默认 http://localhost:8080。也可以在本页地址后加 ?tialink= 临时指定。

TiaLink 启动时若设置了 --api-token,这里要填相同的值;只保存在本机浏览器 localStorage,不会上传。

概述

这是一个分拣产线程序:启动后输送机和出料机运行,三个视觉/光电传感器检测工件,对应位置的分拣推杆(Pusher)伸出把工件推入料道,推到位后自动缩回;全部设备停止时红色指示灯亮起。

程序按"一套主开关 + 三组传感器/推杆"组织,共 8 个可见网络,适合学习置位/复位(S/R)和左右限位信号在产线中的典型用法。示例基于 Factory IO 仿真项目,CPU 为 S7-300。

信号表

信号 类型 含义 作用
FactoryIO_Running I Factory IO 运行信号 整个程序的总前提
START / STOP I 启动/停止按钮 控制主开关(注意 STOP 极性)
Conveyor1 / Conveyor2 Q 输送机 1/2 主开关驱动
Emitter Q 出料机 主开关驱动
Green_Light Q 绿色指示灯 运行时亮
Red_Light Q 红色指示灯 全部停止时亮
Vision_Sensor1~3 I 检测传感器 识别工件到位
PBL1~3 I 推杆伸出到位信号 确认推杆已伸出
PFL1~3 I 推杆缩回到位信号 确认推杆已缩回
Pusher1~3 Q 分拣推杆 置位伸出、复位缩回
RESET I 全局复位 强制复位所有推杆

工作流程

  1. FactoryIO_Running=1 时,按 START → 主开关自锁,Conveyor1、Conveyor2、Emitter、Green_Light 全部输出;
  2. 工件到位 → Vision_SensorN 与 PBLN 同时满足 → 对应 PusherN 置位(伸出);
  3. 推杆到达前端 → PFLN=1 → PusherN 复位(缩回);
  4. 任何时候按 RESET → 三个推杆全部复位;
  5. 按 STOP(信号变 0)→ 主开关断开,设备停止,Red_Light 亮起。

OB1OB

名称数据类型注释
Temp
Temp_0Byte
Temp_1Byte
Temp_2Byte
Temp_3Byte
Temp_4Byte
Temp_5Byte
Temp_6Int
Temp_7Int
Temp_8Int
Temp_9Date_And_Time
Constant

Network 1 — 主开关(自锁 + 停止)

Network 1:FactoryIO_Running、START、Conveyor1、STOP、Conveyor1、Conveyor2、Emitter、Green_Light

目的:一键启动/停止整条产线。

条件 → 动作:(FactoryIO_Running AND (START OR Conveyor1)) AND STOP 驱动四个输出线圈:Conveyor1、Conveyor2、Emitter、Green_Light。

为什么:Conveyor1 自身触点与 START 并联形成自锁;STOP 串在最外层,随时切断。四个线圈共用一条 rung,保证状态一致。

注意:STOP 是常开触点,但按逻辑必须为 1 才允许运行——在 Factory IO 里这个信号"未按停止"时常态为 1,按下才变 0。实际接线时要特别确认这种极性,否则会出现"按启动没反应"或"停不下来"。

逻辑:Conveyor1 = (FactoryIO_Running AND (START OR Conveyor1)) AND STOP

Network 2 — 推杆 1 伸出(置位)

Network 2:Vision_Sensor1、PBL1、Pusher1

目的:检测到工件并确认推杆在初始位置时,让推杆 1 伸出。

条件 → 动作:Vision_Sensor1=1 且 PBL1=1 → Pusher1 置位(S 线圈)。

为什么:用置位线圈而不是普通线圈,推杆会保持伸出(自保持),不会因为传感器信号消失就缩回;PBL1(位置到位信号)确保推杆从初始位置出发。

逻辑:Pusher1 = Vision_Sensor1 AND PBL1(置位)

Network 3 — 推杆 1 缩回(复位)

Network 3:PFL1、RESET、Pusher1

目的:推杆伸出到位后缩回。

条件 → 动作:PFL1=1(前端到位)或 RESET=1 → Pusher1 复位(R 线圈)。

为什么:伸出到位信号触发复位,形成"伸出→到位→缩回"的完整动作;RESET 用于人工强制复位所有推杆。

逻辑:Pusher1 = PFL1 OR RESET(复位)

Network 4 — 推杆 2 伸出(置位)

Network 4:Vision_Sensor2、PBL2、Pusher2

目的:推杆 2 的伸出条件与推杆 1 相同,只是换成第 2 组信号。

条件 → 动作:Vision_Sensor2=1 且 PBL2=1 → Pusher2 置位。

逻辑:Pusher2 = Vision_Sensor2 AND PBL2(置位)

Network 5 — 推杆 2 缩回(复位)

Network 5:PFL2、RESET、Pusher2

条件 → 动作:PFL2=1 或 RESET=1 → Pusher2 复位。

逻辑:Pusher2 = PFL2 OR RESET(复位)

Network 6 — 推杆 3 伸出(置位)

Network 6:Vision_Sensor3、PBL3、Pusher3

条件 → 动作:Vision_Sensor3=1 且 PBL3=1 → Pusher3 置位。

逻辑:Pusher3 = Vision_Sensor3 AND PBL3(置位)

Network 7 — 推杆 3 缩回(复位)

Network 7:PFL3、RESET、Pusher3

条件 → 动作:PFL3=1 或 RESET=1 → Pusher3 复位。

逻辑:Pusher3 = PFL3 OR RESET(复位)

Network 8 — 停止指示灯

Network 8:Conveyor1、Conveyor2、Emitter、Red_Light

目的:设备全部停止时点亮红灯。

条件 → 动作:NOT Conveyor1 AND NOT Conveyor2 AND NOT Emitter → Red_Light=1。

为什么:用三个常闭触点串联判断"全部停止",是典型的组合逻辑;注意它只反映这三个输出,不包含推杆状态。

注意:原工程注释写的是 "when all conveyor are positive",但逻辑实际是"全部为 0 时亮"——以逻辑为准。

逻辑:Red_Light = NOT Conveyor1 AND NOT Conveyor2 AND NOT Emitter

常见问题

  • 按启动没反应:先确认 FactoryIO_Running=1、STOP 信号是否为 1(极性见 Network 1)。
  • 推杆不缩回:检查对应的 PFL 信号或使用 RESET。
  • 推杆一直缩回:确认 PBL(初始位置)信号正常;如果 PBL 一直为 0,置位条件永远不成立。
  • 红灯逻辑好像反了:红灯是"全部停止"指示,不是"故障"指示。
  • 点表里的 Yelloe_Light:原工程定义了这个输出(拼写应为 Yellow),但程序里没有使用,与本程序的绿灯/红灯无关。

变体与扩展

  • 按工件类型分拣:三个传感器对应三种工件,只需更换传感器组合条件。
  • 推杆动作加定时监控:给每个推杆加一个超时定时器,伸出/缩回超时报警。
  • 加急停:在主开关网络里串急停常闭触点,并复位所有推杆。

变量与数据块

变量表:Default tag table

名称数据类型地址注释
FactoryIO_RunningBool%I0.0
Vision_Sensor1Bool%I0.1
Vision_Sensor2Bool%I0.2
Vision_Sensor3Bool%I0.3
PBL1Bool%I0.4
PFL1Bool%I0.5
PBL2Bool%I0.6
PFL2Bool%I0.7
PBL3Bool%I1.0
PFL3Bool%I1.1
STARTBool%I1.2
STOPBool%I1.3
RESETBool%I1.4
Conveyor1Bool%Q0.0
Conveyor2Bool%Q0.1
EmitterBool%Q0.2
Pusher1Bool%Q0.3
Pusher2Bool%Q0.4
Pusher3Bool%Q0.5
Green_LightBool%Q0.6
Red_LightBool%Q0.7
Yelloe_LightBool%Q1.0

下一步