Syntax Basics

Structured Text follows a clear, readable syntax similar to Pascal or other high-level programming languages. Understanding these fundamental rules will help you write clean, maintainable ST code.

🚀 Enhance Your Development Experience

Get syntax highlighting, IntelliSense, and debugging support for Structured Text:

Install VS Code Extension →

Basic Statement Structure

Semicolon Termination

Every statement in Structured Text must end with a semicolon (;):

Basic Assignment Statements

// Variable assignments
Counter := Counter + 1;
Temperature := 25.5;
IsRunning := TRUE;

// Function calls
Result := MyFunction(Input1, Input2);
Timer1(IN := StartSignal, PT := T#5s);

Comments

ST supports two types of comments for documenting your code. Good commenting is essential for maintaining industrial automation systems over their long operational lifespans.

Single-line Comments

Use // for brief explanations and inline documentation:

// Motor control initialization
MotorSpeed := 0.0;              // Start at zero speed
MotorDirection := FORWARD;      // Default direction
MotorEnabled := FALSE;          // Safety: start disabled

// Process variables
Temperature := SensorReading;   // Read from analog input
Pressure := ADC_Value * 0.1;    // Convert to bar (0.1 bar/unit)

// Safety interlocks
IF EmergencyStop THEN
    MotorEnabled := FALSE;      // Immediate stop
    AlarmActive := TRUE;        // Trigger alarm
END_IF;

Multi-line Comments

Use (* *) for detailed documentation and code blocks:

(*
PID Controller Implementation
- Kp: Proportional gain = 2.0
- Ki: Integral gain = 0.5  
- Kd: Derivative gain = 0.1
- Output range: 0-100%
*)
Error := SetPoint - ProcessValue;
Integral := Integral + Error * ScanTime;
Derivative := (Error - LastError) / ScanTime;
Output := Kp * Error + Ki * Integral + Kd * Derivative;

(*
Temporarily disabled for testing
IF Pressure > MaxPressure THEN
    EmergencyShutdown := TRUE;
END_IF;
*)

💡 Best Commenting Practices

✅ Good Comments:

  • • Explain why, not just what
  • • Document safety-critical logic
  • • Include units and ranges
  • • Reference documentation sources
  • • Explain complex calculations

❌ Avoid:

  • • Obvious comments (Counter := Counter + 1; // Increment)
  • • Outdated or incorrect comments
  • • Commenting every single line
  • • Using comments to fix bad code
  • • Leaving TODO comments in production

Code Blocks and Structure

ST uses keywords to define code blocks. Blocks are always terminated with corresponding END keywords:

Control Block Structures

// IF block structure
IF Temperature > 80.0 THEN
    OverheatAlarm := TRUE;
    CoolingFan := TRUE;
ELSIF Temperature > 60.0 THEN
    OverheatAlarm := FALSE;
    CoolingFan := TRUE;
ELSE
    OverheatAlarm := FALSE;
    CoolingFan := FALSE;
END_IF;

// CASE block structure
CASE OperationMode OF
    1: SingleCycle();
    2: ContinuousMode();
    3: MaintenanceMode();
ELSE
    ErrorHandler();
END_CASE;

Operators and Expressions

Arithmetic Operators

Operator Description
+Addition
-Subtraction
*Multiplication
/Division
MODModulo
**Exponentiation

Comparison Operators

Operator Description
=Equal to
<>Not equal to
<Less than
<=Less than or equal
>Greater than
>=Greater than or equal

Logical Operators

// Boolean operations
EnableOutput := InputA AND InputB;
AlarmCondition := HighTemp OR LowPressure;
SafetyOK := NOT EmergencyStop;

// Complex expressions with precedence
Result := (A AND B) OR (C AND NOT D);

Assignment vs. Comparison

⚠️

Important Distinction

ST uses different operators for assignment and comparison:

// Assignment uses :=
Counter := 10;
Temperature := SensorReading;

// Comparison uses =
IF Counter = 10 THEN
    // Do something
END_IF;

Case Sensitivity

Structured Text is case-insensitive for keywords, identifiers, and operators:

Case Insensitivity Examples

// These are all equivalent
IF temperature > 80 THEN
if Temperature > 80 then
If TEMPERATURE > 80 Then

// Variable names are also case-insensitive
MyVariable := 10;
myvariable := 10;  // Same variable
MYVARIABLE := 10;  // Same variable

Formatting and Style

While ST is flexible with formatting, following consistent style improves readability:

❌ Poor Formatting

if a>10 then b:=20;c:=30;end_if;
for i:=1 to 100 do sum:=sum+i;end_for;

✅ Good Formatting

IF A > 10 THEN
    B := 20;
    C := 30;
END_IF;

FOR I := 1 TO 100 DO
    Sum := Sum + I;
END_FOR;

Common Syntax Patterns

Typical Program Structure

Typical Program Structure

// Variable declarations (usually at the top)
VAR
    Counter : INT := 0;
    Temperature : REAL;
    IsRunning : BOOL := FALSE;
END_VAR

// Program logic
IF StartButton AND NOT StopButton THEN
    IsRunning := TRUE;
    Counter := Counter + 1;
END_IF;

// Read inputs
Temperature := TemperatureSensor.Value;

// Control logic
IF Temperature > SetPoint THEN
    CoolingValve := TRUE;
ELSE
    CoolingValve := FALSE;
END_IF;

// Safety checks
IF EmergencyStop THEN
    IsRunning := FALSE;
    AllOutputs := FALSE;
END_IF;

💡 Next Steps

Now that you understand the basic syntax, you're ready to learn about:

© 2025 ControlForge Systems