Skip to content

Syntax Reference

The syntax defines the rules of the language. Only by following these rules can the compiler understand your program. Coldwave Script is inspired by BASIC but incorporates many elements from IEC‑61131‑3 (Structured Text). As a result, the syntax is clear but strict: every statement must be properly terminated.

Program Structure

vb
PROGRAM  
' Declarations  
' Instructions  
END PROGRAM

Important: Without END PROGRAM, the program will not run. Inside the program, variables can be declared, function blocks instantiated, and instructions executed.

Declarations

Variables with DIM:

vb
DIM counter AS INT = 0  
DIM T AS TON

Constants with CONST:

vb
CONST PI AS REAL = 3.14159

Typical mistake: Using a variable before it is declared.

Assignments

For variables and block parameters: =

vb
counter = counter + 1
T(IN = TRUE, PT = T#1000ms)

For block declarations in global scope: :=

vb
DIM T AS TON(IN := TRUE, PT := T#1000ms)

Function Calls

vb
PRINT ABS(-5) ' Output: 5  
PRINT MAX(3,7) ' Output: 7

FUNCTION ADD2(A AS INT, B AS INT) AS INT  
RETURN A + B  
END FUNCTION

Block Calls

vb
DIM T AS TON  
T(IN = TRUE, PT = T#500ms)  
PRINT T.Q

Parameters are named (IN := …). Order does not matter.

ALIAS

ALIAS allows mapping long device addresses or block ports to easier-to-read identifiers.

IO Aliases

vb
ALIAS %IX0.0 AS StartButton
ALIAS %QX0.1 AS MotorRelay

PROGRAM
    IF StartButton THEN
        MotorRelay = TRUE
    END IF
END PROGRAM
  • %IX0.0, %QX0.1 are device/fieldbus addresses (TOKEN_IO).
  • StartButton and MotorRelay can then be used like normal variables.

Aliases for Block Ports

vb
PROGRAM
    DIM T AS TON
    ALIAS T.Q AS TimerDone

    T(IN = StartButton, PT = T#5s)
    IF TimerDone THEN
        MotorRelay = TRUE
    END IF
END PROGRAM

Aliases do not change program behavior; they only improve readability.

Control Structures

IF / ELSEIF / ELSE

vb
IF x > 10 THEN  
    PRINT "large"  
ELSEIF x > 5 THEN
    PRINT "medium"
ELSE  
    PRINT "small"  
END IF

FOR

vb
FOR i = 1 TO 5  
    PRINT i  
NEXT i

The number of iterations is clear from the syntax—important for reasoning about runtime.

DO / WHILE / UNTIL

There are four valid forms:

vb
' Condition before the block (pre-test)
DO WHILE cond
    ' Instructions
LOOP

DO UNTIL cond
    ' Instructions
LOOP

' Condition after the block (post-test)
DO
    ' Instructions
LOOP WHILE cond

DO
    ' Instructions
LOOP UNTIL cond

A DO ... LOOP without a condition is treated as an infinite loop and is not allowed.

SELECT / CASE

vb
SELECT expr
CASE value1
    ' Instructions
CASE value2
    ' Instructions
CASE ELSE
    ' Instructions
END SELECT

or in short form:

vb
SELECT expr
    CASE 0: PRINT "Off"
    CASE 1: PRINT "Automatic"
    CASE ELSE: PRINT "Manual"
END SELECT

Error Handling

The VM checks many errors at runtime. Common examples:

  • Division by zero → abort.
  • Invalid type → use TO_*.
  • Block not instantiated → add DIM.

Exercises

Task 1: Program with variable n, print “small” if n < 10, otherwise “large”.

vb
PROGRAM  
    DIM n AS INT = 7  
    IF n < 10 THEN  
        PRINT "small"  
    ELSE  
        PRINT "large"  
    END IF  
END PROGRAM

' Output: small

Task 2: Loop from 1 to 5, print squares.

vb
PROGRAM  
    DIM i AS INT  
    FOR i = 1 TO 5  
    PRINT i * i  
    NEXT i  
END PROGRAM

' Output: 1 4 9 16 25

Task 3: Instantiate TON block and print Q, ET.

vb
PROGRAM  
    DIM T AS TON  
    T(IN = TRUE, PT = T#1000ms)  
    PRINT T.Q, T.ET  
END PROGRAM

' Output: Q=FALSE, ET≈elapsed time up to 1000ms

Summary

  • Every program is inside PROGRAM … END PROGRAM.
  • Variables with DIM, constants with CONST.
  • Assignments: = for variables, := for block parameters.
  • Functions return values; blocks have inputs/outputs.
  • Control structures: IF, FOR, WHILE, DO … LOOP.
  • Avoid common errors with checks and clear structure.