ManualOperacio - CX-Programmer 5.0 Function Blocks PDF
ManualOperacio - CX-Programmer 5.0 Function Blocks PDF
W438-E1-01
SYSMAC
CX-Programmer
Ver. 5.0
WS02-CXPC1-E-V50
CS1-H, CJ1-H, CJ1M CPU Units
CX-Programmer
Ver. 5.0
WS02-CXPC1-E-V50
CS1-H, CJ1-H, CJ1M CPU Units
Operation Manual
Function Blocks
Produced July 2004
iv
Notice:
OMRON products are manufactured for use according to proper procedures by a qualified operator
and only for the purposes described in this manual.
The following conventions are used to indicate and classify precautions in this manual. Always heed
the information provided with them. Failure to heed precautions can result in injury to people or dam-
age to property.
!DANGER Indicates an imminently hazardous situation which, if not avoided, will result in death or
serious injury.
!WARNING Indicates a potentially hazardous situation which, if not avoided, could result in death or
serious injury.
!Caution Indicates a potentially hazardous situation which, if not avoided, may result in minor or
moderate injury, or property damage.
Visual Aids
The following headings appear in the left column of the manual to help you locate different types of
information.
Note Indicates information of particular interest for efficient and convenient opera-
tion of the product.
1,2,3... 1. Indicates lists of one sort or another, such as procedures, checklists, etc.
OMRON, 2004
All rights reserved. No part of this publication may be reproduced, stored in a retrieval system, or transmitted, in any form, or
by any means, mechanical, electronic, photocopying, recording, or otherwise, without the prior written permission of
OMRON.
No patent liability is assumed with respect to the use of the information contained herein. Moreover, because OMRON is con-
stantly striving to improve its high-quality products, the information contained in this manual is subject to change without
notice. Every precaution has been taken in the preparation of this manual. Nevertheless, OMRON assumes no responsibility
for errors or omissions. Neither is any liability assumed for damages resulting from the use of the information contained in
this publication.
v
vi
TABLE OF CONTENTS
PRECAUTIONS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi
1 Intended Audience . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xii
2 General Precautions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xii
3 Safety Precautions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xii
4 Application Precautions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii
SECTION 1
Introduction. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1-1 Introducing the Function Blocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1-2 Function Blocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1-3 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1-4 Converting Function Block Definitions to Library Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1-5 Usage Procedures. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
SECTION 2
Specifications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2-1 Function Block Specifications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2-2 Instance Specifications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2-3 Restrictions on Function Blocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
2-4 Function Block Applications Guidelines. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
2-5 Precautions for Instructions with Operands Specifying the First or Last of Multiple Words 49
2-6 Instruction Support and Operand Restrictions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
2-7 CPU Unit Function Block Specifications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
2-8 Number of Function Block Program Steps and Instance Execution Time . . . . . . . . . . . . . . 108
SECTION 3
Creating Function Blocks. . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
3-1 Procedural Flow. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
3-2 Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
Appendices
A Data Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
B Structured Text (ST Language) Specifications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
C External Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
Index. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
Revision History . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
vii
TABLE OF CONTENTS
viii
About this Manual:
This manual describes the function blocks and related functionality of the CX-Programmer Ver. 5.0
used together with CS1-H, CJ1-H, and CJ1M CPU Units with unit version 3.0 or later, and includes the
sections described on the next page. The CX-Programmer Ver. 5.0 is software that enables the per-
sonal computer to be used as a function block programming device, and can be used only for SYS-
MAC CS-series and CJ-series CPU Units that support function blocks.
The CX-Programmer Ver. 5.0 function block functions have been enhanced. This manual describes
only CX-Programmer Ver. 5.0 operations that are related to functions blocks. For operations not related
to function blocks, refer to the CX-Programmer Operation Manual (enclosed, Cat. No. W437). This
manual also provides only information related to function blocks for the CS1-H, CJ1-H, and CJ1M CPU
Units. For other information, refer to the CS/CJ-series manuals.
Please read this manual and related manuals carefully and be sure you understand the information
provided before attempting to install or operate the CX-Programmer Ver. 5.0 or the CS1-H, CJ1-H, or
CJ1M CPU Units. Be sure to read the precautions provided in the following section.
ix
Name Cat. No. Contents
SYSMAC CS/CJ Series W394 Describes programming and other methods to use the func-
CS1G/H-CPU@@-EV1, CS1G/H-CPU@@H, tions of the CS/CJ-series PLCs.
CJ1G-CPU@@, CJ1G/H-CPU@@H, CJ1G- The following information is included:
CPU@@P, CJ1M-CPU@@ Programming
Programmable Controllers Tasks
Programming Manual File memory
Other functions
Use this manual together with the W339 or W393.
SYSMAC CS/CJ Series W340 Describes the ladder diagram programming instructions sup-
CS1G/H-CPU@@-EV1, CS1G/H-CPU@@H, ported by CS/CJ-series PLCs.
CJ1G-CPU@@, CJ1G/H-CPU@@H, CJ1G- When programming, use this manual together with the Oper-
CPU@@P, CJ1M-CPU@@ ation Manual (CS1: W339 or CJ1: W393) and Programming
Programmable Controllers Manual (W394).
Instructions Reference Manual
SYSMAC CS/CJ Series W342 Describes the communications commands that can be
CS1G/H-CPU@@-EV1, CS1G/H-CPU@@H, addressed to CS/CJ-series CPU Units.
CS1W-SCB21-V1/41-V1, CS1W-SCU21/41, The following information is included:
CJ1G-CPU@@, CJ1G/H-CPU@@H, CJ1G- C-series (Host Link) commands
CPU@@P, CJ1M-CPU@@, CJ1W-SCU21-V1/ FINS commands
41-V1 Note: This manual describes commands that can be sent to
Communications Commands the CPU Unit without regard for the communications path,
Reference Manual which can be through a serial communications port on the
CPU Unit, a communications port on a Serial Communica-
tions Unit/Board, or a port on any other Communications
Unit.
Overview of Contents
Precautions provides general precautions for using the CX-Programmer Ver. 5.0.
Section 1 introduces the function block functionality of the CX-Programmer and explains the features
that are not contained in the non-function block version of CX-Programmer.
Section 2 provides specifications for reference when using function blocks, including specifications on
function blocks, instances, and compatible PLCs, as well as usage precautions and guidelines.
Section 3 describes the procedures for creating function blocks on the CX-Programmer.
The Appendices provide information on data types, structure text specifications, and external vari-
ables.
!WARNING Failure to read and understand the information provided in this manual may result in per-
sonal injury or death, damage to the product, or product failure. Please read each section
in its entirety and be sure you understand the information provided in the section and
related sections before attempting any of the procedures or operations given.
x
PRECAUTIONS
This section provides general precautions for using the CX-Programmer Ver. 5.0 and the Programmable Logic Controller.
The information contained in this section is important for the safe and reliable application of the CX-Programmer
Ver. 5.0 and Programmable Controller. You must read this section and understand the information contained before
attempting to set up or operate the CX-Programmer Ver. 5.0 and Programmable Controller.
xi
Intended Audience 1
1 Intended Audience
This manual is intended for the following personnel, who must also have
knowledge of electrical systems (an electrical engineer or the equivalent).
• Personnel in charge of installing FA systems.
• Personnel in charge of designing FA systems.
• Personnel in charge of managing FA systems and facilities.
2 General Precautions
The user must operate the product according to the performance specifica-
tions described in the operation manuals.
Before using the product under conditions which are not described in the
manual or applying the product to nuclear control systems, railroad systems,
aviation systems, vehicles, combustion systems, medical equipment, amuse-
ment machines, safety equipment, and other systems, machines, and equip-
ment that may have a serious influence on lives and property if used
improperly, consult your OMRON representative.
Make sure that the ratings and performance characteristics of the product are
sufficient for the systems, machines, and equipment, and be sure to provide
the systems, machines, and equipment with double safety mechanisms.
This manual provides information for programming and operating the product.
Be sure to read this manual before attempting to use the product and keep
this manual close at hand for reference during operation.
!WARNING It is extremely important that a PLC and all PLC Units be used for the speci-
fied purpose and under the specified conditions, especially in applications that
can directly or indirectly affect human life. You must consult with your
OMRON representative before applying a PLC System to the above-men-
tioned applications.
3 Safety Precautions
!WARNING Confirm safety sufficiently before transferring I/O memory area status from the
CX-Programmer Ver. 5.0 to the actual CPU Unit. The devices connected to
Output Units may malfunction, regardless of the operating mode of the CPU
Unit. Caution is required in respect to the following functions.
• Transferring from the CX-Programmer to real I/O (CIO Area) in the CPU
Unit using the PLC Memory Window.
• Transferring from file memory to real I/O (CIO Area) in the CPU Unit using
the Memory Card Window.
!Caution Variables must be specified either with AT settings (or external variables), or
the variables must be the same size as the data size to be processed by the
instruction when specifying the first or last address of multiple words in the
instruction operand.
xii
Application Precautions 4
!Caution Execute online editing only after confirming that no adverse effects will be
caused by extending the cycle time. Otherwise, the input signals may not be
readable.
!Caution Confirm safety sufficiently before monitoring power flow and present value
status in the Ladder Section Window or when monitoring present values in the
Watch Window. If force-set/reset or set/reset operations are inadvertently per-
formed by pressing short-cut keys, the devices connected to Output Units
may malfunction, regardless of the operating mode of the CPU Unit.
4 Application Precautions
Observe the following precautions when using the CX-Programmer.
• User programs cannot be uploaded to the CX-Programmer.
• Observe the following precautions before starting the CX-Programmer.
• Exit all applications not directly related to the CX-Programmer. Partic-
ularly exit any software such as screen savers, virus checkers, E-mail
or other communications software, and schedulers or other applica-
tions that start up periodically or automatically.
• Disable sharing hard disks, printers, or other devices with other com-
puters on any network.
xiii
Application Precautions 4
xiv
Application Precautions 4
• Values are passed in a batch from the input parameters to the input vari-
ables before algorithm execution (not at the same time as the instructions
in the algorithm are executed). Therefore, to pass the value from a
parameter to an input variable when an instruction in the function block
algorithm is executed, use an internal variable or external variable instead
of an input variable. The same applies to the timing for writing values to
the parameters from output variables.
• Always use internal variables with AT settings in the following cases.
• The addresses allocated to Basic I/O Units, Special I/O Units, and
CPU Bus Units cannot be registered to global symbols, and these vari-
ables cannot be specified as external variables (e.g., the data set for
global variables may not be stable).
• Use internal variables when Auxiliary Area bits other than those pre-
registered to external variables are registered to global symbols and
these variables are not specified as external variables.
• Use internal variables when specifying PLC addresses for another
node on the network: For example, the first destination word at the re-
mote node for SEND(090) and the first source word at the remote
node for RECV(098).
• Use internal variables when the first or last of multiple words is speci-
fied by an instruction operand and the operand cannot be specified as
an internal array variable (e.g., the number of array elements cannot
be specified).
xv
Application Precautions 4
xvi
SECTION 1
Introduction
This section introduces the function block functionality of the CX-Programmer and explains the features that are not
contained in the non-function block version of CX-Programmer.
1
Introducing the Function Blocks Section 1-1
2
Introducing the Function Blocks Section 1-1
3
Introducing the Function Blocks Section 1-1
Item Specifications
Functions not Defining Number of CS1-H/CJ1-H CPU Units:
supported by and creat- function block • Suffix -CPU44H/45H/64H/65H/66H/67H: 1,024 max. per CPU Unit
CX-Program- ing func- definitions
• Suffix -CPU42H/43H/63H: 128 max. per CPU Unit
mer Ver. 4.0 tion blocks
or earlier. CJ1M CPU Units:
• CJ1M-CPU11/12/13/21/22/23: 128 max. per CPU Unit
Function 64 characters max.
block names
Variables Variable names 30,000 characters max.
Variable types Inputs, Outputs, Internals, and Externals
Number of I/O variables in 64 max. (not including EN and ENO)
function block definitions
Allocation of addresses Automatic allocation (The allocation range can
used by variables be set by the user.)
Actual address specifica- Supported
tion
Array specifications Supported (one-dimensional arrays only)
Language Function blocks can be created in ladder programming language or structured
text (ST, see note).
Creating Number of CS1-H/CJ1-H CPU Units:
instances instances • Suffix -CPU44H/45H/64H/65H/66H/67H: 2,048 max. per CPU Unit
• Suffix -CPU42H/43H/63H: 256 max. per CPU Unit
CJ1M CPU Units:
CJ1M-CPU11/12/13/21/22/23: 256 max. per CPU Unit
Instance 30,000 characters max.
names
Storing Project files The project file (.cxp/cxt) Includes function block definitions and instances.
function Program files The file memory program file (*.obj) includes function block definitions and
blocks as instances.
files
Function Each function block definition can be stored as a single file (.cxf) for reuse in
block library other projects.
files
Note The structured text (ST language) conforms to the IEC 61131-3 standard, but
CX-Programmer Ver. 5.0 supports only assignment statements, selection
statements (CASE and IF statements), iteration statements (FOR, WHILE,
REPEAT, and EXIT statements), RETURN statements, arithmetic operators,
logical operators, comparison functions, numeric functions, and comments.
For details, refer to Appendix B Structured Text (ST Language) Specifications.
4
Introducing the Function Blocks Section 1-1
Function Block Library A function block definition created in a project with CX-Programmer Ver. 5.0
Files (*.cxf) can be saved as a file (1 definition = 1 file), enabling definitions to be loaded
into other programs and reused.
Project Text Files Data equivalent to that in project files created with CX-Programmer Ver. 5.0
Containing Function (*.cxp) can be saved as CXT text files (*.cxt).
Blocks (*.cxt)
Main Menu
Main menu Submenu Shortcut Function
File Func- Load Function --- Reads the saved function block library files (*.cxf).
tion Block from File
Block Save Function --- Saves the created function block definitions to a file ([function block
Block to File library file]*.cxf).
Edit Update Function Block --- When a function block definition’s I/O variables have been changed
after the instance was created, an error will be indicated by display-
ing the instance’s left bus bar in red. This command updates the
instance with the new information and clears the error.
Insert Function Block Invocation F Creates an instance in the program (section) at the present cursor
location.
Function Block Parameter P When the cursor is located to the left of an input variable or the right
of an output variable, sets the variable’s input or output parameter.
PLC Func- Function Block --- Sets the range of addresses (function block instance areas) inter-
tion Memory Allocation nally allocated to the selected instance’s variables.
Block Function Block --- Checks the status of the addresses internally allocated to the
Mem- Memory Statistics selected instance’s variables.
ory
Function Block --- Checks the addresses internally allocated to each variable in the
Instance Address selected instance.
Optimize Function --- Optimizes the allocation of addresses internally allocated to vari-
Memory ables.
5
Introducing the Function Blocks Section 1-1
Shortcut Keys
F Key: Pasting Function Move the cursor to the position at which to create the copied function block
Block Definitions in instance in the Ladder Section Window, and click the F Key. This operation is
Program the same as selecting Insert - Function Block Invocation.
P Key: Inputting Position the cursor at the left of the input variable, or at the right of the output
Parameters variable and click the P Key. This operation is the same as selecting Insert -
Function Block Parameter.
6
Function Blocks Section 1-2
Define in advance.
Insert in
program. Set Set
Save function
block as a file.
Function
block A To another PLC program
Reuse.
Structured Structured programs created with function blocks have better design quality
Programming and require less development time.
Easy-to-read “Black Box” The I/O operands are displayed as variable names in the program, so the pro-
Design gram is like a “black box” when entering or reading the program and no extra
time is wasted trying to understand the internal algorithm.
Use One Function Block Many different processes can be created easily from a single function block by
for Multiple Processes using the parameters in the standard process as input variables (such as
timer SVs, control constants, speed settings, and travel distances).
7
Function Blocks Section 1-2
Reduce Coding Errors Coding mistakes can be reduced because blocks that have already been
debugged can be reused.
Data Protection The variables in the function block cannot be accessed directly from the out-
side, so the data can be protected. (Data cannot be changed unintentionally.)
Improved Reusability with The function block’s I/O is entered as variables, so it isn’t necessary to change
Variable Programming data addresses in a block when reusing it.
Creating Libraries Processes that are independent and reusable (such as processes for individ-
ual steps, machinery, equipment, or control systems) can be saved as func-
tion block definitions and converted to library functions.
The function blocks are created with variable names that are not tied to actual
addresses, so new programs can be developed easily just by reading the def-
initions from the file and placing them in a new program.
Compatible with Mathematical expressions can be entered in structured text (ST) language.
Multiple Languages
Function Block Function block definitions are the programs contained in function blocks. Each
Definitions function block definition contains the algorithm and variable definitions, as
shown in the following diagram.
Example: CLOCK PULSE
Function Block Definition
Example: CLOCK PULSE 1. Algorithm
tim_b
TIMX tim_a OFF_TIME
Algorithm
tim_a
Variable definitions TIMX tim_b ON_TIME
ENO
2. Variable Definitions
Usage Name Type
Internal tim_a TIMER
Internal tim_b TIMER
Input ON_TIME INT
Input OFF_TIME INT
1. Algorithm
Standardized programming is written with variable names rather than real I/O
memory addresses. In the CX-Programmer, algorithms can be written in
either ladder programming or structured text.
8
Function Blocks Section 1-2
2. Variable Definitions
The variable table lists each variable’s usage (input, output, or internal) and
properties (data type, etc.). For details, refer to 1-3 Variables.
Number of Function Block The maximum number of function block definitions that can be created for one
Definitions CPU Unit is either 128 or 1,024 depending on the CPU Unit model.
Instances To use an actual function block definition in a program, create a copy of the
function block diagram and insert it in the program. Each function block defini-
tion that is inserted in the program is called an “instance” or “function block
instance.” Each instance is assigned an identifier called an “instance name.”
By generating instances, a single function block definition can be used to pro-
cess different I/O data with the same function.
Not yet in program
and memory not yet Block instance in program with memory
allocated allocated. (object)
(abstract).
Note Instances are managed by names. More than one instance with the same
name can also be inserted in the program. If two or more instances have the
same name, they will use the same internal variables. Instances with different
names will have different internal variables.
For example, consider multiple function blocks that use a timer as an internal
variable. In this case all instances will have to be given different names. If
more than one instance uses the same name, the same timer would be used
in multiple locations, resulting in duplicated use of the timer.
If, however, internal variables are not used or they are used only temporarily
and initialized the next time an instance is executed, the same instance name
can be used to save memory.
9
Function Blocks Section 1-2
instance_A
TIMER_FB
Function Block Definition
TIMER_FB
Variable Definitions
Internal variable: WORK_NUM Use same internal variables.
instance_A
TIMER_FB
Number of Instances Multiple instances can be created from a single function block definition. Up to
either 256 or 2,048 instances can be created for a single CPU Unit depending
on the CPU Unit model. The allowed number of instances is not related to the
number of function block definitions and the number of tasks in which the
instances are inserted.
Parameters Each time an instance is created, set the real I/O memory addresses or con-
stants for I/O variables used to pass input data values to instances and obtain
output data values from instances. These addresses and constants are called
parameters.
Instance of Function Block Definition A
Input 3.00 c
Here, it is not the input source address itself, but the contents at the input
address in the form and size specified by the variable data type that is passed
to the function block. In a similar fashion, it is not the output destination
address itself, but the contents for the output address in the form and size
specified by the variable data type that is passed from the function block.
10
Function Blocks Section 1-2
Input D200 n
Examples:
If m is type WORD, one word of data from D100 will be passed to the
variable.
If n is type DWORD, two words of data from D200 and D201 will be
passed to the variable.
If k is type LWORD, four words of data from the variable will be passed
to the D300 to D303.
Note (1) Only addresses in the following areas can be used as parameters: CIO
Area, Auxiliary Area, DM Area, EM Area (banks 0 to C), Holding Area,
and Work Area.
The following cannot be used: Index and Data Registers (both direct and
indirect specifications) and indirect addresses to the DM Area and EM
Area (both in binary and BCD mode).
(2) Local and global symbols in the user program can also be specified as
parameters. To do so, however, the data size of the local or global symbol
must be the same as the data size of the function block variable.
(3) When an instance is executed, input values are passed from parameters
to input variables before the algorithm is processed. Output values are
passed from output variables to parameters just after processing the al-
gorithm. If it is necessary to read or write a value within the execution cy-
cle of the algorithm, do not pass the value to or from a parameter. Assign
the value to an internal variable and use an AT setting (specified address-
es).
!Caution If an address is specified in an input parameter, the values in the address are
passed to the input variable. The actual address data itself cannot be passed.
!Caution Parameters cannot be used to read or write values within the execution cycle
of the algorithm. Use an internal variable with an AT setting (specified
addresses). Alternatively, reference a global symbol as an external variable.
■ Reference Information
A variety of processes can be created easily from a single function block by
using parameter-like elements (such as fixed values) as input variables and
changing the values passed to the input variables for each instance.
Example: Creating 3 Instances from 1 Function Block Definition
11
Function Blocks Section 1-2
Cyclic task 0
Instance CASCADE_01
CASCADE_01 P_On 1.0
CONTROL
Algorithm EN ENO
&20
ON_TIME
Internal and I/O
variables &10 OFF_TIME
Example:
There are 3 FB
instances and each Cyclic task 1
has its own I/O and Instance CASCADE_03
internal variables. CASCADE_03 P_On 1.2
CONTROL
Algorithm EN ENO
&7
ON_TIME
Internal and I/O
variables &8 OFF_TIME
If internal variables are not used, if processing will not be affected, or if the
internal variables are used in other locations, the same instance name can be
used at multiple locations in the program.
Cyclic taskCASCADE
0
P_On CONTROL 1.0
EN ENO
&100
The same instance can be PARA_1
used at multiple locations. &130 PARA_2
Function block definition
Example: CONTROL
Instance CASCADE
CASCADE P_On CONTROL 1.1
Algorithm Algorithm EN ENO
&50
Internal and I/O PARA_1
Variables variables &150 PARA_2
Cyclic taskCASCADE
1
P_On CONTROL 1.2
EN ENO
&100
PARA_1
&200 PARA_2
Some precautions are required when using the same memory area. For
example, if the same instance containing a timer instruction is used in more
than one program location, the same timer number will be used causing coil
duplication, and the timer will not function properly if both instructions are exe-
cuted.
Registration of Instances Each instance name is registered in the global symbol table as a file name.
Program
Instance (sample) of function block definition A
a b
12
Variables Section 1-3
1-3 Variables
1-3-1 Introduction
In a function block, the addresses (see note) are not entered as real I/O mem-
ory addresses, they are all entered as variable names. Each time an instance
is created, the actual addresses used by the variable are allocated automati-
cally in the specified I/O memory areas by the CX-Programmer. Conse-
quently, it isn’t necessary for the user to know the real I/O memory addresses
used in the function block, just as it isn’t necessary to know the actual mem-
ory allocations in a computer. A function block differs from a subroutine in this
respect, i.e., the function block uses variables and the addresses are like
“black boxes.”
Example:
Program
Function block definition A
Instance of function block definition A
Standard program section with
variable names a, b, c, etc.
Insert in
a b program. Input 0.00 a b Output 2.00
Input 3.00 c
Note Constants are not registered as variables. Enter constants directly in instruc-
tion operands.
• Ladder programming language: Enter hexadecimal numerical values
after the # and decimal values after the &.
• Structured text (ST language): Enter hexadecimal numerical values af-
ter 16# and enter decimal numerical values as is.
Exception: Enter directly or indirectly specified addresses for Index Registers
IR0 to IR15 and Data Registers DR0 to DR15 directly into the instruction
operand.
13
Variables Section 1-3
Initial Value This is the initial value set in a variable before the instance is executed for the
first time. Afterwards, the value may be changed as the instance is executed.
14
Variables Section 1-3
Note Inputs can be set as initial values, but the value of the actual input parameter
will be given priority.
Setting Internal Allocation The user sets the function block instance areas in which addresses are allo-
Areas for Variables cated internally by the system. The variables are allocated automatically by
the system to the appropriate instance area set by the user.
15
Converting Function Block Definitions to Library Files Section 1-4
Setting Procedure
Select Function Block Memory - Function Block Memory Allocation from
the PLC Menu. Set the areas in the Function Block Memory Allocation Dialog
Box.
Function Block Instance Areas
FB Instance Default value Applicable memory
Area Start Address End Address Size areas
Non Retain H512 H1407 896 CIO, WR, HR, DM, EM
Retain H1408 H1535 128 HR, DM, EM
Timers T3072 T4095 1024 TIM
Counters C3072 C4095 1024 CNT
Function Block Holding The Function Block Holding Area words are allocated from H512 to H1535.
Area Words (H512 to These words are different to the standard Holding Area used for programs
H1535) (H000 to H511) and are used only for the function block instance area (inter-
nally allocated variable area). These words cannot be specified as instruction
operands. They are displayed in red if input when a function block is not being
created. Although the words can be input when creating a function block, an
error will occur when the program is checked. If this area is specified not to be
retained in the Function Block Memory Allocation Dialog Box, turn the power
ON/OFF or clear the area without retaining the values when starting opera-
tion.
1. Algorithm
1. Algorithm tim_b
tim_b Save Read TIMX tim_a OFF_TIME
TIMX tim_a OFF_TIME
tim_a
tim_a TIMX tim_b ON_TIME
TIMX tim_b ON_TIME
ENO
ENO
2. Variable Definitions
2. Variable Definitions
Usage Name Type
Usage Name Type Internal tim_a TIMER
Internal tim_a TIMER tim_b TIMER
Internal
Internal tim_b TIMER Input ON_TIME INT
Input ON_TIME INT OFF_TIME INT
Input
Input OFF_TIME INT
Function block
definition file (.cxf)
16
Usage Procedures Section 1-5
1,2,3... 1. First, create the function block definition including the algorithm and vari-
able definitions in ladder program or ST language. Alternatively, insert a
function block library file that has been prepared in advance.
2. Variables
17
Usage Procedures Section 1-5
1,2,3... 1. Select the function block that you want to save and save it as a function
block definition file (*.cxf).
2. Open the other PLC’s project and open/read the function block definition
file (*.cxf) that was saved.
3. Insert the function block definition in the program when creating the new
program.
Function block definition A
1. Algorithm Program
c Output 6.00
2. Variables
Table defining usage
and properties of Read and
variables a, b, c, etc. insert.
Save
Function
block
definition
A
Function block
definition file (*.cxf)
Note In the CX-Programmer Ver. 5.0, each function block definition can be com-
piled and checked as a program. We recommend compiling to perform a pro-
gram check on each function block definition file before saving or reusing the
file.
18
SECTION 2
Specifications
This section provides specifications for reference when using function blocks, including specifications on function blocks,
instances, and compatible PLCs, as well as usage precautions and guidelines.
19
2-6-20 Step Instructions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
2-6-21 Basic I/O Unit Instructions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
2-6-22 Serial Communications Instructions . . . . . . . . . . . . . . . . . . . . . . . . . 91
2-6-23 Network Instructions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
2-6-24 File Memory Instructions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
2-6-25 Display Instructions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
2-6-26 Clock Instructions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
2-6-27 Debugging Instructions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
2-6-28 Failure Diagnosis Instructions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
2-6-29 Other Instructions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
2-6-30 Block Programming Instructions . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
2-6-31 Text String Processing Instructions . . . . . . . . . . . . . . . . . . . . . . . . . . 101
2-6-32 Task Control Instructions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
2-6-33 Model Conversion Instructions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
2-6-34 Special Instructions for Function Blocks . . . . . . . . . . . . . . . . . . . . . 104
2-7 CPU Unit Function Block Specifications . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
2-7-1 Specifications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
2-7-2 Operation of Timer Instructions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
2-8 Number of Function Block Program Steps and Instance Execution Time . . . 108
2-8-1 Number of Function Block Program Steps
(CPU Units with Unit Version 3.0 or Later) . . . . . . . . . . . . . . . . . . . 108
2-8-2 Function Block Instance Execution Time
(CPU Units with Unit Version 3.0 or Later) . . . . . . . . . . . . . . . . . . . 109
20
Function Block Specifications Section 2-1
Function Block Each function block definition has a name. The names can be up to 64 char-
Definition Name acters long and there are no prohibited characters. The default function block
name is FunctionBlock@, where @ is a serial number.
Function block definition name
CLOCK PULSE
EN ENO
(BOOL) (BOOL)
ON_TIME
(INT)
OFF_TIME
(INT)
21
Function Block Specifications Section 2-1
Language Select either ladder programming language or structured text (ST language).
For details refer to Appendix B Structured Text (ST Language) Specifications.
Variable Definitions Define the operands and variables used in the function block definition.
Variable Names • Variable names can be up to 30,000 characters long.
• Variables name cannot contain spaces or any of the following characters:
! “ # $ % & ‘ ( ) = - ~ ^ \ | ‘ @ { [ + ; * : } ] < , > . ? /
• Variable names cannot start with a number (0 to 9).
• Variable names cannot contain two underscore characters in a row.
• The following characters cannot be used to indicate addresses in I/O
memory.
A, W, H (or HR), D (or DM), E (or EM), T (or TIM), C (or CNT) followed
by the numeric value (word address)
Variable Notation
CLOCK PULSE
Variable table
EN
ENO Usage Name Type
(BOOL) (BOOL) Internal tim_a TIMER
ON_TIME Internal tim_b TIMER
(INT) Input ON_TIME INT
OFF_TIME Input OFF_TIME INT
(INT)
Output variables
Input variables
tim_b
TIMX tim_a OFF_TIME
tim_a
TIMX tim_b OFF_TIME
ENO
Internal
variables
22
Function Block Specifications Section 2-1
■ Input Variables
Input variables pass external operands to the instance. The input variables
are displayed on the left side of the instance.
The value of the input source (data contained in the specified parameter just
before the instance was called) will be passed to the input variable.
1.0
P_On FB
EN
ENO
D0 D100
PV CV
Example
10.0
Algorithm (Body)
0.0 ADD_INT_DINT
P_On
EN ENO SIGN IN16 tmp
D100 D1000
IN16 OUT32
+L IN32 tmp OUT32
D200 IN32
Variable table
IN16 is an INT variable, so the content of D100 is used.
Usage Name Type
IN32 is a DINT variable, so the content of D200 and
D201 is used.
Internal tmp DINT
Input EN BOOL
Input IN16 INT
Input IN32 DINT
Output ENO BOOL
Output OUT32 DINT
Note 1. The same name cannot be assigned to an input variable and output vari-
able. If it is necessary to have the same variable as an input variable and
output variable, register the variables with different names and transfer the
value of the input variable to the output variable in the function block with
an instruction such as MOV.
2. When the instance is executed, input values are passed from parameters
to input variables before the algorithm is processed. Consequently, values
cannot be read from parameters to input variables within the algorithm. If
it is necessary to read a value within the execution cycle of the algorithm,
do not pass the value from a parameter. Assign the value to an internal
variable and use an AT setting (specified addresses). Alternatively, refer-
ence the global symbol as external variables.
23
Function Block Specifications Section 2-1
Initial Value
Initial values can be set for input variables, but the value of the input parame-
ter will be enabled (the input parameter value will be set when the parameter
for input variable EN goes ON and the instance is executed).
Note The input parameter setting cannot be omitted when using the CX-
Programmer.
EN (Enable) Variable
When an input variable is created, the default input variable is the EN variable.
The instance will be executed when the parameter for input variable EN is ON.
■ Output Variables
Output variables pass return values from the instance to external applications.
The output variables are displayed on the right side of the instance.
After the instance is executed, the value of the output variable is passed to the
specified parameter.
1.0
P_On FB
EN ENO
D0 PV CV D100
Example
Variable table
Usage Name Data type
OUT32 is a DINT variable, so Internal tmp DINT
the variable's value is passed Input EN BOOL
to D1000 and D1001. Input IN16 INT
Input IN32 DINT
Output ENO BOOL
Output OUT32 DINT
Like internal variables, the values of output variables are retained until the
next time the instance is executed (i.e., when EN turns OFF, the value of the
output variable is retained).
Example:
In the following example, the value of output variable CV will be retained until
the next time the instance is executed.
Product A counter
CTD
CD Q
LD
PV CV D150
Note 1. The same name cannot be assigned to an input variable and output vari-
able. If it is necessary to have the same variable as an input variable and
output variable, register the variables with different names and transfer the
value of the input variable to the output variable in the function block with
an instruction such as MOV.
24
Function Block Specifications Section 2-1
2. When the instance is executed, output variables are passed to the corre-
sponding parameters after the algorithm is processed. Consequently, val-
ues cannot be written from output variables to parameters within the
algorithm. If it is necessary to write a value within the execution cycle of the
algorithm, do not write the value to a parameter. Assign the value to an in-
ternal variable and use an AT setting (specified addresses).
Initial Value
An initial value can be set for an output variable that is not being retained, i.e.,
when the Retain Option is not selected. An initial value cannot be set for an
output variable if the Retain Option is selected.
The initial value will not be written to the output variable if the IOM Hold Bit
(A50012) is ON.
Auxiliary Area control bit Initial value
IOM Hold Bit (A50012) ON The initial value will not be set.
■ Internal Variables
Internal variables are used within an instance. These variables are internal to
each instance. They cannot be referenced from outside of the instance and
are not displayed in the instance.
The values of internal variables are retained until the next time the instance is
executed (i.e., when EN turns OFF, the value of the internal variable is
retained). Consequently, even if instances of the same function block defini-
tion are executed with the same I/O parameters, the result will not necessarily
be the same.
Example:
The internal variable tim_a in instance Pulse_2sON_1sOFF is different from
internal variable tim_a in instance Pulse_4sON_1sOFF, so the instances can-
not reference and will not affect each other’s tim_a value.
Variable table
Pulse_2sON_1sOFF
Usage Name Data type
1.0 Internal tim_a TIMER
P_On CLOCK PULSE
EN ENO Internal tim_b TIMER
&20 Input ON_TIME INT
ON_TIME Input OFF_TIME INT
&10 OFF_TIME
Pulse_4sON_1sOFF
1.1
P_On CLOCK PULSE
EN ENO
&40
ON_TIME
&10 OFF_TIME
25
Function Block Specifications Section 2-1
Variable table
Internal variable tmp Name Type
is not displayed. Internal tmp DINT
Input EN BOOL
Input IN16 INT
Input IN32 DINT
Output ENO BOOL
Output OUT32 DINT
When the Retain Option is not selected, the value of the variable will not be
held when the power is interrupted or operation starts. Even variables not set
to be retained, however, can be held at the start of operation by turning ON
the IOM Hold Bit (A50012) and can be held during power interruptions by set-
ting the PLC Setup, as shown in the following table.
Variables Condition IOM Hold Bit (A50012) setting
OFF ON
IOM Hold Bit Status at Startup IOM Hold Bit Status at Startup
(PLC Setup) selected (PLC Setup) not selected
Variables not Start of operation Not retained Retained Retained
set to Retain Power ON Not retained Retained Not retained
Note The IOM Hold Bit (A50012) is supported for compatibility with previous mod-
els. To hold the values of variables in function blocks, however, use the Retain
Option and not the IOM Hold Bit.
Initial Value
An initial value can be set for an internal variable that is not being retained
(i.e., when the Retain Option not selected). An initial value cannot be set for
an internal variable if the Retain Option is selected.
Internal variables that are not being retained will be initialized to 0.
The initial value will not be written to the internal variable if the IOM Hold Bit
(A50012) is ON.
Auxiliary Area control bit Initial value
IOM Hold Bit (A50012) ON The initial value will not be set.
OFF The initial value will be set.
■ External Variables
External variables are either system-defined variables that have been regis-
tered in CX-Programmer before hand, or variables that externally reference
user-defined variables in the global symbol table.
26
Function Block Specifications Section 2-1
Note (1) The TIMER data type is used to enter variables for timer numbers (0 to
4095) in the operands for TIMER instructions (TIM, TIMH, etc.). When
this variable is used in another instruction, the Timer Completion Flag (1
bit) or the timer present value (16 bits) is specified (depending on the in-
struction operand). The TIMER data type cannot be used in structured
text function blocks.
(2) The COUNTER data type is used to enter variables for counter numbers
(0 to 4095) in the operands for COUNTER instructions (CNT, CNTR,
etc.). When this variable is used in another instruction, the Counter Com-
pletion Flag (1 bit) or the counter present value (16 bits) is specified (de-
pending on the instruction operand). The COUNTER data type cannot be
used in structured text function blocks.
AT Settings (Allocation to Actual Addresses)
With internal variables, it is possible to set the variable to a particular I/O
memory address rather than having it allocated automatically by the system.
To specify a particular address, the user can input the desired I/O memory
address in this property. It is still necessary to use variable name in program-
ming even if a particular address is specified.
Note (1) The AT property can be set for internal variables only.
27
Function Block Specifications Section 2-1
(2) AT settings can be used only with the CIO (Core I/O Area), A (Auxiliary
Area), D (Data Memory Area), E (Extended Memory Area, H (Holding
Relay Area), W (Internal Relay Area).
The AT property cannot be set in the following memory areas:
• Index Register and Data Register Areas (directly/indirectly specified)
• Indirectly specified DM/EM (: binary mode, *:BCD mode)
(3) AT settings can be used for the following allocations.
• Addresses for Basic I/O Units, CPU Bus Units, or Special I/O Units
• Auxiliary Area bits not registered as external variables in advance
• PLC addresses for other nodes in the network
• Instruction operands specifying the beginning word (or end word) of
multiple words.
Example:
If the READ DATA FILE instruction (FREAD) is being used in the function
block definition and it is necessary to check the File Memory Operation Flag
(A34313), use an internal variable and specify the flag’s address in the AT set-
ting.
Register an internal variable, select the AT setting option, and specify A34313
as the address. The status of the File Memory Operation Flag can be checked
through this internal variable.
When the AT setting is used, the function block loses its flexibility. This func-
tion should thus be used only when necessary.
Array Setting
With internal variables, a variable can be defined as an array.
Note Only one-dimensional arrays are supported by the CX-Programmer.
With the array setting, a large number of variables with the same properties
can be used by registering just one variable.
• An array can have from 1 to 32,000 array elements.
• The array setting can be set for internal variables only.
• Any data type can be specified for an array variable, as long as it is an
internal variable.
• When entering an array variable name in the algorithm of a function block
definition, enter the array index number in square brackets after the vari-
able name. The following three methods can be used to specify the index.
(In this case the array variable is a[].)
• Directly with numbers (for ladder or ST language programming)
Example: a[2]
• With a variable (for ladder or ST language programming)
Example: a[n], where n is a variable
28
Function Block Specifications Section 2-1
Note INT, DINT, LINT, UINT, UDINT, or ULINT can be used as the vari-
able data type.
• With an equation (for ST language programming only)
Example: a[b+c], where b and c are variables
Note Equations can contain only arithmetic operators (+, −, *, and /).
An array is a collection of data elements that are the same type of data. Each
array element is specified with the same variable name and a unique index.
(The index indicates the location of the element in the array.)
A one-dimensional array is an array with just one index number.
Example: When an internal variable named SCL is set as an array variable
with 10 elements, the following 10 variables can be used:
SCL[0], SCL[1], SCL[2], SCL[3], SCL[4], SCL[5], SCL[6], SCL[7], SCL[8], and
SCL[9]
SCL
0 WORD variable
1 WORD variable
2 WORD variable
3 WORD variable Specify SCL[3] to access this data element.
4 WORD variable
5 WORD variable
6 WORD variable
7 WORD variable
8 WORD variable
9 WORD variable
Note Use an internal array variable when specifying the first or last of multiple
words in an instruction operand to enable reusing the function block if an inter-
nal variable with a AT property cannot be set for the operand and an external
variable cannot be set. Prepare an internal array variable with the number of
elements for the required size, and after setting the data in each array ele-
ment, specify the first or last element in the array variable for the operand.
Example:
Function block definition Instance
Variable SCL
EN ENO
SCL WORD[10]
100
S D
Algorithm
SCL- BODY
SCL
LD P_On 0 #0000 Specifying this array element
in the SCL instruction is the
MOV #0000 SC
SCL[0] 1 &0 same as specifying the first
MOV &0SCL[1]
SC 2 #0300 address.
SCL[2]
MOV #0300 SC 3 &4000
MOV &4000 SCL[3]
SC
SCL S SCL[0]
SC D
Write the operand data to
the array variables.
29
Instance Specifications Section 2-2
Note For details, refer to 2-5 Precautions for Instructions with Operands Specifying
the First or Last of Multiple Words.
Initial Values
When an instance is executed the first time, initial values can be set for input
variables, internal variables, and output variables. For details, refer to Initial
Value under the preceding descriptions of input variables, internal variables,
and output variables.
30
Instance Specifications Section 2-2
Pulse_2sON_2sOFF
CLOCK PULSE
EN
ENO
&20
ON_TIME
&10
OFF_TIME
Function Block To use a function block, the system requires memory to store the instance’s
Instance Areas internal variables and I/O variables. These areas are known as the function
block instance areas and the user must specify the first addresses and sizes
of these areas. The first addresses and area sizes can be specified in 1-word
units.
When the CX-Programmer compiles the function, it will output an error if there
are any instructions in the user program that access words in these areas.
Function Block Instance The following settings are made in the function block instance area:
Area Types
Non-retained Areas
Item Contents
Allocated variables Variables for which the retain property for power OFF and
operation start is set as non-retained (See note 1.)
Applicable areas H (Function block Special Holding Area), I/O (CIO Area), H
(Holding Area), W (Internal Relay Area), D (Data Memory
Area) (see note 2), E (Extended Data Memory Area) (See
notes 2 and 3.)
Setting unit Set in words
Allocated words H512 to H140
(default)
Note (1) Except when the data type is set to TIMER or COUNTER.
31
Instance Specifications Section 2-2
(2) Bit data can be accessed even if the DM or EM Area is specified for the
non-retained area or retained area.
(3) The same bank number cannot be specified as the current bank in the
user program if the EM Area is specified for the non-retained area or re-
tained area.
Retained Area
Item Contents
Allocated variables Variables for which the retain property for power OFF and
operation start is set as retained (See note 1.)
Applicable areas H (Function block Special Holding Area), H (Holding Area), D
(Data Memory Area) (see note 1), E (Extended Data Memory
Area) (See notes 2 and 3.)
Setting unit Set in words
Allocated words H1408 to H1535
(default)
Note (1) Except when the data type is set to TIMER or COUNTER.
(2) Bit data can be accessed even if the DM or EM Area is specified for the
non-retained area or retained area.
(3) The same bank number cannot be specified as the current bank in the
user program if the EM Area is specified for the non-retained area or re-
tained area.
Timer Area
Item Contents
Allocated variables Variables with TIMER set as the data type.
Applicable areas T (Timer Area) Timer Flag (1 bit) or timer PVs (16 bits)
Allocated words T3072 to T4095 Timer Flag (1 bit) or timer PVs (16 bits)
(default)
Counter Area
Item Contents
Allocated variables Variables with COUNTER set as the data type.
Applicable areas C (Counter Area) Counter Flag (1 bit) or counter PVs (16 bits)
Allocated words C3072 to C4095 Counter Flag (1 bit) or counter PVs (16 bits)
(default)
Function Block Holding The default allocation of Function Block Holding Area words set as retained
Area (H512 to H1535) and non-retained words is H512 to H1535. These words are different to the
standard Holding Area used for programs (H000 to H511), and are used only
for the function block instance area (internally allocated variable area).
• These words cannot be specified in AT settings for internal variables.
• These words cannot be specified as instruction operands.
• These words are displayed in red if they are input when a function
block is not being created.
• Although the words can be input when creating a function block, an
error will occur when the program is checked.
• If this area is specified as non-retained, turn the power ON/OFF or clear
the area without retaining the values when starting operation.
Note To prevent overlapping of instance area addresses with addresses used in the
program, set H512 to H1535 (Function Block Holding Area words) for the non-
retained area and retained area.
32
Instance Specifications Section 2-2
Accessing Function Block If the user program contains an instruction to access the function block
Instance Area from the instance area, an error will be displayed in the Compile Tab of the Output Win-
User Program dow of CX-Programmer if the following operations are attempted.
• Attempting to write during online editing (writing not possible)
• Executing program check (Selecting Compile from the Program Menu or
Compile All PLC Programs from the PLC Menu)
Example: If W0 to W511 is specified as the non-retained area of the function
block instance area and W0.00 is used in the ladder program, an error will
occur when compiling and be displayed as “ERROR: [omitted]...- Address -
W0.00 is reserved for Function Block use].
Program
P_Off FB 1.0
EN ENO Instance data area Start Size
address
Non Retain W0 512
Retain
W0.00 3.0 Timers
Counters
Compile error
Note The allocations in the function block instance area for variables are automati-
cally reallocated when a variable is added or deleted. A single instance
requires addresses in sequence, however, so if addresses in sequence can-
not be obtained, all variables will be allocated different addresses. As a result,
unused areas will be created. If this occurs, execute the optimization opera-
tion to effectively use the allocated areas and remove the unused areas.
Creating Multiple
Instances
Calling the Same Instance A single instance can be called from multiple locations. In this case, the inter-
nal variables will be shared.
Making Multiple Instances Multiple instances can be created from a single function block definition. In
this case, the values of internal variables will be different in each instance.
Example: Counting Product A and Product B
Prepare a function block definition called Down Counter (CTD) and set up
counters for product A and product B. There are two types of programs, one
for automatic operation and another for manual operation. The user can
switch to the appropriate mode of operation.
In this case, multiple instances will be created from a single function block.
The same instance must be called from multiple locations.
33
Instance Specifications Section 2-2
CTD CTD
CD Q CD Q
LD LD
PV CV D100 PV CV D150
PV CV D200
Program 1 Instance A
Instance A
I/O variables,
FB Internal
variables
FB definition
Body Variable
Instance B definitions
FB
Body
Instance B
I/O variables,
Internal
variables
Program 2
Instance A
Body
FB
Note (1) The following table shows the methods for inputting values in parameters.
Input Contents Size Parameter value input Setting range
variable method
data type
BOOL Bit data 1 bit P_Off, P_On 0 (FALSE), 1 (TRUE)
INT Integer 16 bits Positive value: & or + followed −32,768 to 32,767
DINT Double integer 32 bits by integer −2,147,483,648 to 2,147,483,647
LINT Long (8-byte) integer 64 bits Negative value: − followed by −9,223,372,036,854,775,808 to
integer 9,223,372,036,854,775,807
34
Instance Specifications Section 2-2
(2) The size of function block input variables and output variables must
match the size of program symbols (global and local), as shown in the fol-
lowing table.
Size Function block variable data Program symbol (global, local)
type data type
1 bit BOOL BOOL
16 bits INT, UINT, WORD INT, UINT, UINT BCD, WORD
32 bits DINT, UDINT, REAL, DWORD DINT, UDINT, UDINT BCD, REAL,
DWORD
64 bits LINT, ULINT, LREAL, LWORD LINT, ULINT, ULINT BCD, LREAL,
LWORD
More than 1 Non-boolean CHANNEL, NUMBER (see note)
bit
Note The program symbol NUMBER can be set only in the input param-
eters. The value that is input must be within the size range for the
function block variable data type.
35
Instance Specifications Section 2-2
Operation when the The system calls a function block when the input to the function block’s EN
Instance Is Executed input variable is ON. When the function block is called, the system generates
the instance’s variables and copies the algorithm registered in the function
block. The instance is then executed.
Pulse_2sON_1sOFF
Algorithm (Body)
1.0
P_On CLOCK PULSE tim_b
EN ENO TIMX tim_a OFF_TIME
&20
ON_TIME
1. The FB is called.
tim_a
TIMX tim_b ON_TIME
&10 OFF_TIME
ENO
2. The system generates the instance
variables and copies the algorithm.
FB instance (Pulse_2sON_1sOFF)
Usage Name Value
Internal 200-100ms_PULSE_tim_a ---
Internal 200-100ms_PULSE_tim_b ---
Input 200-100ms_PULSE_ON_TIME &20
Input 200-100ms_PULSE_OFF_TIME &10
Pulse_2sON_1sOFF tim_a
Pulse_2sON_1sOFF tim_b Pulse_2sON_1sOFF ON_TIME
Pulse_2sON_1sOFF ENO
Input to EN is ON.
36
Restrictions on Function Blocks Section 2-3
Operation when the When the input to the function block’s EN input variable is OFF, the function
Instance Is Not Executed block is not called, so the internal variables of the instance do not change (val-
ues are retained). In the same way the output variables do not change when
EN is OFF (values are retained).
Program FB definition
Body
P_Off FB 1.0
P_On
EN ENO
ENO
Internal
variable a
Execution results:
Output variable 1.0 is turned OFF, but
internal variable a retains its previous value.
Program
If the programming were entered
directly into the program instead of in a
P_Off P_On 1.0 function block definition, both bit 1.0
and variable a would be turned OFF.
Internal
variable a
!Caution An instance will not be executed while its EN input variable is OFF, so Differ-
entiation and Timer instructions will not be initialized while EN is OFF. If Differ-
entiation or Timer instructions are being used, use the Always ON Flag
(P_On) for the EN input condition and include the instruction’s input condition
within the function block definition.
Nesting
A function block cannot be called from another function block, i.e., nesting is
not supported.
Program Instance A: FB1 Instance X: FB2
Instance A
FB2
FB1
37
Restrictions on Function Blocks Section 2-3
IL
FB_BODY
FB
ILC
Differentiation An instance will not be executed while its EN input variable is OFF, so the fol-
Instructions in Function lowing precautions are essential when using a Differentiation Instruction in a
Block Definitions function block definition. (Differentiation Instructions include DIFU, DIFD, and
any instruction with an @ or % prefix.)
• As long as the instance’s EN input variable is OFF, the execution condition
will retain its previous status (the last status when the EN input variable
was ON) and the Differentiation Instruction will not operate.
• When the instance’s EN input variable goes ON, the present execution
condition status will not be compared to the last cycle’s status. The
present execution condition will be compared to the last condition when
the EN input variable was ON, so the Differentiation Instruction will not
operate properly. (If the EN input variable remains ON, the Differentiation
Instruction will operate properly when the next rising edge or falling edge
occurs.)
38
Restrictions on Function Blocks Section 2-3
Example:
0.0 Body
FB1
EN ENO LD EN
OR IN1
IN1 OUT1 SET OUT1
If Differentiation Instructions are being used, always use the Always ON Flag
(P_On) for the EN input condition and include the instruction’s input condition
within the function block definition.
P _On Body
FB1
EN ENO LD a
OR I N1
0.00 a O UT1 SET OUT1
IN 1
The EN input condition is always ON, so
these Differentiation Instructions operate
normally.
• Input a decimal numerical value after “#” when specifying the first operand
of the following instructions.
MILH(517), MILR(518), MILC(519), DIM(631), MSKS(690), MSKR(692),
CLI(691), FAL(006), FALS(007), TKON(820), TKOF(821)
Note “&” is not supported.
• CNR(545), CNRX(547) (RESET TIMER/COUNTER) instructions cannot
be used to reset multiple timers and counters within a function block at the
same time.
Always specify the same variable for the first operand (timer/counter num-
ber 1) and second operand (timer/counter number 2). Different variables
cannot be specified for the first and second operand.
Timer Instructions in An instance will not be executed while its EN input variable is OFF, so the fol-
Function Block Definitions lowing precautions are essential when using a Timer Instruction in a function
block definition.
The Timer Instruction will not be initialized even though the instance’s EN
input variable goes OFF. Consequently, the timer’s Completion Flag will not be
turned OFF if the EN input variable goes OFF after the timer started operat-
ing.
Body
0.00 FB1
EN ENO LD EN
TI M t i m U P
UP
If Timer Instructions are being used, always use the Always ON Flag (P_On)
for the EN input condition and include the instruction’s input condition within
the function block definition.
39
Restrictions on Function Blocks Section 2-3
P _On Body
FB1
EN ENO LD a
TI M t i m U P
0.00 a UP
Instruction
Instruction
Only One Instance per A program rung cannot have more than one instance.
Rung
Incorrect Incorrect
FB
FB FB
40
Restrictions on Function Blocks Section 2-3
No Function Block A function block’s input cannot be connected to another function block’s out-
Connections put. In this case, a variable must be registered to transfer the execution status
from the first function block’s output to the second function blocks input.
0.0
0.0
FB1 FB1
EN FB2 EN
XIN1 D3000
XOUT XOUT
0.0
D100 XIN2
FB2 Temporary variables
EN transfer the value from
FB1 to FB2.
D3000
XIN1
D100
XIN2
Downloading in Task Units Tasks including function blocks cannot be downloaded in task units, but
uploading is possible.
Programming When a user program created with the CX-Programmer is downloaded to the
Console Displays CPU Unit and read by a Programming Console, the instances will all be dis-
played as question marks. (The instance names will not be displayed.)
Online Editing The following online editing operations cannot be performed on the user pro-
Restrictions gram in the CPU Unit.
• Changing or deleting function block definitions (variable table or algo-
rithm)
• Inserting instances or changing instance names
Note The instance’s I/O parameters can be changed, instances can be
deleted, and instructions outside of an instance can be changed.
Error-related If a fatal error occurs in the CPU Unit while a function block definition is being
Restrictions executed, ladder program execution will stop at the point where the error
occurred.
Program FB definition
Instance name Body
LD P_On
0.0 FB 10.0
++ AAA
EN ENO
Fatal error occurs here.
MOV AAA BBB
D100 AAA BBB D200
In this case, the MOV AAA BBB instruction will not be executed and output
variable D200 will retain the same value that it had before the function block
was executed.
Prohibiting Access to To use a function block, the system requires memory areas to store the
FB Instance Areas instance’s internal variables and I/O variables.
Function block instance Initial value of Initial value Allowed data areas
area start address of size
Non-retained H512 896 CIO, WR, HR, DM, EM
Retained H1408 128 HR, DM, EM
Timer T3072 1,024 TIM
Counter C3072 1,024 CNT
41
Function Block Applications Guidelines Section 2-4
&50 PARA
42
Function Block Applications Guidelines Section 2-4
The address can be specified, but the address itself is not passed.
• Values are passed in a batch from the input parameters to the input vari-
ables before algorithm execution (not at the same time as the instruction
in the algorithm is executed). Therefore, to pass the value from a parame-
ter to an input variable when the instruction in the function block algorithm
is executed, use an internal variable or external variable instead of an
input variable.
Passing Values from or To paste into the program and then pass values outside (the program) from
Monitoring Output the function block for each instance, or monitor values, use output variables.
Variables
Program
Instance for function block definition A.
The actual value is
passed.
OK_Flag W0.00
Internal Variables: Variables that are not specified as Inputs, Outputs, or Externals are Internals.
Internally Allocated Internal variables include variables with internally allocated addresses, vari-
Variables and Variables ables requiring addresses with AT settings (e.g., I/O allocation addresses,
Requiring AT Settings
addresses specially allocated for Special I/O Units), or variables requiring
array settings. For details on conditions requiring AT settings or array settings,
refer to 2-4-3 AT Settings for Internal Variables, and 2-4-4 Array Settings for
Internal Variables.
43
Function Block Applications Guidelines Section 2-4
Note The method for specifying Index Registers for Special I/O Unit allo-
cation addresses requires AT settings to be specified for the first
address of the allocation area. (For details, refer to 2-4-5 Specifying
Addresses Allocated to Special I/O Units.)
• When Auxiliary Area bits that are not pre-registered to external variables
are used, and these bits are registered to global symbols that are not
specified as external variables.
• When setting the first destination word at the remote node for SEND(090)
and the first source word at the local node for RECV(098).
• When the instruction operand specifies the first or last of multiple words,
and internal array variable cannot be specified for the operand (e.g., the
number of array elements cannot be specified).
1,2,3... 1. Prepare an internal array variable with the required number of elements.
Note Make sure that the data size to be processed by the instruction is
the same as the number of elements. For details on the data sizes
processed by each instruction, refer to 2-6 Instruction Support and
Operand Restrictions.
2. Set the data in each of the array elements using the MOV instruction in the
function block definition.
3. Specify the first (or last) element of the array variable for the operand. This
enables specification of the first (or last) address in a range of words.
Examples are provided below.
Handling a Single String of Data in Multiple Words
In this example, an array contains the directory and filename (operand S2) for
an FREAD instruction.
• Variable table
Internal variable, data type = WORD, array setting with 10 elements, vari-
able names = filename[0] to filename[9]
• Ladder programming
MOV #5C31 file_name[0]
MOV #3233 file_name[1] Set data in each array element.
MOV #0000 file_name[2])
FREAD (omitted) (omitted) file_name[0] (omitted) Specify the first element
of the array in the instruction
operand.
44
Function Block Applications Guidelines Section 2-4
FREAD (omitted) read_num[0] (omitted) (omitted) Specify the first element of the array
in the instruction operand.
Division Using Integer A two-element array can be used to store the result from a ladder program’s
Array Variables (Ladder SIGNED BINARY DIVIDE (/) instruction. The result from the instruction is D
Programming Only) (quotient) and D+1 (remainder). This method can be used to obtain the remain-
der from a division operation in ladder programming.
Note When ST language is used, it isn’t necessary to use an array to receive the
result of a division operation. Also, the remainder can’t be calculated directly
in ST language. The remainder must be calculated as follows:
Remainder = Dividend − (Divisor × Quotient)
1,2,3... 1. Multiply the unit number (input variable) by &10, and create the unit num-
ber offset (internal variable, DINT data type).
2. Use the MOVR(560) (MOVE TO REGISTER) instruction to store the real I/
O memory address for the first allocation address (internal variable, AT =
CIO 2000) in the Index Register (e.g., IR0).
45
Function Block Applications Guidelines Section 2-4
3. Add the unit number offset to the real I/O memory address within the Index
Register (e.g., IR0).
Example 2: Specifying the Designated Bit in the CIO Area (e.g., CIO Word
n+a, Bit b)
Programs: Use either of the following methods.
• Word addresses: Specify the constant offset of the Index Register using
an indirect specification (e.g., +a,IR0).
• Bit addresses: Specify an instruction that can specify a bit address within
a word (e.g., &b in second operand of SETB instruction when writing and
TST instruction when reading).
Example: Special I/O Units
1) Specify the first CIO Area word n (n = CIO 2000 + unit number × 10)
Instance for function block definition A. Used constants:
Unit number (input variable, INT data type)
Offset (internal variable, DINT data type)
Relay (internal variable, WORD data type, 400 array elements, AT
setting = 2000)
&3 Unit No.
46
Function Block Applications Guidelines Section 2-4
MOVR(560)
IR@
Index Register
Example: Specifying +5,IR0 using
constant offset specification, not Specify address
variable name in IR0 I/O memory
Function block
Indirect +5 offset
specifi-
Instruction
cation Specify ad-
+5,IR0
a
dress at +5
IR0 offset from
IR0.
Note (1) When Index Registers IR0 to IR15 are used within function blocks, using
the same Index Register within other function blocks or in the program
outside of function blocks will create competition between the two in-
stances and the program will not execute properly. Therefore, when using
Index Registers (IR0 to IR15), always save the value of the Index Register
at the point when the function block starts (or before the Index Register
is used), and when the function block is completed (or after the Index
Register has been used), incorporate processing in the program to return
the Index Register to the saved value.
Example: Starting function block (or before using Index Register):
1. Save the value of IR (e.g., A).
Value A
Value A
IR0
IR0
(2) Always set the value before using Index Registers. Operation will not be
stable if Index Registers are used without the values being set.
47
Function Block Applications Guidelines Section 2-4
Application Examples The following examples are for using Index Registers IR0 to IR15 within func-
tion blocks.
Example Details
Saving the Index Register Value before Using Index Register When Index Registers are used within this
Store IR0 temporarily in backup buffer function block, processing to save the Index
Register value is performed when the func-
tion starts (or before the Index Register is
used) to enable the value to be returned to
the original Index Register value after the
function block is completed (or after the
Index Register is used).
Example: Save the contents of Index Regis-
ter IR0 by storing it in SaveIR[0] (internal
variable, data type DINT, 1 array element).
Using Index Registers Example: The real I/O memory address for
1) Setting the value in the Index Register. (Stores the real I/O memory the first word of CIO 1500 + unit number ×
address for first CIO Area word n) 25 allocated in the CPU Bus Unit allocation
area based on the CPU Bus Unit’s unit
number (&0 to &15) passed from the func-
tion block is stored in IR0.
Calculate offset address from unit number Procedure:
Assumes that unit numbers &0 to &15 have
already been input (from outside the func-
tion block) in UnitNo (input variables, INT
data type).
1. Multiple UnitNo by &25, and store in Off-
set (internal variable, DINT data type)
2. Store the real I/O memory address for
SCPU_Relay (internal variable, WORD
data type, (if required, specify the array as
400 elements (see note), AT setting =
1500)) in Index Register IR0.
Note Specifying an array for SCPU_relay,
such as SCPU_relay [2], for example,
enables the address CIO 1500 +
(UnitNo × &25) + 2 to be specified.
This also applies in example 2 below.
3. Increment the real I/O memory address
in Index Register IR0 by the value for the
variable Offset (variable UnitNo × &25).
48
Precautions for Instructions with Operands Specifying the First or Last of Multiple Section 2-5
Example Details
2) Specifying constant offset of Index Register (Specifying a bit between The real I/O memory address for CIO 1500
CIO n+0 to n+24) + (UnitNo × &25) is stored in Index Register
IR0 by the processing in step 1 above.
Therefore the word address is specified
using the constant offset from IR0.
For example, specifying +2,IR0 will specify
CIO 1500 + (UnitNo × &25) + 2.
Note CIO 1500 + (UnitNo × &25) + 2 can
also by specified by specifying
SCPU_relay [2] using the array set-
ting with SCPU_relay.
Specify bit addresses using instructions that
can specify bit addresses within words
(e.g., second operand of TST(350/351)/
SETB(532) instructions).
Check local node data link participation Example: Variable NodeSelf_OK turns ON
when NetCheck_OK (internal variable,
BOOL data type) is ON and bit 15 of the
word at the +6 offset from IR0 (CIO 1500 +
UnitNo × &25 +6) is ON.
Returning the Index Register to the Prior Value The Index Register returns to the original
Restore data to IR0 from temporary backup buffer value after this function block is completed
(or after the Index Register has been used).
Example: The value for variable SaveIR[0]
that was saved is stored in Index Register
IR0, and the value is returned to the con-
tents from when this function started (or
prior to using the Index Register).
49
Precautions for Instructions with Operands Specifying the First or Last of Multiple Section 2-5
50
Precautions for Instructions with Operands Specifying the First or Last of Multiple Section 2-5
51
Instruction Support and Operand Restrictions Section 2-6
Example: H710
Example: H810
20 words will be
transferred regard- The variables allocated in this area
less of the size of ar- (H810 to H819 in this example) are
Example: H719 ray variables a and b. overwritten. The data is variable-
length data, so the CX-Programmer
Example: H819 will not output a compile error.
52
Instruction Support and Operand Restrictions Section 2-6
53
Instruction Support and Operand Restrictions Section 2-6
Logic block
54
Instruction Support and Operand Restrictions Section 2-6
S
N
S
N
55
Instruction Support and Operand Restrictions Section 2-6
MULTIPLE BIT RSTA 531 D: Beginning word UINT Yes (not fixed)
RESET RSTA
@RSTA N1: Beginning bit UINT ---
D
N2: Number of bits UINT ---
N1
N2
56
Instruction Support and Operand Restrictions Section 2-6
JUMP JMP 004 Not supported in function N: Jump number --- ---
blocks
JUMP END JME 005 Not supported in function N: Jump number --- ---
blocks
CONDITIONAL CJP 510 Not supported in function N: Jump number --- ---
JUMP blocks
CONDITIONAL CJPN 511 Not supported in function N: Jump number --- ---
JUMP blocks
MULTIPLE JMP0 515 --- --- ---
JUMP JMP0
57
Instruction Support and Operand Restrictions Section 2-6
ONE-MS TIMER TMHH 540 Not supported in function N: Timer number TIMER ---
(BCD) blocks. S: Set value WORD ---
TMHHX 552 Not supported in function N: Timer number TIMER ---
(BIN) blocks. S: Set value UINT ---
ACCUMULA- TTIM 087 N: Timer number TIMER ---
TTIM
TIVE TIMER (BCD) S: Set value WORD ---
N
S
58
Instruction Support and Operand Restrictions Section 2-6
Note Enabled when the same variable is specified for N1 and N2.
59
Instruction Support and Operand Restrictions Section 2-6
Symbol, option
S1
S2
Using OR:
Symbol, option
S1
S2
Symbol Compari- LD,AND, OR 301 (=) --- S1: Comparison UDINT ---
son (Double-word, + 306 (<>) data 1
unsigned) =, <>, <, <=, S2: Comparison UDINT ---
>, >= 311 (<)
data 2
+ 316 (<=)
L 321 (>)
326 (>=)
Symbol Compari- LD,AND, OR 302 (=) --- S1: Comparison INT ---
son (Signed) + 307 (<>) data 1
=, <>, <, <=, S2: Comparison INT ---
>, >= 312 (<)
data 2
+ 317 (<=)
S 322 (>)
327 (>=)
Symbol Compari- LD,AND, OR 303 (=) --- S1: Comparison DINT ---
son (Double-word, + 308 (<>) data 1
signed) =, <>, <, <=, S2: Comparison DINT ---
>, >= 313 (<)
data 2
+ 318 (<=)
SL 323 (>)
328 (>=)
UNSIGNED COM- CMP 020 S1: Comparison UINT ---
CMP
PARE !CMP data 1
S1 S2: Comparison UINT ---
S2 data 2
60
Instruction Support and Operand Restrictions Section 2-6
MULTIPLE MCMP 019 S1: 1st word of set WORD Yes (16)
MCMP 1
COMPARE @MCMP
S1 S2: 1st word of set WORD Yes (16)
S2 2
R R: Result word UINT
61
Instruction Support and Operand Restrictions Section 2-6
OR:
Symbol
C
S1
S2
62
Instruction Support and Operand Restrictions Section 2-6
63
Instruction Support and Operand Restrictions Section 2-6
64
Instruction Support and Operand Restrictions Section 2-6
65
Instruction Support and Operand Restrictions Section 2-6
ONE DIGIT SRD 075 St: Starting word UINT Yes (not fixed)
SRD
SHIFT RIGHT @SRD E: End word UINT Yes (not fixed)
St
E
66
Instruction Support and Operand Restrictions Section 2-6
67
Instruction Support and Operand Restrictions Section 2-6
DOUBLE BCD ADD +BL 405 Au: 1st augend DWORD ---
WITHOUT CARRY @+BL +BL word
Au Ad: 1st addend DWORD ---
Ad word
R R: 1st result word DWORD ---
BCD ADD WITH +BC 406 Au: Augend word WORD ---
CARRY +BC
@+BC Ad: Addend word WORD ---
Au
R: Result word WORD ---
Ad
R
DOUBLE BCD ADD +BCL 407 Au: 1st augend DWORD ---
WITH CARRY +BCL word
@+BCL
Au Ad: 1st addend DWORD ---
Ad word
R R: 1st result word DWORD ---
68
Instruction Support and Operand Restrictions Section 2-6
69
Instruction Support and Operand Restrictions Section 2-6
70
Instruction Support and Operand Restrictions Section 2-6
71
Instruction Support and Operand Restrictions Section 2-6
72
Instruction Support and Operand Restrictions Section 2-6
DATA ENCODER DMPX 077 S: 1st source word UINT Yes (not
DMPX fixed)
@DMPX
S R: Result word UINT ---
R C: Control word UINT ---
C
ASCII TO HEX HEX 162 S: 1st source word UINT Yes (2)
HEX
@HEX Di: Digit designator UINT ---
S
D: Destination word UINT Yes (not
Di fixed)
D
COLUMN TO LINE LINE 063 S: 1st source word WORD Yes (16)
LINE
@LINE N: Bit number UINT ---
S
D: Destination word UINT ---
N
D
73
Instruction Support and Operand Restrictions Section 2-6
74
Instruction Support and Operand Restrictions Section 2-6
75
Instruction Support and Operand Restrictions Section 2-6
76
Instruction Support and Operand Restrictions Section 2-6
77
Instruction Support and Operand Restrictions Section 2-6
78
Instruction Support and Operand Restrictions Section 2-6
Symbol, option
S1
S2
Using OR:
Symbol, option
S1
S2
79
Instruction Support and Operand Restrictions Section 2-6
80
Instruction Support and Operand Restrictions Section 2-6
DOUBLE ARC SINE ASIND 854 S: 1st source word LREAL ---
ASIND
@ASIND R: 1st result word LREAL ---
S
R
DOUBLE ARC TAN- ATAND 856 S: 1st source word LREAL ---
ATAND
GENT @ATAND R: 1st result word LREAL ---
S
R
81
Instruction Support and Operand Restrictions Section 2-6
DOUBLE SYMBOL LD, AND, 335 (=D) Using LD: S1:Comparoson LREAL ---
COMPARISON OR 336 (<>D) data 1
+ 337 (<D) Symbol, option S2:Comparison LREAL ---
=D, <>D, <D, data 2
338 (<=D) S1
<=D, >D,
>=D 339 (>D) S2
340 (>=D)
Using AND:
Symbol, option
S1
S2
Using OR:
Symbol, option
S1
S2
82
Instruction Support and Operand Restrictions Section 2-6
83
Instruction Support and Operand Restrictions Section 2-6
STACK SIZE READ SNUM 638 TB: First stack UINT Yes (not
SNUM
@SNUM address fixed)
TB D: Destination word UINT ---
D
STACK DATA READ SREAD 639 TB: First stack UINT Yes (not
SREAD address fixed)
@SREAD
TB C: Offset value UINT ---
C D: Destination word UINT ---
D
STACK DATA SWRIT 640 TB: First stack UINT Yes (not
OVERWRITE SWRIT address fixed)
@SWRIT
TB C: Offset value UINT ---
C S: Source data UINT ---
S
STACK DATA SINS 641 TB: First stack UINT Yes (not
INSERT SINS address fixed)
@SINS
TB C: Offset value UINT ---
C S: Source data UINT ---
S
STACK DATA SDEL 642 TB: First stack UINT Yes (not
DELETE SDEL address fixed)
@SDEL
TB C: Offset value UINT ---
C D: Destination word UINT ---
D
84
Instruction Support and Operand Restrictions Section 2-6
85
Instruction Support and Operand Restrictions Section 2-6
86
Instruction Support and Operand Restrictions Section 2-6
87
Instruction Support and Operand Restrictions Section 2-6
88
Instruction Support and Operand Restrictions Section 2-6
89
Instruction Support and Operand Restrictions Section 2-6
TEN KEY INPUT TKY 211 I: Data input word UINT ---
TKY
D1: 1st register UDINT ---
I word
D1 D2: Key input word UINT ---
D2
7-SEGMENT DIS- 7SEG 214 S: 1st source word WORD Yes (2)
PLAY OUTPUT 7SEG
O: Output word UINT ---
S
C: Control data UINT ---
O
D: System word WORD ---
C
D
90
Instruction Support and Operand Restrictions Section 2-6
91
Instruction Support and Operand Restrictions Section 2-6
92
Instruction Support and Operand Restrictions Section 2-6
EXPLICIT MESSAGE EXPLT 720 S: 1st word of send WORD Yes (not
SEND EXPLT message fixed)
S D: 1st word of WORD Yes (not
D received message fixed)
C C: 1st control word LWORD Yes (4)
WORD
must be
used
when
array vari-
ables are
required.
EXPLICIT GET EGATR 721 S: 1st word of send ULINT Yes (4)
ATTRIBUTE EGATR message WORD
S must be
D used
when
C array vari-
ables are
required.
D: 1st word of WORD Yes (not
received message fixed)
C: 1st control word LWORD Yes (4)
message
93
Instruction Support and Operand Restrictions Section 2-6
94
Instruction Support and Operand Restrictions Section 2-6
95
Instruction Support and Operand Restrictions Section 2-6
96
Instruction Support and Operand Restrictions Section 2-6
97
Instruction Support and Operand Restrictions Section 2-6
98
Instruction Support and Operand Restrictions Section 2-6
99
Instruction Support and Operand Restrictions Section 2-6
100
Instruction Support and Operand Restrictions Section 2-6
101
Instruction Support and Operand Restrictions Section 2-6
CLEAR STRING CLR$ 666 S: Text string first UINT Yes (not
CLR$ word fixed)
@CLR$
S
INSERT INTO INS$ 657 S1: Base text string UINT Yes (not
STRING INS$ first word fixed)
@INS$
S1 S2: Inserted text UINT Yes (not
S2 string first word fixed)
S3 S3: Beginning posi- UINT ---
tion
D
D: First destination UINT Yes (not
word fixed)
String Comparison LD,AND, OR 670 (=$) S1: Text string 1 UINT Yes (not
Symbol
+ 671 (<>$) fixed)
=$,<>$,<$,< 672 (<$) S1 S2: Text string 2 UINT Yes (not
=$,>$,>=$ S2 fixed)
673 (<=$)
674 (>$)
675 (>=$)
102
Instruction Support and Operand Restrictions Section 2-6
DATA COLLECT COLLC 567 S1: Source base WORD Yes (not
COLLC address fixed)
@COLLC
S1 S2: Offset (in BCD) WORD ---
S2 D: Destination word WORD ---
D
103
CPU Unit Function Block Specifications Section 2-7
2-7-1 Specifications
CS1-H CPU Unit
Item Specification
Model CS1H- CS1H- CS1H- CS1H- CS1H- CS1G- CS1G- CS1G- CS1G-
CPU67H CPU66H CPU65H CPU64H CPU63H CPU45H CPU44H CPU43H CPU42H
I/O bits 5,120 1,280 960
Program capacity 250K 120K 60K 30K 20K 60K 30K 20K 10K
(steps)
Data memory 32K words
104
CPU Unit Function Block Specifications Section 2-7
Item Specification
Extended Data 32K 32K 32K 32K words × 1 bank 32K 32K words × 1 bank
Memory words × words × words × E0_00000 to words × E0_00000 to E0_32767
13 banks 7 banks 3 banks E0_32767 3 banks
E0_00000 E0_00000 E0_00000 E0_00000
to to to to
EC_32767 E6_32767 E2_32767 E2_32767
Function Maxi- 1,024 1,024 1,024 1,024 128 1,024 1,024 128 128
blocks mum
number of
definitions
Maxi- 2,048 2,048 2,048 2,048 256 2,048 2,048 256 256
mum
number of
instances
Flash Function 1,664 1,664 1,024 512 512 1,024 512 512 512
memory block pro-
gram
memory
(Kbytes)
Com- 128 128 64 64 64 64 64 64 64
ment files
(Kbytes)
Program 128 128 64 64 64 64 64 64 64
index files
(Kbytes)
Variable 128 128 128 64 64 128 64 64 64
tables
(Kbytes)
105
CPU Unit Function Block Specifications Section 2-7
Item Specification
Flash Function 1,664 1,664 1,024 1,024 512 512 512
memory block pro-
gram
memory
(Kbytes)
Com- 128 128 64 64 64 64 64
ment files
(Kbytes)
Program 128 128 64 64 64 64 64
index files
(Kbytes)
Variable 128 128 128 128 64 64 64
tables
(Kbytes)
106
CPU Unit Function Block Specifications Section 2-7
Item Specification
Units with internal I/O functions Units without internal I/O functions
Function Maxi- 128
blocks mum
number of
definitions
Maxi- 256
mum
number of
instances
Flash Function 256
memory block pro-
gram
memory
(Kbytes)
Com- 64
ment files
(Kbytes)
Program 64
index files
(Kbytes)
Variable 64
tables
(Kbytes)
Selecting the Option If this option is selected, all timers will operate the same regardless of timer
(Default) number, as shown in the following table.
Timer Operation for Timer Numbers T0000 to T4095
Refresh Description
When instruction is The PV is refreshed each time the instruction is executed.
executed If the PV is 0, the Completion Flag is turned ON. If it is not 0,
the Completion Flag is turned OFF.
When execution of all All PV are refreshed once each cycle.
tasks is completed
Every 80 ms If the cycle time exceeds 80 ms, all PV are refreshed once
every 80 ms.
Not Selecting the If this option is not selected, the refreshing of timer instructions with timer
Option numbers T0000 to T2047 will be different from those with timer numbers
T2048 to T4095, as given below. This behavior is the same for CPU Units that
do not support function blocks. (Refer to the descriptions of individual instruc-
tion in the CS/CJ Series Instruction Reference for details.)
107
Number of Function Block Program Steps and Instance Execution Time Section 2-8
Select the Apply the same spec as TO-2047 to T2048-4095 Option to ensure
consistent operation when using the timer numbers allocated by default to
function block variables (T3072 to T4095).
Note The number of instruction steps in the function block definition (p) will not be
diminished in subsequence instances when the same function block definition
is copied to multiple locations (i.e., for multiple instances). Therefore, in the
above equation, the number of instances is not multiplied by the number of
instruction steps in the function block definition (p).
108
Number of Function Block Program Steps and Instance Execution Time Section 2-8
Example:
Input variables with a 1-word data type (INT): 5
Output variables with a 1-word data type (INT): 5
Function block definition section: 100 steps
Number of steps for 1 instance = 57 + (5 + 5) × 6 steps + 100 steps + 27 steps
= 244 steps
2-8-2 Function Block Instance Execution Time (CPU Units with Unit
Version 3.0 or Later)
Use the following equation to calculate the effect of instance execution on the
cycle time when function block definitions have been created and the
instances copied into the user program using CS/CJ-series CPU Units with
unit version 3.0 or later.
Effect of Instance Execution on Cycle Time
= Startup time (A)
+ I/O parameter transfer processing time (B)
+ Execution time of instructions in function block definition (C)
Example: CS1H-CPU63H
Input variables with a 1-word data type (INT): 3
Output variables with a 1-word data type (INT): 2
Total instruction processing time in function block definition section: 10 µs
Execution time for 1 instance = 6.8 µs + (3 + 2) × 0.3 µs + 10 µs = 18.3 µs
109
Number of Function Block Program Steps and Instance Execution Time Section 2-8
Note The execution time is increased according to the number of multiple instances
when the same function block definition has been copied to multiple locations.
110
SECTION 3
Creating Function Blocks
This section describes the procedures for creating function blocks on the CX-Programmer.
111
Procedural Flow Section 3-1
1,2,3... 1. Start the CX-Programmer and select New from the File Menu.
2. Select a Device type: CS1G-H, CS1H-H, CJ1G-H, CJ1H-H, or CJ1M.
■ Reusing an Existing CX-Programmer Project
1,2,3... 1. Start the CX-Programmer, and read the existing project file (.cxp) created
using CX-Programmer Ver. 4.0 or earlier by selecting the file from the File
Menu.
2. Select a Device type: CS1H-H, CS1G-H, CJ1G-H, CJ1H-H, or CJ1M.
Create a Function Block Refer to 3-2-2 Creating a New Function Block Definition for details.
Definition
1,2,3... 1. Place the cursor at the location at which to create an instance (i.e., a copy)
of the function block and press the F Key.
2. Input the name of the instance.
3. Select the function block definition to be copied.
■ Registering Instance Names in the Global Symbol Table and then
Selecting the Instance Name when Inserting
1,2,3... 1. Select Function Block as the data type for the variable in the global symbol
table.
2. Press the F Key in the Ladder Section Window.
3. Select the name of the instance that was registered from the pull-down
menu on the FB Instance Field.
112
Procedural Flow Section 3-1
Allocate External I/O to Refer to 3-2-5 Setting Function Block Parameters Using the P Key for details.
the Function Block
1,2,3... 1. Place the cursor at the position of the input variable or output variable and
press the P Key.
2. Input the source address for the input variable or the destination address
for the output variable.
Set the Function Block Refer to 3-2-6 Setting the FB Instance Areas for details.
Memory Allocations
(Instance Areas)
1,2,3... 1. Select the instance and select Function Block Memory - Function Block
Memory Allocation from the PLC Menu.
2. Set the function block memory allocations.
113
Procedures Section 3-2
3-2 Procedures
Press the Settings Button and select the CPU Type. For details on other
settings, refer to the CX-Programmer Ver. 5.0 Operation Manual (W414).
114
Procedures Section 3-2
Note To specify the default folder (file location) in the Function Block Li-
brary File Dialog Box, select Tools - Options, select the General
Tab and the select the default file in the OMRON FB library storage
location field.
3. Specify the folder in which the OMRON FB Library file is located, select the
library file, and click the Open Button. The library file will be inserted as a
function block definition after the .
115
Procedures Section 3-2
Variable table
Structured Text
Variable table
ST input area
116
Procedures Section 3-2
Variable table
Ladder program
Note Function block definitions are not displayed in the default settings for OMRON
FB Library files (.cxf). To display definitions, select the Display the inside of
FB option in the function block properties. (Select the OMRON FB Library file
in the project workspace, right-click, select Properties, and select the Dis-
play the inside of FB option in the General Tab.)
1,2,3... 1. Make the sheet for the type of variable to be registered active in the vari-
able table. (See note.) Place the cursor in the sheet, right-click, and per-
form either of the following operations:
• To add a variable to the last line, select Insert Variable from the popup
menu.
• To add the variable to the line above or below a line within the list, se-
lect Insert Variable - Above or Below from the popup menu.
Note The sheet where a variable is registered can also be switched
when inserting a variable by setting the usage (N: Internals, I: In-
puts, O: Outputs, E: Externals).
The New Variable Dialog Box shown below will be displayed.
• Name: Input the name of the variable.
• Data Type: Select the data type.
• Usage: Select the variable type.
• Initial Value: Select the initial value of the variable at the start of oper-
ation.
• Retain: Select if the value of the variable is to be maintained when the
power is turned ON or when the operating mode is changed from
PROGRAM or MONITOR mode to RUN mode. The value will be
cleared at these times if Retain is not selected.
117
Procedures Section 3-2
Note (a) For user-defined external variables, the global symbol table can
be browsed by registering the same variable name in the global
symbol table.
(b) External variables defined by the system are registered in the ex-
ternal variable table in advance.
2. For example, input “aaa” as the variable name and click the OK Button.
As shown below, a BOOL variable called aaa will be created on the Inputs
Sheet of the Variable Table.
Note (1) After a variable is added, it can be selected to display in reverse video,
then moved to another line by dragging and dropping. To select a variable
for dragging and dropping, select the variable in any of the columns ex-
cept the Name field.
(2) After inputting a variable, to move to the registered sheet, double-click,
and switch the setting in the Usage field (N: Internals, I: Inputs, O: Out-
puts, E: Externals). The variable can also be copied or moved between
the sheets for internal, external, input, and output variables. Select the
variable, right-click, and select Copy or Cut from the pop-up menu, and
then select Paste.
(3) Variable names must also be input for variables specified with AT (allocat-
ing actual address) settings.
(4) The following text is used to indicate I/O memory addresses in the PLC
and thus cannot be input as variable names in the function block variable
table.
• A, W, H, HR, D, DM, E, EM, T, TIM, C, or CNT followed by a numeric
value
118
Procedures Section 3-2
1,2,3... 1. Press the C Key and select aaa registered earlier from the pull-down menu
in the New Contact Dialog Box.
2. Click the OK Button. A contact will be entered with the function block inter-
nal variable aaa as the operand (variable type: internal).
The rest of the ladder program is input in exactly the same way as for stan-
dard programs with CX-Programmer.
Note Addresses cannot be directly input for instruction operands within function
blocks. Only Index Registers (IR) and Data Registers (DR) can be input
directly as follows (not as variables): Addresses DR0 to DR5, direct specifica-
tions IR0 to IR15, and indirect specifications ,IR0 to ,IR15.
Using Structured Text
An ST language program (see note) can either be input directly into the ST
input area or a program input into a general-purpose text editor can be copied
and then pasted into the ST input area using the Paste Command on the Edit
Menu.
Note The ST language conforms to IEC61131-3. Refer to Appendix B Structured
Text (ST Language) Specifications for details.
119
Procedures Section 3-2
Note (1) Tabs or spaces can be input to create indents. They will not affect the al-
gorithm.
(2) The display size can be changed by holding down the Ctrl Key and turn-
ing the scrolling wheel on a wheel mouse.
(3) When an ST language program is input or pasted into the ST input area,
syntax keywords reserved words will be automatically displayed in blue,
comments in green, errors in red, and everything else in black.
(4) To change the font size or colors, select Options from the Tools Menu
and then click the ST Font Button on the Appearance Tab Page. The font
names, font size (default is 8 point) and color can be changed.
(5) For details on structured text specifications, refer to Appendix B Struc-
tured Text (ST Language) Specifications.
1,2,3... 1. Press the C Key and input a variable name that has not been registered,
such as aaa, in the New Contact Dialog Box.
Note Addresses cannot be directly input for instruction operands within
function blocks. Only Index Registers (IR) and Data Registers (DR)
can be input directly as follows (not as variables): Addresses DR0
to DR5, direct specifications IR0 to IR15, and indirect specifications
,IR0 to ,IR15.
2. Click the OK Button. The New Variable Dialog Box will be displayed. With
special instructions, a New Variable Dialog Box will be display for each op-
erand in the instruction.
120
Procedures Section 3-2
The properties for all input variables will initially be displayed as follows:
• Usage: Internal
• Data Type: BOOL for contacts and WORD for channel (word)
• Initial Value: The default for the data type.
• Retain: Not selected.
3. Make any required changes and click the OK Button.
4. As shown below, the variable that was registered will be displayed in the
variable table above the program.
5. If the type or properties of a variable that was input are not correct, double-
click the variable in the variable table and make the required corrections.
■ Reference Information
AT Settings (Specified Address)
AT settings can be made in the variable properties to specify allocation
addresses for Basic I/O Units, Special I/O Units, or CPU Bus Units, or Auxil-
iary Area addresses not registered using the CX-Programmer. A variable
name is required to achieve this. Use the following procedure to specify an
address.
1,2,3... 1. After inputting the variable name in the New Variable Dialog Box, click the
Advanced Button. The Advanced Settings Dialog Box will be displayed.
2. Select AT (Specified Address) under AT Settings and input the desired ad-
dress.
The variable name is used to enter variables into the algorithm in the func-
tion block definition even when they have an address specified for the AT
settings (the same as for variables without a specified address).
For example, if a variable named Restart has an address of A50100 spec-
ified for the AT settings, Restart is specified for the instruction operand.
Array Settings
An array can be specified to use the same data properties for more than one
variable and manage the variables as a group.
Use the following procedure to set an array.
121
Procedures Section 3-2
1,2,3... 1. After inputting the variable name in the New Variable Dialog Box, click the
Advanced Button. The Advanced Settings Dialog Box will be displayed.
2. Select Array Variable in the Array Settings and input the maximum number
of elements in the array.
When the name of an array variable is entered in the algorithm in the func-
tion block definition, square brackets surrounding the index will appear af-
ter the array name.
For example, if you create a variable named PV with a maximum of 3 ele-
ments, PV[0], PV[1], and PV[2] could be specified as instruction operands.
There are three ways to specify indices.
• Directly with numbers, e.g., PV[1] in the above example (for ladder pro-
gramming or ST language programming)
• With a variable, e.g., PV[a] in the above example, where “a” is the
name of a variable with a data type of INT (for ladder programming or
ST language programming)
• With an equation, e.g., PV[a+b] or PV[a+1} in the above example,
where “a” and “b” are the names of variables with a data type of INT
(for ST language programming only)
Using Structured Text When using structured text, a dialog box will not be displayed to register the
variable whenever a variable name that has not been registered is input. Be
sure to always register variables used in standard text programming in the
variable table, either as you need them or after completing the program.
(Place the cursor in the tab page on which to register the variable, right-click,
and select Insert Variable from the popup menu.
Note For details on structured text specifications, refer to Appendix B Structured
Text (ST Language) Specifications.
122
Procedures Section 3-2
Source Instruction Automatically generate symbol name Option Selected in Symbols Tab
Operand: Address and I/O under Options in Tools Menu
Comment
The user program symbol names (in the global symbol table only) will be gen-
erated automatically as AutoGen_ + Address (if the option is deselected, the
symbol names will be removed).
Example 1: For address 100.01, the symbol name will be displayed as
AutoGen_100_01.
Example 2: For address D0, the symbol name will be displayed as
AutoGen_D0.
If circuits in the user program are copied and pasted into the function block
definition program as is, the symbols will be registered automatically in the
function block definition symbol table (at the same time as copying the cir-
cuits) as the symbol name AutoGen_Address and I/O comments as Com-
ment. This function enables programmed circuits to be easily reused in
function blocks as addresses and I/O comments.
Note The prefix AutoGen_ is not added to Index Registers (IR) and Global Data
Registers (DR), and they cannot be registered in the original global symbol
table.
Automatically generate symbol name Option Not Selected in Symbols
Tab under Options in Tools Menu
Addresses and I/O comments are not registered in the function block defini-
tion variable tables. Addresses are displayed in the operand in red. I/O com-
ments will be lost. Double-click on the instruction and input the symbol name
into the operand.
Index Registers (IR) and Data Registers (DR), however, do not require modifi-
cation after pasting and function in the operand as is.
Source Instruction The user program symbol is automatically registered in the internal variables
Operand: Symbol of the function block definition variable table. This operation, however, is sub-
ject to the following restrictions.
Addresses
Symbol addresses are not registered. Use AT settings to specify the same
address.
Symbol Data Types
The symbol data types are converted when pasted from the user program into
the function block definition, as shown in the following table.
Symbol data type in user program → Variable data type after pasting in
function block program
CHANNEL → WORD
NUMBER → The variable will not be registered,
and the value (number) will be pasted
directly into the operand as a con-
stant.
UINT BCD → WORD
UDINT BCD → DWORD
ULINT BCD → LWORD
Symbol data types CHANNEL, NUMBER, UINT BCD, UDINT BCD, or ULINT
BCD, however, cannot be copied from the symbol table (not the program) and
then pasted into the variable table in the function block definition.
123
Procedures Section 3-2
■ Method 1: Using the F Key in the Ladder Section Window and Inputting
the Instance Name
1,2,3... 1. In the Ladder Section Window, place the cursor in the program where the
instance is to be inserted and press the F Key. (Alternately, select Func-
tion Block Invocation from the Insert Menu.) The New Function Block In-
vocation Dialog Box will be displayed.
2. Input the instance name, select the function block from which to create an
instance, and click the OK Button.
Instance name
Function block definition
An instance called sample
is created from the function
block definition called
FunctionBlock1.
124
Procedures Section 3-2
1,2,3... 1. Select a data type of Function block in the global symbol table, input the
instance name, and registered the instance.
2. Press the F Key in the Ladder Section Window. The Function Block Invo-
cation Dialog Box will be displayed.
3. Select the instance name that was previously registered from the pulldown
menu on the FB Instance Field. The instance will be created.
Restrictions
Observe the following restrictions when creating instances. Refer to 2-3
Restrictions on Function Blocks for details.
• No more than one function block can be created in each program circuit.
• The rung cannot be branched to the left of an instance.
• Instances cannot be connected directly to the left bus bar, i.e., an EN
must always be inserted.
Note If changes are made in the I/O variables in a variable table for a function block
definition, the bus bar to the left of all instances that have been created from
that function block definition will be displayed in red to indicate an error. When
this happens, select the function block, right-click, and select Update Invoca-
tion. The instance will be updated for any changes that have been made in
the function block definition and the red bus bar display indicating an error will
be cleared.
Note (a) The function block’s input variable data size and the program’s
symbol data size must match.
(b) The function block’s output variable data size and the program’s
symbol data size must match.
1,2,3... 1. Inputs are located on the left of the instance and outputs on the right. Place
the cursor where the parameter is to be set and press the P Key. (Alter-
nately, select Function Block Parameter from the Insert Menu.) The New
Parameter Dialog Box will be displayed as shown below.
125
Procedures Section 3-2
Instance name
Function block definition
2. Set the source address from which to pass the address data to the input
variable. Also set the destination address to which the address data will be
passed from the output variable.
Note Set the data in all the input parameters. If even a single input parameter
remains blank, the left bus bar for the instance will be displayed in red to indi-
cate an error. If this happens, the program cannot be transferred to the CPU
Unit.
126
Procedures Section 3-2
Note If a non-boolean data type is used for the input variable and only a numerical
value (e.g., 20) is input, the value for the CIO Area address (e.g, CIO 0020)
will be passed, and not the numerical value. To set a numerical value, always
insert an &, #, + or − prefix before inputting the numerical value.
Example Programs:
Instance for function block definition A
( INT )
10 DATA_1
( INT )
&10 DATA_1
If the data format for DATA_1 is INT, and the prefix &
is added so that "&10" is input, the numerical value
will be passed.
If the input variable data type is boolean and a numerical value only (e.g.,
0 or 1) is input in the parameter, the value for CIO 000000 (0.00) or
CIO 000001 (0.01) will be passed. Always input P_Off for 0 (OFF) and
P_On for 1 (ON).
127
Procedures Section 3-2
1,2,3... 1. Select the instance in the Ladder Section Window or in the global symbol
table, and then select Function Block Memory - Function Block Memo-
ry Allocation from the PLC Menu.
The Function Block Memory Allocation Dialog shown below will appear.
2. Set the FB instance areas.
Non-retained area
Retained area
Timer area
Counter area
The non-retained and retained areas are set in words. The timer and
counter areas are set by time and counter numbers.
The default values are as follows:
FB Instance Default value Applicable memory
Area Start Address End Address Size areas
Non Retain H512 (See H1407 (See 896 CIO, WR, HR, DM, EM
(See notes 1 note 2.) note 2.)
and 3.)
Retain (See H1408 (See H1535 (See 128 HR, DM, EM
note 1.) note 2.) note 2.)
Timers T3072 T4095 1024 TIM
Counters C3072 C4095 1024 CNT
Note (1) Bit data can be accessed even if the DM or EM Area is specified for the
non-retained area or retained area.
(2) The Function Block Holding Area words are allocated in H512 to H1535.
These words cannot be specified in instruction operands in the user pro-
gram. These words can also not be specified in the internal variable’s AT
settings.
(3) Words H512 to H1535 are contained in the Holding Area, but the ad-
dresses set as non-retained will be cleared when the power is turned
OFF and ON again or when operation is started.
(4) To prevent overlapping of instance area addresses and addresses used
in the program, set H512 to H1535 (Function Block Holding Area words)
for the non-retained area and retained area. If another area is set, the ad-
dresses may overlap with addresses that are used in the user program.
If the addresses in the function block instance areas overlap with any of
the addresses used in the user program, an error will occur when compil-
ing. This error will also occur when a program is downloaded, edited on-
line, or checked by the user.
128
Procedures Section 3-2
If addresses are duplicated and an error occurs, either change the function
block instance areas or the addresses used in the user program.
Right-click on the instance name and select Function Block Instance Address.
3. The FB Interface Memory Dialog Box will be displayed. Check the I/O
memory addresses internally allocated to variables here.
Example: Addresses used internally
for the input variables.
129
Procedures Section 3-2
Checking the Status of The following procedure can be used to check the number of addresses allo-
Addresses Internally cated to variables and the number still available for allocation in the function
Allocated to Variables block instance areas.
1,2,3... 1. Select the instance in the Ladder Section Window, right-click, and select
Function Block Memory - Function Block Memory Statistics from the
PLC Menu.
2. The Function Block Memory Statistics Dialog Box will be displayed as
shown below. Check address usage here.
Optimizing Function When a variable is added or deleted, addresses are automatically re-allocated
Memory in the variables’ instance area. Consecutive addresses are required for each
instance, so all of the variables will be allocated to a different block of
addresses if the original block of addresses cannot accommodate the change
in variables. This will result in an unused block of addresses. The following
procedure can be used to eliminate the unused areas in memory so that
memory is used more efficiently.
1,2,3... 1. Select the instance in the Ladder Section Window, right-click, and select
Function Block Memory - Optimize Function Memory from the PLC
Menu.
The following dialog box will be displayed.
2. Click the OK Button. Allocations to the function block instance areas will
be optimized.
130
Procedures Section 3-2
1,2,3... Right-click the instance and select Go To - Function Block Definition from
the popup menu. The function block definition will be displayed.
• The Used FB, Free FB, and Total fields under Function Block refer to the
size of the function block definitions. The values are displayed in step
units. 1 step = 4 bytes, so the function block source memory capacity (K
bytes) in the CPU Unit’s internal flash memory is the value multiplied by
1,024 and divided by 4.
• The Used #, Free #, and Max # fields under Function Block refer to the
number of function block definitions.
1,2,3... Select the function block definition, right-click, and select Compile from the
popup menu. (Alternately, press the Ctrl + F7 Keys.)
The function block will be compiled and the results of the program check will
be automatically displayed on the Compile Table Page of the Output Window.
131
Procedures Section 3-2
1,2,3... 1. Double-click the function block definition to be printed, and with the vari-
able table and algorithm displayed, select Print from the File Menu. The
following Target Print Rung Dialog Box will be displayed.
2. Select the All Rung or Select Rung option. When the Select Rung option
is selected, specify the start rung and end rung numbers. When a page
number has been specified in the header and footer fields in File - Page
Setup, the first page number can be specified.
3. Select either of the following options for the function block printing range.
• Symbol table and program (default)
• Symbol table
• Program
4. Click the OK Button, and display the Print Dialog Box. After setting the
printer, number of items to print and the paper setting, click the OK button.
5. The following variable table followed by the algorithm (e.g, ladder program-
ming language) will be printed.
132
Procedures Section 3-2
Note For details on print settings, refer to the section on printing in the CX-Pro-
grammer Ver. 5.0 Operation Manual (W437).
1,2,3... 1. Select the function block definition, right-click, and select Save Function
Block to File from the popup menu. (Alternately, select Function Block -
Save Function Block to File from the File Menu.)
2. The following dialog box will be displayed. Input the file name. Function
Block Library Files (*.cxf) should be selected as the file type.
Reading Function Block Use the following procedure to read a function block library file (*.cxf) into a
Library Files into Other project.
Projects
1,2,3... 1. Select the function block definition item under the PLC directory in the
Project Workspace, right-click, and select Insert Function Block - From
File from the popup menu (or select File - Function Block - Load Func-
tion Block from File).
2. The following dialog box will be displayed. Select a function block library
file (*.cxf) and click the Open Button.
133
Procedures Section 3-2
1,2,3... Right-click the instance and select Go To - Function Block Definition from
the popup menu. The function block definition will be displayed.
Monitoring Instance Use the following procedure to monitor instance variables.
Variables in the Watch
Window
Note The instance variable is displayed as the instance name and vari-
able name.
134
Procedures Section 3-2
3. Click the Browse Button, select the variable to be monitored, and click the
OK Button.
Variable name
Monitoring Instance I/O The present values of parameters for I/O variables are displayed below the
Variables parameters.
Editing Function Block Programs using function blocks can be edited online. Changes can also be
Definition Programs made around instances.
Online
• Instance parameters can be changed, instances can be deleted, and
instructions other than those in instances can be changed.
• Instances cannot be added, instance names cannot be changed, and
algorithms and variable tables in function block definitions cannot be
changed.
135
Procedures Section 3-2
136
Appendix A
Data Types
Note The TIMER and COUNTER data types cannot be used in structured text function blocks.
137
Data Types Appendix A
138
Appendix B
Structured Text (ST Language)
Specifications
Structured Text
Structured text (also referred to as ST language) is a high-level programming language similar to PASCAL that
uses language structures such as selection and iteration statements. Programs written using structured text
are configured using statements. Statements are configured from variables and equations.
• Equations are sequences containing operators and operands (variables or constants). Operators include
arithmetic operators, comparison operators, and logical operators.
• Statements are either assignment or control statements. Assignment statements store calculation results
from the equation in the variable. Control statements include selection statements and iteration state-
ments.
Restrictions
Statement Delimiters
• Statements (assignment and control statements) must always end in a semicolon (;). The statement can-
not be completed by simply using a carriage return.
• Do not use a semicolon (;) as a delimiter within a statement such as following reserved words, values, or
equations. Inserting a semicolon within a statement, except at the end of a statement, will result in a syntax
error.
Comments
• Comments are enclosed in parentheses and asterisks, i.e., (*comment*). Any characters except parenthe-
ses and asterisks can be used within a comment. Nesting within comments is not supported.
Notation Example
(*comment*) (*this is the comment*)
139
Structured Text (ST Language) Specifications Appendix B
Note: Nesting in comments is not possible, i.e., (*(*this type of nesting is not supported*)*)
140
Structured Text (ST Language) Specifications Appendix B
Operator Priority
• Consider the operator priority in the structured text syntax, or enclose operations requiring priority in
parentheses.
Example: AND takes priority over OR. Therefore, in the example X OR Y AND Z, priority will be given to Y
AND Z.
Changing Fonts
To change font sizes or display colors, select Tools - Options - Display, and then click the ST Font Button.
The font name, font size (default is 8 point), and color can be changed.
Statements
Statement Function Example
End of statement Ends the statement ;
Comment All text between (* and *) is treated as a (*comment*)
comment.
Assignment Substitutes the results of the expres- A:=B;
sion, variable, or value on the right for
the variable on the left.
IF, THEN, ELSIF, ELSE, END_IF Evaluates an expression when the con- IF (condition_1) THEN
dition for it is true. (expression 1);
ELSIF (condition_2) THEN
(expression 2);
ELSE
(expression 3);
END_IF;
CASE, ELSE, END_CASE Evaluates an express based on the CASE (variable) OF
value of a variable. 1: (expression 1);
2: (expression 2);
3: (expression 3);
ELSE
(expression 4);
END_CASE;
FOR, TO, BY, DO, END_FOR Repeatedly evaluates an expression FOR (identifier) := (initial_value) TO
according to the initial value, final (final_value) BY (increment) DO
value, and increment. (expression);
END_FOR;
WHILE, DO, END_WHILE Repeatedly evaluates an expression as WHILE (condition) DO
long as a condition is true. (expression);
END_WHILE;
REPEAT, UNTIL, END_REPEAT Repeatedly evaluates an expression REPEAT
until a condition is true. (expression);
UNTIL (condition)
END_REPEAT;
141
Structured Text (ST Language) Specifications Appendix B
Operators
Operation Symbol Data types supported by operator Priority
1: Lowest
11: Highest
Parentheses and (expression), 1
brackets array[index]
Function evaluation identifier Depends on the function (refer to 2-6 Instruction 2
Support and Operand Restrictions)
Exponential ** REAL, LREAL 3
Complement NOT BOOL, WORD, DWORD, LWORD 4
Multiplication * INT, DINT, UINT, UDINT, ULINT, REAL, LREAL 5
Division / INT, DINT, LINT, UINT, UDINT, ULINT, REAL, LREAL 5
Addition + INT, DINT, LINT, UINT, UDINT, ULINT, REAL, LREAL 6
Subtraction − INT, DINT, LINT, UINT, UDINT, ULINT, REAL, LREAL 6
Comparisons <, >, <=, >= BOOL, INT, DINT, LINT, UINT, UDINT, ULINT, 7
WORD, DWORD, LWORD, REAL, LREAL
Equality = BOOL, INT, DINT, LINT, UINT, UDINT, ULINT, 8
WORD, DWORD, LWORD, REAL, LREAL
Non-equality <> BOOL, INT, DINT, LINT, UINT, UDINT, ULINT, 8
WORD, DWORD, LWORD, REAL, LREAL
Boolean AND & BOOL, WORD, DWORD, LWORD 9
Boolean AND AND BOOL, WORD, DWORD, LWORD 9
Boolean exclusive XOR BOOL, WORD, DWORD, LWORD 10
OR
Boolean OR OR BOOL, WORD, DWORD, LWORD 11
Functions
Function Syntax
Numerical Functions Absolute values, trigonometric functions, etc.
Arithmetic Functions Exponential (EXPT)
Data type conversion Functions Source data type_TO_New data type (Variable name)
142
Structured Text (ST Language) Specifications Appendix B
Numerical Functions
The following numerical functions can be used in structured text.
Numerical Argument data type Return value Contents Example
functions data type
ABS (argument) INT, DINT, LINT, INT, DINT, LINT, Absolute value [argument] a: = ABS (b)
UINT, UDINT, ULINT, UINT, UDINT, (*absolute value of variable b
REAL, LREAL ULINT, REAL, stored in variable a*)
LREAL
SQRT (argument) REAL, LREAL REAL, LREAL Square root: a: = SQRT (b)
√ argument (*square root of variable b
stored in variable a*)
LN (argument) REAL, LREAL REAL, LREAL Natural logarithm: LOGe a: = LN (b)
argument (*natural logarithm of vari-
able b stored in variable a*)
LOG (argument) REAL, LREAL REAL, LREAL Common logarithm: a: = LOG (b)
LOG10 argument (*common logarithm of vari-
able b stored in variable a*)
EXP (argument) REAL, LREAL REAL, LREAL Natural exponential: eargu- a: = EXP (b)
ment (*natural exponential of vari-
able b stored in variable a*)
SIN (argument) REAL, LREAL REAL, LREAL Sine: SIN argument a: = SIN (b)
(*sine of variable b stored in
variable a*)
COS (argument) REAL, LREAL REAL, LREAL Cosine: COS argument a: = COS (b)
(*cosine of variable b stored
in variable a*)
TAN (argument) REAL, LREAL REAL, LREAL Tangent: TAN argument a: = TAN (b)
(*tangent of variable b stored
in variable a*)
ASIN (argument) REAL, LREAL REAL, LREAL −1 argument a: = ASIN (b)
Arc sine: SIN
(*arc sine of variable b
stored in variable a*)
ACOS (argument) REAL, LREAL REAL, LREAL
Arc cosine: COS
−1 argu- a: = ACOS (b)
ment (*arc cosine of variable b
stored in variable a*)
ATAN (argument) REAL, LREAL REAL, LREAL −1 a: = ATAN (b)
Arc tangent: TAN argu-
ment (*arc tangent of variable b
stored in variable a*)
Note The data type returned for numerical functions is the same as that used in the argument. Therefore, vari-
ables substituted for function return values must be the same data type as the argument.
Arithmetic Functions
The following general exponential function can be used in structured text.
Exponential Argument data type Return value Contents Example
function data type
EXPT (base, expo- Base: REAL, LREAL REAL, LREAL Exponential: Baseexponent a: = EXPT (b, c)
nent) Exponent: INT, DINT, (*Exponential with variable b
LINT, UINT, UDINT, as the base and variable c as
ULINT the exponent is stored in
variable a*)
Note The data type returned for the general exponential function is the same as that used in the argument.
Therefore, variables substituted for function return values must be the same data type as the argument.
143
Structured Text (ST Language) Specifications Appendix B
Statement Details
Assignment
Summary
The left side of the statement (variable) is substituted with the right side of the statement (equation, variable, or
constant).
Reserved Words
:=
Combination of colon (:) and equals sign (=).
Statement Syntax
Variable: = Equation, variable, or constant;
Usage
Use assignment statements for inputting values in variables. This is a basic statement for use before or within
control statements. This statement can be used for setting initial values, storing calculation results, and incre-
menting or decrementing variables.
Description
Substitutes (stores) an equation, variable, or constant for the variable.
Examples
Example 1: Substitute variable A with the result of the equation X+1.
A:=X+1;
Example 2: Substitute variable A with the value of variable B.
A:=B;
144
Structured Text (ST Language) Specifications Appendix B
Control Statements
IF Statement (Single Condition)
Summary
This statement is used to execute an expression when a specified condition is met. If the condition is not met,
a different expression is executed.
Reserved Words
IF, THEN, (ELSE), END_IF
Note ELSE can be omitted.
Statement Syntax
IF <condition> THEN
<expression_1>;
ELSE
<expression_2>;
END_IF;
Process Flow Diagram
False
Condition
True
Expression 1 Expression 2
Usage
Use the IF statement to perform a different operation depending on whether a single condition (condition equa-
tion) is met.
Description
Condition = If true, execute expression_1
Condition = If false, execute expression_2
Precautions
• IF must be used together with END_IF.
• The condition must include a true or false equation for the evaluation result.
Example: IF(A>10)
The condition can also be specified as a boolean variable only rather than an equation. As a result, the
variable value is 1 (ON) = True result, 0 (OFF) = False result.
• Statements that can be used in expression_1 and expression_2 are assignment statements, IF, CASE,
FOR, WHILE, or REPEAT.
145
Structured Text (ST Language) Specifications Appendix B
Example:
IF <condition_1> THEN
IF <condition_2> THEN
<expression_1>;
ELSE
<expression_2>:
END_IF;
END_IF;
The processing flow diagram is as follows:
Condition 1 False
True
False
Condition 2
True
Expression 1 Expression 1
ELSE corresponds to THEN immediately before it, as shown in the above diagram.
• Multiple statements can be executed within expression_1 and expression_2. Be sure to use a semicolon (;)
delimiter between multiple statements in an expression.
• The ELSE statement can be omitted. When ELSE is omitted, no operation is executed if the result of the
condition equation is false.
Processing Flow Diagram
False
Condition
True
Expression
Examples
Example 1: If variable A>0 is true, variable X will be substituted with numerical value 10. If A>0 is false, variable
X will be substituted with numerical value 0.
IF A>0 THEN
X:=10;
ELSE
X:=0;
END_IF;
Example 2: If variable A>0 and variable B>1 are both true, variable X will be substituted with numerical value
10, and variable Y will be substituted with numerical value 20. If variable A>0 and variable B>1 are both false,
variable X and variable Y will both be substituted with numerical value 0.
146
Structured Text (ST Language) Specifications Appendix B
...
ELSIF <condition_n> THEN <expression_n>;
ELSE <expression_m>;
END_IF;
Processing Flow Chart
False
Condition 1
True False
Condition 2
Expression 2
True
Expression 3
Expression m
Usage
Use the IF statement to perform different operations depending which of multiple conditions (condition equa-
tion) is met.
147
Structured Text (ST Language) Specifications Appendix B
Description
Condition 1 = If true, execute expression 1
Condition 1 = If false,
Condition 2 = If true, execute expression 2
Condition 2 = If false,
Condition 3 = If true, execute expression 3
etc.
Condition n = If true, execute expression n
If none of these conditions are met, condition m is executed.
Precautions
• IF must be used together with END_IF.
• Condition_@ contains the true or false result of the equation (e.g., IF(A>10)).
A boolean (BOOL data type) variable only can also be specified as the condition rather than an equation.
For boolean conditions, the result is true when the variable value is 1 (ON) and false when it is 0 (OFF).
• Statements that can be used in expression_@ are assignment statements, IF, CASE, FOR, WHILE, or
REPEAT.
• Multiple statements can be executed in expression_@. Be sure to use a semicolon (;) delimiter between
multiple statements in an expression.
• The ELSE statement can be omitted. When ELSE is omitted, no operation is executed if the result of any
condition equation is false.
Examples
Example 1: If variable A>0 is true, variable X will be substituted with numerical value 10.
If A>0 is false, but variable B=1, variable X will be substituted with numerical value 1.
If A>0 is false, but variable B=2, variable X will be substituted with numerical value 2.
If either of these conditions is met, variable X will be substituted with numerical value 0.
IF A>0 THEN X:=10;
ELSIF B=1 THEN X:=1;
ELSIF B=2 THEN X:=2;
ELSE X:=0;
END_IF;
CASE Statement
Summary
This statement executes an expression containing a selected integer that matches the value from an integer
equation. If the selected integer value is not the same, either no expression or a specified expression is exe-
cuted.
Reserved Word
CASE
Statement Syntax
CASE <integer_equation> OF
<integer_equation_value_1 >:<expression_1>;
<integer_equation_value_2>:<expression_2>;
...
<integer_equation_value_n>:<expression_n>;
ELSE <expression_m>;
END_CASE;
148
Structured Text (ST Language) Specifications Appendix B
Same as Yes
selected
value 1?
No
Same as Yes
selected
value 2?
No
Same as Yes
selected
value n?
No
Usage
Use the CASE statement to execute different operations depending on specified integer values.
Description
If the integer_equation matches integer_equation_value_n, expression_n is executed.
if the integer_equation does not match any of integer_equation_value_n, expression_m is executed.
Precautions
• CASE must be used together with END_CASE.
• The result of the integer_equation must be in integer format (INT, DINT, LINT, UINT, UDINT, or ULINT).
• Statements that can be used in expression_@ are assignment statements, IF, CASE, FOR, WHILE, or
REPEAT.
• Multiple statements can be executed in expression_@. Be sure to use a semicolon (;) delimiter between
multiple statements in an expression.
• Variables in integer format (INT, DINT, LINT, UINT, UDINT, or ULINT), or equations that return integer val-
ues can be specified in the integer_equation.
• When OR logic is used for multiple integers in the integer_equation_value_n, separate the numerical value
using a comma delimiter. To specify a sequence of integers, use two periods (..) as delimiters between the
first and last integers.
Examples
Example 1: If variable A is 1, variable X is substituted with numerical value 1. If variable A is 2, variable X is
substituted with numerical value 2. If variable A is 3, variable X is substituted with numerical value 3. If neither
of these cases matches, variable Y will be substituted with 0.
CASE A OF
1:X:=1;
2:X:=2;
3:X:=3;
ELSE Y:=0;
END_CASE;
149
Structured Text (ST Language) Specifications Appendix B
FOR Statement
Summary
This statement is used to execute a specified expression repeatedly until a variable (referred to here as an iter-
ation variable) reaches a specified value.
Reserved Words
FOR, TO, (BY), DO, END_FOR
Note BY can be omitted.
Statement Syntax
FOR <iteration_variable>:= <initial_value> TO <final_value_equation> BY
<increment_value_equation>
DO
<expression>;
END_FOR;
Processing Flow Chart
Iteration variable = Initial
Iteration
Iteration
True
variable ≥
Final value?
False
Expression
End
Usage
Use the FOR statement when the number of iterations has been determined beforehand. FOR is particularly
useful when switching the number of elements in an array variable according to the value of a specified itera-
tion variable.
150
Structured Text (ST Language) Specifications Appendix B
Description
When the iteration_variable is the initial_value, the expression is executed. After execution, the value obtained
from the increment_equation is added to the iteration_variable, and if the iteration_variable <
final_value_equation (see note 1), the expression is executed. After execution, the value obtained from the
increment_equation is added to the iteration_variable, and if the iteration_variable < final_value_equation value
(see note 1), the expression is executed. This process is repeated. If the iteration_variable ≥
final_value_equation (see note 2), the processing ends.
Note (1) If the value from the increment_equation is negative, the condition is iteration_variable >
final_value_equation value.
(2) If the value from the increment_equation is negative, the condition is iteration_variable ≤
final_value_equation.
Precautions
• A negative value can be specified in the increment_equation
• FOR must be used in combination with END_FOR.
• The initial_value, final_value_equation, and final_value_equation must be an integer data type (INT, DINT,
LINT, UINT, UDINT, or ULINT).
• Do not reference an iteration variable that is outside the FOR statement, where possible. The value of the
iteration variable after completing execution of the FOR statement depends on the actual model specifica-
tions, and may prevent use of the program for general-purpose applications.
Example: In the following structured text, whether the value of a is TRUE or FALSE depends on the actual
model being used.
FOR i:=0 TO 100 DO
array[i]:=0;
END_FOR;
IF i=101 THEN
a:=TRUE;
ELSE
a:=FALSE;
END_IF;
• Do not use a FOR statement in which an iteration variable is changed directly. Doing so may result in unex-
pected operations.
Example:
FOR i:=0 TO 100 BY 1 DO
array[i]:=0;
i:=i+5;
END_FOR;
• Statements that can be used in the expression are assignment statements, IF, CASE, FOR, WHILE, or
REPEAT.
• Multiple statements can be executed in the expression. Be sure to use a semicolon (;) delimiter between
multiple statements in an expression.
• BY increment_equation can be omitted. When omitted, BY is taken as 1.
• Variables with integer data types (INT, DINT, LINT, UINT, UDINT, or ULINT), or equations that return inte-
ger values can be specified in the initial_value, final_value_equation, and increment_equation.
Example 1: The iteration is performed when the iteration variable n = 0 to 50 in increments of 5, and the
array variable SP[n] is substituted with 100.
FOR n:=0 TO 50 BY 5 DO
SP[n]:=100;
END_FOR;
151
Structured Text (ST Language) Specifications Appendix B
Example 2: The total value of elements DATA[1] to DATA[50] of array variable DATA[n] is calculated, and
substituted for the variable SUM.
FOR n:=0 TO 50 BY 1 DO
SUM:=SUM+DATA[n];
END_FOR;
Example 3: The maximum and minimum values from elements DATA[1] to DATA[50] of array variable
DATA[n] are detected. The maximum value is substituted for variable MAX and the minimum value is sub-
stituted for variable MIN. The value for DATA[n] is between 0 and 1000.
MAX:=0;
MIN:=1000;
FOR n:=1 TO 50 BY 1 DO
IF DATA[n]>MAX THEN
MAX:=DATA[n];
END IF;
IF DATA[n]<MIN THEN
MIN:=DATA[n];
END IF;
END_FOR;
WHILE Statement
Summary
This statement is used to execute a specified expression repeatedly for as long as a specified condition is true.
Reserved Words
WHILE, DO, END_WHILE
Statement Syntax
WHILE <condition> DO
<expression>;
END_WHILE;
Processing Flow Chart
Iteration
False
Condition
True
Expression
End
Usage
Use the WHILE statement when the number of iterations has not been determined beforehand (depends on
the condition being met) to repeat specified processing for the duration that the condition is met. This state-
ment can be used to execute processing while the condition equation is true only (pretest loop).
Description
Before the expression is executed, the condition is evaluated.
If the condition is true, the expression is executed. Afterwards, the condition is evaluated again. This process is
repeated. If the condition is false, the expression is not executed and the condition evaluation ends.
152
Structured Text (ST Language) Specifications Appendix B
Precautions
• WHILE must be used in combination with END_WHILE.
• Before executing the expression, if the condition equation is false, the process will end without executing
the expression.
• Statements that can be used in the expression are assignment statements, IF, CASE, FOR, WHILE, or
REPEAT.
• Multiple statements can be executed in the expression. Be sure to use a semicolon (;) delimiter between
multiple statements in an expression.
• The condition can also be specified as a boolean variable (BOOL data type) only rather than an equation.
Examples
Example 1: The value exceeding 1000 in increments of 7 is calculated and substituted for variable A.
A:=0;
WHILE A>=1000 DO
A:=A+7;
END_WHILE;
Example 2: While X<3000, the value of X is doubled, and the value is substituted for the array variable DATA[1].
The value of X is then multiplied by 2 again, and the value is substituted for the array variable DATA[2]. This
process is repeated.
n:=1’
WHILE X<3000 DO
X:=X*2;
DATA[n]:=X;
n:=n+1;
END_WHIE;
REPEAT Statement
Summary
This statement is used to repeatedly execute an expression until a specified condition is true.
Reserved Words
REPEAT, UNTIL, END_REPEAT
Statement Syntax
REPEAT
<expression>;
UNTIL <condition>
END_REPEAT
Processing Flow Chart
Expression
Iteration
False
Condition
True
End
153
Structured Text (ST Language) Specifications Appendix B
Usage
Use the REPEAT statement to repeat processing for as long as a condition is met after specified processing,
when the number of iterations is undetermined beforehand (depends on whether the condition is met). This
statement can be used to determine whether to repeat processing according to the results of specified pro-
cessing execution (post-test loop).
Description
The expression will execute the first time without a condition. Thereafter, the condition equation will be evalu-
ated. If the condition is false, the expression will be executed again. If the condition is true, processing will end
without executing the expression.
Precautions
• REPEAT must be used together with END_REPEAT.
• Even if the condition equation is true before the expression has been executed, the expression will be exe-
cuted.
• Statements that can be used in the expression are assignment statements, IF, CASE, FOR, WHILE, or
REPEAT.
• Multiple statements can be executed in the expression. Be sure to use a semicolon (;) delimiter between
multiple statements in an expression.
• The condition can also be specified as a boolean variable (BOOL data type) only rather than an equation.
Examples
Example 1: Numeric values from 1 through 10 are incremented and the total is substituted for the variable
TOTAL.
A:=1;
TOTAL:=0;
REPEAT
TOTAL:=TOTAL+A;
A:=A+1;
UNTIL A>10
END_REPEAT;
EXIT Statement
Summary
This statement is used within iteration statements (FOR, WHILE, REPEAT) only to force an iteration statement
to end. This statement can also be used within an IF statement to force an iteration statement to end when a
specified condition is met.
Reserved Words
EXIT
Statement Syntax (Example: Using within IF Statement)
FOR (WHILE, REPEAT) expression
...
IF <condition> THEN EXIT;
END_IF;
...
END_FOR (WHILE, REPEAT);
Usage
Use the EXIT statement to force iteration processing to end before the end condition is met.
Description (Example: Using within IF Statement)
When the condition equation is true, the iteration statement (FOR, WHILE, REPEAT) is forced to end, and any
statements after EXIT will not be executed.
154
Structured Text (ST Language) Specifications Appendix B
Note (1) The condition can also be specified as a boolean variable (BOOL data type) only rather than an
equation.
(2) Even if the condition equation is true before the expression has been executed, the expression will
be executed.
Example
Processing is repeated from when variable n = 1 until 50 in increments of 1 and n is added to array variable
DATA[n]. If DATA[n] exceeds 100, however, processing will end.
FOR n:=1; TO 50 BY 1 DO
DATA[n]:=DATA[n]+n;
IF DATA[n]>100 THEN EXIT;
END_IF;
END_FOR;
RETURN Statement
Summary
This statement is used to execute the next instruction following the location that called the function block in the
program when the function block in the structured text must be forced to end before it has been completed.
Reserved Words
RETURN
Statement Syntax
RETURN;
Usage
Use the RETURN statement when a function block has been forced to end.
155
Structured Text (ST Language) Specifications Appendix B
Restrictions
Nesting
There is no restriction on the number of nests that can be used in IF, CASE, FOR, WHILE, or REPEAT state-
ments.
Data Type Restrictions
• Integers can only be allocated to variables with data types WORD, DWORD, INT, DINT, UINT, UDINT, or
ULINT. For example, if A is an INT data type, A:=1; it possible. If the value is not an integer data type, a
syntax error will occur. For example, if A is an INT data type, a syntax error will occur for A:=2.5;.
• If a real number (floating point decimal data) can only be allocated to variables with data types REAL and
UREAL. For example, if A is a REAL data type, A:=1.5; is possible. If the value is not an real data type, a
syntax error will occur. For example, if A is a REAL data type, a syntax error will occur for A:=2;. Use
A:=2.0;.
• Bits (TRUE, FALSE) can only be allocated to variables with the BOOL data type. For example, if A is a
BOOL data type, A:=FALSE; is possible. If a BOOL data type is not used, a syntax error will occur. For
example, if A is an INT data type, a syntax error will occur for A:=FALSE;.
• Data types must all be consistent within the structured text. For example, if A, B, and C are INT data types,
A:=B+C; is possible. If, however, A and B are INT data types, but C is a REAL data type or LINT data type,
a syntax error will occur for A:=B+C;.
156
Structured Text (ST Language) Specifications Appendix B
157
Structured Text (ST Language) Specifications Appendix B
158
Structured Text (ST Language) Specifications Appendix B
159
Structured Text (ST Language) Specifications Appendix B
Warning Messages
Warning message Cause of warning Example
Keyword '%s' is redundant The keyword has been used
in an invalid location. For
example, use of the EXIT
statement outside a loop syn-
tax.
Conversion from '%s' to '%s', Data may be lost due to con- Y:=DINT_TO_INT(X); (*X is a DINT type variable, Y is an
possible loss of data version of a data type with a INT type variable*)
large data size to a data type
with a small data size.
160
Appendix C
External Variables
Note These words are external variables for the OMRON FB Library. Do not use these words for creating
function blocks.
161
External Variables Appendix C
162
Index
A function blocks
advantages, 7
addresses application guidelines, 42
allocation areas, 31 creating, 17, 111
checking internal allocations, 129 debugging, 134
setting allocation areas, 128 defining, 117
algorithm elements, 21
creating, 119 errors, 41
applications monitoring, 134
precautions, xiii operating specifications, 35
outline, 7
array settings, 14, 28, 44, 121
restrictions, 37
AT settings, 14, 27, 121
reusing, 18
restrictions, 38
setting parameters, 125
specifications, 4, 21
structure, 8
C functions, 2
compiling, 131 function blocks, 4
computer system requirements, 3 restrictions, 3
D G
data types, 14, 27, 137 global symbol table, 12
determining, 42
debugging function blocks, 134
differentiation
I
restrictions, 38 IEC 61131-3, 2, 4
input variables, 23
inputs, 13
E instance areas, 15, 31
errors setting, 16, 128
function blocks, 41 instances
external variables, 26 creating, 17, 124
list, 161 multiple, 33
externals, 14 number of, 10
outline, 9
registering in global symbol table, 12
F specifications, 30
internal variables, 25
features, 2
internals, 13
files
function block definitions, 133
library, 5
project text files, 5
L
function block definitions, 8 ladder programming
checking for an instance, 131 function block definition, 116
compiling, 131 restrictions, 40
creating, 114 restrictions in function blocks, 37
saving to files, 133
163
Index
M variables
address allocations, 15
menus, 5 checking address allocations, 129
main, 5 creating as needed, 120
popup, 6 definitions, 22
monitoring function blocks, 134 introduction, 13
properties, 13, 14, 27
registering in advance, 117
O restrictions, 38
setting allocation areas, 15
online editing usage, 13, 22
restrictions, 41
output variables, 24
outputs, 14
P
parameters
outline, 10
precautions, xi
applications, xiii
general, xii
safety, xii
Programming Consoles, 41
projects
creating, 114
S
safety precautions, xii
specifications, 19
CX-Programmer Ver. 5.0, 3
function block operation, 35
instances, 30
structured text
function block definition, 116
restrictions, 40
symbol name
automatically generating, 123
T
timer instructions
operation, 107
restrictions, 39
V
variable names, 14
164
Revision History
A manual revision code appears as a suffix to the catalog number on the front cover of the manual.
Revision code
The following table outlines the changes made to the manual during each revision. Page numbers refer to the
previous version.
Revision code Date Revised content
01 July 2004 Original production
165
Revision History
166
OMRON CORPORATION
FA Systems Division H.Q.
66 Matsumoto
Mishima-city, Shizuoka 411-8511
Japan
Tel: (81)55-977-9181/Fax: (81)55-977-9045
Regional Headquarters
OMRON EUROPE B.V.
Wegalaan 67-69, NL-2132 JD Hoofddorp
The Netherlands
Tel: (31)2356-81-300/Fax: (31)2356-81-388
OMRON ELECTRONICS LLC
1 East Commerce Drive, Schaumburg, IL 60173
U.S.A.
Tel: (1)847-843-7900/Fax: (1)847-843-8568
OMRON ASIA PACIFIC PTE. LTD.
83 Clemenceau Avenue,
#11-01, UE Square,
Singapore 239920
Tel: (65)6835-3011/Fax: (65)6835-2711
Authorized Distributor:
Cat. No. W438-E1-01 Note: Specifications subject to change without notice Printed in Japan