FOR_DO

FOR_DO 循环用于在执行其他操作前将某项操作执行指定次数。
使能后,FOR 指令重复执行例程,直到 Index 值超出 Terminal value。步长值可以是正值,也可以是负值。如果是负数,则当索引值小于终止值时,循环结束..如果是正数,则当索引值大于终止值时,循环结束。
每次 FOR 指令执行例程时,都会向 Index 值加上 Step size 值。
在一个扫描周期内,循环次数不应过多。重复次数过多会导致控制器的看门狗超时,进而引发严重故障。
操作数
FOR count:= initial_value TO
final_value BY increment DO
<语句>;
END_FOR;
操作数
类型
格式
说明
计数
SINT INT DINT
标签
FOR_DO 执行时,存储计数位置的标签
initial_ value
SINT INT DINT
标签表达式立即数
必须赋值为一个数
指定计数的初始值
final_ value
SINT INT DINT
标签表达式立即数
指定计数的最终值,该值确定何时退出循环
增量
SINT INT DINT
标签表达式立即数
可选)循环一次时计数值的增量
如果不指定增量,则计数递增 1。
重要提示:
  • 在一个扫描周期内,循环的迭代次数不应过多。
  • 控制器在完成循环前不会执行例程中的其他语句。
  • 如果完成循环所用的时间超过了任务的看门狗计时器时间,将出现严重故障。
  • 请考虑使用其他结构,例如 IF_THEN。
说明
语法在下表中说明。
FOR_DO_syntax
下图解释了 FOR_DO 循环的执行过程以及如果通过 EXIT 语句提前退出循环。
FOR_DO Executes
FOR DO exits
FOR_DO 循环执行特定次数。
要在计数达到最终值前终止循环,请使用 EXIT 语句。
影响数学状态标志
严重/轻微故障
在以下情况下会发生严重故障
故障类型
故障代码
结构循环过长。
6
1
示例 1
如果执行以下操作,
输入以下结构化文本
将 BOOL 数组的位 0…31 清零:
将 subscript 标签初始化为 0。
清除 i。例如,当 subscript = 5 时,清除 array[5]。
将 subscript 加 1。
如果 subscript ≤ 31,重复步骤 2 和 3。
否则将停止。
For subscript:=0 to 31 by 1 do
array[subscript] := 0;
End_for;
示例 2
如果执行以下操作,
输入以下结构化文本
通过用户自定义数据类型(结构)存储以下库存货物信息:
  • 货物的条形码 ID(字符串数据类型)
  • 货物的库存数量(DINT 数据类型)
如上结构的数组包含了库存中各个不同货物的元素。用户想要搜索特定产品的数组(使用条形码),并确定库存数量。
  1. 获取 Inventory 数组的大小(货物数),并将结果存储到
  2. Inventory_Items(DINT 标签)中。
将 position 标签初始化为 0。
  1. 如果 Barcode 与数组中某条目的 ID 匹配,则:
设置 Quantity 标签 = Inventory[position].Qty。这将生成该货物的库存量。
停止。
Barcode 是字符串标签,用于存储所搜索货物的条形码。例如,当
position = 5 时,将 Barcode 与 Inventory[5].ID 进行比较。
  1. 将 position 加 1。
  2. 如果 position ≤ (Inventory_Items -1),重复步骤 3 和 4。由于元素编号起始于 0,所以最后一个元素的编号比数组的元素数小 1。
否则将停止。
SIZE(Inventory,0,Inventory_Items);
For position:=0 to Inventory_Items - 1 do
If Barcode = Inventory[position].ID then
Quantity := Inventory[position].Qty;
Exit;
End_if;
End_for;
提供反馈
对本文档有问题或反馈吗? 请在这里提交您的反馈
Normal