REPEAT_UNTIL

REPEAT_UNTIL 循环用于一直执行某项操作,直到条件为真。
操作数
REPEAT
<语句>;
结构化文本
操作数
类型
格式
输入
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 循环中的语句始终至少执行一次。而 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