Calling a function block   CAL   CALC   CALNC    CALCN

A function block groups an algorithm and a set of private data. It has inputs and outputs. A function block can be:
- a standard function block (RS, TON...)
- a block written in "C" language and embedded on the target
- a User Defined Function Block (UDFB) written in ST, FBD, LD or IL

To use a function block, you have to declare an instance of the block as a variable, identified by a unique name. Each instance of a function block as its own set of private data and can be called separately. A call to a function block instance processes the block algorithm on the private data of the instance, using the specified input parameters.

ST Language

To call a function block in ST, you have to specify the name of the instance, followed by the input parameters written between parenthesis and separated by comas. To have access to an output parameter, use the name of the instance followed by a dot '.' and the name of the wished parameter. The following example demonstrates a call to an instance of TON function block:

(* MyTimer is declared as an instance of TON *)
MyTimer (bTrig, t#2s); (* calls the function block *)
TimerOutput := MyTimer.Q;
ElapsedTime := MyTimer.ET;

FBD and LD Languages

To call a function block in FBD or LD languages, you just need to insert the block in the diagram and to connect its inputs and outputs. The name of the instance must be specified upon the rectangle of the block.

IL Language:

To call a function block in IL language, you must use the CAL instruction, and use a declared instance of the function block. The instance name is the operand of the CAL instruction, followed by the input parameters written between parenthesis and separated by comas. Alternatively the CALC, CALCN or CALNC conditional instructions can be used:

CAL    Calls the function block
CALC   Calls the function block if the current result is TRUE
CALNC  Calls the function block if the current result is FALSE
CALCN  same as CALNC

The following example demonstrates a call to an instance of TON function block:

(* MyTimer is declared as an instance of TON *)
Op1: CAL   MyTimer (bTrig, t#2s)
     LD    MyTimer.Q
     ST    TimerOutput
     LD    MyTimer.ET
     ST    ElapsedTimer

Op2: LD    bCond
     CALC  MyTimer (bTrig, t#2s)  (* called only if bCond is TRUE *)
Op3: LD    bCond
     CALNC MyTimer (bTrig, t#2s)  (* called only if bCond is FALSE *)