news 2026/8/8 7:20:37

基于汇川H5U与FactoryIO的三物料分拣SFC编程与仿真实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于汇川H5U与FactoryIO的三物料分拣SFC编程与仿真实战

在工业自动化项目中,物料分拣是经典且高频的应用场景。很多工程师在初次接触汇川H5U PLC与FactoryIO仿真软件联调时,常会感到无从下手——如何将视觉传感器的信号转化为可靠的控制逻辑?如何构建一个稳定、易维护的程序框架?本文将分享一套基于顺序功能图(SFC)的“三物料分拣系统”核心编程逻辑模板。这套模板不仅清晰地拆解了分拣流程,更将视觉检测、气缸动作、传送带控制与联机通讯融为一体,形成了一套可复用的工程化解决方案。无论你是正在学习PLC编程的学生,还是需要快速搭建分拣系统的工程师,这套逻辑都能让你事半功倍。

1. 系统概述与核心组件介绍

在深入代码之前,我们首先要理解整个系统的构成和工作原理。一个典型的三物料分拣系统,其核心目标是:通过视觉传感器识别出传送带上三种不同颜色(例如红、绿、蓝)或形状的物料,然后控制对应的气动推杆或机械臂,将物料推入指定的分拣槽中。

1.1 系统核心组件与功能

整个系统由硬件和软件两部分协同工作:

  • 控制核心 - 汇川H5U PLC:作为系统的大脑,负责接收所有输入信号(如传感器信号),执行我们编写的控制逻辑,并输出控制信号驱动执行机构(如气缸电磁阀、电机驱动器)。
  • 仿真与可视化 - FactoryIO:这是一个强大的3D工业场景仿真软件。我们可以在电脑上搭建出包含传送带、传感器、气缸、物料模型的虚拟分拣线,并通过驱动与真实的汇川H5U PLC进行联机通讯。这极大地降低了学习成本和项目前期的调试风险。
  • “眼睛” - 视觉传感器:在实际系统中,可能是颜色传感器、光电传感器或工业相机。在仿真中,FactoryIO会模拟其信号。它的作用是检测物料是否到位以及识别物料类型(通常用不同的数字信号表示,如1、2、3)。
  • “手臂” - 执行机构:主要是三个分拣气缸(对应三种物料)和传送带电机。PLC通过输出点控制气缸的伸出/缩回和电机的启停。
  • 通讯桥梁:实现FactoryIO(运行在PC上)与汇川H5U PLC之间数据交换的通道,通常采用Modbus TCP/IP汇川自由协议over Ethernet。

1.2 为什么选择顺序功能图(SFC)?

对于分拣这种具有明显顺序步骤、多种状态转换的流程控制,顺序功能图(Sequential Function Chart, SFC)是最直观、最合适的编程语言。它源于佩特里网,将复杂的控制流程分解为一系列的“步”(Step)和“转换”(Transition)。

  • 步(Step):代表系统的一个稳定状态,例如“等待物料”、“气缸A伸出”。在步中,可以执行具体的动作。
  • 转换(Transition):从一个步切换到下一个步的条件,例如“物料到位且为红色”。
  • 优势:结构清晰,逻辑与工艺流程图一一对应,易于设计、调试和维护。当需要增加一种物料或改变分拣顺序时,只需在SFC框架内增减步和转换条件即可,程序主体结构不变。

2. 环境准备与软件配置

在开始编程前,请确保你的开发环境已就绪。以下是基于当前常见版本的配置说明。

2.1 所需软件及版本

  • 汇川PLC编程软件(AutoShop):建议使用V2.8或以上版本。这是汇川H系列PLC的官方编程软件,支持梯形图(LD)、指令表(IL)、顺序功能图(SFC)等多种编程语言。
  • FactoryIO仿真软件:建议使用2.5.10或以上版本。请从官网或正规渠道获取并完成激活。
  • 操作系统:Windows 10 或 Windows 11 专业版/企业版。

