2.4 软件模型与程序组织


2.4 软件模型与程序组织

本节摘要:IEC 61131-3的软件模型把控制系统分成配置、资源、任务、程序四层,程序由程序、功能块、函数三类组织单元构成,任务绑定决定每块代码的执行节奏。本节给出青线的多任务框架与代码组织纪律,回答"这段逻辑该放在哪、由谁多久调用一次"。

现场老工程师问新人有一句口头禅:"这段逻辑在哪个OB里?"——翻译成标准语言就是:这段代码绑在哪个任务上、多久执行一次。这句话背后就是本节要讲的软件模型。前两节解决了用什么笔写,这一节解决写在哪个抽屉、抽屉多久被拉开一次。理解它,前一章的扫描周期就从一个概念变成了可以动手分配的资源。

程序住在哪一层

标准的软件模型自上而下四层。配置对应一台具体控制系统,是工程的最大边界;资源对应一个CPU及其运算能力,一台控制器可以理解为一个资源;任务定义一段程序以什么节奏与优先级执行——循环执行、按设定周期执行、还是事件触发执行;程序挂在任务下,由三类代码容器组成。

三类容器值得单独说清。函数是没有记忆的计算单元:喂进参数、吐出结果、不留现场,算一个标定换算用它。功能块是带记忆的容器:每次调用有自己的实例数据,定时器就是典型——同样的接通延时逻辑,三台电机就要三个定时器实例,各自记各自的当前值。程序是最大的容器,等价于入口,把各功能块组织起来。这个"无记忆与有记忆"的分野,是第3章数据设计、第4章设备抽象的直接基础,请务必在这节吃透。

青线的任务分账

任务表是全项目的时间宪法,第1章讲的扫描周期预算在这里落成条款。青线最终定为三层:主循环任务十毫秒,承担全部设备级逻辑——启停、互锁、报警、模式切换;五毫秒循环中断任务承担储液罐液位与膜包炉温的PID运算,保证控制周期不受主循环负载波动影响;硬件中断任务响应送瓶链高速计数的每一步事件,做瓶体追踪。三层各管一段,互不抢时。

任务 周期与触发 承担内容 预算纪律
主循环 固定10毫秒 设备逻辑、互锁、模式、报警 最长不超过7毫秒
循环中断 固定5毫秒 两路PID与模拟量标定 单次不超过1.5毫秒
硬件中断 事件触发 高速计数与瓶体追踪 单次不超过0.3毫秒

预算纪律比任务划分更容易被忽视。中断任务优先级高,它超时挤占主循环,主循环就抖;主循环里塞进重活,中断照样准时进来,但主循环被拖过看门狗就全线停摆——第6章那次著名的事故正是主循环被拖爆。三条纪律写进编码规范:中断里不许等待、不许做大循环、不许调用非确定时间的库函数。

调用结构的组织纪律

容器与任务定了,还差一层"怎么摆"。青线的调用树有一条硬规矩:程序层只做编排,具体设备动作全部下沉到功能块,功能块之间不允许互相调用超过一层。这么定的理由在变更时才显现:联锁规则变了,改对应功能块一处;若逻辑散落在程序层各处,变更就变成全文件排查。第4章的模块化重构会用一次真实返工来展示不守这条纪律的代价。

变量作用域同理收紧。全局变量只留给真正全局的事——模式字、联锁总况、时钟;设备内部状态一律做功能块的实例局部量。看一段青线电机功能块的调用片段感受这个层次:

// 程序层 PLC_Main(主循环任务里被调用) Motor_FB1(Start := PB_Start, // 启动按钮 Stop := PB_Stop, // 停止按钮 Protect := Therm_OK, // 热保护健康 FB_Ctrl := Conv1_Ctrl, // 来自联锁层的指令 FB_Stat := Conv1_Stat); // 状态回传联锁层 // 启保停细节藏在 Motor_FB1 内部,主程序只见接口不见实现

主程序读起来像一张设备清单,每台电机一行调用;真正的启保停逻辑在功能块里只写一次,全线几十台电机共用。这行调用还示范了接口命名习惯:入参在左、反馈在右,评审时视线扫一行就知道一台电机的全部交割。

启动与初始化:第五个隐形任务

任务表之外还有一个不上台面的关键角色:启动任务。CPU从停机转运行、或断电恢复上电时,先执行一次启动逻辑再进入循环——保持性变量带着断电前的值回来,非保持变量清零,流程从哪个步恢复、联锁先自检还是先放行,全在启动任务里定调。启动任务的执行时长同样计入上电到就绪的时间预算,写得臃肿的启动逻辑会让每次送电都像一次完整的系统重装——青线把启动任务控制在两个扫描周期内完成,复杂的状态核对分摊到前几个主循环里做。

青线的启动纪律有两条。其一,全线设备默认静止:启动任务把所有输出清零、所有流程步复位到待机,恢复生产必须由操作员手动确认——自动"接着上次的进度跑"在产线上是大忌,谁知道停机那刻瓶子停在哪。其二,保持性变量白名单制:只有配方号、累计产量、班次统计这类"断电也不能丢"的量进保持区,白名单外一律不保持。曾经见过图省事把中间状态全设保持的项目,每次停机重启都从诡异的位置恢复,排查到怀疑人生。

启动任务平时一年跑不了几次,写坏它却每次都咬人——把它当作第五个任务认真编写与测试,是工程组织里性价比最高的保险之一。

两个高频疑问

问:任务优先级是不是越高越好? 不是,优先级是插阈权,不是荣誉。中断任务优先级高意味着随时打断主循环,滥用高优先级会让主循环周期抖动、进而让所有联锁的响应时间变得不可预测。原则是:把最小的事放进最高优先级。青线硬件中断单次预算零点三毫秒,就是防止它喧宾夺主。

问:功能块嵌套功能块,该控到几层? 青线上限两层:设备功能块可以内嵌标准指令与小函数,但设备功能块之间不嵌套,编排在程序层完成。嵌套过深的问题是排查时要在多层实例间跳转,诊断缓冲给的定位也变绕。深度换复用是设计诱惑,产线程序要的是一眼看到底的平铺清晰。

本节要点回顾

  • 四层模型:配置圈定系统,资源对应CPU,任务定节奏,程序做入口;
  • 三类容器:函数无记忆,功能块带实例记忆,程序负责编排——有记忆与否决定它怎么复用;
  • 任务分账:十毫秒主循环、五毫秒PID中断、事件中断各管一段,预算纪律写进规范;
  • 两条组织硬规矩:程序只编排、逻辑沉到功能块;全局变量最小化,设备状态进实例。

至此表达与组织都有了章法。下一章打开功能块的内部:数据类型与变量体系,墨水的分子结构。


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