Appearance
Reference
This reference summarizes all built-in functions and standard blocks of the Coldwave Script-VM. It is intended for users who are familiar with the basics of the language and want to look things up directly.
The tables show internally used type codes such as VT_DINT or VT_TOD. They correspond to the data types described in the documentation:
VT_BOOL→ BOOLVT_SINT,VT_INT,VT_DINT,VT_LINT→ Signed integer typesVT_USINT,VT_UDINT,VT_ULINT→ Unsigned integer typesVT_DWORD→ DWORDVT_LREAL→ LREALVT_STRING→ STRINGVT_TIME,VT_DATE,VT_TOD,VT_DT→ Time and date types
Note: Signatures reflect the metadata used by the VM's builtin registry. Variadic functions accept additional arguments beyond the listed minimum.
Parameter names follow IEC 61131-3 conventions and can be used with formal call syntax, e.g. MID(IN:=myStr, L:=3, P:=2).
Functions marked (Extension) are not part of the IEC 61131-3 standard but are provided for convenience.
Functions typed as ANY_REAL (such as SQRT, SIN, LN, etc.) also accept integer arguments — the VM implicitly promotes them to LREAL before the call.
Functions
| Name | Short Description | Parameters (IEC-style) | Return |
|---|---|---|---|
| ABS | Absolute value. | IN: ANY_NUM | VT_DINT |
| ACOS | Arc cosine (radians). | IN: ANY_REAL | VT_LREAL |
| ADD | Addition (extensible). | IN1: ANY_NUM, IN2: ANY_NUM, ... | VT_DINT |
| ADD_DT_TIME | Date/time arithmetic. | DT: DT, T: TIME | VT_DT |
| ADD_TIME | Date/time arithmetic. | T1: TIME, T2: TIME | VT_TIME |
| AND | Bitwise AND (extensible). | IN1: DWORD, IN2: DWORD, ... | VT_DWORD |
| ASIN | Arc sine (radians). | IN: ANY_REAL | VT_LREAL |
| ATAN | Arc tangent (radians). | IN: ANY_REAL | VT_LREAL |
| CEIL | Round up to nearest integer. | IN: ANY_REAL | VT_LREAL |
| CONCAT | String concatenation (extensible). | IN1: STRING, IN2: STRING, ... | VT_STRING |
| COS | Cosine (radians). | IN: ANY_REAL | VT_LREAL |
| CURRENT_TIME | Current time-of-day. (Extension) | — | VT_TOD |
| CURRENT_TIME_MS | Elapsed time since boot. (Extension) | — | VT_TIME |
| DATE_TO_DT | Convert DATE to DT (TOD = 0). (Extension) | DATE: DATE | VT_DT |
| DELETE | Delete L characters from IN at position P (1-based). | IN: STRING, L: DINT, P: DINT | VT_STRING |
| DIV | Division. | IN1: ANY_NUM, IN2: ANY_NUM | VT_DINT |
| DT_TO_DATE | Extract DATE part from DT. | DT: DT | VT_DATE |
| DT_TO_TOD | Extract TOD part from DT. | DT: DT | VT_TOD |
| EQ | Chain comparison: IN1 == IN2 == ... (extensible). | IN1: ANY_NUM, IN2: ANY_NUM, ... | VT_BOOL |
| EXP | Natural exponential (e^x). | IN: ANY_REAL | VT_LREAL |
| EXPT | Power function (IN1 ^ IN2). | IN1: ANY_REAL, IN2: ANY_NUM | VT_LREAL |
| FIND | Position of first occurrence of IN2 in IN1 (1-based, 0 if not found). | IN1: STRING, IN2: STRING | VT_DINT |
| FLOOR | Round down to nearest integer. | IN: ANY_REAL | VT_LREAL |
| GE | Chain comparison: IN1 >= IN2 >= ... (extensible). | IN1: ANY_NUM, IN2: ANY_NUM, ... | VT_BOOL |
| GT | Chain comparison: IN1 > IN2 > ... (extensible). | IN1: ANY_NUM, IN2: ANY_NUM, ... | VT_BOOL |
| INSERT | Insert IN2 into IN1 at position P (1-based). | IN1: STRING, IN2: STRING, P: DINT | VT_STRING |
| LE | Chain comparison: IN1 <= IN2 <= ... (extensible). | IN1: ANY_NUM, IN2: ANY_NUM, ... | VT_BOOL |
| LEFT | Leftmost L characters of IN. | IN: STRING, L: DINT | VT_STRING |
| LEN | Length of string in characters. | IN: STRING | VT_DINT |
| LIMIT | Clamp IN to [MN, MX]. | MN: ANY_NUM, IN: ANY_NUM, MX: ANY_NUM | VT_DINT |
| LN | Natural logarithm. | IN: ANY_REAL | VT_LREAL |
| LOG | Common logarithm (base 10). | IN: ANY_REAL | VT_LREAL |
| LT | Chain comparison: IN1 < IN2 < ... (extensible). | IN1: ANY_NUM, IN2: ANY_NUM, ... | VT_BOOL |
| MAKE_DT | Combine DATE and TOD into DT. (Extension) | DATE: DATE, TOD: TOD | VT_DT |
| MAX | Maximum (extensible). | IN1: ANY_NUM, IN2: ANY_NUM, ... | VT_DINT |
| MID | L characters from IN starting at position P (1-based). | IN: STRING, L: DINT, P: DINT | VT_STRING |
| MIN | Minimum (extensible). | IN1: ANY_NUM, IN2: ANY_NUM, ... | VT_DINT |
| MOD | Remainder (modulo). | IN1: ANY_INT, IN2: ANY_INT | VT_DINT |
| MOVE | Pass-through (identity). | IN: ANY_NUM | VT_DINT |
| MUL | Multiplication (extensible). | IN1: ANY_NUM, IN2: ANY_NUM, ... | VT_DINT |
| MUX | Select one of IN0..INn by index K (extensible). | K: DINT, IN0: LREAL, IN1: LREAL, ... | VT_LREAL |
| NE | Pairwise comparison: IN1 != IN2. | IN1: ANY_NUM, IN2: ANY_NUM | VT_BOOL |
| NOT | Bitwise NOT. | IN: DWORD | VT_DWORD |
| OR | Bitwise OR (extensible). | IN1: DWORD, IN2: DWORD, ... | VT_DWORD |
| POW | Power function (alias for EXPT). (Extension) | IN1: ANY_NUM, IN2: ANY_NUM | VT_LREAL |
| REPLACE | Replace L characters in IN1 at position P (1-based) with IN2. | IN1: STRING, IN2: STRING, L: DINT, P: DINT | VT_STRING |
| RIGHT | Rightmost L characters of IN. | IN: STRING, L: DINT | VT_STRING |
| ROL | Rotate left. | IN: DWORD, N: DINT | VT_DWORD |
| ROR | Rotate right. | IN: DWORD, N: DINT | VT_DWORD |
| ROUND | Round to nearest integer. | IN: ANY_REAL | VT_LREAL |
| SEL | Select IN0 or IN1 based on G. | G: BOOL, IN0: ANY_NUM, IN1: ANY_NUM | VT_DINT |
| SGN | Sign function (−1, 0, +1). (Extension) | IN: ANY_NUM | VT_DINT |
| SHL | Shift left. | IN: DWORD, N: DINT | VT_DWORD |
| SHR | Shift right. | IN: DWORD, N: DINT | VT_DWORD |
| SIN | Sine (radians). | IN: ANY_REAL | VT_LREAL |
| SQRT | Square root. | IN: ANY_REAL | VT_LREAL |
| SUB | Subtraction. | IN1: ANY_NUM, IN2: ANY_NUM | VT_DINT |
| SUB_DT_TIME | Date/time arithmetic. | DT: DT, T: TIME | VT_DT |
| SUB_TIME | Date/time arithmetic. | T1: TIME, T2: TIME | VT_TIME |
| TAN | Tangent (radians). | IN: ANY_REAL | VT_LREAL |
| TIME_TO_INT | Convert TIME (ms) to DINT. (Extension) | T: TIME | VT_DINT |
| TIME_TO_REAL | Convert TIME (ms) to LREAL. (Extension) | T: TIME | VT_LREAL |
| TO_BOOL | Type conversion to BOOL. | IN: ANY_NUM | VT_BOOL |
| TO_DINT | Type conversion to DINT. | IN: ANY_NUM | VT_DINT |
| TO_INT | Type conversion to INT. | IN: ANY_NUM | VT_DINT |
| TO_LINT | Type conversion to LINT. | IN: ANY_NUM | VT_LINT |
| TO_LREAL | Type conversion to LREAL. | IN: ANY_NUM | VT_LREAL |
| TO_REAL | Type conversion to REAL. | IN: ANY_NUM | VT_LREAL |
| TO_SINT | Type conversion to SINT. | IN: ANY_NUM | VT_SINT |
| TO_STRING | Convert any value to string. (Extension) | IN: ANY | VT_STRING |
| TO_TIME | Type conversion to TIME. (Extension) | IN: ANY_NUM | VT_TIME |
| TO_UDINT | Type conversion to UDINT. | IN: ANY_NUM | VT_UDINT |
| TO_UINT | Type conversion to UINT. | IN: ANY_NUM | VT_UDINT |
| TO_ULINT | Type conversion to ULINT. | IN: ANY_NUM | VT_ULINT |
| TO_USINT | Type conversion to USINT. | IN: ANY_NUM | VT_USINT |
| TOD_TO_DT | Convert TOD to DT (DATE = 0). (Extension) | TOD: TOD | VT_DT |
| TRUNC | Truncation toward zero. | IN: ANY_REAL | VT_DINT |
| XOR | Bitwise XOR (extensible). | IN1: DWORD, IN2: DWORD, ... | VT_DWORD |
Blocks
CTD – Down Counter
Down counter (decrements CV on rising edge of CD).
Input
| Name | Type | Meaning |
|---|---|---|
| CD | VT_BOOL | Count-down; rising edge decrements CV. |
| LD | VT_BOOL | Load; loads PV into CV. |
| PV | VT_INT | Preset value. |
Output
| Name | Type | Meaning |
|---|---|---|
| Q | VT_BOOL | Counter output. |
| CV | VT_INT | Current value. |
CTU – Up Counter
Up counter (increments CV on rising edge of CU).
Input
| Name | Type | Meaning |
|---|---|---|
| CU | VT_BOOL | Count-up; rising edge increments CV. |
| R | VT_BOOL | Reset; sets CV := 0. |
| PV | VT_INT | Preset value. |
Output
| Name | Type | Meaning |
|---|---|---|
| Q | VT_BOOL | Counter output. |
| CV | VT_INT | Current value. |
CTUD – Up/Down Counter
Up/down counter.
Input
| Name | Type | Meaning |
|---|---|---|
| CU | VT_BOOL | Count-up; rising edge increments CV. |
| CD | VT_BOOL | Count-down; rising edge decrements CV. |
| R | VT_BOOL | Reset; sets CV := 0. |
| LD | VT_BOOL | Load; loads PV into CV. |
| PV | VT_INT | Preset value. |
Output
| Name | Type | Meaning |
|---|---|---|
| QU | VT_BOOL | TRUE if CV >= PV. |
| QD | VT_BOOL | TRUE if CV <= 0. |
| CV | VT_INT | Current value. |
F_TRIG – Falling Edge Trigger
Falling edge trigger.
Input
| Name | Type | Meaning |
|---|---|---|
| CLK | VT_BOOL | Clock input; edge detection. |
Output
| Name | Type | Meaning |
|---|---|---|
| Q | VT_BOOL | TRUE for one cycle on detected edge. |
RS – Reset/Set Latch
Reset/Set latch (implemented with S priority).
Input
| Name | Type | Meaning |
|---|---|---|
| R | VT_BOOL | Reset. |
| S | VT_BOOL | Set (priority). |
Output
| Name | Type | Meaning |
|---|---|---|
| Q | VT_BOOL | Latch output. |
R_TRIG – Rising Edge Trigger
Rising edge trigger.
Input
| Name | Type | Meaning |
|---|---|---|
| CLK | VT_BOOL | Clock input; edge detection. |
Output
| Name | Type | Meaning |
|---|---|---|
| Q | VT_BOOL | TRUE for one cycle on detected edge. |
SR – Set/Reset Latch
Set/Reset latch (implemented with R priority).
Input
| Name | Type | Meaning |
|---|---|---|
| S | VT_BOOL | Set. |
| R | VT_BOOL | Reset (priority). |
Output
| Name | Type | Meaning |
|---|---|---|
| Q | VT_BOOL | Latch output. |
TOF – Off-delay Timer
Off-delay timer (Q stays TRUE for PT after IN becomes FALSE).
Input
| Name | Type | Meaning |
|---|---|---|
| IN | VT_BOOL | Enable/trigger input. |
| PT | VT_TIME | Preset time. |
Output
| Name | Type | Meaning |
|---|---|---|
| Q | VT_BOOL | Timer output. |
| ET | VT_TIME | Elapsed time. |
TON – On-delay Timer
On-delay timer (Q becomes TRUE after IN has been TRUE for PT).
Input
| Name | Type | Meaning |
|---|---|---|
| IN | VT_BOOL | Enable/trigger input. |
| PT | VT_TIME | Preset time. |
Output
| Name | Type | Meaning |
|---|---|---|
| Q | VT_BOOL | Timer output. |
| ET | VT_TIME | Elapsed time. |
TP – Pulse Timer
Pulse timer (Q becomes TRUE for PT on rising edge of IN).
Input
| Name | Type | Meaning |
|---|---|---|
| IN | VT_BOOL | Enable/trigger input. |
| PT | VT_TIME | Preset time. |
Output
| Name | Type | Meaning |
|---|---|---|
| Q | VT_BOOL | Timer output. |
| ET | VT_TIME | Elapsed time. |
Arrays
Arrays are fixed‑length, statically‑sized containers of scalar values. The syntax mirrors IEC 61131‑3 but with VM‑specific size caps and trap semantics.
Syntax
| Form | Example | Meaning |
|---|---|---|
| Declaration with list initialiser | DIM a AS INT[3] = {10, 20, 30} | Explicit values for every slot; length must equal N. |
| Declaration with broadcast initialiser | DIM b AS INT[4] = 0 | Single scalar assigned to every slot. |
| Element read | PRINT a[i] | 1‑based index; a[1] is the first element. |
| Element write | a[i] = value | Element assignment; same indexing rules. |
Element Types
Any scalar type: BOOL, SINT/INT/DINT/LINT and their unsigned variants, BYTE/WORD/DWORD/LWORD, REAL/LREAL, TIME, DATE, TOD, DT. STRING and WSTRING are not permitted as element types.
Diagnostics
| Condition | Diagnostic | When |
|---|---|---|
N <= 0 or N > ARRAY_MAX_LEN | SCRIPT_ERR_ARRAY_BAD_SIZE | compile |
STRING / WSTRING element type | SCRIPT_ERR_ARRAY_BAD_ELEM_TYPE | compile |
More than ARRAY_COUNT arrays | SCRIPT_ERR_ARRAY_TOO_MANY | compile |
List initialiser length ≠ N | SCRIPT_ERR_ARRAY_INIT_MISMATCH | compile |
Constant index outside 1..N | SCRIPT_ERR_ARRAY_OOB_CONST | compile |
FOR‑counter‑bounded index (incl. i ± k) provably outside 1..N | SCRIPT_ERR_ARRAY_OOB_CONST | compile |
Any other non‑constant index outside 1..N | VM_E_OOB_ARRAY trap | runtime |
See Resource Limits for the numeric values of ARRAY_MAX_LEN and ARRAY_COUNT on each VM profile.