2.2 五种语言各自擅长什么


2.2 五种语言各自擅长什么

本节摘要:IEC 61131-3提供五种语言——梯形图LD、功能块图FBD、结构化文本ST、顺序功能图SFC、指令表IL。它们不是优劣关系而是分工关系:触点逻辑、信号流、算法运算、顺序流程、底层阅读各有其笔。本节逐个分析适用边界,并给出青线的真实使用配比。

2.1节把标准立为公约,这一节回到青线那场争论的正面战场:每种语言到底是什么样,擅长什么,以及为什么青线最后按场景混用而不是全押一种。先讲一个反例垫底。同行工厂里有位强人,坚持全线程序用ST一种语言写完,逻辑正确性无可挑剔;两年后车间电工排查一个联锁故障,对着一屏嵌套IF看得一头雾水,最后把打印出来的程序逐行用笔画梯形图来理解。单一语言的代价不在写时,在维护的人手上——这位强人离职后,那段代码成了整条线无人敢碰的禁区,哪怕它的注释写得再工整。

把五种笔摆上桌

梯形图LD:左右母线之间画触点与线圈,通电路径从左流到右,线得电则线圈动作。它复刻继电器电路图的视觉习惯,是电气背景维护团队的世界语。适合启停、互锁、联锁这类布尔逻辑;不适合复杂运算与大量数据搬运——用它算一个批量的加权平均,图能画到三米长。青线约四成半的程序量在梯形图里,全部是设备级启停联锁。

功能块图FBD:用方块表示函数与功能块,信号线把方块连成数据流。它天然适合信号调理链这类"数据从左流到右被逐步加工"的场景,一个模拟量通道的滤波、量程转换、限幅报警,四个方块串起来一目了然。代价是自由度低,表达条件分支时会显得笨拙。青线把模拟量预处理统一画成FBD,约占一成程序量。

结构化文本ST:长得很像Pascal的高级语言,IF、CASE、FOR、WHILE俱全,变量、表达式、函数调用一应俱全。算法、配方运算、数据结构处理的唯一合理解。它也是版本管理最友好的语言——纯文本,差异比对清晰。青线约三成五的程序量是ST,集中在配方计算、模拟量算法与通信数据组包。

顺序功能图SFC:把流程组织成"步加转移"的有向图,每步绑定动作,步间用转移条件切换。整线流程骨架(上料、冲洗、灌装、旋盖、出瓶)用它编排,顺序一目了然,操作工培训时指着屏幕就能讲工艺。它只管"先做什么后做什么",步内的具体动作仍要别的语言写。青线的流程骨架约占一成。

指令表IL:类似汇编的助记符语言,紧凑、贴近机器,但在标准里已被标记为不建议新设计使用。它的现实用途只剩一个:阅读二十年前的老程序时能看懂。新代码写它,等于给未来的维护者埋雷——没有结构、没有类型检查,评审工具支持也差。青线零使用。

图 2-2:五种语言与任务类型的适配矩阵

图 2-2:五种语言与任务类型的适配矩阵

同一逻辑的两种手感

光看矩阵还隔着一层,拿青线一段真实的瓶到位检测逻辑感受两种笔。需求:瓶子到达灌装位、且当前无剔除信号、且灌装头在原位,则发出允许灌装信号。

梯形图的做法是三副常开触点串成一条支路,末端接"允许灌装"线圈,加上"允许"自锁触点做并联支路。现场电工一眼看懂:三条线串起来,亮了就放行。

ST的写法:

// 瓶到位判定(青线 3# 灌装头) Bottle_OK := Bottle_Present // 瓶在位 AND NOT Reject_Active // 无剔除进行中 AND Head_Home; // 灌装头原位 Fill_Permit := Bottle_OK OR (Fill_Permit AND Bottle_Present);

两种写法语义等价,受众却完全不同。这正是下一节对照实验要量化的问题:同一个逻辑换一次需求,两种笔各自要付出多少维护成本。先记住本节的判断口诀——看触点关系用梯形图,看数据流动用功能块图,看算术与结构用ST,看先后顺序用SFC。

