Skip to content

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 → BOOL
  • VT_SINT, VT_INT, VT_DINT, VT_LINT → Signed integer types
  • VT_USINT, VT_UDINT, VT_ULINT → Unsigned integer types
  • VT_DWORD → DWORD
  • VT_LREAL → LREAL
  • VT_STRING → STRING
  • VT_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

NameShort DescriptionParameters (IEC-style)Return
ABSAbsolute value.IN: ANY_NUMVT_DINT
ACOSArc cosine (radians).IN: ANY_REALVT_LREAL
ADDAddition (extensible).IN1: ANY_NUM, IN2: ANY_NUM, ...VT_DINT
ADD_DT_TIMEDate/time arithmetic.DT: DT, T: TIMEVT_DT
ADD_TIMEDate/time arithmetic.T1: TIME, T2: TIMEVT_TIME
ANDBitwise AND (extensible).IN1: DWORD, IN2: DWORD, ...VT_DWORD
ASINArc sine (radians).IN: ANY_REALVT_LREAL
ATANArc tangent (radians).IN: ANY_REALVT_LREAL
CEILRound up to nearest integer.IN: ANY_REALVT_LREAL
CONCATString concatenation (extensible).IN1: STRING, IN2: STRING, ...VT_STRING
COSCosine (radians).IN: ANY_REALVT_LREAL
CURRENT_TIMECurrent time-of-day. (Extension)VT_TOD
CURRENT_TIME_MSElapsed time since boot. (Extension)VT_TIME
DATE_TO_DTConvert DATE to DT (TOD = 0). (Extension)DATE: DATEVT_DT
DELETEDelete L characters from IN at position P (1-based).IN: STRING, L: DINT, P: DINTVT_STRING
DIVDivision.IN1: ANY_NUM, IN2: ANY_NUMVT_DINT
DT_TO_DATEExtract DATE part from DT.DT: DTVT_DATE
DT_TO_TODExtract TOD part from DT.DT: DTVT_TOD
EQChain comparison: IN1 == IN2 == ... (extensible).IN1: ANY_NUM, IN2: ANY_NUM, ...VT_BOOL
EXPNatural exponential (e^x).IN: ANY_REALVT_LREAL
EXPTPower function (IN1 ^ IN2).IN1: ANY_REAL, IN2: ANY_NUMVT_LREAL
FINDPosition of first occurrence of IN2 in IN1 (1-based, 0 if not found).IN1: STRING, IN2: STRINGVT_DINT
FLOORRound down to nearest integer.IN: ANY_REALVT_LREAL
GEChain comparison: IN1 >= IN2 >= ... (extensible).IN1: ANY_NUM, IN2: ANY_NUM, ...VT_BOOL
GTChain comparison: IN1 > IN2 > ... (extensible).IN1: ANY_NUM, IN2: ANY_NUM, ...VT_BOOL
INSERTInsert IN2 into IN1 at position P (1-based).IN1: STRING, IN2: STRING, P: DINTVT_STRING
LEChain comparison: IN1 <= IN2 <= ... (extensible).IN1: ANY_NUM, IN2: ANY_NUM, ...VT_BOOL
LEFTLeftmost L characters of IN.IN: STRING, L: DINTVT_STRING
LENLength of string in characters.IN: STRINGVT_DINT
LIMITClamp IN to [MN, MX].MN: ANY_NUM, IN: ANY_NUM, MX: ANY_NUMVT_DINT
LNNatural logarithm.IN: ANY_REALVT_LREAL
LOGCommon logarithm (base 10).IN: ANY_REALVT_LREAL
LTChain comparison: IN1 < IN2 < ... (extensible).IN1: ANY_NUM, IN2: ANY_NUM, ...VT_BOOL
MAKE_DTCombine DATE and TOD into DT. (Extension)DATE: DATE, TOD: TODVT_DT
MAXMaximum (extensible).IN1: ANY_NUM, IN2: ANY_NUM, ...VT_DINT
MIDL characters from IN starting at position P (1-based).IN: STRING, L: DINT, P: DINTVT_STRING
MINMinimum (extensible).IN1: ANY_NUM, IN2: ANY_NUM, ...VT_DINT
MODRemainder (modulo).IN1: ANY_INT, IN2: ANY_INTVT_DINT
MOVEPass-through (identity).IN: ANY_NUMVT_DINT
MULMultiplication (extensible).IN1: ANY_NUM, IN2: ANY_NUM, ...VT_DINT
MUXSelect one of IN0..INn by index K (extensible).K: DINT, IN0: LREAL, IN1: LREAL, ...VT_LREAL
NEPairwise comparison: IN1 != IN2.IN1: ANY_NUM, IN2: ANY_NUMVT_BOOL
NOTBitwise NOT.IN: DWORDVT_DWORD
ORBitwise OR (extensible).IN1: DWORD, IN2: DWORD, ...VT_DWORD
POWPower function (alias for EXPT). (Extension)IN1: ANY_NUM, IN2: ANY_NUMVT_LREAL
REPLACEReplace L characters in IN1 at position P (1-based) with IN2.IN1: STRING, IN2: STRING, L: DINT, P: DINTVT_STRING
RIGHTRightmost L characters of IN.IN: STRING, L: DINTVT_STRING
ROLRotate left.IN: DWORD, N: DINTVT_DWORD
RORRotate right.IN: DWORD, N: DINTVT_DWORD
ROUNDRound to nearest integer.IN: ANY_REALVT_LREAL
SELSelect IN0 or IN1 based on G.G: BOOL, IN0: ANY_NUM, IN1: ANY_NUMVT_DINT
SGNSign function (−1, 0, +1). (Extension)IN: ANY_NUMVT_DINT
SHLShift left.IN: DWORD, N: DINTVT_DWORD
SHRShift right.IN: DWORD, N: DINTVT_DWORD
SINSine (radians).IN: ANY_REALVT_LREAL
SQRTSquare root.IN: ANY_REALVT_LREAL
SUBSubtraction.IN1: ANY_NUM, IN2: ANY_NUMVT_DINT
SUB_DT_TIMEDate/time arithmetic.DT: DT, T: TIMEVT_DT
SUB_TIMEDate/time arithmetic.T1: TIME, T2: TIMEVT_TIME
TANTangent (radians).IN: ANY_REALVT_LREAL
TIME_TO_INTConvert TIME (ms) to DINT. (Extension)T: TIMEVT_DINT
TIME_TO_REALConvert TIME (ms) to LREAL. (Extension)T: TIMEVT_LREAL
TO_BOOLType conversion to BOOL.IN: ANY_NUMVT_BOOL
TO_DINTType conversion to DINT.IN: ANY_NUMVT_DINT
TO_INTType conversion to INT.IN: ANY_NUMVT_DINT
TO_LINTType conversion to LINT.IN: ANY_NUMVT_LINT
TO_LREALType conversion to LREAL.IN: ANY_NUMVT_LREAL
TO_REALType conversion to REAL.IN: ANY_NUMVT_LREAL
TO_SINTType conversion to SINT.IN: ANY_NUMVT_SINT
TO_STRINGConvert any value to string. (Extension)IN: ANYVT_STRING
TO_TIMEType conversion to TIME. (Extension)IN: ANY_NUMVT_TIME
TO_UDINTType conversion to UDINT.IN: ANY_NUMVT_UDINT
TO_UINTType conversion to UINT.IN: ANY_NUMVT_UDINT
TO_ULINTType conversion to ULINT.IN: ANY_NUMVT_ULINT
TO_USINTType conversion to USINT.IN: ANY_NUMVT_USINT
TOD_TO_DTConvert TOD to DT (DATE = 0). (Extension)TOD: TODVT_DT
TRUNCTruncation toward zero.IN: ANY_REALVT_DINT
XORBitwise XOR (extensible).IN1: DWORD, IN2: DWORD, ...VT_DWORD

