Factory IO + STEP 7 机器人上下料与传送分拣仿真全流程教程

本教程记录一个完整的虚拟调试项目:用 Factory IO 搭建两条机器人上下料加工单元与十字分拣输送线,用 Siemens S7-200(STEP 7-Micro/WIN V4.0)编写梯形图,经 S7-200/300/400 驱动与 COSAI 端口配置完成通信,实现「上料 → 输送 → 机器人送件 → 加工 → 出料 → 分拣 → 计数」的全流程仿真。

  1. 项目概述

整个仿真由三层构成:Factory IO 场景提供设备与物料的三维运动,PLC 程序负责判断与指令,通信驱动把两者连起来。场景里有 2 个加工中心(Lids center 盖体加工中心、Bases center 底座加工中心)、2 台六轴机器人负责上下料、一条主输送线与两条单元支线,以及在十字交汇处用顶升滚轮分拣器(Pop Up Wheel Sorter)把工件分流到左右两条滑槽。

与传统产线不同,这里的 PLC 只管两件事:读传感器(V 区布尔输入)与写执行器(Q 区布尔输出),机器人的抓放动作由 Factory IO 场景内的机器人组件自动完成,PLC 只需通过「开始 / 复位 / 停止 / 出料」等信号与加工中心握手。

  1. 系统组成与信号总览

  1. 场景分区与物料流向

区域

主要设备

在图中的作用

1 号加工单元

Lids center 加工中心、机器人、传送带11 / 传送带21

机器人从取件位抓取毛坯送入加工中心,加工完成后再取出放到支线

2 号加工单元

Bases center 加工中心、机器人、传送带12 / 传送带22

与 1 号单元结构相同,处理另一类工件

主输送线

传送带1 / 传送带2、入料口1 / 入料口2

把工件从供料端送到两个单元的取件位,入料口传感器即取件位有件检测

分拣交汇区

顶升滚轮分拣器、传送带3、Belt Conveyor (2m) 0 / 5 / 6、出料口1 / 出料口2、两条滑槽

把两个单元送出的工件分流到左右滑槽,并按类型计数

完整物料流:上料器放件 → 主输送线输送 → 取件位(入料口)有件 → 机器人送件进加工中心 → 加工完成出料 → 机器人取出放回支线 → 输送到十字交汇 → 分拣器按来源分流 → 落入滑槽并计数。

  1. I/O 地址总表

布尔输入共 9 点,落在 V 存储区(这是 S7-200/300/400 驱动的映射方式,不是 I0.x):

地址

标签

含义

V0.0

入料口1

1 号单元取件位有件

V0.1

Lids center (busy)

盖体加工中心加工中

V0.2

Lids center (has error)

盖体加工中心故障

V0.3

出料口1

1 号单元出料位有件

V0.4

入料口2

2 号单元取件位有件

V0.5

Bases center (busy)

底座加工中心加工中

V0.6

Bases center (has error)

底座加工中心故障

V0.7

出料口2

2 号单元出料位有件

V1.0

FACTORY I/O (Running)

仿真运行中,可作系统总使能

布尔输出共 15 点,落在 Q 存储区:

地址

标签

含义

Q0.0

传送带1

主输送线入料段 1

Q0.1

Lids center (produce lids)

请求 1 号加工中心出料

Q0.2

开始1

启动 1 号加工中心加工循环

Q0.3

复位1

1 号加工中心故障复位

Q0.4

停止1

1 号加工中心停机

Q0.5

传送带11

1 号单元支线 A

Q0.6

传送带21

1 号单元支线 B

Q0.7

传送带2

主输送线入料段 2

Q1.0

Bases center (produce …)

请求 2 号加工中心出料

Q1.1

开始2

启动 2 号加工中心加工循环

Q1.2

复位2

2 号加工中心故障复位

Q1.3

停止2

2 号加工中心停机

Q1.4

传送带12

2 号单元支线 A

Q1.5

传送带22

2 号单元支线 B