每支笔的一个片段

矩阵之外再给一段可感的样本——同一套"灌装前冲洗"流程在SFC与ST里的分野。SFC把流程画成五步:待机、进水冲洗、排放、合格判定、放行,步与步之间各挂一个转移条件。它在屏幕上就是工艺流程图本身,操作工培训时直接指着讲。而"合格判定"这一步的内部逻辑——取电导率三次采样均值、与阈值比较、滞回处理——是一段标准的ST:

// SFC步"合格判定"的动作(ST实现) Rinse_Samples[i] := Conduct_PV; // 滚动采样 i := (i MOD 3) + 1; // 循环指针 Rinse_Avg := (Rinse_Samples[1] + Rinse_Samples[2] + Rinse_Samples[3]) / 3.0; Rinse_Pass := (Rinse_Avg < Rinse_Limit) // 均值达标 AND (Rinse_Time >= T#30S); // 时长足够

循环指针、滚动均值、滞回——这些写法在梯形图里要么写不出来,要么写出三米长的图。反过来,这段ST给电工看就是天书,而SFC流程图他一看就懂。一支笔管骨架、一支笔管内脏,两种读者各取所需,这正是标准提供多语言的用意。

三个高频疑问

问:团队只会梯形图,强行上ST值不值? 值,但按需分配。算法与数据逻辑坚持用ST写,因为那是梯形图根本写不动的领域,不学就永远外包;设备联锁继续用梯形图,尊重团队的既有能力。青线的做法是"新代码按场景分语言、老代码只在新场景里换笔",两年下来电工团队自然学会了读ST表达式——培训发生在真实需求里,效率最高。

问:SFC会不会和第4章要讲的状态机重复? 形似而神不同。SFC是标准语言层的流程编排工具,适合顶层流程;第4章的状态机是设计模式,用CASE语句在功能块里实现,适合单设备的细粒度状态。青线的分工:整线流程用SFC,单设备(如灌装头)的内部状态用功能块状态机。两者嵌套使用,各在其位。

问:FBD和梯形图长得像,什么时候选它而不是LD? 看主语是"信号"还是"触点"。布尔量启停主语是触点,用LD;模拟量链路主语是数值流——滤波、换算、限幅、报警逐级加工,用FBD画成流水线最直观。青线规定:模拟量调理统一FBD,谁来看都一样;布尔联锁统一LD,电工维护零障碍。

语言混用的一体两面

多语言混用有收益也有代价,如实摆出两面。收益面已经论证:按场景选笔,各得其所。代价面在工具与流程:多语言意味着评审者需要读多种表达、版本比对工具对不同语言的差异呈现能力不同、跨语言调用(梯形图调ST功能块)在部分平台有语法约束。青线的对冲手段是把调用关系单向化——梯形图与SFC做外壳,核心逻辑沉在ST功能块里,外壳只做编排不做运算——于是复杂度集中在可测试的内核,外壳保持各自语言的原生优势。

判断自己的项目适合多深的多语言,给一个经验法则:数一数团队里"能独立评审每种所用语言"的人数。青线四种语言各有至少两名合格评审人,多语言成立;若某语言只有一个人会,它写出的代码就是团队的单点知识风险——要么补人,要么收敛语言。

本节要点回顾

  • 分工不争优劣:五种语言是五支笔,任务类型决定选笔,选错笔的成本在维护期爆发;
  • 配比有因:青线的四成半梯形图对应设备联锁,三成五ST对应算法,比例由任务分布决定;
  • IL退役:指令表在新设计里没有位置,仅在阅读旧程序时当作阅读字典;
  • 口诀:触点关系LD、数据流动FBD、算术结构ST、先后顺序SFC。

下一节把争议最大的两种笔——梯形图与ST——放进同一场实验里,用变更数据代替立场之争。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U