基于汇川H5U与FactoryIO的三物料分拣SFC编程与仿真联调实战 1. 先搞清楚这个“三物料分拣系统”到底要解决什么问题如果你正在找一套能直接用在汇川H5U PLC上、并且能和FactoryIO仿真软件联动的物料分拣程序逻辑那这篇文章就是为你准备的。这个项目的核心不是讲怎么画梯形图也不是泛泛地讲PLC编程而是把一个具体的、带视觉传感器的三物料分拣场景从逻辑设计到仿真联调用顺序功能图SFC的编程思想完整地跑通。很多人学PLC卡在从“看懂指令”到“做出一个能稳定运行的系统”这一步。这个“三物料分拣”就是一个绝佳的练手项目。它包含了工业控制里几个非常典型的需求物料识别视觉传感器、顺序动作控制传送、分拣、设备间通讯PLC与仿真软件、以及故障处理逻辑。我之所以说这个逻辑模板好用是因为它把顺序功能图的应用落到了实处程序结构清晰调试起来有章可循稍作修改就能套用到类似的流水线分拣、装配站等场景。所以这篇文章的重点是拆解这个系统的核心编程逻辑框架。我会先带你理清控制需求然后重点讲如何用顺序功能图来构建程序主干最后再讲如何与FactoryIO进行联机通讯和调试。整个过程我会把那些容易忽略的细节比如状态切换的条件、通讯数据的处理、仿真时的信号对接都讲清楚。2. 系统需求与环境准备别急着写程序先把“战场”画好在动手写任何一行代码之前必须把系统的控制对象和运行环境定义清楚。对于这个三物料分拣系统我们可以把它拆解成以下几个部分2.1 控制对象与工艺流程定义假设我们有一条传送带前端有一个视觉传感器比如颜色传感器或形状识别传感器末端有三个对应的分拣气缸或推杆分别将A、B、C三种物料推入不同的料槽。基本工艺流程如下系统启动后传送带运行。物料随传送带移动到视觉检测工位传感器进行识别并将结果物料类型A/B/C发送给PLC。PLC根据接收到的类型控制传送带继续运行直到物料到达对应的分拣工位。对应的分拣气缸动作将物料推出传送带。气缸缩回等待下一个循环。需要明确的I/O点以典型情况为例输入X点X0启动按钮X1停止按钮X2急停按钮X3视觉传感器就绪/触发信号X4视觉识别结果A可用高低电平或编码表示X5视觉识别结果BX6视觉识别结果CX7物料到达分拣A位传感器X10物料到达分拣B位传感器X11物料到达分拣C位传感器X12分拣A气缸缩回到位X13分拣B气缸缩回到位X14分拣C气缸缩回到位输出Y点Y0传送带电机运行Y1分拣A气缸推出Y2分拣B气缸推出Y3分拣C气缸推出Y4报警指示灯注意这里的I/O分配是示例实际项目必须根据你的硬件接线图和FactoryIO中的仿真模型信号来一一对应。这是后续所有工作的基础绝对不能错。2.2 软件环境与工具准备汇川H5U编程软件AutoShop这是编程的核心。确保你从汇川官网下载了正确版本。编程时我们主要会用到**梯形图LD和顺序功能图SFC**两种语言。SFC用于构建主流程框架LD则用于编写每个步骤内的具体逻辑和子功能。FactoryIO仿真软件用于搭建虚拟的3D分拣场景。你需要创建一个包含传送带、传感器、推杆气缸的场景并将这些虚拟设备的输入输出信号与AutoShop软件中定义的PLC软元件如X0, Y1等建立映射关系。这步是联机调试的关键。通讯设置确保你的电脑、AutoShop软件和FactoryIO软件能通过虚拟或真实的网络连接起来。通常FactoryIO作为Modbus TCP服务器或OPC UA服务器AutoShop作为客户端去连接。你需要知道FactoryIO场景的IP地址和端口号。我的建议是先分别在两个软件里把“静态”的部分做好。在AutoShop里把I/O表、变量定义好在FactoryIO里把场景搭建好给每个设备命名。最后再来配置通讯映射这样思路最清晰不容易乱。3. 核心编程逻辑用顺序功能图SFC搭建程序骨架这是整个项目的精髓。用传统的纯梯形图写这种多步顺序流程很容易写成“面条式”程序逻辑交叉难以维护和调试。而顺序功能图SFC天生适合描述这种“步-步”转换的过程。3.1 理解SFC的核心元素在汇川AutoShop软件中SFC主要由以下几种元素构成初始步Initial Step程序的起点通常是一个双线框系统上电或满足某个条件后进入。普通步Step代表一个稳定的工作状态。在每一步里可以执行一些动作如置位某个输出。转换Transition连接两个步的短横线旁边标注转换条件。只有条件为真时才能从当前步进入下一步。跳转Jump从一个步直接跳转到另一个步非顺序。选择分支与并行分支用于处理多路径流程。3.2 构建三物料分拣的SFC主流程下面我们为这个系统设计一个SFC流程。这个模板具有很强的通用性。[初始步 S0] - (转换条件启动按钮X0按下 无急停报警) | V [步 S1传送带运行] - (动作Y0ON传送带运行) | V [转换条件 T1视觉传感器就绪 X3ON] | V [步 S2等待视觉识别] - (动作保持Y0ON等待视觉数据) | V [转换条件 T2收到视觉识别结果 (X4/X5/X6任一为ON)] | V /---[选择分支]---\ / \ V V V (结果A) (结果B) (结果C) | | | [步 S3A] [步 S3B] [步 S3C] (等待到达A位) (等待到达B位) (等待到达C位) | | | [转换 T3A] [转换 T3B] [转换 T3C] (X7ON) (X10ON) (X11ON) | | | [步 S4A] [步 S4B] [步 S4C] (执行A分拣) (执行B分拣) (执行C分拣) (Y1ON, 启动定时器) (Y2ON, 启动定时器) (Y3ON, 启动定时器) | | | [转换 T4A] [转换 T4B] [转换 T4C] (定时器到 X12ON) (定时器到 X13ON) (定时器到 X14ON) | | | \-------------------[合并]----------------/ | V [跳转回到步 S1]对这个流程的几点关键解释步与动作分离在S2“等待视觉识别”这一步我们只做“等待”这件事不处理具体的识别结果判断。判断逻辑写在转换条件T2里。这样结构更清晰。选择分支的应用在T2转换之后我们根据视觉结果A/B/C进入了三个不同的分支。这是SFC处理多条件路径的标准做法。三个分支最终在分拣动作完成后通过“合并”汇流到同一点再跳回循环起点。动作的编写在每一步如S4A里我们用梯形图编写具体的动作。例如在S4A步的梯形图区域可以写|--[S4A步激活]--(SET Y1)--| //分拣A气缸推出 |--[S4A步激活]--(T0 K20)--| //启动一个2秒的定时器T0同时要记得在步S4A的转移条件T4A里写上T0ON AND X12ON定时器到且气缸缩回到位。这样当动作完成且传感器反馈到位后流程才会向下走。急停与故障处理急停X2和各类故障信号如气缸动作超时应该作为全局复位或跳转条件。我通常的做法是在SFC程序之外用一个独立的梯形图程序段来监控这些报警信号。一旦触发立即将一个“系统故障”标志位置位。然后在SFC的每一个转换条件里都加入“AND 系统故障标志OFF”的逻辑。这样任何一步发生故障整个流程都会停止在当前步直到故障复位。3.3 视觉传感器信号的程序处理视觉传感器通常不会直接给出X4/X5/X6三个开关量。更常见的做法是它通过通讯如RS485/Modbus发送一个数据例如1代表A2代表B3代表C给PLC。这时我们的程序需要调整通讯程序段在梯形图中编写Modbus RTU或TCP的通讯指令定期从视觉传感器读取数据存入一个数据寄存器例如D100。数据处理程序段对D100的值进行判断。|--[MOV K1 D101]--| //假设D1001时代表物料A |--[CMP D100 K1]--| |--[ M10]-------| //如果D100等于1则M10置ON |--[CMP D100 K2]--| |--[ M11]-------| //如果D100等于2则M11置ON |--[CMP D100 K3]--| |--[ M12]-------| //如果D100等于3则M12置ON修改SFC转换条件将原来转换条件T2X4 OR X5 OR X6改为M10 OR M11 OR M12。同时将选择分支的条件改为判断M10、M11、M12。这里有个关键点视觉识别结果信号需要锁存。因为物料经过传感器只是一瞬间PLC必须把这个结果记住直到分拣完成。我们可以用SFC的步状态作为锁存条件。例如在S2步激活时如果M10为ON则置位一个“当前物料为A”的标志位M100并在分拣完成后的合并步将其复位。4. FactoryIO联机调试从虚拟到“真实”的关键一步程序在PLC里编译通过只是第一步能不能真正控制设备必须通过联调验证。FactoryIO在这里扮演了“虚拟设备”的角色它能极其真实地反映程序逻辑的漏洞。4.1 在FactoryIO中搭建场景创建场景新建一个场景从库中拖入传送带Conveyor、光电传感器Photoeye用作位置检测、推杆Cylinder用作分拣气缸、光源等模型。配置设备属性给传送带设置速度给传感器设置检测距离给推杆设置推出/缩回时间。这些参数尽量贴近你预设的实物参数。定义I/O信号这是最核心的映射环节。在FactoryIO的“驱动”Driver或“信号”Signals设置中为你场景中的每一个输入输出设备定义一个变量名并指定其类型Digital Input/Output。例如将“启动按钮”映射为一个DI_Start。将“传送带电机”映射为一个DO_Conveyor。将“A分拣气缸推出”映射为DO_CylinderA_Out。将“A位物料检测传感器”映射为DI_SensorA_Pos。4.2 建立通讯连接以Modbus TCP为例在FactoryIO中设置服务器选择驱动类型为“Modbus Server (TCP)”。设置IP地址通常是本机127.0.0.1和端口默认502。将上一步定义的信号DI_Start,DO_Conveyor等映射到Modbus的线圈Coil或寄存器Register地址上。例如DO_Conveyor映射到 Coil 地址 0。在汇川AutoShop中设置客户端在“工具”或“通讯设置”中添加一个“Modbus TCP”设备。填写服务器IP即FactoryIO所在电脑的IP和端口。建立变量链接。这是第二个核心映射点。你需要把PLC程序里的软元件如Y0和FactoryIO Modbus服务器上的地址如Coil 0关联起来。例如PLC的Y0(传送带) -- ModbusCoil 0(对应FactoryIO的DO_Conveyor)。PLC的X0(启动按钮) -- ModbusCoil 100(对应FactoryIO的DI_Start注意这里FactoryIO的DI在Modbus里也是以Coil形式提供给客户端的)。重要提醒很多人在这一步出错是因为没理解信号流向。PLC的输出Y是去控制FactoryIO的输出DO因为DO是仿真设备的动作信号PLC的输入X是去读取FactoryIO的输入DI因为DI是仿真设备的反馈信号。在Modbus映射时要确保地址对应关系正确。4.3 联机调试与问题排查连接建立后将程序下载到PLC或连接到PLC仿真器然后启动FactoryIO场景。调试顺序先测手动信号在FactoryIO里手动触发“启动按钮”观察PLC的输入点X0是否亮起。这是检验通讯链路是否畅通的第一步。再测自动流程让系统自动运行。在FactoryIO中放置一个物料块观察它是否触发传感器、视觉判断逻辑是否生效、传送带是否在正确位置停止、对应的推杆是否动作。使用监控表在AutoShop中打开监控表添加关键变量SFC的当前步如S1, S2, S3A、转换条件T1, T2、输出点Y0-Y3、以及用于锁存视觉结果的中间标志位M100-M102。通过观察这些变量的变化你可以清晰地看到程序是否按照设计的SFC流程在走。常见问题排查通讯失败检查IP、端口、PLC站号。关闭电脑防火墙或杀毒软件进行测试。信号无反应检查FactoryIO信号与Modbus地址的映射再检查AutoShop中变量链接的映射。务必双向核对。流程卡在某一步检查转换条件监控转换条件中的所有变量是否都已满足。例如流程卡在S2就去看T2条件M10 OR M11 OR M12是否为真。检查动作执行步S4A激活了但Y1没输出去S4A步的梯形图程序段里检查是不是输出条件写错了。检查FactoryIO反馈PLC发出了Y1信号但FactoryIO里的气缸没动检查FactoryIO中该气缸的DO_CylinderA_Out信号是否被激活以及气缸的机械属性如气压、推力设置是否合理。物料漏检或误检调整FactoryIO中视觉传感器或替代它的光电传感器颜色属性的检测区域、灵敏度。在PLC程序里可以考虑增加去抖动计时或多次采样取稳定的逻辑。5. 从模板到实战优化与扩展思路当你把这个基础模板跑通后就可以在此基础上进行优化让它更健壮、更实用。5.1 增加故障诊断与恢复超时监控在SFC的每一步里都可以启动一个监控定时器。如果该步激活时间过长例如等待物料到达超过10秒则触发报警跳转到故障处理步。气缸动作反馈监控除了“缩回到位”信号最好再增加“推出到位”信号。在推出动作后如果规定时间内没收到“推出到位”信号则报警。产量计数与数据记录在分拣完成的合并步之后增加计数器分别对A/B/C物料进行计数。这些数据可以存入数据寄存器甚至通过通讯上传到上位机SCADA或数据库。5.2 程序结构化优化将SFC与子程序结合可以把一些重复性的复杂逻辑写成子程序如气缸动作控制子程序、通讯处理子程序。在SFC的步中直接调用这些子程序使主流程更加简洁。使用功能块FB如果汇川H5U支持结构化文本ST或功能块图FBD可以为“气缸”、“传送带”等设备创建功能块封装其控制逻辑和故障状态在主程序中实例化调用。这是更工程化的做法。5.3 适应更复杂的场景多物料类型如果物料类型不止三种视觉结果可能是更多位的编码。这时选择分支可以改为使用“计算跳转”指令根据数据寄存器的值直接跳转到对应的步。并行处理如果一条传送带上有多个物料同时处理就需要用到SFC的并行分支。但这对PLC的扫描周期和逻辑设计挑战更大初期不建议尝试。与真实视觉系统集成将FactoryIO的虚拟传感器替换为真实的视觉控制器如基恩士、康耐视通讯。这时你需要仔细阅读视觉系统的通讯协议手册在PLC中编写更严谨的数据收发、校验和错误处理程序。最后也是最关键的建议不要满足于仅仅让这个系统在仿真里动起来。尝试去修改它比如增加一种物料类型或者改变分拣的顺序或者增加一个成品箱满报警后停机的功能。在修改和调试的过程中你会对顺序功能图的理解、对PLC程序结构的把握、以及对软硬件联调的认识产生质的飞跃。这个模板的价值就在于它提供了一个清晰、可靠、可扩展的起点让你能避开初期杂乱无章的陷阱直接聚焦于解决实际工程问题的核心逻辑。

