二阶控制器 (SOC)
此信息适用于
CompactLogix
5370、ControlLogix
5570、Compact GuardLogix
5370、GuardLogix
5570、CompactLogix
5380、ControlLogix
5580 和 ControlLogix 5590 控制器。SOC 指令专用于闭环控制系统中,与 PI 指令的工作方式相似。SOC 指令具有增益项、一阶滞后和二阶超前。
可用语言
梯形图
此指令不可用于梯形图中。
功能块

结构化文本
SOC(SOC_tag);
操作数
功能块
操作数 | 类型 | 格式 | 说明 |
|---|---|---|---|
SOC tag | SEC_ORDER_CONTROLLER | 结构 | SOC 结构 |
SEC_ORDER_CONTROLLER 结构
输入参数 | 数据类型 | 说明 |
|---|---|---|
EnableIn | BOOL | 启用输入。如果此参数清零,指令不会执行,也不会更新输出。 默认置位。 |
In | REAL | 指令的模拟信号输入。 有效值 = 任意浮点值 默认值 = 0.0 |
Initialize | BOOL | 指令初始化命令。置位时,Out 和内部积分器设为等于 InitialValue 的值。 默认清零。 |
InitialValue | REAL | 输入初始值。Initialize 置位时,Out 和积分器设为 InitialValue 的值。使用 HighLimit 和 LowLimit 来限制 InitialValue 的值。 有效值 = 任意浮点值 默认值 = 0.0 |
Gain | REAL | 指令的比例增益。如果值超出范围,指令会对值进行限制,并置位 Status 中的相应位。 有效值 = 大于 0.0 的任意浮点数。 默认值 = 最小正浮点值 |
WLag | REAL | 一阶滞后截止频率,单位为弧度/秒。如果值超出范围,指令会对值进行限制,并置位 Status 中的相应位。 有效值 = 有关有效范围,请参阅下面的“说明”部分 默认值 = 0.0 |
WLead | REAL | 二阶超前截止频率,单位为弧度/秒。如果值超出范围,指令会对值进行限制,并置位 Status 中的相应位。 有效值 = 有关有效范围,请参阅下面的“说明”部分 默认值 = 0.0 |
ZetaLead | REAL | 二阶超前阻尼系数。如果值超出范围,指令会对值进行限制,并置位 Status 中的相应位。 有效值 = 0.0 至 10.0 默认值 = 0.0 |
HighLimit | REAL | 上限值。这是 Out 的最大值。如果 HighLimit LowLimit,则指令将设置 HighAlarm 和 LowAlarm,将 Status 中的相应位置位,并将 Out 设置为 LowLimit。有效值 = LowLimit < HighLimit 最大正浮点值默认值 = 最大正浮点值 |
LowLimit | REAL | 下限值。这是 Out 的最小值。如果 HighLimit LowLimit,则指令会将 HighAlarm 和 LowAlarm 置位,将 Status 中的相应位置位,并设置 Out = LowLimit。有效值 = 最大负浮点值 LowLimit < HighLimit默认值 = 最大负浮点值 |
HoldHigh | BOOL | 保持高位命令。置位时,不允许内部积分器的值增大。 默认清零。 |
HoldLow | BOOL | 保持低位命令。置位时,不允许内部积分器的值减小。 默认清零。 |
TimingMode | DINT | 选择时序执行模式。 0 = 周期性模式 1 = 过采样模式 2 = 实时采样模式 有关时序模式的更多信息,请参见“功能块属性”部分。 有效值 = 0 至 2 默认值 = 0 |
OversampleDT | REAL | 过采样模式的执行时间。 有效值 = 0 到 4194.303 秒 默认值 = 0 |
RTSTime | DINT | 实时采样模式的模块更新周期 有效值 = 1 至 32,767 ms 默认值 = 1 |
RTSTimeStamp | DINT | 实时采样模式的模块时戳值。 有效值 = 0 至 32,767 ms 默认值 = 0 |
输出参数 | 数据类型 | 说明 |
|---|---|---|
EnableOut | BOOL | 指示指令是否处于启用状态。如果 Out 溢出,则设置为假。 |
Out | REAL | 计算所得的算法输出。 |
HighAlarm | BOOL | 上限报警指示器。当 Out 的计算值 HighLimit 且输出强制设为 HighLimit 时置位。 |
LowAlarm | BOOL | 下限报警指示器。当 Out 的计算值 LowLimit 且输出强制设为 LowLimit 时置位。 |
DeltaT | REAL | 两次更新间隔的时间。控制算法计算过程输出所用的时间(秒)。 |
Status | DINT | 功能块的状态。 |
InstructFault (Status.0) | BOOL | 该指令检测到以下执行错误之一。这不是轻微或严重的控制器错误。检查其他状态位以确定发生的情况。 |
GainInv (Status.1) | BOOL | 增益 < 最小正浮点值。 |
WLagInv (Status.2) | BOOL | WLag > 最大值或 WLag < 最小值。 |
WLeadInv (Status.3) | BOOL | WLead > 最大值或 WLead < 最小值。 |
ZetaLeadInv (Status.4) | BOOL | ZetaLead > 最大值或 ZetaLead < 最小值。 |
HighLowLimsInv (Status.5) | BOOL | HighLimit LowLimit。 |
TimingModeInv (Status.27) | BOOL | 计时模式无效。 有关时序模式的更多信息,请参见“功能块属性”部分。 |
RTSMissed (Status.28) | BOOL | 仅用于实时采样模式。当 ABS | DeltaT - RTSTime | > 1(0.001 秒)时置位。 |
RTSTimeInv (Satus.29) | BOOL | RTSTime 值无效。 |
RTSTimeStampInv (Status.30) | BOOL | RTSTimeStamp 值无效。 |
DeltaT (Status.31) | BOOL | DeltaT 值无效。 |
结构化文本
操作数 | 类型 | 格式 | 说明 |
|---|---|---|---|
SOC tag | SEC_ORDER_CONTROLLER | 结构 | SOC 结构 |
有关结构化文本中表达式语法的更多信息,请参见“结构化文本语法”部分。
说明
SOC 指令具有增益项、一阶滞后和二阶超前。滞后的频率可以调整,并且超前的频率和阻尼也可以调整。二阶超前零点对可以是复数(阻尼小于 1)或实数(阻尼
1)。SOC 指令专用于恒速扫描的任务中。
1)。SOC 指令专用于恒速扫描的任务中。SOC 指令使用以下拉普拉斯变换方程。