2.2 软件安装与基础设置

  1. 安装AutoShop:按照向导安装汇川AutoShop软件。安装完成后,连接你的汇川H5U PLC硬件(如果进行实物调试),或使用软件自带的模拟器功能进行离线测试。
  2. 安装FactoryIO:安装FactoryIO,并确保其已被正确激活。首次运行时,可以选择界面语言。
  3. 关键配置 - 驱动设置:这是联机通讯成功的关键。
    • 打开FactoryIO,进入File -> Drivers
    • 在驱动列表中选择Inovance(汇川)。注意,不同版本的FactoryIO驱动名称可能略有差异,也可能是“H3U”或“Modbus TCP”。
    • 配置驱动参数。如果选择Modbus TCP,通常需要设置PLC的IP地址(例如192.168.1.10)、端口号(默认为502)、以及Modbus从站地址(默认为1)。这些设置需要与PLC内部的配置或AutoShop中的设置保持一致。

2.3 建立通讯连接

  1. 在AutoShop中设置PLC:如果是真实PLC,确保其IP地址与FactoryIO驱动中设置的一致。如果是模拟器,模拟器本身会虚拟一个网络适配器,需要配置模拟PLC的IP。
  2. 在FactoryIO中加载场景:从FactoryIO的场景库中,选择一个包含传送带、传感器和气缸的场景,或自己搭建一个简单的分拣线场景。将场景中的输入(如传感器I0.0)、输出(如气缸Q0.0)与驱动中定义的地址映射好。
  3. 连接测试:在AutoShop中编写一个简单的点动程序,控制一个输出点。下载到PLC(或模拟PLC)并运行。然后在FactoryIO场景中观察对应的执行机构(如灯、气缸)是否有反应。反之,在FactoryIO中手动触发一个传感器,观察AutoShop监控表中对应的输入点是否变化。双向测试成功,标志着通讯链路已打通。

3. 顺序功能图(SFC)核心逻辑拆解

本节将详细拆解三物料分拣系统的SFC程序结构。我们将程序分为几个关键的“步”和“转换”。

3.1 SFC程序基本结构

一个完整的SFC程序始于一个初始步(通常用双线框表示),结束于一个循环返回或结束。我们这里采用循环结构,使系统能连续工作。

[初始步 S0] (系统初始化) | v (转换条件:启动按钮 & 无急停) [步 S1] (传送带运行,等待物料) | v (转换条件:视觉传感器检测到物料) [选择分支] --(物料类型=1)--> [步 S2] (执行分拣动作1) | --(物料类型=2)--> [步 S3] (执行分拣动作2) | --(物料类型=3)--> [步 S4] (执行分拣动作3) | --(其他/超时)--> [步 S5] (异常处理) | v (所有分拣动作步完成后,汇合到同一转换条件:动作完成) [步 S6] (复位动作,延时) | v (转换条件:延时到) (跳转回步 S1,等待下一个物料)
  • 选择分支:根据视觉传感器的不同信号(1,2,3),选择不同的分拣路径。这是系统的核心决策点。
  • 并行分支:如果需要多个动作同时执行(例如,分拣气缸伸出时,传送带暂停),可以使用并行分支。本例为简化,采用顺序执行。

3.2 I/O地址规划与变量定义

在编写程序前,规划好软元件(内部继电器、寄存器)和物理I/O的映射至关重要。以下是一个示例规划表:

元件类型地址/名称说明
输入 (X)X0系统启动按钮 (FactoryIO模拟)
X1系统停止/急停按钮
X2视觉传感器(物料到位)
D0 (数据寄存器)视觉传感器类型值(1:红, 2:绿, 3:蓝)
输出 (Y)Y0传送带电机运行
Y1红色物料分拣气缸
Y2绿色物料分拣气缸
Y3蓝色物料分拣气缸
Y10蜂鸣器(异常报警)
内部辅助 (M)M0系统运行总标志
M100-M120SFC各步的激活标志(AutoShop中SFC步通常自动关联状态位)
定时器 (T)T0分拣动作保持时间(如气缸伸出时间)
T1动作复位后延时,确保物料落下

