结构化文本基础
结构化文本(Structured Text, ST)是一种高级文本语言,类似 Pascal/C,适合复杂算法和数学运算。
基本语法
变量定义
txt
VAR
counter : INT := 0; // 计数器
start_flag : BOOL; // 启动标志
temperature : REAL; // 温度值
END_VAR1
2
3
4
5
2
3
4
5
赋值与表达式
txt
// 赋值
counter := counter + 1;
temperature := 25.5;
// 表达式
result := (a + b) * c / 100;
flag := (x > 10) AND (y <= 20);1
2
3
4
5
6
7
2
3
4
5
6
7
条件语句
txt
IF counter > 100 THEN
counter := 0;
start_flag := TRUE;
ELSIF counter < 0 THEN
counter := 0;
ELSE
start_flag := FALSE;
END_IF;1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
CASE 多分支
txt
CASE status OF
0: motor_on := FALSE;
1: motor_on := TRUE;
2: alarm := TRUE;
ELSE
alarm := TRUE;
END_CASE;1
2
3
4
5
6
7
2
3
4
5
6
7
品牌方言对照
| 标准 ST | 西门子 SCL | 三菱 iQ-F ST | ABB ST |
|---|---|---|---|
IF ... THEN ... END_IF | 同左 | 同左 | 同左 |
VAR ... END_VAR | VAR ... END_VAR | 同左 | 同左 |
:= 赋值 | 同左 | 同左 | 同左 |
* / + - | 同左 | 同左 | 同左 |
AND OR NOT | 同左 | 同左 | 同左 |
实用示例
启保停逻辑
txt
// 西门子 SCL
motor_run := (start_btn OR motor_run) AND NOT stop_btn AND NOT fault;1
2
2
txt
// 三菱 FX5U ST
bMotorRun := (xStart OR bMotorRun) AND NOT xStop AND NOT xFault;1
2
2
数值换算(模拟量标定)
txt
// 将 0~27648 转换为 0~100°C
raw := IW64;
IF raw > 0 THEN
temperature := (raw / 27648.0) * 100.0;
ELSE
temperature := 0.0;
END_IF;1
2
3
4
5
6
7
2
3
4
5
6
7
故障报警汇总
txt
alarm_total := (sensor_fault OR conveyor_overload)
OR (temperature_high OR pressure_high);
// 声光报警
buzzer := alarm_total;
alarm_light := alarm_total;
// 故障停机
IF alarm_total THEN
motor_stop := TRUE;
END_IF;1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
💡 什么时候用 ST:逻辑复杂、有大量数学运算、需要循环或条件分支时,ST 比梯形图更高效。