跳转到内容
新建笔记

ST语法介绍

我来为您全面介绍西门子PLC的ST(Structured Text,结构化文本)语法,这是IEC 61131-3标准定义的一种高级编程语言。

ST是一种类似于Pascal的高级编程语言,主要用于复杂的数学运算、数据处理和算法实现。它在西门子TIA Portal(博途)中广泛应用于S7-1200/1500等PLC编程。

  • 每条语句以分号(;)结束
  • 不区分大小写(但建议保持一致性)
  • 支持单行注释(//)和多行注释(/* */)
  • 代码块使用关键字界定,如IF…END_IF

2. 变量声明与数据类型

跳转到“2. 变量声明与数据类型”

基本数据类型:

  • BOOL:布尔型(TRUE/FALSE)
  • BYTE:字节(8位)
  • WORD:字(16位)
  • DWORD:双字(32位)
  • INT:整数(-32768到32767)
  • DINT:双整数(-2147483648到2147483647)
  • REAL:浮点数(32位)
  • LREAL:长浮点数(64位)
  • TIME:时间类型
  • STRING:字符串类型

变量声明示例:

VAR
Motor_Start : BOOL;
Temperature : REAL;
Counter : INT := 0; // 带初始值
Message : STRING[50];
END_VAR
  • 加法:+
  • 减法:-
  • 乘法:*
  • 除法:/
  • 取模:MOD
  • 指数:**

示例:

Result := (A + B) * C / D;
Remainder := 17 MOD 5; // 结果为2
Power := 2 ** 3; // 结果为8
  • 等于:=
  • 不等于:<>
  • 大于:>
  • 小于:
  • 大于等于:>=
  • 小于等于:<=
  • 与:AND
  • 或:OR
  • 非:NOT
  • 异或:XOR

示例:

Output := Input1 AND Input2 OR NOT Input3;
  • 位与:AND(用于BYTE/WORD/DWORD)
  • 位或:OR
  • 位异或:XOR
  • 位非:NOT
IF Temperature > 100.0 THEN
Alarm := TRUE;
Fan_Speed := 100;
ELSIF Temperature > 80.0 THEN
Alarm := FALSE;
Fan_Speed := 75;
ELSE
Alarm := FALSE;
Fan_Speed := 50;
END_IF;
CASE Machine_State OF
0: // 停止状态
Motor := FALSE;
Lamp := FALSE;
1: // 运行状态
Motor := TRUE;
Lamp := TRUE;
2: // 维护状态
Motor := FALSE;
Lamp := TRUE;
ELSE
// 默认处理
Motor := FALSE;
Lamp := FALSE;
END_CASE;
FOR i := 1 TO 10 DO
Array[i] := i * 2;
END_FOR;
// 带步长的循环
FOR j := 10 TO 1 BY -1 DO
Countdown[j] := j;
END_FOR;
WHILE Temperature < SetPoint DO
Heater := TRUE;
Temperature := Temperature + 0.5;
END_WHILE;
REPEAT
Counter := Counter + 1;
Sum := Sum + Array[Counter];
UNTIL Counter >= 100
END_REPEAT;
VAR
Sensors : ARRAY[1..10] OF REAL;
Matrix : ARRAY[1..5, 1..3] OF INT;
END_VAR
// 访问数组元素
Sensors[5] := 25.5;
Matrix[2,3] := 100;
// 数组遍历
FOR i := 1 TO 10 DO
Total := Total + Sensors[i];
END_FOR;
TYPE Motor_Data :
STRUCT
Running : BOOL;
Speed : REAL;
Current : REAL;
Hours : DINT;
END_STRUCT;
END_TYPE
VAR
Motor1 : Motor_Data;
END_VAR
// 使用结构体
Motor1.Running := TRUE;
Motor1.Speed := 1500.0;
// 数学函数
Result := ABS(-10); // 绝对值
Result := SQRT(16.0); // 平方根
Result := SIN(angle); // 正弦
Result := LN(10.0); // 自然对数
// 类型转换
IntValue := REAL_TO_INT(25.7);
RealValue := INT_TO_REAL(100);
// TON - 接通延时定时器
MyTimer(IN := Start_Button,
PT := T#5S);
IF MyTimer.Q THEN
Motor := TRUE;
END_IF;
// CTU - 增计数器
MyCounter(CU := Count_Pulse,
RESET := Reset_Button,
PV := 100);
IF MyCounter.Q THEN
Batch_Complete := TRUE;
END_IF;
// 上升沿检测
VAR
Button : BOOL;
Button_Old : BOOL;
Rising_Edge : BOOL;
END_VAR
Rising_Edge := Button AND NOT Button_Old;
Button_Old := Button;
// 线性标定
Scaled_Value := (Raw_Value - 0) * (100.0 - 0.0) / (27648 - 0) + 0.0;
// 限幅处理
IF Value > Max_Limit THEN
Value := Max_Limit;
ELSIF Value < Min_Limit THEN
Value := Min_Limit;
END_IF;
CASE State OF
0: // 初始化
IF Init_Complete THEN
State := 10;
END_IF;
10: // 等待启动
IF Start_Button THEN
State := 20;
END_IF;
20: // 运行中
IF Stop_Button THEN
State := 30;
ELSIF Error THEN
State := 99;
END_IF;
30: // 停止
IF Reset_Button THEN
State := 0;
END_IF;
99: // 错误处理
IF Error_Reset THEN
State := 0;
END_IF;
END_CASE;

八、学习建议和实践步骤

跳转到“八、学习建议和实践步骤”
  1. 循序渐进:先掌握基本语法,再学习复杂结构
  2. 动手实践:在TIA Portal中创建项目,编写简单程序
  3. 从简单开始:先实现基本逻辑控制,如启停、互锁
  4. 逐步提高:学习定时器、计数器、PID控制等高级应用
  5. 项目驱动:通过实际项目需求来深化理解
// 电机启停控制带互锁
IF Start_Button AND NOT Stop_Button AND NOT Error THEN
Motor_Run := TRUE;
ELSIF Stop_Button OR Error OR Emergency_Stop THEN
Motor_Run := FALSE;
END_IF;
// 运行时间累计
IF Motor_Run THEN
Run_Time := Run_Time + Cycle_Time;
END_IF;
// 简单温控逻辑
Error := Setpoint - Actual_Temp;
IF Error > 2.0 THEN
Heater := TRUE;
Cooler := FALSE;
ELSIF Error < -2.0 THEN
Heater := FALSE;
Cooler := TRUE;
ELSE
Heater := FALSE;
Cooler := FALSE;
END_IF;

通过系统学习这些内容,结合实际编程练习,您就能熟练掌握西门子PLC的ST语言编程。建议您在TIA Portal软件中创建测试项目,逐一验证这些语法和功能,通过仿真或实际PLC来调试程序,这样能够更深入地理解和应用ST语言。


来源:CSDN 原文,首次发布于 2025-08-09。