# Standard Functions

Standard functions can be used in all programming languages (FUPLA, ST), some of them may be overloaded (they work over different types, e.g. addition) and some of them are extendable (may have variable number of inputs, e.g. logical AND).

## Type conversion functions

Function name | Description | Example |
---|---|---|

…_TO_… | Conversion of first data type to second data type | A:=INT_TO_REAL(B); |

TO_… | Overloaded data type conversion | A:=TO_REAL(B); |

…_TRUNC_… | Truncating, or “cutting”, of ANY_REAL to ANY_INT | A:=REAL_TRUNC_INT(B); |

…_BCD_TO_… | Conversion ANY_BIT to ANY_INT | A:=WORD_BCD_TO_INT(B); |

## Numerical functions

Function name | I/O data type | Description |
---|---|---|

ABS | ANY_NUM | Absolute value |

SQRT | ANY_REAL | Square root |

LN | ANY_REAL | Natural logarithm |

LOG | ANY_REAL | Common logarithm |

EXP | ANY_REAL | Natural exponential function |

SIN | ANY_REAL | Sine (in rads) |

COS | ANY_REAL | Cosine (in rads) |

TAN | ANY_REAL | Tangent (in rads) |

ASIN | ANY_REAL | Arcsin |

ACOS | ANY_REAL | Arccos |

ATAN | ANY_REAL | Arctan |

ATAN2 | ANY_REAL | Arctan at a given point (x,y) |

ADD | ANY_NUM | Addition |

MUL | ANY_NUM | Multiplication |

SUB | ANY_NUM | Subtraction |

DIV | ANY_NUM | Division |

MOD | ANY_NUM | Modulo |

EXPT | ANY_NUM | Exponentiation |

MOVE | ANY_NUM | Assignment |

## Bit chain functions

Function name | I/O data type | Description |
---|---|---|

SHL | ANY_BIT | Shift to left (completed by zeros from the right) |

SHR | ANY_BIT | Shift to right (completed by zeros from the left) |

ROL | ANY_BIT | Rotate to left |

ROR | ANY_BIT | Rotate to right |

AND | ANY_BIT | Logical AND (like A:=AND(B,C,D); or A:=B&C&D;) |

OR | ANY_BIT | Logical OR |

XOR | ANY_BIT | Logical EXOR |

NOT | ANY_BIT | Negation |

## Selecting functions

Function name | I/O data type | Description |
---|---|---|

MOVE | ANY | Assignment (Example: A:=B;) |

SEL | ANY | Binary selection (Example.: OUT:=IN if G=0;) |

MAX | ANY | Maximum |

MIN | ANY | Minimum |

LIMIT | ANY | Limiter |

MUX | ANY | Multiplexer |

## Comparing functions

Function name | Symbol | Description |
---|---|---|

GT | > | Decreasing sequence |

GE | >= | Monotonous decreasing sequence |

EQ | = | Equality |

LE | ⇐ | Monotonous increasing sequence |

LT | < | Increasing sequence |

NE | <> | Inequality |

## Functions over strings

Function name | I/O data type | Description |
---|---|---|

LEN | ANY_STRING/ANY_INT | String length |

LEFT | ANY_STRING/ANY_INT | Copy given number of characters from left of the input string |

RIGHT | ANY_STRING/ANY_INT | Copy given number of characters from right of the input string |

MID | ANY_STRING/ANY_INT | Copy given number of characters from a given position of the input string (Example.: OUT:=MID(IN,10,3);) |

CONCAT | ANY_STRING | Concatenation (linking) of strings |

INSERT | ANY_STRING/ANY_INT | Insert a string at a given position |

DELETE | ANY_STRING/ANY_INT | Delete a given number of characters at a given position |

REPLACE | ANY_STRING/ANY_INT | Replace a given number of characters from a given position |

FIND | ANY_STRING/ANY_INT | Find the position of first appearance of a substring |

## Date and time functions

Function name | IN1 | IN2 | OUT |
---|---|---|---|

ADD | TIME | TIME | TIME |

ADD | DT | TIME | DT |

ADD_TIME | TIME | TIME | TIME |

ADD_TOD_TIME | TOD | TIME | TOD |

ADD_DT_TIME | DT | TIME | DT |

SUB | TIME | TIME | TIME |

SUB | DATE | DATE | TIME |

SUB | TOD | TIME | TOD |

SUB | TOD | TOD | TIME |

SUB | DT | TIME | DT |

SUB | DT | DT | TIME |

SUB_TIME | TIME | TIME | TIME |

SUB_DATE_DATE | DATE | DATE | TIME |

SUB_TOD_TIME | TOD | TIME | TOD |

SUB_TOD_TOD | TOD | TOD | TIME |

SUB_DT_TIME | DT | TIME | DT |

SUB_DT_DT | DT | DT | TIME |

MUL | TIME | ANY_NUM | TIME |

MUL_TIME | TIME | ANY_NUM | TIME |

DIV | TIME | ANY_NUM | TIME |

DIV_TIME | TIME | ANY_NUM | TIME |

The functions stated above are extended by the CONCAT and SPLIT functions, which link and cut parts of date and time variables. For example, the SPLIT_DATE function separates a date into three INT values (year, month, and day).