结构化文本语言ST编程资料下载.pdf
《结构化文本语言ST编程资料下载.pdf》由会员分享,可在线阅读,更多相关《结构化文本语言ST编程资料下载.pdf(38页珍藏版)》请在冰豆网上搜索。
ST语言不能代替其它的语言,每种语言都有它自己的优点和缺点。
ST主要的一个优点就是能简化复杂的数学方程。
2.2特点结构化文本有以下特点:
高级文本编程语言结构化的编程简单的标准结构快速高效的编程使用直观灵活与PASCAL类似有计算机编程经验的人可以很容易地使用它符合IEC-标准2.3可能性AutomationStudio提供以下功能:
数字量和模拟量I/O逻辑操作逻辑比较表达式算术运算判断语句机器的状态语句循环语句功能块可选用的动态变量诊断工具结构文本特点结构文本(ST)TM3、结构文本基础3.1表达式表达式是指返回变量评估值的结构。
表达式由操作符和操作数组成。
操作数可以是常量,变量,调用函数或其它表达式。
3.2赋值操作符通过一个表达式和一个值来给变量赋值。
赋值语句包括位于左边的变量,赋值操作符:
=,及后边需要计算的表达式。
所有的语句,包括赋值语句,必须要以分号;
结尾。
当这行程序执行后,变量Var的值是变量Var的两倍。
3.3注释虽然注释经常被删掉,但它们是源代码中非常重要的一部分。
它们解释了一部分代码,使程序更易读懂。
注释帮助你或其他人读你的程序,即使过去了很长时间。
注释不被编译,因此不会影响程序的执行。
注释应该用一对星号和小括号括起来(*comment*)。
结构文本基础例子:
图Assignment例子:
图.单行注释例子:
结构文本(ST)TM3.4操作符优先级如果在一个表达式中使用几个操作符,就会出现优先级的问题(执行的顺序)。
操作符按优先级的顺序来执行。
在任何一个表达式中,首先执行最高级别的操作符,接着执行低一级的操作符,等等,直到执行完所有的操作符。
具有相同级别的操作符按照书写顺序从左至右依次执行。
结构文本基础操作符符号/语法:
括号()最高优先级函数调用例子Callargument(s)LN(A),MAX(X),等.注释*取反NOT乘除取模(取除法的余数)*/MOD加减+-比较,=等于不等于=逻辑与AND逻辑异或XOR逻辑或OR最低优先级结构文本(ST)TM执行顺序:
结构文本基础例:
图.例:
执行顺序首先做乘法,然后是加法,最后是减法。
使用小括号(最高优先级),可以得到你想要的执行顺序。
看下面的例子。
例:
如下所示,将操作符放到小括号里可能影响执行的顺序。
执行顺序表达式从左至右执行。
先执行小括号里的操作,接着是乘法。
因为小括号的优先级高于乘法的优先级。
可以看出,这两个例子看起来很相似,但结果不同。
结构文本(ST)TM4、命令组ST有下面的命令组:
布尔逻辑操作算术操作比较操作判断Case语句4.1布尔逻辑操作操作数不需要是BOOL类型。
布尔逻辑操作:
真值表:
这些操作符可以形成一个逻辑表达式和条件语句,结果是真(TRUE)或假(FALSE)。
命令组符号逻辑操作例子NOT取反a:
=NOTb;
AND逻辑与a:
=bANDc;
OR逻辑或a:
=bORc;
XOR异或a:
=bXORc;
输入ANDORXOR0000000000结构文本(ST)TM0ST编辑器允许任何数的分枝。
命令组例:
图.0电气图例:
图.0电气图练习:
当按下BtnLigntOn开关后,输出DoLight应该亮起,直到BtnLightOff按下后才关闭。
使用布尔逻辑操作编写该任务。
图.例子,逻辑操作结构文本(ST)TM4.2算术运算使用高级语言的决定性因素是看它处理算术运算的简单程度。
4.2.1基本的算术运算ST为应用程序提供了以下基本的算术运算:
数据类型是非常重要的参数。
看下面的表格。
:
*编译器出错信息:
Typemismatch:
CannotconvertREALtoINT.你可以看到,结果也依赖于语法和数据类型。
表达式左边的数据类型应该等同于(或大于)右边的数据类型。
命令组符号算术操作例子:
=赋值a:
=b;
+加a:
=b+c;
-减a:
=b-c;
*乘a:
=b*c;
/除a:
=b/c;
MOD取模(显示余数)a:
=bmodc;
语法数据类型结果ResOpOpRes:
=/;
INTINTINTRes:
REALINTINT.0Res:
=.0/;
REALREALINT.Res:
INTREALINTError备注:
左面数据类型:
=右面数据类型;
结构文本(ST)TM4.2.2隐性数据类型转换该类型的转换由编译器完成。
编译器将表达式中低的数据类型转换成高的数据类型。
如果有两种或多个类型的变量参与运算,那么必须将它们转换成相同的类型以便执行运算。
图.隐性数据类型转换SINT_Var首先转换成INT类型。
命令组DatatypeBOOLSINTINTDINTUSINTUINTUDINTREALBOOLBOOLxxxxxxxSINTxINTDINTUSINTUINTUDINTREALINTxINTDINTINTUINTUDINTREALDINTxDINTDINTDINTUDINTUDINTREALUSINTxUSINTINTDINTUINTUDINTREALUINTxUINTUINTDINTUINTUDINTREALUDINTxUDINTUDINTUDINTUDINTUDINTREALREALxREALREALREALREALREALREAL例子:
图.固有数据类型转换例子结构文本(ST)TM4.2.3显性数据类型转换显性数据类型转换也是数据类型转换问题。
我们知道,表达式的左右两边要有相同的数据类型,但还需注意第一眼看上去好像没什么问题,但和(INT_Weight+INT_Weight)超过了INT的取值范围。
在这种情况下,必须使用显性数据类型转换。
变量DINT_TotalWeight应该为DINT类型,右边的变量中至少有一个应转换成DINT类型。
这种转换用的是OPERATOR库中的函数。
命令组例子:
例子:
练习:
在两个不同的地方检测玻璃钢的温度,编写程序来计算平均温度,并以模拟量显示输出。
注意模拟量输入和输出必须是INT类型。
图.玻璃钢结构文本(ST)TM命令组4.3比较操作高级编程语言ST或以允许比较操作的简单结构分枝。
比较的结果是真(TRUE)或假(FALSE)。
比较操作作为一个逻辑条件用在IF,ELSE,WHILE和UNTIL语句中。
4.4判断用IF语句表示判断,这里还要用到比较操作。
判断分三部分:
简单IF语句IFELSE语句IFELSIF语句嵌套的IF符号逻辑比较含义例子=等于IFa=bTHEN不等于IFabTHEN大于IFabTHEN=大于等于IFa=bTHEN小于IFabTHEN=小于等于IFabTHEN1.比较Result:
=1;
1.语句(s)ELSIFTHENELSIFacTHEN2.比较(可选)Result:
=2;
2.语句(s)ELSEELSE前面IF语句都不满足(可选)Result:
=3;
3.语句(s)END_IFEND_IF判断结束结构文本(ST)TM命令组4.4.1IF最简单的IF判断语句。
基本上,如果条件表达式的结果为TRUE就执行语句。
如果条件表达式的结果是FALSE,程序就执行END_IF后面的语句。
条件表达式可以是简单关联的语句或用运算符(and,or等)连接的复合语句。
图.简单IF语句程序图.简单IF语句流程图结构文本(ST)TM4.4.2ELSE它是简单IF语句的扩展。
在IF结构中应该只有一个ELSE。
如果条件为TRUE,执行语句A。
如果条件为FALSE,执行语句B。
命令组图.IF-ELSE语句图.IFELSE程序结构文本(ST)TM命令组4.4.3ELSIF运用一个或多个ELSE_IF语句可以实现多个不同的条件,而不用使用多个简单的IF语句创建复杂的程序逻辑。
图.IF-ELSIF-ELSE流程图图.0IF-ELSIF-ELSE程序处理器自上而下地执行判定。
如果条件的结果为TRUE,那么就执行属于这个条件的指令和命令,之后处理器就跳到判断语句的结尾(END_IF)。
在程序的一次循环中,无论下一个条件是否为TRUE,只有上面属于第一个条件TRUE的语句被执行。
如果IF或ELSIF条件都不为TRUE,那么就执行属于ELSE下的指令。
结构文本(ST)TM命令组任务:
气象站第I部分用温度计来测量室外的温度,温度通过模拟量读取(=0),并且要以文本的形式在房间里显示。
当温度在C以下,显示cold(冷)。
当温度是在C到C之间,显示opt(最佳)。
当温度是C以上,显示hot(热)。
用IF,ELSIF和ELSE语句实现这个任务。
图.温度计,例子,IF备注:
在ST中,按如下指定一个字符串文本:
StringVar:
=COLD结构文本(ST)TM命令组4.4.4嵌套的IF语句嵌套对于依赖其它条件的条件测试很有用处。
一个嵌套的IF语句其优先级低于上一层的优先级,它的执行取决于上一层IF条件的结果。
使用嵌套时必须注意每个IF要和END_IF相匹配,否则会导致错误的执行顺序。
建议在每个嵌套的IF语句和它的执行语句中使用缩排。
IF语句可以嵌套在你想要的深度,但是三十或四十级以后,编辑器会用完内存,所以这是一种非常糟糕的编程格式!
这时你完全丢失了代码的总貌。
当使用嵌套多于级或级时,你应该重组程序代码。
图.嵌套IF语句图.嵌套IF语句程序结构文本(ST)TM0用两个但并不嵌套的IF语句也可以达到同样的功能,就像嵌套的语句一样。
可以在多个语句中运用标识变量或一个标志。
第一个IF语句描述该标志,其他的IF语句利用该变量。
命令组任务:
气象站第II部分检测温度和湿度。
只在当湿度介于0和%之间并且温度在和C之间显示文本OPT。
否则显示Temp.OK。
运用嵌套的IF语句完成该任务。
图.两个IF语句Fig.两个IF语句结构文本(ST)TM命令组在这种情况下,IF语句有相同的优先级,第二个IF语句和第一个IF语句一样每次都执行。
不用相同的变量,你可以有两个独立的IF语句。
当发生以下情况时,推荐使用Case语句代替IF语句:
IF结构有过多分层使用过多(三个或更多)的ELSE_IF在这种情况下Case语句更容易读懂。
CASE与IF结构相比较还具有另一个优点:
CASE语句中只做一次计算,并能创建更有效的代码。
结构文本(ST)TM命令组4.5Case语句在CASE语句中,控制变量与几个值作比较,如果表达式的结果与其中一个值相同,那么就执行相应的语句。
如果表达式的结果与任何一个值都不相同,那么就执行象IF语句一样的ELSE分支。
语句执行完后,继续执行END_CASE后的程序。
图.CASE流程图关键字语法描述CASEOFCASEstepvaria