4. iQ-R编程基础与产线逻辑表达

在三菱MELSEC iQ-R系列PLC的产线控制系统开发中,编程语言的选择与逻辑组织方式直接决定了程序的可读性、可维护性和调试效率。iQ-R支持IEC 61131-3标准下的多种编程语言,其中梯形图(Ladder Diagram,LD)和结构化文本(Structured Text,ST)是产线逻辑开发中最常用的两种。此外,FB(功能块)与FC(功能)作为程序复用的基本单元,是构建规范化产线程序架构的关键手段。本节将围绕这三种核心要素展开,并结合产线启停、互锁与报警三类典型逻辑,说明其实际实现方式。

一、梯形图与ST语言的分工定位

梯形图以继电器逻辑为视觉基础,触点、线圈、功能指令按从左到右、从上到下的方式排列,非常适合表达“条件—动作”型的开关量逻辑。在iQ-R的GX Works3工程中,梯形图程序以“梯形图块”为单位组织,每个块可包含多行梯形回路。其优势在于信号流向直观,现场电气人员容易对照电气原理图进行核对,因此在产线启停、互锁、报警等以位逻辑为主的场合,梯形图仍是首选。

ST语言则是一种类Pascal的高级文本语言,支持IF…THEN…ELSIF…ELSE、CASE、FOR、WHILE等控制结构,以及算术运算、比较运算和函数调用。它更适合处理数据运算、状态机、循环判断和复杂条件组合。例如,当一条产线需要根据多个工位的完成计数、节拍时间和故障标志综合判断是否允许启动时,用ST编写条件表达式比梯形图的串并联触点更清晰。

实际项目中,两者并非互斥。常见的做法是:底层设备的手动/自动切换、急停链、安全互锁用梯形图实现,便于审查;上层节拍调度、配方判断、报警优先级排序用ST实现,便于维护。GX Works3允许在同一工程中混合使用不同语言,通过全局标签和程序块进行数据交互。

iQ-R产线逻辑编程要素关系图 梯形图(LD) 适用:位逻辑、启停、互锁 特点:触点串并联,信号流直观 典型指令:LD/AND/OR/OUT/SET/RST 组织单位:梯形图块 审查优势:对照电气原理图 结构化文本(ST) 适用:运算、状态机、复杂条件 特点:类Pascal语法,结构清晰 典型结构:IF/CASE/FOR/WHILE 组织单位:ST程序块 维护优势:逻辑表达式集中 FB / FC 复用单元 FB:带背景数据,有状态记忆 FC:无背景数据,纯逻辑运算 用途:电机控制、阀门控制、报警处理 产线典型逻辑实现方式 启停逻辑 启动:X0上升沿 + 自动允许 保持:Y0自锁回路 停止:X1常闭断开自锁 语言:梯形图为主 互锁逻辑 条件:多工位安全信号串联 实现:AND逻辑 + 延时确认 输出:互锁允许标志位 语言:梯形图/ST均可 报警逻辑 触发:故障位上升沿捕获 处理:优先级排序 + 首出记忆 复位:确认后手动/自动清除 语言:ST + FB封装

二、FB与FC的基本用法与选择原则

FB(Function Block,功能块)和FC(Function,功能)是iQ-R程序中实现复用的两种基本单元。两者的核心区别在于是否拥有背景数据(Instance Data)。FB在调用时会分配独立的背景数据区,内部变量(如定时器当前值、状态标志、计数器累计值)在多次调用之间保持,因此适合封装“有状态”的设备控制逻辑。例如,一个“电机控制FB”可以包含启动、停止、故障输入,输出运行、故障报警,内部维护一个运行状态机和故障锁存标志。产线上有10台电机时,只需调用同一个FB 10次,每次分配不同的背景数据,即可实现10台电机的独立控制。

FC则不分配背景数据,每次调用执行相同的逻辑运算,输出仅取决于当前输入,适合封装“无状态”的纯函数,如单位换算、数据打包、条件判断等。若在FC内部使用了定时器或需要记忆的变量,必须通过输入输出参数显式传递,否则无法保持状态。

选择原则可以概括为:需要记忆运行状态、故障锁存、计时计数累计的,用FB;仅做即时运算、数据转换、条件组合的,用FC。在GX Works3中,FB和FC都可以用梯形图或ST编写,定义时需明确输入(VAR_INPUT)、输出(VAR_OUTPUT)和内部变量(VAR)。

