고급 선택(ESEL)
이 정보는
CompactLogix
5370, ControlLogix
5570, Compact GuardLogix
5370, GuardLogix
5570, Compact GuardLogix
5380, CompactLogix
5380, ControlLogix
5580, GuardLogix
5580 및 ControlLogix 5590 컨트롤러에 적용됩니다.고급 선택(Enhanced Select, ESEL) 명령어를 사용하면 최대 6가지 입력 중 하나를 선택할 수 있습니다. 선택 옵션은 다음과 같습니다.
- 수동 선택(작업자 또는 프로그램에 의해)
- 높음 선택
- 낮음 선택
- 중앙값 선택
- 평균값(평균) 선택
사용 가능한 언어
래더 다이어그램
이 명령어는 래더 다이어그램 로직에서는 사용할 수 없습니다.
펑션 블록

구조화된 텍스트
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 | 사용된 입력 수. 이 값은 명령어에 사용되는 입력 수를 정의합니다. 이 명령어는 최대값 선택, 최소값 선택, 중앙값 선택 및 평균값 선택 모드에서 In InsUsed 를 통해 In1만 고려합니다. 이 값이 유효하지 않으면 이 명령어는 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)을 결정합니다. ProgSelector = 0이면 이 명령어는 Out을 업데이트하지 않습니다. ProgSelector가 유효하지 않으면 이 명령어는 Status에 해당 비트를 설정합니다. 유효하지 않고 명령어가 프로그램 컨트롤 상태이며, 셀렉터 모드가 수동 선택이거나 오버라이드가 설정된 경우, 이 명령어는 Out을 업데이트하지 않습니다. 유효값 = 0~6 기본값 = 0 |
OperSelector | DINT | 작업자 셀렉터 입력. 셀렉터 모드가 수동 선택이고 명령어가 오퍼레이터 컨트롤 상태이면, OperSelector는 출력으로 옮길 입력(In1-In6)을 결정합니다. OperSelector = 0이면 이 명령어는 Out을 업데이트하지 않습니다. OperSelector가 유효하지 않으면 이 명령어는 Status에 해당 비트를 설정합니다. 유효하지 않고 명령어가 작업자 제어 상태이며, 셀렉터 모드가 수동 선택이거나 오버라이드가 설정된 경우, 이 명령어는 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 | 프로그램/작업자 제어 표시기. 프로그램 제어일 때 참으로 설정됩니다. 작업자 제어 상태일 때 거짓으로 해제됩니다. |
오버라이드 | 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(수동 선택) 또는 오버라이드가 참이고, ProgOper가 거짓이며 OperSelector가 0이 아님 | Out = In[OperSelector] SelectedIn = OperSelector |
SelectorMode = 0(수동 선택) 또는 오버라이드가 참이고, ProgOper가 참이며, ProgSelector가 0이 아님 | Out = In[ProgSelector] SelectedIn = ProgSelector |
SelectorMode = 1(최대값 선택) 및 오버라이드가 거짓임 | Out = In[InsUsed]의 최대값 SelectedIn = 최대 입력 값의 인덱스 |
SelectorMode = 2(최소값 선택) 및 오버라이드가 거짓임 | Out = In[InsUsed]의 최소값 SelectedIn = 최소 입력 값의 인덱스 |
SelectorMode = 3(중앙값 선택) 및 오버라이드가 거짓임 | Out = In[InsUsed]의 중앙값 SelectedIn = 중앙 입력 값의 인덱스 |
SelectorMode = 4(평균값 선택) 및 오버라이드가 거짓임 | Out = In[InsUsed]의 평균값 SelectedIn = 0 |
SelectorMode 1 ~ 4의 경우, 입력에 대한 불량 상태 표시로 인해 해당 불량 입력이 선택에서 무시됩니다. 예를 들어 SelectorMode = 1(최대값 선택)이고 In6에 최고값이 들어 있지만 상태가 불량한 경우, 상태가 양호한 차상위 입력이 출력으로 이동됩니다.
최대값 또는 최소값 선택 모드의 경우, 두 입력이 같고 높거나 낮으면, 이 명령어는 처음으로 찾은 입력을 출력합니다. 중앙값 선택 모드의 경우 항상 중앙값이 사용 가능한 입력에서 선택한 값을 나타냅니다. 두 개 이상의 값이 중앙값일 수 있는 경우 이 명령어는 처음으로 찾은 입력을 출력합니다.
프로그램 제어와 작업자 제어 간에 전환
다음 다이어그램에서는 ESEL 명령어가 프로그램 컨트롤과 오퍼레이터 컨트롤 간에 변경하는 방법을 보여줍니다.

(1) ProgOperReq를 참으로 유지하면 작업자 제어 모드에서 이 명령어를 잠글 수 있습니다.
(2) ProgOperReq가 거짓인 동안 ProgProgReq를 참으로 유지하면 이 명령어를 프로그램 제어 모드에서 잠글 수 있습니다.
연산 상태 플래그에 영향
아니요
주 폴트/부 폴트
기능이 활성화되고 오버플로가 감지되면 부 폴트가 발생합니다(폴트 유형: 4, 폴트 코드: 4).
실행
펑션 블록
조건/상태 | 수행한 작업 |
사전 스캔 | EnableIn 및 EnableOut 비트가 거짓으로 해제됩니다. |
Tag.EnableIn이 거짓임 | EnableIn 및 EnableOut 비트가 거짓으로 해제됩니다. |
Tag.EnableIn이 참임 | EnableIn 및 EnableOut 비트가 참으로 설정됩니다. 명령어가 실행됩니다. |
명령어 최초 실행 | 이 명령어는 작업자 제어로 설정되어 있습니다. |
명령어 최초 스캔 | N/A |
사후 스캔 | 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;
의견을 작성 부탁드립니다.