ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

虚实结合调试:基于汇川H5U与FactoryIO的PLC顺序控制实践

虚实结合调试:基于汇川H5U与FactoryIO的PLC顺序控制实践

如果你正在学习或从事工业自动化,特别是PLC编程,那么“如何将编程逻辑与物理设备联动调试”这个问题,大概率会让你头疼。传统的调试方式要么依赖昂贵的真实设备,要么在纸上空想逻辑,一旦程序下载到PLC,发现气缸不动作、传感器没信号,排查起来费时费力。

今天要讨论的“汇川H5U PLC + FactoryIO + 视觉传感器”组合,正是为了解决这个痛点。它不是一个简单的教程,而是一套可复用的、高效的虚实结合调试方法论。核心在于,我们利用FactoryIO这个强大的3D仿真软件,在电脑上搭建一个虚拟的“三物料分拣系统”,模拟真实的传感器、气缸、传送带,然后通过真实的通讯协议(如Modbus TCP)与一台真实的汇川H5U PLC进行联机。你的PLC程序控制着虚拟工厂的运行,视觉传感器的信号也由软件模拟注入。

这篇文章要分享的,不仅仅是接线和配置,更是一个经过实战检验的核心编程逻辑模板。这个模板基于“顺序功能图(SFC)”设计,结构清晰,易于调试和维护,能够直接套用在分拣、装配、包装等多种顺序控制场景中。你会发现,掌握了这套方法,你的开发效率会从“写程序-接硬件-抓狂调试”的泥潭中,跃升到“逻辑设计-虚拟验证-实物微调”的流畅状态。

我们将从为什么需要虚实结合调试讲起,逐步拆解环境搭建、通讯配置、SFC编程模板的每个细节,并提供完整的程序段和FactoryIO场景设置示例。无论你是自动化专业的学生,还是希望提升调试效率的工程师,这篇文章都能为你提供一条清晰的实践路径。

1. 这篇文章真正要解决的问题:告别“盲调”,实现PLC程序的预验证与高效调试

在工业自动化项目开发中,编程与调试往往占据大量时间。传统的流程是:在办公室写好PLC梯形图或结构化文本 -> 前往现场,将程序下载到实体PLC -> 连接真实的传感器、执行器(气缸、电机等) -> 开始调试。这个过程存在几个典型痛点:

  1. 硬件依赖性强:没有硬件,程序无法运行测试。设备未到位或出现故障时,开发完全停滞。
  2. 调试风险高:直接操作真实设备,逻辑错误可能导致设备碰撞、产品损坏,甚至安全事故。
  3. 排查效率低:一个气缸不动作,可能是PLC程序问题、可能是接线问题、也可能是气缸本身故障。排查需要跨电气、机械、程序多个领域,定位困难。
  4. 逻辑验证不直观:特别是对于复杂的顺序控制流程,仅靠监控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 系统工作原理(虚实结合)

整个系统的工作原理可以概括为“虚实映射,协议通讯”:

  1. 虚拟场景构建:在FactoryIO中搭建“三物料分拣系统”的3D模型,并为其每个虚拟设备(如光电传感器、气缸、电机)分配I/O变量。
  2. PLC逻辑编程:在汇川AutoShop编程软件中,使用SFC语言编写分拣控制逻辑。程序中操作的I/O点地址,与FactoryIO中定义的变量地址一一对应。
  3. 通讯桥梁建立:配置汇川H5U PLC和运行FactoryIO的电脑处于同一局域网,并设置好Modbus TCP通讯参数。
  4. 联动运行
    • PLC程序中的输出点(如Y0控制气缸)状态改变,通过Modbus TCP协议发送给FactoryIO。
    • FactoryIO收到信号,驱动对应的虚拟气缸动作。
    • 虚拟场景中的传感器(如X0检测物料)状态改变,FactoryIO通过Modbus TCP协议将其写入PLC的输入点。
    • PLC程序检测到输入点变化,触发SFC的转换条件,进入下一步。
  5. 视觉传感器模拟:在FactoryIO中,可以用一个特定的传感器或甚至通过脚本,来模拟视觉系统的识别结果(如识别出物料是A、B、C类),并将结果赋值给PLC的特定输入寄存器,从而触发不同的分拣路径。

