Skip to content

三、ST 语言编程 ​

ST 是具有类似于 C 语言等语法结构的文本格式的程序语言,适合于对图形语言(结构体梯形图)中难以表述的复杂处理进行编程。可以通过语句记述条件判断及重复等控制。

PLC 的三种编程方式:标签工程、功能块图/梯形图、ST 语言

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;

← 上一章:功能块与梯形图 | 下一章:常用解决方案 →

LPPLC 工业物联网云平台 · 软硬件与云平台全栈自研