一、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)

此语法结构用来判断条件,并在条件被满足的情况下,执行结构内的代码;基本的语法格式为

IF 判断的条件要求 THEN
....
....    //这里面是满足条件时,所需要执行的语句//
....
END_IF;也可以是:IF 判断的条件要求 THEN
...
...
...
ELSE:    //ELSE后面的是,当条件不满足时,所执行的语句//
....
....
....
EMD_IF;IF 判断的条件要求 THEN
...
...
...
ELSIF 判断的另一个条件要求 THEN  //这里当前面的IF所对应的条件无法满足时,会执行到这里来判断这里的条件//
...
...
...
END_IF;//条件判断语句支持嵌套,但应该始终坚持一个原则:IF和END IF必须成对出现!!//IF 判断的条件要求 THEN..........IF 判断的条件 THEN  //这个就是嵌套在内部的条件判断语句//..........END_IF;..........
END_IF;//判断的条件可以是常数或变量,判断是否相等(aaa=bbb)、判断是否大于(aaa>bbb)、判断是否小于(aaa<bbb)。//

举个例子:

2、条件选择语句(CASE......END_CASE)

此语法结构以一种表格的形式来判断某个条件值得状态,并执行对应状态下的语句。具体的语法规则

CASE <判断的条件变量> OF<变量值1>:··········    //条件变量值满足值1时执行的语句,执行结束后自动返回到CASE外//<变量值2>:··········<变量值3,变量值4,变量值5>:    //条件变量满足值3、4、5任意一个,就会执行下面对应的语句//·············<变量值n..变量值n+5>:    //条件变量的值满足n到n+5之间所有值的任意一个,都会执行里面的语句//..........ELSE             //条件变量值在以上变量都不满足时,就执行这里面的语句,这个条件分支可以不写//..........
END_CASE;/*==================== 注意一下语法规则 ========================*/
/*1、每个条件分支执行完毕后,会自动返回退出CASE表,不会继续执行剩下的内容;2、条件变量的数据类型支持:INT、BYTE、WORD等数字形式的变量与条件。3、CASE条件语句一样支持嵌套,也一样需要坚持一个原则:CASE和END_CASE必须成对出现!!*/
/*=============================================================*/

举个例子:

3、FOR循环迭代语句(FOR...END_FOR)

for循环语句设置循环条件的初始值与目标值,并按照步长,每执行一次循环体内的语句就增加一个步长,直到条件变量到达或大于目标值,则退出循环执行。语法规则

FOR <条件变量:=初始值> TO 目标值 BY 步长 DO   //条件变量从初始值开始,每一次循环增加一个步长,直到大于或等于目标值,就退出循环//
···
···     //这里面是循环执行的语句//
···
END_FOR;FOR <条件变量:=初始值> TO 目标值 BY 步长 DO
···
···
IF aaaa THENcontinue;   //可以支持使用continue打断当前当次循环,也可以使用return直接返回POU开头//
END_IF;
···
···
END_FOR;/*=================FOR循环的一些特性==================*/
/*1 程序执行进入循环体内后,将暂时不理会POU程序模块的循环周期间隔时间2 for循环的条件变量值会根据初始值和目标值的大小对比,自动加步长值或减步长值3 for循环体也同样支持嵌套,但一样需要坚持一个原则:FOR和END_FOR必须成对存在!!4 如果目标值等于条件值变量类型的极限值,FOR循环就会进入死循环!!*/
/*===================================================*/

举个例子:

4、WHILE条件循环语句(WHILE......END_WHILE)

while循环语句就是不断判断执行循环体内语句的条件是否被满足,然后循环执行直到条件不被满足或被特殊指令打断才退出的语句。语法规则

WHILE <执行的条件> DO........   //被循环执行的语句//....
END_WHILE;/*============WHILE循环执行语句的注意事项==============*/
/*1 while循环语句执行过程中,将暂时忽略pou程序循环执行的周期间隔时间;2 while循环可以使用continue或return语句打断当前循环或结束循环,return返回POU开头;3 while循环语句同样支持嵌套,但也必须坚持一个原则:WHILE和END_WHILE必须成对出现!!*/
/*===================================================*/

举个例子:

5、REPEAT循环语句(REPEAT....UNTIL.....END_REPEAT)

