ST语言是IEC61131-3中规定的5中标准语言之一,目前常用见品牌的PLC都支持这种语言(施耐德,AB可以直接选择创建该类型的程序段或者功能块,西门子的略微麻烦一点),ST语言的一个好处是移植性好,各家的ST语言基本都是类似的,所以如果有一个巨牛逼的算法,用ST语言实现是再好不过的了,这样可以很容易的在多个品牌的PLC上移植,当前,有个前提条件是在这个算法中不要使用太多的系统功能块,因为系统功能块往往都是各个品牌比较个性的东西,会给移植带来麻烦。另外,ST语言最适合写一些复杂的算法,个人觉得尤其是对应一些数组的操作,用ST语言是最方便的,当然有梯形图也能实现,不过远没有用ST来的方便。ST语言的语法和pascal非常像,有时候各种语言用多了,就会混,所以这里将ST语言的几种常用控制语句记录下来。
 
1,IF结构:
基本语法是:
IF bool_expression_1 THEN
  <逻辑语句>
ELSIF bool_expression_2 THEN //这两行可选
  <逻辑语句>
ElSE //这两行可选
  <逻辑语句>
END_IF;
 
举例:
  IF a>b THEN
       flag:=1;
  ELSIF 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的资料,不同品牌之间可能略有区别,具体使用可以参考具体品牌的手册。

PLC中ST语言的几种程序流程控制语句的更多相关文章

  1. Java 语言基础 (初识Java语言, 变量和数据类型, 运算符, 流程控制语句, 数组)

    初始 Java 语言 Java SE -- Java Platform, Standard Edition 是 Java 平台的基础 Java SE 以前称为 J2SE, 可以编写桌面应用和基于 we ...

  2. Java 程序流程控制语句

    顺序语句 语句:使用分号分隔的代码称作为一个语句 注意:没有写任何代码只是一个分号的时候,也是一条语句,称作空语句 顺序语句就是按照从上往下的顺序执行的语句 Scanner scanner = new ...

  3. SqlServer和Oracle中一些常用的sql语句5 流程控制语句

    --在sql语句中 begin...end 用来设定一个程序块 相关于c#中的{} declare @yz real,@w int --声明变量 set @w=120 --为变量赋值 if @w< ...

  4. C语言中最常用的三种输入输出函数scanf()、printf()、getchar()和putchar()

    本文给大家介绍C语言中最常用的三种输入输出函数scanf().printf().getchar()和putchar(). 一.scanf()函数格式化输入函数scanf()的功能是从键盘上输入数据,该 ...

  5. Go 语言中的数组是一种 值类型(不像 C/C++ 中是指向首元素的指针)

    the-way-to-go_ZH_CN/07.1.md at master · Unknwon/the-way-to-go_ZH_CN https://github.com/Unknwon/the-w ...

  6. R语言中样本平衡的几种方法

    R语言中样本平衡的几种方法 在对不平衡的分类数据集进行建模时,机器学习算法可能并不稳定,其预测结果甚至可能是有偏的,而预测精度此时也变得带有误导性.在不平衡的数据中,任一算法都没法从样本量少的类中获取 ...

  7. [PLC]ST语言四:INV_MEP_MEF_PLS_PLF_MC_MCR

    一:INV_MEP_MEF_PLS_PLF_MC_MCR 说明:简单的顺控指令不做其他说明. 控制要求:无 编程梯形图: 结构化编程ST语言: (*运算结果的反转INV(EN);*) M415:=in ...

  8. [PLC]ST语言七:MOV_SMOV_CML_BMOV_FMOV_XCH_BCD_BIN

    一:MOV/SMOV/CML/BMOV/FMOV/XCH/BCD/BIN 说明:简单的顺控指令不做其他说明. (MOV)控制要求:无 (MOV)编程梯形图: (MOV)结构化编程ST语言: (*传送指 ...

  9. [PLC]ST语言六:DI/EI/FEND/WDT/FOR/NEXT

    一:DI/EI/FEND/WDT/FOR/NEXT 说明:简单的顺控指令不做其他说明. 控制要求:无 编程梯形图: 结构化编程ST语言:

随机推荐

  1. Windows服务安装命令:

    sc create YY.SmsPlatform.RemoteDataCenter binPath= "E:\YY.SmsPlatform\YY.SmsPlatform.RemoteData ...

  2. [转]在Win7 64位注册ActiveX控件

    原文作者: K_H_H 原文地址: http://blog.sina.com.cn/s/blog_56b96c5a0100ztc7.html  首先必须以管理员身份运行cmd.exe,即在cmd.ex ...

  3. codeforces 571B--Minimization(贪心+dp)

    D. Minimization time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...

  4. python爬虫(一)抓取 色影无忌图片

    原文地址: http://www.30daydo.com/article/56 由于平时爱好摄影.所以喜欢看看色影无忌论坛的获奖摄影作品,所以写了个小script用来抓取上面的获奖图片,亲自測试能够使 ...

  5. mina架构分析

    使用的版本号是2.0.9 IoService分析 AbstractIoAcceptor定义了全部的public接口,并定义了子类须要实现的bindInternal函数,AbstractPollingI ...

  6. js进阶 11-22/23 js如何实现选项卡

    js进阶 11-22/23 js如何实现选项卡 一.总结 一句话总结:通过索引把选项卡头的li标签和选项卡内容的div标签联系在一起,通过控制div标签的display属性可以实现选项卡的选项切换. ...

  7. js 99乘法表

    哈哈哈,笑死我了,突然怀念学习时代,撸了一个乘法表 for(let a=1;a<10;a++){let str = ''; for(let b=1;b<10;b++){ str = str ...

  8. Python 线程启动的四种方式

    import threading,_thread def action(i): print(i **32) #带有状态的子类 class Mythread(threading.Thread): def ...

  9. Android动态修改图片颜色的实现方式分析

    版权声明:本文为博主原创文章,未经博主允许不得转载. 1.修改色相.饱和度.亮度 参看:http://blog.csdn.NET/sjf0115/article/details/7267063 2.使 ...

  10. js进阶正则表达式11RegExp的属性和方法(RegExp的属性和方法,就是RegExp对象.(点)什么的形式)(正则表达式执行之前会被编译)

    js进阶正则表达式11RegExp的属性和方法(RegExp的属性和方法,就是RegExp对象.(点)什么的形式)(正则表达式执行之前会被编译) 一.总结 1. RegExp的属性和方法,就是RegE ...