注意:在FactoryIO中,你需要将场景中的传感器和执行器与上述X/Y地址进行绑定。D0寄存器值的写入,可以通过FactoryIO的“标签”功能或脚本模拟视觉传感器输出。

4. 完整SFC程序实现与代码详解

现在,我们在汇川AutoShop软件中,将上述逻辑转化为实际的SFC程序。

4.1 创建新工程与SFC程序块

  1. 打开AutoShop,新建一个工程,设备类型选择对应的H5U型号。
  2. 在程序组织单元(POU)中,新建一个程序块,编程语言选择“SFC”

4.2 编写SFC主体逻辑

以下是SFC程序的详细步骤描述及关键代码片段。在AutoShop的SFC编辑器中,这些步骤通过图形化方式连接。

// 以下为SFC图形化编程的文本化描述,实际在AutoShop中为图形界面 // 步与动作使用梯形图(LD)编写 // ---- 初始步 ---- 步 S0: “INIT” 动作: (无,或执行一次初始化复位) 转换条件 TR0: M8002 (PLC上电首次扫描ON) 或 停止后复位完成 | v // ---- 主循环开始 ---- 步 S1: “RUN_CONVEYOR” 动作: LD M0 // 系统运行标志 OUT Y0 // 启动传送带 转换条件 TR1: X0 AND M0 // 启动按钮按下且系统运行 | v // ---- 检测等待步 ---- 步 S2: “WAIT_FOR_OBJECT” 动作: (保持传送带运行 Y0) 转换条件 TR2: X2 // 视觉传感器检测到物料到位 | v // ***** 选择分支开始 ***** // 分支条件:根据D0的值跳转 | +--[D0 = K1]--> 步 S10: “SORT_RED” | 动作: SET Y1 // 红色气缸伸出 | OUT T0 K50 // 定时0.5秒(根据实际调整) | 转换条件: T0 // 定时时间到 | | | v | +--[D0 = K2]--> 步 S20: “SORT_GREEN” | 动作: SET Y2 // 绿色气缸伸出 | OUT T0 K50 | 转换条件: T0 | | | v | +--[D0 = K3]--> 步 S30: “SORT_BLUE” | 动作: SET Y3 // 蓝色气缸伸出 | OUT T0 K50 | 转换条件: T0 | | | v | +--[ELSE]--> 步 S40: “ERROR_HANDLE” 动作: SET Y10 // 报警蜂鸣器 OUT T2 K100 // 报警延时 转换条件: T2 | v (报警后也可选择回到等待步或停机) // ***** 选择分支汇合 ***** // 所有正常分拣步(S10,S20,S30)完成后,转换条件均为T0,汇合到同一点 // 异常步S40单独处理 | v (正常路径汇合点) 步 S50: “RESET_ACTION” 动作: RST Y1 RST Y2 RST Y3 // 复位所有气缸 OUT T1 K30 // 短暂延时,确保物料滑入槽内 转换条件 TR3: T1 // 复位延时到 | v (使用“JUMP”指令跳转回步 S1: “RUN_CONVEYOR”) // 形成循环

关键点解释

  1. 系统运行标志M0:由启动/停止按钮控制。这是所有自动流程的前提,便于紧急停止。
  2. 视觉值寄存器D0:在真实系统中,由视觉控制器通过通讯写入。在FactoryIO仿真中,你需要通过其“标签”或“脚本”功能,在检测到物料时,根据物料类型向PLC的D0寄存器写入1、2或3。这模拟了视觉传感器的通讯过程。
  3. 定时器T0:用于控制气缸伸出保持时间。时间常数K50表示50*10ms=0.5秒,需根据实际气缸速度调整。
  4. 选择分支的实现:在AutoShop的SFC中,可以直接在转换条件上编写判断语句,如D0=K1。软件会自动处理分支与汇合。
  5. 异常处理:当D0的值不是1、2、3时,进入异常处理步。这是一个非常重要的工程实践,能防止因信号干扰或错误导致的程序卡死。

