查看: 5176|回复: 43
收起左侧

[资料分享] 中型PLC(codesys)常用语法分享

汇川技术小小吕 2022-6-17 22:51:09 来自手机 | 显示全部楼层 |阅读模式
邀请回答

马上注册,享受更多特权

您需要 登录 才可以下载或查看,没有帐号?立即注册   

x
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指令容易造成程序结构混乱,降低代码可读性,不建议使用。

点评

感谢分享  发表于 2023-7-15 09:10
感谢分享  发表于 2023-7-5 08:56
感谢分享  发表于 2023-3-19 13:07




上一篇:AM600最多可以带几个GR10-4PME脉冲输出模块?
下一篇:各位用750W的伺服时候,供电的线用多粗的?

已有 1 人打赏作者

工控小小白 赏了楼主25水滴
2 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香! 鲜花榜单
回复 邀请回答送花

使用道具 举报

工控小小白 2022-6-18 12:48:53 | 显示全部楼层
牛牛牛,吕总
回复 送花

使用道具 举报

Patrical 2022-6-18 13:42:42 | 显示全部楼层
感谢,很好的分享,有参考价值
回复 送花

使用道具 举报

工控老萌新 2022-6-18 13:52:11 来自手机 | 显示全部楼层
非常感谢楼主的分享
回复 送花

使用道具 举报

HEX07CD 2022-6-20 12:02:21 | 显示全部楼层
感谢,很好的分享,有参考价值
回复 送花

使用道具 举报

alluan 2022-6-21 08:18:03 | 显示全部楼层
GX 164349dlvwd1c72h1zlud3.png 164352qnum77rjsstr9ytz.png
回复 送花

使用道具 举报

zhi_good 2022-6-21 08:34:40 | 显示全部楼层
感谢,很好的分享,有参考价值
回复 送花

使用道具 举报

zhi_good 2022-6-21 08:46:15 | 显示全部楼层
感谢,很好的分享,有参考价值
回复 送花

使用道具 举报

约旦 2022-6-21 13:05:52 | 显示全部楼层

感谢,很好的分享,有参考价值
回复 送花

使用道具 举报

youri 2022-6-21 18:45:01 | 显示全部楼层
感谢分享,有参考价值
回复 送花

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册   

本版积分规则

有技术问题,就上汇川技术社区

INOVANCE汇川技术 公众号

扫码下载掌上汇川APP

全国服务热线:8:30-17:30

4000-300124

苏州地址:江苏省苏州市吴中区越溪友翔路16号

深圳地址:深圳市龙华新区观澜街道高新技术产业园汇川技术总部大厦

Copyright © 2003-2100 汇川技术 Powered by Discuz! X3.4 ( 苏ICP备12002088号 )
快速回复 返回列表 返回顶部