通过这套机制,我们就在电脑屏幕上看到了一个完全受真实PLC程序控制的、动态运行的虚拟生产线。

3. 环境准备与前置条件

要成功运行本案例,你需要准备好以下软硬件环境。请务必确保版本兼容性。

3.1 硬件清单

设备/物品规格/要求作用
汇川H5U PLC具体型号如H5U-1614MTD等,带以太网口执行控制程序
网线标准RJ45网线连接PLC与电脑
电脑Windows 10/11,性能足以运行3D仿真软件运行AutoShop和FactoryIO
交换机/路由器或电脑直连PLC组建局域网

3.2 软件清单

软件推荐版本作用获取提示
汇川AutoShopV2.0或更高汇川PLC编程软件从汇川官网下载中心获取
FactoryIO2.5.10或更高自动化系统仿真软件从其官网下载试用版或购买正式版
FactoryIO 驱动Modbus TCP驱动实现与H5U的通讯通常软件内置或官网提供

重要提示:软件的激活、授权请务必通过官方正规渠道进行,确保软件的稳定性和合法性。

3.3 网络配置

  1. 连接:用网线将汇川H5U PLC的以太网口与电脑网口连接(可通过交换机,也可直连)。
  2. 设置PLC IP
    • 给PLC上电。
    • 打开AutoShop软件,通过USB编程线连接PLC。
    • 在软件中设置PLC的IP地址、子网掩码和网关。例如,设置为192.168.1.10
  3. 设置电脑IP
    • 将电脑的以太网适配器IPv4地址设置为与PLC同一网段。例如,设置为192.168.1.100
    • 子网掩码通常为255.255.255.0
  4. 测试连通性:在电脑命令行中,执行ping 192.168.1.10,确认能收到PLC的回复。

4. 核心流程拆解:从零构建虚实联动系统

整个项目可以分解为五个关键阶段,我们将按顺序进行。

4.1 第一阶段:FactoryIO场景设计与I/O映射

这个阶段的目标是在虚拟世界中搭建我们的“三物料分拣系统”并定义好与PLC通讯的接口。

  1. 场景搭建:打开FactoryIO,新建一个场景。从库中拖放以下元件:
    • 传送带:用于输送物料。
    • 光电传感器:用于检测物料到达。放置2-3个,例如一个在入口,一个在分拣前。
    • 推杆气缸:用于将物料推入对应的分拣框。需要3个,分别对应A、B、C类物料。
    • 物料生成器:用于在传送带起点定期生成物料。
    • 分拣框:放置于气缸对面,接收物料。
  2. 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,模拟视觉识别结果。
  3. 保存场景:保存这个场景文件(.fio)。

4.2 第二阶段:配置FactoryIO的Modbus TCP驱动

  1. 在FactoryIO中,进入“驱动”设置。
  2. 选择“Modbus TCP Client”驱动。
  3. 配置连接参数:
    • Server IP:填写汇川H5U PLC的IP地址,如192.168.1.10
    • Port:Modbus TCP默认端口502
    • Unit ID:通常为1(具体需参考H5U的Modbus从站设置)。
  4. 配置映射表:这是连接虚拟变量与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/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寄存器)。
  5. 启动驱动,连接PLC。如果配置正确,FactoryIO界面会显示连接成功。

4.3 第三阶段:汇川AutoShop中SFC程序框架搭建

现在进入PLC编程的核心。我们使用顺序功能图来构建程序主框架。

  1. 新建项目:打开AutoShop,选择对应的H5U型号,新建工程。
  2. 理解SFC结构:一个完整的SFC程序包含:
    • 初始步:通常是“等待启动”或“复位”状态。
    • 活动步:系统运行时依次经过的各个步骤。
    • 转换条件:步与步之间的切换条件,通常是传感器信号、定时器到或计数器满等。
    • 动作:在每一步中需要执行的操作,如置位Y点、复位Y点、启动定时器等。
  3. 绘制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程序。

  1. 创建SFC程序段:在工程中新建一个程序,语言选择“SFC”。
  2. 编写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,开始下一循环
  1. 编写通讯映射程序:由于我们建议使用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_DxFactoryIO_Output_Dx是Modbus通讯功能块(如MODRW指令)读写的结果地址,需要根据你实际的Modbus配置来定义。你需要使用AutoShop中的Modbus TCP主站指令,周期性地从PLC的D寄存器区域读写数据,实现与FactoryIO的数据交换。

