파일 산술 및 로직(File Arithmetic and Logic, FAL)
이 명령어는
Compact GuardLogix
5370 및 Compact GuardLogix
5380, CompactLogix
5370, CompactLogix
5380 및 ControlLogix
5570, ControlLogix
5580, ControlLogix 5590, GuardLogix
5570 및 GuardLogix
5580 컨트롤러에 적용됩니다.FAL 명령어는 배열에 저장된 데이터에 대한 복사, 산술, 로직 및 함수 연산을 수행합니다. FAL 명령어의 렁-입력-조건이 거짓에서 참으로 전환되면 지정된 식이 지정된 반복 모드로 실행됩니다.
안전 응용 프로그램에서 허용 가능한 연산자에 대한 규칙이 있습니다. 유효 연산자 섹션을 참조하십시오.
사용 가능한 언어
래더 다이어그램

펑션 블록
이 명령어는 함수 블록에서 사용할 수 없습니다.
구조화된 텍스트
이 명령어는 구조화된 텍스트에서 사용할 수 없습니다.
피연산자
중요:
다음과 같은 경우 작업 시 예외가 발생할 수 있습니다.
- 출력 태그 피연산자가 덮어써집니다.
- 구조 피연산자의 구성원이 덮어써집니다.
- 지정된 경우를 제외하고 여러 명령어에서 구조 피연산자를 공유합니다.
명령어 내에서 숫자 데이터 유형을 혼합하기 위한 데이터 변환 규칙이 있습니다. 데이터 변환을 참조하십시오.
래더 다이어그램
피연산자 | 데이터 유형 CompactLogix 5370, ControlLogix 5570, Compact GuardLogix 5370 및 GuardLogix 5570 컨트롤러 | 데이터 유형 CompactLogix 5380, ControlLogix 5580, Compact GuardLogix 5380, GuardLogix 5580 및 ControlLogix 5590 컨트롤러 | 형식 | 설명 |
|---|---|---|---|---|
Control | CONTROL | CONTROL | 태그 | 연산의 제어 구조 |
Length | DINT | DINT | 즉시 | CONTROL 구조 .LEN을 나타냅니다. |
Position | DINT | DINT | 즉시 | 컨트롤(CONTROL) 구조 .POS를 나타냅니다 |
Mode | DINT | DINT | 즉시 | 연산 배포 방법을 보여줍니다. INC, ALL을 선택하거나, 1 ~ 2147483647 범위의 수를 입력함 |
Expression | SINT INT DINT REAL | SINT INT DINT LINT USINT UINT UDINT ULINT REAL LREAL | 즉시 태그 | 태그 및/또는 연산자로 구분된 즉시 값으로 구성된 식. |
Destination | SINT INT DINT REAL | SINT INT DINT LINT USINT UINT UDINT ULINT REAL LREAL | 태그 | 식의 값이 대상에 저장됩니다. |
Length 및 Position(제어 태그의 .LEN 및 .POS에 해당)은 의사 피연산자입니다. 자세한 내용은 의사 피연산자 초기화를 참조하십시오.
CONTROL 구조
니모닉 | 데이터 유형 | 설명 |
|---|---|---|
.EN | BOOL | 활성화 비트는 FAL 명령어가 활성화되었음을 나타냅니다. |
.DN | BOOL | 완료 비트는 명령어가 마지막 요소에서 작업한 경우에 설정됩니다(.POS = .LEN). |
.ER | BOOL | 오버플로가 발생하면 두 플랫폼 모두 .ER을 설정하고 명령어 실행을 중지합니다. 다음 컨트롤러가 오버플로를 생성합니다.
|
.LEN | DINT | 길이는 FAL 명령어가 작동되는 배열의 요소 수를 지정합니다. |
.POS | DINT | 위치는 명령어가 시작될 때 0으로 초기화되고 루프가 작동할 때마다 증가합니다. |
식의 값은 지정된 대상 태그에 저장됩니다. 오버플로가 발생하면 ER 비트를 설정하고 실행을 중지합니다. FAL이 구성된 반복을 모두 완료하면 .DN 비트가 설정됩니다.
연산 모드 선택하기
FAL 명령어의 경우 이 모드가 컨트롤러에 배열 연산 배포 방법을 지시합니다.
다음의 경우: | 선택할 모드: |
|---|---|
다음 명령어를 계속하기 전에 배열에서 지정된 모든 요소에 대한 연산을 수행합니다. | 모든 |
여러 스캔을 통해 배열 연산 배포. 스캔당 작업할 요소의 수(1 ~ 2147483647)를 입력합니다. | 숫자 |
EnableIn이 거짓에서 참으로 바뀔 때마다 배열 내 요소 하나를 조작합니다. | 증가 |
전체 모드
전체 모드에서는 명령어가 다음 명령어를 계속하기 전에 배열의 지정된 모든 요소에 대한 연산을 수행합니다. 작업은 명령어의 EnableIn이 거짓에서 참으로 바뀔 때 시작합니다. 제어 구조의 위치(.POS) 값은 명령어가 현재 사용하고 있는 배열 내 요소를 가리킵니다. .POS 값이 .LEN 값과 같아지거나 그보다 커지고, 식에서 오버플로가 발생하고 .ER 비트가 참으로 설정되면 연산이 중지됩니다.

