ST是一种使用语句来定义执行动作的文本化编程语言(同C语言很相近,但有区别)。有几个基本原则:
●使用Tab(制表符)和Enter(回车)键使得结构化文本易于阅读;
●注释信息尽量详尽。
ST由赋值语句(Assignment)、表达式(Expression)、指令(Instruction)、结构(Con-struct)以及注释(Comment)组成。在本小节中将进行详细说明。
1.赋值语句(Assignments)
(1)常规赋值语句
使用常规赋值语句改变标签内存储的数值。常规赋值语句的语法是:
tag∶=expression;
有关上式的说明,见表3-1。
表3-1 常规赋值语句说明
(2)非保持赋值语句
非保持赋值语句与上面所描述的常规赋值语句不同,控制器每次处于下面的任一状态,非保持赋值语句中的标签会重置为0。
●进入运行模式;
●当用户设置SFC为自动重置(Automatic Reset)的情况下,离开SFC的步时(仅适用于用户在步的操作间嵌入赋值语句,或者使用操作通过JSR指令调用结构化文本例程的情况)。
非保持赋值语句的语法如下:tag[∶=]expression;
上式的说明见表3-2。
表3-2 常规赋值语句说明
(3)为字符串赋值ASCII字符
通过赋值运算符可将ASCII字符赋给字符串标签中的DATA成员。通过指定字符值或者指定标签名称、DATA成员和字符元素来为字符串赋值。注意,这里经常出现一些错误,例如将string1标签定义为字符串(string)数据类型,如果要将大写字母A赋于string1.DATA[0],正确的写法是string1.DATA[0]∶=65;而不是string1.DATA[0]∶=A;。
注意:ASCII字符串指令用于增加或者插入ASCII字符串。常用的有CONCAT指令和INSERT指令。这时用户可以在RSLogix5000软件的Help菜单下查看这两种指令的用法。
2.表达式(Expression)
(1)表达式组成
一个表达式大致由以下的元素组成:
●标签名称:用以存储数值(变量);
●用户直接输入到表达式的数值(立即数);
●函数,例如,ABS、TRUNC;
●运算符,例如,+、-、>、<、AND、OR等。
(2)表达式的类型
在结构化文本中,用户可以使用以下两种类型的表达式:
布尔表达式:产生1(真)或0(假)布尔值的表达式。用户在使用时请注意以下三点:
1)布尔表达式使用布尔标签、关系运算符和逻辑运算符来比较条件是否为真或假。
2)简单的布尔表达式可以是一个单独的布尔型标签。
3)一般情况下,用户使用布尔型表达式作为执行其他逻辑的条件。
数值表达式:计算整数或者浮点数的表达式。用户在使用时注意以下两点:
1)数值表达式使用算术运算符、算术函数和按位(bitwise)运算符。例如,tag1+5。
2)通常情况下,用户会将数值表达式嵌套到布尔表达式中。例如,(tag1+5)>65。
(3)使用运算符和函数
算术运算符和函数是表达式不可缺少的组成部分。常用的算术运算符见表3-3。
表3-3 常用的算术运算符
算术函数用来执行数学操作。在函数中需指定常数、非布尔量的标签和表达式。常用的算术函数见表3-4。
表3-4 常用的算术函数
(续)
示例:如果adjustment和position均为DINT型标签,并且sensor1和sensor2均为实型标签,要求计算sensor1和sensor2平均值的绝对值再加上adjustment,并将结果存于position。
输入的程序如下所示:
position∶=adjustment+ABS((sensor1+sensor2)/2);(www.xing528.com)
关系运算符是将两数值或者字符串进行比较,产生一个真(1)或者假(0)的结果。经常使用的关系运算符见表3-5,逻辑运算符见表3-6。
表3-5 常用的关系运算符
表3-6 常用的逻辑运算符
示例:如果count和length均为双整型标签,done是布尔量标签,要求“如果count大于或者等于length,计算完成”,输入的程序如下所示:
done∶=(count<=length);
示例:如果photoeye1和photoeye2均为布尔型标签,open是布尔量标签,并且要求“如果photoeye1和photoeye2同为真,置位open”,输入如下的程序:
open∶=photoeye1&photoeye2;
按位运算符是对标签中的各位做逻辑运算。
常用的按位运算符见表3-7。
表3-7 常用的按位运算符
示例:如果input1、input2和result1均为双整型标签,并且要求“计算input1和input2的按位运算结果,并将其存到result1标签”。用户输入以下程序即可:
result1∶=input1ANDinput2;
(4)运算顺序
运算是按照预先规定的顺序,而不是一定按照从左到右的顺序来执行,但有两个原则:
1)同级运算的顺序是从左到右的执行。
2)如果表达式中包含多个运算符或者函数,可通过小括号“()”将条件分组,这样可以确保执行顺序正确并使得表达式更具有可读性。
运算的顺序见表3-8。
表3-8 运算的顺序
(5)注意事项
1)表达式中可以混合使用大小写字母。例如,“AND”也可以书写为And和and。
2)对于较复杂的应用场合,可以在表达式内使用括号集合多个表达式。
3.指令(Instruction)
ST的编程语句可以是指令。每扫描一次ST程序,指令执行一次。每次结构条件为真时,结构中的ST指令执行。如果结构中的条件为假,则结构中的语句不被扫描。此时没有梯级条件或者状态转变触发指令执行。与FBD指令的区别在于,FBD指令通过输入使用(EnableIn)触发其执行,而ST指令执行时相当于输入使用(EnableIn)一直置位。
与LAD指令的区别在于,LAD指令通过输入梯级条件触发执行。一些LAD指令仅当输入梯级条件从假变为真时执行。这些是转变触发型LAD指令。在ST的程序中,除非用户预先规定ST指令的执行条件,否则指令将会在其被扫描时执行。
例如,ABL指令是转变触发LAD指令。在图3-88中,当tagxic由零到置位转变一次,ABL指令执行一次。当tagxic一直置位或者清零时,ABL指令不执行。
图3-88 ABL指令梯级示例
在ST中,如果用户将上面的指令写为:
IFtag_xicTHENABL(0,serial_con);
END_IF;
tag_xic置位,ABL指令每次扫描时均执行。如果用户希望仅当tag_xic为从零到置位转变时ABL指令执行,必须编写ST条件指令,具体做法如下所示:
OSRI_01.inputbit∶=tag_xic;
OSRI(OSR_01);//设置正跳变沿
IF(OSRI_01.outputbit)THEN
ABL(0,serial_con);//如果发生正跳变则执行ABL指令
END_IF;
4.结构(Construction)
结构的应用十分广泛,常用的结构见表3-9,结构可以单独使用也可以与其他结构嵌套使用。在下节中将详细介绍上面几个结构的具体应用。
表3-9 ST常用的结构
5.注释(Comment)
为使用户编写的ST程序更具有可读性,需要添加注释。
ST的注释下载到控制器内存,并且可以上载。添加注释的几种类型见表3-10。
表3-10 添加注释的几种类型
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。