Standard Functions Reference

IEC 61131-3 defines a comprehensive library of standard functions for type conversion, mathematical operations, string manipulation, and date/time handling essential for industrial automation applications.

🚀 Enhance Your Development Experience

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

Install VS Code Extension →

Type Conversion Functions

Type Conversion Functions

VAR
    // Source values
    BoolVal : BOOL := TRUE;
    IntVal : INT := 42;
    DIntVal : DINT := 123456;
    RealVal : REAL := 25.75;
    StringVal : STRING := '3.14159';
    
    // Conversion results
    ConvertedInt : INT;
    ConvertedReal : REAL;
    ConvertedString : STRING;
    ConvertedBool : BOOL;
END_VAR

// Boolean conversions
ConvertedInt := BOOL_TO_INT(BoolVal);        // TRUE → 1, FALSE → 0
ConvertedReal := BOOL_TO_REAL(BoolVal);      // TRUE → 1.0, FALSE → 0.0
ConvertedString := BOOL_TO_STRING(BoolVal);  // TRUE → 'TRUE', FALSE → 'FALSE'

// Integer conversions  
ConvertedBool := INT_TO_BOOL(IntVal);        // 0 → FALSE, ≠0 → TRUE
ConvertedReal := INT_TO_REAL(IntVal);        // 42 → 42.0
ConvertedString := INT_TO_STRING(IntVal);    // 42 → '42'

// Real conversions
ConvertedInt := REAL_TO_INT(RealVal);        // 25.75 → 25 (truncated)
ConvertedString := REAL_TO_STRING(RealVal);  // 25.75 → '25.75'

// String conversions (with error handling)
ConvertedReal := STRING_TO_REAL(StringVal);  // '3.14159' → 3.14159
ConvertedInt := STRING_TO_INT('100');        // '100' → 100
ConvertedBool := STRING_TO_BOOL('TRUE');     // 'TRUE' → TRUE

// Extended type conversions
ConvertedLReal := DINT_TO_LREAL(DIntVal);    // 32-bit to 64-bit real
ConvertedWord := INT_TO_WORD(IntVal);        // Reinterpret as bit string

