WHILE_DO

WHILE_DO 循环用于在某些条件为真时一直执行某项操作。
操作数
WHILE bool_expression DO
<语句>;
结构化文本
操作数
类型
格式
说明
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 循环中的语句始终至少执行一次。而 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(回车的十进制值),则停止。
将 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