REPEAT循环语句的执行特点是,先执行循环体内的语句,再去判断执行条件,条件满足则退出执行。基本语法规则

REPEAT   //先执行循环体内的语句//······   //被循环执行的语句//···
UNTIL <退出执行的条件>  //这里执行了一次循环体的语句后,在去判断是否可以退出循环//
END_REPEAT;REPEAT········  //这里可以忽略UNTIL判断条件,但这样子存在死循环的危险!!!//
END_REPEAT;/*====================repeat循环语句的特点===================================*/
/*1 在循环体内执行语句时,会暂时忽略POU程序循环执行的间隔时间;2 与其他循环执行语句一样,也支持嵌套,且REPEAT...END_REPEAT必须成对出现!!!3 REPEAT循环语句内,也可以执行continue和return来中断循环的执行;4 UNTIL可以出现但每个REPEAT循环只能有一个退出条件!!!*/
/*==========================================================================*/

举个例子:

6、JMP跳转语句(JMP <标识符>)

JMP跳转语句可以实现程序块的非顺序执行逻辑和程序段的回调,为应用程序提供了更加灵活的编程逻辑,但用得不好也会造成一些麻烦。语法结构

JMP <目标程序段的标识符>   //标识符可以是任意的数据类型//<对应的标识符>://通过jmp跳转到标识符位置后,代码会从这个位置开始顺序往下执行,一直到下个jmp出现//········   //这些就是会被执行的程序段//····补充说明两个打断或改变程序执行顺序的指令:
EXIT:一般在循环体执行语句中,用来退出当前循环体,程序退出循环体后,继续往下执行。CONTINUE:一般用在循环体执行语句中,用来打断循环体当次的循环执行,立即回到循环体的开头,重新循环执行。/*======================jmp标识符程序跳转语句的特性====================*/
/*1 每个JMP都必须有对应的标识符与之对应,也就是:JMP <标识符> --->  <标识符>: 这个结构必须存在且完整2 JMP语句只负责将程序的执行位置跳转到对应的标识符的位置,并不会自动跳回!!3 如果有替代方案,建议轻易不要使用JMP这个跳转结构!!!*/
/*===================================================================*/

举个例子:

///

三、ST语言调用功能块与函数的基本语法:

在CODESYS中,编写函数时往往需要在POU里调用一些程序块;CODESYS提供的功能封装格式有FB(功能块)、FUN(函数)和POU。下面,我将逐一介绍这三种功能封装在ST语言编程下如何调用:

1、功能块FB的调用:

首先,功能块需要在CODESYS中被实例化,也就是要定义一个变量,其变量类型就是目标功能块,这一步操作跟使用哪种语言编程无关!如图:

接下来,在POU主程序里,使用ST语言通过实例化对象调用功能块。如图:

2、函数(FUN)的调用

CODESYS提供的函数形式封装的程序块,与功能块最大的区别是:函数有返回值且函数可以不需要实例化,直接使用即可。如下图:

  3、对工程块POU的调用

在有些情况下,我们需要通过调用另外一个POU来实现程序的嵌套或跳转。CODESYS提供的POU程序封装在被其他POU或其他程序封装调用时,和功能块类似,但无需实例化。如图:

//

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

附加说明:本人承接Linux系统的嵌入式软件开发项目,CODESYS的runntime组件开发。欢迎加微:wxk101633(备注:委托开发)