아래 타이밍 다이어그램에서는 상태 비트와 명령어 작업의 관계를 보여줍니다. 명령어 실행이 완료되면 .DN 비트가 참입니다. EnableIn이 거짓이면 .DN 비트, .EN 비트, .POS 값이 해제됩니다. 이 경우에만 EnableIn 거짓 - 참 전환에서 명령어의 다른 실행이 트리거될 수 있습니다.

숫자 모드
숫자 모드는 배열 작업을 여러 스캔 작업에 분배합니다. 비시간 임계 데이터나 대량의 데이터를 처리할 경우 이 모드를 사용합니다. 각 스캔에서 작동할 요소 수를 입력하면 스캔 시간이 단축됩니다.
EnableIn이 거짓에서 참으로 전환되면 실행이 트리거됩니다. 이 경우 명령어는 전체 배열의 작업을 완료하는 데 필요한 스캔 작업의 횟수만큼 스캔될 때마다 실행됩니다. 트리거되면 EnableIn은 명령어의 실행을 중단하지 않고도 반복해서 변경할 수 있습니다.

.DN 비트가 설정될 때까지 숫자 모드에서 작동되는 파일 명령어의 결과를 사용하지 마세요.
아래 타이밍 다이어그램에서는 상태 비트와 명령어 작업의 관계를 보여줍니다. 명령어 실행이 완료되면 .DN 비트가 설정됩니다.

완료 시에 EnableIn이 참이면 .EN과 .DN 비트는 EnableIn이 거짓으로 전환할 때까지 참입니다. EnableIn이 거짓으로 전환되면 해당 비트와 .POS 값이 해제됩니다.
완료 시에 EnableIn이 거짓이면 .EN 비트는 즉시 지워집니다. .EN 비트가 해제된 후의 한 스캔 작업에서 .DN 비트와 .POS 값이 해제됩니다.
증분 모드
증가 모드는 명령어의 EnableIn이 거짓에서 참으로 바뀔 때마다 배열 내 요소 하나를 조작합니다.

아래 타이밍 다이어그램에서는 상태 비트와 명령어 작업의 관계를 보여줍니다. 실행은 EnableIn이 거짓에서 참으로 바뀌는 스캔에서만 진행됩니다. 이 상황이 발생할 때마다 배열 내 요소 하나만 조작됩니다. 두 번 이상의 스캔 동안 EnableIn이 참으로 유지되면 명령어가 첫 번째 스캔 중에만 실행됩니다.

EnableIn이 참이면 .EN 비트가 설정됩니다. 배열 내 마지막 요소가 조작되면 .DN 비트가 설정됩니다. 마지막 요소가 조작되고 EnableIn이 거짓으로 전환되면 .EN 비트, .DN 비트, .POS 값이 해제됩니다.
스캔당 요소 하나의 속도에 따른 증분 모드와 숫자 모드의 차이는 다음과 같습니다.
스캔당 요소가 몇 개 있는 숫자 모드의 실행을 시작하려면 EnableIn의 거짓 - 참 전환이 하나 있으면 됩니다. 명령어는 EnableIn의 상태에 관계없이 완료될 때까지 스캔마다 지정된 개수의 요소를 계속 실행합니다.
증분 모드는 EnableIn이 거짓에서 참으로 전환되어야 배열 내 요소 하나를 조작할 수 있습니다.
포맷 식
식에서 사용하는 각 연산자에는 1 ~ 2개의 피연산자(태그 또는 즉시 값)를 제공해야 합니다. 다음 표를 사용하여 식 내의 연산자 및 피연산자 형식을 지정합니다.
연산자 작용 대상: | 사용 형식: | 예 |
|---|---|---|
피연산자 1개 | 연산자(피연산자) | ABS(태그) |
피연산자 2개 | operand_a 연산자 operand_b | tag_b + 5 tag_c AND tag_d (tag_e**2) MOD (tag_f / tag_g) |
연산 순서 정의
식의 연산은 표시된 순으로 할 필요없이 규정된 순서로 명령어에 의해 수행됩니다. 괄호 내에 조건을 그룹화, 명령어로 하여금 다른 연산에 앞서 괄호 안의 연산을 수행하게 하는 등의 방법으로 연산 순서를 지정할 수 있습니다.
연산 순서가 같은 경우에는 왼쪽에서 오른쪽 순으로 수행됩니다.
순서 | 연산 |
|---|---|
1 | ( ) |
2 | ABS, ACOS, ASIN, ATAN, COS, DEG, BCD_TO, LN, LOG, RAD, SIN, SQRT, TAN, TO_BCD, TRUNC |
3 | ** |
4 | - (부정), NOT |
*, /, MOD | |
6 | - (빼기), + |
7 | AND |
8 | XOR |
9 | OR |
연산 상태 플래그에 영향
컨트롤러 | 연산 상태 플래그에 영향 |
|---|---|
CompactLogix 5380, ControlLogix 5580, Compact GuardLogix 5380, GuardLogix 5580 및 ControlLogix 5590 컨트롤러 | 아니요 |
CompactLogix 5370, ControlLogix 5570, Compact GuardLogix 5370 및 GuardLogix 5570 컨트롤러 | 예 |
주 폴트/부 폴트
메이저 폴트는 다음과 같은 경우에 발생합니다. | 폴트 유형 | 폴트 코드 |
|---|---|---|
.POS < 0 또는 .LEN < 0 | 4 | 21 |
배열 인덱스 폴트의 경우 배열을 통한 인덱스를 참조하세요.
실행
래더 다이어그램
조건/상태 | 수행한 작업 |
|---|---|
사전 스캔 | N/A |
렁-입력-조건이 거짓임 | 렁-출력-조건을 렁-입력-조건으로 설정합니다. FAL 흐름도(렁-출력-조건이 거짓임) 참조 |
렁-입력-조건이 참임 | 렁-출력-조건을 렁-입력-조건으로 설정합니다. FAL 흐름도(렁-출력-조건이 참임) 참조 |
사후 스캔 | N/A |
FAL 흐름도(렁-출력-조건이 거짓인 경우)

