REPEAT_UNTIL
    Use the REPEAT_UNTIL loop to continue performing an action until conditions are true.
Operands
REPEAT
<statement>;
Structured Text
| Operand | Type | Format | Enter | 
| bool_ expression | BOOL | Tag expression | BOOL tag or expression that evaluates to a BOOL value (BOOL expression) | 
     IMPORTANT: 
    
Do not iterate within the loop too many times in a single scan.
The controller does not execute other statements in the routine until it completes the loop.
A major fault occurs when completing the loop takes longer than the watchdog timer for the task. 
Consider using a different construct, such as IF_THEN.
Description
The syntax is:

The following diagrams show how a REPEAT_UNTIL loop executes and how an EXIT statement leaves the loop early.
While the bool_expression is false, the controller executes only the statements within the REPEAT_UNTIL loop.

To stop the loop before the conditions are false, use an EXIT statement.

Affects Math Status Flags
No
Fault Conditions
| A major fault will occur if | Fault type | Fault code | 
| The construct loops too long | 6 | 1 | 
Example 1
| If performing the following, | Enter this structured text | 
| The REPEAT_UNTIL loop executes the statements in the construct and then determines if the conditions are true before executing the statements again. This differs from the WHILE_DO loop because the WHILE_DO The WHILE_DO loop evaluates its conditions first. If the conditions are true, the controller then executes the statements within the loop. The statements in a REPEAT_UNTIL loop are always executed at least once. The statements in a WHILE_DO loop might never be executed. | pos := -1; | 
| REPEAT | |
| pos := pos + 2; | |
| UNTIL ((pos = 101) OR (structarray[pos].value = targetvalue)) | |
| end_repeat; | 
Example 2
| If performing the following, | Enter this structured text | 
| Move ASCII characters from a SINT array into a string tag. (In a SINT array, each element holds one character.) Stop when you reach the carriage return. Initialize Element_number to 0. Count the number of elements in SINT_array (array that contains the ASCII characters) and store the result in SINT_array_size (DINT tag). Set String_tag[element_number] = the character at SINT_array[element_number]. Add 1 to element_number. This lets the controller check the next character in SINT_array. Set the Length member of String_tag = element_number. (This records the number of characters in String_tag so far.) If element_number = SINT_array_size, then stop. (You are at the end of the array and it does not contain a carriage return.) If the character at SINT_array[element_number] = 13 (decimal value of the carriage return), then stop. | 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; | 
Provide Feedback