[西门子] 西门子SCL基础教学---case...of

[复制链接]
查看21584 | 回复0 | 2024-3-11 16:35:09 | 显示全部楼层 |阅读模式
上期,我们讲解了if...then,这期我们讲解下case...of语句。

关于case...of的解释

执行CASE指令时,会将变量的值与多个常数(局部常量或全局常量)的值进行比较。如果变量的值等于某个常数(局部常量或全局常量)的值,则满足条件且将执行紧跟在该常数(局部常量或全局常量)后编写的指令。如果比较都不成立,则执行else后面的语句。
举例:

CASE #number OF

    1:

        #out := 10;

    10,13,15:

        #out := 20;

    20...25:

        #out := 30;

    30,33,35...38:

        #out := 40;

    #data:

        #out := 50;

    ELSE

        #out := 999;

END_CASE;
声明一个input变量number,数据类型为int。声明一个output变量out,数据类型为int声明一个constant变量data,数据类型为int,默认值50根据case...of的解释,得出以下表格。


当number输入一个1,因为程序中有1这个常数,则比较成功,执行1后面的语句,out=10。接下来就执行END_CASE后面的语句。
当number输入一个10、13或者15这三个中的任意一个数值,因为程序中有这三个常数,则比较成功,执行10、13、15后面的语句,out=20。接下来就执行END_CASE后面的语句。当number输入一个20到25之间的任意一个数值,因为程序中有20到25这个范围,则比较成功,执行这个20...25后面的语句,out=30。接下来就执行END_CASE后面的语句。当number输入一个30、33、35到38之间的任意一个数值,因为程序中有30、33、38到38这个范围,则比较成功,执行这个30、33、35到38后面的语句,out=40。接下来就执行END_CASE后面的语句。当number输入一个50,因为程序中有常量,刚好这个常量的默认值是50,则比较成功,执行该常量后面的语句,out=50。接下来执行END_CASE后面的语句。当number输入的值不等于上面任何一个常数或者常量,则比较不成功,执行else后面的语句,out=999。到此case...of结束,其实不是很难,多练习即可,也可以搭配很多的指令一起使用。有3个注意事项CASE #number OF里面的这个number和常量的数据类型需要注意,只能为整数(int、Dint、Lint)或者位序列(byte、word,Dword,Lword)的类型。如果使用别的,则会报错。如果有常量的话,那么CASE #number OF里面的number的数据类型必须和常量的数据类型要相同,不能number的数据类型是int,常量的数据类型是word这种情况。如果有常量的话,那么CASE #number OF里面的number的数据类型的取值范围必须大于等于常量的数据类型的取值范围,比如number是int,常量就只能是int、Sint、Uint、USint。不能是Dint、Lint

本帖子中包含更多资源

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

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则