4.3 辅助梯形图程序

SFC主要描述流程,一些基础逻辑和故障处理更适合用梯形图写在另一个程序块中。

// 文件:主程序或子程序(梯形图) // 1. 系统启停控制 LD X0 // 启动按钮 OR M0 ANI X1 // 停止按钮(常闭点,按下断开) OUT M0 // 系统运行总标志 // 2. 视觉传感器信号处理(示例:在FactoryIO中用脚本写D0,此处可做滤波) // 可以添加一个上升沿触发,确保每次只处理一个物料 LD X2 PLS M100 // M100产生一个扫描周期的脉冲 LD M100 MOV D0 D100 // 将视觉类型值存入缓存寄存器D100 // 这里可以添加数据有效性判断,例如 D100必须在1~3之间 // 3. 急停处理(最高优先级) LD X1 // 急停按钮按下 RST Y0 // 立即停止传送带 RST Y1 // 立即复位所有气缸 RST Y2 RST Y3 RST M0 // 清除运行标志 // 同时,可以强制将SFC跳转回初始步S0(具体指令取决于PLC型号和软件)

5. FactoryIO场景搭建与联机调试

程序编写完成后,需要在FactoryIO中搭建测试环境进行联调。

5.1 搭建分拣场景

  1. 在FactoryIO中新建场景。
  2. 从左侧元件库拖放:一条Conveyor(传送带)、三个Cylinder(气缸,作为推杆)、三个Photoeye(光电传感器,一个用于物料检测,两个用于限位?实际上视觉识别通常用一个传感器配合软件)。为了模拟视觉,我们用一个传感器检测到位,物料类型则通过“标签”来区分。
  3. 在传送带起点放置一个Emitter(发射器)来生成物料。在发射器的属性中,可以创建不同的物料类型(如Red Box, Green Box, Blue Box)。
  4. 将传送带电机、传感器、气缸与之前规划的I/O地址进行绑定(如Conveyor Motor -> Y0, Sensor -> X2, Cylinder1 -> Y1...)。

5.2 模拟视觉传感器信号

这是仿真的关键。我们需要让FactoryIO在检测到物料时,不仅触发X2,还要向PLC的D0寄存器写入对应的值。

  1. 在FactoryIO中,进入View -> Script Editor
  2. 编写Lua脚本,监听物料通过的事件。以下是一个简化的示例思路:
-- 假设有一个名为‘ColorSensor’的传感器 function onSensorActivated(sensor) if sensor.name == “ColorSensor” then local object = sensor.detectedObject local tagValue = 0 if object.type == “RedBox” then tagValue = 1 elseif object.type == “GreenBox” then tagValue = 2 elseif object.type == “BlueBox” then tagValue = 3 end -- 将值写入PLC的D0寄存器。具体函数取决于驱动,可能是 setTag(‘D0’, tagValue) driver.writeRegister(‘D0’, tagValue) -- 示例写法,实际函数名需查驱动手册 end end -- 注册事件监听器 scene.onSensorActivated = onSensorActivated

注意:FactoryIO不同版本和驱动的脚本API可能不同,请务必查阅其官方文档。核心思想是:用脚本逻辑模拟视觉控制器的通讯功能

5.3 联机调试步骤

  1. 离线测试:先在AutoShop中利用软件模拟器运行SFC程序,使用“软元件测试”功能强制改变X2和D0的值,观察SFC步的切换和Y输出点的变化。确保逻辑正确。
  2. 连接FactoryIO:关闭模拟器,将AutoShop与真实PLC或设置为与FactoryIO通讯的IP连接。将程序下载到PLC。
  3. 在线监控:在AutoShop中在线监控程序。在FactoryIO中启动场景,并开始发射物料。
  4. 观察与排错
    • 观察物料到达传感器时,PLC的X2是否亮起,D0寄存器值是否变为1、2、3。
    • 观察对应的步(如S10)是否被激活,对应的输出点(如Y1)是否输出。
    • 观察FactoryIO场景中的气缸是否动作,物料是否被正确推入槽中。
    • 如果物料堆积或动作不协调,调整定时器T0和T1的值。

