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 循环的执行过程以及如果通过 EXIT 语句提前退出循环。
![]() | ![]() |
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
如果执行以下操作, | 输入以下结构化文本 |
通过用户自定义数据类型(结构)存储以下库存货物信息:
如上结构的数组包含了库存中各个不同货物的元素。用户想要搜索特定产品的数组(使用条形码),并确定库存数量。
将 position 标签初始化为 0。
设置 Quantity 标签 = Inventory[position].Qty。这将生成该货物的库存量。 停止。 Barcode 是字符串标签,用于存储所搜索货物的条形码。例如,当 position = 5 时,将 Barcode 与 Inventory[5].ID 进行比较。
否则将停止。 | 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; |
提供反馈

