前言
我们在写代码时,一个相同的动作执行重复几次,可以使用FOR循环指令
FOR 循环指令:重复给定的次数。当一个或多个指令重复多次时,使用FOR。
FOR语法结构
FOR <ID> FROM <EXP> TO <EXP> DO
<SMT>
ENDFOR
<ID>
:循环判断变量
第一个<EXP>
:变量起始值,第一次运行变量等于这个值
第二个<EXP>
:变量结束值
<SMT>
:待执行指令
格式 | FOR Loop counter FROM Start value TO End value [STEP Step value] DO ... ENDFOR | |
参数 | Loop counter | 循环计数器名称,将自动声明该数据 |
Start value | Num型循环计数器起始值 | |
End value | Num型循环计数器结束值 | |
Step value | Num型循环增量(或减量)值,若未指定该值,则起始值小于结束值时设置为 1(或者如果起始值大于结束值, 则设置为-1) | |
... | 待执行指令 |
示例
有关于如何使用指令FOR的更多例子阐述如下。
MODULE MainModule
CONST num bian := 50; !偏移量常量50
CONST robtarget p10:=[[355.53,-499.89,643.48],[1.77401E-7,3.39455E-8,1,-5.27226E-8],[-1,0,-1,0], [9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];!抓取点
CONST robtarget p20:=[[355.53,50.11,643.48],[4.32223E-9,-3.8027E-8,-1,1.91626E-8],[0,-1,0,0], [9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];!放取点
CONST jointtarget jpos10:=[[0,0,0,0,90,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];!安全点
PROC main()
Reset Vacuum;!初始化吸嘴
MoveAbsJ jpos10\NoEOffs, v1000, z50, tool0;!安全点
!for嵌套
FOR x FROM 0 TO 2 DO
FOR y FROM 0 TO 2 DO
!试想一下,人抓东西和放东西
MoveJ Offs(p10,x*bian,y*bian,200),v1000,fine,tool0\WObj:=wobj0;!离抓取点的上方z轴200
MoveL Offs(p10,x*bian,y*bian,0),v1000,fine,tool0\WObj:=wobj0; !到达抓取点
Set Vacuum; !吸取物块
WaitTime 1; !等待1秒
MoveL Offs(p10,x*bian,y*bian,200),v1000,fine,tool0\WObj:=wobj0;!离抓取点的上方z轴200
MoveJ Offs(p20,y*bian,x*bian,200),v1000,fine,tool0\WObj:=wobj0;!离放取点的上方z轴200
MoveL Offs(p20,y*bian,x*bian,0),v1000,fine,tool0\WObj:=wobj0; !到达放取点
Reset Vacuum;!放物块
WaitTime 1; !等待1秒
MoveL Offs(p20,y*bian,x*bian,200),v1000,fine,tool0\WObj:=wobj0;!离放取点的上方z轴200
ENDFOR
ENDFOR
MoveAbsJ jpos10\NoEOffs, v1000, z50, tool0;!安全点
ENDPROC
ENDMODULE
MODULE MainModule
PROC main()
FOR i FROM 10 TO 2 STEP -2 DO
a{i} := a{i-1}; !将数组中的数值向上调整,以便a{10}:=a{9}、 a{8}:=a{7}等等。
ENDFOR
ENDPROC
ENDMODULE
总结
-
FOR可以嵌套
-
确认重复次数用FOR,不知道重复次数用WHILE
以上方法仅供大家参考,希望对你们有所帮助,如有不足之处,欢迎大家留言探讨,如果有需要搬运工作站的朋友,可以关注 龙猫YOU 公众号,回复搬运即可