Structured Text
Structured Text (ST) is a high-level, PASCAL-like textual programming language designed for implementing complex control algorithms, mathematical calculations, and state machines within a controller. It is the preferred choice for software developers because, unlike graphical languages, ST uses familiar programming constructs, including conditional statements, iterative loops, and explicit variable assignments. This structure allows for highly compact, readable, and efficient code when handling sophisticated data manipulation or control logic that requires advanced flow control.
Glossary: Key ST Terms
- Assignment Operator : The operator used to assign the result of an expression or value to a specific variable (e.g., `Variable := Value;`).
- Control Structures: Keywords like `IF-THEN-ELSE`, `CASE`, `FOR`, and `WHILE` that define the non-sequential flow of the program execution.
- Expression: A combination of variables, constants, and operators that is evaluated by the controller to produce a single result value.
- Variable Declaration: The mandatory process of defining a variable's name, its data type (e.g., BOOL, INT, REAL), and its scope before use.
- Program Organization Unit (POU): A common term for a modular, reusable code block, which can be either a Function or a Function Block.
Example Code: Control Structures
The following examples demonstrate how ST uses control structures for logic and calculations.
Conditional Logic (IF...THEN)
This is used to execute a block of code only if a specified Boolean condition is TRUE.
IF Temperature > 100.0 THEN
Heater_Status := TRUE;
Alarm_Light := TRUE;
END_IF;
Selection Logic (CASE)
The `CASE` statement executes a specific block of code based on the value of an integer expression.
CASE Input_Mode OF
1: // Mode 1: Manual
Motor_Speed := 50;
2: // Mode 2: Automatic
Motor_Speed := Auto_Setpoint;
ELSE // Default for any other value
Motor_Speed := 0;
END_CASE;
Iterative Loop (FOR)
The `FOR` loop repeats a block of code a fixed number of times, using a counter variable.
FOR i := 1 TO 10 DO
Result_Array[i] := Result_Array[i] * 2;
END_FOR;