KAS IDE PLC Library Reference Manual EN (REV F)
KAS IDE PLC Library Reference Manual EN (REV F)
KAS IDE PLC Library Reference Manual EN (REV F)
Keep all manuals as a product component during the life span of the product.
Pass all manuals to future users / owners of the product.
KAS Reference Manual - PLC Library |
Trademarks
KAS and AKD are registered trademarks of Kollmorgen™.
SERVOSTAR is a registered trademark of Kollmorgen™.
Kollmorgen™ is part of the Danaher Motion company.
Windows® is a registered trademark of Microsoft Corporation
EnDat is a registered trademark of Dr. Johannes Heidenhain GmbH.
EtherCAT® is registered trademark of Ethercat Technology Group.
PLCopen® is an independent association providing efficiency in industrial automation.
INtime® is a registered trademark of TenAsys® Corporation.
Codemeter is a registered trademark of WIBU-Systems AG.
All product and company names are trademarks™ or registered® trademarks of their respective holders. Use
of them does not imply any affiliation with or endorsement by them.
Kollmorgen Automation Suite is based on the work of:
1Copyright (C) 2007 Free Software Foundation, Inc. Copyright (C) 1993 Jean-loup Gailly. This is free software. You may redistribute
copies of it under the terms of the GNU General Public License <http://www.gnu.org/licenses/gpl.html>. There is NO WARRANTY, to
the extent permitted by law. Written by Jean-loup Gailly.
2Copyright (C) 2007 Free Software Foundation, Inc. License GPLv2+: GNU GPL version 2 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Written by
John Gilmore and Jay Fenlason.
l JsonCpp software (distributed under the MIT License –see terms see http://json-
cpp.sourceforge.net/LICENSE for terms).
l LZMA SDK (http://www.7-zip.org/sdk.html), used to compress crash dump information (available as
public domain).
l Mongoose v3.7, an embedded web server library (distributed under the MIT License).
l MVVM Light Toolkit components for Model – View –ViewModel patterns with Windows Presentation
Foundation (distributed under the MIT License).
l pugixml, an XML and XPath parsing library (distributed under the MIT License).
l Qwt project (distributed under the terms of the GNU Lesser General Public License).
l U-Boot, a universal boot loader is used by the AKD-PDMM (distributed under the terms of the GNU
General Public License, http://www.gnu.org/licenses/gpl-2.0.html). The U-Boot source files, copyright
notice, and readme are available on the distribution disk that is included with the AKD-PDMM.
l ZedGraph class library, user control, and web control for .NET (distributed under the LGPL License).
l Zlib software library
l Zlib1.dll, a data compression library (distributed under the terms of the BSD License).
All other product and brand names listed in this document may be trademarks or registered trademarks of
their respective owners.
Disclaimer
The information in this document (Version 2.9 published on 5/18/2015) is believed to be accurate and reliable
at the time of its release. Notwithstanding the foregoing, Kollmorgen assumes no responsibility for any dam-
age or loss resulting from the use of this help, and expressly disclaims any liability or damages for loss of
data, loss of use, and property damage of any kind, direct, incidental or consequential, in regard to or arising
out of the performance or form of the materials presented herein or in any software programs that accompany
this document.
All timing diagrams, whether produced by Kollmorgen or included by courtesy of the PLCopen organization,
are provided with accuracy on a best-effort basis with no warranty, explicit or implied, by Kollmorgen. The
user releases Kollmorgen from any liability arising out of the use of these timing diagrams.
1 Table of Contents
1 Table of Contents 5
2 Programming languages 36
2.1 Sequential Function Chart (SFC) 36
2.1.1 SFC Execution at Runtime 36
2.1.2 Hierarchy of SFC programs 37
2.2 Free Form Ladder Diagram (FFLD) 38
2.2.1 Use of the "EN" input and the "ENO" output for blocks 38
2.2.2 Contacts and coils 39
2.2.2.1 Contacts 39
2.2.2.2 Coils 41
3 Programming features and standard blocks 43
3.1 Basic Operations 43
3.1.1 := FFLD FFLDN ST STN 44
3.1.1.1 Inputs 44
3.1.1.2 Outputs 44
3.1.1.3 Remarks 44
3.1.1.4 ST Language 44
3.1.1.5 FBD Language 44
3.1.1.6 FFLD Language 44
3.1.1.7 IL Language: 45
3.1.2 Access to bits of an integer 45
3.1.3 Differences Between Functions and Function Blocks 45
3.1.4 Calling a sub-program 45
3.1.4.1 ST Language 46
3.1.4.2 FBD and FFLD Languages 46
3.1.4.3 IL Language 46
3.1.5 CASE OF ELSE END_CASE 46
3.1.5.1 Syntax 46
3.1.5.2 Remarks 47
3.1.5.3 ST Language 47
3.1.5.4 FBD Language 47
3.1.5.5 FFLD Language 47
3.1.5.6 IL Language 47
3.1.6 COUNTOF 47
3.1.6.1 Inputs 47
3.1.6.2 Outputs 47
3.1.6.3 Remarks 47
3.1.6.4 ST Language 48
3.1.6.5 FBD Language 48
3.1.6.6 FFLD Language 48
3.1.6.7 IL Language 48
3.1.7 DEC 48
3.1.7.1 Inputs 48
3.1.7.2 Outputs 48
3.1.7.3 Remarks 48
3.1.7.4 ST Language 49
3.1.7.5 FBD Language 49
3.1.7.6 FFLD Language 49
3.1.7.7 IL Language 49
3.1.8 EXIT 49
3.1.8.1 Remarks 49
3.1.8.2 ST Language 49
3.1.8.3 FBD Language 50
3.1.8.4 FFLD Language 50
3.1.8.5 IL Language 50
3.1.9 FOR TO BY END_FOR 50
3.1.9.1 Syntax 50
3.1.9.2 Remarks 50
3.1.9.3 ST Language 50
3.1.9.4 FBD Language 50
3.1.9.5 FFLD Language 51
3.1.9.6 IL Language 51
3.1.10 IF THEN ELSE ELSIF END_IF 51
3.1.10.1 Syntax 51
3.1.10.2 Remarks 51
3.1.10.3 ST Language 51
3.1.10.4 FBD Language 52
3.1.10.5 FFLD Language 52
3.1.10.6 IL Language 52
3.1.11 INC 52
3.1.11.1 Inputs 52
3.1.11.2 Outputs 52
3.1.11.3 Remarks 52
3.1.11.4 ST Language 52
3.1.11.5 FBD Language 52
3.1.11.6 FFLD Language 52
3.1.11.7 IL Language 53
3.1.12 MOVEBLOCK 53
3.1.12.1 Inputs 53
3.1.12.2 Outputs 53
3.1.12.3 Remarks 53
3.1.12.4 ST Language 53
3.1.12.5 FBD Language 53
3.1.12.6 FFLD Language 54
3.1.12.7 IL Language 54
3.1.13 NEG - 54
3.1.13.1 Inputs 54
3.1.13.2 Outputs 54
3.1.13.3 Truth table (examples) 54
3.1.13.4 Remarks 54
3.1.13.5 ST Language 54
3.2.2.1 Inputs 62
3.2.2.2 Outputs 62
3.2.2.3 Truth table 62
3.2.2.4 Remarks 62
3.2.2.5 ST Language 62
3.2.2.6 FBD Language 62
3.2.2.7 FFLD Language 63
3.2.2.8 IL Language: 63
3.2.3 NOT 63
3.2.3.1 Inputs 63
3.2.3.2 Outputs 63
3.2.3.3 Truth table 63
3.2.3.4 Remarks 63
3.2.3.5 ST Language 63
3.2.3.6 FBD Language 63
3.2.3.7 FFLD Language 64
3.2.3.8 IL Language: 64
3.2.4 QOR 64
3.2.4.1 Inputs 64
3.2.4.2 Outputs 64
3.2.4.3 Remarks 64
3.2.4.4 ST Language 64
3.2.4.5 FBD Language 64
3.2.4.6 FFLD Language 65
3.2.4.7 IL Language 65
3.2.5 R 65
3.2.5.1 Inputs 65
3.2.5.2 Outputs 65
3.2.5.3 Truth table 65
3.2.5.4 Remarks 65
3.2.5.5 ST Language 65
3.2.5.6 FBD Language 65
3.2.5.7 FFLD Language 66
3.2.5.8 IL Language: 66
3.2.6 RS 66
3.2.6.1 Inputs 66
3.2.6.2 Outputs 66
3.2.6.3 Truth table 66
3.2.6.4 Remarks 66
3.2.6.5 ST Language 66
3.2.6.6 FBD Language 66
3.2.6.7 FFLD Language 67
3.2.6.8 IL Language: 67
3.2.7 R_TRIG 67
3.2.7.1 Inputs 67
3.2.7.2 Outputs 67
3.2.7.3 Truth table 67
3.2.7.4 Remarks 67
3.2.7.5 ST Language 68
3.2.7.6 FBD Language 68
3.2.7.7 FFLD Language 68
3.2.7.8 IL Language: 68
3.2.8 S 68
3.2.8.1 Inputs 68
3.2.8.2 Outputs 68
3.2.8.3 Truth table 68
3.2.8.4 Remarks 68
3.2.8.5 ST Language 69
3.2.8.6 FBD Language 69
3.2.8.7 FFLD Language 69
3.2.8.8 IL Language: 69
3.2.9 SEMA 69
3.2.9.1 Inputs 69
3.2.9.2 Outputs 69
3.2.9.3 Remarks 69
3.2.9.4 ST Language 69
3.2.9.5 FBD Language 70
3.2.9.6 FFLD Language 70
3.2.9.7 IL Language: 70
3.2.10 SR 70
3.2.10.1 Inputs 70
3.2.10.2 Outputs 70
3.2.10.3 Truth table 70
3.2.10.4 Remarks 70
3.2.10.5 ST Language 71
3.2.10.6 FBD Language 71
3.2.10.7 FFLD Language 71
3.2.10.8 IL Language: 71
3.2.11 XOR XORN 71
3.2.11.1 Inputs 71
3.2.11.2 Outputs 71
3.2.11.3 Truth table 71
3.2.11.4 Remarks 71
3.2.11.5 ST Language 72
3.2.11.6 FBD Language 72
3.2.11.7 FFLD Language 72
3.2.11.8 IL Language 72
3.3 Arithmetic operations 72
3.3.1 + ADD 73
3.3.1.1 Inputs 73
3.3.1.2 Outputs 73
3.3.1.3 Remarks 73
3.3.1.4 ST Language 73
3.3.1.5 FBD Language 73
3.5.1.4 ST Language 89
3.5.1.5 FBD Language 90
3.5.1.6 FFLD Language 90
3.5.1.7 IL Language: 90
3.5.1.8 See also 90
3.5.2 ANY_TO_DINT / ANY_TO_UDINT 90
3.5.2.1 Inputs 90
3.5.2.2 Outputs 90
3.5.2.3 Remarks 90
3.5.2.4 ST Language 90
3.5.2.5 FBD Language 90
3.5.2.6 FFLD Language 91
3.5.2.7 IL Language: 91
3.5.2.8 See also 91
3.5.3 ANY_TO_INT / ANY_TO_UINT 91
3.5.3.1 Inputs 91
3.5.3.2 Outputs 91
3.5.3.3 Remarks 91
3.5.3.4 ST Language 91
3.5.3.5 FBD Language 91
3.5.3.6 FFLD Language 91
3.5.3.7 IL Language: 92
3.5.3.8 See also 92
3.5.4 ANY_TO_LINT / ANY_TO_ULINT 92
3.5.4.1 Inputs 92
3.5.4.2 Outputs 92
3.5.4.3 Remarks 92
3.5.4.4 ST Language 92
3.5.4.5 FBD Language 92
3.5.4.6 FFLD Language 92
3.5.4.7 IL Language: 92
3.5.4.8 See also 92
3.5.5 ANY_TO_LREAL 93
3.5.5.1 Inputs 93
3.5.5.2 Outputs 93
3.5.5.3 Remarks 93
3.5.5.4 ST Language 93
3.5.5.5 FBD Language 93
3.5.5.6 FFLD Language 93
3.5.5.7 IL Language: 93
3.5.5.8 See also 93
3.5.6 ANY_TO_REAL 93
3.5.6.1 Inputs 93
3.5.6.2 Outputs 94
3.5.6.3 Remarks 94
3.5.6.4 ST Language 94
3.5.6.5 FBD Language 94
Input 170
Output 171
3.13.1.3 Examples 171
Structured Text 171
Ladder Diagram 171
Function Block Diagram 171
3.13.2 udpClose 171
3.13.2.1 Description 172
3.13.2.2 Arguments 172
Input 172
Output 172
3.13.2.3 Examples 172
Structured Text 172
Ladder Diagram 172
Function Block Diagram 172
3.13.3 udpCreate 172
3.13.3.1 Description 172
3.13.3.2 Arguments 172
Input 172
Output 173
3.13.3.3 Examples 173
Structured Text 173
Ladder Diagram 173
Function Block Diagram 173
3.13.4 udpIsValid 173
3.13.4.1 Description 173
3.13.4.2 Arguments 173
Input 173
Output 174
3.13.4.3 Examples 174
Structured Text 174
Ladder Diagram 174
Function Block Diagram 174
3.13.5 udpRcvFrom 174
3.13.5.1 Description 174
3.13.5.2 Arguments 174
Input 174
Output 175
3.13.5.3 Examples 175
Structured Text 175
Ladder Diagram 175
2 Programming languages
This chapter presents details on the syntax, structure and use of the declarations and statements supported
by the KAS IDE application language.
Below are the available programming languages of the IEC 61131-3 standard:
SFC: Sequential Function Chart
FBD: Function Block Diagram
FFLD: Free Form Ladder Diagram
ST: Structured Text
IL: Instruction List
Use of ST instructions in graphic languages
You have to select a language for each program or User-Defined Function Block of the application.
You must not use SFC as a decision diagram. Using a step as a point of decision and transitions as con-
ditions in an algorithm must never appear in an SFC chart. Using SFC as a decision language leads to poor
performance and complicate charts. ST must be preferred when programming a decision algorithm that has
no sense in term of "program state"
Execution order:
- Evaluate transitions:
1, 101, 2
- Manage steps:
1, 101, 201, 102
In case of a divergence, all conditions are considered as exclusive, according to a "left to right" priority order.
It means that a transition is considered as FALSE if at least one of the transitions connected to the same
divergence on its left side is TRUE.
The initial steps define the initial status of the program when it is started. All top level (main) programs are star-
ted when the application starts. Child programs are explicitly started from action blocks within the parent pro-
grams.
The evaluation of transitions leads to changes of active steps, according to the following rules:
Execution of SFC within the IEC 61131 target is sampled according to the target cycles. When a transition
is crossed within a cycle, the following steps are activated, and the evaluation of the chart will continue on
the next cycle. If several consecutive transitions are TRUE within a branch, only one of them is crossed
within one target cycle.
Some run-time systems can support exclusivity of the transitions within a ulergence or not. Please refer to
OEM instructions for further information about SFC support.
Using child programs is very useful for designing a complex process and separate operations due to different
aspects of the process. For instance, it is common to manage the execution modes in a parent program and
to handle details of the process operations in child programs.
2.2.1 Use of the "EN" input and the "ENO" output for blocks
The rung state in a FFLD diagram is always boolean. Blocks are connected to the rung with their first input
and output. This implies that special "EN" and "ENO" input and output are added to the block if its first input or
output is not boolean.
The "EN" input is a condition. It means that the operation represented by the block is not performed if the rung
state (EN) is FALSE. The "ENO" output always represents the sane status as the "EN" input: the rung state
is not modified by a block having an ENO output.
Below is the example of the "XOR" block, having boolean inputs and outputs, and requiring no EN or ENO
pin:
(* First input is the rung. The rung is the output *)
Below is the example of the ">" (greater than) block, having non boolean inputs and a boolean output. This
block has an "EN" input in FFLD language:
(* The comparison is executed only if EN is TRUE *)
Below is the example of the "SEL" function, having a first boolean input, but an integer output. This block has
an "ENO" output in FFLD language:
(* the input rung is the selector *)
(* ENO has the same value as SELECT *)
Finally, below is the example of an addition, having only numerical arguments. This block has both "EN" and
"ENO" pins in FFLD language:
(* The addition is executed only if EN is TRUE *)
(* ENO is equal to EN *)
Contacts Coils
Normally Open -| |- Energize -( )-
Normally Closed -|/|- De-energize -(/)-
Positive Transition -|P|- Set (Latch) -(S)-
Negative Transition -|N|- Reset (Unlatch) -(R)-
Normally closed positive transition -|/P|- Positive transition sensing coil -(P)-
Normally closed negative transition -|/N|- Negative transition sensing coil -(N)-
2.2.2.1 Contacts
Contacts are basic graphic elements of the FFLD language. A contact is associated with a boolean variable
which is displayed above the graphic symbol. A contact sets the state of the rung on its right-hand side,
according to the value of the associated variable and the rung state on its left-hand side.
Below are the six possible contact symbols and how they change the flow:
Contacts Description
boolVariable Normal: The flow on the right is the boolean AND operation between:
-] [- (1) the flow on the left and (2) the associated variable.
boolVariable Negated: The flow on the right is the boolean AND operation between:
-]/[- (1) the flow on the left and (2) the negation of the associated variable.
boolVariable Positive Transition: The flow on the right is TRUE when the flow on the left is TRUE
-]P[- and the associated variable is TRUE and was FALSE the last time this contact was
scanned (rising edge)
Contacts Description
boolVariable Negative Transition: The flow on the right is TRUE when the flow on the left is TRUE
-]N[- and the associated variable is FALSE and was TRUE last time this contact was scanned
(falling edge).
boolVariable Normally Closed Positive Transition: The flow on the right is TRUE when the flow on
-]/P[- the left is TRUE and the associated variable does not change from FALSE to TRUE from
the last scan of this contact to this scan (NOT rising edge).
boolVariable Normally Closed Negative Transition: The flow on the right is TRUE when the flow on
-]/N[- the left is TRUE and the associated variable does not change from TRUE to FALSE from
the last scan of this contact to this scan (NOT falling edge).
Transition Contacts
The transition contacts -|P|-, -|N -|/P|-, and -|/N|- compare the current state of the boolean variable to the
boolean’s state the last time the contact was scanned. This means that the boolean variable could change
states several times during a scan, but if it’s back to the same state when the transition contact is scanned,
the transition contact will not produce a TRUE. Also, some function blocks can complete immediately. There-
fore a different approach, other than using transition contacts, is needed to determine if a function block com-
pleted successfully.
For example:
MC_GrpEnable executes and turns on its Done output immediately. In the following code, the GroupEn-
ableDone positive transition contact will only provide a TRUE the first time MC_GrpEnable is executed. For
all subsequent executions, the positive transition contact will not provide a TRUE since GroupEnableDone
will be TRUE every time the contact is scanned.
To remedy this, the following code uses the SET and RESET of a boolean (i.e. EnableRequest) to provide a
way to detect each successful execution of the function block:
2.2.2.2 Coils
Coils are basic graphic elements of the FFLD language. A coil is associated with a boolean variable which is
displayed above the graphic symbol. A coil performs a change of the associated variable according to the
flow on its left-hand side.
Below are the six possible coil symbols:
Coils Description
boolVariable Normal: the associated variable is forced to the value of the flow on the left of the coil.
-( )-
boolVariable Negated: the associated variable is forced to the negation of the flow on the left of the
-(/)- coil.
boolVariable Set: the associated variable is forced to TRUE if the flow on the left is TRUE. (no action
-(S)- if the flow is FALSE)
Rules for Set coil animation:
l Power Flow on left is TRUE:
l The horizontal wires on either side of the (S) are red
l The variable and the (S) are red
l Power Flow on left is FALSE and the (S) variable is Energized (ON)
l The horizontal lines on either sided of (S) are black
l The variable and the (S) are red
l In all other cases:
l The horizontal wires are black
l The variable and the (S) are black
Coils Description
boolVariable Reset: the associated variable is forced to FALSE if the flow on the left is TRUE. (no
-(R)- action if the rung state is FALSE)
Rules for Reset coil animation:
l Power Flow on left is TRUE:
l The horizontal lines are red
l The variable above (R) is black
l The R and the circle around the R are black
l Power Flow on left is FALSE and variable above reset coil is NOT Energized
(OFF)
l The horizontal lines are black
l The variable above (R) is black
l The R and the circle around the R are black
l Power Flow on left is FALSE and variable above reset coil is Energized (ON)
l The horizontal lines are black
l The variable above (R) is red
l The R and the circle around the R are red
boolVariable Positive transition: the associated variable is forced to TRUE if the flow on the left
-(P)- changes from FALSE to TRUE(and forced to FALSE in all other cases)
boolVariable Negative transition: the associated variable is forced to TRUE if the flow on the left
-(N)- changes from TRUE to FALSE(and forced to FALSE in all other cases)
When a contact or coil is selected, you can press the Spacebar to change its type (normal, negated...)
When your application is running, you can select a contact and press the Spacebar to swap its value
between TRUE and FALSE
Although coils are commonly put at the end, the rung can be continued after a coil. The flow is never
changed by a coil symbol.
l Variable assignment
l Bit access
l Parenthesis
l Calling a function
l Calling a function block
l Calling a sub-program
l MOVEBLOCK: Copying/moving array items
l COUNTOF: Number of items in an array
l INC: Increase a variable
l DEC: decrease a variable
l NEG: integer negation (unary operator)
Below are the language features for controlling the execution of a program:
l Labels
l Jumps
l RETURN
Below are the structured statements for controlling the execution of a program:
3.1.1.1 Inputs
IN : ANY Any variable or complex expression
3.1.1.2 Outputs
Q : ANY Forced variable
3.1.1.3 Remarks
The output variable and the input expression must have the same type. The forced variable cannot have the
"read only" attribute. In FFLD and FBD languages, the "1" block is available to perform a "1 gain" data copy (1
copy). In FFLD language, the input rung (EN) enables the assignment, and the output rung keeps the state of
the input rung. In IL language, the FFLD instruction loads the first operand, and the ST instruction stores the
current result into a variable. The current result and the operand of ST must have the same type. Both FFLD
and ST instructions can be modified by "N" in case of a boolean operand for performing a boolean negation.
3.1.1.4 ST Language
Q := IN; (* copy IN into variable Q *)
Q := (IN1 + (IN2 / IN 3)) * IN4; (* assign the result of a complex expression *)
result := SIN (angle); (* assign a variable with the result of a function *)
time := MyTon.ET; (* assign a variable with an output parameter of a function block *)
3.1.1.7 IL Language:
Op1: FFLD IN (* current result is: IN *)
ST Q (* Q is: IN *)
FFLDN IN1 (* current result is: NOT (IN1) *)
ST Q (* Q is: NOT (IN1) *)
FFLD IN2 (* current result is: IN2 *)
STN Q (* Q is: NOT (IN2) *)
See also:
Parenthesis
The best way to work with a function block is to call it during multiple scan. This triggers the action the first
time, then you may monitor the status of this action, especially via the "done" output.
1A function calculates a result according to the current value of its inputs. A function has no internal data and is not linked to declared
instances.
2A function block groups an algorithm and a set of private data. It has inputs and outputs.
A sub-program is called by another program. Unlike function blocks, local variables of a sub-program are not
instantiated, and thus you do not need to declare instances. A call to a sub-program processes the block
algorithm using the specified input parameters. Output parameters can then be accessed.
3.1.4.1 ST Language
To call a sub-program in ST, you have to specify its name, followed by the input parameters written between
parentheses and separated by comas. To have access to an output parameter, use the name of the sub-pro-
gram followed by a dot '.' and the name of the wished parameter:
Alternatively, if a sub-program has one and only one output parameter, it can be called as a function in ST lan-
guage:
3.1.4.3 IL Language
To call a sub-program in IL language, you must use the CAL instruction with the name of the sub-program, fol-
lowed by the input parameters written between parentheses and separated by comas. Alternatively the
CALC, CALCN or CALNC conditional instructions can be used:
Here is an example:
3.1.5.1 Syntax
<statements>;
ELSE
<statements>
END_CASE;
3.1.5.2 Remarks
All enumerated values correspond to the evaluation of the DINT expression and are possible cases in the exe-
cution of the statements. The statements specified after the ELSE keyword are executed if the expression
takes a value which is not enumerated in the switch. For each case, you must specify either a value, or a list
of possible values separated by comas (",") or a range of values specified by a "min .. max" interval. You
must enter space characters before and after the ".." separator.
3.1.5.3 ST Language
(* this example check first prime numbers *)
CASE iNumber OF
0:
Alarm := TRUE;
AlarmText := '0 gives no result';
1 .. 3, 5 :
bPrime := TRUE;
4, 6 :
bPrime := FALSE;
ELSE
Alarm := TRUE;
AlarmText := 'I don't know after 6 !';
END_CASE;
3.1.5.6 IL Language
Not available
See also
IF WHILE REPEAT FOR EXIT
3.1.6 COUNTOF
Function - Returns the number of items in an array
3.1.6.1 Inputs
ARR : ANY Declared array
3.1.6.2 Outputs
Q : DINT Total number of items in the array
3.1.6.3 Remarks
The input must be an array and can have any data type. This function is particularly useful to avoid writing dir-
ectly the actual size of an array in a program, and thus keep the program independent from the declaration.
Example:
In FFLD language, the operation is executed only if the input rung (EN) is TRUE. The output rung (ENO)
keeps the same value as the input rung.
Examples
array return
Arr1 [ 0..9 ] 10
Arr2 [ 0..4 , 0..9 ] 50
3.1.6.4 ST Language
Q := CountOf (ARR);
3.1.6.7 IL Language
Not available
3.1.7 DEC
Function - Decrease a numerical variable
3.1.7.1 Inputs
IN : ANY Numerical variable (increased after call).
3.1.7.2 Outputs
Q : ANY Decreased value
3.1.7.3 Remarks
When the function is called, the variable connected to the "IN" input is decreased and copied to Q. All data
types are supported except BOOL and STRING: for these types, the output is the copy of IN.
For real values, variable is decreased by "1.0". For time values, variable is decreased by 1 ms.
The IN input must be directly connected to a variable, and cannot be a constant or complex expression.
This function is particularly designed for ST language. It allows simplified writing as assigning the result of the
function is not mandatory.
3.1.7.4 ST Language
IN := 2;
Q := DEC (IN);
(* now: IN = 1 ; Q = 1 *)
3.1.7.7 IL Language
not available
3.1.8 EXIT
Statement - Exit from a loop statement
3.1.8.1 Remarks
The EXIT statement indicates that the current loop (WHILE, REPEAT or FOR) must be finished. The exe-
cution continues after the END_WHILE, END_REPEAT or END_FOR keyword or the loop where the EXIT
is. EXIT quits only one loop and cannot be used to exit at the same time several levels of nested loops.
loop instructions can lead to infinite loops that block the target cycle.
3.1.8.2 ST Language
(* this program searches for the first non null item of an array *)
iFound = -1; (* means: not found *)
3.1.8.5 IL Language
Not available
See also
IF WHILE REPEAT FOR CASE
3.1.9.1 Syntax
FOR <index> := <minimum> TO <maximum> BY <step> DO
<statements>
END_FOR;
3.1.9.2 Remarks
The "BY <step>" statement can be omitted. The default value for the step is 1.
3.1.9.3 ST Language
iArrayDim := 10;
Not available
3.1.9.6 IL Language
Not available
See also
IF WHILE REPEAT CASE EXIT
3.1.10.1 Syntax
IF <BOOL expression> THEN
<statements>
ELSIF <BOOL expression> THEN
<statements>
ELSE
<statements>
END_IF;
3.1.10.2 Remarks
The IF statement is available in ST only. The execution of the statements is conditioned by a boolean expres-
sion. ELSIF and ELSE statements are optional. There can be several ELSIF statements.
3.1.10.3 ST Language
(* simple condition *)
IF bCond THEN
Q1 := IN1;
Q2 := TRUE;
END_IF;
(* binary selection *)
IF bCond THEN
Q1 := IN1;
Q2 := TRUE;
ELSE
Q1 := IN2;
Q2 := FALSE;
END_IF;
(* enumerated conditions *)
IF bCond1 THEN
Q1 := IN1;
ELSIF bCond2 THEN
Q1 := IN2;
ELSIF bCond3 THEN
Q1 := IN3;
ELSE
Q1 := IN4;
END_IF;
3.1.10.6 IL Language
Not available
See also
WHILE REPEAT FOR CASE EXIT
3.1.11 INC
Function - Increase a numerical variable
3.1.11.1 Inputs
IN : ANY Numerical variable (increased after call).
3.1.11.2 Outputs
Q : ANY Increased value
3.1.11.3 Remarks
When the function is called, the variable connected to the "IN" input is increased and copied to Q. All data
types are supported except BOOL and STRING: for these types, the output is the copy of IN.
For real values, variable is increased by "1.0". For time values, variable is increased by 1 ms.
The IN input must be directly connected to a variable, and cannot be a constant or complex expression.
This function is particularly designed for ST language. It allows simplified writing as assigning the result of the
function is not mandatory.
3.1.11.4 ST Language
IN := 1;
Q := INC (IN);
(* now: IN = 2 ; Q = 2 *)
3.1.11.7 IL Language
not available
3.1.12 MOVEBLOCK
Function - Move/Copy items of an array.
3.1.12.1 Inputs
3.1.12.2 Outputs
3.1.12.3 Remarks
Arrays of string are not supported by this function.
In FFLD language, the operation is executed only if the input rung (EN) is TRUE. The function is not available
in IL language.
The function copies a number (NB) of consecutive items starting at the PosSRC index in SRC array to
PosDST position in DST array. SRC and DST can be the same array. In that case, the function avoids lost
items when source and destination areas overlap.
This function checks array bounds and is always safe. The function returns TRUE if successful. It returns
FALSE if input positions and number do not fit the bounds of SRC and DST arrays.
3.1.12.4 ST Language
3.1.12.7 IL Language
Not available
3.1.13 NEG -
Operator - Performs an integer negation of the input.
3.1.13.1 Inputs
3.1.13.2 Outputs
IN Q
0 0
1 -1
-123 123
3.1.13.4 Remarks
In FBD and FFLD language, the block "NEG" can be used.
In FFLD language, the operation is executed only if the input rung (EN) is TRUE. The output rung (ENO)
keeps the same value as the input rung.
This feature is not available in IL language. In ST language, "-" can be followed by a complex boolean expres-
sion between parentheses.
3.1.13.5 ST Language
Q := -IN;
Q := - (IN1 + IN2);
3.1.13.8 IL Language
Not available
3.1.14 ON
Statement - Conditional execution of statements.
The ON instruction provides a simpler syntax for checking the rising edge of a Boolean condition.
3.1.14.1 Syntax
ON <BOOL expression> DO
<statements>
END_DO;
3.1.14.2 Remarks
Statements within the ON structure are executed only when the boolean expression rises from FALSE to
TRUE. The ON instruction avoids systematic use of the R_TRIG function block or other "last state" flags.
The ON syntax is available in any program, sub-program or UDFB. It is available in both T5 p-code or native
code compilation modes.
This statement is an extension to the standard and is not IEC61131-3 compliant.
This instruction should not be used inside UDFBs. This instruction is not UDFB safe.
3.1.14.3 ST Language
3.1.15 ( )
Operator - force the evaluation order in a complex expression.
3.1.15.1 Remarks
Parentheses are used in ST and IL language for changing the default evaluation order of various operations
within a complex expression. For instance, the default evaluation of "2 * 3 + 4" expression in ST language
gives a result of 10 as "*" operator has highest priority. Changing the expression as "2 * ( 3 + 4 )" gives a result
of 14. Parentheses can be nested in a complex expression.
Below is the default evaluation order for ST language operations (1rst is highest priority):
3.1.15.2 ST Language
3.1.15.5 IL Language
See also
Assignment
3.1.16.1 Syntax
REPEAT
<statements>
UNTIL <BOOL expression> END_REPEAT;
3.1.16.2 Remarks
The statements between "REPEAT" and "UNTIL" are executed until the boolean expression is TRUE. The
condition is evaluated after the statements are executed. Statements are executed at least once.
Loop instructions can lead to infinite loops that block the target cycle. Never test the state of an input in the
condition as the input will not be refreshed before the next cycle.
3.1.16.3 ST Language
iPos := 0;
REPEAT
MyArray[iPos] := 0;
iNbCleared := iNbCleared + 1;
iPos := iPos + 1;
UNTIL iPos = iMax END_REPEAT;
3.1.16.6 IL Language
Not available
See also
IF WHILE FOR CASE EXIT
3.1.17.1 Remarks
The "RETURN" statement jumps to the end of the program. In FBD language, the return statement is rep-
resented by the "<RETURN>" symbol. The input of the symbol must be connected to a valid boolean signal.
The jump is performed only if the input is TRUE. In FFLD language, the "<RETURN>" symbol is used as a
coil at the end of a rung. The jump is performed only if the rung state is TRUE. In IL language, RET, RETC,
RETCN and RETNC instructions are used.
When used within an action block of an SFC step, the RETURN statement jumps to the end of the action
block.
3.1.17.2 ST Language
(* In this example the DTat block will not be called if bIgnore is TRUE *)
3.1.17.5 IL Language
Below is the meaning of possible instructions:
RET Jump to the end always
RETC Jump to the end if the current result is TRUE
RETNC Jump to the end if the current result is FALSE
RETCN Same as RETNC
ST Q2 (* if IN1 is TRUE *)
RET (* Jump to the end unconditionally *)
See also
Labels Jumps
3.1.18.1 Syntax
WAIT <BOOL expression> ;
WAIT_TIME <TIME expression> ;
3.1.18.2 Remarks
The WAIT statement checks the attached boolean expression and does the following:
The WAIT_TIME statement suspends the execution of the program for the specified duration. The execution
of other programs is not affected.
These instructions are available in ST language only and has no correspondence in other languages. These
instructions cannot be called in a User-Defined Function Block (UDFB). The use of WAIT or WAIT_TIME in a
UDFB provokes a compile error.
WAIT and WAIT_TIME instructions can be called in a sub-program. However, it can lead to some unsafe situ-
ation if the same sub program is called from various programs. Re-entrancy is not supported by WAIT and
WAIT_TIME instructions. Avoiding this situation is the responsibility of the programmer. The compiler out-
puts some warning messages if a sub-program containing a WAIT or WAIT_TIME instruction is called from
more than one program.
These instructions must not be called from ST parts of SFC programs. This makes no sense as SFC is
already a state machine. The use of WAIT or WAIT_TME in SFC or in a sub-program called from SFC pro-
vokes a compile error.
These instructions are not available when the code is compiled through a "C" compiler. Using "C" code gen-
eration with a program containing a WAIT or WAIT_TIME instruction provokes an error during post-compiling.
These statement are extensions to the standard and are not IEC61131-3 compliant.
This instruction should not be used inside UDFBs. This instruction is not UDFB safe.
3.1.18.3 ST Language
(* use of WAIT with different kinds of BOOL expressions *)
WAIT BoolVariable;
WAIT (diLevel > 100) AND NOT bAlarm;
3.1.19.1 Syntax
WHILE <BOOL expression> DO
<statements>
END_WHILE ;
3.1.19.2 Remarks
The statements between "DO" and "END_WHILE" are executed while the boolean expression is TRUE. The
condition is evaluated beforethe statements are executed. If the condition is FALSE when WHILE is first
reached, statements are never executed.
Loop instructions can lead to infinite loops that block the target cycle. Never test the state of an input in the
condition as the input will not be refreshed before the next cycle.
3.1.19.3 ST Language
iPos := 0;
WHILE iPos < iMax DO
MyArray[iPos] := 0;
iNbCleared := iNbCleared + 1;
END_WHILE;
3.1.19.6 IL Language
Not available
See also
IF REPEAT FOR CASE EXIT
3.2.1 FLIPFLOP
Function Block - Flipflop bistable.
3.2.1.1 Inputs
IN : BOOL Swap command (on rising edge)
RST : BOOL Reset to FALSE
3.2.1.2 Outputs
Q : BOOL Output
3.2.1.3 Remarks
The output is systematically reset to FALSE if RST is TRUE.
The output changes on each rising edge of the IN input, if RST is FALSE.
3.2.1.4 ST Language
(* MyFlipFlop is declared as an instance of FLIPFLOP function block *)
MyFlipFlop (IN, RST);
Q := MyFlipFlop.Q;
3.2.1.7 IL Language
(* MyFlipFlop is declared as an instance of FLIPFLOP function block *)
Op1: CAL MyFlipFlop (IN, RST)
FFLD MyFlipFlop.Q
ST Q1
See also
R S SR
3.2.2 F_TRIG
Function Block - Falling pulse detection
3.2.2.1 Inputs
CLK : BOOL Boolean signal
3.2.2.2 Outputs
Q : BOOL TRUE when the input changes from TRUE to FALSE
3.2.2.4 Remarks
Although ]P[ and ]N[ contacts can be used in FFLD language, it is recommended to use declared instances of
R_TRIG or F_TRIG function blocks in order to avoid contingencies during an Online Change.
3.2.2.5 ST Language
(* MyTrigger is declared as an instance of F_TRIG function block *)
MyTrigger (CLK);
Q := MyTrigger.Q;
3.2.2.8 IL Language:
(* MyTrigger is declared as an instance of F_TRIG function block *)
Op1: CAL MyTrigger (CLK)
FFLD MyTrigger.Q
ST Q
See also
R_TRIG
3.2.3 NOT
Operator - Performs a boolean negation of the input.
3.2.3.1 Inputs
IN : BOOL Boolean value
3.2.3.2 Outputs
Q : BOOL Boolean negation of the input
3.2.3.4 Remarks
In FBD language, the block "NOT" can be used. Alternatively, you can use a link terminated by a "o" neg-
ation. In FFLD language, negated contacts and coils can be used. In IL language, the "N" modifier can be
used with instructions FFLD, AND, OR, XOR and ST. It represents a negation of the operand. In ST lan-
guage, NOT can be followed by a complex boolean expression between parentheses.
3.2.3.5 ST Language
Q := NOT IN;
Q := NOT (IN1 OR IN2);
3.2.3.8 IL Language:
Op1: FFLDN IN1
OR IN2
ST Q (* Q is equal to: (NOT IN1) OR IN2 *)
Op2: FFLD IN1
AND IN2
STN Q (* Q is equal to: NOT (IN1 AND IN2) *)
See also
AND OR XOR
3.2.4 QOR
Operator - Count the number of TRUE inputs.
3.2.4.1 Inputs
IN1 ... INn : BOOL Boolean inputs
3.2.4.2 Outputs
Q : DINT Number of inputs being TRUE
3.2.4.3 Remarks
The block accepts a non-fixed number of inputs.
3.2.4.4 ST Language
3.2.4.7 IL Language
3.2.5 R
Operator - Force a boolean output to FALSE.
3.2.5.1 Inputs
RESET : BOOL Condition
3.2.5.2 Outputs
Q : BOOL Output to be forced
3.2.5.4 Remarks
S and R operators are available as standard instructions in the IL language. In FFLD languages they are rep-
resented by (S) and (R) coils. In FBD language, you can use (S) and (R) coils, but you must prefer RS and SR
function blocks. Set and reset operations are not available in ST language.
3.2.5.5 ST Language
Not available.
3.2.5.8 IL Language:
Op1: FFLD RESET
R Q (* Q is forced to FALSE if RESET is TRUE *)
(* Q is unchanged if RESET is FALSE *)
See also
S RS SR
3.2.6 RS
Function Block - Reset dominant bistable.
3.2.6.1 Inputs
SET : BOOL Condition for forcing to TRUE
RESET1 : BOOL Condition for forcing to FALSE (highest priority command)
3.2.6.2 Outputs
Q1 : BOOL Output to be forced
3.2.6.4 Remarks
The output is unchanged when both inputs are FALSE. When both inputs are TRUE, the output is forced to
FALSE (reset dominant).
3.2.6.5 ST Language
(* MyRS is declared as an instance of RS function block *)
MyRS (SET, RESET1);
Q1 := MyRS.Q1;
3.2.6.8 IL Language:
(* MyRS is declared as an instance of RS function block *)
Op1: CAL MyRS (SET, RESET1)
FFLD MyRS.Q1
ST Q1
See also
R S SR
3.2.7 R_TRIG
Function Block - Rising pulse detection
3.2.7.1 Inputs
CLK : BOOL Boolean signal
3.2.7.2 Outputs
Q : BOOL TRUE when the input changes from FALSE to TRUE
3.2.7.4 Remarks
Although ]P[ and ]N[ contacts can be used in FFLD language, it is recommended to use declared instances of
R_TRIG or F_TRIG function blocks in order to avoid contingencies during an Online Change.
3.2.7.5 ST Language
(* MyTrigger is declared as an instance of R_TRIG function block *)
MyTrigger (CLK);
Q := MyTrigger.Q;
3.2.7.8 IL Language:
(* MyTrigger is declared as an instance of R_TRIG function block *)
Op1: CAL MyTrigger (CLK)
FFLD MyTrigger.Q
ST Q
See also
F_TRIG
3.2.8 S
Operator - Force a boolean output to TRUE.
3.2.8.1 Inputs
SET : BOOL Condition
3.2.8.2 Outputs
Q : BOOL Output to be forced
3.2.8.4 Remarks
S and R operators are available as standard instructions in the IL language. In FFLD languages they are rep-
resented by (S) and (R) coils In FBD language, you can use (S) and (R) coils, but you must prefer RS and SR
function blocks. Set and reset operations are not available in ST language.
3.2.8.5 ST Language
Not available.
3.2.8.8 IL Language:
Op1: FFLD SET
S Q (* Q is forced to TRUE if SET is TRUE *)
(* Q is unchanged if SET is FALSE *)
See also
R RS SR
3.2.9 SEMA
Function Block - Semaphore.
3.2.9.1 Inputs
CLAIM : BOOL Takes the semaphore
RELEASE : BOOL Releases the semaphore
3.2.9.2 Outputs
BUSY : BOOL True if semaphore is busy
3.2.9.3 Remarks
The function block implements the following algorithm:
BUSY := mem;
if CLAIM then
mem := TRUE;
else if RELEASE then
BUSY := FALSE;
mem := FALSE;
end_if;
In FFLD language, the input rung is the CLAIM command. The output rung is the BUSY output signal.
3.2.9.4 ST Language
(* MySema is a declared instance of SEMA function block *)
MySema (CLAIM, RELEASE);
BUSY := MyBlinker.BUSY;
3.2.9.7 IL Language:
(* MySema is a declared instance of SEMA function block *)
Op1: CAL MySema (CLAIM, RELEASE)
FFLD MyBlinker.BUSY
ST BUSY
3.2.10 SR
Function Block - Set dominant bistable.
3.2.10.1 Inputs
SET1 : BOOL Condition for forcing to TRUE (highest priority command)
RESET : BOOL Condition for forcing to FALSE
3.2.10.2 Outputs
Q1 : BOOL Output to be forced
3.2.10.4 Remarks
The output is unchanged when both inputs are FALSE. When both inputs are TRUE, the output is forced to
TRUE (set dominant).
3.2.10.5 ST Language
(* MySR is declared as an instance of SR function block *)
MySR (SET1, RESET);
Q1 := MySR.Q1;
3.2.10.8 IL Language:
(* MySR is declared as an instance of SR function block *)
Op1: CAL MySR (SET1, RESET)
FFLD MySR.Q1
ST Q1
See also
R S RS
3.2.11.1 Inputs
IN1 : BOOL First boolean input
IN2 : BOOL Second boolean input
3.2.11.2 Outputs
Q : BOOL Exclusive OR of all inputs
3.2.11.4 Remarks
The block is called "=1" in FBD and FFLD languages. In IL language, the XOR instruction performs an exclus-
ive OR between the current result and the operand. The current result must be boolean. The XORN instruc-
tion performs an exclusive between the current result and the boolean negation of the operand.
3.2.11.5 ST Language
Q := IN1 XOR IN2;
Q := IN1 XOR IN2 XOR IN3;
3.2.11.8 IL Language
Op1: FFLD IN1
XOR IN2
ST Q (* Q is equal to: IN1 XOR IN2 *)
Op2: FFLD IN1
XORN IN2
ST Q (* Q is equal to: IN1 XOR (NOT IN2) *)
See also
AND OR NOT
+ addition
- subtraction
* multiplication
/ division
- (NEG) integer negation (unary operator)
Below are the standard functions that perform arithmetic operations:
3.3.1 + ADD
Operator - Performs an addition of all inputs.
3.3.1.1 Inputs
IN1 : ANY First input
IN2 : ANY Second input
3.3.1.2 Outputs
Q : ANY Result: IN1 + IN2
3.3.1.3 Remarks
All inputs and the output must have the same type. In FBD language, the block can have up to 16 inputs. In
FFLD language, the input rung (EN) enables the operation, and the output rung keeps the same value as the
input rung. In IL language, the ADD instruction performs an addition between the current result and the oper-
and. The current result and the operand must have the same type.
The addition can be used with strings. The result is the concatenation of the input strings.
3.3.1.4 ST Language
Q := IN1 + IN2;
MyString := 'He' + 'll ' + 'o'; (* MyString is equal to 'Hello' *)
3.3.1.7 IL Language:
Op1: FFLD IN1
ADD IN2
ST Q (* Q is equal to: IN1 + IN2 *)
Op2: FFLD IN1
ADD IN2
ADD IN3
ST Q (* Q is equal to: IN1 + IN2 + IN3 *)
See also
- * /
3.3.2 / DIV
Operator - Performs a division of inputs.
3.3.2.1 Inputs
IN1 : ANY_NUM First input
IN2 : ANY_NUM Second input
3.3.2.2 Outputs
Q : ANY_NUM Result: IN1 / IN2
3.3.2.3 Remarks
All inputs and the output must have the same type. In FFLD language, the input rung (EN) enables the oper-
ation, and the output rung keeps the same value as the input rung. In IL language, the DIV instruction per-
forms a division between the current result and the operand. The current result and the operand must have the
same type.
3.3.2.4 ST Language
Q := IN1 / IN2;
3.3.2.7 IL Language:
Op1: FFLD IN1
DIV IN2
ST Q (* Q is equal to: IN1 / IN2 *)
Op2: FFLD IN1
DIV IN2
DIV IN3
ST Q (* Q is equal to: IN1 / IN2 / IN3 *)
See also
+ - *
3.3.3 NEG -
Operator - Performs an integer negation of the input.
3.3.3.1 Inputs
3.3.3.2 Outputs
IN Q
0 0
1 -1
-123 123
3.3.3.4 Remarks
In FBD and FFLD language, the block "NEG" can be used.
In FFLD language, the operation is executed only if the input rung (EN) is TRUE. The output rung (ENO)
keeps the same value as the input rung.
This feature is not available in IL language. In ST language, "-" can be followed by a complex boolean expres-
sion between parentheses.
3.3.3.5 ST Language
Q := -IN;
Q := - (IN1 + IN2);
3.3.3.8 IL Language
Not available
3.3.4 LIMIT
Function - Bounds an integer between low and high limits.
3.3.4.1 Inputs
IMIN : DINT Low bound
IN : DINT Inputvalue
IMAX : DINT High bound
3.3.4.2 Outputs
Q : DINT IMIN if IN < IMIN; IMAX if IN > IMAX; IN otherwise
3.3.4.4 Remarks
In FFLD language, the input rung (EN) enables the operation, and the output rung keeps the state of the input
rung. In IL language, the first input must be loaded before the function call. Other inputs are operands of the
function, separated by a coma.
3.3.4.5 ST Language
Q := LIMIT (IMIN, IN, IMAX);
3.3.4.8 IL Language:
Op1: FFLD IMIN
LIMIT IN, IMAX
ST Q
See also
MIN MAX MOD ODD
3.3.5 MAX
Function - Get the maximum of two integers.
3.3.5.1 Inputs
IN1 : DINT First input
IN2 : DINT Second input
3.3.5.2 Outputs
Q : DINT IN1 if IN1 > IN2; IN2 otherwise
3.3.5.3 Remarks
In FFLD language, the input rung (EN) enables the operation, and the output rung keeps the state of the input
rung. In IL language, the first input must be loaded before the function call. The second input is the operand of
the function.
3.3.5.4 ST Language
Q := MAX (IN1, IN2);
3.3.5.7 IL Language:
Op1: FFLD IN1
MAX IN2
ST Q (* Q is the maximum of IN1 and IN2 *)
See also
MIN LIMIT MOD ODD
3.3.6 MIN
Function - Get the minimum of two integers.
3.3.6.1 Inputs
IN1 : DINT First input
IN2 : DINT Second input
3.3.6.2 Outputs
Q : DINT IN1 if IN1 < IN2; IN2 otherwise
3.3.6.3 Remarks
In FFLD language, the input rung (EN) enables the operation, and the output rung keeps the state of the input
rung. In IL language, the first input must be loaded before the function call. The second input is the operand of
the function.
3.3.6.4 ST Language
Q := MIN (IN1, IN2);
3.3.6.7 IL Language:
Op1: FFLD IN1
MIN IN2
ST Q (* Q is the minimum of IN1 and IN2 *)
See also
MAX LIMIT MOD ODD
3.3.7.1 Remarks
In FFLD language, the input rung (EN) enables the operation, and the output rung keeps the state of the input
rung. In IL language, the first input must be loaded before the function call. The second input is the operand of
the function.
3.3.7.2 ST Language
Q := MOD (IN, BASE);
3.3.7.5 IL Language
Op1: FFLD IN
MOD BASE
ST Q (* Q is the rest of integer division: IN / BASE *)
See also
MIN MAX LIMIT ODD
3.3.8 * MUL
Operator - Performs a multiplication of all inputs.
3.3.8.1 Inputs
IN1 : ANY_NUM First input
IN2 : ANY_NUM Second input
3.3.8.2 Outputs
Q : ANY_NUM Result: IN1 * IN2
3.3.8.3 Remarks
All inputs and the output must have the same type. In FBD language, the block can have up to 16 inputs. In
FFLD language, the input rung (EN) enables the operation, and the output rung keeps the same value as the
input rung. In IL language, the MUL instruction performs a multiplication between the current result and the
operand. The current result and the operand must have the same type.
3.3.8.4 ST Language
Q := IN1 * IN2;
3.3.8.7 IL Language:
Op1: FFLD IN1
MUL IN2
ST Q (* Q is equal to: IN1 * IN2 *)
Op2: FFLD IN1
MUL IN2
MUL IN3
ST Q (* Q is equal to: IN1 * IN2 * IN3 *)
See also
+ - /
3.3.9 ODD
Function - Test if an integer is odd
3.3.9.1 Inputs
IN : DINT Input value
3.3.9.2 Outputs
Q : BOOL TRUE if IN is odd. FALSE if IN is even.
3.3.9.3 Remarks
In FFLD language, the input rung (EN) enables the operation, and the output rung is the result of the function.
In IL language, the input must be loaded before the function call.
3.3.9.4 ST Language
Q := ODD (IN);
3.3.9.7 IL Language:
Op1: FFLD IN
ODD
ST Q (* Q is TRUE if IN is odd *)
See also
MIN MAX LIMIT MOD
3.3.10 SetWithin
Function - Force a value when inside an interval.
3.3.10.1 Inputs
IN : ANY Input
MIN : ANY Low limit of the interval
MAX : ANY High limit of the interval
VAL : ANY Value to apply when inside the interval
3.3.10.2 Outputs
Q : BOOL Result
3.3.10.4 Remarks
The output is forced to VAL when the IN value is within the [MIN ... MAX] interval. It is set to IN when outside
the interval.
3.3.11 - SUB
Operator - Performs a subtraction of inputs.
3.3.11.1 Inputs
IN1 : ANY_NUM / TIME First input
IN2 : ANY_NUM / TIME Second input
3.3.11.2 Outputs
Q : ANY_NUM / TIME Result: IN1 - IN2
3.3.11.3 Remarks
All inputs and the output must have the same type. In FFLD language, the input rung (EN) enables the oper-
ation, and the output rung keeps the same value as the input rung. In IL language, the SUB instruction per-
forms a subtraction between the current result and the operand. The current result and the operand must have
the same type.
3.3.11.4 ST Language
Q := IN1 - IN2;
3.3.11.7 IL Language:
Op1: FFLD IN1
SUB IN2
ST Q (* Q is equal to: IN1 - IN2 *)
Op2: FFLD IN1
SUB IN2
SUB IN3
ST Q (* Q is equal to: IN1 - IN2 - IN3 *)
See also
+ * /
3.4.1 CMP
Function Block - Comparison with detailed outputs for integer inputs
3.4.1.1 Inputs
IN1 : DINT First value
IN2 : DINT Second value
3.4.1.2 Outputs
LT : BOOL TRUE if IN1 < IN2
EQ : BOOL TRUE if IN1 = IN2
GT : BOOL TRUE if IN1 > IN2
3.4.1.3 Remarks
In FFLD language, the rung input (EN) validates the operation. The rung output is the result of "LT" (lower
than) comparison).
3.4.1.4 ST Language
(* MyCmp is declared as an instance of CMP function block *)
MyCMP (IN1, IN2);
bLT := MyCmp.LT;
bEQ := MyCmp.EQ;
bGT := MyCmp.GT;
3.4.1.7 IL Language:
(* MyCmp is declared as an instance of CMP function block *)
Op1: CAL MyCmp (IN1, IN2)
FFLD MyCmp.LT
ST bLT
FFLD MyCmp.EQ
ST bEQ
FFLD MyCmp.GT
ST bGT
See also
> < >= <= = <>
3.4.2 >= GE
Operator - Test if first input is greater than or equal to second input.
3.4.2.1 Inputs
IN1 : ANY First input
IN2 : ANY Second input
3.4.2.2 Outputs
Q : BOOL TRUE if IN1 >= IN2
3.4.2.3 Remarks
Both inputs must have the same type. In FFLD language, the input rung (EN) enables the operation, and the
output rung is the result of the comparison. In IL language, the GE instruction performs the comparison
between the current result and the operand. The current result and the operand must have the same type.
Comparisons can be used with strings. In that case, the lexical order is used for comparing the input strings.
For instance, "ABC" is less than "ZX" ; "ABCD" is greater than "ABC".
3.4.2.4 ST Language
Q := IN1 >= IN2;
3.4.2.7 IL Language:
Op1: FFLD IN1
GE IN2
ST Q (* Q is true if IN1 >= IN2 *)
See also
> < <= = <> CMP
3.4.3 > GT
Operator - Test if first input is greater than second input.
3.4.3.1 Inputs
IN1 : ANY First input
IN2 : ANY Second input
3.4.3.2 Outputs
Q : BOOL TRUE if IN1 > IN2
3.4.3.3 Remarks
Both inputs must have the same type. In FFLD language, the input rung (EN) enables the operation, and the
output rung is the result of the comparison. In IL language, the GT instruction performs the comparison
between the current result and the operand. The current result and the operand must have the same type.
Comparisons can be used with strings. In that case, the lexical order is used for comparing the input strings.
For instance, "ABC" is less than "ZX" ; "ABCD" is greater than "ABC".
3.4.3.4 ST Language
Q := IN1 > IN2;
3.4.3.7 IL Language:
Op1: FFLD IN1
GT IN2
ST Q (* Q is true if IN1 > IN2 *)
See also
< >= <= = <> CMP
3.4.4 = EQ
Operator - Test if first input is equal to second input.
3.4.4.1 Inputs
IN1 : ANY First input
IN2 : ANY Second input
3.4.4.2 Outputs
Q : BOOL TRUE if IN1 = IN2
3.4.4.3 Remarks
Both inputs must have the same type. In FFLD language, the input rung (EN) enables the operation, and the
output rung is the result of the comparison. In IL language, the EQ instruction performs the comparison
between the current result and the operand. The current result and the operand must have the same type.
Comparisons can be used with strings. In that case, the lexical order is used for comparing the input strings.
For instance, "ABC" is less than "ZX" ; "ABCD" is greater than "ABC".
Equality comparisons cannot be used with TIME variables. The reason is that the timer actually has the res-
olution of the target cycle and test can be unsafe as some values can never be reached.
3.4.4.4 ST Language
Q := IN1 = IN2;
3.4.4.7 IL Language:
Op1: FFLD IN1
EQ IN2
ST Q (* Q is true if IN1 = IN2 *)
See also
> < >= <= <> CMP
3.4.5 <> NE
Operator - Test if first input is not equal to second input.
3.4.5.1 Inputs
IN1 : ANY First input
IN2 : ANY Second input
3.4.5.2 Outputs
Q : BOOL TRUE if IN1 is not equal to IN2
3.4.5.3 Remarks
Both inputs must have the same type. In FFLD language, the input rung (EN) enables the operation, and the
output rung is the result of the comparison. In IL language, the NE instruction performs the comparison
between the current result and the operand. The current result and the operand must have the same type.
Comparisons can be used with strings. In that case, the lexical order is used for comparing the input strings.
For instance, "ABC" is less than "ZX" ; "ABCD" is greater than "ABC".
Equality comparisons cannot be used with TIME variables. The reason is that the timer actually has the res-
olution of the target cycle and test can be unsafe as some values can never be reached
3.4.5.4 ST Language
Q := IN1 <> IN2;
3.4.5.7 IL Language:
Op1: FFLD IN1
NE IN2
ST Q (* Q is true if IN1 is not equal to IN2 *)
See also
> < >= <= = CMP
3.4.6 <= LE
Operator - Test if first input is less than or equal to second input.
3.4.6.1 Inputs
IN1 : ANY First input
IN2 : ANY Second input
3.4.6.2 Outputs
Q : BOOL TRUE if IN1 <= IN2
3.4.6.3 Remarks
Both inputs must have the same type. In FFLD language, the input rung (EN) enables the operation, and the
output rung is the result of the comparison. In IL language, the LE instruction performs the comparison
between the current result and the operand. The current result and the operand must have the same type.
Comparisons can be used with strings. In that case, the lexical order is used for comparing the input strings.
For instance, "ABC" is less than "ZX" ; "ABCD" is greater than "ABC".
3.4.6.4 ST Language
Q := IN1 <= IN2;
3.4.6.7 IL Language:
Op1: FFLD IN1
LE IN2
ST Q (* Q is true if IN1 <= IN2 *)
See also
> < >= = <> CMP
3.4.7 < LT
Operator - Test if first input is less than second input.
3.4.7.1 Inputs
IN1 : ANY First input
IN2 : ANY Second input
3.4.7.2 Outputs
Q : BOOL TRUE if IN1 < IN2
3.4.7.3 Remarks
Both inputs must have the same type. In FFLD language, the input rung (EN) enables the operation, and the
output rung is the result of the comparison. In IL language, the LT instruction performs the comparison
between the current result and the operand. The current result and the operand must have the same type.
Comparisons can be used with strings. In that case, the lexical order is used for comparing the input strings.
For instance, "ABC" is less than "ZX" ; "ABCD" is greater than "ABC".
3.4.7.4 ST Language
Q := IN1 < IN2;
3.4.7.7 IL Language:
Op1: FFLD IN1
LT IN2
ST Q (* Q is true if IN1 < IN2 *)
See also
> >= <= = <> CMP
3.5.1 ANY_TO_BOOL
Operator - Converts the input into boolean value.
3.5.1.1 Inputs
IN : ANY Input value
3.5.1.2 Outputs
Q : BOOL Value converted to boolean
3.5.1.3 Remarks
For DINT, REAL and TIME input data types, the result is FALSE if the input is 0. The result is TRUE in all
other cases. For STRING inputs, the output is TRUE if the input string is not empty, and FALSE if the string
is empty. In FFLD language, the conversion is executed only if the input rung (EN) is TRUE. The output rung
is the result of the conversion. In IL Language, the ANY_TO_BOOL function converts the current result.
3.5.1.4 ST Language
Q := ANY_TO_BOOL (IN);
3.5.1.7 IL Language:
Op1: FFLD IN
ANY_TO_BOOL
ST Q
3.5.2.1 Inputs
IN : ANY Input value
3.5.2.2 Outputs
Q : DINT Value converted to integer
3.5.2.3 Remarks
For BOOL input data types, the output is 0 or 1. For REAL input data type, the output is the integer part of the
input real. For TIME input data types, the result is the number of milliseconds. For STRING inputs, the output
is the number represented by the string, or 0 if the string does not represent a valid number. In FFLD lan-
guage, the conversion is executed only if the input rung (EN) is TRUE. The output rung (ENO) keeps the
same value as the input rung. In IL Language, the ANY_TO_DINT function converts the current result.
3.5.2.4 ST Language
Q := ANY_TO_DINT (IN);
3.5.2.7 IL Language:
Op1: FFLD IN
ANY_TO_DINT
ST Q
3.5.3.1 Inputs
IN : ANY Input value
3.5.3.2 Outputs
Q : INT Value converted to 16 bit integer
3.5.3.3 Remarks
For BOOL input data types, the output is 0 or 1. For REAL input data type, the output is the integer part of the
input real. For TIME input data types, the result is the number of milliseconds. For STRING inputs, the output
is the number represented by the string, or 0 if the string does not represent a valid number. In FFLD lan-
guage, the conversion is executed only if the input rung (EN) is TRUE. The output rung (ENO) keeps the
same value as the input rung. In IL Language, the ANY_TO_INT function converts the current result.
3.5.3.4 ST Language
Q := ANY_TO_INT (IN);
3.5.3.7 IL Language:
Op1: FFLD IN
ANY_TO_INT
ST Q
3.5.4.1 Inputs
IN : ANY Input value
3.5.4.2 Outputs
Q : LINT Value converted to long (64 bit) integer
3.5.4.3 Remarks
For BOOL input data types, the output is 0 or 1. For REAL input data type, the output is the integer part of the
input real. For TIME input data types, the result is the number of milliseconds. For STRING inputs, the output
is the number represented by the string, or 0 if the string does not represent a valid number. In FFLD lan-
guage, the conversion is executed only if the input rung (EN) is TRUE. The output rung (ENO) keeps the
same value as the input rung. In IL Language, the ANY_TO_LINT function converts the current result.
3.5.4.4 ST Language
Q := ANY_TO_LINT (IN);
3.5.4.7 IL Language:
Op1: FFLD IN
ANY_TO_LINT
ST Q
3.5.5 ANY_TO_LREAL
Operator - Converts the input into double precision real value.
3.5.5.1 Inputs
IN : ANY Input value
3.5.5.2 Outputs
Q : LREAL Value converted to double precision real
3.5.5.3 Remarks
For BOOL input data types, the output is 0.0 or 1.0. For DINT input data type, the output is the same number.
For TIME input data types, the result is the number of milliseconds. For STRING inputs, the output is the num-
ber represented by the string, or 0.0 if the string does not represent a valid number. In FFLD language, the con-
version is executed only if the input rung (EN) is TRUE. The output rung (ENO) keeps the same value as the
input rung. In IL Language, the ANY_TO_LREAL function converts the current result.
3.5.5.4 ST Language
Q := ANY_TO_LREAL (IN);
3.5.5.7 IL Language:
Op1: FFLD IN
ANY_TO_LREAL
ST Q
3.5.6 ANY_TO_REAL
Operator - Converts the input into real value.
3.5.6.1 Inputs
3.5.6.2 Outputs
Q : REAL Value converted to real
3.5.6.3 Remarks
For BOOL input data types, the output is 0.0 or 1.0. For DINT input data type, the output is the same number.
For TIME input data types, the result is the number of milliseconds. For STRING inputs, the output is the num-
ber represented by the string, or 0.0 if the string does not represent a valid number. In FFLD language, the con-
version is executed only if the input rung (EN) is TRUE. The output rung (ENO) keeps the same value as the
input rung. In IL Language, the ANY_TO_REAL function converts the current result.
3.5.6.4 ST Language
Q := ANY_TO_REAL (IN);
3.5.6.7 IL Language:
Op1: FFLD IN
ANY_TO_REAL
ST Q
3.5.7 ANY_TO_TIME
Operator - Converts the input into time value.
3.5.7.1 Inputs
IN : ANY Input value
3.5.7.2 Outputs
Q : TIME Value converted to time
3.5.7.3 Remarks
For BOOL input data types, the output is t#0 ms or t#1 ms. For DINT or REAL input data type, the output is
the time represented by the input number as a number of milliseconds. For STRING inputs, the output is the
time represented by the string, or t#0 ms if the string does not represent a valid time. In FFLD language, the
conversion is executed only if the input rung (EN) is TRUE. The output rung (ENO) keeps the same value as
the input rung. In IL Language, the ANY_TO_TIME function converts the current result.
3.5.7.4 ST Language
Q := ANY_TO_TIME (IN);
3.5.7.7 IL Language:
Op1: FFLD IN
ANY_TO_TIME
ST Q
3.5.8.1 Inputs
IN : ANY Input value
3.5.8.2 Outputs
Q : SINT Value converted to a small (8 bit) integer
3.5.8.3 Remarks
For BOOL input data types, the output is 0 or 1. For REAL input data type, the output is the integer part of the
input real. For TIME input data types, the result is the number of milliseconds. For STRING inputs, the output
is the number represented by the string, or 0 if the string does not represent a valid number. In FFLD lan-
guage, the conversion is executed only if the input rung (EN) is TRUE. The output rung (ENO) keeps the
same value as the input rung. In IL Language, the ANY_TO_SINT function converts the current result.
3.5.8.4 ST Language
Q := ANY_TO_SINT (IN);
3.5.8.7 IL Language
Op1: FFLD IN
ANY_TO_SINT
ST Q
3.5.9 ANY_TO_STRING
Operator - Converts the input into string value.
3.5.9.1 Inputs
IN : ANY Input value
3.5.9.2 Outputs
Q : STRING Value converted to string
3.5.9.3 Remarks
For BOOL input data types, the output is '1' or '0' for TRUE and FALSE respectively. For DINT, REAL or
TIME input data types, the output is the string representation of the input number. It is a number of mil-
liseconds for TIME inputs. In FFLD language, the conversion is executed only if the input rung (EN) is TRUE.
The output rung (ENO) keeps the same value as the input rung. In IL language, the ANY_TO_STRING func-
tion converts the current result.
3.5.9.4 ST Language
Q := ANY_TO_STRING (IN);
3.5.9.7 IL Language:
Op1: FFLD IN
ANY_TO_STRING
ST Q
3.5.10 NUM_TO_STRING
Function- Converts a number into string value.
3.5.10.1 Inputs
IN : ANY Input number.
WIDTH : DINT Wished length for the output string (see remarks)
DIGITS : DINT Number of digits after decimal point
3.5.10.2 Outputs
Q : STRING Value converted to string.
3.5.10.3 Remarks
This function converts any numerical value to a string. Unlike the ANY_TO_STRING function, it allows you
to specify a wished length and a number of digits after the decimal points.
If WIDTH is 0, the string is formatted with the necessary length.
If WIDTH is greater than 0, the string is completed with heading blank characters in order to match the value
of WIDTH.
If WIDTH is greater than 0, the string is completed with trailing blank characters in order to match the abso-
lute value of WIDTH.
If DIGITS is 0 then neither decimal part nor point are added.
If DIGITS is greater than 0, the corresponding number of decimal digits are added. '0' digits are added if neces-
sary
If the value is too long for the specified width, then the string is filled with '*' characters.
3.5.10.4 Examples
Q := NUM_TO_STRING (123.4, 8, 2); (* Q is ' 123.40' *)
Q := NUM_TO_STRING (123.4, -8, 2); (* Q is '123.40 ' *)
Q := NUM_TO_STRING (1.333333, 0, 2); (* Q is '1.33' *)
Q := NUM_TO_STRING (1234, 3, 0); (* Q is '***' *)
3.5.11 BCD_TO_BIN
3.5.11.1 Inputs
IN : DINT Integer value in BCD
3.5.11.2 Outputs
Value converted to integer, or 0 if IN is not a valid
Q : DINT
positive BCD value
Truth table (examples)
IN Q
-2 0 (invalid)
0 0
16 (16#10) 10
15 (16#0F) 0 (invalid)
3.5.11.3 Remarks
The input must be positive and must represent a valid BCD value. In FFLD language, the operation is
executed only if the input rung (EN) is TRUE. The output rung (ENO) keeps the same value as the input rung.
In IL, the input must be loaded in the current result before calling the function.
3.5.11.4 ST Language
Q := BCD_TO_BIN (IN);
3.5.11.7 IL Language
Op1: FFLD IN
BCD_TO_BIN
ST Q
See also
BIN_TO_BCD
3.5.12 BIN_TO_BCD
Function - Converts a binary value to a BCD (Binary Coded Decimal) value
3.5.12.1 Inputs
IN : DINT Integer value
3.5.12.2 Outputs
Q : DINT Value converted to BCD
or 0 if IN is less than 0
3.5.12.4 Remarks
The input must be positive. In FFLD language, the operation is executed only if the input rung (EN) is TRUE.
The output rung (ENO) keeps the same value as the input rung.
In IL, the input must be loaded in the current result before calling the function.
3.5.12.5 ST Language
Q := BIN_TO_BCD (IN);
3.5.12.8 IL Language:
Op1: FFLD IN
BIN_TO_BCD
ST Q
See also
BCD_TO_BIN
3.6 Selectors
Below are the standard functions that perform data selection:
3.6.1 MUX4
Function - Select one of the inputs - 4 inputs.
3.6.1.1 Inputs
SELECT : DINT Selection command
IN1 : ANY First input
IN2 : ANY Second input
... :
IN4 : ANY Last input
3.6.1.2 Outputs
Q : ANY IN1 or IN2 ... or IN4 depending on SELECT (see truth table)
3.6.1.4 Remarks
In FFLD language, the input rung (EN) enables the selection. The output rung keeps the same state as the
input rung. In IL language, the first parameter (selector) must be loaded in the current result before calling the
function. Other inputs are operands of the function, separated by comas.
3.6.1.5 ST Language
Q := MUX4 (SELECT, IN1, IN2, IN3, IN4);
3.6.1.8 IL Language
Op1: FFLD SELECT
MUX4 IN1, IN2, IN3, IN4
ST Q
See also
SEL MUX8
3.6.2 MUX8
Function - Select one of the inputs - 8 inputs.
3.6.2.1 Inputs
SELECT : DINT Selection command
IN1 : ANY First input
IN2 : ANY Second input
... :
IN8 : ANY Last input
3.6.2.2 Outputs
Q : ANY IN1 or IN2 ... or IN8 depending on SELECT (see truth table)
3.6.2.4 Remarks
In FFLD language, the input rung (EN) enables the selection. The output rung keeps the same state as the
input rung. In IL language, the first parameter (selector) must be loaded in the current result before calling the
function. Other inputs are operands of the function, separated by comas.
3.6.2.5 ST Language
Q := MUX8 (SELECT, IN1, IN2, IN3, IN4, IN5, IN6, IN7, IN8);
3.6.2.8 IL Language
Not available
Op1: FFLD SELECT
MUX8 IN1, IN2, IN3, IN4, IN5, IN6, IN7, IN8
ST Q
See also
SEL MUX4
3.6.3 SEL
Function - Select one of the inputs - 2 inputs.
3.6.3.1 Inputs
SELECT : BOOL Selection command
IN1 : ANY First input
IN2 : ANY Second input
3.6.3.2 Outputs
Q : ANY IN1 if SELECT is FALSE; IN2 if SELECT is TRUE
3.6.3.4 Remarks
In FFLD language, the selector command is the input rung. The output rung keeps the same state as the input
rung. In IL language, the first parameter (selector) must be loaded in the current result before calling the func-
tion. Other inputs are operands of the function, separated by comas.
3.6.3.5 ST Language
Q := SEL (SELECT, IN1, IN2);
3.6.3.8 IL Language
Op1: FFLD SELECT
SEL IN1, IN2
ST Q
See also
MUX4 MUX8
3.7 Registers
Below are the standard functions for managing 8 bit to 32 bit registers:
The following functions enable bit to bit operations on a 8 bit to 32 bit integers:
The following functions have been deprecated. They are available for backwards compatibility only. The func-
tions listed above should be used for all current and future development.
AND_WORD AND_BYTE
OR_WORD OR_BYTE
NOT_WORD NOT_BYTE
XOR_WORD XOR_BYTE
ROLW RORW
ROLB RORB
SHLW SHRW
SHLB SHRB
3.7.1 AND_MASK
Function - Performs a bit to bit AND between two integer values
3.7.1.1 Inputs
IN : ANY First input
MSK : ANY Second input (AND mask)
3.7.1.2 Outputs
Q : ANY AND mask between IN and MSK inputs
3.7.1.3 Remarks
Arguments can be signed or unsigned integers from 8 to 32 bits.
In FFLD language, the input rung (EN) enables the operation, and the output rung keeps the same value as
the input rung. In IL language, the first parameter (IN) must be loaded in the current result before calling the
function. The other input is the operands of the function.
3.7.1.4 ST Language
3.7.1.7 IL Language:
Op1: FFLD IN
AND_MASK MSK
ST Q
See also
OR_MASK XOR_MASK NOT_MASK
3.7.2 HIBYTE
Function - Get the most significant byte of a word
3.7.2.1 Inputs
IN : UINT 16 bit register
3.7.2.2 Outputs
Q : USINT Most significant byte
3.7.2.3 Remarks
In FFLD language, the operation is executed only if the input rung (EN) is TRUE. The output rung (ENO)
keeps the same value as the input rung.
In IL, the input must be loaded in the current result before calling the function.
3.7.2.4 ST Language
Q := HIBYTE (IN);
3.7.2.7 IL Language:
Op1: FFLD IN
HIBYTE
ST Q
See also
LOBYTE LOWORD HIWORD MAKEWORD MAKEDWORD
3.7.3 LOBYTE
Function - Get the less significant byte of a word
3.7.3.1 Inputs
IN : UINT 16 bit register
3.7.3.2 Outputs
Q : USINT Lowest significant byte
3.7.3.3 Remarks
In FFLD language, the operation is executed only if the input rung (EN) is TRUE. The output rung (ENO)
keeps the same value as the input rung.
In IL, the input must be loaded in the current result before calling the function.
3.7.3.4 ST Language
Q := LOBYTE (IN);
3.7.3.7 IL Language:
Op1: FFLD IN
LOBYTE
ST Q
See also
HIBYTE LOWORD HIWORD MAKEWORD MAKEDWORD
3.7.4 HIWORD
Function - Get the most significant word of a double word
3.7.4.1 Inputs
IN : UDINT 32 bit register
3.7.4.2 Outputs
Q : UINT Most significant word
3.7.4.3 Remarks
In FFLD language, the operation is executed only if the input rung (EN) is TRUE. The output rung (ENO)
keeps the same value as the input rung.
In IL, the input must be loaded in the current result before calling the function.
3.7.4.4 ST Language
Q := HIWORD (IN);
3.7.4.7 IL Language:
Op1: FFLD IN
HIWORD
ST Q
See also
LOBYTE HIBYTE LOWORD MAKEWORD MAKEDWORD
3.7.5 LOWORD
Function - Get the less significant word of a double word
3.7.5.1 Inputs
IN : UDINT 32 bit register
3.7.5.2 Outputs
Q : UINT Lowest significant word
3.7.5.3 Remarks
In FFLD language, the operation is executed only if the input rung (EN) is TRUE. The output rung (ENO)
keeps the same value as the input rung.
In IL, the input must be loaded in the current result before calling the function.
3.7.5.4 ST Language
Q := LOWORD (IN);
3.7.5.7 IL Language:
Op1: FFLD IN
LOWORD
ST Q
See also
LOBYTE HIBYTE HIWORD MAKEWORD MAKEDWORD
3.7.6 MAKEDWORD
Function - Builds a double word as the concatenation of two words
3.7.6.1 Inputs
HI : USINT Highest significant word
LO : USINT Lowest significant word
3.7.6.2 Outputs
Q : UINT 32 bit register
3.7.6.3 Remarks
In FFLD language, the operation is executed only if the input rung (EN) is TRUE. The output rung (ENO)
keeps the same value as the input rung.
In IL, the first input must be loaded in the current result before calling the function.
3.7.6.4 ST Language
Q := MAKEDWORD (HI, LO);
3.7.6.7 IL Language:
Op1: FFLD HI
MAKEDWORD LO
ST Q
See also
LOBYTE HIBYTE LOWORD HIWORD MAKEWORD
3.7.7 MAKEWORD
Function - Builds a word as the concatenation of two bytes
3.7.7.1 Inputs
HI : USINT Highest significant byte
LO : USINT Lowest significant byte
3.7.7.2 Outputs
Q : UINT 16 bit register
3.7.7.3 Remarks
In FFLD language, the operation is executed only if the input rung (EN) is TRUE. The output rung (ENO)
keeps the same value as the input rung.
In IL, the first input must be loaded in the current result before calling the function.
3.7.7.4 ST Language
3.7.7.7 IL Language:
Op1: FFLD HI
MAKEWORD LO
ST Q
See also
LOBYTE HIBYTE LOWORD HIWORD MAKEDWORD
3.7.8 MBSHIFT
Function - Multibyte shift / rotate
3.7.8.1 Inputs
Buffer : SINT/USINT Array of bytes
Pos : DINT Base position in the array
NbByte : DINT Number of bytes to be shifted/rotated
NbShift : DINT Number of shifts or rotations
ToRight : BOOL TRUE for right / FALSE for left
Rotate : BOOL TRUE for rotate / FALSE for shift
InBit : BOOL Bit to be introduced in a shift
3.7.8.2 Outputs
Q : BOOL TRUE if successful
3.7.8.3 Remarks
Use the "ToRight" argument to specify a shift to the left (FALSE) or to the right (TRUE). Use the "Rotate"
argument to specify either a shift (FALSE) or a rotation (TRUE). In case of a shift, the "InBit" argument spe-
cifies the value of the bit that replaces the last shifted bit.
In FFLD language, the rung input (EN) validates the operation. The rung output is the result ("Q").
3.7.8.4 ST Language
3.7.8.7 IL Language:
Not available
3.7.9 NOT_MASK
Function - Performs a bit to bit negation of an integer value
3.7.9.1 Inputs
IN : ANY Integer input
3.7.9.2 Outputs
Q : ANY Bit to bit negation of the input
3.7.9.3 Remarks
Arguments can be signed or unsigned integers from 8 to 32 bits.
In FFLD language, the input rung (EN) enables the operation, and the output rung keeps the same value as
the input rung. In IL language, the parameter (IN) must be loaded in the current result before calling the func-
tion.
3.7.9.4 ST Language
Q := NOT_MASK (IN);
3.7.9.7 IL Language:
Op1: FFLD IN
NOT_MASK
ST Q
See also
AND_MASK OR_MASK XOR_MASK
3.7.10 OR_MASK
Function - Performs a bit to bit OR between two integer values
3.7.10.1 Inputs
IN : ANY First input
MSK : ANY Second input (OR mask)
3.7.10.2 Outputs
Q : ANY OR mask between IN and MSK inputs
3.7.10.3 Remarks
Arguments can be signed or unsigned integers from 8 to 32 bits.
In FFLD language, the input rung (EN) enables the operation, and the output rung keeps the same value as
the input rung. In IL language, the first parameter (IN) must be loaded in the current result before calling the
function. The other input is the operands of the function.
3.7.10.4 ST Language
Q := OR_MASK (IN, MSK);
3.7.10.7 IL Language:
Op1: FFLD IN
OR_MASK MSK
ST Q
See also
AND_MASK XOR_MASK NOT_MASK
3.7.11 PACK8
Function - Builds a byte with bits
3.7.11.1 Inputs
IN0 : BOOL Less significant bit
...
IN7 : BOOL Most significant bit
3.7.11.2 Outputs
Q : USINT Byte built with input bits
3.7.11.3 Remarks
In FFLD language, the input rung is the IN0 input. The output rung (ENO) keeps the same value as the input
rung.
In IL, the input must be loaded in the current result before calling the function.
3.7.11.4 ST Language
Q := PACK8 (IN0, IN1, IN2, IN3, IN4, IN5, IN6, IN7);
3.7.11.7 IL Language
Op1: FFLD IN0
PACK8 IN1, IN2, IN3, IN4, IN5, IN6, IN7
ST Q
See also
UNPACK8
3.7.12 ROL
Function - Rotate bits of a register to the left.
3.7.12.1 Inputs
IN : ANY register
NBR : DINT Number of rotations (each rotation is 1 bit)
3.7.12.2 Outputs
Q : ANY Rotated register
3.7.12.3 Diagram
3.7.12.4 Remarks
Arguments can be signed or unsigned integers from 8 to 32 bits.
In FFLD language, the input rung (EN) enables the operation, and the output rung keeps the state of the input
rung. In IL language, the first input must be loaded before the function call. The second input is the operand of
the function.
3.7.12.5 ST Language
Q := ROL (IN, NBR);
3.7.12.8 IL Language:
Op1: FFLD IN
ROL NBR
ST Q
See also
SHL SHR ROR
3.7.13 ROR
Function - Rotate bits of a register to the right.
3.7.13.1 Inputs
IN : ANY register
NBR : ANY Number of rotations (each rotation is 1 bit)
3.7.13.2 Outputs
Q : ANY Rotated register
3.7.13.3 Diagram
3.7.13.4 Remarks
Arguments can be signed or unsigned integers from 8 to 32 bits.
In FFLD language, the input rung (EN) enables the operation, and the output rung keeps the state of the input
rung. In IL language, the first input must be loaded before the function call. The second input is the operand of
the function.
3.7.13.5 ST Language
Q := ROR (IN, NBR);
3.7.13.8 IL Language:
Op1: FFLD IN
ROR NBR
ST Q
See also
SHL SHR ROL
3.7.14.1 Inputs
IN : SINT 8 bit register
NBR : SINT Number of rotations (each rotation is 1 bit)
3.7.14.2 Outputs
Q : SINT Rotated register
3.7.14.3 Diagram
3.7.14.4 Remarks
In FFLD language, the input rung (EN) enables the operation, and the output rung keeps the state of the input
rung. In IL language, the first input must be loaded before the function call. The second input is the operand of
the function.
3.7.14.5 ST Language
Q := RORb (IN, NBR);
3.7.14.8 IL Language:
Op1: FFLD IN
RORb NBR
ST Q
3.7.15.1 Inputs
IN : INT 16 bit register
NBR : INT Number of rotations (each rotation is 1 bit)
3.7.15.2 Outputs
Q : INT Rotated register
3.7.15.3 Diagram
3.7.15.4 Remarks
In FFLD language, the input rung (EN) enables the operation, and the output rung keeps the state of the input
rung. In IL language, the first input must be loaded before the function call. The second input is the operand of
the function.
3.7.15.5 ST Language
Q := RORw (IN, NBR);
3.7.15.8 IL Language:
Op1: FFLD IN
RORw NBR
ST Q
3.7.16 SETBIT
Function - Set a bit in an integer register.
3.7.16.1 Inputs
IN : ANY 8 to 32 bit integer register
BIT : DINT Bit number (0 = less significant bit)
VAL : BOOL Bit value to apply
3.7.16.2 Outputs
Q : ANY Modified register
3.7.16.3 Remarks
Types LINT, REAL, LREAL, TIME and STRING are not supported for IN and Q. IN and Q must have the
same type. In case of invalid arguments (bad bit number or invalid input type) the function returns the value of
IN without modification.
In FFLD language, the operation is executed only if the input rung (EN) is TRUE. The output rung (ENO)
keeps the same value as the input rung.
3.7.16.4 ST Language
Q := SETBIT (IN, BIT, VAL);
3.7.16.7 IL Language
Not available
See also
TESTBIT
3.7.17 SHL
Function - Shift bits of a register to the left.
3.7.17.1 Inputs
IN : ANY register
NBS : ANY Number of shifts (each shift is 1 bit)
3.7.17.2 Outputs
Q : ANY Shifted register
3.7.17.3 Diagram
3.7.17.4 Remarks
Arguments can be signed or unsigned integers from 8 to 32 bits.
In FFLD language, the input rung (EN) enables the operation, and the output rung keeps the state of the input
rung. In IL language, the first input must be loaded before the function call. The second input is the operand of
the function.
3.7.17.5 ST Language
Q := SHL (IN, NBS);
3.7.17.8 IL Language:
Op1: FFLD IN
SHL NBS
ST Q
See also
SHR ROL ROR SHLb SHRb ROLb RORb SHLw SHRw ROLw RORw
3.7.18 SHR
Function - Shift bits of a register to the right.
3.7.18.1 Inputs
IN : ANY register
NBS : ANY Number of shifts (each shift is 1 bit)
3.7.18.2 Outputs
Q : ANY Shifted register
3.7.18.3 Diagram
3.7.18.4 Remarks
Arguments can be signed or unsigned integers from 8 to 32 bits.
In FFLD language, the input rung (EN) enables the operation, and the output rung keeps the state of the input
rung. In IL language, the first input must be loaded before the function call. The second input is the operand of
the function.
3.7.18.5 ST Language
Q := SHR (IN, NBS);
3.7.18.8 IL Language:
Op1: FFLD IN
SHR NBS
ST Q
See also
SHL ROL ROR SHLb SHRb ROLb RORb SHLw SHRw ROLw RORw
3.7.19 TESTBIT
Function - Test a bit of an integer register.
3.7.19.1 Inputs
IN : ANY 8 to 32 bit integer register
BIT : DINT Bit number (0 = less significant bit)
3.7.19.2 Outputs
Q : BOOL Bit value
3.7.19.3 Remarks
Types LINT, REAL, LREAL, TIME and STRING are not supported for IN and Q. IN and Q must have the
same type. In case of invalid arguments (bad bit number or invalid input type) the function returns FALSE.
In FFLD language, the operation is executed only if the input rung (EN) is TRUE. The output rung is the output
of the function.
3.7.19.4 ST Language
Q := TESTBIT (IN, BIT);
3.7.19.7 IL Language
Not available
See also
SETBIT
3.7.20 UNPACK8
Function block - Extract bits of a byte
3.7.20.1 Inputs
IN : USINT 8 bit register
3.7.20.2 Outputs
Q0 : BOOL Less significant bit
...
Q7 : BOOL Most significant bit
3.7.20.3 Remarks
In FFLD language, the output rung is the Q0 output. The operation is executed only in the input rung (EN) is
TRUE.
3.7.20.4 ST Language
(* MyUnpack is a declared instance of the UNPACK8 function block *)
MyUnpack (IN);
Q0 := MyUnpack.Q0;
Q1 := MyUnpack.Q1;
Q2 := MyUnpack.Q2;
Q3 := MyUnpack.Q3;
Q4 := MyUnpack.Q4;
Q5 := MyUnpack.Q5;
Q6 := MyUnpack.Q6;
Q7 := MyUnpack.Q7;
3.7.20.7 IL Language:
(* MyUnpack is a declared instance of the UNPACK8 function block *)
Op1: CAL MyUnpack (IN)
FFLD MyUnpack.Q0
ST Q0
(* ... *)
FFLD MyUnpack.Q7
ST Q7
See also
PACK8
3.7.21 XOR_MASK
Function - Performs a bit to bit exclusive OR between two integer values
3.7.21.1 Inputs
IN : ANY First input
MSK : ANY Second input (XOR mask)
3.7.21.2 Outputs
Q : ANY Exclusive OR mask between IN and MSK inputs
3.7.21.3 Remarks
Arguments can be signed or unsigned integers from 8 to 32 bits.
In FFLD language, the input rung (EN) enables the operation, and the output rung keeps the same value as
the input rung. In IL language, the first parameter (IN) must be loaded in the current result before calling the
function. The other input is the operands of the function.
3.7.21.4 ST Language
Q := XOR_MASK (IN, MSK);
3.7.21.7 IL Language:
Op1: FFLD IN
XOR_MASK MSK
ST Q
See also
AND_MASK OR_MASK NOT_MASK
3.8 Counters
Below are the standard blocks for managing counters:
CTU Up counter
CTD Down Counter
CTUD Up / Down Counter
3.8.1.1 Inputs
CD : BOOL Enable counting. Counter is decreased on each call when CD is TRUE
LOAD : BOOL Re-load command. Counter is set to PV when called with LOAD to TRUE
PV : DINT Programmed maximum value
3.8.1.2 Outputs
Q : BOOL TRUE when counter is empty, i.e. when CV = 0
CV : DINT Current value of the counter
3.8.1.3 Remarks
The counter is empty (CV = 0) when the application starts. The counter does not include a pulse detection for
CD input. Use R_TRIG or F_TRIG function block for counting pulses of CD input signal. In FFLD language,
CD is the input rung. The output rung is the Q output.
CTUr, CTDr, CTUDr function blocks operate exactly as other counters, except that all boolean inputs (CU,
CD, RESET, LOAD) have an implicit rising edge detection included.
3.8.1.4 ST Language
(* MyCounter is a declared instance of CTD function block *)
MyCounter (CD, LOAD, PV);
Q := MyCounter.Q;
CV := MyCounter.CV;
3.8.1.7 IL Language:
(* MyCounter is a declared instance of CTD function block *)
Op1: CAL MyCounter (CD, LOAD, PV)
FFLD MyCounter.Q
ST Q
FFLD MyCounter.CV
ST CV
See also
CTU CTUD
3.8.2.1 Inputs
CU : BOOL Enable counting. Counter is increased on each call when CU is TRUE
RESET : BOOL Reset command. Counter is reset to 0 when called with RESET to TRUE
PV : DINT Programmed maximum value
3.8.2.2 Outputs
Q : BOOL TRUE when counter is full, i.e. when CV = PV
CV : DINT Current value of the counter
3.8.2.3 Remarks
The counter is empty (CV = 0) when the application starts. The counter does not include a pulse detection for
CU input. Use R_TRIG or F_TRIG function block for counting pulses of CU input signal. In FFLD language,
CU is the input rung. The output rung is the Q output.
CTUr, CTDr, CTUDr function blocks operate exactly as other counters, except that all boolean inputs (CU,
CD, RESET, LOAD) have an implicit rising edge detection included.
3.8.2.4 ST Language
(* MyCounter is a declared instance of CTU function block *)
MyCounter (CU, RESET, PV);
Q := MyCounter.Q;
CV := MyCounter.CV;
3.8.2.7 IL Language:
(* MyCounter is a declared instance of CTU function block *)
Op1: CAL MyCounter (CU, RESET, PV)
FFLD MyCounter.Q
ST Q
FFLD MyCounter.CV
ST CV
See also
CTD CTUD
3.8.3.1 Inputs
CU : BOOL Enable counting. Counter is increased on each call when CU is TRUE
CD : BOOL Enable counting. Counter is decreased on each call when CD is TRUE
RESET : BOOL Reset command. Counter is reset to 0 called with RESET to TRUE
LOAD : BOOL Re-load command. Counter is set to PV when called with LOAD to TRUE
PV : DINT Programmed maximum value
3.8.3.2 Outputs
QU : BOOL TRUE when counter is full, i.e. when CV = PV
QD : BOOL TRUE when counter is empty, i.e. when CV = 0
CV : DINT Current value of the counter
3.8.3.3 Remarks
The counter is empty (CV = 0) when the application starts. The counter does not include a pulse detection for
CU and CD inputs. Use R_TRIG or F_TRIG function blocks for counting pulses of CU or CD input signals. In
FFLD language, CU is the input rung. The output rung is the QU output.
CTUr, CTDr, CTUDr function blocks operate exactly as other counters, except that all boolean inputs (CU,
CD, RESET, LOAD) have an implicit rising edge detection included.
3.8.3.4 ST Language
(* MyCounter is a declared instance of CTUD function block *)
MyCounter (CU, CD, RESET, LOAD, PV);
QU := MyCounter.QU;
QD := MyCounter.QD;
CV := MyCounter.CV;
3.8.3.7 IL Language:
(* MyCounter is a declared instance of CTUD function block *)
Op1: CAL MyCounter (CU, CD, RESET, LOAD, PV)
FFLD MyCounter.QU
ST QU
FFLD MyCounter.QD
ST QD
FFLD MyCounter.CV
ST CV
See also
CTU CTD
3.9 Timers
Below are the standard functions for managing timers:
TON On timer
TOF Off timer
TP Pulse timer
BLINK Blinker
BLINKA Asymmetric blinker
PLS Pulse signal generator
TMU Up-counting stop watch
TMUsec Up-counting stop watch (seconds)
TMD Down-counting stop watch
3.9.1 BLINK
Function Block - Blinker.
3.9.1.1 Inputs
RUN : BOOL Enabling command
CYCLE : TIME Blinking period
3.9.1.2 Outputs
Q : BOOL Output blinking signal
3.9.1.4 Remarks
The output signal is FALSE when the RUN input is FALSE. The CYCLE input is the complete period of the
blinking signal. In FFLD language, the input rung is the IN command. The output rung is the Q output signal.
3.9.1.5 ST Language
(* MyBlinker is a declared instance of BLINK function block *)
MyBlinker (RUN, CYCLE);
Q := MyBlinker.Q;
3.9.1.8 IL Language
3.9.2 BLINKA
Function Block - Asymmetric blinker.
3.9.2.1 Inputs
RUN : BOOL Enabling command
TM0 : TIME Duration of FALSE state on output
TM1 : TIME Duration of TRUE state on output
3.9.2.2 Outputs
Q : BOOL Output blinking signal
3.9.2.4 Remarks
The output signal is FALSE when the RUN input is FALSE. In FFLD language, the input rung is the IN com-
mand. The output rung is the Q output signal.
3.9.2.5 ST Language
(* MyBlinker is a declared instance of BLINKA function block *)
MyBlinker (RUN, TM0, TM1);
Q := MyBlinker.Q;
3.9.2.8 IL Language:
(* MyBlinker is a declared instance of BLINKA function block *)
Op1: CAL MyBlinker (RUN, TM0, TM1)
FFLD MyBlinker.Q
ST Q
See also
TON TOF TP
3.9.3 PLS
Function Block - Pulse signal generator
3.9.3.1 Inputs
RUN : BOOL Enabling command
CYCLE : TIME Signal period
3.9.3.2 Outputs
Q : BOOL Output pulse signal
3.9.3.4 Remarks
On every period, the output is set to TRUE during one cycle only. In FFLD language, the input rung is the IN
command. The output rung is the Q output signal.
3.9.3.5 ST Language
(* MyPLS is a declared instance of PLS function block *)
MyPLS (RUN, CYCLE);
Q := MyPLS.Q;
3.9.3.8 IL Language
(* MyPLS is a declared instance of PLS function block *)
Op1: CAL MyPLS (RUN, CYCLE)
FFLD MyPLS.Q
ST Q
See also
TON TOF TP
3.9.4 Sig_Gen
Function Block - Generator of pseudo-analogical Signal
3.9.4.1 Inputs
RUN : BOOL Enabling command
PERIOD : TIME Signal period
MAXIMUM : DINT Maximum growth during the signal period
3.9.4.2 Outputs
This FB generates signals of the four following types:
3.9.5 TMD
Function Block - Down-counting stop watch.
3.9.5.1 Inputs
IN : BOOL The time counts when this input is TRUE
RST : BOOL Timer is reset to PT when this input is TRUE
PT : TIME Programmed time
3.9.5.2 Outputs
Q : BOOL Timer elapsed output signal
ET : TIME Elapsed time
3.9.5.4 Remarks
The timer counts up when the IN input is TRUE. It stops when the programmed time is elapsed. The timer is
reset when the RST input is TRUE. It is not reset when IN is false.
3.9.5.5 ST Language
(* MyTimer is a declared instance of TMD function block *)
MyTimer (IN, RST, PT);
Q := MyTimer.Q;
ET := MyTimer.ET;
3.9.5.8 IL Language
(* MyTimer is a declared instance of TMD function block *)
Op1: CAL MyTimer (IN, RST, PT)
FFLD: MyTimer.Q
ST: Q
FFLD: MyTimer.ET
ST: ET
See also
TMU
3.9.6.1 Inputs
IN BOOL The time counts when this input is TRUE
RST BOOL Timer is reset to 0 when this input is TRUE
PT TIME Programmed time
PTsec UDINT Programmed time. (TMUsec - seconds)
3.9.6.2 Outputs
Q : BOOL Timer elapsed output signal
ET : TIME Elapsed time
3.9.6.4 Remarks
The timer counts up when the IN input is TRUE. It stops when the programmed time is elapsed. The timer is
reset when the RST input is TRUE. It is not reset when IN is false.
3.9.6.5 ST Language
(* MyTimer is a declared instance of TMU function block *)
3.9.6.8 IL Language:
(* MyTimer is a declared instance of TMU function block *)
See also
TMD
3.9.7.1 Inputs
IN : BOOL Timer command
PT : TIME Programmed time
RST : BOOL Reset (TOFR only)
3.9.7.2 Outputs
Q : BOOL Timer elapsed output signal
ET : TIME Elapsed time
3.9.7.4 Remarks
The timer starts on a falling pulse of IN input. It stops when the elapsed time is equal to the programmed time.
A rising pulse of IN input resets the timer to 0. The output signal is set to TRUE on when the IN input rises to
TRUE, reset to FALSE when programmed time is elapsed..
TOFR is same as TOF but has an extra input for resetting the timer
In FFLD language, the input rung is the IN command. The output rung is Q the output signal.
3.9.7.5 ST Language
(* MyTimer is a declared instance of TOF function block *)
MyTimer (IN, PT);
Q := MyTimer.Q;
ET := MyTimer.ET;
3.9.7.8 IL Language:
(* MyTimer is a declared instance of TOF function block *)
Op1: CAL MyTimer (IN, PT)
FFLD MyTimer.Q
ST Q
FFLD MyTimer.ET
ST ET
See also
TON TP BLINK
3.9.8 TON
Function Block - On timer.
3.9.8.1 Inputs
IN : BOOL Timer command
PT : TIME Programmed time
3.9.8.2 Outputs
Q : BOOL Timer elapsed output signal
ET : TIME Elapsed time
3.9.8.4 Remarks
The timer starts on a rising pulse of IN input. It stops when the elapsed time is equal to the programmed time.
A falling pulse of IN input resets the timer to 0. The output signal is set to TRUE when programmed time is
elapsed, and reset to FALSE when the input command falls.
In FFLD language, the input rung is the IN command. The output rung is Q the output signal.
3.9.8.5 ST Language
(* Inst_TON is a declared instance of TON function block *)
Inst_TON( FALSE, T#2s );
Q := Inst_TON.Q;
ET := Inst_TON.ET;
3.9.8.8 IL Language:
(* MyTimer is a declared instance of TON function block *)
Op1: CAL MyTimer (IN, PT)
FFLD MyTimer.Q
ST Q
FFLD MyTimer.ET
ST ET
See also
TOF TP BLINK
3.9.9 TP / TPR
Function Block - Pulse timer.
3.9.9.1 Inputs
IN : BOOL Timer command
PT : TIME Programmed time
RST : BOOL Reset (TPR only)
3.9.9.2 Outputs
Q : BOOL Timer elapsed output signal
ET : TIME Elapsed time
3.9.9.4 Remarks
The timer starts on a rising pulse of IN input. It stops when the elapsed time is equal to the programmed time.
A falling pulse of IN input resets the timer to 0, only if the programmed time is elapsed. All pulses of IN while
the timer is running are ignored. The output signal is set to TRUE while the timer is running.
TPR is same as TP but has an extra input for resetting the timer
In FFLD language, the input rung is the IN command. The output rung is Q the output signal.
3.9.9.5 ST Language
(* MyTimer is a declared instance of TP function block *)
MyTimer (IN, PT);
Q := MyTimer.Q;
ET := MyTimer.ET;
3.9.9.8 IL Language:
(* MyTimer is a declared instance of TP function block *)
Op1: CAL MyTimer (IN, PT)
FFLD MyTimer.Q
ST Q
FFLD MyTimer.ET
ST ET
See also
TON TOF BLINK
3.10.1.1 Inputs
3.10.1.2 Outputs
Q : REAL/LREAL Result: absolute value of IN
3.10.1.3 Remarks
In FFLD language, the operation is executed only if the input rung (EN) is TRUE. The output rung (ENO)
keeps the same value as the input rung. In IL, the input must be loaded in the current result before calling the
function.
3.10.1.4 ST Language
Q := ABS (IN);
3.10.1.7 IL Language
Op1: FFLD IN
ABS
ST Q (* Q is: ABS (IN) *)
See also
TRUNC LOG POW SQRT
3.10.2 EXPT
Function - Calculates a power.
3.10.2.1 Inputs
IN : REAL Real value
EXP : DINT Exponent
3.10.2.2 Outputs
Q : REAL Result: IN at the 'EXP' power
3.10.2.3 Remarks
In FFLD language, the operation is executed only if the input rung (EN) is TRUE. The output rung (ENO)
keeps the same value as the input rung.
In IL, the input must be loaded in the current result before calling the function. The exponent (second input of
the function) must be the operand of the function.
3.10.2.4 ST Language
Q := EXPT (IN, EXP);
3.10.2.7 IL Language:
Op1: FFLD IN
EXPT EXP
ST Q (* Q is: (IN ** EXP) *)
See also
ABS TRUNC LOG SQRT
3.10.3.1 Inputs
IN : REAL/LREAL Real value
3.10.3.2 Outputs
Q : REAL/LREAL Result: natural exponential of IN.
3.10.3.3 Remarks
In FFLD language, the operation is executed only if the input rung (EN) is TRUE. The output rung (ENO)
keeps the same value as the input rung.
In IL, the input must be loaded in the current result before calling the function.
3.10.3.4 ST Language
Q := EXP (IN);
3.10.3.7 IL Language:
Op1: FFLD IN
EXP
ST Q (* Q is: EXP (IN) *)
3.10.4 LOG
Function - Calculates the logarithm (base 10) of the input.
3.10.4.1 Inputs
IN : REAL Real value
3.10.4.2 Outputs
Q : REAL Result: logarithm (base 10) of IN
3.10.4.3 Remarks
In FFLD language, the operation is executed only if the input rung (EN) is TRUE. The output rung (ENO)
keeps the same value as the input rung.
In IL, the input must be loaded in the current result before calling the function.
3.10.4.4 ST Language
Q := LOG (IN);
3.10.4.7 IL Language:
Op1: FFLD IN
LOG
ST Q (* Q is: LOG (IN) *)
See also
ABS TRUNC POW SQRT
3.10.5 LN / LNL
Function - Calculates the natural logarithm of the input.
3.10.5.1 Inputs
IN : REAL/LREAL Real value
3.10.5.2 Outputs
Q : REAL/LREAL Result: natural logarithm of IN
3.10.5.3 Remarks
In FFLD language, the operation is executed only if the input rung (EN) is TRUE. The output rung (ENO)
keeps the same value as the input rung.
In IL, the input must be loaded in the current result before calling the function.
3.10.5.4 ST Language
Q := LN (IN);
3.10.5.7 IL Language:
Op1: FFLD IN
LN
ST Q (* Q is: LN (IN) *)
3.10.6.1 Inputs
IN : REAL/LREAL Real value
EXP : REAL/LREAL Exponent
3.10.6.2 Outputs
Q : REAL/LREAL Result: IN at the 'EXP' power
3.10.6.3 Remarks
Alternatively, in ST language, the "**" operator can be used. In FFLD language, the operation is executed only
if the input rung (EN) is TRUE. The output rung (ENO) keeps the same value as the input rung.
In IL, the input must be loaded in the current result before calling the function. The exponent (second input of
the function) must be the operand of the function.
3.10.6.4 ST Language
Q := POW (IN, EXP);
Q := IN ** EXP;
3.10.6.7 IL Language:
Op1: FFLD IN
POW EXP
ST Q (* Q is: (IN ** EXP) *)
See also
ABS TRUNC LOG SQRT
3.10.7 ROOT
Function - Calculates the Nth root of the input.
3.10.7.1 Inputs
IN : REAL Real value
N : DINT Root level
3.10.7.2 Outputs
3.10.7.3 Remarks
In FFLD language, the operation is executed only if the input rung (EN) is TRUE. The output rung (ENO)
keeps the same value as the input rung.
In IL, the input must be loaded in the current result before calling the function.
3.10.7.4 ST Language
3.10.7.7 IL Language:
Op1: FFLD IN
ROOT N
ST Q (* Q is: ROOT (IN) *)
3.10.8 ScaleLin
Function - Scaling - linear conversion.
3.10.8.1 Inputs
IN : REAL Real value
IMIN : REAL Minimum input value
IMAX : REAL Maximum input value
OMIN : REAL Minimum output value
OMAX : REAL Maximum output value
3.10.8.2 Outputs
OUT : REAL Result: OMIN + IN * (OMAX - OMIN) / (IMAX - IMIN)
Inputs OUT
IN < IMIN = IMIN
IN >IMAX = IMAX
other = OMIN + IN * (OMAX - OMIN) / (IMAX - IMIN)
3.10.8.4 Remarks
In FFLD language, the operation is executed only if the input rung (EN) is TRUE. The output rung (ENO)
keeps the same value as the input rung.
In IL, the input must be loaded in the current result before calling the function.
3.10.8.5 ST Language
OUT := ScaleLin (IN, IMIN, IMAX, OMIN, OMAX);
3.10.8.8 IL Language
Op1: FFLD IN
ScaleLin IMAX, IMIN, OMAX, OMIN
ST OUT
3.10.9.1 Inputs
IN : REAL/LREAL Real value
3.10.9.2 Outputs
Q : REAL/LREAL Result: square root of IN
3.10.9.3 Remarks
In FFLD language, the operation is executed only if the input rung (EN) is TRUE. The output rung (ENO)
keeps the same value as the input rung.
In IL, the input must be loaded in the current result before calling the function.
3.10.9.4 ST Language
Q := SQRT (IN);
3.10.9.7 IL Language:
Op1: FFLD IN
SQRT
ST Q (* Q is: SQRT (IN) *)
See also
ABS TRUNC LOG POW
3.10.10.1 Inputs
IN : REAL/LREAL Real value
3.10.10.2 Outputs
Q : REAL/LREAL Result: integer part of IN
3.10.10.3 Remarks
In FFLD language, the operation is executed only if the input rung (EN) is TRUE. The output rung (ENO)
keeps the same value as the input rung.
In IL, the input must be loaded in the current result before calling the function.
3.10.10.4 ST Language
Q := TRUNC (IN);
3.10.10.7 IL Language:
Op1: FFLD IN
TRUNC
ST Q (* Q is the integer part of IN *)
See also
ABS LOG POW SQRT
SIN sine
COS cosine
TAN tangent
ASIN arc-sine
ACOS arc-cosine
ATAN arc-tangent
ATAN2 arc-tangent of Y / X
See Also:
UseDegrees
3.11.1.1 Inputs
IN : REAL/LREAL Real value
3.11.1.2 Outputs
Q : REAL/LREAL Result: arc-cosine of IN
3.11.1.3 Remarks
In FFLD language, the operation is executed only if the input rung (EN) is TRUE. The output rung (ENO)
keeps the same value as the input rung.
In IL, the input must be loaded in the current result before calling the function.
3.11.1.4 ST Language
Q := ACOS (IN);
3.11.1.7 IL Language:
Op1: FFLD IN
ACOS
ST Q (* Q is: ACOS (IN) *)
See also
SIN COS TAN ASIN ATAN ATAN2
3.11.2.1 Inputs
IN : REAL/LREAL Real value
3.11.2.2 Outputs
Q : REAL/LREAL Result: arc-sine of IN
3.11.2.3 Remarks
In FFLD language, the operation is executed only if the input rung (EN) is TRUE. The output rung (ENO)
keeps the same value as the input rung.
In IL, the input must be loaded in the current result before calling the function.
3.11.2.4 ST Language
Q := ASIN (IN);
3.11.2.7 IL Language:
Op1: FFLD IN
ASIN
ST Q (* Q is: ASIN (IN) *)
See also
SIN COS TAN ACOS ATAN ATAN2
3.11.3.1 Inputs
IN : REAL/LREAL Real value
3.11.3.2 Outputs
Q : REAL/LREAL Result: arc-tangent of IN
3.11.3.3 Remarks
In FFLD language, the operation is executed only if the input rung (EN) is TRUE. The output rung (ENO)
keeps the same value as the input rung.
In IL, the input must be loaded in the current result before calling the function.
3.11.3.4 ST Language
Q := ATAN (IN);
3.11.3.7 IL Language:
Op1: FFLD IN
ATAN
ST Q (* Q is: ATAN (IN) *)
See also
SIN COS TAN ASIN ACOS ATAN2
3.11.4.1 Inputs
Y : REAL/LREAL Real value
X : REAL/LREAL Real value
3.11.4.2 Outputs
Q : REAL/LREAL Result: arc-tangent of Y / X
3.11.4.3 Remarks
In FFLD language, the operation is executed only if the input rung (EN) is TRUE. The output rung (ENO)
keeps the same value as the input rung.
In IL, the input must be loaded in the current result before calling the function.
3.11.4.4 ST Language
Q := ATAN2 (IN);
3.11.4.7 IL Language
Op1: FFLD Y
ATAN2 X
ST Q (* Q is: ATAN2 (Y / X) *)
See also
SIN COS TAN ASIN ACOS ATAN
3.11.5.1 Inputs
IN : REAL/LREAL Real value
3.11.5.2 Outputs
Q : REAL/LREAL Result: cosine of IN
3.11.5.3 Remarks
In FFLD language, the operation is executed only if the input rung (EN) is TRUE. The output rung (ENO)
keeps the same value as the input rung.
In IL, the input must be loaded in the current result before calling the function.
3.11.5.4 ST Language
Q := COS (IN);
3.11.5.7 IL Language:
Op1: FFLD IN
COS
ST Q (* Q is: COS (IN) *)
See also
SIN TAN ASIN ACOS ATAN ATAN2
3.11.6.1 Inputs
IN : REAL/LREAL Real value
3.11.6.2 Outputs
Q : REAL/LREAL Result: sine of IN
3.11.6.3 Remarks
In FFLD language, the operation is executed only if the input rung (EN) is TRUE. The output rung (ENO)
keeps the same value as the input rung.
In IL, the input must be loaded in the current result before calling the function.
3.11.6.4 ST Language
Q := SIN (IN);
3.11.6.7 IL Language:
Op1: FFLD IN
SIN
ST Q (* Q is: SIN (IN) *)
See also
COS TAN ASIN ACOS ATAN ATAN2
3.11.7.1 Inputs
IN : REAL/LREAL Real value
3.11.7.2 Outputs
Q : REAL/LREAL Result: tangent of IN
3.11.7.3 Remarks
In FFLD language, the operation is executed only if the input rung (EN) is TRUE. The output rung (ENO)
keeps the same value as the input rung.
In IL, the input must be loaded in the current result before calling the function.
3.11.7.4 ST Language
Q := TAN (IN);
3.11.7.7 IL Language:
Op1: FFLD IN
TAN
ST Q (* Q is: TAN (IN) *)
See also
SIN COS ASIN ACOS ATAN ATAN2
3.11.8 UseDegrees
Function - Sets the unit for angles in all trigonometric functions.
3.11.8.1 Inputs
IN : BOOL If TRUE, turn all trigonometric functions to use degrees
If FALSE, turn all trigonometric functions to use radians (default)
3.11.8.2 Outputs
Q : BOOL TRUE if functions use degrees before the call
3.11.8.3 Remarks
This function sets the working unit for the following functions:
SIN sine
COS cosine
TAN
ASIN
tangent
ACOS arc-sine
ATAN arc-cosine
ATAN2 arc-tangent
arc-tangent of Y / X
3.11.8.4 ST Language
Q := UseDegrees (IN);
3.11.8.7 IL Language
Op1: FFLD IN
UseDegrees
ST Q
3.12.1.1 Inputs
SRC : SINT Source array of SINT small integers (USINT for ArrayToStringU)
DST : STRING Destination STRING
COUNT : DINT Numbers of characters to be copied
3.12.1.2 Outputs
Q : DINT Number of characters copied
3.12.1.3 Remarks
In FFLD language, the operation is executed only if the input rung (EN) is TRUE. The output rung (ENO)
keeps the same value as the input rung.
This function copies the COUNT first elements of the SRC array to the characters of the DST string. The
function checks the maximum size of the destination string and adjust the COUNT number if necessary.
3.12.1.4 ST Language
Q := ArrayToString (SRC, DST, COUNT);
3.12.1.7 IL Language
Not available
See also
StringToArray
3.12.2 ASCII
Function - Get the ASCII code of a character within a string
3.12.2.1 Inputs
IN : STRING Input string
POS : DINT Position of the character within the string
(The first valid position is 1)
3.12.2.2 Outputs
CODE : DINT ASCII code of the selected character
or 0 if position is invalid
3.12.2.3 Remarks
In FFLD language, the input rung (EN) enables the operation, and the output rung keeps the same value as
the input rung. In IL language, the first parameter (IN) must be loaded in the current result before calling the
function. The other input is the operand of the function.
3.12.2.4 ST Language
CODE := ASCII (IN, POS);
3.12.2.7 IL Language:
Op1: FFLD IN
AND_MASK MSK
ST CODE
See also
CHAR
3.12.3 ATOH
Function - Converts string to integer using hexadecimal basis
3.12.3.1 Inputs
IN : STRING String representing an integer in hexadecimal format
3.12.3.2 Outputs
Q : DINT Integer represented by the string
3.12.3.4 Remarks
The function is case insensitive. The result is 0 for an empty string. The conversion stops before the first
invalid character. In FFLD language, the operation is executed only if the input rung (EN) is TRUE. The output
rung (ENO) keeps the same value as the input rung.
In IL, the input must be loaded in the current result before calling the function.
3.12.3.5 ST Language
Q := ATOH (IN);
3.12.3.8 IL Language:
Op1: FFLD IN
ATOH
ST Q
See also
HTOA
3.12.4 CHAR
Function - Builds a single character string
3.12.4.1 Inputs
CODE : DINT ASCII code of the wished character
3.12.4.2 Outputs
Q : STRING STRING containing only the specified character
3.12.4.3 Remarks
In FFLD language, the input rung (EN) enables the operation, and the output rung keeps the same value as
the input rung. In IL language, the input parameter (CODE) must be loaded in the current result before calling
the function.
3.12.4.4 ST Language
Q := CHAR (CODE);
3.12.4.7 IL Language:
Op1: FFLD CODE
CHAR
ST Q
See also
ASCII
3.12.5 CONCAT
Function - Concatenate strings.
3.12.5.1 Inputs
IN_1 : STRING Any string variable or constant expression
...
IN_N : STRING Any string variable or constant expression
3.12.5.2 Outputs
Q : STRING Concatenation of all inputs
3.12.5.3 Remarks
In FBD or FFLD language, the block can have up to 16 inputs. In IL or ST, the function accepts a variable num-
ber of inputs (at least 2).
Note that you also can use the "+" operator to concatenate strings.
3.12.5.4 ST Language
Q := CONCAT ('AB', 'CD', 'E');
(* now Q is 'ABCDE' *)
3.12.5.7 IL Language
Op1: FFLD 'AB'
CONCAT 'CD', 'E'
ST Q (* Q is now 'ABCDE' *)
3.12.6 CRC16
Function - calculates a CRC16 on the characters of a string
3.12.6.1 Inputs
IN : STRING character string
3.12.6.2 Outputs
Q : INT CRC16 calculated on all the characters of the string.
3.12.6.3 Remarks
In FFLD language, the input rung (EN) enables the operation, and the output rung keeps the same value as
the input rung. In IL language, the input parameter (IN) must be loaded in the current result before calling the
function.
The function calculates a Modbus CRC16, initialized at 16#FFFF value.
3.12.6.4 ST Language
Q := CRC16 (IN);
3.12.6.7 IL Language:
Op1: FFLD IN
CRC16
ST Q
3.12.7 DELETE
Function - Delete characters in a string.
3.12.7.1 Inputs
IN : STRING Character string
NBC : DINT Number of characters to be deleted
POS : DINT Position of the first deleted character (first character position is 1)
3.12.7.2 Outputs
Q : STRING Modified string.
3.12.7.3 Remarks
The first valid character position is 1. In FFLD language, the operation is executed only if the input rung (EN)
is TRUE. The output rung (ENO) keeps the same value as the input rung.
In IL, the first input (the string) must be loaded in the current result before calling the function. Other argu-
ments are operands of the function, separated by comas.
3.12.7.4 ST Language
Q := DELETE (IN, NBC, POS);
3.12.7.7 IL Language:
Op1: FFLD IN
DELETE NBC, POS
ST Q
See also
+ MLEN INSERT FIND REPLACE LEFT RIGHT MID
3.12.8 FIND
Function - Find position of characters in a string.
3.12.8.1 Inputs
IN : STRING Character string
STR : STRING String containing searched characters
3.12.8.2 Outputs
POS : DINT Position of the first character of STR in IN, or 0 if not found
3.12.8.3 Remarks
The first valid character position is 1. A return value of 0 means that the STR string has not been found.
Search is case sensitive. In FFLD language, the operation is executed only if the input rung (EN) is TRUE.
The output rung (ENO) keeps the same value as the input rung.
In IL, the first input (the string) must be loaded in the current result before calling the function. The second
argument is the operand of the function.
3.12.8.4 ST Language
POS := FIND (IN, STR);
3.12.8.7 IL Language:
Op1: FFLD IN
FIND STR
ST POS
See also
+ MLEN DELETE INSERT REPLACE LEFT RIGHT MID
3.12.9 HTOA
Function - Converts integer to string using hexadecimal basis
3.12.9.1 Inputs
IN : DINT Integer value
3.12.9.2 Outputs
Q : STRING String representing the integer in hexadecimal format
3.12.9.4 Remarks
In FFLD language, the operation is executed only if the input rung (EN) is TRUE. The output rung (ENO)
keeps the same value as the input rung.
In IL, the input must be loaded in the current result before calling the function.
3.12.9.5 ST Language
Q := HTOA (IN);
3.12.9.8 IL Language:
Op1: FFLD IN
HTOA
ST Q
See also
ATOH
3.12.10 INSERT
Function - Insert characters in a string.
3.12.10.1 Inputs
IN : STRING Character string
STR : STRING String containing characters to be inserted
POS : DINT Position of the first inserted character (first character position is 1)
3.12.10.2 Outputs
Q : STRING Modified string.
3.12.10.3 Remarks
The first valid character position is 1. In FFLD language, the operation is executed only if the input rung (EN)
is TRUE. The output rung (ENO) keeps the same value as the input rung.
In IL, the first input (the string) must be loaded in the current result before calling the function. Other argu-
ments are operands of the function, separated by comas.
3.12.10.4 ST Language
Q := INSERT (IN, STR, POS);
3.12.10.7 IL Language:
Op1: FFLD IN
INSERT STR, POS
ST Q
See also
+ MLEN DELETE FIND REPLACE LEFT RIGHT MID
3.12.11 LEFT
Function - Extract characters of a string on the left.
3.12.11.1 Inputs
IN : STRING Character string
NBC : DINT Number of characters to extract
3.12.11.2 Outputs
Q : STRING String containing the first NBC characters of IN.
3.12.11.3 Remarks
In FFLD language, the operation is executed only if the input rung (EN) is TRUE. The output rung (ENO)
keeps the same value as the input rung.
In IL, the first input (the string) must be loaded in the current result before calling the function. The second
argument is the operand of the function.
3.12.11.4 ST Language
Q := LEFT (IN, NBC);
3.12.11.7 IL Language:
Op1: FFLD IN
LEFT NBC
ST Q
See also
+ MLEN DELETE INSERT FIND REPLACE RIGHT MID
3.12.12 LoadString
Function - Load a string from the active string table.
3.12.12.1 Inputs
ID: DINT ID of the string as declared in the string table
3.12.12.2 Outputs
Q : STRING Loaded string or empty string in case of error
3.12.12.3 Remarks
This function loads a string from the active string table and stores it into a STRING variable. The StringTable()
function is used for selecting the active string table.
The "ID" input (the string item identifier) is an identifier such as declared within the string table resource. You
don't need to "define" again this identifier. The system does it for you.
3.12.12.4 ST Language
Q := LoadString (ID);
3.12.12.7 IL Language:
Op1: FFLD ID
LoadString
ST Q
See also
StringTable String tables
3.12.13 MID
Function - Extract characters of a string at any position.
3.12.13.1 Inputs
IN : STRING Character string
NBC : DINT Number of characters to extract
POS : DINT Position of the first character to extract (first character of IN is at position 1)
3.12.13.2 Outputs
Q : STRING String containing the first NBC characters of IN.
3.12.13.3 Remarks
The first valid position is 1. In FFLD language, the operation is executed only if the input rung (EN) is TRUE.
The output rung (ENO) keeps the same value as the input rung.
In IL, the first input (the string) must be loaded in the current result before calling the function. Other argu-
ments are operands of the function, separated by comas.
3.12.13.4 ST Language
Q := MID (IN, NBC, POS);
3.12.13.7 IL Language:
Op1: FFLD IN
MID NBC, POS
ST Q
See also
+ MLEN DELETE INSERT FIND REPLACE LEFT RIGHT
3.12.14 MLEN
Function - Get the number of characters in a string.
3.12.14.1 Inputs
IN : STRING Character string
3.12.14.2 Outputs
NBC : DINT Number of characters currently in the string. 0 if string is empty.
3.12.14.3 Remarks
In FFLD language, the operation is executed only if the input rung (EN) is TRUE. The output rung (ENO)
keeps the same value as the input rung.
In IL, the input must be loaded in the current result before calling the function.
3.12.14.4 ST Language
NBC := MLEN (IN);
3.12.14.7 IL Language:
Op1: FFLD IN
MLEN
ST NBC
See also
+ DELETE INSERT FIND REPLACE LEFT RIGHT MID
3.12.15 REPLACE
Function - Replace characters in a string.
3.12.15.1 Inputs
IN : STRING Character string
STR : STRING String containing the characters to be inserted
in place of NDEL removed characters
NDEL : DINT Number of characters to be deleted before insertion of STR
POS : DINT Position where characters are replaced (first character position is 1)
3.12.15.2 Outputs
Q : STRING Modified string.
3.12.15.3 Remarks
The first valid character position is 1. In FFLD language, the operation is executed only if the input rung (EN)
is TRUE. The output rung (ENO) keeps the same value as the input rung.
In IL, the first input (the string) must be loaded in the current result before calling the function. Other argu-
ments are operands of the function, separated by comas.
3.12.15.4 ST Language
Q := REPLACE (IN, STR, NDEL, POS);
3.12.15.7 IL Language:
Op1: FFLD IN
REPLACE STR, NDEL, POS
ST Q
See also
+ MLEN DELETE INSERT FIND LEFT RIGHT MID
3.12.16 RIGHT
Function - Extract characters of a string on the right.
3.12.16.1 Inputs
IN : STRING Character string
NBC : DINT Number of characters to extract
3.12.16.2 Outputs
Q : STRING String containing the last NBC characters of IN.
3.12.16.3 Remarks
In FFLD language, the operation is executed only if the input rung (EN) is TRUE. The output rung (ENO)
keeps the same value as the input rung.
In IL, the first input (the string) must be loaded in the current result before calling the function. The second
argument is the operand of the function.
3.12.16.4 ST Language
3.12.16.7 IL Language:
Op1: FFLD IN
RIGHT NBC
ST Q
See also
+ MLEN DELETE INSERT FIND REPLACE LEFT MID
3.12.17 StringTable
Function - Selects the active string table.
3.12.17.1 Inputs
TABLE : STRING Name of the Sting Table resource - must be a constant
COL : STRING Name of the column in the table - must be a constant
3.12.17.2 Outputs
OK : BOOL TRUE if OK
3.12.17.3 Remarks
This function selects a column of a valid String Table resource to become the active string table. The
LoadString() function always refers to the active string table.
Arguments must be constant string expressions and must fit to a declared string table and a valid column
name within this table.
If you have only one string table with only one column defined in your project, you do not need to call this func-
tion as it will be the default string table anyway.
3.12.17.4 ST Language
OK := StringTable ('MyTable', 'FirstColumn");
3.12.17.7 IL Language:
Op1: FFLD 'MyTable'
StringTable 'First Column'
ST OK
See also
LoadString String tables
3.12.18.1 Inputs
SRC : STRING Source STRING
DST : SINT Destination array of SINT small integers (USINT for StringToArrayU)
3.12.18.2 Outputs
Q : DINT Number of characters copied
3.12.18.3 Remarks
In FFLD language, the operation is executed only if the input rung (EN) is TRUE. The output rung (ENO)
keeps the same value as the input rung.
In IL, the input must be loaded in the current result before calling the function.
This function copies the characters of the SRC string to the first characters of the DST array. The function
checks the maximum size destination arrays and reduces the number of copied characters if necessary.
3.12.18.4 ST Language
Q := StringToArray (SRC, DST);
3.12.18.7 IL Language:
Op1: FFLD SRC
StringToArray DST
ST Q
See also
ArrayToString
Function Description
udpCreate (➜ p. 172) Create a UDP socket
udpAddrMake (➜ p. 170) Build an address buffer for UDP functions
udpSendTo (➜ p. 177) Send a telegram
udpRcvFrom (➜ p. 174) Receive a telegram
udpClose (➜ p. 171) Close a socket
udpIsValid (➜ p. 173) Test if a socket is valid
udpSendToArray (➜ p. 178) Send a byte array through UDP
udpRcvFromArray (➜ p. 175) Receive a byte array through UDP
3.13.1 udpAddrMake
3.13.1.1 Description
This function builds an address buffer for UDP functions. This function is required for building an internal
"UDP" address to be passed to the "udpSendTo" (➜ p. 177) function in case of UDP client processing.
3.13.1.2 Arguments
Input
Output
OK Description Returns true when the function successfully executes. See
Function - General rules.
Data type BOOL
Unit n/a
3.13.1.3 Examples
Structured Text
Ladder Diagram
3.13.2 udpClose
3.13.2.1 Description
This function closes a socket.
3.13.2.2 Arguments
Input
En Description Execute the function
Data type BOOL
Range [0,1]
Unit n/a
Default —
sock Description ID of the socket
Data type DINT
Range [0,+65535]
Unit n/a
Default —
Output
OK Description Returns true when the function successfully executes. See
Function - General rules.
Data type BOOL
Unit n/a
3.13.2.3 Examples
Structured Text
Ladder Diagram
3.13.3 udpCreate
3.13.3.1 Description
This function creates a UDP socket.
3.13.3.2 Arguments
Input
En Description Execute the function
Output
OK Description Returns true when the function successfully executes. See
Function - General rules.
Data type BOOL
Unit n/a
sock Description ID of the new socket
Data type DINT
Unit n/a
3.13.3.3 Examples
Structured Text
Ladder Diagram
3.13.4 udpIsValid
3.13.4.1 Description
This function states whether a socket is valid or not.
3.13.4.2 Arguments
Input
En Description Execute the function
Data type BOOL
Range [0,1]
Unit n/a
Default —
Output
OK Description Returns true when the function successfully executes. See
Function - General rules.
Data type BOOL
Unit n/a
3.13.4.3 Examples
Structured Text
Ladder Diagram
3.13.5 udpRcvFrom
3.13.5.1 Description
This function receives a UDP telegram. If the characters are received, the function fills the ADD argument
with the internal “UDP” of the sender. This buffer can then be passed to the "udpSendTo" (➜ p. 177) function
to send the answer.
3.13.5.2 Arguments
Input
En Description Execute the function
Data type BOOL
Range [0,1]
Unit n/a
Default —
sock Description ID of the socket
Data type DINT
Range [0,+65535]
Unit n/a
Default —
Output
OK Description Returns true when the function successfully executes. See
Function - General rules.
Data type BOOL
Unit n/a
Q Description Actual number of received characters
Data type DINT
Unit n/a
3.13.5.3 Examples
Structured Text
Ladder Diagram
3.13.6 udpRcvFromArray
3.13.6.1 Description
This function receives an array of bytes.
3.13.6.2 Arguments
Input
En Description Execute the function
Data type BOOL
Range [0,1]
Unit n/a
Default —
sock Description Socket number, return value from "udpCreate" (➜ p. 172)
Data type DINT
Range [0,+65535]
Unit n/a
Default —
nb Description Number of bytes to be transferred
Data type DINT
Range [0,+65535]
Unit n/a
Default —
add[] Description Array which contains information about the server
Data type USINT
Range [0,32]
Unit n/a
Default —
data[] Description Array of bytes to be transferred
Data type USINT
Range [0,+65535]
Unit n/a
Default —
Output
OK Description Returns true when the function successfully executes. See
Function - General rules.
Data type BOOL
Unit n/a
Q Description Number of bytes received
Data type DINT
Unit n/a
3.13.6.3 Examples
Structured Text
BytesReceived := udpRcvFromArray(Socket_Number,nb,add,Frame);
Ladder Diagram
3.13.7 udpSendTo
3.13.7.1 Description
This function sends UDP data to a server.
3.13.7.2 Arguments
Input
En Description Execute the function
Data type BOOL
Range [0,1]
Unit n/a
Default —
sock Description ID of the client socket
Data type DINT
Range [0,+65535]
Unit n/a
Default —
nb Description Number of bytes of data to send
Data type DINT
Range [0,65535]
Unit n/a
Default —
add[] Description Buffer containing the UDP address
Data type USINT
Range [0,32]
Unit n/a
Default —
data Description The characters to send
Output
OK Description Returns true when the function successfully executes. See
Function - General rules.
Data type BOOL
Unit n/a
3.13.7.3 Examples
Structured Text
bUdpSendTo := udpSendTo(Socket_Number,5,add,'1000');
Ladder Diagram
3.13.8 udpSendToArray
3.13.8.1 Description
This function sends an array of bytes.
3.13.8.2 Arguments
Input
En Description Execute the function
Data type BOOL
Range [0,1]
Unit n/a
Default —
sock Description Socket number, return value from "udpCreate" (➜ p. 172)
Data type DINT
Range [0,+65535]
Unit n/a
Default —
nb Description Number of bytes to be transferred
Data type DINT
Range [0,+65535]
Unit n/a
Default —
add[] Description Array which contains information about the server
Data type USINT
Range [0,32]
Unit n/a
Default —
data[] Description Array of bytes to be transferred
Data type USINT
Range [0,+65535]
Unit n/a
Default —
Output
OK Description Returns true when the function successfully executes. See
Function - General rules.
Data type BOOL
Unit n/a
3.13.8.3 Examples
Structured Text
Success:= udpSendToArray(Socket_Number,nb,add,Frame);
Ladder Diagram
4 Advanced Operations
Below are the standard blocks that perform advanced operations.
Analog signal processing:
Block Description
Average / AverageL Calculate the average of signal samples
Integral Calculate the integral of a signal
Derivate Derive a signal
PID PID loop
Ramp Ramp signal
Rand Give a Random value modulo the input value
Lim_Alrm Low / High level detection
Hyster Hysterisis calculation
SigPlay Play an analog signal from a resource
SigScale Get a point from a signal resource
CurveLin Linear interpolation on a curve
SurfLin Linear interpolation on a surface
Alarm management:
Block Description
Lim_Alrm Low / High level detection
Alarm_M Alarm with manual reset
Alarming Alarm with automatic reset
Data collections and serialization:
Block Description
StackInt Stack of integers
FIFO "First in / first out" list
LIFO "Last in / first out" stack
Data Logging:
Block Description
LogFileCSV Log values of variables to a CSV file
Special operations:
Block Description
GetSysInfo Get system information
Printf Trace messages
CycleStop Sets the application in cycle stepping mode
FatalStop Breaks the cycle and stop with fatal error
EnableEvents Enable / disable produced events for binding
ApplyRecipeColumn Apply the values of a column from a recipe file
VLID Get the ID of an embedded list of variables
SigID Get the ID of a signal resource
Communication:
AS-interface
Others:
Real Time Clock
4.1 ALARM_A
Function Block - Alarm with automatic reset
4.1.1 Inputs
IN : BOOL Process signal
ACK : BOOL Acknowledge command
4.1.2 Outputs
Q : BOOL TRUE if alarm is active
QACK : BOOL TRUE if alarm is acknowledged
4.1.3 Sequence
4.1.4 Remarks
Combine this block with the LIM_ALRM block for managing analog alarms.
4.1.5 ST Language
(* MyALARM is declared as an instance of ALARM_A function block *)
MyALARM (IN, ACK);
Q := MyALARM.Q;
QACK := MyALARM.QACK;
4.1.8 IL Language
(* MyALARM is declared as an instance of ALARM_A function block *)
Op1: CAL MyALARM (IN, ACK)
FFLD MyALARM.Q
ST Q
FFLD MyALARM.QACK
ST QACK
See also
ALARM_M LIM_ALRM
4.2 ALARM_M
Function Block - Alarm with manual reset
4.2.1 Inputs
IN : BOOL Process signal
ACK : BOOL Acknowledge command
RST : BOOL Reset command
4.2.2 Outputs
Q : BOOL TRUE if alarm is active
QACK : BOOL TRUE if alarm is acknowledged
4.2.3 Sequence
4.2.4 Remarks
Combine this block with the LIM_ALRM block for managing analog alarms.
4.2.5 ST Language
4.2.8 IL Language
(* MyALARM is declared as an instance of ALARM_M function block *)
Op1: CAL MyALARM (IN, ACK, RST)
FFLD MyALARM.Q
ST Q
FFLD MyALARM.QACK
ST QACK
See also
ALARM_A LIM_ALRM
4.3 ApplyRecipeColumn
Function - Apply the values of a column from a recipe file
4.3.1 Inputs
FILE : STRING Path name of the recipe file (.RCP or .CSV) - must be a constant value!
COL : DINT Index of the column in the recipe (0 based)
tPerio
bFast
Blink1
test_var
bOut
@EXPANDED=Blink1
For your CSV file to be valid, ensure the data are separated with semicolons (and not commas).
Column 3 corresponds to column E in the Excel sheet because this parameter is 0 based
4.3.2 Outputs
OK : BOOL TRUE if OK - FALSE if parameters are invalid
4.3.3 Remarks
The 'FILE' input is a constant string expression specifying the path name of a valid .RCP or .CSV file. If no
path is specified, the file is assumed to be located in the project folder. RCP files are created using an
external recipe editor. CSV files can be created using EXCEL or NOTEPAD.
In CSV files, the first line must contain column headers, and is ignored during compiling. There is one variable
per line. The first column contains the symbol of the variable. Other columns are values.
If a cell is empty, it is assumed to be the same value as the previous (left side) cell. If it is the first cell of a
row, it is assumed to be null (0 or FALSE or empty string).
In FFLD language, the operation is executed only if the input rung (EN) is TRUE. The output rung is the result
of the function.
Recipe files are read at compiling time and are embedded into the downloaded application code. This
implies that a modification performed in the recipe file after downloading is not taken into account by the
application.
4.3.4 ST Language
OK := ApplyRecipeColumn ('MyFile.rcp', COL);
4.3.7 IL Language
Op1: FFLD 'MyFile.rcp'
ApplyRecipeColumn COL
ST OK
AS-i networking may be not available on some targets. Please refer to OEM instructions for further details
about available features.
Interface
Params := ASiReadPP (Master, Slave);
bOK := ASiWritePP (Master, Slave, Params);
bOK := ASiSendParam (Master, Slave, Params);
Params := ASiReadPI (Master, Slave);
bOK := ASiStorePI (Master);
Arguments
Master : DINT Index of the AS-i master (1..N) such as shown in configuration
Slave : DINT Address of the AS-i slave (1..32 / 33..63)
Params : DINT Value of AS-i parameters
bOK : BOOL TRUE if successful
4.5.1 Inputs
RUN : BOOL Enabling command
XIN : REAL Input signal
N : DINT Number of samples stored for average calculation - Cannot exceed 128
4.5.2 Outputs
XOUT : REAL Average of the stored samples (*)
(*) AVERAGEL has LREAL arguments.
4.5.3 Remarks
The average is calculated according to the number of stored samples, which can be less than N when the
block is enabled. By default the number of samples is 128.
The "N" input (or the number of samples) is taken into account only when the RUN input is FALSE.
The "RUN" needs to be reset after a change in the number of samples. You should cycle the RUN input
when you first call this function, this will clear the default.
In FFLD language, the input rung is the RUN command. The output rung keeps the state of the input rung.
4.5.4 ST Language
(* MyAve is a declared instance of AVERAGE function block *)
MyAve (RUN, XIN, N);
XOUT := MyAve.XOUT;
4.5.7 IL Language:
(* MyAve is a declared instance of AVERAGE function block *)
Op1: CAL MyAve (RUN, XIN, N)
FFLD MyAve.XOUT
ST XOUT
See also
INTEGRAL DERIVATE LIM_ALRM HYSTER STACKINT
4.6 CurveLin
Function block- Linear interpolation on a curve.
4.6.1 Inputs
X : REAL X coordinate of the point to be interpolated.
XAxis : REAL[] X coordinates of the known points of the X axis.
YVal : REAL[] Y coordinate of the points defined on the X axis.
4.6.2 Outputs
Y : REAL Interpolated Y value corresponding to the X input
OK : BOOL TRUE if successful.
ERR : DINT Error code if failed - 0 if OK.
4.6.3 Remarks
This function performs linear interpolation in between a list of points defined in the XAxis single dimension
array. The output Y value is an interpolation of the Y values of the two rounding points defined in the X axis. Y
values of defined points are passed in the YVal single dimension array.
Values in XAxis must be sorted from the smallest to the biggest. There must be at least two points defined in
the X axis. YVal and XAxis input arrays must have the same dimension.
In case the X input is less than the smallest defined X point, the Y output takes the first value defined in YVal
and an error is reported. In case the X input is greater than the biggest defined X point, the Y output takes the
last value defined in YVal and an error is reported.
The ERR output gives the cause of the error if the function fails:
4.7 DERIVATE
Function Block - Derivates a signal.
4.7.1 Inputs
RUN : BOOL Run command: TRUE=derivate / FALSE=hold
XIN : REAL Input signal
CYCLE : TIME Sampling period (must not be less than the target cycle timing)
4.7.2 Outputs
XOUT : REAL Output signal
4.7.3 Remarks
In FFLD language, the input rung is the RUN command. The output rung keeps the state of the input rung.
4.7.4 ST Language
(* MyDerv is a declared instance of DERIVATE function block *)
MyDerv (RUN, XIN, CYCLE);
XOUT := MyDerv.XOUT;
4.7.7 IL Language:
(* MyDerv is a declared instance of DERIVATE function block *)
Op1: CAL MyDerv (RUN, XIN, CYCLE)
FFLD MyDerv.XOUT
ST XOUT
See also
AVERAGE INTEGRAL LIM_ALRM HYSTERSTACKINT
4.8 EnableEvents
Function - Enable or disable the production of events for binding(runtime to runtime variable exchange)
4.8.1 Inputs
EN : BOOL TRUE to enable events / FALSE to disable events
4.8.2 Outputs
ENO : BOOL Echo of EN input
4.8.3 Remarks
Production is enabled when the application starts. The first production will be operated after the first cycle. So
to disable events since the beginning, you must call EnableEvents (FALSE) in the very first cycle.
In FFLD language, the input rung (EN) enables the event production, and the output rung keeps the state of
the input rung. In IL language, the input must be loaded before the function call.
4.8.4 ST Language
ENO := EnableEvents (EN);
4.8.7 IL Language:
Op1: FFLD EN
EnableEvents
ST ENO
4.9 FIFO
Function block - Manages a "first in / first out" list
4.9.1 Inputs
PUSH BOOL Push a new value (on
rising edge)
POP BOOL Pop a new value (on
rising edge)
RST BOOL Reset the list
IN ANY Value to be pushed
@Tail ANY Value of the oldest
pushed value -
updated after call!
Buf[] ANY Array for storing val-
ues
4.9.2 Outputs
EMPTY BOOL TRUE if the list is empty
OFLO BOOL TRUE if overflow on a PUSH command
Count DINT Number of values in the list
pRead DINT Index in the buffer of the oldest pushed value
pWrite DINT Index in the buffer of the next push position
4.9.3 Remarks
IN, @Tail and Buf[] must have the same data type and cannot be STRING.
The @Tail argument specifies a variable which is filled with the oldest push value after the block is called.
Values are stored in the "BUF" array. Data is arranged as a roll over buffer and is never shifted or reset. Only
read and write pointers and pushed values are updated. The maximum size of the list is the dimension of the
array.
The first time the block is called, it remembers on which array it should work. If you call later the same
instance with another BUF input, the call is considered as invalid and makes nothing. Outputs reports an
empty list in this case.
In FFLD language, input rung is the PUSH input. The output rung is the EMPTY output.
4.9.4 ST Language
4.9.7 IL Language
FFLD MyFIFO.EMPTY
ST EMPTY
FFLD MyFIFO.OFLO
ST OFLO
FFLD MyFIFO.COUNT
ST COUNT
FFLD MyFIFO.PREAD
ST PREAD
FFLD MyFIFO.PWRITE
ST PWRITE
See also
LIFO
Name Use
"F_AOPEN" (➜ p. 195) Create or open a file in append mode
"F_CLOSE" (➜ p. 195) Close an open file
"F_COPY" (➜ p. 195) Copy a file
"F_DELETE" (➜ p. 195) Remove a file
"F_EOF" (➜ p. 196) Test if the end of the file is reached in a file that is open for reading
"F_EXIST" (➜ p. 196) Test if a file exists
F_GETSIZE (➜ p. 196) Get the size of a file
"F_RENAME" (➜ p. 196) Rename a file
"F_ROPEN" (➜ p. 196) Open a file for reading
"F_WOPEN" (➜ p. 197) Create or reset a file and open it for writing
"FA_READ" (➜ p. 197) Read a DINT integer from a binary file
"FA_WRITE" (➜ p. 197) Write a DINT integer to a binary file
"FB_READ" (➜ p. 197) Read binary data from a file
"FB_WRITE" (➜ p. 198) Write binary data to a file
"FM_READ" (➜ p. 198) Read a string value from a text file
"FM_WRITE" (➜ p. 198) Write a string value to a text file
"SD_MOUNT" (➜ p. 199) Mount an SD card
"SD_UNMOUNT" (➜ p. 199) Unmount an SD card
"SD_ISREADY" (➜ p. 199) Check that the SD card is ready for read/write
Related function blocks:
LogFileCSV log values of variables to a CSV file
Each file is identified in the application by a unique handle manipulated as a DINT value. The file handles are
allocated by the target system. Handles are returned by the Open functions and used in all other calls for
identifying the file.
l These functions can have a serious impact on CPU load and the life expectancy of a flash drive. It is
highly recommended that these be used on an event basis, and not at every PLC cycle.
l Files are opened and closed directly by the Operating System of the target. Opening some files can
be dangerous for system safety and integrity. The number of open files may be is limited to
only ONE file by the target system.
l Opening a file can be unsuccessful (invalid path or file name, too many open files...) Your application
must process such error cases in a safe way.
l File management may be unavailable on some targets.
l Memory on the SD card is available in addition to the existing flash memory.
l Valid paths for storing files depend on the target implementation.
l Error messages are logged in the Controller log section of KAS Runtime where there is a failure in
any related function block.
l Using the KAS Simulator, all pathnames are ignored, and files are stored in a reserved directory.
Only the file name passed to the Open functions is taken into account.
l PAC and AKD PDMM binary files are not identical. AKD PDMM files are big endian, meaning the
data structures between the files are different.
AKD PDMM only allows for relative paths and there is no support for creating directories on the AKD PDMM.
Any path provided to these function blocks, file1 for example, will be appended with the default userdata
folder which is:
/mount/flash/userdata
Name Use
F_GETSIZE (➜ p. 196) Get the size of a file
"F_RENAME" (➜ p. 196) Rename a file
"F_ROPEN" (➜ p. 196) Open a file for reading
"F_WOPEN" (➜ p. 197) Create or reset a file and open it for writing
"FA_READ" (➜ p. 197) Read a DINT integer from a binary file
"FA_WRITE" (➜ p. 197) Write a DINT integer to a binary file
"FB_READ" (➜ p. 197) Read binary data from a file
"FB_WRITE" (➜ p. 198) Write binary data to a file
"FM_READ" (➜ p. 198) Read a string value from a text file
"FM_WRITE" (➜ p. 198) Write a string value to a text file
"SD_MOUNT" (➜ p. 199) Mount an SD card
"SD_UNMOUNT" (➜ p. 199) Unmount an SD card
"SD_ISREADY" (➜ p. 199) Check that the SD card is ready for read/write
4.10.3.1 F_AOPEN
Open a file in "append" mode
ID := F_AOPEN (PATH);
PATH : STRING Name of the file. Can include a path name according to target system conventions.
ID : DINT ID of the open file or NULL if the file can't be read
If the file does not exist, it is created. If the file already exists, it is opened at the end for appending.
4.10.3.2 F_CLOSE
Close an open file
OK := F_CLOSE (ID);
4.10.3.3 F_COPY
Copy source file contents to a destination file. Please note that large files will take a noticeable amount of
time to complete. For example, a 1000KB file takes approximately 0.6 seconds. The output status is set after
the file copy operation is complete.
OK := F_COPY (SRC, DST);
SRC : Name of the source file (must exist). Can include a pathname according to target system
STRING conventions.
DST : Name of the destination file. Can include a pathname according to target system con-
STRING ventions.
OK : BOOL TRUE is successful
4.10.3.4 F_DELETE
Remove a file
OK := F_DELETE (PATH);
PATH : Name of the file (must exist). Can include a pathname according to target system con-
STRING ventions.
OK : BOOL TRUE if successful
4.10.3.5 F_EOF
Test if the end of a file is encountered
OK := F_EOF (ID);
F_EOF must be used only for files open in read mode by the F_ROPEN function.
4.10.3.6 F_EXIST
Test if file exists
OK := F_EXIST (PATH);
PATH : STRING Name of the file, can include a path name according to target system conventions.
OK : BOOL TRUE if the file exists
4.10.3.7 F_GETSIZE
Get the size of a file. Note that this function block returns 0 when the file size is zero or if the file is not
present.
SIZE := F_GETSIZE (PATH);
PATH : STRING Name of the file, can include a path name according to target system conventions
SIZE : DINT Size of the file in bytes
4.10.3.8 F_RENAME
Rename a file
OK := F_RENAME (PATH, NEWNAME);
PATH : STRING Name of the file (must exist). Can include a pathname according to target system
conventions.
NEWNAME : New name for the file
STRING
OK : BOOL TRUE if successful
4.10.3.9 F_ROPEN
Open a file for reading
Example
Structured Text
ID := F_ROPEN( PATH ) ;
Ladder Diagram
The positive transition on each file operation FB prevents to open the file every time the program runs (each
cycle).
PATH Name of the file; the file must exist. Can include a path name according to target system
: STRING conventions.
ID : DINT ID of the open filer NULL if the file can't be read
4.10.3.10 F_WOPEN
Open a file for writing
ID := F_WOPEN (PATH);
PATH : STRING Name of the file. Can include a path name according to
target system conventions.
ID : DINT ID of the open file or NULL if the file can't be read
If the file does not exist, it is created. If the file already exists, its contents are cleared.
4.10.3.11 FA_READ
Read a DINT value from a file
Q := FA_READ (ID);
Integer values read by FA_READ must have been written by the FA_WRITE function. Integers are stored in
binary format in the file, using memory conventions of the target system.
4.10.3.12 FA_WRITE
Write a DINT value to a file
OK := FA_WRITE (ID, IN);
Integers are stored in binary format in the file, using memory conventions of the target system.
4.10.3.13 FB_READ
Read binary data from a file
OK := FB_READ (ID, V);
Variables are stored in binary format in the file, using memory conventions of the target system.
4.10.3.14 FB_WRITE
Write binary data to a file
OK := FB_WRITE (ID, V);
Variables are stored in binary format in the file, using memory conventions of the target system.
4.10.3.15 FM_READ
Read a string value from a file
Q := FM_READ (ID);
This function is intended to read a text line in the file. Reading stops when end of line character is
encountered. Reading stops when the maximum length declared for the return variable is reached.
4.10.3.16 FM_WRITE
Write a string value to a file
OK := FM_WRITE (ID, IN);
This function writes a text line in the file. End of line character is systematically written after the input string.
ID:=F_WOPEN('c:\ myfile.txt');
WOK:=FM_WRITE(ID,'123456$N');
//WOK:=FM_WRITE(ID,'$N');
WOK:=FM_WRITE(ID,'abcd$N');
WOK:=FM_WRITE(ID,'the end');
WOK:=F_Close(ID);
4.10.3.17 SD_MOUNT
Mount the SDCard on the PDMM. This will not perform any action, and always return TRUE with a PAC or
Simulator.
OK := SD_MOUNT();
4.10.3.18 SD_UNMOUNT
Un-mount the SDCard from the PDMM. This will not perform any action, and always return TRUE with a
PAC or Simulator.
OK := SD_UNMOUNT();
4.10.3.19 SD_ISREADY
Verify if the SDCard is mounted on the PDMM. This will verify if the SDCard folder is available inside the user-
data folder when using a PAC or Simulator.
OK := SD_ISREADY();
OK : BOOL TRUE if the SDCard is mounted (PDMM) or if the SDCard folder is ava-
lilable (PAC)
Following are several examples of how File Management functions may be used. The functions used include
"About the File Management Functions" (➜ p. 192), "About the File Management Functions" (➜ p. 192),
"About the File Management Functions" (➜ p. 192), and "About the File Management Functions" (➜ p. 192).
4.11 GETSYSINFO
Function - Returns system information.
4.11.1 Inputs
INFO : DINT Identifier of the requested information
4.11.2 Outputs
Q : DINT Value of the requested information or 0 if error
4.11.3 Remarks
The INFO parameter can be one of the following predefined values:
Value Definition
_SYSINFO_TRIGGER_MICROS programmed cycle time in micro-seconds
_SYSINFO_TRIGGER_MS programmed cycle time in milliseconds
Value Definition
_SYSINFO_CYCLETIME_MICROS duration of the previous cycle in micro-seconds
_SYSINFO_CYCLETIME_MS duration of the previous cycle in milliseconds
_SYSINFO_CYCLEMAX_MICROS maximum detected cycle time in micro-seconds
_SYSINFO_CYCLEMAX_MS maximum detected cycle time in milliseconds
_SYSINFO_CYCLESTAMP_MS time stamp of the current cycle in milliseconds (OEM dependent)
_SYSINFO_CYCLEOVERFLOWS number of detected cycle time overflows
_SYSINFO_CYCLECOUNT counter of cycles
_SYSINFO_APPSTAMP compiling date stamp of the application
In FFLD language, the operation is executed only if the input rung (EN) is TRUE. The output rung (ENO)
keeps the same value as the input rung.
In IL, the input must be loaded in the current result before calling the function.
4.11.4 ST Language
Q := GETSYSINFO (INFO);
4.11.7 IL Language:
Op1: FFLD INFO
GETSYSINFO
ST Q
4.12 HYSTER
Function Block - Hysteresis detection.
4.12.1 Inputs
XIN1 : REAL First input signal
XIN2 : REAL Second input signal
EPS : REAL Hysterisis
4.12.2 Outputs
Q : BOOL Detected hysteresis: TRUE if XIN1 becomes greater than XIN2+EPS and is not yet below
XIN2-EPS
4.12.3 Remarks
The hysteresis is detected on the difference of XIN1 and XIN2 signals. In FFLD language, the input rung (EN)
is used for enabling the block. The output rung is the Q output.
4.12.4 ST Language
(* MyHyst is a declared instance of HYSTER function block *)
MyHyst (XIN1, XIN2, EPS);
Q := MyHyst.Q;
4.12.7 IL Language:
(* MyHyst is a declared instance of HYSTER function block *)
Op1: CAL MyHyst (XIN1, XIN2, EPS)
FFLD MyHyst.Q
ST Q
See also
AVERAGE INTEGRAL DERIVATE LIM_ALRM STACKINT
4.13 INTEGRAL
Function Block - Calculates the integral of a signal.
4.13.1 Inputs
RUN : BOOL Run command: TRUE=integrate / FALSE=hold
R1 : BOOL Overriding reset
XIN : REAL Input signal
X0 : REAL Initial value
CYCLE : TIME Sampling period (must not be less than the target cycle timing)
4.13.2 Outputs
Q : DINT Running mode report: NOT (R1)
XOUT : REAL Output signal
4.13.3 Remarks
In FFLD language, the input rung is the RUN command. The output rung is the Q report status.
4.13.4 ST Language
(* MyIntg is a declared instance of INTEGRAL function block *)
MyIntg (RUN, R1, XIN, X0, CYCLE);
Q := MyIntg.Q;
XOUT := MyIntg.XOUT;
4.13.7 IL Language:
(* MyIntg is a declared instance of INTEGRAL function block *)
Op1: CAL MyIntg (RUN, R1, XIN, X0, CYCLE)
FFLD MyIntg.Q
ST Q
FFLD MyIntg.XOUT
ST XOUT
See also
AVERAGE DERIVATE LIM_ALRM HYSTER STACKINT
4.14 LIFO
Function block - Manages a "last in / first out" stack
4.14.1 Inputs
PUSH BOOL Push a new value (on rising edge)
POP BOOL Pop a new value (on rising edge)
RST BOOL Reset the list
NEXTIN ANY Value to be pushed
NEXTOUT ANY Value at the top of the stack - updated after call!
4.14.2 Outputs
EMPTY BOOL TRUE if the stack is empty
OFLO BOOL TRUE if overflow on a PUSH command
COUNT DINT Number of values in the stack
PREAD DINT Index in the buffer of the top of the stack
PWRITE DINT Index in the buffer of the next push position
4.14.3 Remarks
NEXTIN, NEXTOUT and BUFFER must have the same data type and cannot be STRING. The NEXTOUT
argument specifies a variable which is filled with the value at the top of the stack after the block is called.
Values are stored in the "BUFFER" array. Data is never shifted or reset. Only read and write pointers and
pushed values are updated. The maximum size of the stack is the dimension of the array.
The first time the block is called, it remembers on which array it should work. If you call later the same
instance with another BUFFER input, the call is considered as invalid and makes nothing. Outputs reports an
empty stack in this case.
In FFLD language, input rung is the PUSH input. The output rung is the EMPTY output.
4.14.4 ST Language
4.14.7 IL Language
See also
FIFO
4.15 LIM_ALRM
Function Block - Detects High and Low limits of a signal with hysteresis.
4.15.1 Inputs
H : REAL Value of the High limit
X : REAL Input signal
L : REAL Value of the Low limit
EPS : REAL Value of the hysteresis
4.15.2 Outputs
QH : BOOL TRUE if the signal exceeds the High limit
Q : BOOL TRUE if the signal exceeds one of the limits (equals to QH OR QL)
QL : BOOL TRUE if the signal exceeds the Low limit
4.15.3 Remarks
In FFLD language, the input rung (EN) is used for enabling the block. The output rung is the QH output.
4.15.4 ST Language
(* MyAlarm is a declared instance of LIM_ALRM function block *)
MyAlarm (H, X, L, EPS);
QH := MyAlarm.QH;
Q := MyAlarm.Q;
QL := MyAlarm.QL;
4.15.7 IL Language:
(* MyAlarm is a declared instance of LIM_ALRM function block *)
Op1: CAL MyAlarm (H, X, L, EPS)
FFLD MyAlarm.QH
ST QH
FFLD MyAlarm.Q
ST Q
FFLD MyAlarm.QL
ST QL
See also
ALARM_A ALARM_M
4.16 LogFileCSV
Function block - Generate a log file in CSV format for a list of variables
4.16.1 Inputs
LOG : BOOL Variables are saved on any rising edge of this input
RST : BOOL Reset the contents of the CSV file
LIST : DINT ID of the list of variables to log (use VLID function)
PATH : STRING Path name of the CSV file
4.16.2 Outputs
Q : BOOL TRUE if the requested operation has been performed without error
ERR : DINT Error report for the last requested operation (0 is OK)
Calling this function can lead to missing several PLC cycles. Files are opened and closed directly by the tar-
get's Operating System. Opening some files may be dangerous for system safety and integrity. The num-
ber of open files may be limited by the target system.
l Opening a file may be unsuccessful (invalid path or file name, too many open files...) Your applic-
ation has to process such error cases in a safe way.
l File management may be not available on some targets. Please refer to OEM instructions for further
details about available features.
l Valid paths for storing files depend on the target implementation. Please refer to OEM instructions
for further details about available paths.
4.16.3 Remarks
This function enables to log values of a list of variables in a CSV file. On each rising edge of the LOG input,
one more line of values is added to the file. There is one column for each variable, as they are defined in the
list.
The list of variables is prepared using the KAS IDE or a text editor. Use the VLID function to get the identifier
of the list.
On a rising edge of the RST command, the file is emptied.
When a LOG or RST command is requested, the Q output is set to TRUE if successful.
In case of error, a report is given in the ERR output. Possible error values are:
1 = Cannot reset file on a RST command
2 = Cannot open file for data storing on a LOG command
3 = Embedded lists are not supported by the runtime
4 = Invalid list ID
5 = Error while writing to file
Combined with real time clock management functions, this block provides a very easy way to generate a peri-
odical log file. The following example shows a list and a program that log values everyday at 14h23m (2:23
4.16.4 ST Language
(* MyLOG is a declared instance of LogFileCSV function block *)
MyLOG (b_LOG, RST, LIST, PATH);
Q := MyLOG.Q;
ERR := MyLog.ERR;
4.16.7 IL Language
(* MyLOG is a declared instance of LogFileCSV function block *)
Op1: CAL MyLOG (b_LOG, RST, LIST, PATH);
FFLD MyLOG.Q
ST Q
FFLD MyLog.ERR
ST ERR
See also
VLID
4.17 PID
Function Block - PID loop
4.17.1 Inputs
Input Type Description
AUTO BOOL TRUE = normal mode , FALSE = manual mode.
PV REAL Process value.
SP REAL Set point.
Xout_Manu REAL Output value in manual mode.
KP REAL Gain.
TI REAL Integration factor.
TD REAL Derivation factor.
TS TIME Sampling period.
XMIN REAL Minimum allowed output value.
4.17.2 Outputs
Output Type Description
Xout REAL Output command value.
ER REAL Last calculated error.
Xout_P REAL Last calculated proportional value.
Xout_I REAL Last calculated integrated value.
Xout_D REAL Last calculated derivated value.
Xout_HLM BOOL TRUE if the output value is saturated to XMIN.
Xout_LLM BOOL TRUE if the output value is saturated to XMAX.
4.17.3 Diagram
4.17.4 Remarks
l It is important for the stability of the control that the TS sampling period is much bigger than the cycle
time.
l Output of the PID block always starts with zero. The value will vary per the inputs provided upon fur-
ther cycle executions.
l The output rung has the same value as the AUTO input, corresponding to the input rung, in the FFLD
language.
4.17.5 ST Language
4.17.8 IL Language
4.18 RAMP
Function block - Limit the ascendance or descendance of a signal
4.18.1 Inputs
IN : REAL Input signal
ASC : REAL Maximum ascendance during time base
DSC : REAL Maximum descendance during time base
TM : TIME Time base
RST : BOOL Reset
4.18.2 Outputs
OUT : REAL Ramp signal
4.18.4 Remarks
Parameters are not updated constantly. They are taken into account when only:
- the first time the block is called
- when the reset input (RST) is TRUE
In these two situations, the output is set to the value of IN input.
ASC and DSC give the maximum ascendant and descendant growth during the TB time base.
Both must be expressed as positive numbers.
In FFLD language, the operation is executed only if the input rung (EN) is TRUE. The output rung (ENO)
keeps the same value as the input rung.
4.18.5 ST Language
(* MyRamp is a declared instance of RAMP function block *)
MyRamp (IN, ASC, DSC, TM, RST);
OUT := MyBlinker.OUT;
4.18.8 IL Language
(* MyRamp is a declared instance of RAMP function block *)
Op1: CAL MyRamp (IN, ASC, DSC, TM, RST)
FFLD MyBlinker.OUT
ST OUT
The real-time clock may not be available on all controller hardware models. Please consult the controller
hardware specifications for real-time clock availability.
4.19.1 DAY_TIME
Function - Format the current date/time to a string.
4.19.1.1 Inputs
SEL : DINT Format selector
4.19.1.2 Outputs
Q : STRING String containing formatted date or time
The real-time clock may not be available on all controller hardware models. Please consult the controller
hardware specifications for real-time clock availability.
4.19.1.3 Remarks
Possible values of the SEL input are:
1 current time - format: 'HH:MM:SS'
2 day of the week
0 (default) current date - format: 'YYYY/MM/DD'
In FFLD language, the operation is executed only if the input rung (EN) is TRUE. The output rung (ENO)
keeps the same value as the input rung.
4.19.1.4 ST Language
Q := DAY_TIME (SEL);
4.19.1.7 IL Language
Op1: FFLD SEL
DAY_TIME
ST Q
See also
DTFORMAT
4.19.2 DTFORMAT
Function - Format the current date/time to a string with a custom format.
4.19.2.1 Inputs
FMT: STRING Format string
4.19.2.2 Outputs
Q : STRING String containing formatted date or time
The real-time clock may not be available on all controller hardware models. Please consult the controller
hardware specifications for real-time clock availability.
4.19.2.3 Remarks
The format string may contain any character. Some special markers beginning with the '%' character indic-
ates a date/time information:
%Y Year including century (e.g. 2006)
%y Year without century (e.g. 06)
%m Month (1..12)
%d Day of the month (1..31)
%H Hours (0..23)
%M Minutes (0..59)
%S Seconds (0..59)
Example
(* let's say we are at July 04th 2006, 18:45:20 *)
Q := DTFORMAT ('Today is %Y/%m/%d - %H:%M:%S');
(* Q is 'Today is 2006/07/04 - 18:45:20 *)
4.19.2.4 ST Language
Q := DTFORMAT (FMT);
4.19.2.7 IL Language
Op1: FFLD FMT
DTFORMAT
ST Q
See also
DAY_TIME
4.19.3 DTAT
Function Block - Generate a pulse at given date and time
4.19.3.1 Inputs
4.19.3.2 Outputs
QAT : BOOL Pulse signal
QPAST : BOOL True if elapsed
The real-time clock may not be available on all controller hardware models. Please consult the controller
hardware specifications for real-time clock availability.
4.19.3.3 Remarks
Parameters are not updated constantly. They are taken into account when only:
- the first time the block is called
- when the reset input (RST) is TRUE
In these two situations, the outputs are reset to FALSE.
The first time the block is called with RST=FALSE and the specified date/stamp is passed, the output
QPAST is set to TRUE, and the output QAT is set to TRUE for one cycle only (pulse signal).
Highest units are ignored if set to 0. For instance, if arguments are "year=0, month=0, day = 3, tmof-
day=t#10h" then the block will trigger on the next 3rd day of the month at 10h.
In FFLD language, the block is activated only if the input rung is TRUE..
4.19.3.4 ST Language
(* MyDTAT is a declared instance of DTAT function block *)
MyDTAT (YEAR, MONTH, DAY, TMOFDAY, RST);
QAT := MyDTAT.QAT;
QPAST := MyDTATA.QPAST;
4.19.3.7 IL Language:
(* MyDTAT is a declared instance of DTAT function block *)
Op1: CAL MyDTAT (YEAR, MONTH, DAY, TMOFDAY, RST)
FFLD MyDTAT.QAT
ST QAT
FFLD MyDTATA.QPAST
ST QPAST
See also
DTEVERY Real time clock functions
4.19.4 DTEVERY
Function Block - Generate a pulse signal with long period
4.19.4.1 Inputs
RUN : DINT Enabling command
DAYS : DINT Period : number of days
TM : TIME Rest of the period (if not a multiple of 24h)
4.19.4.2 Outputs
Q : BOOL Pulse signal
4.19.4.3 Remarks
This block provides a pulse signal with a period of more than 24h. The period is expressed as:
DAYS * 24h + TM
For instance, specifying DAYS=1 and TM=6h means a period of 30 hours.
4.19.4.4 ST Language
(* MyDTEVERY is a declared instance of DTEVERY function block *)
MyDTEVERY (RUN DAYS, TM);
Q := MyDTEVERY.Q;
4.19.4.7 IL Language:
(* MyDTEVERY is a declared instance of DTEVERY function block *)
Op1: CAL MyDTEVERY (RUN DAYS, TM)
FFLD MyDTEVERY.Q
ST Q
See also
DTAT Real time clock functions
4.20 SerializeIn
4.20.1 Description
Extract the value of a variable from a binary frame. This function is commonly used for extracting data from a
communication frame in binary format.
In LD language, the operation is executed only if the input rung (EN) is TRUE. The output rung (ENO) keeps
the same value as the input rung.
The FRAME input must fit the input position and data size. If the value cannot be safely extracted, the func-
tion returns 0.
The DATA input must be directly connected to a variable, and cannot be a constant or complex expression.
This variable will be forced with the extracted value.
The function extracts the following number of bytes from the source frame:
The function returns the position in the source frame, after the extracted data. Thus the return value can be
used as a position for the next serialization
4.20.2 Arguments
4.20.2.1 Input
En Description Execute the function
4.20.2.2 Output
OK Description Returns true when the function successfully executes. See
Function - General rules.
Data type BOOL
Unit n/a
NextPos Description Position in the source buffer after the extracted data. 0 in case
or error (invalid position / buffer size).
Data type DINT
Unit n/a
4.20.3 Examples
4.21 SerializeOut
4.21.1 Description
This function copies the value of a variable to a binary frame. This function is commonly used for building a
communication frame in binary format.
In LD language, the operation is executed only if the input rung (EN) is TRUE. The output rung (ENO) keeps
the same value as the input rung.
The FRAME input must be an array large enough to receive the data. If the data cannot be safely copied to
the destination buffer, the function returns 0.
The function copies the following number of bytes to the destination frame:
The function returns the position in the destination frame, after the copied data. Thus the return value can be
used as a position for the next serialization
4.21.2 Arguments
4.21.2.1 Input
En Description Execute the function
Data type BOOL
Range [0,1]
Unit n/a
Default —
Frame[] Description Destination buffer - must be an array.
Data type USINT
Range [0,+65535]
Unit n/a
Default —
Data Description Source variable to be copied
Data type any except STRING
Range —
Unit n/a
Default —
4.21.2.2 Output
OK Description Returns true when the function successfully executes. See
Function - General rules.
Data type BOOL
Unit n/a
NextPos Description Position in the destination buffer after the copied data. 0 in
case or error (invalid position / buffer size).
Data type DINT
Unit n/a
4.21.3 Examples
4.22 SigID
Function - Get the identifier of a "Signal" resource
4.22.1 Inputs
SIGNAL : STRING Name of the signal resource - must be a constant value!
COL : STRING Name of the column within the signal resource - must be a constant value!
4.22.2 Outputs
ID : DINT ID of the signal - to be passed to other blocks
4.22.3 Remarks
Some blocks have arguments that refer to a "signal" resource. For all these blocks, the signal argument is
materialized by a numerical identifier. This function enables you to get the identifier of a signal defined as a
resource.
4.22.4 ST Language
ID := SigID ('MySignal', 'FirstColumn');
4.22.7 IL Language
Op1: FFLD 'MySignal'
SigID 'FirstColumn'
ST ID
See also
SigPlay SigScale
4.23 SigPlay
Function block - Generate a signal defined in a resource
4.23.1 Inputs
IN : BOOL Triggering command
ID : DINT ID of the signal resource, provided by SigID function
RST : BOOL Reset command
TM : TIME Minimum time in between two changes of the output
4.23.2 Outputs
Q : BOOL TRUE when the signal is finished
OUT : REAL Generated signal
ET : TIME Elapsed time
4.23.3 Remarks
The "ID" argument is the identifier of the "signal" resource. Use the SigID function to get this value.
The "IN" argument is used as a "Play / Pause" command to play the signal. The signal is not reset to the
beginning when IN becomes FALSE. Instead, use the "RST" input that resets the signal and forces the OUT
output to 0.
The "TM" input specifies the minimum amount of time in between two changes of the output signal. This para-
meter is ignored if less than the cycle scan time.
This function block includes its own timer. Alternatively, you can use the SigScale function if you want to trig-
ger the signal using a specific timer.
4.23.4 ST Language
Q := SigScale (ID, IN);
4.23.7 IL Language
Op1: FFLD IN
SigScale ID
ST Q
See also
SigScale SigID
4.24 SigScale
Function - Get a point from a "Signal" resource
4.24.1 Inputs
ID : DINT ID of the signal resource, provided by SigID function
IN : TIME Time (X) coordinate of the wished point within the signal resource
4.24.2 Outputs
Q : REAL Value (Y) coordinate of the point in the signal
4.24.3 Remarks
The "ID" argument is the identifier of the "signal" resource. Use the SigID function to get this value.
This function converts a time value to a analog value such as defined in the signal resource. This function can
be used instead of SigPlay function block if you want to trigger the signal using a specific timer.
4.24.4 ST Language
Q := SigScale (ID, IN);
4.24.7 IL Language
Op1: FFLD IN
SigScale ID
ST Q
See also
SigPlay SigID
4.25 STACKINT
Function Block - Manages a stack of DINT integers.
4.25.1 Inputs
PUSH : BOOL Command: when changing from FALSE to TRUE, the value of IN is pushed on the stack
POP : BOOL Pop command: when changing from FALSE to TRUE, deletes the top of the stack
R1 : BOOL Reset command: if TRUE, the stack is emptied and its size is set to N
IN : DINT Value to be pushed on a rising pulse of PUSH
N : DINT maximum stack size - cannot exceed 128
4.25.2 Outputs
EMPTY : BOOL TRUE if the stack is empty
OFLO : BOOL TRUE if the stack is full
OUT : DINT value at the top of the stack
4.25.3 Remarks
Push and pop operations are performed on rising pulse of PUSH and POP inputs. In FFLD language, the input
rung is the PUSH command. The output rung is the EMPTY output.
The specified size (N) is taken into account only when the R1 (reset) input is TRUE.
4.25.4 ST Language
(* MyStack is a declared instance of STACKINT function block *)
MyStack (PUSH, POP, R1, IN, N);
EMPTY := MyStack.EMPTY;
OFLO := MyStack.OFLO;
OUT := MyStack.OUT;
4.25.7 IL Language
(* MyStack is a declared instance of STACKINT function block *)
Op1: CAL MyStack (PUSH, POP, R1, IN, N)
FFLD MyStack.EMPTY
ST EMPTY
FFLD MyStack.OFLO
ST OFLO
FFLD MyStack.OUT
ST OUT
See also
AVERAGE INTEGRAL DERIVATE LIM_ALRM HYSTER
4.26 SurfLin
Function block- Linear interpolation on a surface.
4.26.1 Inputs
X : REAL X coordinate of the point to be interpolated.
4.26.2 Outputs
Z : REAL Interpolated Z value corresponding to the X,Y input point
OK : BOOL TRUE if successful.
ERR : DINT Error code if failed - 0 if OK.
4.26.3 Remarks
This function performs linear surface interpolation in between a list of points defined in XAxis and YAxis
single dimension arrays. The output Z value is an interpolation of the Z values of the four rounding points
defined in the axis. Z values of defined points are passed in the ZVal matrix (two dimension array).
ZVal dimensions must be understood as: ZVal [ iX , iY ]
Values in X and Y axis must be sorted from the smallest to the biggest. There must be at least two points
defined in each axis. ZVal must fit the dimension of XAxis and YAxis arrays. For instance:
XAxis : ARRAY [0..2] of REAL;
YAxis : ARRAY [0.3] of REAL;
ZVal : ARRAY [0..2,0..3] of REAL;
In case the input point is outside the rectangle defined by XAxis and YAxis limits, the Z output is bound to the
corresponding value and an error is reported.
The ERR output gives the cause of the error if the function fails:
4.27 VLID
Function - Get the identifier of an embedded list of variables
4.27.1 Inputs
FILE : STRING Path name of the .TXT list file - must be a constant value!
4.27.2 Outputs
ID : DINT ID of the list - to be passed to other blocks
4.27.3 Remarks
Some blocks have arguments that refer to a list of variables. For all these blocks, the "list" argument is mater-
ialized by a numerical identifier. This function enables you to get the identifier of a list of variables.
Embedded lists of variables are simple ".TXT" text files with one variable name per line (note that you can
only declare global variable).
Lists must contain single variables only. Items of arrays and structures must be specified one by one. The
length of the list is not limited by the system.
List files are read at compiling time and are embedded into the downloaded application code. This implies
that a modification performed in the list file after downloading will not be taken into account by the applic-
ation.
4.27.4 ST Language
ID := VLID ('MyFile.txt');
4.27.7 IL Language
Op1: FFLD 'MyFile.txt'
VLID COL
ST ID
Join the Kollmorgen Developer Network for product support. Ask the community ques-
tions, search the knowledge base for answers, get downloads, and suggest improve-
ments.