收藏 分享(赏)

5.4 ST表达式.ppt

上传人:11xg27ws 文档编号:4867933 上传时间:2019-01-18 格式:PPT 页数:72 大小:657KB
下载 相关 举报
5.4 ST表达式.ppt_第1页
第1页 / 共72页
5.4 ST表达式.ppt_第2页
第2页 / 共72页
5.4 ST表达式.ppt_第3页
第3页 / 共72页
5.4 ST表达式.ppt_第4页
第4页 / 共72页
5.4 ST表达式.ppt_第5页
第5页 / 共72页
点击查看更多>>
资源描述

1、本章节描述ST语言的编程方法,5.4 ST表达式,概述 结构化文本,Structured Text,简写为ST,是用结构化的描述文本来编写程序的一种编程语言。ST语言的特点是“ 高级文本编程” 和“ 结构化” ,适合于算法和结构较为复杂,其它编程语言(如梯形图、FBD 等)实现比较困难的情况。具有高效、快捷、简洁的优点。例:现在有A,B,C,D四个整形变量,要求得到这四个数的平均数,并赋值给E。,表达式是计算之后获得返回值的结构。在指令中需要使用该返回值。表达式由操作符、操作数、赋值组成。操作数可以是常量、变量、函数调用的返回值或其它表达式。,举例: 33 (*常量*) ivar (*变量*)

2、 fct(a,b,c) (*函数调用*) a AND b (*表达式*) (x*y) / z (*表达式*) real_var2 := (*赋值*) int_var;,使用结构化文本 (ST) 的编程语言,可以执行多种操作,例如调用功能块、和赋值、有条件地执行指令和重复任务。(ST) 的编程语言由各种元素组成,具体如下。表达式:ST 编程语言使用“ 表达式“。表达式是由操作符和操作数组成的结构,在执行表达式时会返回值。操作数:操作数表示变量,数值,地址,功能块等。操作符:操作符是执行运算过程中所用的符号。指令:指令用于将表达式返回的值赋给实际参数,并构造和控制表达式。,ST编程语言的各种元素,

3、计算表达式时将根据操作符的优先级所定义的顺序将操作符应用于操作数表。首先执行表达式中具有最高优先级的操作符,接着执行具有次优先级的操作符,依此类推,直到完成整个计算过程。优先级相同的操作符将根据它们在表达式中的书写顺序从左至右执行。可使用括号更改此顺序。,表达式,例如,如果 A、B、 C 和 D 的值分别为 1、 2、 3 和 4,并按以下方式计算:A+B-C*D,结果则为 -9。(A+B-C)*D,结果则为 0。如果操作符包含两个操作数,则先执行左边的操作数,例如在表达式SIN(A)*COS(B)中,先计算表达式 SIN(A),后计算 COS(B),然后计算它们的乘积。,操作数可以是:地址,

