西门子循环指令LOOP在S7-300 PLC中的STL编程语言中广泛使用,用于实现重复执行某段程序的功能。其用法主要基于累加器ACCU1中的值来控制循环次数。在每次执行LOOP指令时,ACCU1的值会减1,若减1后非0,则跳转到指定的标签处继续执行循环体内的程序;若减至0,则退出循环。
使用LOOP指令时,首先需要在循环开始前通过加载指令(如L指令)将循环次数送入ACCU1中。然后,在循环体内编写需要重复执行的程序。最后,使用LOOP指令配合指定的标签来结束循环体。标签名应唯一且前后对应,确保循环能够正确跳转。
此外,LOOP指令的使用还需注意一些规则,如循环体和LOOP指令必须位于同一程序块中,且LOOP指令和标签之间的跳转必须符合PLC的扫描顺序。通过合理使用LOOP指令,可以高效地处理需要重复执行的任务,提高程序的执行效率和可读性。
使用“循环”指令来编写程序循环。
这个指令会把累加器 1 的低字当成是 0 到 65535 之间的无符号 16 位整数来解释。
在指令执行的时候,首先会把累加器 1 里的内容减 1 。减 1 完了以后,如果累加器 1 里的值不是零,那就会在指定的跳转标签那里进行跳转。要是值是零,就不跳转了,并且到下一条指令的时候接着恢复执行程序。所以,累加器 1 里的值能确定需要执行的程序循环的次数。
得把这个数值存到循环计数器里。<数目> 操作数包含了循环周期的数量。<循环计数器> 操作数包含了还需要执行的循环周期数。在程序循环的末尾,循环计数器的内容会加载到累加器 1 中,然后被这个指令减 1 。减完 1 以后,如果累加器里的值不等于零,就会跳转到程序循环开始地方的跳转标签。“循环”指令不会影响任何状态位。
警告 | |
预设循环计数器 如果循环计数器没有预设值或者预设值为“0”,则循环计数器会进一步递减为负值,从而产生无限循环结果,这会使 CPU 转入 STOP 模式。 |
示例
以下示例说明了该指令的工作原理:
STL | 说明 |
L "Tag_Value" | // 将待执行的循环数加载到累加器 1 的低字中。 |
START: T "Tag_Counter" | // 跳转列表开始 // 将累加器 1 的内容传送到循环计数器。 |
L "MyTag_1" | // 加载操作数“MyTag_1”的值。 |
L "MyTag_2" | // 加载操作数“MyTag_2”的值。 |
*D | // 将两个值相乘 |
T "MyTag_1" | // 将乘法运算的结果传递给操作数“MyTag_1”。 |
L "Tag_Counter" | // 将循环计数器的值加载到累加器 1 中。 |
LOOP START | // 将累加器 1 中的值减 1。 // 当值不等于零时,跳转到程序循环的开始处。 // 如果值为零,则执行下一条指令。 |
L "MyTag_2" | // 加载操作数“MyTag_2”的值。 |
L 100 | // 加载值 100。 |
>I | // 比较操作数“MyTag_2”的值是否大于 200。 |
= "MyTag_3" | // 将比较结果写入到操作数“MyTag_3”。 |
闲来无事,讨论一下三菱与西门子PLC PLC论坛-全力打造可编程控制器专业技术论坛 -
闲来无事,讨论一下三菱与西门子PLC
http://bbs.plcjs.com/forum.php?mod=viewthread&tid=506760&fromuid=250344
(出处: PLC论坛-全力打造可编程控制器专业技术论坛)