爱笑的眼睛
级别: 实习会员
精华主题: 0
发帖数量: 3 个
工控威望: 46 点
下载积分: 673 分
在线时间: 6(小时)
注册时间: 2018-07-05
最后登录: 2020-10-20
查看爱笑的眼睛的 主题 / 回贴
楼主  发表于: 2019-04-21 10:14
图片:


FOR #a[1] :=1  TO 4 DO
        #a[5] := #a[1] + #a[1];
        #c := 1 + #c;

        #a[2] := 1+ #a[2];
        #a[4] := 4;

        IF #start_1 = 1 THEN
            
            ;
        END_IF;
        #a[5] := 5;
      
        ;
    END_FOR;

在编写的一个for循环中,用数组a{2}定义了一个int整数进行自加1(其初始值为0),即:a{2}:=1+a{2};当for循环第一次,执行到自加语句的时候,其a{2}的结果应当是1啊,怎么这么多啊,就跟梯形图里的add指令一样,一接通使能,每个扫描周期加一次。而java语言里,for循环执行一次就加一次。求教如何使for循环,每循环一次,自加的时候,语句只加一次呢
cvlsam
富士低压,POD(觸摸屏),PLC专卖
级别: VIP会员

精华主题: 3 篇
发帖数量: 6769 个
工控威望: 38370 点
下载积分: 2995 分
在线时间: 9505(小时)
注册时间: 2006-09-13
最后登录: 2024-11-18
查看cvlsam的 主题 / 回贴
1楼  发表于: 2019-04-21 15:46
因为start=1,那么每个扫描周期都在执行for循环………………

这不是SCL的坑,是程序员自己挖的坑啊,你这个程序,在JAVA中也是这个状态,你这个程序,在JAVA中不就是

while(start){
    for(int a[1]=1;a[1]<5;a[1]++){};
}

当start=1的时候………………

Good Luck~
爱笑的眼睛
级别: 实习会员
精华主题: 0
发帖数量: 3 个
工控威望: 46 点
下载积分: 673 分
在线时间: 6(小时)
注册时间: 2018-07-05
最后登录: 2020-10-20
查看爱笑的眼睛的 主题 / 回贴
2楼  发表于: 2019-04-21 18:29
scl 用的是单步调试,点一下鼠标走一条语句。才走了半个循环呢,只走到加1的语句,后面的还没执行,
下面的是用Java写的单步调试,不这样啊

thanks
爱笑的眼睛
级别: 实习会员
精华主题: 0
发帖数量: 3 个
工控威望: 46 点
下载积分: 673 分
在线时间: 6(小时)
注册时间: 2018-07-05
最后登录: 2020-10-20
查看爱笑的眼睛的 主题 / 回贴
3楼  发表于: 2019-04-21 20:42
图片:
今晚写了个实验程序:
用for  里面写
a【6】++,
执行完for后,
把a【6】的值送到输出端(没写a[6]的初始化),
执行完输出语句  下一行
用if语句把fff的值置1,进行输出(目的是把调用他的块en端关掉,结束扫描)

、、、、、、、、、、、、、、、、、、
最后实际输出的值就根理论相同了。。。。
也就是1:scl的单步调试,不是按照cpu扫描周期走的,也就是你每走一步,cpu也许扫描了上万次。(根Java不太一样,java单步调试只输出一次)
2:plc的scl进入扫描,由于没有高级语言中的“return”进行返回,所以他执行完语句的最后一条后,还会从头再扫描。。。。也就造成了cpu每扫一次,for语句的就重复执行一次,这cpu如此扫描,就使for如此进入重复执行的死循环,,,,,,


thanks各位爱心大哥