虚实结合调试:基于汇川H5U与FactoryIO的PLC顺序控制实践
如果你正在学习或从事工业自动化,特别是PLC编程,那么“如何将编程逻辑与物理设备联动调试”这个问题,大概率会让你头疼。传统的调试方式要么依赖昂贵的真实设备,要么在纸上空想逻辑,一旦程序下载到PLC,发现气缸不动作、传感器没信号,排查起来费时费力。
今天要讨论的“汇川H5U PLC + FactoryIO + 视觉传感器”组合,正是为了解决这个痛点。它不是一个简单的教程,而是一套可复用的、高效的虚实结合调试方法论。核心在于,我们利用FactoryIO这个强大的3D仿真软件,在电脑上搭建一个虚拟的“三物料分拣系统”,模拟真实的传感器、气缸、传送带,然后通过真实的通讯协议(如Modbus TCP)与一台真实的汇川H5U PLC进行联机。你的PLC程序控制着虚拟工厂的运行,视觉传感器的信号也由软件模拟注入。
这篇文章要分享的,不仅仅是接线和配置,更是一个经过实战检验的核心编程逻辑模板。这个模板基于“顺序功能图(SFC)”设计,结构清晰,易于调试和维护,能够直接套用在分拣、装配、包装等多种顺序控制场景中。你会发现,掌握了这套方法,你的开发效率会从“写程序-接硬件-抓狂调试”的泥潭中,跃升到“逻辑设计-虚拟验证-实物微调”的流畅状态。
我们将从为什么需要虚实结合调试讲起,逐步拆解环境搭建、通讯配置、SFC编程模板的每个细节,并提供完整的程序段和FactoryIO场景设置示例。无论你是自动化专业的学生,还是希望提升调试效率的工程师,这篇文章都能为你提供一条清晰的实践路径。
1. 这篇文章真正要解决的问题:告别“盲调”,实现PLC程序的预验证与高效调试
在工业自动化项目开发中,编程与调试往往占据大量时间。传统的流程是:在办公室写好PLC梯形图或结构化文本 -> 前往现场,将程序下载到实体PLC -> 连接真实的传感器、执行器(气缸、电机等) -> 开始调试。这个过程存在几个典型痛点:
- 硬件依赖性强:没有硬件,程序无法运行测试。设备未到位或出现故障时,开发完全停滞。
- 调试风险高:直接操作真实设备,逻辑错误可能导致设备碰撞、产品损坏,甚至安全事故。
- 排查效率低:一个气缸不动作,可能是PLC程序问题、可能是接线问题、也可能是气缸本身故障。排查需要跨电气、机械、程序多个领域,定位困难。
- 逻辑验证不直观:特别是对于复杂的顺序控制流程,仅靠监控PLC内部变量,难以在脑中构建完整的设备联动画面。
本文提供的“汇川H5U + FactoryIO + 视觉传感器”方案,核心价值就是解决上述痛点。它实现了:
- 前置验证:在接触真实硬件前,完成程序核心逻辑的验证。
- 风险隔离:在虚拟环境中可随意测试各种异常情况,无任何物理风险。
- 高效排查:FactoryIO提供直观的3D动画,程序每一步对应的设备状态一目了然,问题定位速度极快。
- 流程可视化:顺序功能图(SFC)编程与仿真动画结合,让控制流程如同“活”了过来,非常适合理解和教学。
而其中的核心编程逻辑模板,是将这套方法论落地的关键。它不是一个零散的代码集合,而是一个结构化的框架,定义了如何组织程序、如何处理传感器信号、如何管理步与步之间的转换。掌握这个模板,你就能将任何顺序控制需求快速转化为稳定可靠的PLC程序。
2. 基础概念与核心原理
在深入实操之前,我们需要统一几个关键概念,这有助于理解整个系统的运行机制。
2.1 汇川H5U PLC
汇川H5U系列是一款小型一体化PLC,支持梯形图、指令表、顺序功能图等多种编程语言。它性价比高,指令丰富,通讯能力强(内置以太网口,支持Modbus TCP、TCP/IP等协议),非常适合作为学习、实训以及中小型自动化设备的主控制器。在本方案中,它是真实存在的“大脑”,执行我们编写的控制逻辑。
2.2 FactoryIO
FactoryIO是一款专业的工业自动化系统仿真软件。你可以把它理解为一个“虚拟工厂搭建平台”。它提供了丰富的3D工业元件库(传感器、气缸、传送带、机器人等),用户可以像搭积木一样构建生产线场景。更重要的是,它支持通过多种主流工业协议(如Modbus TCP、OPC UA、Siemens S7等)与外部真实的PLC(如汇川H5U)进行通讯。在FactoryIO中,你可以定义每个元件的I/O点,这些点会映射到PLC的输入输出地址上。当PLC程序运行时,虚拟场景中的设备会同步动作。
2.3 顺序功能图(SFC)
顺序功能图是IEC 61131-3标准定义的一种PLC编程语言,专门用于描述顺序控制过程。它将一个复杂的控制流程分解为一系列的“步”(Step)和“转换”(Transition)。
- 步(Step):代表控制系统中的一个稳定状态。在每一步中,可以执行某些动作(Action),如“启动传送带”、“伸出气缸”。
- 转换(Transition):连接两步之间的条件。只有当转换条件满足时(如“物料到达传感器”、“气缸伸出到位”),系统才会从当前步切换到下一步。
- 优点:逻辑清晰,易于设计和阅读,特别适合具有明显顺序性的工艺流程,如物料分拣、装配线、包装机等。
2.4 系统工作原理(虚实结合)
整个系统的工作原理可以概括为“虚实映射,协议通讯”:
- 虚拟场景构建:在FactoryIO中搭建“三物料分拣系统”的3D模型,并为其每个虚拟设备(如光电传感器、气缸、电机)分配I/O变量。
- PLC逻辑编程:在汇川AutoShop编程软件中,使用SFC语言编写分拣控制逻辑。程序中操作的I/O点地址,与FactoryIO中定义的变量地址一一对应。
- 通讯桥梁建立:配置汇川H5U PLC和运行FactoryIO的电脑处于同一局域网,并设置好Modbus TCP通讯参数。
- 联动运行:
- PLC程序中的输出点(如Y0控制气缸)状态改变,通过Modbus TCP协议发送给FactoryIO。
- FactoryIO收到信号,驱动对应的虚拟气缸动作。
- 虚拟场景中的传感器(如X0检测物料)状态改变,FactoryIO通过Modbus TCP协议将其写入PLC的输入点。
- PLC程序检测到输入点变化,触发SFC的转换条件,进入下一步。
- 视觉传感器模拟:在FactoryIO中,可以用一个特定的传感器或甚至通过脚本,来模拟视觉系统的识别结果(如识别出物料是A、B、C类),并将结果赋值给PLC的特定输入寄存器,从而触发不同的分拣路径。
通过这套机制,我们就在电脑屏幕上看到了一个完全受真实PLC程序控制的、动态运行的虚拟生产线。
3. 环境准备与前置条件
要成功运行本案例,你需要准备好以下软硬件环境。请务必确保版本兼容性。
3.1 硬件清单
| 设备/物品 | 规格/要求 | 作用 |
|---|---|---|
| 汇川H5U PLC | 具体型号如H5U-1614MTD等,带以太网口 | 执行控制程序 |
| 网线 | 标准RJ45网线 | 连接PLC与电脑 |
| 电脑 | Windows 10/11,性能足以运行3D仿真软件 | 运行AutoShop和FactoryIO |
| 交换机/路由器 | 或电脑直连PLC | 组建局域网 |
3.2 软件清单
| 软件 | 推荐版本 | 作用 | 获取提示 |
|---|---|---|---|
| 汇川AutoShop | V2.0或更高 | 汇川PLC编程软件 | 从汇川官网下载中心获取 |
| FactoryIO | 2.5.10或更高 | 自动化系统仿真软件 | 从其官网下载试用版或购买正式版 |
| FactoryIO 驱动 | Modbus TCP驱动 | 实现与H5U的通讯 | 通常软件内置或官网提供 |
重要提示:软件的激活、授权请务必通过官方正规渠道进行,确保软件的稳定性和合法性。
3.3 网络配置
- 连接:用网线将汇川H5U PLC的以太网口与电脑网口连接(可通过交换机,也可直连)。
- 设置PLC IP:
- 给PLC上电。
- 打开AutoShop软件,通过USB编程线连接PLC。
- 在软件中设置PLC的IP地址、子网掩码和网关。例如,设置为
192.168.1.10。
- 设置电脑IP:
- 将电脑的以太网适配器IPv4地址设置为与PLC同一网段。例如,设置为
192.168.1.100。 - 子网掩码通常为
255.255.255.0。
- 将电脑的以太网适配器IPv4地址设置为与PLC同一网段。例如,设置为
- 测试连通性:在电脑命令行中,执行
ping 192.168.1.10,确认能收到PLC的回复。
4. 核心流程拆解:从零构建虚实联动系统
整个项目可以分解为五个关键阶段,我们将按顺序进行。
4.1 第一阶段:FactoryIO场景设计与I/O映射
这个阶段的目标是在虚拟世界中搭建我们的“三物料分拣系统”并定义好与PLC通讯的接口。
- 场景搭建:打开FactoryIO,新建一个场景。从库中拖放以下元件:
- 传送带:用于输送物料。
- 光电传感器:用于检测物料到达。放置2-3个,例如一个在入口,一个在分拣前。
- 推杆气缸:用于将物料推入对应的分拣框。需要3个,分别对应A、B、C类物料。
- 物料生成器:用于在传送带起点定期生成物料。
- 分拣框:放置于气缸对面,接收物料。
- I/O映射:这是最关键的一步。为每个需要与PLC交互的虚拟设备定义变量。
- 例如,将“入口光电传感器”映射到一个输入变量,命名为
Sensor_In,地址类型为Input,地址为0(对应PLC的X0)。 - 将“A物料气缸”映射到一个输出变量,命名为
Cylinder_A,地址类型为Output,地址为0(对应PLC的Y0)。 - 视觉信号模拟:我们可以创建一个虚拟的“选择开关”或使用脚本,来模拟视觉系统的输出。将其映射到三个输入变量,例如
Vision_A(地址1),Vision_B(地址2),Vision_C(地址3)。当物料到达时,手动或自动设置其中一个为True,模拟视觉识别结果。
- 例如,将“入口光电传感器”映射到一个输入变量,命名为
- 保存场景:保存这个场景文件(.fio)。
4.2 第二阶段:配置FactoryIO的Modbus TCP驱动
- 在FactoryIO中,进入“驱动”设置。
- 选择“Modbus TCP Client”驱动。
- 配置连接参数:
- Server IP:填写汇川H5U PLC的IP地址,如
192.168.1.10。 - Port:Modbus TCP默认端口
502。 - Unit ID:通常为
1(具体需参考H5U的Modbus从站设置)。
- Server IP:填写汇川H5U PLC的IP地址,如
- 配置映射表:这是连接虚拟变量与PLC地址的桥梁。你需要根据H5U的Modbus地址规则来设置。
- 汇川H5U Modbus地址规则(常用):
- 输入继电器(X):地址范围为
0x0000 - 0x0FFF。在Modbus中通常对应0区(线圈读)。但FactoryIO的Modbus驱动映射需要具体配置。一个常见的做法是,将PLC的X点映射到Modbus的0x0000开始的输入寄存器或线圈。更通用的做法是使用软元件M或D寄存器进行映射。 - 输出继电器(Y):地址范围为
0x1000 - 0x1FFF。对应Modbus1区(线圈)。 - 数据寄存器(D):地址范围为
0x2000 - 0x2FFF。对应Modbus4区(保持寄存器)。
- 输入继电器(X):地址范围为
- 简化实践建议:为了避开X/Y映射可能存在的兼容性问题,我们强烈建议在PLC程序内部,将实际的X/Y点状态转存到M(辅助继电器)或D(数据寄存器)中,然后让FactoryIO与这些M/D寄存器进行通讯。这样映射更灵活,兼容性更好。
- 例如,在FactoryIO中,将一个输出变量映射到Modbus Holding Register(4区),地址为
40001(对应Modbus地址0x0000,在H5U中可能映射到D0寄存器)。 - 将一个输入变量映射到Modbus Holding Register,地址为
40011(对应Modbus地址0x000A,在H5U中可能映射到D10寄存器)。
- 例如,在FactoryIO中,将一个输出变量映射到Modbus Holding Register(4区),地址为
- 汇川H5U Modbus地址规则(常用):
- 启动驱动,连接PLC。如果配置正确,FactoryIO界面会显示连接成功。
4.3 第三阶段:汇川AutoShop中SFC程序框架搭建
现在进入PLC编程的核心。我们使用顺序功能图来构建程序主框架。
- 新建项目:打开AutoShop,选择对应的H5U型号,新建工程。
- 理解SFC结构:一个完整的SFC程序包含:
- 初始步:通常是“等待启动”或“复位”状态。
- 活动步:系统运行时依次经过的各个步骤。
- 转换条件:步与步之间的切换条件,通常是传感器信号、定时器到或计数器满等。
- 动作:在每一步中需要执行的操作,如置位Y点、复位Y点、启动定时器等。
- 绘制SFC流程图(逻辑设计):在纸上或脑中规划好三物料分拣的流程。一个典型流程如下:
- 步0 (S0):初始步,系统上电等待启动。
- 转换条件0:启动按钮按下。
- 步1 (S1):传送带运行,等待物料到达。
- 转换条件1:入口传感器检测到物料。
- 步2 (S2):物料到达分拣位,停止传送带,触发“视觉检测”(读取模拟的视觉信号)。
- 转换条件2:视觉信号就绪(Vision_A/B/C其中一个为True)。
- 分支:根据视觉信号,跳转到不同的步。
- 步3A (S3A):视觉识别为A物料,执行A气缸推出动作。
- 步3B (S3B):视觉识别为B物料,执行B气缸推出动作。
- 步3C (S3C):视觉识别为C物料,执行C气缸推出动作。
- 转换条件3A/3B/3C:对应气缸伸出到位传感器信号(虚拟)。
- 步4A/4B/4C (S4):气缸缩回。
- 转换条件4A/4B/4C:对应气缸缩回到位传感器信号(虚拟)。
- 步5 (S5):一个分拣周期完成,延时一小段时间(如1秒),然后跳转回步1,等待下一个物料。
- 异常分支:在任何步,如果按下急停或复位按钮,应能跳转回初始步S0。
4.4 第四阶段:编写SFC程序与通讯处理程序
在AutoShop中,将上述流程图转化为实际的SFC程序。
- 创建SFC程序段:在工程中新建一个程序,语言选择“SFC”。
- 编写SFC代码:按照规划,使用SFC编辑器添加步、转换和动作。下面提供一个核心逻辑模板的关键部分示例(使用梯形图辅助描述动作):
// 注意:以下为SFC结构的示意性描述,实际在AutoShop中为图形化编辑 // 初始步 S0 STEP S0; ACTION: // 复位所有输出,系统待机 RST Y0; // A气缸 RST Y1; // B气缸 RST Y2; // C气缸 RST Y10; // 传送带电机 END_ACTION; TRANSITION T0: START_BUTTON; // 转换条件:启动按钮(M0) // 步 S1:传送带运行,等待物料 STEP S1; ACTION: SET Y10; // 启动传送带 END_ACTION; TRANSITION T1: SENSOR_IN; // 转换条件:入口传感器(X0,或映射的M/D寄存器) // 步 S2:停止传送带,等待视觉结果 STEP S2; ACTION: RST Y10; // 停止传送带 // 此处可以触发一个虚拟的视觉处理延时定时器 TON T1, PT#1S; // 定时1秒模拟视觉处理时间 END_ACTION; TRANSITION T2: T1.Q AND (VISION_A OR VISION_B OR VISION_C); // 定时到且有视觉信号 // 选择性分支开始 // 分支1:A物料 STEP S3A; ACTION: SET Y0; // 推出A气缸 END_ACTION; TRANSITION T3A: CYLINDER_A_EXTENDED; // A气缸伸出到位(虚拟传感器) STEP S4A; ACTION: RST Y0; // 缩回A气缸 END_ACTION; TRANSITION T4A: CYLINDER_A_RETRACTED; // A气缸缩回到位 // 分支2:B物料 (S3B, S4B,逻辑同A) // 分支3:C物料 (S3C, S4C,逻辑同A) // 分支合并 STEP S5; ACTION: TON T2, PT#1S; // 完成延时 END_ACTION; TRANSITION T5: T2.Q; // 延时到 JUMP S1; // 跳转回S1,开始下一循环- 编写通讯映射程序:由于我们建议使用M/D寄存器与FactoryIO通讯,需要在主程序或另一个程序段中编写映射逻辑。
// 文件:MAIN 或 COM_MAPPING 程序段 // 将FactoryIO的输入(模拟传感器、视觉信号)映射到PLC内部软元件 LD FactoryIO_Input_D0 // 假设D0对应FactoryIO的“启动按钮” OUT M0 // 映射到内部启动标志 LD FactoryIO_Input_D1 // 假设D1对应“入口传感器” OUT M1 // 映射到内部传感器标志 LD FactoryIO_Input_D2 // 假设D2对应“视觉A信号” OUT M2 LD FactoryIO_Input_D3 // D3对应“视觉B信号” OUT M3 LD FactoryIO_Input_D4 // D4对应“视觉C信号” OUT M4 // 将PLC的输出(控制气缸、电机)状态写入到D寄存器,供FactoryIO读取 LD Y0 // A气缸输出 OUT FactoryIO_Output_D10 // 写入D10 LD Y1 // B气缸输出 OUT FactoryIO_Output_D11 // 写入D11 LD Y2 // C气缸输出 OUT FactoryIO_Output_D12 // 写入D12 LD Y10 // 传送带输出 OUT FactoryIO_Output_D13 // 写入D13关键:这里的FactoryIO_Input_Dx和FactoryIO_Output_Dx是Modbus通讯功能块(如MODRW指令)读写的结果地址,需要根据你实际的Modbus配置来定义。你需要使用AutoShop中的Modbus TCP主站指令,周期性地从PLC的D寄存器区域读写数据,实现与FactoryIO的数据交换。
4.5 第五阶段:联机调试与逻辑验证
- 编译下载:在AutoShop中编译SFC程序和通讯程序,确认无误后,下载到真实的汇川H5U PLC中。
- 启动FactoryIO:打开之前创建的场景,并启动Modbus TCP驱动,确保状态显示已连接。
- PLC运行:将H5U PLC切换到RUN模式。
- 观察与操作:
- 在FactoryIO场景中,点击“物料生成器”,生成一个物料。
- 观察虚拟物料是否沿传送带移动。
- 当物料触发入口传感器时,观察PLC程序中的SFC是否从S1转换到S2。
- 在FactoryIO中,手动设置“视觉信号”(例如,将代表Vision_A的开关打开)。
- 观察PLC程序是否进入S3A步,并驱动A气缸动作。
- 观察FactoryIO场景中,对应的虚拟气缸是否推出,将物料推入A框。
- 气缸动作到位后,虚拟传感器信号应触发PLC程序进入下一步,气缸缩回。
- 测试全流程:依次测试A、B、C三种物料的分拣流程,观察整个SFC是否按设计流畅运行。
- 异常测试:测试急停、复位功能是否有效。
5. 完整示例与代码实现
为了让逻辑更清晰,这里提供一个更具体、更完整的程序组织示例。我们假设使用Modbus TCP,PLC作为服务器(从站),FactoryIO作为客户端。PLC的D寄存器区用于数据交换。
5.1 FactoryIO I/O 映射表示例(Modbus TCP)
在FactoryIO的驱动映射表中,我们进行如下配置(示例):
| FactoryIO 变量名 | 变量类型 | Modbus 区域 | 地址 (十进制) | 对应 PLC 地址 | 说明 |
|---|---|---|---|---|---|
Btn_Start | Input | Holding Register | 40001 | D0 | 启动按钮 |
Sensor_In | Input | Holding Register | 40002 | D1 | 入口光电 |
Vision_A | Input | Holding Register | 40003 | D2 | 视觉A信号 |
Vision_B | Input | Holding Register | 40004 | D3 | 视觉B信号 |
Vision_C | Input | Holding Register | 40005 | D4 | 视觉C信号 |
Cyl_A_Ext_Sensor | Input | Holding Register | 40006 | D5 | A缸伸出到位 |
Cyl_A_Ret_Sensor | Input | Holding Register | 40007 | D6 | A缸缩回到位 |
Motor_Run | Output | Holding Register | 40011 | D10 | 传送带电机 |
Cyl_A_Out | Output | Holding Register | 40012 | D11 | A气缸推出 |
Cyl_B_Out | Output | Holding Register | 40013 | D12 | B气缸推出 |
Cyl_C_Out | Output | Holding Register | 40014 | D13 | C气缸推出 |
注意:Modbus地址40001对应寄存器地址0。Holding Register是4区,可读可写。
5.2 汇川H5U PLC 程序示例
在AutoShop中,我们创建两个程序:一个主SFC程序,一个Modbus数据交换程序。
程序1:MODBUS_DATA_EXCHANGE (使用梯形图)这个程序负责周期性更新与FactoryIO交换的D寄存器数据。
// 网络1:读取FactoryIO输入到PLC的D寄存器 (模拟PLC作为从站,被FactoryIO写) // 实际上,当FactoryIO配置为Client并向PLC的D0-D7写入时,PLC直接就能读取D0-D7的值。 // 所以这部分主要是声明和监控。真正的读取是自动的,因为D寄存器是共享内存。 // 我们可以将D0-D7的值转存到M区,方便SFC程序使用。 LD SM0 // 常ON信号 MOV D0 M0 // 启动按钮状态 -> M0 MOV D1 M1 // 入口传感器 -> M1 MOV D2 M2 // 视觉A -> M2 MOV D3 M3 // 视觉B -> M3 MOV D4 M4 // 视觉C -> M4 MOV D5 M5 // A缸伸出到位 -> M5 MOV D6 M6 // A缸缩回到位 -> M6 // ... 其他传感器同理 // 网络2:将PLC输出状态写入到D寄存器 (模拟PLC作为从站,被FactoryIO读) // SFC程序控制的是Y点或M点,我们需要将其状态写入到D10-D14,供FactoryIO读取。 LD Y10 // 传送带电机输出 MOV Y10 D10 // 写入D10 LD M100 // 假设SFC中控制A气缸的动作输出用M100表示 MOV M100 D11 // 写入D11 LD M101 // 控制B气缸 MOV M101 D12 // 写入D12 LD M102 // 控制C气缸 MOV M102 D13 // 写入D13程序2:MAIN_SFC (使用SFC语言)这是核心控制逻辑。注意,转换条件使用从D寄存器映射过来的M点。
// 使用图形化SFC编辑,以下是文本化描述逻辑 INITIAL_STEP S0; ACTIONS: // 复位所有动作输出 RST M100; // A缸 RST M101; // B缸 RST M102; // C缸 RST Y10; // 电机 // 复位所有步激活状态(除S0外) END_ACTIONS; TRANSITION T0: M0; // M0是启动按钮,来自D0 STEP S1; ACTIONS: SET Y10; // 启动传送带 END_ACTIONS; TRANSITION T1: M1; // M1是入口传感器,来自D1 STEP S2; ACTIONS: RST Y10; // 停止传送带 TON T1, PT#500MS; // 模拟视觉处理时间 END_ACTIONS; TRANSITION T2: T1.Q AND (M2 OR M3 OR M4); // 定时到且有任一视觉信号 // --- 选择性分支 --- // 分支A STEP S3A; ACTIONS: SET M100; // 置位A气缸动作标志 END_ACTIONS; TRANSITION T3A: M5; // M5是A缸伸出到位传感器,来自D5 STEP S4A; ACTIONS: RST M100; // 复位A气缸动作标志 END_ACTIONS; TRANSITION T4A: M6; // M6是A缸缩回到位传感器,来自D6 JUMP S5; // 跳转到合并步 // 分支B (S3B, S4B,逻辑同A,使用M101, M7, M8等) // 分支C (S3C, S4C,逻辑同A,使用M102, M9, M10等) // --- 分支合并 --- STEP S5; ACTIONS: TON T2, PT#1S; // 完成延时 END_ACTIONS; TRANSITION T5: T2.Q; JUMP S1; // 跳回S1,循环关键点:SFC中控制气缸用的是M100、M101、M102这些内部标志,而不是直接控制Y点。然后在数据交换程序中将这些M点状态写入到D11、D12、D13,最终由FactoryIO读取并驱动虚拟气缸。这样做的好处是逻辑与控制分离,程序更清晰,也便于调试。
5.3 FactoryIO 场景脚本示例(模拟视觉信号)
为了自动模拟视觉信号,可以在FactoryIO中使用Lua脚本。在场景的“脚本”编辑器中,可以添加如下逻辑:
-- 当物料到达分拣位传感器时(假设该传感器变量为Sensor_Sort),随机生成一个视觉结果 function onSensorSortChange(value) if value then -- 传感器触发 -- 先清零所有视觉信号 setOutput("Vision_A", false) setOutput("Vision_B", false) setOutput("Vision_C", false) -- 随机选择一种物料类型 local randomVal = math.random(1, 3) if randomVal == 1 then setOutput("Vision_A", true) elseif randomVal == 2 then setOutput("Vision_B", true) else setOutput("Vision_C", true) end -- 等待一小段时间后清零,模拟单次触发 delay(500) -- 延迟500毫秒 setOutput("Vision_A", false) setOutput("Vision_B", false) setOutput("Vision_C", false) end end -- 将函数绑定到传感器变量变化事件 registerChange("Sensor_Sort", onSensorSortChange)这个脚本会在物料到达分拣位时,随机设置A、B、C视觉信号中的一个为True,持续500ms后复位,从而触发PLC的分支选择逻辑。
6. 运行结果与效果验证
完成以上所有步骤后,你可以开始运行和验证整个系统。
启动顺序:
- 给汇川H5U PLC上电。
- 在电脑上打开FactoryIO,加载“三物料分拣.fio”场景文件。
- 在FactoryIO中启动Modbus TCP驱动,确认连接状态为“Connected”。
- 打开汇川AutoShop软件,与PLC在线连接,将程序下载到PLC(如果尚未下载)。
- 将PLC模式切换至“RUN”。
预期现象:
- FactoryIO场景中,传送带处于静止状态(因为S0步复位了电机输出)。
- 在FactoryIO中,点击你设置的“启动按钮”(可能是一个开关元件,关联
Btn_Start变量)。 - 观察到PLC程序从S0步跳转到S1步,同时FactoryIO场景中的传送带开始转动。
- 在FactoryIO中,从物料生成器生成一个物料方块。物料在传送带上移动。
- 当物料经过“入口传感器”时,PLC程序跳转到S2步,传送带停止。
- 几乎同时,由于你绑定了脚本或手动操作,
Vision_A、B、C中的一个变量会短暂变为True。 - PLC程序根据视觉信号,跳转到对应的分支(如S3A)。
- 在S3A步,
M100被置位,数据交换程序将其写入D11。 - FactoryIO读取到
D11为True,驱动虚拟的A气缸推出,将物料推入A框。 - 当虚拟气缸完全伸出,其“伸出到位传感器”变量变为True,映射到PLC的
M5。 - PLC程序满足转换条件T3A,跳转到S4A步,复位
M100,气缸缩回。 - 缩回到位后,跳转到S5步,延时1秒后,系统自动跳回S1步,传送带再次启动,等待下一个物料。
- 整个流程周而复始,A、B、C物料被正确分拣到对应的框中。
验证成功的关键点:
- 通讯连通:FactoryIO驱动界面无报错,PLC的Modbus通讯指示灯正常。
- 数据同步:在AutoShop的监控表中,观察
D0-D7(输入)和D10-D14(输出)的值,是否与FactoryIO中变量的状态实时同步。 - SFC步进:在AutoShop的SFC监控视图或顺控监控中,能清晰看到当前激活的步(黄色高亮),并且步进符合设计逻辑。
- 动画同步:FactoryIO中的3D动画与PLC程序逻辑完全一致,无延迟或错乱。
7. 常见问题与排查思路
在搭建和调试过程中,你可能会遇到以下问题。请按照此表顺序排查。
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
| FactoryIO无法连接PLC | 1. IP地址设置错误 2. 端口被占用或错误 3. 防火墙阻止 4. PLC未设置为Modbus TCP从站模式 | 1. 在电脑上ping PLC的IP。 2. 检查FactoryIO驱动配置的IP和端口(502)。 3. 暂时关闭电脑防火墙测试。 4. 检查H5U的Modbus TCP从站功能是否启用。 | 1. 修正IP地址,确保在同一网段。 2. 确认端口号。 3. 在防火墙中为FactoryIO或端口502添加例外。 4. 在AutoShop中配置H5U的Modbus从站参数并下载。 |
| 连接成功,但数据不更新 | 1. Modbus地址映射错误 2. 数据寄存器类型不匹配 3. PLC程序未正确读写D寄存器 4. 通讯周期太慢 | 1. 对比FactoryIO映射表与PLC程序使用的D寄存器地址。 2. 确认使用的是Holding Register(4区)。 3. 监控PLC的D寄存器值是否变化。 4. 检查是否有其他程序在频繁占用通讯端口。 | 1. 统一映射地址,确保一一对应。 2. 在AutoShop的Modbus配置中确认寄存器类型。 3. 检查并修正数据交换程序(MOV指令)。 4. 优化程序,减少不必要的通讯负载。 |
| SFC程序不执行,卡在初始步 | 1. 转换条件不满足 2. SFC程序未激活或双线圈冲突 3. 急停或复位条件被触发 | 1. 监控转换条件涉及的变量(如M0)是否为True。 2. 检查程序组织单元,确保SFC程序被正确调用。 3. 检查急停、复位相关的逻辑。 | 1. 确保启动信号能正确从FactoryIO传递到PLC(检查D0和M0)。 2. 确保SFC是唯一的程序循环主体,避免在其他地方对SFC中使用的M点或Y点进行重复操作。 3. 检查急停复位回路。 |
| SFC能步进,但FactoryIO无动作 | 1. PLC输出未映射到FactoryIO 2. FactoryIO中元件未正确关联变量 3. 输出地址错误或数据类型不匹配 | 1. 监控PLC中控制输出的M点或Y点(如M100)是否动作。 2. 监控对应的D寄存器(如D11)值是否变化。 3. 检查FactoryIO中元件的“Actuator”是否绑定了正确的输出变量。 | 1. 确认数据交换程序将M100写入了D11。 2. 确认FactoryIO映射表中, Cyl_A_Out变量正确映射到了地址40012(D11)。3. 确认FactoryIO中A气缸的“Actuator”属性选择了 Cyl_A_Out变量。 |
| 视觉信号无法触发分支选择 | 1. 视觉信号变量未正确传递到PLC 2. SFC转换条件逻辑错误 3. 视觉信号持续时间太短,PLC未捕捉到 | 1. 监控PLC中M2、M3、M4的值。 2. 检查SFC中T2转换条件的逻辑表达式。 3. 使用上升沿或保持信号。 | 1. 检查FactoryIO到PLC的输入映射(D2-D4到M2-M4)。 2. 修正转换条件,例如改为 T1.Q AND (M2 OR M3 OR M4)。3. 在FactoryIO脚本中延长视觉信号保持时间,或在PLC程序中使用上升沿检测指令(如PLS)捕捉短脉冲。 |
| 气缸动作一次后系统停止 | 1. 分支合并后的跳转逻辑错误 2. 物料生成或传感器复位逻辑问题 3. S5步的转换条件T5未满足 | 1. 检查S5步后的JUMP S1指令是否正确。2. 检查FactoryIO中物料被推走后,相关传感器是否复位。 3. 监控T2定时器是否正常工作。 | 1. 确保跳转指令指向正确的步(S1)。 2. 在FactoryIO中检查传感器逻辑,确保一个周期结束后,所有信号复位。 3. 检查T2定时器的预设值PT和使能条件。 |
8. 最佳实践与工程建议
将这套方法应用于实际项目或深入学习时,遵循以下建议可以事半功倍。
- 规划先行:在动手编程和搭建场景前,务必用流程图或草图将整个控制流程(包括正常流程和异常处理)画清楚。这是编写高质量SFC的基础。
- 地址规划表:创建一个Excel或文档,统一规划PLC的I/O点、M点、D寄存器的用途,以及它们在FactoryIO中对应的变量名和Modbus地址。这是避免地址冲突和混乱的关键。
- 模块化编程:
- 将SFC主控程序、通讯处理程序、报警处理程序、设备手动操作程序等放在不同的程序段(POU)中。
- 使用子程序或函数块封装重复逻辑,如单个气缸的“推出-保持-缩回”控制。
- 信号处理:
- 对来自FactoryIO的输入信号,建议在PLC程序入口处进行滤波和边沿检测,以消除抖动和确保单次触发。
- 例如,使用定时器对传感器信号进行延时判断,或使用上升沿指令
PLS。
- 仿真场景的逼真度:在FactoryIO中,尽量模拟真实设备的特性,如气缸的动作时间、传感器的检测延迟。这可以让仿真更贴近现实,提前暴露时序问题。
- 利用仿真进行压力测试:在虚拟环境中,可以轻松模拟各种极端情况,如传感器连续误触发、物料堆积、急停频繁拍下等,测试程序的健壮性。
- 文档与注释:在AutoShop程序中,为每一步、每一个转换条件、重要的M点和D寄存器添加详细的注释。这对于后期维护和团队协作至关重要。
- 从仿真到实物的平滑过渡:当虚拟调试通过后,切换到真实设备时,主要工作是将FactoryIO的I/O映射,改为真实PLC模块的X/Y点地址。核心的SFC控制逻辑通常无需大改,只需调整部分定时器参数和信号滤波时间。这极大地降低了现场调试的风险和周期。
- 安全第一:即使在仿真阶段,也要在程序中编写完整的急停、复位和故障处理逻辑。养成好的编程习惯,确保任何情况下都能安全地停止设备。
通过“汇川H5U PLC + FactoryIO + 顺序功能图”这套组合拳,你构建的不仅仅是一个三物料分拣程序,更是一套高效的自动化系统开发与调试工作流。这个核心逻辑模板——清晰的SFC框架、虚实映射的通讯方法、模块化的程序结构——可以灵活地应用到装配线、包装机、测试台等各种顺序控制场景中。
下次当你面对一个新的自动化任务时,不妨先打开FactoryIO,搭建一个虚拟原型,用这个模板快速构建和验证你的控制逻辑。你会发现,编程调试不再是“开盲盒”,而是一个可控、可视、高效的创造性过程。