参数限制
以下 SOC 参数对有效值具有以下限值。
参数 | Limit |
|---|---|
WLead | ![]() 其中,DeltaT 以秒为单位。 |
WLag | ![]() 其中,DeltaT 以秒为单位。 |
ZetaLead | 下限 = 0.0 上限 = 10.0 |
一旦计算出的输出值无效 (NAN),指令会将 Out 设为无效值。内部参数不会更新。在每次的后续扫描过程中,都会使用上一次扫描(输出有效)的内部参数计算输出。
限制
该指令基于 Hold 输入的状态停止积分饱和。
若: | 则: |
|---|---|
HoldHigh 置位且 Integrator > Integrator n-1 | Integrator = Integrator n-1 |
HoldLow 置位且 Integrator < Integrator n-1 | Integrator = Integrator n-1 |
指令还会根据 HighLimit 和 LowLimit 值停止积分器的积分饱和。
若: | 则: |
|---|---|
Integrator > IntegratorHighLimit | Integrator = IntegratorHighLimit |
Integrator < IntegratorLowLimit | Integrator = IntegratorLowLimit |
其中:

指令还会根据 HighLimit 和 LowLimit 值限制 Out 值。
若: | 则: |
|---|---|
HighLimit LowLimit | Out = LowLimit Integrator = IntegratorLowLimit HighLowLimsInv 已设置 HighAlarm 置位 LowAlarm 置位 |
Out HighLimit | Out = HighLimit IntegratorLowLimit n-1 HighAlarm 置位 |
Out LowLimit | Out = LowLimit Integrator = Integrator n-1 LowAlarm 置位 |
影响数学状态标志
否
严重/轻微故障
在以下情况下发生轻微故障 | 故障类型 | 故障代码 |
|---|---|---|
功能已启用并检测到溢出。 | 4 | 4 |
有关操作数相关的故障,请参阅 通用属性。
执行
提醒事项:
在结构化文本中,EnableIn 在普通扫描期间始终为真。因此,如果指令处于由逻辑激活的控制路径中,指令将会执行。有关所有功能块指令的更多详细信息(包括定义和常规行为),请参阅出版物 1756-RM006G-EN-P《高级过程控制和驱动器指令》。
条件/状态 | 执行的操作 |
|---|---|
预扫描 | 不执行任何操作。 |
后扫描 | 不执行任何操作。 |
条件仅在普通扫描模式期间才会出现
条件/状态 | 执行的操作 |
|---|---|
指令首次运行 | 内部参数和 Out 设置为 0。强制重新计算公式系数。不执行主算法,但是会验证输入参数。 |
指令首次扫描 | 内部参数和 Out 设置为 0。强制重新计算公式系数。不执行主算法,但是会验证输入参数。 |
EnableIn 为假 | .EnableOut 位设置为假。 |
EnableIn 为真 | .EnableOut 位设置为真。 将执行指令的主算法,并更新输出。 |
结构化文本
条件/状态 | 执行的操作 |
|---|---|
预扫描 | 请参见“功能块”表中的“预扫描”行。 |
正常执行 | 请参见“功能块”表中的“Tag.EnableIn 为真”行。 |
后扫描 | 请参见“功能块”表中的“后扫描”行。 |
示例
SOC 指令是一个专用的功能块,用于在两个区域之间通过弹簧质点系统传递能量的应用中。在这类应用中,过程本身的频率响应通常表示为如下所示的波德图(图 A):