Blocks

CTD – Down Counter

Down counter (decrements CV on rising edge of CD).

Input

NameTypeMeaning
CDVT_BOOLCount-down; rising edge decrements CV.
LDVT_BOOLLoad; loads PV into CV.
PVVT_INTPreset value.

Output

NameTypeMeaning
QVT_BOOLCounter output.
CVVT_INTCurrent value.

CTU – Up Counter

Up counter (increments CV on rising edge of CU).

Input

NameTypeMeaning
CUVT_BOOLCount-up; rising edge increments CV.
RVT_BOOLReset; sets CV := 0.
PVVT_INTPreset value.

Output

NameTypeMeaning
QVT_BOOLCounter output.
CVVT_INTCurrent value.

CTUD – Up/Down Counter

Up/down counter.

Input

NameTypeMeaning
CUVT_BOOLCount-up; rising edge increments CV.
CDVT_BOOLCount-down; rising edge decrements CV.
RVT_BOOLReset; sets CV := 0.
LDVT_BOOLLoad; loads PV into CV.
PVVT_INTPreset value.

Output

NameTypeMeaning
QUVT_BOOLTRUE if CV >= PV.
QDVT_BOOLTRUE if CV <= 0.
CVVT_INTCurrent value.

F_TRIG – Falling Edge Trigger

