设为首页
收藏本站
PLC技术网
开启辅助访问
切换到宽版
登录
注册哦
只需一步,快速开始
微信扫码登录
门户
Portal
论坛
BBS
导读
Guide
排行榜
Ranklist
搜索
搜索
本版
文章
帖子
用户
PLC论坛-全力打造可编程控制器专业技术论坛
»
论坛
›
工控技术交流区
›
『国外:三菱/西门子/欧姆龙/松下』
›
西门子SCL基础教学---for...to...do
返回列表
发新帖
[西门子]
西门子SCL基础教学---for...to...do
[复制链接]
71757
|
0
|
2024-3-11 17:22:43
|
显示全部楼层
|
阅读模式
上期,我们讲解了case...of,这期我们讲解下for...to...do语句。
关于for...to...do语句的解释:
for循环是可以指定循环次数的一个循环,在使用时,首先需要定义一个整型的循环计数变量(博途更新V16之后,支持了无符号的整型数据类型),然后指定它的循环范围,for循环会根据你的语句自动递增或者递减这个循环计数变量,直到循环次数超出你的循环范围然后结束循环。循环计数变量可以是全局的,也可以是临时或者静态的
举例:
定义一个temp=i=int
定义一个output=DATA=ARRAY[0..4] OF INT
FOR #i := 0 TO 4 DO
#DATA
:= i + 1;
END_FOR;
这是一个最基本的for循环程序,就是给DATA数组里面赋值的。for循环在执行前首先将i初始化为起始值0,然后以1个单位递增,直到i=4。该循环体内语句一共被执行了5次。
根据解释,上面这段程序最终的结果就是
DATA[0]:=1
DATA[1]:=2
DATA[2]:=3
DATA[3]:=4
DATA[4]:=5
那有人要问了,我不想一步一步,我想两步两步走。也可以
举例:
定义一个temp=i=int
定义一个output=DATA=ARRAY[0..5] OF INT
FOR #i:= 0 TO 5 BY 2 DO
#DATA
:= i + 5;
END_FOR;
这时候你可以看出,这比上面一句多了个BY,BY后面跟着的就是循环步,你可以省略掉,如果省略掉,默认是一步。如果你写了BY 2,那么它就是两步。最终的data里面的数据就会是
DATA[0]=5
DATA[2]=7
DATA[4]=9
当然了,你也可以加的更多,比如BY 10等等。这里仅是举例。
那么,既然有了递增,那有没有递减呢。答案是有的。
举例:
定义一个temp=i=int
定义一个output=DATA=ARRAY[0..5] OF INT
FOR #i:= 5 TO 0 BY -1 DO
#DATA
:= i - 5;
END_FOR;
实现递减,我们只需要将BY后面的循环步修改成负数,那么这时候i的起始值就是5,这个循环计数器将从5递减到0。这时候上面这段程序的结果就是
DATA[0]=-5
DATA[1]=-4
DATA[2]=-3
DATA[3]=-2
DATA[4]=-1
DATA[5]=0
那么居然有循环了,假如说,我在循环体中,不想要某一个循环,可不可以呢。也是可以的。假设:我不想要第四次循环。
举例:
定义一个temp=i=int
定义一个output=DATA=ARRAY[0..4] OF INT
FOR #i := 0 TO 4 DO
IF I = 3
THEN
CONTINUE;
END_IF;
#DATA
:= i + 1;
END_FOR;
CONTINUE关键字的意思就是跳过本次循环,也就是说当循环计数器i=3的时候,跳过这个循环,那么这段程序的结果就是
DATA[0]:=1
DATA[1]:=2
DATA[2]:=3
DATA[3]:=上一次的值
DATA[4]:=5那有没有退出整个循环这个关键字呢。也是有的。假设:我有一个数组,我需要根据我输入的数值对这个数组里面的数值做比较,当比较到我需要的数据之后,我需要知道这个数据在这个数组的位置。举例:
定义一个input=number=int
定义一个temp=i=int
定义一个output=site=int
定义一个output=DATA=ARRAY[1..100] OF INT(DATA[1]=1,DATA[2]=2,以此类推,DATA[100]=100)
FOR #i := 1 TO 100 DO
IF DATA
= number
THEN
site:=i;
EXIT;
END_IF;
END_FOR;
根据我们输入的number的数值进行比较。如果比较不成功,site输出的值为上一次的值。如果比较成功,则输出这个数据在哪个位置。比如我们对number输入35,那么当他比较到35的时候,site会输出一个35,表示数据在第35的位置。那有人会有疑问,为什么i没有循环到100。因为,我们有条件去判断了,当data
的数值等于number输入的数值的时候,我们执行了exit关键字这个语句,exit,退出整个循环,也就是for循环遇到exit关键字的时候,就退出整个循环。哪怕只循环了一次就遇到,后面没循环的次数都将不会继续循环下去。
for循环的到此就结束了,本来想把另外两个放一起讲的,后来想想,那两个和for有区别,就不放一起了。
for循环的注意事项:
循环计数器不能循环到没有这个数值的地方去。比如for i:= 0 TO 9 DO,然后你的数组给的是DATA=ARRAY[0..8] OF INT,如果这样的话,那么在第九次循环的时候,PLC里面是没有这个数据的,PLC就会报错。诊断缓冲区会有一个FB(C)xx的区域长度错误。这就是因为你循环到了PLC不存在的数据上去了。因为程序编译的时候不会编译出这个错误,所以要自己避免。
BY后面必须要跟一个不为0的数值,当然,你写了0之后,系统会提示你:值为0时,该表达式会导致死循环。
回复
举报
返回列表
发新帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册哦
本版积分规则
发表回复
回帖后跳转到最后一页
工控亿点点
回复楼主
返回列表
『国外:三菱/西门子/欧姆龙/松下』
『国产:台达/汇川/信捷产品交流区』