4.5 第五阶段:联机调试与逻辑验证

  1. 编译下载:在AutoShop中编译SFC程序和通讯程序,确认无误后,下载到真实的汇川H5U PLC中。
  2. 启动FactoryIO:打开之前创建的场景,并启动Modbus TCP驱动,确保状态显示已连接。
  3. PLC运行:将H5U PLC切换到RUN模式。
  4. 观察与操作
    • 在FactoryIO场景中,点击“物料生成器”,生成一个物料。
    • 观察虚拟物料是否沿传送带移动。
    • 当物料触发入口传感器时,观察PLC程序中的SFC是否从S1转换到S2。
    • 在FactoryIO中,手动设置“视觉信号”(例如,将代表Vision_A的开关打开)。
    • 观察PLC程序是否进入S3A步,并驱动A气缸动作。
    • 观察FactoryIO场景中,对应的虚拟气缸是否推出,将物料推入A框。
    • 气缸动作到位后,虚拟传感器信号应触发PLC程序进入下一步,气缸缩回。
  5. 测试全流程:依次测试A、B、C三种物料的分拣流程,观察整个SFC是否按设计流畅运行。
  6. 异常测试:测试急停、复位功能是否有效。

5. 完整示例与代码实现

为了让逻辑更清晰,这里提供一个更具体、更完整的程序组织示例。我们假设使用Modbus TCP,PLC作为服务器(从站),FactoryIO作为客户端。PLC的D寄存器区用于数据交换。

5.1 FactoryIO I/O 映射表示例(Modbus TCP)

在FactoryIO的驱动映射表中,我们进行如下配置(示例):

FactoryIO 变量名变量类型Modbus 区域地址 (十进制)对应 PLC 地址说明
Btn_StartInputHolding Register40001D0启动按钮
Sensor_InInputHolding Register40002D1入口光电
Vision_AInputHolding Register40003D2视觉A信号
Vision_BInputHolding Register40004D3视觉B信号
Vision_CInputHolding Register40005D4视觉C信号
Cyl_A_Ext_SensorInputHolding Register40006D5A缸伸出到位
Cyl_A_Ret_SensorInputHolding Register40007D6A缸缩回到位
Motor_RunOutputHolding Register40011D10传送带电机
Cyl_A_OutOutputHolding Register40012D11A气缸推出
Cyl_B_OutOutputHolding Register40013D12B气缸推出
Cyl_C_OutOutputHolding Register40014D13C气缸推出

注意: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中控制气缸用的是M100M101M102这些内部标志,而不是直接控制Y点。然后在数据交换程序中将这些M点状态写入到D11D12D13,最终由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. 运行结果与效果验证

完成以上所有步骤后,你可以开始运行和验证整个系统。

  1. 启动顺序

    • 给汇川H5U PLC上电。
    • 在电脑上打开FactoryIO,加载“三物料分拣.fio”场景文件。
    • 在FactoryIO中启动Modbus TCP驱动,确认连接状态为“Connected”。
    • 打开汇川AutoShop软件,与PLC在线连接,将程序下载到PLC(如果尚未下载)。
    • 将PLC模式切换至“RUN”。
  2. 预期现象

    • FactoryIO场景中,传送带处于静止状态(因为S0步复位了电机输出)。
    • 在FactoryIO中,点击你设置的“启动按钮”(可能是一个开关元件,关联Btn_Start变量)。
    • 观察到PLC程序从S0步跳转到S1步,同时FactoryIO场景中的传送带开始转动。
    • 在FactoryIO中,从物料生成器生成一个物料方块。物料在传送带上移动。
    • 当物料经过“入口传感器”时,PLC程序跳转到S2步,传送带停止。
    • 几乎同时,由于你绑定了脚本或手动操作,Vision_ABC中的一个变量会短暂变为True。
    • PLC程序根据视觉信号,跳转到对应的分支(如S3A)。
    • 在S3A步,M100被置位,数据交换程序将其写入D11
    • FactoryIO读取到D11为True,驱动虚拟的A气缸推出,将物料推入A框。
    • 当虚拟气缸完全伸出,其“伸出到位传感器”变量变为True,映射到PLC的M5
    • PLC程序满足转换条件T3A,跳转到S4A步,复位M100,气缸缩回。
    • 缩回到位后,跳转到S5步,延时1秒后,系统自动跳回S1步,传送带再次启动,等待下一个物料。
    • 整个流程周而复始,A、B、C物料被正确分拣到对应的框中。
  3. 验证成功的关键点

    • 通讯连通:FactoryIO驱动界面无报错,PLC的Modbus通讯指示灯正常。
    • 数据同步:在AutoShop的监控表中,观察D0-D7(输入)和D10-D14(输出)的值,是否与FactoryIO中变量的状态实时同步。
    • SFC步进:在AutoShop的SFC监控视图或顺控监控中,能清晰看到当前激活的步(黄色高亮),并且步进符合设计逻辑。
    • 动画同步:FactoryIO中的3D动画与PLC程序逻辑完全一致,无延迟或错乱。

