主题
三、ST 语言编程
ST 是具有类似于 C 语言等语法结构的文本格式的程序语言,适合于对图形语言(结构体梯形图)中难以表述的复杂处理进行编程。可以通过语句记述条件判断及重复等控制。
ST 是三种编程方式之一。梯形图画不清楚的复杂算法(多重条件判断、循环运算),用 ST 几行就能写完;主体逻辑仍可用梯形图,两者可以混用。
ST 运算符及优先级
| 运算符 | 内容 | 示例 | 优先顺序 |
|---|---|---|---|
( ) | 圆括弧 | (1+2)*(3+4) | 高 |
函数( ) | 函数调用 | ADD_E(bo01, in01, in02, in03) | |
** | 幂 | re01 := 2.0 ** 4.4 | |
NOT | 位取反 | NOT bo01 | |
*, /, MOD | 乘法、除法、余数 | 3 * 4, / 3, MOD 3 | |
+, - | 加法、减法 | in01 + in02, in01 - in02 | |
<, >, <=, => | 比较 | in01 < in02 | |
=, <> | 等式、不等式 | in01 = in02, in01 <> in02 | |
AND, & | 逻辑与 | bo01 & bo02 | |
XOR | 逻辑异或 | bo01 XOR bo02 | |
OR | 逻辑或 | bo01 OR bo02 | 低 |
一个语句中存在多个优先顺序相同的运算符时,从左侧的运算符开始运算。
代入语句
将右边式子的结果代入到左边的标签及软元件中,右边式子的结果需要与左边的数据类型相同。
pascal
<左边> := <右边>;pascal
intV1 := 0;条件语句
IF-THEN 语句
布尔式为真(TRUE)时执行语句,为假(FALSE)时不执行。
pascal
IF <布尔式> THEN
<语句...>;
END_IF;pascal
IF bool1 THEN
intV1 := intV1 + 1;
END_IF;IF-ELSE 语句
布尔式为真(TRUE)时执行语句1,为假(FALSE)时执行语句2。
pascal
IF <布尔式> THEN
<语句1...>;
ELSE
<语句2...>;
END_IF;pascal
IF bool1 THEN
intV1 := intV1 + 1;
ELSE
intV1 := intV1 + 2;
END_IF;IF-ELSIF 语句
按顺序判断布尔式,执行第一个为真的条件对应的语句。
pascal
IF <布尔式1> THEN
<语句1...>;
ELSIF <布尔式2> THEN
<语句2...>;
ELSIF <布尔式3> THEN
<语句3...>;
END_IF;pascal
IF bool1 THEN
intV1 := intV1 + 1;
ELSIF bool2 THEN
intV1 := intV1 + 2;
ELSIF bool3 THEN
intV1 := intV1 + 3;
END_IF;CASE 语句
根据整数式的值执行对应选择值的语句,无一致选择值时执行 ELSE 语句。
pascal
CASE <整数式> OF
<整数选择值1> : <语句1...>;
<整数选择值2> : <语句2...>;
...
<整数选择值n> : <语句n...>;
ELSE
<语句n+1...>;
END_CASE;pascal
CASE intV1 OF
1: bool1 := TRUE;
2: bool2 := TRUE;
ELSE
intV1 := intV1 + 1;
END_CASE;重复语句
FOR-DO 语句
根据重复变量的值,对若干语句反复执行。
pascal
FOR <重复变量初始化>
TO <终值>
BY <增加式> DO
<语句...>;
END_FOR;pascal
FOR intV1 := 0
TO 30
BY 1 DO
intV1 := intV1 + 1;
END_FOR;WHILE-DO 语句
布尔式为真(TRUE)期间执行语句。先判断条件再执行,条件为假时不执行。
pascal
WHILE <布尔式> DO
<语句...>;
END_WHILE;pascal
WHILE intV1 < 30 DO
intV1 := intV1 + 1;
END_WHILE;REPEAT-UNTIL 语句
布尔式为假(FALSE)期间执行语句。先执行语句再判断条件,条件为真时退出循环。
pascal
REPEAT
<语句...>;
UNTIL <布尔式>
END_REPEAT;pascal
REPEAT
intV1 := intV1 + 1;
UNTIL intV1 = 30
END_REPEAT;RETURN 语句
RETURN 语句用于在程序执行过程中结束程序,RETURN 语句以后的处理将全部被忽略,跳转至程序的终行。
pascal
IF bool1 THEN
RETURN;
END_IF;EXIT 语句
EXIT 语句只能在重复语句中使用,用于使重复语句中途结束。
pascal
FOR intV1 := 0
TO 10
BY 1 DO
IF intV1 > 10 THEN
EXIT;
END_IF;
END_FOR;功能与功能块的调用
功能的调用
在 ST 中调用功能时,在功能名后面用 ( ) 将自变量围住,多个变量用逗号分开。通过代入变量对功能的执行结果进行存储。
pascal
// 输入变量为一个的功能(例:ABS)
Output1 := ABS(Input1);
// 输入变量为三个的功能(例:MAX)
Output1 := MAX(Input1, Input2, Input3);功能块的调用
在 ST 中调用功能块时,在实例名后面将从变量至输入变量、输出变量的代入语句用 ( ) 围住,多个代入语句之间用逗号分开。功能块的执行结果通过在实例名后附加 . 并指定输出变量名进行存储。
pascal
// 输入变量为一个、输出变量为一个的功能块
FBADD1(IN1 := Input1);
Output1 := FBADD1.OUT1;
// 输入变量为三个、输出变量为二个的功能块
FBADD1(IN1 := Input1, IN2 := Input2, IN3 := Input3);
Output1 := FBADD1.OUT1;
Output2 := FBADD1.OUT2;