增/减累加器 (UPDN)
此信息适用于
CompactLogix
5370、ControlLogix
5570、Compact GuardLogix
5370、GuardLogix
5570、CompactLogix
5380、ControlLogix
5580 和 ControlLogix 5590 控制器。UPDN 指令用于将一个输入加到累加值中,将另一个输入从累加值中减掉。
可用语言
梯形图
此指令不可用于梯形图中。
功能块

结构化文本
UPDN(UPDN_tag)
操作数
功能块
操作数 | 类型 | 格式 | 说明 |
|---|---|---|---|
UPDN tag | UP_DOWN_ACCUM | 结构 | UPDN 结构 |
UPDN 结构
输入参数 | 数据类型 | 说明 |
|---|---|---|
EnableIn | BOOL | 启用输入。如果此参数清零,指令不会执行,也不会更新输出。 默认置位。 |
Initialize | BOOL | 指令的初始化输入请求。当 Initialize 置位时,指令会将 Out 和内部累加器设置为 InitialValue。 默认清零。 |
InitialValue | REAL | 指令的初始值。 有效值 = 任意浮点值 默认值 = 0.0 |
InPlus | REAL | 输入被添加到累加器。 有效值 = 任意浮点值 默认值 = 0.0 |
InMinus | REAL | 累加器减去输入。 有效值 = 任意浮点值 默认值 = 0.0 |
Hold | BOOL | 指令的保持输入请求。当 Hold 置位并且 Initialize 清零时,Out 保持不变。 默认清零。 |
输出参数 | 数据类型 | 说明 |
|---|---|---|
EnableOut | BOOL | 指示指令是否处于启用状态。如果 Out 溢出,则设置为假。 |
Out | REAL | 指令的输出。 |
结构化文本
操作数 | 类型 | 格式 | 说明 |
|---|---|---|---|
UPDN tag | UP_DOWN_ACCUM | 结构 | UPDN 结构 |
有关结构化文本中表达式语法的更多信息,请参见“结构化文本语法”部分。
说明
UPDN 指令按以下算法执行。
条件 | Action |
|---|---|
Hold 被清零,且 Initialize 被清零 | AccumValue n = AccumValue n-1 + InPlus - InMinus Out = AccumValue n |
Hold 被置位,且 Initialize 被清零 | AccumValue n = AccumValue n-1 Out = AccumValue n |
Initialize 置位 | AccumValue n = InitialValueOut = AccumValue n |
影响数学状态标志
否
故障条件
在以下情况下发生轻微故障 | 故障类型 | 故障代码 |
|---|---|---|
功能已启用并检测到溢出。 | 4 | 4 |
有关操作数相关的故障,请参阅 通用属性。
执行
功能块
条件/状态 | 执行的操作 |
|---|---|
预扫描 | EnableIn 和 EnableOut 位设置为假。 |
Tag.EnableIn 为假 | EnableIn 和 EnableOut 位设置为假。 |
Tag.EnableIn 为真 | EnableIn 和 EnableOut 位设置为真。 指令执行。 |
指令首次运行 | 将内部累加器设置为零。 |
指令首次扫描 | 不适用 |
后扫描 | EnableIn 和 EnableOut 位设置为假。 |
结构化文本
条件/状态 | 执行的操作 |
|---|---|
预扫描 | 请参见“功能块”表中的“预扫描”行。 |
正常执行 | 请参见“功能块”表中的“Tag.EnableIn 为真”行。 |
后扫描 | 请参见“功能块”表中的“后扫描”行。 |
示例
UPDN 指令会整合两次扫描之间的计数。该指令既可用于简单的定位应用,也可用于需要简单积分来根据过程不同反馈信号生成累加值的其他应用类型。在以下示例中,Initial_Position 设置为零,而 Differential_Position_Plus 和 Differential_Position_Minus 的值在一段时间内不断变化。若使用此指令,InPlus 和 InMinus 还可接受负值。

功能块
微分指令用于计算信号随时间的变化量,以单位/秒表示。该指令通常用于闭环控制,从而在调节器中创建前馈路径,对具有大惯量的过程进行补偿。

结构化文本
UPDN_01.Initialize := Initialize_Position;
UPDN_01.InitialValue := Initial_Position;
UPDN_01.InPlus := Differential_Position_Plus;
UPDN_01.InMinus := Differential_Position_Minus;
UPDN(UPDN_01);
Position_Integrated := UPDN_01.Out;
提供反馈