表达式
ST中最基本的元素是表达式,表达式由操作数和操作符组成。
操作数
一个操作数可以是一个常量,变量,功能调用或其他表达式。例如:
- 常量,例如:20,t#20s,’string’
- 变量,例如:iVar,Var1[2,3]
- 功能调用,值为调用返回值,例如 :Foo(1,2,4)
- 其它表达式:10+3,var1 OR var2,(x+y)/z,iVar1:=iVar2+22
操作符
下表记录了ST语言的操作符:
计算顺序
表达式中具有最高优先权的操作符应首先进行求值,接着是下一个较低优先权的操作符等,从高到低依次求值完成。优先权相等的操作符应按表达式中书写的从左到右的顺序进行。
当操作符具有两个操作数时,应首先对最左边的操作数求值。例如,在表达式SIN(A)*COS(B)中,应先对表达式SIN(A)求值,其次是对COS(B)求值,最后是积的求值。
整数字面量的类型上下文
整数字面量参与算术表达式时,会结合赋值目标等上下文确定计算类型,避免仅因默认窄类型而溢出。例如 f : DINT := 6 * 100; 得 600,f : DINT := 1000 * 1000; 得 1000000,f : DINT := -30000 - 30000; 得 -60000;f : USINT := 2 * 3; 得 6。若表达式目标类型范围不足,仍需使用合适的类型或显式类型化字面量。
整型操作数相除仍执行整数除法,随后才转换为目标类型。例 如 x : LREAL := 7 / 2; 得 3.0;如需浮点除法,请将至少一个操作数写成浮点类型,例如 REAL#7 / 2,结果为 3.5。