Q1.6

传送带3

分拣输出段

另有 2 个 32 位双字输出,专门把 PLC 里的计数值送回 Factory IO 显示:QD4 对应盖体计数(Lids counter),QD8 对应底座计数(Bases counter)。

  1. 控制链路

Factory IO 场景 ⇄ 驱动 ComDrvS7(Siemens S7-200/300/400)⇄ 以太网 192.168.21.113 ⇄ S7-200 CPU ⇄ 梯形图程序。PLC 每扫描一次就把 Q 区写回场景、把场景的传感器状态读进 V 区,因此程序里的逻辑能实时反映成画面里传送带的启停、分拣器的抬升与转向。

  1. 分步搭建

  1. 步骤 1:在 Factory IO 中搭建场景

  1. 新建场景,按「两个加工单元 + 主输送线 + 十字分拣」的布局摆放设备:两台加工中心背向布置,各自带围栏与机器人;传送带组成一条主线和两条支线。

  2. 在两条输送线的交汇处安装顶升滚轮分拣器,左右两侧各接一条滑槽,形成两个出料口。

  3. 检查每台设备的方向:分拣器的滚轮方向必须与滑槽方向一致,否则工件会被顶偏或卡住。

  4. 运行场景,先手动观察工件能否从供料端顺利走到分拣器,确认机械布置没有卡点再开始配通信。

  1. 步骤 2:配置驱动与 I/O 点数

打开 Factory IO 的「驱动 / 配置」页面,按下表设置:

项目

设定值

说明

PLC 类型

Siemens S7-200/300/400

对应 ComDrvS7 驱动

主机

192.168.21.113

必须与 PLC 侧 CP243-1 或本机网卡地址一致

网络适配器

Intel(R) Wi-Fi 6 AX203

选实际连到 PLC 网段的网卡

数据类型

DWORD

布尔量按位打包,计数器按 32 位字访问

布尔输入

偏移 0,计数 9

占用 V0.0 ~ V1.0

布尔输出

偏移 0,计数 15

占用 Q0.0 ~ Q1.6

双字输入

偏移 100,计数 0

本工程未用

双字输出

偏移 4,计数 2

QD4、QD8 两个计数器

点数配置决定了后面能编多少东西:只有被分配到地址的标签,PLC 才能控制。这一步是本工程后半段出现「强制」的根因,后文第 6 步会专门处理。

  1. 步骤 3:导出标签并建立 STEP 7 符号表

  1. 在 Factory IO 的标签表里把每个标签改成中文名(入料口1、出料口1、传送带1…),便于后面写程序时一眼看懂。

  2. 用「导出」把标签表导出为 CSV,得到 Name / Type / Data Type / Address 四列。

  3. 在 STEP 7-Micro/WIN 的 Symbol Table 中逐条录入(或导入)符号。17 条布尔符号录完后,程序里就能直接写「传送带1」而不是 Q0.0。

Factory IO 导出的标签 CSV,含名称、类型、数据类型与地址
 

STEP 7 符号表中对应的 17 条符号
 

符号表的两个细节值得注意:输入全部是 V 区(驱动把传感器写进 V 存储区),输出全部是 Q 区。如果照搬真实硬件的 I0.0 / Q0.0 观念,把输入写成 I 区,程序会永远读不到信号。

  1. 步骤 4:设置通信参数并下载程序

在 COSAI 的端口设置里完成两件事:一是串口侧保持 PPI 协议、站地址 2、COM1、9600、9600,E,8,1;二是勾选 CP243-1 以太网模块,把 IP 改为 192.168.21.113,与 Factory IO 的主机地址严格对应。

参数确认后:编译并下载程序到 CPU → 把 CPU 打到 RUN → 回 Factory IO 点运行,观察画面是否随程序动作。第一次联调建议只放一个工件,确认信号链路通了再加量。

  1. 步骤 5:读懂已完成的梯形图(Network 1 ~ 5)

