Factory IO + STEP 7 机器人上下料与传送分拣仿真全流程教程
Factory IO + STEP 7 机器人上下料与传送分拣仿真全流程教程
本教程记录一个完整的虚拟调试项目:用 Factory IO 搭建两条机器人上下料加工单元与十字分拣输送线,用 Siemens S7-200(STEP 7-Micro/WIN V4.0)编写梯形图,经 S7-200/300/400 驱动与 COSAI 端口配置完成通信,实现「上料 → 输送 → 机器人送件 → 加工 → 出料 → 分拣 → 计数」的全流程仿真。
-
项目概述
整个仿真由三层构成:Factory IO 场景提供设备与物料的三维运动,PLC 程序负责判断与指令,通信驱动把两者连起来。场景里有 2 个加工中心(Lids center 盖体加工中心、Bases center 底座加工中心)、2 台六轴机器人负责上下料、一条主输送线与两条单元支线,以及在十字交汇处用顶升滚轮分拣器(Pop Up Wheel Sorter)把工件分流到左右两条滑槽。
与传统产线不同,这里的 PLC 只管两件事:读传感器(V 区布尔输入)与写执行器(Q 区布尔输出),机器人的抓放动作由 Factory IO 场景内的机器人组件自动完成,PLC 只需通过「开始 / 复位 / 停止 / 出料」等信号与加工中心握手。

-
系统组成与信号总览
-
场景分区与物料流向
|
区域 |
主要设备 |
在图中的作用 |
|---|---|---|
|
1 号加工单元 |
Lids center 加工中心、机器人、传送带11 / 传送带21 |
机器人从取件位抓取毛坯送入加工中心,加工完成后再取出放到支线 |
|
2 号加工单元 |
Bases center 加工中心、机器人、传送带12 / 传送带22 |
与 1 号单元结构相同,处理另一类工件 |
|
主输送线 |
传送带1 / 传送带2、入料口1 / 入料口2 |
把工件从供料端送到两个单元的取件位,入料口传感器即取件位有件检测 |
|
分拣交汇区 |
顶升滚轮分拣器、传送带3、Belt Conveyor (2m) 0 / 5 / 6、出料口1 / 出料口2、两条滑槽 |
把两个单元送出的工件分流到左右滑槽,并按类型计数 |
完整物料流:上料器放件 → 主输送线输送 → 取件位(入料口)有件 → 机器人送件进加工中心 → 加工完成出料 → 机器人取出放回支线 → 输送到十字交汇 → 分拣器按来源分流 → 落入滑槽并计数。
-
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)。
-
控制链路
Factory IO 场景 ⇄ 驱动 ComDrvS7(Siemens S7-200/300/400)⇄ 以太网 192.168.21.113 ⇄ S7-200 CPU ⇄ 梯形图程序。PLC 每扫描一次就把 Q 区写回场景、把场景的传感器状态读进 V 区,因此程序里的逻辑能实时反映成画面里传送带的启停、分拣器的抬升与转向。

-
分步搭建
-
步骤 1:在 Factory IO 中搭建场景
-
新建场景,按「两个加工单元 + 主输送线 + 十字分拣」的布局摆放设备:两台加工中心背向布置,各自带围栏与机器人;传送带组成一条主线和两条支线。
-
在两条输送线的交汇处安装顶升滚轮分拣器,左右两侧各接一条滑槽,形成两个出料口。
-
检查每台设备的方向:分拣器的滚轮方向必须与滑槽方向一致,否则工件会被顶偏或卡住。
-
运行场景,先手动观察工件能否从供料端顺利走到分拣器,确认机械布置没有卡点再开始配通信。
-
步骤 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 步会专门处理。
-
步骤 3:导出标签并建立 STEP 7 符号表
-
在 Factory IO 的标签表里把每个标签改成中文名(入料口1、出料口1、传送带1…),便于后面写程序时一眼看懂。
-
用「导出」把标签表导出为 CSV,得到 Name / Type / Data Type / Address 四列。
-
在 STEP 7-Micro/WIN 的 Symbol Table 中逐条录入(或导入)符号。17 条布尔符号录完后,程序里就能直接写「传送带1」而不是 Q0.0。
|
Factory IO 导出的标签 CSV,含名称、类型、数据类型与地址 |
STEP 7 符号表中对应的 17 条符号 |
符号表的两个细节值得注意:输入全部是 V 区(驱动把传感器写进 V 存储区),输出全部是 Q 区。如果照搬真实硬件的 I0.0 / Q0.0 观念,把输入写成 I 区,程序会永远读不到信号。
-
步骤 4:设置通信参数并下载程序
在 COSAI 的端口设置里完成两件事:一是串口侧保持 PPI 协议、站地址 2、COM1、9600、9600,E,8,1;二是勾选 CP243-1 以太网模块,把 IP 改为 192.168.21.113,与 Factory IO 的主机地址严格对应。

