zoukankan      html  css  js  c++  java
  • PLC中ST语言的几种程序流程控制语句

    ST语言是IEC61131-3中规定的5中标准语言之一,目前常用见品牌的PLC都支持这种语言(施耐德,AB可以直接选择创建该类型的程序段或者功能块,西门子的略微麻烦一点),ST语言的一个好处是移植性好,各家的ST语言基本都是类似的,所以如果有一个巨牛逼的算法,用ST语言实现是再好不过的了,这样可以很容易的在多个品牌的PLC上移植,当前,有个前提条件是在这个算法中不要使用太多的系统功能块,因为系统功能块往往都是各个品牌比较个性的东西,会给移植带来麻烦。另外,ST语言最适合写一些复杂的算法,个人觉得尤其是对应一些数组的操作,用ST语言是最方便的,当然有梯形图也能实现,不过远没有用ST来的方便。ST语言的语法和pascal非常像,有时候各种语言用多了,就会混,所以这里将ST语言的几种常用控制语句记录下来。
     
    1,IF结构:
    基本语法是:
    IF bool_expression_1 THEN
      <逻辑语句>
    ELSE IF bool_expression_2 THEN //这两行可选
      <逻辑语句>
    ElSE //这两行可选
      <逻辑语句>
    END_IF;
     
    举例:
      IF a>b THEN
           flag:=1;
      ELSE IF a<b THEN
          flag:=2;
      ELSE
          flag:=3;
      END_IF;
     
    说明:
      IF语句和梯形图里的常开常闭指令类似,不太推荐用IF语句写复杂逻辑,bool逻辑还是用梯形图写起来方便也直观,除非对ST语言非常热爱同时对梯形图一点不懂。
     
     
    2,FOR结构:
    基本语法是:
    FOR  count:= initial_value  TO final_value BY increment DO
      <循环体>
    END_FOR;
     
    举例:
    sum:=0;
    FOR  i:= 2  TO 100 BY 2 DO
          sum:=sum+i; //计算0-100内偶数和,包含100
    END_FOR;
    说明:
    BY可后面跟的步长是可选的,如果没有默认为1.
    如果要提前退出循环,可以在循环内部增加一个判断条件,配合EXIT语句实现,如下:
    FOR  count:= initial_value  TO final_value BY increment DO
    IF bool_expression THEN
    EXIT;
    END_IF;
    END_FOR;
     
    3,CASE结构:
    基本语法:
    CASE numeric_expression OF
    selector_1:
      <逻辑语句>
    ……
    selector_n:
      <逻辑语句>
    ELSE
      <逻辑语句>
    END_CASE;
     
    举例:
    CASE num OF
      1,2,3:
      a:=10;
      4:
      a:=20;
    else
      a:=100;
    END_CASE;
     
    说明:
    CASE语句和其他高级语言中的CASE语句很类似,但是少了break,实际上这里的CASE只会执行第一个满足条件的语句,相当于在每一个选项里自动增加了一个break操作。
     
    4,WHILE结构:
    基本语法:
    WHILE bool_expression DO
      <逻辑语句>
    END_WHILE;
     
    举例:
    i:=0;
    sum:=0;
    WHILE i=100 DO
      sum:=sum+i;
      i:=i+1;
    END_WHILE;
     
    说明:
    WHILE和FOR几乎是可以通用的,随个人喜好用吧。
     
     
    基本结构就上面几种,上面的语法参照了AB的资料,不同品牌之间可能略有区别,具体使用可以参考具体品牌的手册。
  • 相关阅读:
    TP5.1 分页CSS样式(转载)
    简单的layui二级联动
    关于layui部分表单不显示的问题(Select, checkBox)
    MySQL 开启远程访问权限 | 宝塔系统
    tp5.1 本地正常, 线上route.php不起作用的问题
    cocos自动图集
    微信小程序video
    nuxt https
    接口数据加密
    node里读取命令行参数
  • 原文地址:https://www.cnblogs.com/DreamRecorder/p/9288521.html
Copyright © 2011-2022 走看看