FOR_DO
FOR_DO 루프를 사용하여 작업을 특정 횟수 수행한 후에 다른 작업을 수행합니다.
활성화된 경우 FOR 명령어는 Index가 Terminal value를 초과할 때까지 루틴을 반복적으로 실행합니다. 단계 값은 양수 또는 음수일 수 있습니다. 음수일 경우 인덱스가 터미널 값보다 작으면 루프가 종료됩니다. 양수일 경우 인덱스가 터미널 값보다 클 때 루프가 종료됩니다.
FOR 명령어가 루틴을 실행할 때마다 인덱스에 단계 크기가 추가됩니다.
단일 스캔에서 너무 많이 루프하지 마십시오. 너무 많이 반복할 경우 컨트롤러의 워치독이 타임아웃되어 메이저 폴트가 발생할 수 있습니다.
피연산자
FOR count:= initial_value TO
final_value BY increment DO
<statement>;
END_FOR;
피연산자 | 유형 | 형식 | 설명 |
카운트 | SINT INT DINT | 태그 | FOR_DO가 실행될 때 카운트 위치를 저장하는 태그 |
initial_ value | SINT INT DINT | 택 식 즉시 | 숫자로 계산되어야 함 카운트에 대한 초기값 지정 |
final_ value | SINT INT DINT | 택 식 즉시 | 루프를 종료하는 시기를 결정하는 카운트에 대한 최종 값을 지정 |
증가 | SINT INT DINT | 택 식 즉시 | (옵션)루프를 통해 매번 카운트를 증가시키는 양 증가량을 지정하지 않으면 카운트는 1 단위로 증가합니다. |
중요:
- 단일 스캔에 루프 내에서 너무 많이 반복하지 마십시오.
- 컨트롤러는 루프를 완료한 후에야 루틴 내의 다른 문을 실행합니다.
- 루프 완료 시간이 태스크의 워치독 타이머 시간보다 오래 걸릴 경우 메이저 폴트가 발생합니다.
- IF_THEN 같은 다른 구성을 사용해 보세요.
설명
구문은 표에 설명되었습니다.

이 다이어그램에는 FOR_DO 루프의 실행 방법과 EXIT 문이 일찍 루프에서 떠나는 방법이 나와 있습니다.
![]() | ![]() |
FOR_DO 루프는 특정 횟수만큼 실행됩니다. | 카운트가 마지막 값에 도달하기 전에 루프를 중지하려면 EXIT 문을 사용합니다. |
연산 상태 플래그에 영향
아니요
주 폴트/부 폴트
메이저 폴트가 발생하는 원인 | 폴트 유형 | 폴트 코드 |
구성 루프가 너무 깁니다. | 6 | 1 |
예 1
다음을 수행할 경우 | 입력할 스트럭쳐드 텍스트 |
BOOL 배열에서 0 ~ 31비트 해제: 첨자 태그를 0으로 초기화합니다. i를 지웁니다. 예를 들어 subscript = 5일 때 배열[5]를 해제합니다. subscript에 1을 더합니다. subscript ≤ 31일 경우 2 및 3을 반복합니다. 아니면 중지합니다. | For subscript:=0 to 31 by 1 do |
array[subscript] := 0; | |
End_for; |
예 2
다음을 수행할 경우 | 입력할 스트럭쳐드 텍스트 |
사용자 정의 데이터 유형(구조)에는 인벤토리 내 항목에 대한 다음 정보가 저장됩니다.
위 구조 배열에 인벤토리 내 다양한 항목별 요소가 포함되어 있습니다. 특정 제품의 배열을 검색하고(제품 바코드 사용) 재고 수량을 파악하려고 합니다.
위치 태그를 0으로 초기화합니다.
Quantity 태그 = Inventory[position].Qty로 설정합니다. 이렇게 하면 항목의 재고 수량이 산출됩니다. 중지합니다. Barcode는 검색하려는 항목의 바코드가 저장된 문자열 태그입니다. 예를 들어 position = 5일 경우 Barcode를 Inventory[5].ID.와 비교합니다.
아니면 중지합니다. | SIZE(Inventory,0,Inventory_Items); |
For position:=0 to Inventory_Items - 1 do | |
If Barcode = Inventory[position].ID then | |
Quantity := Inventory[position].Qty; | |
Exit; | |
End_if; | |
End_for; |
의견을 작성 부탁드립니다.