7. 常见问题与排查思路

在搭建和调试过程中,你可能会遇到以下问题。请按照此表顺序排查。

问题现象可能原因排查方式解决方案
FactoryIO无法连接PLC1. 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. 最佳实践与工程建议

将这套方法应用于实际项目或深入学习时,遵循以下建议可以事半功倍。

  1. 规划先行:在动手编程和搭建场景前,务必用流程图或草图将整个控制流程(包括正常流程和异常处理)画清楚。这是编写高质量SFC的基础。
  2. 地址规划表:创建一个Excel或文档,统一规划PLC的I/O点、M点、D寄存器的用途,以及它们在FactoryIO中对应的变量名和Modbus地址。这是避免地址冲突和混乱的关键。
  3. 模块化编程
    • 将SFC主控程序、通讯处理程序、报警处理程序、设备手动操作程序等放在不同的程序段(POU)中。
    • 使用子程序或函数块封装重复逻辑,如单个气缸的“推出-保持-缩回”控制。
  4. 信号处理
    • 对来自FactoryIO的输入信号,建议在PLC程序入口处进行滤波和边沿检测,以消除抖动和确保单次触发。
    • 例如,使用定时器对传感器信号进行延时判断,或使用上升沿指令PLS
  5. 仿真场景的逼真度:在FactoryIO中,尽量模拟真实设备的特性,如气缸的动作时间、传感器的检测延迟。这可以让仿真更贴近现实,提前暴露时序问题。
  6. 利用仿真进行压力测试:在虚拟环境中,可以轻松模拟各种极端情况,如传感器连续误触发、物料堆积、急停频繁拍下等,测试程序的健壮性。
  7. 文档与注释:在AutoShop程序中,为每一步、每一个转换条件、重要的M点和D寄存器添加详细的注释。这对于后期维护和团队协作至关重要。
  8. 从仿真到实物的平滑过渡:当虚拟调试通过后,切换到真实设备时,主要工作是将FactoryIO的I/O映射,改为真实PLC模块的X/Y点地址。核心的SFC控制逻辑通常无需大改,只需调整部分定时器参数和信号滤波时间。这极大地降低了现场调试的风险和周期。
  9. 安全第一:即使在仿真阶段,也要在程序中编写完整的急停、复位和故障处理逻辑。养成好的编程习惯,确保任何情况下都能安全地停止设备。

通过“汇川H5U PLC + FactoryIO + 顺序功能图”这套组合拳,你构建的不仅仅是一个三物料分拣程序,更是一套高效的自动化系统开发与调试工作流。这个核心逻辑模板——清晰的SFC框架、虚实映射的通讯方法、模块化的程序结构——可以灵活地应用到装配线、包装机、测试台等各种顺序控制场景中。

下次当你面对一个新的自动化任务时,不妨先打开FactoryIO,搭建一个虚拟原型,用这个模板快速构建和验证你的控制逻辑。你会发现,编程调试不再是“开盲盒”,而是一个可控、可视、高效的创造性过程。

返回列表