本工程已完成 5 个网络的梯形图,核心思路是用「入料口1」这一个信号当作整条线的节拍器,再靠置位指令把各段传送带和加工中心命令拉起来。

网络

逻辑

作用

Network 1

入料口1(常开触点)→ 置位 传送带1、传送带2

取件位一有件,就把主输送线拉起来送件

Network 2

入料口1(常闭)+ 上升沿 → 置位 开始1;同时 T100(10 ms 时基、PT=100,即 1 s)

件被机器人取走的瞬间,给 1 号加工中心一个启动命令

Network 3

同上 → 置位 开始2;T200(100 ms 时基、PT=200,即 20 s)

同时给 2 号加工中心启动命令

Network 4

入料口1(常闭)→ 置位 传送带11、传送带21、传送带3

取件位空了,把 1 号单元支线与输出段拉起来

Network 5

入料口1(常闭)→ 置位 传送带12、传送带22、传送带3

把 2 号单元支线与输出段拉起来

Network 1:入料口1 常开触点触发置位
 

Network 2:常闭触点 + 上升沿置位开始1,T100 计时 1 s
 

Network 3:同一节拍置位开始2,T200 计时 20 s
 

Network 4:取件位空时置位传送带11/21/3
 

这套逻辑有它的可取之处:常开触点做「有件就送」、常闭触点做「件走了就干」,语义很直观,已验证能让画面动起来。但放到正式流程里,有三个必须补的缺口:

  • 节拍过窄:所有网络都挂在入料口1 上,2 号单元没有自己的判断依据,两个单元无法独立工作。

  • 只有置位没有复位:S 指令一旦执行,传送带会一直转到断电,缺少停止、堵料、故障工况下的复位路径。

  • 握手不闭环:开始1/开始2 置位后没有和 busy、error、出料信号形成闭环,加工中心什么时候出料完全不受控。

  1. 步骤 6:补全后半段程序控制

  1. 扩充点数:让 8 个执行器拿到地址

  1. 驱动配置里把布尔输出计数由 15 改为 23,新增 Q1.7 与 Q2.0 ~ Q2.6 共 8 位,正好对上表 8 个执行器。

  2. 布尔输入计数由 9 改为 12,新增 V1.1(加工中心 1 舱门打开)、V1.2(加工中心 2 舱门打开)、V1.3(备用)。

  3. 回到标签表,把这 8 个执行器的地址逐一填成上表的新地址,再在 STEP 7 符号表里补上同名符号。

  4. 进 Factory IO 标签表,逐条取消强制,确认状态栏不再显示「强制」。

不用担心地址冲突:S7-200 里 Q1.0 指的是输出字节 1 的第 0 位,布尔输出占 QB0 ~ QB2,而双字计数器占 QB4 起与 QB8 起,两者不在同一字节,互不覆盖。

  1. 传送带运行逻辑

把原来的「置位即常转」改成按工况持续输出,并用停止位与堵料位做联锁:

传送带

运行条件

停止条件

传送带1 / 2

系统运行 且 两个取件位都无件

任一取件位有件(防堵料)、停止1 有效、仿真未运行

传送带11 / 21

系统运行 且 入料口1 有件

入料口1 无件

传送带12 / 22

系统运行 且 入料口2 有件

入料口2 无件

传送带3、2m 0 / 5 / 6

系统运行

系统停止

  1. 分拣判定与动作

十字交汇处分拣器要回答两个问题:这一件从哪个单元来、该往哪边去。本工程用出料口传感器做类型记忆:出料口1 检出工件即记为「1 号单元件 → 左滑槽」,出料口2 检出即记为「2 号单元件 → 右滑槽」,记忆位保持到本次分拣动作完成后清除。

  1. 记忆:出料口1 上升沿 → 置位 M0.1;出料口2 上升沿 → 置位 M0.2。

  2. 顶升:M0.1 或 M0.2 有效 → 置位 Q2.2(分拣器顶升)。

  3. 分流:M0.1 → Q2.3(向左);M0.2 → Q2.4(向右)。两个方向互斥,避免同时给。

  4. 复位:用 T41(100 ms 时基、PT=50,即 5 s)覆盖工件从顶升到离开滑槽的时间,到时复位 Q2.2 ~ Q2.4 与 M0.1 / M0.2,等待下一件。

