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_syntax
이 다이어그램에는 FOR_DO 루프의 실행 방법과 EXIT 문이 일찍 루프에서 떠나는 방법이 나와 있습니다.
FOR_DO Executes
FOR DO exits
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
다음을 수행할 경우
입력할 스트럭쳐드 텍스트
사용자 정의 데이터 유형(구조)에는 인벤토리 내 항목에 대한 다음 정보가 저장됩니다.
  • 항목의 바코드 ID(문자열 데이터 유형)
  • 항목의 재고 수량(DINT 데이터 유형)
위 구조 배열에 인벤토리 내 다양한 항목별 요소가 포함되어 있습니다. 특정 제품의 배열을 검색하고(제품 바코드 사용) 재고 수량을 파악하려고 합니다.
  1. 인벤토리 배열의 크기(항목 수)를 가져와서 결과를
  2. Inventory_Items(DINT 태그)에 저장합니다.
위치 태그를 0으로 초기화합니다.
  1. Barcode가 배열 내 항목 ID와 일치하면:
Quantity 태그 = Inventory[position].Qty로 설정합니다. 이렇게 하면 항목의 재고 수량이 산출됩니다.
중지합니다.
Barcode는 검색하려는 항목의 바코드가 저장된 문자열 태그입니다. 예를 들어
position = 5일 경우 Barcode를 Inventory[5].ID.와 비교합니다.
  1. position에 1을 더합니다.
  2. position ≤ to (Inventory_Items -1)일 경우 3 및 4를 반복합니다. 요소 번호가 0부터 시작하므로 마지막 요소는 배열의 요소 수보다 1만큼 작습니다.
아니면 중지합니다.
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;
의견을 작성 부탁드립니다.
이 자료에 대한 문의사항이나 요청사항이 있습니까? 여기에 요청사항을 작성 부탁드립니다.
Normal