6. 常见问题与排查思路

在调试过程中,你可能会遇到以下典型问题:

问题现象可能原因排查思路与解决方案
FactoryIO与PLC无法通讯1. IP地址设置错误。
2. 端口号不正确。
3. 防火墙阻止。
4. PLC未处于RUN模式。
1. 使用ping命令检查网络连通性。
2. 核对AutoShop中PLC的IP与FactoryIO驱动中设置的IP是否一致。
3. 暂时关闭防火墙测试。
4. 确认PLC已运行,且程序已下载。
传感器信号无反应1. I/O地址映射错误。
2. FactoryIO中传感器未正确关联到驱动地址。
3. PLC输入点滤波时间过长。
1. 在AutoShop监控表中,强制对应X点,看FactoryIO中传感器是否高亮。
2. 双击FactoryIO中传感器,检查其“Address”属性是否正确。
3. 检查PLC系统参数中的输入滤波时间,适当调小。
气缸不动作1. 输出地址映射错误。
2. SFC程序未执行到对应步。
3. 气路/电路问题(实物)。
4. FactoryIO中气缸未关联输出地址。
1. 在AutoShop中监控Y点,当SFC步激活时,Y点是否输出。
2. 检查SFC的选择分支条件(D0值)是否满足。
3. 在FactoryIO中检查气缸的“Actuator”属性地址。
视觉类型值D0不正确1. FactoryIO脚本未正确写入。
2. 通讯写入失败。
3. 物料类型判断逻辑有误。
1. 在FactoryIO脚本中添加调试打印,确认tagValue计算正确。
2. 检查驱动写寄存器的函数调用格式和地址格式。
3. 在AutoShop中直接监控D0寄存器,观察其值变化。
SFC程序不循环,只执行一次1. 最后一步没有跳转回初始步或等待步。
2. 转换条件始终不满足,导致流程卡死。
1. 检查SFC最后一个步之后是否有“JUMP”指令跳转到循环起点。
2. 检查复位步S50的转换条件T1是否正常触发。
多个物料同时处理导致混乱1. 没有对视觉信号进行“一次性”处理。
2. 传送带速度过快,SFC流程来不及处理。
1. 在梯形图中使用上升沿(PLS)指令,确保每个物料只触发一次流程。
2. 在等待物料步(S2)增加“互锁”,只有处于该步时才允许检测新物料。也可以在机械上增加间距。

7. 工程优化与最佳实践

一个能稳定运行的程序是基础,一个易于维护和扩展的程序才是优秀的工程代码。

7.1 程序结构优化

  1. 模块化设计:将SFC主流程、气缸控制子程序、报警处理子程序、通讯处理子程序分开编写。在汇川AutoShop中,可以使用“子程序”或“功能块”来实现。
  2. 使用功能块封装气缸动作:将气缸的伸出、缩回、动作延时及到位检测(如果有磁性开关)封装成一个可重复调用的功能块。这样主SFC程序会更加简洁。
  3. 状态与报警分离:建立独立的报警处理程序块。将设备故障(如气缸超时未到位)、流程异常(如未知物料类型)等统一管理,并输出到报警灯或HMI。

7.2 增强系统鲁棒性

  1. 信号去抖与滤波:对关键的传感器信号(如X2)在梯形图中进行软件滤波,防止抖动误触发。
  2. 超时监控:在SFC的每一步,尤其是执行动作的步(如S10),添加步激活时间监控。如果该步激活时间超过合理范围(例如气缸伸出本应1秒完成,但3秒后仍未完成),则触发报警并跳转到安全状态。这可以防止因气缸卡死导致的程序死等。
  3. 模式管理:增加手动/自动模式切换。在手动模式下,可以通过HMI或按钮单独点动每个气缸和传送带,便于设备调试和维护。
  4. 数据追溯:如果需要,可以将每次分拣的物料类型、时间等信息存入PLC的数据寄存器或通过通讯上传到上位机,便于生产统计。

