REPEAT_UNTIL

조건이 참일 때까지 REPEAT_UNTIL 루프를 사용하여 작업을 계속 수행합니다.
피연산자
REPEAT
<statement>;
구조화된 텍스트
피연산자
유형
형식
입력
bool_
식
BOOL
태그 식
BOOL 값으로 계산되는 BOOL 태그 또는 식
(BOOL 식)
중요:
  • 단일 스캔에 루프 내에서 너무 많이 반복하지 마십시오.
  • 컨트롤러는 루프를 완료한 후에야 루틴 내의 다른 문을 실행합니다.
  • 루프 완료 시간이 태스크의 워치독 타이머 시간보다 오래 걸릴 경우 메이저 폴트가 발생합니다.
  • IF_THEN 같은 다른 구성을 사용해 보세요.
설명
구문:
Repeat_Until syntax
다음 다이어그램에는 REPEAT_UNTIL 루프의 실행 방법과 EXIT 문이 일찍 루프에서 떠나는 방법이 나와 있습니다.
bool_expression이 거짓인 동안 컨트롤러는 REPEAT_UNTIL 루프 내의 문만 실행합니다.
RSL5K_REPEAT…UNTIL execution
조건이 거짓으로 되기 전에 루프를 중지하려면 EXIT 문을 사용합니다.
RSL5K_RSL5K_REPEAT…UNTIL exit
연산 상태 플래그에 영향
아니요
폴트 조건
메이저 폴트가 발생하는 원인
폴트 유형
폴트 코드
구성 루프가 너무 깁니다.
6
1
예 1
다음을 수행할 경우
입력할 스트럭쳐드 텍스트
REPEAT_UNTIL 루프의 경우 구성 내의 문을 실행한 다음 조건이 참인지 판단한 후에 다시 문을 실행합니다. 이는 WHILE_DO 루프와 다릅니다. WHILE_DO 루프는 조건을 먼저 평가하기 때문입니다.
조건이 참이면 컨트롤러가 루프 내의 문을 실행합니다. REPEAT_UNTIL 루프의 문은 항상 최소 1회 실행됩니다. WHILE_DO 루프의 문은 한 번도 실행되지 않을 수도 있습니다.
pos := -1;
REPEAT
pos := pos + 2;
UNTIL ((pos = 101) OR (structarray[pos].value = targetvalue))
end_repeat;
예 2
다음을 수행할 경우
입력할 스트럭쳐드 텍스트
SINT 배열의 ASCII 문자를 문자열 태그로 이동합니다. (SINT 배열의 각 요소별로 하나의 문자가 할당되어 있습니다.) 캐리지 리턴에 이르면 중지됩니다.
Element_number를 0으로 초기화합니다.
SINT_array(ASCII 문자가 들어 있는 배열)의 요소 수를 카운트하고 결과 값은 SINT_array_size(DINT 태그)에 저장합니다.
String_tag[element_number] = SINT_array[element_number]의 문자로 설정합니다.
element_number에 1을 더합니다. 이렇게 하면 컨트롤러가 다음 문자를 확인합니다.
SINT_array.
String_tag의 길이 구성원 = element_number로 설정합니다. (이러면 지금까지 String_tag의 문자 수가 기록됩니다.)
element_number = SINT_array_size이면 중지됩니다. (배열의 끝에 있으며 캐리지 리턴이 포함되어 있지 않습니다.)
SINT_array[element_number] 문자 수 = 13(캐리지 리턴 십진수 값)일 경우 중지합니다.
element_number := 0;
SIZE(SINT_array, 0, SINT_array_size);
Repeat
String_tag.DATA[element_number] := SINT_array[element_number];
element_number := element_number + 1;
String_tag.LEN := element_number;
If element_number = SINT_array_size then
exit;
end_if;
Until SINT_array[element_number] = 13
end_repeat;
의견을 작성 부탁드립니다.
이 자료에 대한 문의사항이나 요청사항이 있습니까? 여기에 요청사항을 작성 부탁드립니다.
Normal