结构化文本与 FB/FC 在 iQ-R 中的工程化应用

时间:2026-10-25

一、为什么用结构化文本与功能块

梯形图直观,适合逻辑联锁与电气人员阅读;但算法、数组处理、字符串与复杂运算用结构化文本更简洁,代码量往往只有梯形图的几分之一。功能块与功能把重复逻辑封装,减少复制粘贴带来的不一致,是工程化编程的核心手段。真正成熟的项目,往往是两者混用:联锁用梯形图,算法用结构化文本。

二、结构化文本基础

赋值用冒号等号,条件判断用IF与ELSIF、ELSE,多分支用CASE,循环有FOR、WHILE、REPEAT,布尔运算用AND、OR、XOR、NOT。写条件时把故障与急停放在前面,让读者一眼看到优先级。字符串与时间类型运算在结构化文本里比梯形图省事得多,做报警信息拼接时尤其明显。

三、功能块与功能的区别

功能没有内部状态存储,靠输入输出传参,适合纯计算,如换算、限幅、取整。功能块有实例化的内部变量,可以保持状态,适合带记忆的逻辑,如启停、计时、状态机。调用功能块要分配实例,同一个功能块多次调用各自独立,这正是批量设备编程的关键。分不清两者,就会出现本想保持状态却每次都被刷新,或者相反,实例串味互相干扰。

四、局部标签与作用域

在功能块内定义内部变量、输入变量、输出变量与输入输出变量。输入按值传递,输入输出变量可传引用,直接修改外部数组。命名用统一前缀,如输入、输出、中间量各用不同字母开头,读代码时不必反复查表。变量命名规范看似琐碎,但程序规模一大,它决定的是一次修改花十分钟还是半天。

五、电机启停功能块示例

输入包括启动、停止、故障、自动方式;输出包括运行、报警。内部做自保持回路、故障锁存、急停优先。把启动优先与停止优先做成参数,同一个功能块就能适配不同工艺。每个电机分配一个实例,画面与诊断统一从实例读取状态,新增设备只需增加实例,不必改动逻辑,这才是复用的意义。

六、工程化实践

建立功能块库工程,跨项目复用并记录版本与变更;用数组加结构体管理同类设备,二十台电机只是一个数组;复杂状态机用分支语句写,状态与转移条件写得清清楚楚;把注释与变量表纳入交付物。规范先行,程序规模一大,可维护性的差距会非常明显,这一点在接手他人项目时体会很明显。

七、调试与协作

功能块上线前先在测试工程里跑一遍边界条件:启动与停止同时为真、故障未复位就启动、实例被重复调用。结构化文本的语法错误在编译阶段就能发现,真正麻烦的是逻辑错误,所以关键功能块要写测试用例。多人协作时把功能块库单独维护,改动走评审,避免一个人改接口导致所有人编译失败。代码风格统一、接口稳定,团队效率的提升比任何技巧都直接。

功能块的注释与接口说明同样要写,接手的人看懂接口,才敢复用。