增强型选择 (ESEL)
此信息适用于
CompactLogix
5370、ControlLogix
5570、Compact GuardLogix
5370、GuardLogix
5570、Compact GuardLogix
5380、CompactLogix
5380、ControlLogix
5580、GuardLogix
5580 和 ControlLogix 5590 控制器。增强型选择 (ESEL) 指令用于在多达六路输入中选择一路输入。选项包括:
- 手动选择(由操作员或程序选择)
- 最大值选择
- 最小值选择
- 中位数选择
- 平均值(平均数)选择
可用语言
梯形图
此指令不可用于梯形图逻辑中。
功能块

结构化文本
ESEL(ESEL_tag);
操作数
功能块
操作数 | 类型 | 格式 | 说明 |
ESEL 标签 | SELECT_ENHANCED | 结构 | ESEL 结构 |
SELECT_ENHANCED 结构
输入参数 | 数据类型 | 说明 |
EnableIn | BOOL | 启用输入。如果为假,指令不会执行,也不会更新输出。 默认值为真。 |
In1 | REAL | 指令的第一个模拟信号输入。 有效值 = 任意浮点值 默认值 = 0.0 |
In2 | REAL | 指令的第二个模拟信号输入。 有效值 = 任意浮点值 默认值 = 0.0 |
In3 | REAL | 指令的第三个模拟信号输入。 有效值 = 任意浮点值 默认值 = 0.0 |
In4 | REAL | 指令的第四个模拟信号输入。 有效值 = 任意浮点值 默认值 = 0.0 |
In5 | REAL | 指令的第五个模拟信号输入。 有效值 = 任意浮点值 默认值 = 0.0 |
In6 | REAL | 指令的第六个模拟信号输入。 有效值 = 任意浮点值 默认值 = 0.0 |
In1Fault | BOOL | In1 不良状况指示器。如果 In1 从模拟输入读取,则 In1Fault 通常由模拟输入的故障状态控制。如果所有 InnFault 输入均为真,指令会将 Status 中的相应位置位,不执行控制算法,并且不会更新 Out。 默认值 = 假 |
In2Fault | BOOL | In2 不良状况指示器。如果 In2 从模拟输入读取,则 In2Fault 通常由模拟输入的故障状态控制。如果所有 InnFault 输入均为真,指令会将 Status 中的相应位置位,不执行控制算法,并且不会更新 Out。 默认值 = 假 |
In3Fault | BOOL | In3 不良状况指示器。如果 In3 从模拟输入读取,则 In3Fault 通常由模拟输入的故障状态控制。如果所有 InnFault 输入均为真,指令会将 Status 中的相应位置位,不执行控制算法,并且不会更新 Out。 默认值 = 假 |
In4Fault | BOOL | In4 不良状况指示器。如果 In4 从模拟输入读取,则 In4Fault 通常由模拟输入的故障状态控制。如果所有 InnFault 输入均为真,指令会将 Status 中的相应位置位,不执行控制算法,并且不会更新 Out。 默认值 = 假 |
In5Fault | BOOL | In5 不良状况指示器。如果 In5 从模拟输入读取,则 In5Fault 通常由模拟输入的故障状态控制。如果所有 InnFault 输入均为真,指令会将 Status 中的相应位置位,不执行控制算法,并且不会更新 Out。 默认值 = 假 |
In6Fault | BOOL | In6 不良状况指示器。如果 In6 从模拟输入读取,则 In6Fault 通常由模拟输入的故障状态控制。如果所有 InnFault 输入均为真,指令会将 Status 中的相应位置位,不执行控制算法,并且不会更新 Out。 默认值 = 假 |
InsUsed | DINT | 使用的输入数。此参数定义指令使用的输入数。在最大值选择、最小值选择、中位数选择和平均值选择模式下,指令仅考虑 In1 到 In InsUsed 。如果该值无效,指令会将 Status 中的相应位置位。如果 InsUsed 无效、指令未处于手动选择模式并且 Override 清零,指令不会更新 Out。有效值 = 1 至 6 默认值 = 1 |
Selector Mode | DINT | 选择器模式输入。该值将决定指令的操作。 0 = 手动选择 1 = 最大值选择 2 = 最小值选择 3 = 中位数选择 4 = 平均值选择 如果该值无效,指令会将 Status 中的相应位置位,并且不更新 Out。 有效值 = 0 至 4 默认值 = 0 |
ProgSelector | DINT | 程序模式下的选择器输入。选择器模式为手动选择并且指令处于程序控制模式时,由 ProgSelector 决定将哪路输入 (In1-In6) 送入 Out。如果 ProgSelector = 0,指令将不更新 Out。如果 ProgSelector 无效,指令会将 Status 中的相应位置位。如果该参数无效且指令处于程序控制模式,并且选择器模式为手动选择或者 Override 已置位,则指令不会更新。Out。 有效值 = 0 至 6 默认值 = 0 |
OperSelector | DINT | 操作员模式下的选择器输入。选择器模式为手动选择并且指令处于操作员控制模式时,由 OperSelector 决定将哪路输入 (In1-In6) 送入 Out。如果 OperSelector = 0,指令将不更新 Out。如果 OperSelector 无效,指令会将 Status 中的相应位置位。如果该参数无效且指令处于操作员控制模式,并且选择器模式为手动选择或者 Override 已置位,则指令不会更新 Out。 有效值 = 0 至 6 默认值 = 0 |
ProgProgReq | BOOL | 程序发出的程序控制请求。由用户程序设置为真可请求程序控制模式。如果 ProgOperReq 为真,则忽略该值。若此参数保持为真,并且 ProgOperReq 保持为假,会将指令锁定在程序控制模式。 默认值为假。 |
ProgOperReq | BOOL | 程序发出的操作员控制请求。由用户程序设置为真可请求操作员控制模式。若将此参数保持为真,会将该指令锁定在操作员控制模式。 默认值为假。 |
ProgOverrideReq | BOOL | 程序超控模式请求。由用户程序设置为真可请求进入超控模式。在超控模式下,指令将起到手动选择的作用。 默认值为假。 |
OperProgReq | BOOL | 操作员发出的程序控制请求。由操作员界面设置为真以请求程序控制模式。指令将该输入设置为假。 默认值为假。 |
OperOperReq | BOOL | 操作员发出的操作员控制请求。由操作员界面设置为真可请求操作员控制模式。指令将该输入设置为假。 默认值为假。 |
ProgValueReset | BOOL | 将程序控制值复位。该值为真时,每次执行指令时,所有程序请求输入都将设置为假。 默认值为假。 |
输出参数 | 数据类型 | 说明 |
EnableOut | BOOL | 指示指令是否处于启用状态。如果 Out 溢出,则设置为假。 |
Out | REAL | 计算所得的算法输出。 |
SelectedIn | DINT | 所选输入的编号。指令使用该值指示当前送入输出的是哪路输入。如果选择器模式为平均值选择,指令会设置 SelectedIn = 0。 |
ProgOper | BOOL | 程序/操作员控制指示器。在程序控制模式下设置为真。在操作员控制模式下清除为 false。 |
覆盖 | BOOL | 超控模式。指令处于超控模式时设置为真。 |
状态 | DINT | 功能块的状态。 |
InstructFault (Status.0) | BOOL | 该指令检测到以下执行错误之一。这不是轻微或严重的控制器错误。检查其他状态位以确定发生的情况。 |
InsFaulted (Status.1) | BOOL | 所有使用的 Inn 输入的 InnFault 输入均为真。 |
InsUsedInv (Status.2) | BOOL | InsUsed 值无效。 |
SelectorModeInv (Status.3) | BOOL | SelectorMode 值无效。 |
ProgSelectorInv (Status.4) | BOOL | ProgSelector 值无效。 |
OperSelectorInv (Status.5) | BOOL | OperSelector 值无效。 |
结构化文本
操作数 | 类型 | 格式 | 说明 |
ESEL 标签 | SELECT_ENHANCED | 结构 | ESEL 结构 |
有关结构化文本中表达式语法的详细信息,请参见“结构化文本语法”部分。
说明
ESEL 指令的工作方式如下:
条件 | Action |
SelectorMode = 0 (手动选择) 或 Override 为真、ProgOper 为假,且 OperSelector 不等于 0 | Out = In[OperSelector] SelectedIn = OperSelector |
SelectorMode = 0 (手动选择) 或 Override 为真、ProgOper 为真,且 ProgSelector 不等于 0 | Out = In[ProgSelector] SelectedIn = ProgSelector |
SelectorMode = 1(最大值选择)且 Override 为 false | Out = In[InsUsed] 的最大值 SelectedIn = 最大输入值对应的索引 |
SelectorMode = 2(最小值选择)且 Override 为 false | Out = In[InsUsed] 的最小值 SelectedIn = 最小输入值对应的索引 |
SelectorMode = 3(中位数选择)且 Override 为 false | Out = In[InsUsed] 的中位数 SelectedIn = 输入值中位数对应的索引 |
SelectorMode = 4(平均值选择)且 Override 为 false | Out = In[InsUsed] 的平均值 SelectedIn = 0 |
当 SelectorMode 为 1 到 4 之间的值时,如果任何输入出现不良状况,选择时将会忽略该不良输入。例如,如果 SelectorMode = 1(最大值选择),并且 In6 的值最大但状况不良,则指令会将状况良好的次最大输入值送入输出。
对于最大值或最小值选择模式,如果两路输入相等且同为最大值或最小值,则指令会输出找到的第一路输入。对于中位数选择模式,中位数始终代表从可用输入中选择的值。如果多路输入的值为中位数,则指令会输出找到的第一路输入。
在程序控制与操作员控制之间切换
下图显示了 ESEL 指令在程序 (program) 控制与操作员控制模式之间进行切换的方式。