相关新闻

最新新闻

构建多LLM Provider架构:实现大模型灵活切换与统一管理

构建多LLM Provider架构:实现大模型灵活切换与统一管理

1. 项目概述:一次架构思维的跃迁最近和几个做AI应用的朋友聊天,大家普遍有个痛点:业务代码里硬编码了某个大模型厂商的API调用,比如OpenAI的ChatCompletion。一开始觉得挺好,模型效果稳定,开发也快。但后来…

2026/8/8 9:08:52
CCF GESP Python 1级认证指南与核心知识点解析

CCF GESP Python 1级认证指南与核心知识点解析

1. CCF GESP Python 1级认证概述CCF GESP(Grade Examination of Software Programming)是由中国计算机学会推出的编程能力等级认证考试,旨在科学评估青少年及编程爱好者的软件编程能力。2025年6月的Python 1级认证是该系列考试的入门级别&…

2026/8/8 9:08:52
AI编程方法论:从工具使用到人机协同架构的实战指南

AI编程方法论:从工具使用到人机协同架构的实战指南

1. 项目概述:为什么我们需要一套AI编程方法论?如果你在2023年刚开始接触AI编程助手,比如GitHub Copilot,你可能会觉得它是个“魔法黑盒”——输入注释,它就能吐出代码,有时准得惊人,有时又错得离…

