移动标准偏差 (MSTD)
此信息适用于 CompactLogix 5370、ControlLogix 5570、CompactGuardLogix 5370、GuardLogix 5570、CompactGuardLogix 5380、CompactLogix 5380、ControlLogix 5580、GuardLogix 5580 和 ControlLogix 5590 控制器。
移动标准偏差 (MSTD) 指令可计算 In 信号的移动标准偏差和平均值。
可用语言
梯形图
此指令不可用于梯形图逻辑中。
功能块

结构化文本
MSTD(MSTD_tag, StorageArray);
操作数
功能块
操作数 | 类型 | 格式 | 说明 |
block tag | MOVING_STD_DEV | 结构 | MSTD 结构 |
StorageArray | REAL | 数组 | 用于保留 In 样本。此数组的大小至少应与 NumberOfSamples 相当。 |
MOVING_STD_DEV 结构
输入参数 | 数据类型 | 说明 |
EnableIn | BOOL | 启用输入。如果此参数清零,指令不会执行,也不会更新输出。 默认置位。 |
In | REAL | 指令的模拟信号输入。 有效值 = 任意浮点值 默认值 = 0.0 |
InFault | BOOL | 输入不良状况指示器。如果 In 是从模拟输入读取的,则 InFault 通常由模拟输入的故障状态控制。此参数置位时,InFault 指示输入信号存在错误,指令会将 Status 中的相应位置位,并使 Out 和 Average 保持其当前值。当 InFault 由置位跳变为清零时,指令会初始化平均值算法,然后继续执行。 默认清零。 |
Initialize | BOOL | 指令的初始化输入。此参数置位时,指令会设置 Out = 0.0 且 Average = In,但如果 InFault 也置位,指令会使 Out 和 Average 保持其当前值。当 Initialize 由置位跳变为清零时,指令会初始化标准偏差算法,然后继续执行。 默认清零。 |
SampleEnable | BOOL | In 采样使能。此参数置位时,指令会将 In 的值输入到存储数组中并计算新的 Out 和 Average 值。当 SampleEnable 清零且 Initialize 清零时,指令会使 Out 和 Average 保持其当前值。 默认清零。 |
NumberOfSamples | DINT | 计算中要使用的样本数。如果该值无效,指令会将 Status 中的相应位置位,并使 Out 和 Average 保持其当前值。当 NumberOfSamples 变为有效后,指令会初始化标准偏差算法,然后继续执行。 有效值 = 1 到存储数组的大小 默认值 = 1 |
输出参数 | 数据类型 | 说明 |
EnableOut | BOOL | 指示指令是否处于启用状态。如果 Out 溢出,则设置为假。 |
Out | REAL | 计算所得的算法输出。 |
平均值 | REAL | 计算出的算法平均值。 |
状态 | DINT | 功能块的状态。 |
InstructFault (Status.0) | BOOL | 该指令检测到以下执行错误之一。这不是轻微或严重的控制器错误。检查其他状态位以确定发生的情况。 |
InFaulted (Status.1) | BOOL | In 状况不良。InFault 置位。 |
NumberOfSampInv (Status.2) | BOOL | NumberOfSamples 无效或与数组大小不相符。 |
结构化文本
操作数 | 类型 | 格式 | 说明 |
block tag | MOVING_STD_DEV | 结构 | MSTD 结构 |
StorageArray | REAL | 数组 | 用于保留 In 样本。此数组的大小至少应与 NumberOfSamples 相当。 |
有关结构化文本中表达式语法的详细信息,请参阅结构化文本语法。
说明
MSTD 指令支持任何输入队列长度。每次扫描时,如果 SampleEnable 置位,指令会将 In 值输入到存储数组中。当 storage 数组变满后,每输入一个新 In 值,就将最早的条目从数组中删除。
MSTD 指令使用以下公式计算输出值:
条件 | Action |
|---|---|
平均值 | ![]() |
Out | ![]() |
指令不会将无效的 In 值(NAN 或
INF)放入存储数组。当 In 无效时,指令会设置 Out = In,设置 Average = In,并记录轻微溢出故障(如果已启用此报告功能)。当 In 变为有效后,指令会初始化标准偏差算法,然后继续执行。
INF)放入存储数组。当 In 无效时,指令会设置 Out = In,设置 Average = In,并记录轻微溢出故障(如果已启用此报告功能)。当 In 变为有效后,指令会初始化标准偏差算法,然后继续执行。可在运行时更改 NumberOfSamples 参数。如果增加样本数,指令会以增量方式处理从当前样本量到新样本量的新数据。如果减少样本数,指令会重新计算从样本数组起点直到新 NumberOfSamples 值的标准偏差。
初始化标准偏差算法
特定情况下(例如指令首次扫描和指令首次运行),需要由指令对标准偏差算法进行初始化。出现这种情况时,指令会将 StorageArray 视为空,并以增量方式处理从 1 到 NumberOfSamples 值对应的样本。例如:

影响数学状态标志
否
严重/轻微故障
没有特定于此指令的故障。有关操作数相关的故障,请参阅 常用属性。
执行
功能块
条件/状态 | 执行的操作 |
预扫描 | EnableIn 和 EnableOut 位设置为假。 |
Tag.EnableIn 为假 | EnableIn 和 EnableOut 位设置为假。 |
Tag.EnableIn 为真 | EnableIn 和 EnableOut 位设置为真。 指令执行。 |
指令首次运行 | 初始化先前的 Output 和 Average。 |
指令首次扫描 | 将 Out 初始化为零。 将 Average 初始化为 Input 值 初始化指令算法。 |
后扫描 | EnableIn 和 EnableOut 位设置为假。 |
结构化文本
在结构化文本中,EnableIn 在普通扫描期间始终为真。如果指令处于由逻辑激活的控制路径中,指令将会执行。
条件/状态 | 执行的操作 |
预扫描 | 请参见“功能块”表中的“预扫描”行。 |
正常执行 | 请参见“功能块”表中的“Tag.EnableIn 为真”行。 |
后扫描 | 请参见“功能块”表中的“后扫描”行。 |
示例
每次扫描时,如果 SampleEnable 置位,指令会将 In 值放入存储数组中,并计算存储数组中各数值的标准偏差,然后将结果放入 Out。Out 将成为 function_block_C 的输入参数。
功能块

结构化文本
MSTD_01.In := input_value;
MSTD_01.SampleEnable := enable_sample;
MSTD(MSTD_01,storage);
deviation := MSTD_01.Out;
提供反馈

