codesys 常用语法分享-CODESYS资源下载区-酷德网 - CoDeSys软件教程下载,CoDeSys工控资讯门户 

酷德网

HSC6490-cn中国制造,中国芯~
查看: 2156|回复: 0

codesys 常用语法分享

[复制链接]
  • TA的每日心情
    擦汗
    2019-8-13 14:13
  • 签到天数: 32 天

    [LV.5]常住居民I

    发表于 2022-11-30 13:45:57 | 显示全部楼层 |阅读模式
    1. 赋值指令
    变量 := 变量或表达式
    意义:操作符“:=”右边变量或表达式的值被赋给了左边的变量
    例如: Var2:=Var1*10;
    该语句把Var1的值乘以10,再将得到的结果赋值给Var2。
    2 IF指令
    使用IF指令可以检查条件,并根据此条件执行相应的指令。
    常见的IF指令结构有:
    (1) IF 条件A THEN
    表达式A;
    END_IF
    当条件A满足时,执行表达式A。
    例如:
    IF temp<17
    THEN heating_on := TRUE;
    END_IF
    当温度降到17度以下时,开启加热器。

    (2) IF 条件A THEN
    表达式A;
    ELSE
    表达式B;
    END_IF
    当条件A满足时,执行表达式A;否则,执行表达式B。
    例如:
    IF temp<17
    THEN heating_on := TRUE;
    ELSE heating_on := FALSE;
    END_IF;
    当温度降到17度以下时,开启加热器, 否则加热器保持关闭。

    ( 3) IF 条件A THEN 表达式A;
    ELSIF 条件B THEN 表达式B;
    ...
    ELSIF 条件N-1 THEN 表达式N-1;
    ELSE 表达式N;
    END_IF
    当条件A满足时,执行表达式A;否则,当条件B满足时,执行表达式B; …否则,当(条件
    N-1)满足时,执行(表达式N-1);如果以上条件都不满足,则执行表达式N; 指令结束。
    例如:
    IF temp<17
    THEN heating_on := TRUE;
    ELSIF temp>30
    THEN Heating_on := FALSE; Colding_on:= FALSE;
    ELSE
    Colding_on:= TRUE;
    END_IF
    当温度降到17度以下时,开启加热器;当温度升高到30度以上时,开启制冷器;当温度在
    17度~30度之间时,加热器、制冷器均保持关闭。

      
    3 CASE指令
    语法:
    CASE <控制变量> OF
    <数值1>: <表达式1>
    <数值2>: <表达式2>
    <数值3, 数值4, 数值5>: <表达式3>
    <数值6 .. 数值10>: <表达式4>
    ...
    <数值n>: <表达式n>
    ELSE <ELSE的表达式>
    END_CASE
    CASE指令用于将控制变量和若干个操作数进行比较,如果控制变量与其中一个值相同,则执
    行该值对应的语句。如果与任何一个值都不相同,则执行ELSE指令的语句。
    例如:
    CASE INT1 OF
    1, 5: BOOL1 := TRUE;
    2: BOOL2 := TRUE;
    10..20: BOOL3:= TRUE;
    ELSE
    BOOL1 := BOOL2 :=BOOL3 :=FALSE;
    END_CASE
    当INT1=1或5时, BOOL1为真;
    当INT1=2时, BOOL2为真;
    当INT1=10~20之间的数值时, BOOL3为真;
    否则, BOOL1、 BOOL2、 BOOL3均为假。
    当使用IF指令有过多分层,或者需要使用多个ELSIF,才能完成程序功能时,使用CASE指令
    替代IF指令,可以简化程序,并且能提高程序的可读性。
    4 FOR循环指令
    FOR循环指令用于一些需要重复执行的语句,它可以使程序简短并且一目了然。但需要注意
    避免陷入死循环。
    FOR循环指令是有限制的循环指令, 当限制条件满足(变量值等于“循环结束时变量值”)时,
    程序就将退出FOR循环,执行下一条指令。
    语法:
    FOR <循环控制变量> := <循环开始时变量值> TO <循环结束时变量值>{BY <变量递增步长>}
    DO
    <表达式>
    END_FOR
    其中,{}内语句可根据需要省略,省略时步长默认为1。
    例如:
    FOR Counter:=1 TO 5 BY 1 DO
    Var1:=Var1*2;
    END_FOR
    此程序的循环控制变量为Counter,循环开始时控制变量初值为1,每一次循环Counter+1;
    当Counter等于5时,执行完FOR循环内容后,退出循环,执行下一条语句。
    语句Var1:=Var1*2一共执行5次;假设Var1的初始值是1,那么循环结束后, Var1的值为
    32。
    注意: <循环结束时变量值>不能等于其数据类型的最大值,否则会进入死循环。
    例如,假设上例中所使用的计数变量Counter的类型是SINT(范围从-128到127),如果语
    句为
    “FOR Counter:=1 TO 127 BY 1 DO”
    则会进入死循环。编程时应避免此类情况的发生。
    5 WHILE循环指令
    WHILE循环与FOR循环使用方法类似。二者的不同之处是, WHILE循环的结束条件不是指定
    的循环次数,而是任意的逻辑表达式。当满足该表达式叙述的条件满足时,执行循环。
    语法:
    WHILE <循环条件>
    <表达式>
    END_WHILE
    WHILE循环执行前先检查<循环条件>是否为TRUE,如果为TRUE,则执行<表达式>;当执行
    完一次后,再次检查<循环条件>,如果仍为TRUE,则再次执行,直到<循环条件>为FALSE。
    如果一开始<循环条件>就为FALSE,则不会执行WHILE循环里的指令。
    例如:
    WHILE Counter<>0 DO
    Var1 := Var1*2;
    Counter := Counter-1;
    END_WHILE
    此程序只要Counter不等于0,则一直会执行WHILE循环中的指令,直到Counter等于0为止。
    每执行一次循环,通过指令“Counter := Counter-1”使Counter的值减1,当Counter等于0
    时,循环结束。
    注意: WHILE循环因为没有循环次数的限定,因此相对FOR循环更容易发生死循环;因此
    可以在循环指令的内容中,增加语句来避免死循环的产生。如上述程序中的“Counter :=
    Counter-1”即可避免程序进入死循环。
    6 REPEAT循环指令
    REPEAT循环与WHILE循环一样,也是没有明确循环次数的循环。与WHILE循环的区别在于,
    REPEAT循环在指令执行以后,才检查结束条件。这就意味着无论结束条件怎样,循环至少
    执行一次。
    语法:
    REPEAT
    <表达式>
    UNTIL <循环结束条件>
    END_REPEAT
    语句一直执行,直到<循环结束条件>为TRUE时, REPEAT循环结束。如果<循环结束条件>一
    开始就为TRUE,则循环只执行一次。
    例如,上述WHILE示例程序也可写为:
    REPEAT
    Var1 := Var1*2;
    Counter := Counter-1;
    UNTIL
    Counter=0
    END_REPEAT
    注意: REPEAT循环同样需要避免死循环的发生。
    在一定的意义上, WHILE循环和REPEAT循环比FOR循环的功能更加强大,这是因为在执行循
    环前, WHILE循环和REPEAT循环不需要知道循环的次数。因此,在有些情况下,只使用这
    两种循环就可以了。然而,如果清楚地知道了循环的次数,那么FOR循环更好,因为FOR循
    环可以避免产生死循环。
    7 CONTINUE指令
    CONTINUE指令可以在FOR、 WHILE和REPEAT三种循环中使用,其作用为中断本次循环,直
    接执行下次循环。
    例如:
    FOR Counter:=1 TO 5 BY 1 DO
    INT1:= INT1/2;
    IF INT1=0 THEN
    CONTINUE; (* to avoid division by zero *)
    END_IF
    Var1:=Var1/INT1; (* only executed, if INT1 is not "0" *)
    END_FOR
    此程序使用CONTINUE指令,当INT1等于0时,直接结束本次循环,开始下一次循环,以
    避免指令“Var1:=Var1/INT1”中对INT1的除零操作。

    8 EXIT指令
    EXIT用于退出FOR循环、 WHILE循环、 REPEAT循环。例如:
    FOR Counter:=1 TO 5 BY 1 DO
    INT1:= INT1/2;
    IF INT1=0 THEN
    EXIT; (* to avoid division by zero *)
    END_IF
    Var1:=Var1/INT1;
    END_FOR
    当INT1等于0时, FOR循环结束。
    9. RETURN指令
    返回指令,用于根据一定条件退出POU。
    例如:
    IF b=TRUE THEN
    RETURN;
    END_IF
    a := a + 1;
    如果b为TRUE,将不会执行a := a +1,而是直接退出POU。
    10. JMP指令
    <label>:
    JMP <label>;
    跳转指令,跳转到label所在的位置执行程序。
    例如:
    i := 0;
    label: i := i+1;
    ......
    IF i<10 THEN
    JMP label;
    END_IF
    当i<10时,跳转回label所在行,执行i:=i+1。
    JMP指令容易造成程序结构混乱,降低代码可读性,不建议使用。
    +10
    不赞一个?
    打赏鼓励一下!
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

    本版积分规则

    
    顶部qrcode底部
    关注酷德网订阅号,获取更多资讯!

    QQ|Archiver|手机版|小黑屋|酷德论坛 ( 苏ICP备16065247号-1 )|网站地图

    GMT+8, 2026-11-9 03:46 , Processed in 0.204118 second(s), 43 queries .

    酷德网

    © 2001-2013 Hicodesys. 技术支持 by 酷德网

    快速回复 返回顶部 返回列表