02 CODESYS应用基础之ST语言语法基础相关推荐

  1. C语言有四种基本常量,C语言语法基础

    声明:本课件在电脑上可正常浏览,在手机或平板电脑上只能浏览到简介. C语言语法基础的内容简介: 一..标识符 一个名字,对常量.变量.类型.语句.标号和函数进行命名 标识符的种类: 关键字 预定义标识 ...

  2. 【Python百日基础系列】Day02-Python语法基础

    Python百日基础系列 视频讲解2-1 [Python百日基础系列]02-Python语法基础-1 视频讲解2-2 [Python百日基础系列]02-Python语法基础-2 文章目录 Python ...

  3. WAP建站WML语言语法基础教程

    完成WAP服务器的建立和WAP浏览器的安装之后,我们接下来就可以使用WML语言来编写WAP网页或应用,并通过WAP服务器及浏览器进行调试.从本章开始我们将系统地学习WML语言,本章主要讲解WML语言的 ...

  4. c语言程序中注释定义,C语言语法基础:函数注释等等

    任何语言的入门大部分都是从Hello World开始的,我们学习到C语言也不例外.现在很多人说C语言很难,建议Java或者是Python入门.四喜想说的是,万事开头难,如果以C语言入门,之后的其他语言 ...

  5. Java基础笔记(入门,语法基础,流程控制,数组)

    Java语言入门 发展历程 三大技术体系 JavaSE 标准版 JavaEE 企业版 JavaME 嵌入式版 Java语言特点 简单性 健壮性 面向对象 分布式 多线程 动态性 可移植性(跨平台) J ...

  6. 2.1JAVA基础复习——JAVA语言的基础组成注释和常量变量

    JAVA语言的基础组成有: 1.关键字:被赋予特殊含义的单词. 2.标识符:用来标识的符号. 3.注释:用来注释说明程序的文字. 4.常量和变量:内存存储区域的表示. 5.运算符:程序中用来运算的符号 ...

  7. c语言零基础自学,c语言零基础入门 该如何学习

    原标题:c语言零基础入门 该如何学习 ​零基础学习C语言该从哪里开始学习呢?在学习之前你可以先问自己,为什么我要学C语言?是为了应付考试,还是为了应聘,还是为了提高自己的编程能力.如果你以后想要长期致 ...

  8. c语言编程基础课件,C语言编程基础课件.ppt

    第1章. C语言编程. 本章的重点是C的特性. C的历史. C的结构. 在计算机上运行C的方法. 2.1 C的历史. 2.2 C的特征. 2.3 C的组成C结构示例2查找两个数字的和#include ...

  9. python语法基础知识总结-python语法基础知识

    一.数字类型及操作 1.整数类型 可正可负,无取值范围限制pow(x,y):计算x^y 2.浮点数类型 存在不确定尾数round(x,d):对x四舍五入,d为小数截取位数e/E:a*10^b 3.复数 ...

  10. c语言编程基础 教案,C语言编程基础电子教案.doc

    C语言编程基础电子教案 课题(内容)1.1 C语言简史及特点课时1教学任务分析教学目标知识技能通过本节课的教学,使学生了解并熟悉编程语言C的发展历史.特点及其种类和适用范围.过程与方法通过C语言的发展 ...

最新文章

  1. 【HDOJ】3275 Light
  2. Spark技术在京东智能供应链预测的应用——按照业务进行划分,然后利用scikit learn进行单机训练并预测...
  3. Leetcode 240.剑指 Offer 06. 从尾到头打印链表 (每日一题 20210728)
  4. 某班学生有50人会c语言的有40人,《离散数学》期末考试题目及评分标准
  5. ubuntu 16.04 kvm 桥接模式创建虚拟机
  6. 离开互联网行业_如何使用互联网再也不会离开家
  7. 导出excel数字前面的0消失_EXCEL文本之王TEXT函数的4个运用
  8. [Redux/Mobx] 为什么redux能做到局部渲染呢?
  9. 分布式映射与集中式映射_K映射上的表达式映射和组包围
  10. CVPR 2021 目标检测、跟踪和姿态估计最新进展分享
  11. php 几个比较实用的函数
  12. opengl GPU 纹理加速优化
  13. Java中的反射和Java中的访问修饰符
  14. C++ 栈展开如何防止内存泄露
  15. 使用zabbix如何自动清理30天前的数据
  16. Spider爬虫笔记[更新中...]
  17. 设置bing桌面壁纸
  18. 阿里P8整理总结,入职大厂必备Java核心知识(附加面试题
  19. 触发器(基本的SR触发器、同步触发器、D触发器)
  20. 设计模式简单代码之Command模式(皇帝圣旨篇)

热门文章

  1. 在 CentOS 中部署 KMS 服务器(vlmcsd)
  2. 计算机地图制图的论文,计算机地图制图实习报告.doc
  3. DM8达梦数据库:sql查询达梦数据库实例的详情
  4. CSS-div垂直居中方法总结
  5. JavaWeb 登录实现图片验证码
  6. swagger/knife4j小事记录(二)
  7. 酷炫的可视化数据地图都是咋做的?10分钟学会
  8. 8086 CPU 寄存器
  9. 【毕业季】一个普通大二学生的迷茫与展望
  10. 据说这是世界上流传最广的财务模型,不用就out了