(1) ProgOperReq 保持为真时,指令锁定为操作员控制模式。
(2) ProgProgReq 保持为真且 ProgOperReq 为假时,指令锁定为程序控制模式。
影响数学状态标志
否
严重/轻微故障
如果启用该功能并检测到溢出,将发生轻微故障(故障类型:4,故障代码:4)。
执行
功能块
条件/状态 | 执行的操作 |
预扫描 | EnableIn 和 EnableOut 位设置为假。 |
Tag.EnableIn 为假 | EnableIn 和 EnableOut 位设置为假。 |
Tag.EnableIn 为真 | EnableIn 和 EnableOut 位设置为真。 指令执行 |
指令首次运行 | 指令设置为操作员控制模式。 |
指令首次扫描 | 不适用 |
后扫描 | EnableIn 和 EnableOut 位设置为假。 |
结构化文本
条件/状态 | 执行的操作 |
预扫描 | 请参见“功能块”表中的“预扫描”行。 |
正常执行 | 请参见“功能块”表中的“Tag.EnableIn 为真”行。 |
后扫描 | 请参见“功能块”表中的“后扫描”行。 |
示例
该 ESEL 指令根据 SelectorMode 选择 In1、In2 或 In3。在本示例中,SelectorMode = 1,表示最大值选择。指令将找到最大的输入值,并将 Out 值设置为最大 In 值。
功能块

结构化文本
ESEL_01.In1 := analog_input1;
ESEL_01.In2 := analog_input2;
ESEL_01.In3 := analog_input3;
ESEL_01.SelectorMode := 1;
ESEL(ESEL_01);
selected_value := ESEL_01.Out;
提供反馈