PID_Temp 提供了集成自整定功能的连续 PID 控制器。PID_Temp 专为温度控制而设计,适用于加热或加热/制冷应用。 为此提供了两路输出,分别用于加热和制冷。
PID_Temp 还可以用于其它控制任务。PID_Temp 可以级联,可以在手动或自动模式下使用。
PID_Temp 提供了自整定比例、积分和微分参数的功能。
PID_Temp 具有抗积分饱和功能并且能够对比例作用和微分作用进行加权。
PID 算法方框图如图 1 所示:
图 1. PID_Temp 算法方框图
PID 算法根据如图 2 所示公式工作(不激活控制区和死区功能的情况),参数详见表 1 所示。
图 2. 计算公式
符号 | 说明 | PID_Temp 指令的关联参数 |
---|---|---|
y | PID 算法的输出值 | |
Kp | 比例增益 | Retain.CtrlParams.Heat.Gain Retain.CtrlParams.Cool.Gain CoolFactor |
s | 拉普拉斯运算符 | |
b | 比例作用权重 | Retain.CtrlParams.Heat.PWeighting Retain.CtrlParams.Cool.PWeighting |
w | 设定值 | CurrentSetpoint |
x | 过程值 | ScaledInput |
TI | 积分作用时间 | Retain.CtrlParams.Heat.Ti Retain.CtrlParams.Cool.Ti |
TD | 微分作用时间 | Retain.CtrlParams.Heat.Td Retain.CtrlParams.Cool.Td |
a | 微分作用延迟系数 (微分延迟 TI = a × TD) |
Retain.CtrlParams.Heat.TdFiltRatio Retain.CtrlParams.Cool.TdFiltRatio |
c | 微分作用权重 | Retain.CtrlParams.Heat.DWeighting Retain.CtrlParams.Cool.DWeighting |
DeadZone | 死区宽度 | Retain.CtrlParams.Heat.DeadZone Retain.CtrlParams.Cool.DeadZone |
ControlZone | 控制区宽度 | Retain.CtrlParams.Heat.ControlZone Retain.CtrlParams.Cool.ControlZone |
表 1. PID 参数
比例增益
积分作用时间
微分作用时间
微分延迟系数
比例作用权重
微分作用权重
PID 指令块的参数分为两部分,输入参数与输出参数。其指令块的视图分为扩展视图与集成视图,在不同的视图下所能看见的参数是不一样的,如图 3 所示。
图 3. 集成视图和扩展视图
PID_Temp 的输入参数包括 PID 的设定值,过程值,手自动切换,故障确认,模式切换和 PID 重启等参数,如表 2 所示:
参数 | 数据类型 | 说明 |
---|---|---|
Setpoint | Real | PID 控制器在自动模式下的设定值 |
Input | Real | PID 控制器的反馈值(工程量) |
Input_PER | Int | PID 控制器的反馈值(模拟量) |
Disturbance | Real | 扰动变量或预控制值 |
ManualEnable | Bool |
|
ManualValue | Real | 该值在手动模式下使用,用作 PID 输出值(PidOutputSum)。标定后的输出值取决于输出标定的设置。 当激活制冷输出时:
取值范围必须满足:
|
ErrorAck | Bool | FALSE -> TRUE 上升沿时,错误确认,清除已经离开的错误信息。 |
Reset | Bool |
|
ModeActivate | Bool | FALSE -> TRUE 上升沿,PID_Temp 将切换到保存在 Mode 参数中的工作模式。 |
表 2. 输入参数
PID_Temp 的输出参数包括 PID 的加热和制冷输出值(REAL、模拟量、PWM),标定的过程值,限位报警(设定值、过程值),PID 的当前工作模式,错误状态及错误代码,如表 3 所示:
参数 | 数据类型 | 说明 |
---|---|---|
ScaledInput | Real | 标定的过程值 |
OutputHeat | Real | PID 的加热输出值 (REAL 形式) |
OutputCool | Real | PID 的制冷输出值 (REAL 形式) |
OutputHeat_PER | Int | PID 的加热输出值(模拟量) |
OutputCool_PER | Int | PID 的制冷输出值(模拟量) |
OutputHeat_PWM | Bool | PID 的加热输出值(脉宽调制) |
OutputCool_PWM | Bool | PID 的制冷输出值(脉宽调制) |
SetpointLimit_H | Bool | 如果 SetpointLimit_H = TRUE,则说明达到了设定值的绝对上限 (Setpoint ≥ Config.SetpointUpperLimit) 或者 Setpoint ≥ Config.InputUpperLimit。 设定值上限是 Config.SetpointUpperLimit 和 Config.InputUpperLimit 中的较小值。 |
SetpointLimit_L | Bool | 如果 SetpointLimit_L = TRUE,则说明已达到设定值的绝对下限 (Setpoint ≤ Config.SetpointLowerLimit) 或者 Setpoint ≤ Config.InputLowerLimit。 设定值下限是 Config.SetpointLowerLimit 和 Config.InputLowerLimit 中的较大值。 |
InputWarning_H | Bool | 如果 InputWarning_H = TRUE,则说明过程值已达到或超出警告上限 (ScaledInput ≥ Config.InputUpperWarning)。 |
InputWarning_L | Bool | 如果 InputWarning_L = TRUE,则说明过程值已达到或低于警告下限 (ScaledInput ≤ Config.InputLowerWarning)。 |
State | Int |
State 参数显示了 PID 控制器的当前工作模式。 可使用输入参数 Mode 和 ModeActivate 处的上升沿更改工作模式。
|
Error | Bool | 如果 Error = TRUE,则此周期内至少有一条错误消息处于未决状态。 |
ErrorBits | DWord | ErrorBits 参数显示了处于未决状态的错误消息。 ErrorBits 具有保持性,通过 Reset 或 ErrorAck 的上升沿来复位。 |
表 3. 输出参数
注意:
PID_Temp 的输入输出参数如表 4 所示:
参数 | 数据类型 | 说明 |
---|---|---|
Mode | Int |
指定 PID_Temp 将转换到的工作模式,具有断电保持特性,由信号边沿触发:
|
Master | DWord | 级联控制的接口 如果是作为级联中的从控制器 (Config.Cascade.IsSlave = TRUE),则把对应的主控制器的 Slave 参数分配分配从控制器的 Master 参数。 各个位的功能:
|
Slave | DWord | 级联控制的接口 使用此接口与主控制器交换关于从控制器的工作模式、限值和替代设定值的信息。 |
表 4. 输入输出参数
注意:
当 ManualEnable = TRUE,无法通过 ModeActivate 的上升沿或使用调试对话框来更改工作模式。
当 PID 出现错误时,通过查询 ErrorBits 获得 PID 的错误信息,如表 5 所示。
错误代码(DW#16#) | 说明 |
---|---|
00000000 | 没有任何错误 |
00000001 | 参数 "Input" 超出了过程值限值的范围,正常范围应为 Config.InputLowerLimit < Input < Config.InputUpperLimit 。 |
00000002 | 参数 "Input_PER" 的值无效。请检查模拟量输入是否有处于未决状态的错误。 |
00000004 | 精确调节期间出错。过程值无法保持振荡状态。 |
00000008 | 预调节启动时出错。过程值过于接近或大于设定值。启动精确调节。 |
00000010 | 调节期间设定值发生更改。可在 CancelTuningLevel 变量中设置允许的设定值波动。 |
00000020 | 精确调节期间不允许预调节。 |
00000040 | 预调节期间出错。制冷无法减小过程值。 |
00000100 | 精确调节期间的错误导致生成无效参数。 |
00000200 | 参数 "Input"的值无效:值的数字格式无效。 |
00000400 | 输出值计算失败。请检查 PID 参数。 |
00000800 | 采样时间错误:循环中断 OB 的采样时间内没有调用 PID_Temp。 |
00001000 | 参数 "Setpoint"或 "SubstituteSetpoint"的值无效,值的数字格式无效。 |
00010000 | ManualValue 参数的值无效,值的数字格式无效。 |
00020000 | 变量 SubstituteOutput 的值无效,值的数字格式无效。这时,PID_Temp 使用输出值下限作为输出值。 |
00040000 | Disturbance 参数的值无效,值的数字格式无效。 |
00200000 | 级联中的主控制器出错:Slaves 未处于自动模式,或已激活替代设定值,妨碍了主控制器的调节。 |
00400000 | 在制冷过程处于激活状态时不允许对加热过程进行预调节。 |
00800000 | 过程值必须接近设定值才能启动预调节制冷。 |
01000000 | 调节启动时出错:Heat.EnableTuning 和 Cool.EnableTuning 未设置或与组态不匹配。 |
02000000 | 预调节制冷出错:要求已经成功完成预调节加热。 |
04000000 | 启动精确调节时出错:Heat.EnableTuning 和 Cool.EnableTuning 不能同时设置。 |
08000000 | 计算 PID 参数时出错,导致生成无效的参数。无效参数被丢弃,原始 PID 参数保持不变。 |
表 5. 错误代码定义
注意:如果多个错误同时处于待决状态,将通过二进制加法显示 ErrorBits 的值。 例如,显示 ErrorBits = 00000003H 表示错误 00000001H 和 00000002H 同时处于待决状态。