3. iQ-R过程控制CPU编程基础

三菱iQ-R系列过程控制CPU(如R08PCPU、R16PCPU、R32PCPU)与通用可编程控制器最大的区别,在于它把"连续过程量的闭环调节"当作一等公民来对待。理解它的编程模型,不能只停留在"写梯形图"的层面,而要同时看清四件事:标签如何给过程量命名、程序块如何把控制逻辑切分成可复用的单元、任务如何决定这些单元在什么时机执行、扫描周期如何决定控制品质。这四者共同构成过程控制CPU的运行时骨架,而过程控制专用指令则是挂在这套骨架上的"调节工具"。

一、标签:过程量的"实名制"

在过程控制中,一个回路往往牵涉PV(测量值)、SP(设定值)、MV(操作量)、PID参数、报警限值、手自动状态等十几个变量。若全部用X/Y/M/D这类软元件地址书写,程序可读性会迅速崩塌。iQ-R过程控制CPU支持标签(Label)编程,允许用有工程含义的名字直接引用数据。

标签分为全局标签与局部标签。全局标签在工程内所有程序块可见,适合定义跨回路共享的工艺参数;局部标签只在所属程序块内有效,适合定义该块的中间计算量。标签需要指定数据类型,过程控制中常用的有:

  • REAL(32位浮点):用于PV、SP、MV、PID参数等连续量,是过程控制的主力类型;
  • INT/DINT:用于模式字、报警代码、计数器;
  • BOOL:用于联锁、使能、手自动切换等开关量;
  • 结构体(STRUCT):把同一回路的PV、SP、MV、Kp、Ti、Td、报警限打包成一个变量,例如Loop1.PV、Loop1.SP,这是过程控制编程中最值得养成的习惯。

需要特别注意的是:标签最终仍要映射到实际软元件或过程控制CPU的专用数据区。标签只是"别名",不改变数据的物理位置。因此定义标签时必须确认其分配地址不与其它程序块冲突,否则会出现"两个名字改同一个数"的隐蔽故障。

二、程序块与任务:把逻辑放进正确的时间槽

iQ-R过程控制CPU的程序由若干程序块组成,每个程序块是一段可独立编译、独立指定执行条件的程序。程序块本身不决定"什么时候跑",决定这件事的是任务(Task)。任务把程序块与执行时机绑定,常见类型包括:

  • 初始任务:上电后执行一次,用于初始化PID参数、清零积分项、置初始MV;
  • 扫描任务:每个扫描周期执行一次,是过程控制回路运算的主体;
  • 事件任务:由中断或特定事件触发,用于快速联锁或高速采样;
  • 定周期任务:按固定时间间隔执行,适合对采样周期一致性要求高的调节回路。

这里有一个过程控制特有的关键点:PID运算的采样周期必须稳定。如果把PID程序块挂在普通扫描任务上,而扫描周期随程序量波动,积分项和微分项的计算就会失真。因此工程上通常把调节回路放在定周期任务中,或至少确认扫描周期的抖动在可接受范围内。

三、扫描周期:过程控制的"心跳"

扫描周期是CPU完成一轮"输入刷新→程序执行→输出刷新"的时间。对过程控制而言,它直接决定三件事:

  1. 采样分辨率:周期越长,能捕捉的过程变化越粗,快速扰动容易被漏掉;
  2. PID运算的时间基准:PID指令内部按采样时间做积分与微分,采样时间与实际扫描周期不一致会引入误差;
  3. 联锁响应速度:安全联锁若放在慢任务中,可能来不及在危险发生前动作。

因此,过程控制CPU编程的一个基本纪律是:先估算扫描周期,再决定哪些逻辑放哪个任务。粗略估算可按"程序步数×每步执行时间+过程控制指令开销+通信开销"累加。若某回路要求采样周期100ms,而实测扫描周期已达80ms,余量就非常紧张,应考虑拆分任务或减少该任务中的程序量。

iQ-R过程控制CPU运行时结构:标签 → 程序块 → 任务 → 扫描周期 标签层(过程量实名化) Loop1.PV (REAL) Loop1.SP (REAL) Loop1.MV (REAL) Loop1.Kp/Ti/Td Auto/Man 程序块层(逻辑切分与复用) PID调节块 PV/SP/MV运算 报警处理块 上下限/偏差报警 联锁逻辑块 安全条件判断 初始化块 参数装载/清零 任务层(决定执行时机) 初始任务 上电执行一次 定周期任务 如 100ms 固定间隔 扫描任务 每周期执行 事件任务 中断/联锁触发 扫描周期(控制品质的时间基准) 输入刷新 程序执行 输出刷新 通信/自诊断

四、过程控制专用指令:不只是PID

过程控制CPU在通用指令之外,提供了一组面向连续量调节的专用指令。最核心的是PID运算指令,它通常以结构化的方式接收PV、SP、Kp、Ti、Td、采样周期、MV上下限、积分限幅等参数,输出MV。与通用PLC里用加减乘除自己搭PID相比,专用指令的优势在于:

  • 内置积分抗饱和(anti-windup)处理,MV到达限幅时自动停止积分累积;
  • 支持微分先行或对PV微分,避免SP阶跃时微分冲击;
  • 支持手动/自动无扰切换,切换瞬间MV不跳变;
  • 采样周期以参数形式明确给出,运算时间基准清晰。

除PID外,常用的还有:报警检测指令(上下限、偏差、变化率报警)、信号滤波指令(一阶滤波、移动平均,用于抑制测量噪声)、开方指令(差压流量计信号线性化)、累积指令(流量累积)、斜坡/限幅指令(MV变化率限制,保护执行机构)。这些指令的共同特点是:它们都围绕"连续量的采集—处理—输出"这条链路服务。

五、一个最小回路的编程顺序

把上述概念落到一个具体回路上,合理的编程顺序是:

  1. 先定义结构体标签,例如Loop1,包含PV、SP、MV、Kp、Ti、Td、采样周期、MV上限、MV下限、报警上限、报警下限;
  2. 在初始任务中装载PID参数与初始MV,清零积分项;
  3. 在定周期任务中放置PID调节块,采样周期与任务周期一致;
  4. 在扫描任务中放置报警处理块与联锁逻辑块;
  5. 确认扫描周期余量,必要时把非关键逻辑移出定周期任务。
标签解决"叫什么",程序块解决"分几块",任务解决"什么时候跑",扫描周期解决"跑得多快",专用指令解决"怎么调"。五者顺序不能颠倒:先有稳定的时间基准,PID参数才有意义。
常见误区:把PID程序块放在普通扫描任务中,却按固定采样周期整定参数。当程序量增加导致扫描周期变长时,实际积分作用会减弱、微分作用会增强,回路表现会"莫名其妙"变差。排查这类问题时,应先看扫描周期监视值,再看PID参数。

掌握这套编程基础后,后续的回路整定、串级控制、比值控制才有可靠的落脚点。过程控制CPU的编程,本质上是在"逻辑正确"之外,额外承担了"时间正确"的责任。