SOC 指令用于实现一阶滞后滤波器,后跟 PID 控制器,从而实现包含积分、二阶零点(超前)和一阶极点(滞后)的传递函数。使用该指令可简化 PID 调谐,因为调节项的组织方式可以确保 WLead 和 ZLead (而非 Kp、Ki 和 Kd 值)作为 SOC 指令的输入。SOC 指令的传递函数如下:

其相应的波特图如图 B 所示。

SOC 指令可用于扭矩或张力调节应用中,其中采用测力传感器作为反馈,调节系统的输出直接作用于驱动器的扭矩(电流)次回路。在诸多此类应用中,从机械角度而言受控系统都是欠阻尼的,并且具有一个固有频率,由于系统本身会通过反馈设备发生反射,因此难以稳定。

使用 SOC 指令可简化 PID 调节,因为调节项的组织方式可以确保 WLead 和 ZLead (而非 Kp、Ki 和 Kd 值)作为 SOC 指令的输入。通过这种方式,可以更轻松地根据实际过程调整和设置控制器/调节器的截止频率。启动期间,可根据经验预估或在现场测量系统的固有频率和阻尼系数。然后,可以根据过程的特征调整调节器的参数,从而对最终过程进行更多增益以及更加稳定的控制。

在上述系统中,如果将 Wlead 设置为与系统固有频率相等,将 Wlag 设置为远大于所需分频频率(> 5 倍的分频频率),则产生的系统响应显示如下:

在实际应用中,使用和设置此指令的步骤包括:
识别受控过程的类型。如果系统对阶跃函数的响应导致高度振铃,或者该响应的特征可以通过上述过程曲线来表示,则该块可以提供稳定控制所需的调节特征。
确定系统/过程的固有频率。既可以根据经验预估,也可以进行现场测量。调整 WLead,使其与过程本身的固有频率相对应或稍微超前。
调整阻尼系数 Zlead,使其消除系统中存在的任何超调。
将 WLag 调整为远大于系统分频频率(> 5 倍),开始增大总增益以达到
功能块

结构化文本
SOC_01.In := Process_Error;
SOC_01.Initialize := Regulator_Enable_Not;
SOC_01.Gain := Gain;
SOC_01.WLag := Lag_Radians_per_sec;
SOC_01.WLead := Lead_radians_per_sec;
SOC_01.ZetaLead := Damping_Factor;
SOC_01.HighLimit := Max_Out;
SOC_01.LowLimit := Min_Out;
SOC(SOC_01);
SOC_Out := SOC_01.Out;
提供反馈
LowLimit,则指令将设置 HighAlarm 和 LowAlarm,将 Status 中的相应位置位,并将 Out 设置为 LowLimit。