如果场景里在分拣器入口另有光电传感器,把它接到一个空闲输入(例如 V1.3),把「出料口上升沿」换成「分拣器光电上升沿」触发会更严谨——那是更标准的做法,本工程现有标签里没有这一位,所以用出料口 + 定时保持来等效。

  1. 加工中心握手与计数回传

  • 启动:取件位由有件变无件(件已被机器人取走)且加工中心舱门已开、不在忙 → 给 开始1 一个置位脉冲;检测到 busy 上升沿立即复位该命令,保证它是一个短脉冲而不是常亮。

  • 出料:busy 由 1 变 0(加工完成)→ 置位出料命令 Q0.1,经 T40 延时 0.5 s 后复位。

  • 故障:has error 为 1 时持续输出 复位1(Q0.3),故障消失自动撤销。

  • 计数:出料口1 上升沿给 VD100 加 1,出料口2 上升沿给 VD104 加 1,再用 MOVD 把两个双字送到 QD4、QD8,场景上的计数器就会实时跳动。

  1. 完整程序(可直接照此录入)

下面是补全后的 S7-200 STL 源码,按网络给出,可在 STEP 7-Micro/WIN 的 STL 编辑器里逐段建立,再切回 LAD 查看梯形图。原 Network 1 ~ 5 已被替换为带联锁的版本。

NETWORK 1   // 系统使能:Factory IO 运行即允许输出
LD     V1.0
=      M0.0

NETWORK 2   // 停机指令:仿真未运行时给两台加工中心发停止
LDN    M0.0
=      Q0.4
=      Q1.3

NETWORK 3   // 主输送线:取件位都空时才送件,防堵料
LD     M0.0
AN     Q0.4
AN     V0.0
AN     V0.4
=      Q0.0
=      Q0.7

NETWORK 4   // 1 号单元支线:取件位有件时运行
LD     M0.0
A      V0.0
=      Q0.5
=      Q0.6

NETWORK 5   // 2 号单元支线:取件位有件时运行
LD     M0.0
A      V0.4
=      Q1.4
=      Q1.5

NETWORK 6   // 分拣输出段常转(受系统使能控制)
LD     M0.0
=      Q1.6
=      Q1.7
=      Q2.0
=      Q2.1

NETWORK 7   // 上料器脉冲:T37 定时 3 s,T38 决定 0.2 s 脉宽
LD     M0.0
AN     V0.0
AN     V0.4
AN     T38
TON    T37, 30
LD     T37
=      Q2.5
TON    T38, 2

NETWORK 8   // 两路上料器(Q2.6 与 Q2.5 同步放件,可改延时错开)
LD     T37
=      Q2.6

NETWORK 9   // 启动 1 号加工中心:件被取走 + 舱门已开 + 不忙
LDN    V0.0
A      V1.1
AN     V0.1
EU
S      Q0.2, 1

NETWORK 10  // busy 上升沿复位启动命令,保证是短脉冲
LD     V0.1
EU
R      Q0.2, 1

NETWORK 11  // 加工完成(busy 下降沿)请求出料,0.5 s 脉冲
LD     V0.1
ED
S      Q0.1, 1
LD     Q0.1
TON    T40, 5
LD     T40
R      Q0.1, 1

NETWORK 12  // 1 号加工中心故障复位
LD     V0.2
=      Q0.3

NETWORK 13  // 启动 2 号加工中心
LDN    V0.4
A      V1.2
AN     V0.5
EU
S      Q1.1, 1

NETWORK 14  // busy 上升沿复位启动命令
LD     V0.5
EU
R      Q1.1, 1

