WHILE_DO

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