⚠️ Conversion Safety Guidelines

  • • Always validate string-to-number conversions for invalid input
  • • Check for overflow when converting to smaller data types
  • • Real-to-integer conversion truncates (doesn't round)
  • • Use exception handling for string conversion errors
  • • Consider locale settings for decimal point formatting

Mathematical Functions

Mathematical Functions

VAR
    InputValue : REAL := -15.7;
    Angle : REAL := 30.0;      // Degrees
    AngleRad : REAL;           // Radians
    
    // Results
    AbsResult : REAL;
    SqrtResult : REAL;
    TrigResults : REAL;
    LogResults : REAL;
    RoundResults : INT;
END_VAR

// Basic mathematical functions
AbsResult := ABS(InputValue);           // |-15.7| = 15.7
SqrtResult := SQRT(25.0);               // √25 = 5.0

// Trigonometric functions (angles in radians)
AngleRad := Angle * 3.14159 / 180.0;    // Convert degrees to radians
TrigResults := SIN(AngleRad);           // sin(30°) = 0.5
TrigResults := COS(AngleRad);           // cos(30°) = 0.866
TrigResults := TAN(AngleRad);           // tan(30°) = 0.577

// Inverse trigonometric functions
TrigResults := ASIN(0.5);               // arcsin(0.5) = 0.524 rad (30°)
TrigResults := ACOS(0.866);             // arccos(0.866) = 0.524 rad (30°)
TrigResults := ATAN(1.0);               // arctan(1.0) = 0.785 rad (45°)

// Logarithmic and exponential functions
LogResults := LN(2.71828);              // Natural log: ln(e) = 1.0
LogResults := LOG(100.0);               // Base-10 log: log₁₀(100) = 2.0
LogResults := EXP(1.0);                 // Exponential: e¹ = 2.71828

// Rounding functions
RoundResults := TRUNC(15.7);            // Truncate: 15.7 → 15
RoundResults := ROUND(15.7);            // Round: 15.7 → 16
RoundResults := CEIL(15.1);             // Ceiling: 15.1 → 16
RoundResults := FLOOR(15.9);            // Floor: 15.9 → 15

// Power function
LogResults := EXPT(2.0, 3.0);          // 2³ = 8.0

// Modulo operation
RoundResults := MOD(17, 5);             // 17 mod 5 = 2

Basic Math Functions

  • ABS(x): Absolute value
  • SQRT(x): Square root
  • EXPT(x,y): x raised to power y
  • MOD(x,y): x modulo y

Trigonometric Functions

  • SIN/COS/TAN: Basic trig functions
  • ASIN/ACOS/ATAN: Inverse functions
  • Note: All angles in radians
  • π ≈ 3.14159265359

String Functions

String Manipulation Functions

VAR
    SourceString : STRING := 'Hello World Programming';
    SubString : STRING := 'World';
    NewString : STRING;
    Position : INT;
    StringLength : INT;
    
    FirstName : STRING := 'John';
    LastName : STRING := 'Smith';
    FullName : STRING;
    
    DataString : STRING := 'Temperature: 25.5°C';
    ExtractedValue : STRING;
END_VAR

// String length
StringLength := LEN(SourceString);      // Returns 21

// Extract substrings
NewString := LEFT(SourceString, 5);     // 'Hello'
NewString := RIGHT(SourceString, 11);   // 'Programming'  
NewString := MID(SourceString, 7, 5);   // 'World' (start at pos 7, length 5)

// String concatenation
FullName := CONCAT(FirstName, ' ', LastName);  // 'John Smith'
// Alternative syntax for multiple strings
FullName := CONCAT(CONCAT(FirstName, ' '), LastName);

// String search
Position := FIND(SourceString, SubString);     // Returns 7 (1-based index)
Position := FIND(SourceString, 'XYZ');         // Returns 0 (not found)

// String insertion
NewString := INSERT(SourceString, ' Beautiful', 6);  
// Result: 'Hello Beautiful World Programming'

// String deletion  
NewString := DELETE(SourceString, 6, 6);       // Remove 6 chars from pos 6
// Result: 'Hello Programming'

// String replacement
NewString := REPLACE(SourceString, 'World', 'Universe', 1);
// Result: 'Hello Universe Programming'

// Practical example: Extract numeric value from string
Position := FIND(DataString, ': ');            // Find ': ' position
IF Position > 0 THEN
    ExtractedValue := MID(DataString, Position + 2, 4);  // Extract '25.5'
END_IF;

// String comparison (case-sensitive)
IF SourceString = 'Hello World Programming' THEN
    // Strings match exactly
END_IF;

String Analysis Functions

  • LEN(str): String length
  • FIND(str, sub): Find substring position
  • LEFT(str, n): First n characters
  • RIGHT(str, n): Last n characters
  • MID(str, pos, len): Substring

String Modification Functions

  • CONCAT(str1, str2): Join strings
  • INSERT(str, sub, pos): Insert substring
  • DELETE(str, pos, len): Remove characters
  • REPLACE(str, old, new, n): Replace substring

Date and Time Functions

Date and Time Functions

VAR
    // Time values
    Duration1 : TIME := T#5h30m;
    Duration2 : TIME := T#2h15m;
    TotalTime : TIME;
    RemainingTime : TIME;
    
    // Date values
    StartDate : DATE := D#2024-01-15;
    EndDate : DATE := D#2024-06-15;
    ProjectDuration : TIME;
    
    // Date and time combination
    StartDateTime : DATE_AND_TIME := DT#2024-06-15-08:30:00;
    EndDateTime : DATE_AND_TIME;
    
    // Time of day
    StartTime : TIME_OF_DAY := TOD#08:30:00;
    EndTime : TIME_OF_DAY := TOD#17:00:00;
    WorkingHours : TIME;
END_VAR

// Time arithmetic
TotalTime := ADD_TIME(Duration1, Duration2);        // T#7h45m
RemainingTime := SUB_TIME(Duration1, Duration2);    // T#3h15m

// Date arithmetic (if supported by implementation)
ProjectDuration := SUB_DATE(EndDate, StartDate);    // Difference in days
EndDate := ADD_TIME_TO_DATE(StartDate, T#150d);     // Add 150 days

// Combining date and time
EndDateTime := CONCAT_DATE_TOD(EndDate, EndTime);   
// Result: DT#2024-06-15-17:00:00

// Extract components
VAR
    CurrentYear : INT;
    CurrentMonth : INT;
    CurrentDay : INT;
    CurrentHour : INT;
    CurrentMinute : INT;
END_VAR

// Extract date/time components (implementation-specific)
CurrentYear := YEAR(StartDateTime);         // 2024
CurrentMonth := MONTH(StartDateTime);       // 6
CurrentDay := DAY(StartDateTime);          // 15
CurrentHour := HOUR(StartDateTime);        // 8
CurrentMinute := MINUTE(StartDateTime);    // 30

// Time comparison
IF Duration1 > Duration2 THEN
    // Duration1 is longer
END_IF;

// Working time calculation
WorkingHours := SUB_TOD(EndTime, StartTime);        // T#8h30m

// Practical example: Shift timing
VAR
    ShiftStart : TIME_OF_DAY := TOD#06:00:00;
    ShiftEnd : TIME_OF_DAY := TOD#14:00:00;
    CurrentTime : TIME_OF_DAY;
    InShift : BOOL;
END_VAR

CurrentTime := GetCurrentTOD();  // System function
InShift := (CurrentTime >= ShiftStart) AND (CurrentTime <= ShiftEnd);

Date/Time Function Categories

Arithmetic Functions:

  • ADD_TIME: Add time durations
  • SUB_TIME: Subtract time durations
  • ADD_TIME_TO_DATE: Add time to date
  • SUB_DATE: Subtract dates

Combination Functions:

  • CONCAT_DATE_TOD: Combine date and time
  • SPLIT_DT: Split date/time
  • Various extractors: YEAR, MONTH, DAY, etc.

Practical Application Examples

Practical Applications of Standard Functions

// Process monitoring with data logging
FUNCTION_BLOCK ProcessMonitor
VAR_INPUT
    ProcessValue : REAL;
    Setpoint : REAL;
    ProcessName : STRING;
END_VAR

VAR_OUTPUT
    LogMessage : STRING;
    AlarmStatus : BOOL;
END_VAR

VAR
    Deviation : REAL;
    DeviationPercent : REAL;
    TimeStamp : STRING;
    ValueString : STRING;
END_VAR

// Calculate process deviation
Deviation := ProcessValue - Setpoint;
DeviationPercent := ABS(Deviation / Setpoint) * 100.0;

// Convert values to strings for logging
ValueString := REAL_TO_STRING(ProcessValue);
TimeStamp := DT_TO_STRING(GetCurrentDateTime());

// Build log message
LogMessage := CONCAT(TimeStamp, ': ');
LogMessage := CONCAT(LogMessage, ProcessName);
LogMessage := CONCAT(LogMessage, ' = ');
LogMessage := CONCAT(LogMessage, ValueString);

// Alarm check
AlarmStatus := DeviationPercent > 10.0;
IF AlarmStatus THEN
    LogMessage := CONCAT(LogMessage, ' [ALARM]');
END_IF;

END_FUNCTION_BLOCK

// Recipe calculation system
FUNCTION CalculateIngredientAmount : REAL
VAR_INPUT
    RecipeString : STRING;      // Format: "Ingredient:Percentage"
    BatchSize : REAL;
END_VAR

VAR
    ColonPos : INT;
    PercentString : STRING;
    PercentValue : REAL;
END_VAR

// Parse recipe string
ColonPos := FIND(RecipeString, ':');
IF ColonPos > 0 THEN
    PercentString := RIGHT(RecipeString, LEN(RecipeString) - ColonPos);
    PercentValue := STRING_TO_REAL(PercentString);
    CalculateIngredientAmount := BatchSize * PercentValue / 100.0;
ELSE
    CalculateIngredientAmount := 0.0;  // Error in format
END_IF;

END_FUNCTION

🎯 Function Selection Guidelines

  • Type Conversion: Always validate inputs and handle errors gracefully
  • Mathematical: Consider precision requirements and valid input ranges
  • String Functions: Be aware of 1-based indexing and string length limits
  • Date/Time: Understand timezone handling and system clock synchronization
  • Performance: Cache results of expensive calculations when possible
  • Portability: Some advanced functions may be implementation-specific

© 2025 ControlForge Systems