7.3 通讯与仿真注意事项

  1. Modbus地址映射:如果使用Modbus TCP通讯,务必清楚汇川H5U PLC的Modbus地址与内部软元件(如D、M)的映射关系。例如,D0寄存器可能对应Modbus Holding Register的40001地址。FactoryIO驱动中的地址设置需与此一致。
  2. 仿真不是实物:FactoryIO仿真忽略了物理世界的惯性、延迟和随机故障。在仿真通过后,切换到实物调试时,务必从低速、单步开始,逐步提高速度,并仔细调整传感器位置、气缸节流阀和各项延时参数。
  3. 文档与注释:在程序中对每一个SFC步、重要的转换条件、功能块进行详细的注释。这对自己后期维护和团队交接至关重要。

通过本文的详解,你应该已经掌握了一套从零构建汇川H5U PLC与FactoryIO联合仿真三物料分拣系统的完整方法。这套基于顺序功能图的核心逻辑模板,清晰地分离了流程控制与设备动作,结构稳定且易于扩展。你可以在此基础上,增加物料类型、引入机器人抓取、添加上位机监控,从而构建更复杂的自动化系统。记住,好的程序不仅是能跑起来,更是要跑得稳、看得懂、改得动。建议你将此模板保存,在未来的项目中灵活应用和演化。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/8 7:18:57

2023全国大学生电子设计竞赛清单深度解码与模块化备赛策略

1. 项目概述:从清单到策略的深度解读每年全国大学生电子设计竞赛的仪器和主要元器件清单发布,对于参赛队伍而言,其意义远不止一份简单的采购目录。它更像是一份来自组委会的、经过加密的“战略预告片”。2023年的这份清单,我拿到手…

作者头像 李华
网站建设 2026/8/8 7:16:56

【信息科学与工程学】【通信工程】第八十七篇 通信网络解决方案中的学科知识01

通信网络(含软件/通信设备、无线/有线硬件/电路、组网、网络拓扑)所依赖的数学 + 物理 + 信息论 + 密码学 + 集合论/离散数学学科地图 一、基础数学(编号 1–9:线性代数、概率、随机过程、矩阵分析等) 编号 学科(课程) 核心知识点 在通信网络中的作用 代表教材/资料…

作者头像 李华
网站建设 2026/8/8 7:14:56

计算机毕业设计之非遗智慧平台商品展示管理系统的设计与实现

快速发展的社会中,人们的生活水平都在提高,生活节奏也在逐渐加快。为了节省时间和提高工作效率,越来越多的人选择利用互联网进行线上打理各种事务,然后线上管理系统也就相继涌现。与此同时,人们开始接受方便的生活方式…

作者头像 李华
网站建设 2026/8/8 7:14:10

元夜十二谈新手怎么玩 元夜十二谈新手开局攻略

关于元夜十二谈新手怎么玩,很多新手容易搞不清重点——是该先推进主线剧情还是先跟角色互动、轮盘系统怎么用、委托该怎么选。其实元夜十二谈新手怎么玩这件事没那么复杂,核心是把主线推进和角色培养的节奏把握好。主线推进元夜十二谈新手怎么玩的第一步…

作者头像 李华
网站建设 2026/8/8 7:12:20

AI测试Agent学会说谎了:它故意把3个P0标成通过,只为让迭代早点上线——这比任何Bug都可怕

关注 霍格沃兹软件测试开发 公众号,回复「资料」, 领取人工智能测试开发技术合集 当AI开始为了“完成任务”而伪造测试结果,质量体系的第一块多米诺骨牌就倒了 大家好,我是某互联网公司质量保障团队的技术负责人。 今天聊一个让我至今后背发凉…

作者头像 李华