参数确认后:编译并下载程序到 CPU → 把 CPU 打到 RUN → 回 Factory IO 点运行,观察画面是否随程序动作。第一次联调建议只放一个工件,确认信号链路通了再加量。
-
步骤 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、出料信号形成闭环,加工中心什么时候出料完全不受控。
-
步骤 6:补全后半段程序控制
-
扩充点数:让 8 个执行器拿到地址
-
驱动配置里把布尔输出计数由 15 改为 23,新增 Q1.7 与 Q2.0 ~ Q2.6 共 8 位,正好对上表 8 个执行器。
-
布尔输入计数由 9 改为 12,新增 V1.1(加工中心 1 舱门打开)、V1.2(加工中心 2 舱门打开)、V1.3(备用)。
-
回到标签表,把这 8 个执行器的地址逐一填成上表的新地址,再在 STEP 7 符号表里补上同名符号。
-
进 Factory IO 标签表,逐条取消强制,确认状态栏不再显示「强制」。
不用担心地址冲突:S7-200 里 Q1.0 指的是输出字节 1 的第 0 位,布尔输出占 QB0 ~ QB2,而双字计数器占 QB4 起与 QB8 起,两者不在同一字节,互不覆盖。
-
传送带运行逻辑
把原来的「置位即常转」改成按工况持续输出,并用停止位与堵料位做联锁:
|
传送带 |
运行条件 |
停止条件 |
|---|---|---|
|
传送带1 / 2 |
系统运行 且 两个取件位都无件 |
任一取件位有件(防堵料)、停止1 有效、仿真未运行 |
|
传送带11 / 21 |
系统运行 且 入料口1 有件 |
入料口1 无件 |
|
传送带12 / 22 |
系统运行 且 入料口2 有件 |
入料口2 无件 |
|
传送带3、2m 0 / 5 / 6 |
系统运行 |
系统停止 |
-
分拣判定与动作
十字交汇处分拣器要回答两个问题:这一件从哪个单元来、该往哪边去。本工程用出料口传感器做类型记忆:出料口1 检出工件即记为「1 号单元件 → 左滑槽」,出料口2 检出即记为「2 号单元件 → 右滑槽」,记忆位保持到本次分拣动作完成后清除。
-
记忆:出料口1 上升沿 → 置位 M0.1;出料口2 上升沿 → 置位 M0.2。
-
顶升:M0.1 或 M0.2 有效 → 置位 Q2.2(分拣器顶升)。
-
分流:M0.1 → Q2.3(向左);M0.2 → Q2.4(向右)。两个方向互斥,避免同时给。
-
复位:用 T41(100 ms 时基、PT=50,即 5 s)覆盖工件从顶升到离开滑槽的时间,到时复位 Q2.2 ~ Q2.4 与 M0.1 / M0.2,等待下一件。
如果场景里在分拣器入口另有光电传感器,把它接到一个空闲输入(例如 V1.3),把「出料口上升沿」换成「分拣器光电上升沿」触发会更严谨——那是更标准的做法,本工程现有标签里没有这一位,所以用出料口 + 定时保持来等效。
-
加工中心握手与计数回传
-
启动:取件位由有件变无件(件已被机器人取走)且加工中心舱门已开、不在忙 → 给 开始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,场景上的计数器就会实时跳动。
-
完整程序(可直接照此录入)
下面是补全后的 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。
-
步骤 7:联调与验证
-
先取消全部强制:标签表里 8 条执行器逐个取消,确认状态栏干净。此时若程序未下载,画面会静止——这是正常的,说明强制已不再掩盖逻辑。
-
编译下载,CPU 打到 RUN,Factory IO 点运行。观察第一件工件:主输送线是否转、到位后是否停、机器人是否取件、加工中心是否启动。
-
用状态表(Status Chart)在线监视 V0.0 ~ V1.2 与 Q0.0 ~ Q2.6,逐位对照画面动作,哪一位不动就去查对应网络。
-
放行多件,确认分拣方向不串:1 号单元的件进左滑槽、2 号单元进右滑槽,QD4 / QD8 数值同步增长。
-
人为制造故障(点击加工中心故障位),确认复位信号输出、故障消失后自动恢复。
验证合格的三个判据:取消强制后画面仍能连续运行;两件工件同向时不会卡在交汇处;两个计数器的总和等于实际落入滑槽的件数。
-
常见问题排查
|
现象 |
原因与处理 |
|---|---|
|
画面全静止,状态页显示已连接 |
布尔输出点数与标签地址不匹配,或程序未在 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,网卡选实际连接的那块 |
-
写在最后
这个项目真正要练的不是把画面点动起来,而是建立「传感器 → 判断 → 执行器」的闭环意识:先算清楚场景里有多少输入输出、地址够不够,再谈逻辑;能用持续输出表达的状态,就不要用置位锁死;每一个置位都要想清楚它的复位条件。把这三点做扎实,强制自然就不需要了。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐








所有评论(0)