4、数值,变量,多元素变量,多元素变量的元素,功能调用, 功能块输出等。处理操作数的指令中的数据类型必须相同。如果需要处理不同类型的操作数,则必须预先执行类型转换。在下面的示例中,整数变量 i1 在添加到实数变量 r4 中之前会先转换为实数变量。r3 := r4 + SIN(INT_TO_REAL(i1) ;,操作数,使用其他数据类型,要将其他数据类型指定为地址的缺省数据类型,必须通过显式声明进行。使用变量编辑器可方便地完成变量的声明。地址的数据类型不能在 ST 段中直接声明(例如,不允许声明 AT %MW1: UINT)。例如,在变量编辑器中声明以下变量:UnlocV1: ARRAY 110 O

5、F INT;LocV1: ARRAY 110 OF INT AT %MW100;LocV2: TIME AT %MW100;下面的调用具有正确的语法:%MW200 := 5;UnlocV12 := LocV1%MW200;LocV2 := t#3s;,操作符是一种符号,它表示:要执行的算术运算,或要执行的逻辑运算,功能编辑调用。操作符是泛型的,即它们自动适应操作数的数据类型。,操作符,操作符:( ) 含义:使用括号优先级:1(最高)适用的操作数:表达式描述:括号用于改变操作符的执行顺序。示例:如果操作数 A、B、 C 和 D 的值分别为 1、 2、 3 4, A+B-C*D的结果则为 -9,而

6、 (A+B-C)*D的结果则为 0。,ST 语言操作符,操作符:FUNCNAME(实际参数 -list) 含义:功能处理(调用)优先级:2适用的操作数:表达式、数值、变量、地址(所有数据类型)描述:功能处理用于执行功能,ST 语言操作符,操作符:-含义:取反优先级:3适用的操作数:数据类型为INT、DINT、UINT、UDINT 或REAL 的表达式、数值、变量或地址描述:取反 (-) 时,操作数值的符号会反转。示例:本示例中,如果 IN1 为 4,则OUT 为 -4。OUT := - IN1 ;,ST 语言操作符,操作符:NOT含义:反码优先级:3适用的操作数:数据类型为BOOL、BYTE、

7、WORD 或DWORD 的表达式、数值、变量或地址描述:进行 NOT 运算时,操作数将逐位反转。示例:本示例中,如果 IN1 为1100110011,则 OUT 为 0011001100。OUT := NOT IN1 ;,ST 语言操作符,操作符:*含义:幂优先级:4适用的操作数:数据类型为REAL(底数)和 INT、DINT、UINT、UDINT 或REAL(指数)的表达式、数值、变量或地址描述:求幂 (*) 运算时,将以第一个操作数为底数,第二个操作数为指数进行求幂。示例:该示例中,如果 IN1 为 5.0,IN2为 4.0,则 OUT 为 625.0。OUT := IN1 * IN2 ;

8、,ST 语言操作符,操作符:*含义:乘法优先级:5适用的操作数:数据类型为INT、DINT、UINT、UDINT 或REAL 的表达式、数值、变量或地址描述:乘法 (*) 运算时,将用第一个操作数的值乘以第二个操作数(指数)的值。,ST 语言操作符,示例:该示例中,如果 IN1 为 5.0,IN2为 4.0,则 OUT 为 20.0。OUT := IN1 * IN2 ;注:先期库中的 MULTIME 函数可用于涉及数据类型 Time 的乘法。,操作符:/含义:除法优先级:5适用的操作数:数据类型为INT、DINT、UINT、UDINT 或REAL 的表达式、数值、变量或地址描述:除法 (/)

9、运算时,将用第一个操作数的值除以第二个操作数的值。,ST 语言操作符,示例:该示例中,如果 IN1 为 20.0,IN2为 5.0,则 OUT 为 4.0。OUT := IN1 / IN2 ;注:先期库中的 DIVTIME 函数可用于涉及数据类型 Time 的除法。,操作符:MOD含义:模数优先级:5适用的操作数:数据类型为INT、DINT、UINT 或UDINT 的表达式、数值、变量或地址描述:执行 MOD 时,将用第一个操作数的值除以第二个操作数的值,除法的余数(模数)显示为结果。,ST 语言操作符,示例:本示例中如果 IN1 为 7,IN2 为 2,则 OUT 为 1。如果 IN1 为

10、7,IN2 为 -2,则 OUT 为 1。如果 IN1 为 -7,IN2 为 2,则 OUT 为 -1。如果 IN1 为 -7,IN2 为 -2,则 OUT 为 -1。OUT := IN1 MOD IN2 ;,操作符:+含义:加法优先级:6适用的操作数:数据类型为INT、DINT、UINT、UDINT、REAL 或TIME 的表达式、数值、变量或地址描述:加法 (+) 运算时,将用第一个操作数的值加上第二个操作数的值。示例:本示例中,如果 IN1 为 7,IN2 为 2,则 OUT 为9。OUT := IN1 + IN2 ;,ST 语言操作符,操作符:-含义:减法优先级:6适用的操作数:数据类

11、型为INT、DINT、UINT、UDINT、REAL 或TIME 的表达式、数值、变量或地址描述:减法 (-) 运算时,将用第一个操作数的值减去第二个操作数的值。示例:该示例中,如果 IN1 为 10,IN2 为4,则 OUT 为 6。OUT := IN1 - IN2 ;,ST 语言操作符,操作符:含义:小于比较 优先级:7适用的操作数:数据类型为BOOL、BYTE、INT、DINT、UINT、UDINT、REAL、TIME、WORD、DWORD、STRING、DT、DATE或 TOD的表达式、数值、变量或地址,ST 语言操作符,描述:使用 将第一个操作数的值与第二个操作数的值进行比较。如果第

12、一个操作数的值小于第二个操作数的值,则结果为布尔 1。如果第一个操作数的值大于或等于第二个操作数的值,则结果为布尔 0。示例:本示例中,如果 IN1 小于 10,则OUT 为 1,否则为 0。OUT := IN1 10 ;,操作符:含义:大于比较 优先级:7适用的操作数:数据类型为BOOL、BYTE、INT、DINT、UINT、UDINT、REAL、TIME、WORD、DWORD、STRING、DT、DATE或 TOD的表达式、数值、变量或地址,ST 语言操作符,描述:使用 将第一个操作数的值与第二个操作数的值进行比较。如果第一个操作数的值大于第二个操作数的值,则结果为布尔 1。如果第一个操作

13、数的值小于或等于第二个操作数的值,则结果为布尔 0。示例:本示例中,如果 IN1 大于 10,则OUT 为 1,如果 IN1 小于 10 则为 0。OUT := IN1 10 ;,操作符:=含义:小于或等于比较 优先级:7适用的操作数:数据类型为BOOL、BYTE、INT、DINT、UINT、UDINT、REAL、TIME、WORD、DWORD、STRING、DT、DATE或 TOD的表达式、数值、变量或地址,ST 语言操作符,描述:使用 = 将第一个操作数的值与第二个操作数的值进行比较。如果第一个操作数的值小于或等于第二个操作数的值,则结果为布尔 1。如果第一个操作数的值大于第二个操作数的值

14、,则结果为布尔 0。示例:本示例中,如果 IN1 小于或等于10,则 OUT 为 1,否则为 0。OUT := IN1 = 10 ;,操作符:=含义:大于或等于比较 优先级:7适用的操作数:数据类型为BOOL、BYTE、INT、DINT、UINT、UDINT、REAL、TIME、WORD、DWORD、STRING、DT、DATE或 TOD的表达式、数值、变量或地址,ST 语言操作符,描述:使用 = 将第一个操作数的值与第二个操作数的值进行比较。如果第一个操作数的值大于或等于第二个操作数的值,则结果为布尔 1。如果第一个操作数的值小于第二个操作数的值,则结果为布尔 0。示例:本示例中,如果 IN

15、1 大于或等于10,则 OUT 为 1,否则为 0。OUT := IN1 = 10 ;,操作符:=含义:等于 优先级:8适用的操作数:数据类型为BOOL、BYTE、INT、DINT、UINT、UDINT、REAL、TIME、WORD、DWORD、STRING、DT、DATE或 TOD的表达式、数值、变量或地址,ST 语言操作符,描述:使用 = 将第一个操作数的值与第二个操作数的值进行比较。如果第一个操作数的值等于第二个操作数的值,则结果为布尔 1。如果第一个操作数的值不等于第二个操作数的值,则结果为布尔 0。示例:本示例中,如果 IN1 等于 10,则OUT 为 1,否则为 0。OUT :=

16、IN1 = 10 ;,操作符:含义:不等于 优先级:8适用的操作数:数据类型为BOOL、BYTE、INT、DINT、UINT、UDINT、REAL、TIME、WORD、DWORD、STRING、DT、DATE或 TOD的表达式、数值、变量或地址,ST 语言操作符,描述:使用 将第一个操作数的值与第二个操作数的值进行比较。如果第一个操作数的值不等于第二个操作数的值,则结果为布尔 1。如果第一个操作数的值等于第二个操作数的值,则结果为布尔0。示例:本示例中,如果 IN1 不等于 10,则OUT 为 1,否则为 0。OUT := IN1 10 ;,操作符:&含义:逻辑与 优先级:9适用的操作数:数据

17、类型为BOOL、BYTE、WORD 或DWORD 的表达式、数值、变量或地址,ST 语言操作符,描述:对于 ,操作符:AND含义:逻辑与 优先级:9适用的操作数:数据类型为BOOL、BYTE、WORD 或DWORD 的表达式、数值、变量或地址,ST 语言操作符,描述:对于 AND,操作数之间存在逻辑与关联。对于 BYTE、WORD 和 DWORD数据类型,此关联是逐位进行的。示例:本示例中,如果 IN1、IN2 和 IN3均为 1,则 OUT 为 1。OUT := IN1 AND IN2 AND IN3 ;,操作符:XOR含义:逻辑异或优先级:10适用的操作数:数据类型为BOOL、BYTE、W

18、ORD 或DWORD 的表达式、数值、变量或地址,ST 语言操作符,描述:对于 XOR,操作数之间存在逻辑异或关联。对于 BYTE、WORD 和 DWORD数据类型,此关联是逐位进行的。示例:本示例中,如果 IN1 和 IN2 不相等,则 OUT 为 1。如果 A 和 B 的状态相同(均为 0 或均为 1),则 D 为 0。OUT := IN1 XOR IN2 ;描述:如果将两个以上的操作数进行关联,当状态为 1 的操作数个数不是偶数时结果为 1,而当状态为 1 的操作数个数是偶数时结果为 0。示例:本示例中,如果有 1 个或 3 个操作数为 1,则 OUT 为 1,如果有 0、2 或 4 个

19、操作数为 1,则 OUT 为 0。OUT := IN1 XOR IN2 XOR IN3 XOR IN4 ;,操作符:OR含义:逻辑或优先级:11(最低)适用的操作数:数据类型为BOOL、BYTE、WORD 或DWORD 的表达式、数值、变量或地址,ST 语言操作符,描述:对于 OR,操作数之间存在逻辑或关联。对于 BYTE、WORD 和 DWORD 数据类型,此关联是逐位进行的。示例:本示例中,如果 IN1、IN2 或 IN3为 1,则 OUT 为 1。OUT := IN1 OR IN2 OR IN3 ;,赋值指令 描述:执行赋值时,单元素或多元素变量的当前值会替换为表达式的计算结果。赋值表达

20、式的结构为:左边是变量名称,之后是赋值操作符 :=,然后是要求值的表达式。两个变量(分别位于赋值操作符的左侧和右侧)的数据类型必须相同。数组是个特例。显式启用后,也可对长度不同的两个数组执行赋值操作。将一个变量的值赋给另一个变量赋值用于将一个变量的值赋给另一个变量。,ST指令,例如:指令A := B ;用于将变量 A 的值替换为变量 B 的当前值。如果 A 和 B 是基本数据类型,则 B的单个值会传递给 A。如果 A 和 B 是导出的数据类型,则所有 B 元素的值都传递给 A。,将数值赋给变量赋值用于将数值赋给变量。例如,指令C := 25 ;用于将值 25 赋给变量 C。 将运算值赋给变量赋

21、值用于将运算结果赋给变量。例如,指令X := (A+B-C)*D ;用于将 (A+B-C)*D 的运算结果赋给变量 X。,将 FFB 的值赋给变量赋值用于将功能或功能块返回的值赋给变量。例如,指令B := MOD(C,A) ;用于调用 MOD(模数)功能并将计算结果赋给变量 B。例如,指令A := MY_TON.Q ;用于将 MY_TON 功能块(TON 功能块的实例)的 Q 输出值赋给变量 A。(这不是功能块调用),选择指令 IF.THEN.END_IF 描述:IF 指令只有确定其相关布尔表达式的值为 1(真)时,才会执行指令或一组指令。如果条件为 0(假),将不会执行该指令或指令组。THE

22、N 指令标识条件的结尾和指令的开头。END_IF 指令标记指令的结尾。注意: 可以嵌套任何数量的 IF.THEN.END_IF 指令,以生成复杂的选择指令。,ST指令,示例 IF.THEN.END_IF该条件可以使用布尔变量表达。如果 FLAG 为 1,将执行指令;如果 FLAG 为 0,则不会执行。IF FLAG THENC:=SIN(A) * COS(B) ;B:=C - A ;END_IF ;该条件可使用返回布尔结果的操作表达。如果 A 大于 B,将会执行指令;如果 A 小于或等于 B,则不会执行。,示例 IF NOT.THEN.END_IF该条件可使用 NOT 反转(为 0 时执行这两

23、个指令)。IF NOT FLAG THENC:=SIN_REAL(A) * COS_REAL(B) ;B:=C - A ;END_IF ;,选择指令 ELSE描述: ELSE 指令始终出现在 IF.THEN、ELSIF.THEN 或 CASE 指令后面。如果 ELSE 指令出现在 IF 或 ELSIF 指令后面,则仅当 IF 和 ELSIF 指令的关联布尔表达式为 0(假)时,才会执行该指令或指令组。如果 IF 或 ELSIF 指令的条件为 1(真),则不会执行该指令或指令组。如果 ELSE 指令出现在 CASE 后面,则仅当所有标签都不包含选择器的值时,才会执行该指令或指令组。如果某个标识包

24、含选择器的值,则不会执行该指令或指令组。,ST指令,注意: 可以嵌套任何数量的IF.THEN.ELSE.END_IF 指令,以生成复杂的选择指令。示例 ELSEIF AB THENC:=SIN(A) * COS(B) ;B:=C - A ;ELSEC:=A + B ;B:=C * A ;END_IF ;,选择指令 ELSIF.THEN描述:ELSE 指令始终出现在 IF.THEN 指令后面。ELSIF 指令确定仅当 IF 指令的关联布尔表达式的值为 0(假)并且 ELSIF 指令的关联布尔表达式的值为 1(真)时,才会执行指令或指令组。如果 IF 指令的条件为 1(真)或者 ELSIF 指令的

25、条件为 0(假),则不会执行该命令或命令组。THEN 指令标识 ELSIF 条件的结尾和指令的开头。注意: 可以嵌套任何数量的IF.THEN.ELSIF. THEN.END_IF 指令,以生成复杂的选择指令。,ST指令,示例 ELSIF.THENIF AB THENC:=SIN(A) * COS(B) ;B:=SUB(C,A) ;ELSIF A=B THENC:=ADD(A,B) ;B:=MUL(C,A) ;END_IF ;,例如嵌套指令IF AB THENIF B=C THENC:=SIN(A) * COS(B) ;ELSEB:=SUB(C,A) ;END_IF ;ELSIF A=B THE

26、NC:=ADD(A,B) ;B:=MUL(C,A) ;ELSEC:=DIV(A,B) ;END_IF ;,选择指令 CASE.OF.END_CASE描述:CASE 指令包含一个 INT 数据类型的表达式(选择器)和一个指令组列表。每组都具有一个包含一个或多个整数(INT、DINT、UINT 或 UDINT)或整数值范围的标签。将执行的指令为其标签中包含选择器计算出的值的第一组指令。否则,将不执行任何标签对应的指令。OF 指令指示标签的开头。所有标签都不包含选择器的值时,才会在 CASE 指令内执行 ELSE 指令。END_CASE 指令标记指令的结尾。,ST指令,重复指令 FOR.TO.BY.

27、DO.END_FOR描述:FOR 指令用于在发生次数可预先确定的情况下。否则可使用 WHILE 或 REPEAT。FOR 指令会重复执行指令序列,直到遇到END_FOR 指令为止。发生次数由起始值、结束值和控制变量决定。控制变量、起始值和结束值必须具有相同的数据类型(DINT 或INT)。控制变量、起始值和结束值可由重复指令进行更改。这是对 IEC 61131-3 的补充。FOR 指令以控制变量值为步幅递增起始值,直到达到结束值。增量值的缺省值为 1。,ST指令,如果要使用其他值,则可以指定显式增量值(变量或常量)。每个新的循环之前都要检查控制变量值。如果它位于起始值和结束值的范围之外,则将离

28、开循环。首次运行循环之前,会进行检查以确定从初始值开始的控制变量递增是否是朝着结束值的方向。如果不是(例如,起始值 结束值并且增量为负值),则不会对循环进行处理。控制变量值不是在循环外定义的。DO 指令标识重复定义的结尾和指令的开头。 可以使用 EXIT 提前终止循环。END_FOR 指令标记指令的结尾。,重复指令 WHILE.DO.END_WHILE说明: WHILE 指令可使一个指令序列重复执行,直到其相关布尔表达式为 0(假)。如果从一开始该表达式就为假,则根本不会执行该指令组。DO 指令标识重复定义的结尾和指令的开头。可以使用 EXIT 提前终止循环。END_WHILE 指令标记指令的

29、结尾。,ST指令,下列情况下不应使用 WHILE,因为它可能导致无限循环,从而造成程序崩溃: WHILE 不能用于过程之间的同步,例如,不能用作具有外部定义的结束条件的“等待循环“。 WHILE 不能用在算法中,因为无法确保完成循环结束条件或执行 EXIT 指令。示例 WHILE.DO.END_WHILEx := 1; WHILE x = 100 DO x := x + 4; END_WHILE ;,重复指令 REPEAT.UNTIL.END_REPEAT描述: REPEAT 指令可使一个指令序列重复执行(至少执行一次),直到相关布尔条件为 1(真)。UNTIL 指令标记结束条件。可以使用 E

30、XIT 提前终止循环。END_REPEAT 指令标记指令的结尾。下列情况下不应使用 REPEAT,因为它可能导致无限循环,从而造成程序崩溃: REPEAT 不能用于过程之间的同步,例如,不能用作具有外部定义的结束条件的“等待循环“。,ST指令, REPEAT 不能用在算法中,因为无法确保完成循环结束条件或执行 EXIT 指令。示例 REPEAT.UNTIL.END_REPEATx := -1REPEATx := x + 2UNTIL x = 101END_REPEAT ;,重复指令 EXIT描述:EXIT 指令用于在满足结束条件前终止重复指令(FOR、WHILE 或 REPEAT)。如果 EX

31、IT 指令位于嵌套的重复指令内,则会离开最里面的循环(EXIT 所在的循环)。接下来,将执行循环结尾(END_FOR、END_WHILE 或 END_REPEAT)后的第一个指令。,ST指令,示例 EXIT如果 FLAG 的值为 0,执行指令后 SUM 将为 15。如果 FLAG 的值为 1,执行指令后 SUM 将为 6。SUM : = 0 ;FOR I := 1 TO 3 DOFOR J := 1 TO 2 DOIF FLAG=1 THEN EXIT;END_IF ;SUM := SUM + J ;END_FOR ;SUM := SUM + I ;END_FOR,JMP指令 : JMP ;

32、跳转指令,跳转到label所在的位置执行程序。 例如: i := 0; label: i := i+1;IF i10 THENJMP label; END_IF 当i10 时,跳转回label所在行,执行i:=i+1 。 JMP 指令容易造成程序结构混乱,降低代码可读性,不建议使用。,三、在ST中调用功能块 如果需要在ST中调用功能块,可直接输入功能块的实例名称,并在随后的括号中给功能块的各参数分配数值或变量,参数之间以逗号隔开;功能块调用以分号结束。 例如,在ST中调用TON定时器,假设其实例名为TON1 :,四、在ST中添加注释 注释是程序中非常重要的一部分,它使程序更加具有可读性,同时不会影响程序的执行。 在ST编辑器的声明部分或执行部分的任何地方,都可以添加注释。 在ST语言中,有两种注释方法:(1) 注释以 (* 开始,以 *) 结束。这种注释方法允许多行注释。 例如:,(2) 注释以“/” 开始,一直到本行结束。这是单行注释的方法。 例如:,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 实用文档 > 统计图表

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报