三、产线启停逻辑的梯形图实现

产线启停是最基础的逻辑。以一条输送线为例,假设启动按钮接X0(常开),停止按钮接X1(常闭),输出接触器接Y0,自动允许条件为M100。梯形图逻辑如下:

|--[ X0 ]--[ M100 ]--[ /X1 ]--[ /M200 ]--( Y0 )--|
|                                                   |
|--[ Y0 ]--+----------------------------------------|
|          |                                        |
|          +--[ T0 K50 ]--( M200 )--|  // 运行确认延时

第一行中,X0上升沿触发启动,M100为自动允许标志,X1常闭表示停止按钮未按下时导通,M200为故障断开标志。Y0得电后,第二行Y0常开触点闭合形成自锁,即使X0松开,Y0仍保持。T0为运行确认定时器,设定值K50表示5秒(假设时基100ms),延时到达后M200置位,用于后续工位确认输送线已稳定运行。停止时按下X1,常闭触点断开,自锁回路失电,Y0复位。

这里需要注意:停止按钮在电气上通常接常闭触点,程序中用常闭(/X1)表示“未按下时导通”,这是安全设计惯例——断线时等同于按下停止,设备进入安全状态。

四、互锁逻辑的条件组合

互锁用于防止两个或多个动作同时执行造成冲突。例如,一条产线上有升降台和横移机构,两者不能同时动作。假设升降台输出Y10,横移输出Y11,互锁条件为:升降台到位信号X10、横移到位信号X11、安全门关闭X12。互锁允许标志为M110。

用ST表达互锁条件更为清晰:

M110 := X10 AND X11 AND X12 AND NOT Y10 AND NOT Y11;
// 互锁允许:升降到位、横移到 位、安全门关闭,且两者均未动作

若用梯形图,则需要将X10、X11、X12串联,再串联Y10、Y11的常闭触点,输出M110。当M110为ON时,才允许后续的升降或横移启动。实际项目中,互锁条件往往多达十几个,用ST编写条件表达式比梯形图串并联更易读、易修改。此外,互锁信号建议增加延时确认(如0.3秒),避免信号抖动导致误判。

五、报警逻辑的优先级与首出记忆

产线报警需要解决两个问题:一是多个报警同时出现时,操作员应优先看到哪个;二是第一个触发的原因不能被后续报警淹没。iQ-R中常用“首出记忆”配合“优先级排序”实现。

首出记忆的实现思路:每个报警位在上升沿时,若当前无更高优先级报警,则将其锁存到首出寄存器。用ST可写为:

IF Alarm1 AND NOT FirstOut THEN
    FirstOut := TRUE;
    FirstOutCode := 1;
END_IF;
IF Alarm2 AND NOT FirstOut THEN
    FirstOut := TRUE;
    FirstOutCode := 2;
END_IF;
// 复位条件:操作员确认后清除

优先级排序则通过报警字的分组实现:将报警按严重程度分为A、B、C三级,A级(如安全门打开、急停)优先显示,B级(如电机过载)次之,C级(如料仓低料位)最后。HMI上按优先级分组显示,A级报警未确认时,B级和C级报警不弹出主画面。

报警处理通常封装为FB,输入为各故障位和确认按钮,输出为当前最高优先级报警代码、首出代码和报警存在标志。这样每条产线只需调用一次报警FB,传入不同的故障位数组即可。

六、编程实践中的组织建议

在GX Works3中组织产线程序时,建议按“设备层—工位层—产线层”三层结构划分程序块。设备层用FB封装单台电机、气缸、阀门的控制;工位层用梯形图或ST组合设备FB,实现工位动作序列;产线层用ST处理启停调度、互锁汇总和报警管理。全局标签统一命名,如“L1_Conveyor_Start”“L1_Alarm_Overload”,避免直接使用X/Y软元件地址,提高程序可读性和移植性。

调试时,可利用GX Works3的监视功能,在线观察FB背景数据中的状态变量,快速定位是启动条件不满足、互锁未释放还是报警未复位。对于ST程序,可在监视窗口中添加表达式,实时查看条件组合结果。掌握梯形图与ST的分工、FB/FC的复用方法,以及启停、互锁、报警三类逻辑的实现要点,是iQ-R产线控制系统开发的基础能力。