FAL 흐름도(렁-출력-조건이 참인 경우)

FAL 흐름도(전체 모드)

FAL 흐름도(숫자 모드)

FAL 흐름도(증분 모드)

예
예 1
배열 -> 배열.
래더 다이어그램
(54)_v31.png/_jcr_content/renditions/original)
활성화된 경우 FAL 명령어는 array_2의 각 요소를 array_1 내의 동일한 위치에 복사합니다.

예 2
요소 -> 배열 복사.
래더 다이어그램
(56)_v31.png/_jcr_content/renditions/original)
활성화된 경우 FAL 명령어는 value_1을 array_2의 두 번째 차원의 처음 10개의 위치에 복사합니다.

예 3:
배열 -> 요소 복사.
(58)_v31.png/_jcr_content/renditions/original)
FAL 명령어는 활성화될 때마다 array_1의 현재 값을 value_1에 복사합니다. FAL 명령어는 증분 모드를 사용하므로 명령어가 활성화될 때마다 한 개의 배열 값만 복사됩니다. 다음에 명령어가 활성화되면 value_1을 array_1의 다음 값으로 덮어씁니다.

예 4:
산술 연산: 배열/배열 -> 배열
(60)_31.png/_jcr_content/renditions/original)
활성화되면 FAL 명령어는 array_2의 현재 위치의 값을 array_3의 현재 위치의 값으로 나누고 결과를 array_1의 현재 위치에 저장합니다.

예 5:
산술 연산: 배열/배열 -> 배열
(62)_v31.png/_jcr_content/renditions/original)
활성화된 경우 FAL 명령어는 value_1과 value_2를 더하고 결과를 array_1의 현재 위치에 저장합니다.

예 6:
산술 연산: 배열 + 요소 -> 배열
(64)_v31.png/_jcr_content/renditions/original)
활성화되면 FAL 명령어는 array_1의 현재 위치의 값을 value_1에 더하고 결과를 array_3의 현재 위치에 저장합니다. 명령어가 조작할 전체 array_1 및 array_3에 대해 연산을 10번 수행해야 합니다.

예 7:
산술 연산: (요소 + 배열) -> 요소
(66)_v31.png/_jcr_content/renditions/original)
FAL 명령어가 활성화될 때마다 value_1을 array_1의 현재 값에 더하고 결과를 value_2에 저장합니다. FAL 명령어는 증가 모드를 사용하므로 명령어가 활성화될 때마다 한 개의 배열 값만 value_1에 더해집니다. 다음에 명령어가 활성화되면 value_2를 덮어씁니다.

예 8:
산술 연산: (배열 * 배열) -> 요소
(68)_v31.png/_jcr_content/renditions/original)
활성화되면 FAL 명령어는 array_1의 현재 값에 array_3의 현재 값을 곱하고 결과를 value_1에 저장합니다. FAL 명령어는 증분 모드를 사용하므로 명령어가 활성화될 때마다 한 쌍의 배열 값만 곱해집니다. 다음에 명령어가 활성화되면 value_1을 덮어씁니다.

의견을 작성 부탁드립니다.