NETWORK 15  // 2 号加工中心出料请求
LD     V0.5
ED
S      Q1.0, 1
LD     Q1.0
TON    T42, 5
LD     T42
R      Q1.0, 1

NETWORK 16  // 2 号加工中心故障复位
LD     V0.6
=      Q1.2

NETWORK 17  // 分拣类型记忆:出料口 1 / 2 上升沿
LD     V0.3
EU
S      M0.1, 1
LD     V0.7
EU
S      M0.2, 1

NETWORK 18  // 分拣执行:顶升 + 互斥方向
LD     M0.1
O      M0.2
S      Q2.2, 1
LD     M0.1
S      Q2.3, 1
LD     M0.2
S      Q2.4, 1

NETWORK 19  // 保持 5 s 后复位顶升、方向与记忆位
LD     M0.1
O      M0.2
TON    T41, 50
LD     T41
R      Q2.2, 3
R      M0.1, 2

NETWORK 20  // 双字计数
LD     V0.3
EU
INCD   VD100
LD     V0.7
EU
INCD   VD104

NETWORK 21  // 计数回传 Factory IO 计数器
LD     SM0.0
MOVD   VD100, QD4
MOVD   VD104, QD8

程序要点回顾:系统使能(M0.0)统管所有输出;传送带按工况持续输出而非置位常转;加工中心用置位 + busy 上升沿复位形成短脉冲握手;分拣用出料口上升沿记忆 + 定时复位完成方向判定;计数用双字递增后回写 QD4 / QD8。

  1. 步骤 7:联调与验证

  1. 先取消全部强制:标签表里 8 条执行器逐个取消,确认状态栏干净。此时若程序未下载,画面会静止——这是正常的,说明强制已不再掩盖逻辑。

  2. 编译下载,CPU 打到 RUN,Factory IO 点运行。观察第一件工件:主输送线是否转、到位后是否停、机器人是否取件、加工中心是否启动。

  3. 用状态表(Status Chart)在线监视 V0.0 ~ V1.2 与 Q0.0 ~ Q2.6,逐位对照画面动作,哪一位不动就去查对应网络。

  4. 放行多件,确认分拣方向不串:1 号单元的件进左滑槽、2 号单元进右滑槽,QD4 / QD8 数值同步增长。

  5. 人为制造故障(点击加工中心故障位),确认复位信号输出、故障消失后自动恢复。

验证合格的三个判据:取消强制后画面仍能连续运行;两件工件同向时不会卡在交汇处;两个计数器的总和等于实际落入滑槽的件数。

  1. 常见问题排查

现象

原因与处理

画面全静止,状态页显示已连接

布尔输出点数与标签地址不匹配,或程序未在 RUN。核对配置 23 点、检查 CPU 状态灯

程序读到 V0.0 永远为 0

输入被写成了 I 区。此驱动把传感器映射到 V 区,符号表地址必须是 V0.x

传送带启动后停不下来

沿用了 S 置位却没有复位路径。改为按工况持续输出,并串入停止位与堵料位

加工中心不启动

开始命令是常亮而非脉冲,或舱门(Opened)未开。用 busy 上升沿复位命令,并检查舱门信号

分拣器不动或工件顶偏

分拣器三个点仍是强制状态、方向点同时为 1,或顶升时间太短。取消强制、做方向互斥、按工件行走时间整定 T41

计数器不显示

双字输出只配了 1 个点,或没有 MOVD 回写。核对偏移 4、计数 2,并确认 QD4 / QD8 每周期刷新

联调时通时不通

主机 IP 与 CP243-1 不一致,或选了错误的网卡。两处都设成 192.168.21.113,网卡选实际连接的那块

  1. 写在最后

这个项目真正要练的不是把画面点动起来,而是建立「传感器 → 判断 → 执行器」的闭环意识:先算清楚场景里有多少输入输出、地址够不够,再谈逻辑;能用持续输出表达的状态,就不要用置位锁死;每一个置位都要想清楚它的复位条件。把这三点做扎实,强制自然就不需要了。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