REPEAT_UNTIL
조건이 참일 때까지 REPEAT_UNTIL 루프를 사용하여 작업을 계속 수행합니다.
피연산자
REPEAT
<statement>;
구조화된 텍스트
피연산자 | 유형 | 형식 | 입력 |
bool_ 식 | BOOL | 태그 식 | BOOL 값으로 계산되는 BOOL 태그 또는 식 (BOOL 식) |
중요:
- 단일 스캔에 루프 내에서 너무 많이 반복하지 마십시오.
- 컨트롤러는 루프를 완료한 후에야 루틴 내의 다른 문을 실행합니다.
- 루프 완료 시간이 태스크의 워치독 타이머 시간보다 오래 걸릴 경우 메이저 폴트가 발생합니다.
- IF_THEN 같은 다른 구성을 사용해 보세요.
설명
구문:

다음 다이어그램에는 REPEAT_UNTIL 루프의 실행 방법과 EXIT 문이 일찍 루프에서 떠나는 방법이 나와 있습니다.
bool_expression이 거짓인 동안 컨트롤러는 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; |
의견을 작성 부탁드립니다.