02 CODESYS应用基础之ST语言语法基础-CODESYS资源下载区-酷德网 - CoDeSys软件教程下载,CoDeSys工控资讯门户 

酷德网

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

02 CODESYS应用基础之ST语言语法基础

[复制链接]
  • TA的每日心情
    开心
    2017-11-20 22:07
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2023-5-19 09:39:13 | 显示全部楼层 |阅读模式
    一、ST语言简介:参考了百度文库https://baike.baidu.com/item/ST/18737108?fr=aladdin
           结构化文本/结构式文件编程语言(英语:Structured text)也称为ST语言,是为可编程逻辑控制器(PLC)设计的编程语言,是相关的IEC 61131-3标准中支援几种语言之一。
            ST语言与我们传统所熟知的梯形图或顺序功能图有比较大的差别,学习过Linux系统下shell脚本编程或python的同事们应该会发现,ST语言的编程风格更像是一种可执行脚本。ST语言提供了其他脚本语言一样的功能支持,如IF...ELSE、CASE、WHILE、FOR等条件判断与循环执行语句,下面我将逐一为大家举例介绍基本的编程规则,如有遗漏或错误,还请大家批评指正,谢谢!
    //
    二、基本语法规则的介绍:
    注意:
           在ST语言中,赋值符号不再是等号(=),等于号被用作条件判断;ST语言用称为海象符的符号(:=)来替代等号,其规则也是将符号右边的值赋值给左边。
           使用ST语言,加、减、乘、除算法运算将不再使用运算块,而是直接使用符号+、-、*、/来代替,计算顺序从左到右,其中,*与/的计算优先级高于+、-。
    1、条件判断语句(IF....END IF)
          此语法结构用来判断条件,并在条件被满足的情况下,执行结构内的代码;基本的语法格式为:
    1. IF 判断的条件要求 THEN
    2. ....
    3. ....    //这里面是满足条件时,所需要执行的语句//
    4. ....
    5. END_IF;

    6. 也可以是:

    7. IF 判断的条件要求 THEN
    8. ...
    9. ...
    10. ...
    11. ELSE:    //ELSE后面的是,当条件不满足时,所执行的语句//
    12. ....
    13. ....
    14. ....
    15. EMD_IF;

    16. IF 判断的条件要求 THEN
    17. ...
    18. ...
    19. ...
    20. ELSIF 判断的另一个条件要求 THEN  //这里当前面的IF所对应的条件无法满足时,会执行到这里来判断这里的条件//
    21. ...
    22. ...
    23. ...
    24. END_IF;

    25. //条件判断语句支持嵌套,但应该始终坚持一个原则:IF和END IF必须成对出现!!//

    26. IF 判断的条件要求 THEN
    27.     .....
    28.     .....
    29.     IF 判断的条件 THEN  //这个就是嵌套在内部的条件判断语句//
    30.         .....
    31.         .....
    32.     END_IF;
    33.     .....
    34.     .....
    35. END_IF;

    36. //判断的条件可以是常数或变量,判断是否相等(aaa=bbb)、判断是否大于(aaa>bbb)、判断是否小于(aaa<bbb)。//
    复制代码
         举个例子:
    02 CODESYS应用基础之ST语言语法基础-1.jpg


    2、条件选择语句(CASE......END_CASE)
         此语法结构以一种表格的形式来判断某个条件值得状态,并执行对应状态下的语句。具体的语法规则:
    1. CASE <判断的条件变量> OF
    2.     <变量值1>:
    3.         ·····
    4.         ·····    //条件变量值满足值1时执行的语句,执行结束后自动返回到CASE外//
    5.     <变量值2>:
    6.         ·····
    7.         ·····
    8.     <变量值3,变量值4,变量值5>:    //条件变量满足值3、4、5任意一个,就会执行下面对应的语句//
    9.         ·····
    10.         ·····
    11.     ·
    12.     ·
    13.     ·
    14.     <变量值n..变量值n+5>:    //条件变量的值满足n到n+5之间所有值的任意一个,都会执行里面的语句//
    15.         .....
    16.         .....
    17.     ELSE             //条件变量值在以上变量都不满足时,就执行这里面的语句,这个条件分支可以不写//
    18.         .....
    19.         .....
    20. END_CASE;


    21. /*==================== 注意一下语法规则 ========================*/
    22. /*1、每个条件分支执行完毕后,会自动返回退出CASE表,不会继续执行剩下的内容;

    23.   2、条件变量的数据类型支持:INT、BYTE、WORD等数字形式的变量与条件。

    24.   3、CASE条件语句一样支持嵌套,也一样需要坚持一个原则:CASE和END_CASE必须成对出现!!*/
    25. /*=============================================================*/
    复制代码
          举个例子:
    02 CODESYS应用基础之ST语言语法基础-2.jpg


    3、FOR循环迭代语句(FOR...END_FOR)
         for循环语句设置循环条件的初始值与目标值,并按照步长,每执行一次循环体内的语句就增加一个步长,直到条件变量到达或大于目标值,则退出循环执行。语法规则:
    1. FOR <条件变量:=初始值> TO 目标值 BY 步长 DO   //条件变量从初始值开始,每一次循环增加一个步长,直到大于或等于目标值,就退出循环//
    2. ···
    3. ···     //这里面是循环执行的语句//
    4. ···
    5. END_FOR;

    6. FOR <条件变量:=初始值> TO 目标值 BY 步长 DO
    7. ···
    8. ···
    9. IF aaaa THEN
    10.    continue;   //可以支持使用continue打断当前当次循环,也可以使用return直接返回POU开头//
    11. END_IF;
    12. ···
    13. ···
    14. END_FOR;


    15. /*=================FOR循环的一些特性==================*/
    16. /*1 程序执行进入循环体内后,将暂时不理会POU程序模块的循环周期间隔时间

    17.   2 for循环的条件变量值会根据初始值和目标值的大小对比,自动加步长值或减步长值

    18.   3 for循环体也同样支持嵌套,但一样需要坚持一个原则:FOR和END_FOR必须成对存在!!

    19.   4 如果目标值等于条件值变量类型的极限值,FOR循环就会进入死循环!!*/
    20. /*===================================================*/
    复制代码
          举个例子:
    02 CODESYS应用基础之ST语言语法基础-3.jpg


    4、WHILE条件循环语句(WHILE......END_WHILE)
         while循环语句就是不断判断执行循环体内语句的条件是否被满足,然后循环执行直到条件不被满足或被特殊指令打断才退出的语句。语法规则:
    1. WHILE <执行的条件> DO
    2.     ....
    3.     ....   //被循环执行的语句//
    4.     ....
    5. END_WHILE;

    6. /*============WHILE循环执行语句的注意事项==============*/
    7. /*1 while循环语句执行过程中,将暂时忽略pou程序循环执行的周期间隔时间;

    8.   2 while循环可以使用continue或return语句打断当前循环或结束循环,return返回POU开头;

    9.   3 while循环语句同样支持嵌套,但也必须坚持一个原则:WHILE和END_WHILE必须成对出现!!*/
    10. /*===================================================*/
    复制代码
         举个例子:
    02 CODESYS应用基础之ST语言语法基础-4.jpg


    5、REPEAT循环语句(REPEAT....UNTIL.....END_REPEAT)
         REPEAT循环语句的执行特点是,先执行循环体内的语句,再去判断执行条件,条件满足则退出执行。基本语法规则:
    1. REPEAT   //先执行循环体内的语句//
    2.     ···
    3.     ···   //被循环执行的语句//
    4.     ···
    5. UNTIL <退出执行的条件>  //这里执行了一次循环体的语句后,在去判断是否可以退出循环//
    6. END_REPEAT;

    7. REPEAT
    8.     ····
    9.     ····  //这里可以忽略UNTIL判断条件,但这样子存在死循环的危险!!!//
    10. END_REPEAT;

    11. /*====================repeat循环语句的特点===================================*/
    12. /*1 在循环体内执行语句时,会暂时忽略POU程序循环执行的间隔时间;

    13.   2 与其他循环执行语句一样,也支持嵌套,且REPEAT...END_REPEAT必须成对出现!!!

    14.   3 REPEAT循环语句内,也可以执行continue和return来中断循环的执行;

    15.   4 UNTIL可以出现但每个REPEAT循环只能有一个退出条件!!!*/
    16. /*==========================================================================*/
    复制代码
           举个例子:
    02 CODESYS应用基础之ST语言语法基础-5.jpg


    6、JMP跳转语句(JMP <标识符>)
         JMP跳转语句可以实现程序块的非顺序执行逻辑和程序段的回调,为应用程序提供了更加灵活的编程逻辑,但用得不好也会造成一些麻烦。语法结构:
    1. JMP <目标程序段的标识符>   //标识符可以是任意的数据类型//

    2. <对应的标识符>://通过jmp跳转到标识符位置后,代码会从这个位置开始顺序往下执行,一直到下个jmp出现//
    3.     ····
    4.     ····   //这些就是会被执行的程序段//
    5.     ····


    6. 补充说明两个打断或改变程序执行顺序的指令:
    7. EXIT:一般在循环体执行语句中,用来退出当前循环体,程序退出循环体后,继续往下执行。

    8. CONTINUE:一般用在循环体执行语句中,用来打断循环体当次的循环执行,立即回到循环体的开头,重新循环执行。


    9. /*======================jmp标识符程序跳转语句的特性====================*/
    10. /*1 每个JMP都必须有对应的标识符与之对应,也就是:JMP <标识符> --->  <标识符>: 这个结构必须存在且完整

    11.   2 JMP语句只负责将程序的执行位置跳转到对应的标识符的位置,并不会自动跳回!!

    12.   3 如果有替代方案,建议轻易不要使用JMP这个跳转结构!!!*/
    13. /*===================================================================*/
    复制代码
         举个例子:
    02 CODESYS应用基础之ST语言语法基础-6.jpg


    ///
    三、ST语言调用功能块与函数的基本语法:
           在CODESYS中,编写函数时往往需要在POU里调用一些程序块;CODESYS提供的功能封装格式有FB(功能块)、FUN(函数)和POU。下面,我将逐一介绍这三种功能封装在ST语言编程下如何调用:
    1、功能块FB的调用:
                首先,功能块需要在CODESYS中被实例化,也就是要定义一个变量,其变量类型就是目标功能块,这一步操作跟使用哪种语言编程无关!如图:
    02 CODESYS应用基础之ST语言语法基础-7.jpg


                接下来,在POU主程序里,使用ST语言通过实例化对象调用功能块。如图:
    02 CODESYS应用基础之ST语言语法基础-8.jpg


    02 CODESYS应用基础之ST语言语法基础-9.jpg


    2、函数(FUN)的调用:
                 CODESYS提供的函数形式封装的程序块,与功能块最大的区别是:函数有返回值且函数可以不需要实例化,直接使用即可。如下图:
    02 CODESYS应用基础之ST语言语法基础-10.jpg


    02 CODESYS应用基础之ST语言语法基础-11.jpg


      3、对工程块POU的调用:
                   在有些情况下,我们需要通过调用另外一个POU来实现程序的嵌套或跳转。CODESYS提供的POU程序封装在被其他POU或其他程序封装调用时,和功能块类似,但无需实例化。如图:
    02 CODESYS应用基础之ST语言语法基础-12.jpg


    02 CODESYS应用基础之ST语言语法基础-13.jpg


    //
    总结:最后我想说,ST语言编程最终需要大家通过实践来掌握更多细节,通过看别人的资料始终时无法心领神会的!!!加油吧,别老是找捷径,人生本来就很短,你还一直想抄近道?

    点评

    新手路过  发表于 2024-3-15 03:19
    6666666666666  发表于 2024-3-15 03:18
    +10
    不赞一个?
    打赏鼓励一下!
    回复

    使用道具 举报

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

    本版积分规则

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

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

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

    酷德网

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

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