导入到我的 TIA 项目
通过 TiaLink 把本示例的 2 个对象导入你当前打开的 TIA Portal 项目。导入前会先预检,默认不覆盖同名对象,导入后不会自动保存。
概述
这是一个分拣产线程序:启动后输送机和出料机运行,三个视觉/光电传感器检测工件,对应位置的分拣推杆(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 |
全局复位 |
强制复位所有推杆 |
工作流程
FactoryIO_Running=1 时,按 START → 主开关自锁,Conveyor1、Conveyor2、Emitter、Green_Light 全部输出;
- 工件到位 →
Vision_SensorN 与 PBLN 同时满足 → 对应 PusherN 置位(伸出);
- 推杆到达前端 →
PFLN=1 → PusherN 复位(缩回);
- 任何时候按
RESET → 三个推杆全部复位;
- 按
STOP(信号变 0)→ 主开关断开,设备停止,Red_Light 亮起。
OB1OB
| 名称 | 数据类型 | 注释 |
| Temp |
| Temp_0 | Byte | |
| Temp_1 | Byte | |
| Temp_2 | Byte | |
| Temp_3 | Byte | |
| Temp_4 | Byte | |
| Temp_5 | Byte | |
| Temp_6 | Int | |
| Temp_7 | Int | |
| Temp_8 | Int | |
| Temp_9 | Date_And_Time | |
| Constant |
|---|
Network 1 — 主开关(自锁 + 停止)
目的:一键启动/停止整条产线。
条件 → 动作:(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 伸出(置位)
目的:检测到工件并确认推杆在初始位置时,让推杆 1 伸出。
条件 → 动作:Vision_Sensor1=1 且 PBL1=1 → Pusher1 置位(S 线圈)。
为什么:用置位线圈而不是普通线圈,推杆会保持伸出(自保持),不会因为传感器信号消失就缩回;PBL1(位置到位信号)确保推杆从初始位置出发。
逻辑:Pusher1 = Vision_Sensor1 AND PBL1(置位)
Network 3 — 推杆 1 缩回(复位)
目的:推杆伸出到位后缩回。
条件 → 动作:PFL1=1(前端到位)或 RESET=1 → Pusher1 复位(R 线圈)。
为什么:伸出到位信号触发复位,形成"伸出→到位→缩回"的完整动作;RESET 用于人工强制复位所有推杆。
逻辑:Pusher1 = PFL1 OR RESET(复位)
Network 4 — 推杆 2 伸出(置位)
目的:推杆 2 的伸出条件与推杆 1 相同,只是换成第 2 组信号。
条件 → 动作:Vision_Sensor2=1 且 PBL2=1 → Pusher2 置位。
逻辑:Pusher2 = Vision_Sensor2 AND PBL2(置位)
Network 5 — 推杆 2 缩回(复位)
条件 → 动作:PFL2=1 或 RESET=1 → Pusher2 复位。
逻辑:Pusher2 = PFL2 OR RESET(复位)
Network 6 — 推杆 3 伸出(置位)
条件 → 动作:Vision_Sensor3=1 且 PBL3=1 → Pusher3 置位。
逻辑:Pusher3 = Vision_Sensor3 AND PBL3(置位)
Network 7 — 推杆 3 缩回(复位)
条件 → 动作:PFL3=1 或 RESET=1 → Pusher3 复位。
逻辑:Pusher3 = PFL3 OR RESET(复位)
Network 8 — 停止指示灯
目的:设备全部停止时点亮红灯。
条件 → 动作: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),但程序里没有使用,与本程序的绿灯/红灯无关。
变体与扩展
- 按工件类型分拣:三个传感器对应三种工件,只需更换传感器组合条件。
- 推杆动作加定时监控:给每个推杆加一个超时定时器,伸出/缩回超时报警。
- 加急停:在主开关网络里串急停常闭触点,并复位所有推杆。