Falling edge trigger.

Input

NameTypeMeaning
CLKVT_BOOLClock input; edge detection.

Output

NameTypeMeaning
QVT_BOOLTRUE for one cycle on detected edge.

RS – Reset/Set Latch

Reset/Set latch (implemented with S priority).

Input

NameTypeMeaning
RVT_BOOLReset.
SVT_BOOLSet (priority).

Output

NameTypeMeaning
QVT_BOOLLatch output.

R_TRIG – Rising Edge Trigger

Rising edge trigger.

Input

NameTypeMeaning
CLKVT_BOOLClock input; edge detection.

Output

NameTypeMeaning
QVT_BOOLTRUE for one cycle on detected edge.

SR – Set/Reset Latch

Set/Reset latch (implemented with R priority).

Input

NameTypeMeaning
SVT_BOOLSet.
RVT_BOOLReset (priority).

Output

NameTypeMeaning
QVT_BOOLLatch output.

TOF – Off-delay Timer

Off-delay timer (Q stays TRUE for PT after IN becomes FALSE).

Input

NameTypeMeaning
INVT_BOOLEnable/trigger input.
PTVT_TIMEPreset time.

Output

NameTypeMeaning
QVT_BOOLTimer output.
ETVT_TIMEElapsed time.

TON – On-delay Timer

On-delay timer (Q becomes TRUE after IN has been TRUE for PT).

Input

NameTypeMeaning
INVT_BOOLEnable/trigger input.
PTVT_TIMEPreset time.

Output

NameTypeMeaning
QVT_BOOLTimer output.
ETVT_TIMEElapsed time.

TP – Pulse Timer

Pulse timer (Q becomes TRUE for PT on rising edge of IN).

Input

NameTypeMeaning
INVT_BOOLEnable/trigger input.
PTVT_TIMEPreset time.

Output

NameTypeMeaning
QVT_BOOLTimer output.
ETVT_TIMEElapsed 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

FormExampleMeaning
Declaration with list initialiserDIM a AS INT[3] = {10, 20, 30}Explicit values for every slot; length must equal N.
Declaration with broadcast initialiserDIM b AS INT[4] = 0Single scalar assigned to every slot.
Element readPRINT a[i]1‑based index; a[1] is the first element.
Element writea[i] = valueElement 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

ConditionDiagnosticWhen
N <= 0 or N > ARRAY_MAX_LENSCRIPT_ERR_ARRAY_BAD_SIZEcompile
STRING / WSTRING element typeSCRIPT_ERR_ARRAY_BAD_ELEM_TYPEcompile
More than ARRAY_COUNT arraysSCRIPT_ERR_ARRAY_TOO_MANYcompile
List initialiser length ≠ NSCRIPT_ERR_ARRAY_INIT_MISMATCHcompile
Constant index outside 1..NSCRIPT_ERR_ARRAY_OOB_CONSTcompile
FOR‑counter‑bounded index (incl. i ± k) provably outside 1..NSCRIPT_ERR_ARRAY_OOB_CONSTcompile
Any other non‑constant index outside 1..NVM_E_OOB_ARRAY trapruntime

See Resource Limits for the numeric values of ARRAY_MAX_LEN and ARRAY_COUNT on each VM profile.