2026/8/8 9:08:52
Prompt Engineering实战指南:从核心原则到高级技巧,提升AI协作效率

Prompt Engineering实战指南:从核心原则到高级技巧,提升AI协作效率

1. 项目概述:从“会问”到“问对”的思维跃迁 在AI工具日益普及的今天,一个普遍的现象是:很多人兴冲冲地打开ChatGPT、Midjourney或者Claude,输入一个模糊的想法,然后对着AI返回的“不尽人意”甚至“莫名其妙”的结果感…

2026/8/8 9:08:52
江科大STM32入门:软件I2C驱动MPU6050(代码逐行解析)

江科大STM32入门:软件I2C驱动MPU6050(代码逐行解析)

🚀 我的STM32学习专栏:[点击直达 | 持续更新中] 📌 开发环境:Keil5 STM32F103C8T6最小系统板 ST-Link 📌 参考资料:江科大STM32入门教程、《STM32F10xxx参考手册》、MPU6050数据手册 📌 前置文…

2026/8/8 9:08:52
Unity渲染优化利器:MaterialPropertyBlock原理、应用与性能对比

Unity渲染优化利器:MaterialPropertyBlock原理、应用与性能对比

1. 项目概述:为什么我们需要MaterialPropertyBlock?在Unity开发中,尤其是涉及到大量、高频次渲染对象(如特效粒子、场景植被、UI元素)的项目里,性能瓶颈常常出现在渲染管线。很多开发者,特别是刚…

2026/8/8 9:03:52