ST Programming en-US
ST Programming en-US
Fundamental safety
instructions 1
Introduction 2
SIMOTION
Getting Started with ST 3
SIMOTION SCOUT
SIMOTION ST Structured Text
ST Fundamentals 4
Functions, Function Blocks,
and Programs 5
Programming and Operating Manual
Object-oriented
programming - OOP (as of 6
kernel V4.5)
Integration of ST in
SIMOTION 7
Error Sources and Program
Debugging 8
Appendix A
07/2021
A5E33437165B
Legal information
Warning notice system
This manual contains notices you have to observe in order to ensure your personal safety, as well as to prevent damage
to property. The notices referring to your personal safety are highlighted in the manual by a safety alert symbol, notices
referring only to property damage have no safety alert symbol. These notices shown below are graded according to
the degree of danger.
DANGER
indicates that death or severe personal injury will result if proper precautions are not taken.
WARNING
indicates that death or severe personal injury may result if proper precautions are not taken.
CAUTION
indicates that minor personal injury can result if proper precautions are not taken.
NOTICE
indicates that property damage can result if proper precautions are not taken.
If more than one degree of danger is present, the warning notice representing the highest degree of danger will be
used. A notice warning of injury to persons with a safety alert symbol may also include a warning relating to property
damage.
Qualified Personnel
The product/system described in this documentation may be operated only by personnel qualified for the specific
task in accordance with the relevant documentation, in particular its warning notices and safety instructions.
Qualified personnel are those who, based on their training and experience, are capable of identifying risks and
avoiding potential hazards when working with these products/systems.
Proper use of Siemens products
Note the following:
WARNING
Siemens products may only be used for the applications described in the catalog and in the relevant technical
documentation. If products and components from other manufacturers are used, these must be recommended or
approved by Siemens. Proper transport, storage, installation, assembly, commissioning, operation and maintenance
are required to ensure that the products operate safely and without any problems. The permissible ambient
conditions must be complied with. The information in the relevant documentation must be observed.
Trademarks
All names identified by ® are registered trademarks of Siemens AG. The remaining trademarks in this publication may
be trademarks whose use by third parties for their own purposes could violate the rights of the owner.
Disclaimer of Liability
We have reviewed the contents of this publication to ensure consistency with the hardware and software described.
Since variance cannot be precluded entirely, we cannot guarantee full consistency. However, the information in this
publication is reviewed regularly and any necessary corrections are included in subsequent editions.
Scope
This document is part of the SIMOTION Programming documentation package.
This document applies to SIMOTION SCOUT, the engineering system of the SIMOTION product
family in product version V5.4 in conjunction with:
• A SIMOTION device with the following versions of a SIMOTION Kernel:
– V5.4
– V5.3
– V5.2
– V5.1
– V4.5
– V4.4
– V4.3
– V4.2
– V4.1 1
– V4.0 1
– V3.2 1
1
V4.5 is the last product version of SIMOTION SCOUT that will support these versions of the
SIMOTION Kernel.
• The relevant version of the following SIMOTION Technology Packages, depending on the
kernel:
– Cam
– Path (Kernel as of V4.1)
– Cam_ext
– TControl
This document describes the syntax and implementation of the SIMOTION ST Structured Text
programming language for this version of SIMOTION SCOUT. It also includes information on the
following topics:
• ST Editor and Compiler with program example
• Data storage and data management on SIMOTION devices
• Options for diagnosis and troubleshooting
The scope of the SIMOTION ST programming language may contain new syntax elements
compared to earlier versions. These have only been tested using the current version of the
SIMOTION kernel and are released only for this kernel version or higher versions.
SIMOTION Documentation
An overview of the SIMOTION documentation can be found in the SIMOTION Documentation
Overview document.
SIMOTION at a glance
We have compiled an overview page from our range of information about SIMOTION with the
most important information on frequently asked topics - which can be opened with only one
click.
Whether beginner or experienced SIMOTION user – the most important downloads, manuals,
tutorials, FAQs, application examples, etc. can be found at
https://support.industry.siemens.com/cs/ww/en/view/109480700
Additional information
Click the following link to find information on the following topics:
• Documentation overview
• Additional links to download documents
• Using documentation online (find and search manuals/information)
https://support.industry.siemens.com/cs/ww/en/view/109479653
My Documentation Manager
Click the following link for information on how to compile documentation individually on the
basis of Siemens content and how to adapt it for the purpose of your own machine
documentation:
https://support.industry.siemens.com/My/ww/en/documentation
Training
Click the following link for information on SITRAIN - Siemens training courses for automation
products, systems and solutions:
http://www.siemens.com/sitrain
FAQs
Frequently Asked Questions can be found in SIMOTION Utilities & Applications, which are
included in the scope of delivery of SIMOTION SCOUT, and in the Service&Support pages
in Product Support:
https://support.industry.siemens.com/cs/de/en/ps/14505/faq
Technical support
Country-specific telephone numbers for technical support are provided on the Internet
under Contact:
https://support.industry.siemens.com/cs/ww/en/sc/2090
Preface ................................................................................................................................................... 3
1 Fundamental safety instructions......................................................................................................... 17
1.1 General safety instructions................................................................................................. 17
1.1.1 Malfunctions of the machine as a result of incorrect or changed parameter settings............ 17
1.2 Security information .......................................................................................................... 17
1.3 Note regarding the general data protection regulation........................................................ 18
1.4 Danger to life due to software manipulation when using removable storage media............. 18
2 Introduction ......................................................................................................................................... 19
2.1 High-level programming language ..................................................................................... 19
2.2 Programming language with technology commands .......................................................... 19
2.3 Execution levels ................................................................................................................. 19
2.4 ST editor with tools for writing and testing programs.......................................................... 20
3 Getting Started with ST ....................................................................................................................... 21
3.1 Integration of ST in SCOUT ................................................................................................. 21
3.1.1 Getting to know the elements of the workbench ................................................................ 23
3.2 Requirements for program creation .................................................................................... 24
3.3 Working with the ST editor and the compiler ...................................................................... 25
3.3.1 Insert ST source file ............................................................................................................ 25
3.3.2 Opening an existing ST source file ...................................................................................... 27
3.3.3 Changing the properties of an ST source file ....................................................................... 27
3.3.4 Working with the ST editor ................................................................................................. 29
3.3.4.1 Syntax coloring.................................................................................................................. 30
3.3.4.2 Drag&drop......................................................................................................................... 30
3.3.4.3 Settings of the ST editor ..................................................................................................... 31
3.3.4.4 Indentations and tabs ........................................................................................................ 33
3.3.4.5 Folds (show and hide blocks) ............................................................................................. 35
3.3.4.6 Splitting the editor window................................................................................................ 39
3.3.4.7 Displaying spaces, tabs and line ends ................................................................................. 40
3.3.4.8 Changing the font size in the ST editor ............................................................................... 41
3.3.4.9 Select text.......................................................................................................................... 42
3.3.4.10 Generating a simple series of numbers (generating a sequence) ......................................... 44
3.3.4.11 Use bookmarks .................................................................................................................. 46
3.3.4.12 Automatic completion........................................................................................................ 48
3.3.4.13 Opening a called block ....................................................................................................... 49
3.3.4.14 Code snippets .................................................................................................................... 50
3.3.4.15 Other help for the ST editor................................................................................................ 52
3.3.4.16 Using the command library ................................................................................................ 53
3.3.4.17 ST editor toolbar ................................................................................................................ 53
3.3.4.18 ST editor context menu ...................................................................................................... 54
3.3.4.19 Shortcuts........................................................................................................................... 58
3.3.5 Starting the compiler ......................................................................................................... 61
3.3.5.1 Help for the error correction............................................................................................... 61
3.3.6 Making settings for the compiler ........................................................................................ 62
3.3.6.1 Global compiler settings..................................................................................................... 62
3.3.6.2 Local compiler settings....................................................................................................... 65
3.3.6.3 Effectiveness of global or local compiler settings................................................................. 69
3.3.6.4 Meanings of the warning classes ........................................................................................ 72
3.3.6.5 Display of the compiler options .......................................................................................... 72
3.3.7 Know-how protection for ST source files ............................................................................. 74
3.3.8 Making preprocessor definitions ......................................................................................... 74
3.3.9 Exporting, importing and printing an ST source file............................................................. 75
3.3.9.1 Exporting an ST source file as a text file (ASCII) ................................................................... 76
3.3.9.2 Exporting an ST source file in XML format........................................................................... 76
3.3.9.3 Importing a text file (ASCII) as an ST source file ................................................................... 77
3.3.9.4 Importing XML data into ST source files .............................................................................. 77
3.3.9.5 Printing an ST source file .................................................................................................... 78
3.3.10 Using an external editor ..................................................................................................... 78
3.3.11 ST source file menus .......................................................................................................... 80
3.3.11.1 ST source file menu............................................................................................................ 80
3.3.11.2 ST source file context menu................................................................................................ 81
3.4 Creating a sample program ................................................................................................ 82
3.4.1 Requirements .................................................................................................................... 83
3.4.2 Opening or creating a project............................................................................................. 83
3.4.3 Making the hardware known.............................................................................................. 84
3.4.4 Entering source text with the ST editor ............................................................................... 85
3.4.4.1 Functions of the editor....................................................................................................... 86
3.4.4.2 Source text of the sample program..................................................................................... 87
3.4.5 Compiling a sample program.............................................................................................. 87
3.4.5.1 Starting the compiler ......................................................................................................... 87
3.4.5.2 Correcting errors................................................................................................................ 88
3.4.5.3 Example of error messages................................................................................................. 88
3.4.6 Running the sample program ............................................................................................. 89
3.4.6.1 Assigning a sample program to an execution level .............................................................. 89
3.4.6.2 Establishing a connection to the target system ................................................................... 90
3.4.6.3 Downloading the sample program to the target system ...................................................... 91
3.4.6.4 Starting and testing the sample program............................................................................ 92
4 ST Fundamentals ................................................................................................................................. 93
4.1 Language description resources ......................................................................................... 93
4.1.1 Syntax diagram.................................................................................................................. 93
4.1.2 Blocks in syntax diagrams .................................................................................................. 94
4.1.3 Meaning of the rules (semantics) ....................................................................................... 94
4.2 Basic elements of the language .......................................................................................... 94
4.2.1 ST character set ................................................................................................................. 95
4.2.2 Identifiers in ST .................................................................................................................. 95
4.2.2.1 Rules for identifiers ............................................................................................................ 95
4.2.2.2 Examples of identifiers ....................................................................................................... 96
4.2.3 Reserved identifiers............................................................................................................ 96
4.2.3.1 Protected identifiers in the ST programming language ........................................................ 97
4.2.3.2 Reserved identifiers in the ST programming language ....................................................... 102
7.3.3.3 Creating I/O variables for direct access or process image of cyclic tasks.............................. 321
7.3.3.4 Syntax for entering I/O addresses ..................................................................................... 323
7.3.3.5 Possible data types of I/O variables ................................................................................... 324
7.3.3.6 Detailed status of the I/O variables (as of Kernel V4.2) ...................................................... 324
7.3.4 Access to fixed process image of the BackgroundTask........................................................ 326
7.3.4.1 Common process image (as of Kernel V4.2)...................................................................... 328
7.3.4.2 Separate process image (up to Kernel V4.1)...................................................................... 330
7.3.4.3 Absolute access to the fixed process image of the BackgroundTask (absolute PI access) ..... 332
7.3.4.4 Syntax for the identifier for an absolute process image access ........................................... 333
7.3.4.5 Symbolic access to the fixed process image of the BackgroundTask (symbolic PI access)..... 334
7.3.4.6 Possible data types for symbolic PI access ......................................................................... 335
7.3.4.7 Example of symbolic PI access .......................................................................................... 336
7.3.4.8 Creating an I/O variable for access to the fixed process image of the BackgroundTask......... 336
7.3.5 Accessing I/O variables ..................................................................................................... 337
7.4 Using libraries.................................................................................................................. 337
7.4.1 Compiling a library........................................................................................................... 339
7.4.2 Know-how protection for libraries .................................................................................... 340
7.4.3 Using data types, functions and function blocks from libraries .......................................... 341
7.5 Use of the same identifiers and namespaces ..................................................................... 342
7.5.1 Use of the same identifiers ............................................................................................... 342
7.5.2 Namespaces .................................................................................................................... 345
7.5.2.1 Namespaces for libraries and technology packages........................................................... 346
7.5.2.2 Predefined namespaces.................................................................................................... 347
7.5.2.3 Object-oriented namespace ............................................................................................. 349
7.6 Reference data................................................................................................................. 355
7.6.1 Cross-reference list........................................................................................................... 355
7.6.1.1 Generating and updating a cross-reference list ................................................................. 355
7.6.1.2 Content of the cross-reference list .................................................................................... 356
7.6.1.3 Working with a cross-reference list ................................................................................... 358
7.6.1.4 Filtering the cross-reference list........................................................................................ 358
7.6.2 Program structure ............................................................................................................ 359
7.6.2.1 Content of the program structure..................................................................................... 359
7.6.3 Code attributes ................................................................................................................ 360
7.6.3.1 Code attribute contents ................................................................................................... 361
7.6.4 Reference to variables ...................................................................................................... 361
7.7 Controlling the preprocessor and compiler with pragmas.................................................. 362
7.7.1 Controlling the preprocessor ............................................................................................ 363
7.7.1.1 Preprocessor statement.................................................................................................... 364
7.7.1.2 Example of preprocessor statements ................................................................................ 367
7.7.2 Controlling compiler with attributes ................................................................................. 368
7.7.3 Issue non-assigned compiler message .............................................................................. 372
7.8 SIMOTION devices............................................................................................................ 373
7.8.1 Rules for identifiers of the SIMOTION devices .................................................................... 373
7.8.2 Making settings on the device (as of Kernel V4.2) ............................................................. 375
7.9 Forward declarations ....................................................................................................... 375
7.10 Jump statement and label ................................................................................................ 379
8 Error Sources and Program Debugging ............................................................................................. 381
8.1 Notes on avoiding errors and on efficient programming .................................................... 381
WARNING
Danger to life if the safety instructions and residual risks are not observed
The non-observance of the safety instructions and residual risks stated in the associated
hardware documentation can result in accidents with severe injuries or death.
• Observe the safety instructions given in the hardware documentation.
• Consider the residual risks for the risk evaluation.
WARNING
Malfunctions of the machine as a result of incorrect or changed parameter settings
As a result of incorrect or changed parameterization, machines can malfunction, which in turn
can lead to injuries or death.
• Protect the parameterization against unauthorized access.
• Handle possible malfunctions by taking suitable measures, e.g. emergency stop or
emergency off.
Siemens' products and solutions undergo continuous development to make them more secure.
Siemens strongly recommends that product updates are applied as soon as they are available
and that the latest product versions are used. Use of product versions that are no longer
supported, and failure to apply the latest updates may increase customers' exposure to cyber
threats.
To stay informed about product updates, subscribe to the Siemens Industrial Security RSS Feed
visit (https://www.siemens.com/industrialsecurity).
WARNING
Danger to life due to software manipulation when using removable storage media
The storage of files on removable storage media involves a high risk of infection, e.g. via viruses
or malware. Incorrect parameter assignment can cause machines to malfunction, which can
lead to injuries or death.
• Protect the files on removable storage media against harmful software through appropriate
protective measures, e.g. virus scanners.
① Editor
② Compiler
③ Program status
④ Detail view (Compile/check output tab)
Figure 3-1 Development environment of ST
1) Menu bar
2) Toolbars
3) Project navigator
4) Working area
5) Detail view (Symbol browser tab)
Figure 3-2 Workbench elements
• Project navigator
The project navigator displays the entire project and its elements (e.g. CPU, axes, programs,
cams) in a tree structure.
• Working area
This window allows you to perform specific tasks either independently (by programming) or
using wizards (by configuring).
• Detail view
The detail view displays additional information about the elements selected in the project
navigator, e.g. all global variables for a program or the Compile/Test Output window.
Configuring hardware
Within the project, the hardware used must be made known to the system, including:
• SIMOTION device
• Centralized I/O (with I/O addresses)
• Distributed I/O (with I/O addresses)
A SIMOTION device must be configured before you can insert and edit ST source files.
Note
MCC units, LAD/FBD units and DCC charts are also stored in the PROGRAMS folder under the
SIMOTION device.
For a description of the SIMOTION MCC (Motion Control Chart) programming language, refer to
the SIMOTION MCC Programming and Operating Manual.
For a description of the SIMOTION LAD (Ladder Diagram) and SIMOTION FBD (Function Block
Diagram) programming languages, refer to the SIMOTION LAD/FBD Programming and
Operating Manual.
Procedure
1. Open the appropriate SIMOTION device in the project navigator.
2. Select the PROGRAMS folder.
3. Select the menu Insert > Program > ST source file.
4. Enter the name of the ST source file.
The names of program sources must comply with the rules for identifiers (Page 95): They
are made up of letters (A … Z, a … z), numbers (0 … 9), or single underscores (_) in any order,
whereby the first character must be a letter or underscore. No distinction is made between
upper- and lower-case letters.
The permissible length of the name depends on the SIMOTION Kernel version:
– As of version V4.1 of the SIMOTION Kernel: maximum 128 characters.
– Up to version V4.0 of the SIMOTION Kernel: maximum 8 characters.
Names must be unique within the SIMOTION device.
Protected or reserved identifiers (Page 96) are not permitted.
Existing program sources (e.g. ST source files, MCC units) are displayed.
5. You can also enter an author, version, and a comment.
6. Activate the Open editor automatically checkbox.
7. If necessary, select further tabs to make local settings (only valid for this ST source file):
– Compiler tab: Local settings of the compiler (Page 65) for code generation and message
display.
– Additional settings tab: Definitions for preprocessor (Page 74)
8. Confirm with OK.
Note
When you click OK, the ST source file will only be transferred to the project. The data, together
with the project, is only saved to the data carrier if you select, for example, Project >
Save, Project > Save and compile changes, or Project > Save and recompile all.
Procedure
How to open an ST source file:
1. Open the subtree of the appropriate SIMOTION device in the project navigator.
2. Open the PROGRAMS folder.
3. Select the desired ST source file.
4. Select the Edit > Open object menu command.
5. Only for ST source files with know-how protection:
If the ST source file is not already open and the log-in details assigned to it have not yet been
used to log in:
– Enter the corresponding password for the displayed login.
The know-how protection for this source file is canceled temporarily (until the file is
closed).
– If required, activate the "Use login as a standard login" checkbox.
You will be logged in with this login and can now open additional units to which the same
login is assigned without having to re-enter the password.
This ST source file is opened with the saved folding information (Page 35) and bookmarks
(Page 46). Multiple units can be opened.
Note
You can also double-click the required ST source file to open it.
Procedure
1. Under the SIMOTION device, open the PROGRAMS folder.
2. Select the desired ST source file.
character must be a letter or underscore. No distinction is made between upper and lower case
letters.
The permissible length of the name depends on the SIMOTION Kernel version:
• As of Version V4.1 of the SIMOTION Kernel: maximum 128 characters.
• Up to Version V4.0 of the SIMOTION Kernel: maximum 8 characters.
Names must be unique within the SIMOTION device.
Protected or reserved identifiers (Page 96) are not allowed.
Existing program sources (e.g. ST source files, MCC units) are displayed.
Note
With versions of the SIMOTION Kernel up to V4.0, a violation of the permissible length of the
program source file name may not be detected until a consistency check or a download of the
program source file is performed!
Read-only ST sources
You can set ST sources as read-only to prevent unintentional code changes during
commissioning. To do this, navigate to "Additional settings" and set the option "Read-Only-
Mode". Functions that would change the ST source are disabled in read-only mode. For this
reason, the corresponding context menu entries and icons are inactive.
The following functions can still be used when an ST source is read-only:
• Status program
• Breakpoints
• Displaying the variable in the tooltip
• Pasting/removing bookmarks, jumping to bookmarks
• Selecting variables
• Searching (Ctrl +F)
• Compiling
The ST editor makes it easier for you to work with the ST source file, variables and technology
objects through the following operator controls:
• Syntax coloring
• Drag and drop
• Menu commands and shortcuts
3.3.4.2 Drag&drop
Drag&drop
A drag-and-drop operation (dragging while keeping the left mouse button pressed) enables you
to:
• Move selected text areas within an ST source file or to another opened ST source file.
• Copy names of variables from the symbol browser to the ST source file.
• Copy names (e.g. of technology objects, functions or function blocks) from the project
navigator to the ST source file.
• Copy system functions from the command library to the ST source file.
To copy names of variables from the symbol browser to the ST source file:
1. Select the entire line of the desired variable in the symbol browser. To do this, click the line
number at the start of the line.
2. Press the left mouse button and drag the line number to the desired position in the ST source
file.
The name of the selected variable is inserted in the ST source file.
To copy the name of an element (e.g. a technology object, a function or a function block)
from the project navigator to the ST source file:
1. Select the Project tab in the project navigator.
2. Select the element in the project navigator.
3. Press the left mouse button and drag the element to the desired position in the ST source file.
The name of the selected element is inserted in the ST source file.
To copy a system function from the command library to the ST source file:
1. Select the Command Library tab in the project navigator.
2. Select the system function in the command library.
3. Press the left mouse button and drag the system function to the desired position in the ST
source file.
The system function is inserted in the ST source file with its parameters.
Procedure:
1. Select the menu Options > Settings.
2. Select the ST editor / scripting tab.
3. Enter the settings.
4. Click OK or Accept to confirm.
Parameter Description
Display line numbering If active, the line numbers are displayed.
See: Other ST editor tools (Page 52).
Replace tabs with blanks You select here how text indentation is performed (for the
automatic indentation or by pressing the Tab key):
• If active: By adding the appropriate number of space char‐
acters ($20).
• If inactive: By adding the tab character ($09).
See: Indentations and tabs (Page 33).
Tab width Number of characters skipped by a tab.
See: Indentations and tabs (Page 33).
Tooltip display for function parameters When active, the parameters are displayed as tooltips for the
functions.
Automatic indent/outdent If active, for the text input, source file sections and blocks are
indented automatically by the set tab width.
See: Indentations and tabs (Page 33).
Parameter Description
Folding active If active, the column with the folding information is displayed
at the left-hand side next to the edit area.
You can then hide blocks in an ST source file so that only the
first line of the block remains visible.
See: Folding (showing and hiding blocks) (Page 35).
Display indentation level If active, you can optically highlight the indent and outdent
for blocks using vertical help lines (in accordance with the set
tab size).
See: Indentations and tabs (Page 33).
Display bracket pairs If active, the associated bracket of the pair that belongs to the
bracket where the cursor is located will be found and optically
highlighted.
See: Other ST editor tools (Page 52).
Code snippets If active, after input of certain keywords (such as IF, WHILE,
VAR), a window opens to display a code snippet for the asso‐
ciated keyword (e.g. IF (condition) … END_IF). This code snip‐
pet can be transferred to the ST source file.
See: Code snippets (Page 50).
Permit Smart-autocomplete (scripting) 1
If active, automatic completion of terms is permitted for the
scripting editor.
Font Font for the display of the text in the ST editor. All non-pro‐
portionally spaced fonts installed on the PC are available for
selection.
Font size Font size (in pt) for the display of the text in the ST editor.
See: Change the font size in the ST editor (Page 41).
Format for status display 2 Format in which the variable values with bit data type are
displayed for the program status or the variable status (for ST
editor only).
See: Properties of the program status (Page 396), variable
status (Page 393)
Note
This setting affects only the behavior during the text input. It does not have any effect on existing
text in the ST sources.
Note
Leading tabs or spaces will be replaced in a line only when the formatting changes their number.
A block is introduced with a keyword and terminated with another keyword, e.g.:
• INTERFACE / END_INTERFACE
• IMPLEMENTATION / END_IMPLEMENTATION
• Declaration blocks (e.g. TYPE / END_TYPE, VAR / END_VAR)
• Program organization units (e.g. PROGRAM / END_PROGRAM)
• Control statements (e.g. IF / END_IF, FOR / END_FOR)
• Block comment (* / *)
Folding must be activated (see below) in order to show and hide blocks. Once this function has
been activated, the column containing the folding information (to the left of the edit area) is
displayed.
How to recognize that a block is displayed with folding activated:
• The (minus) character appears next to the first line of the block.
How to recognize that a block is hidden:
• The (plus) character appears next to the first visible line of the block.
• A hyphen is displayed below this line. This hyphen is visible even if the column containing the
folding information is hidden.
Figure 3-8 ST source file for which all blocks are shown
Figure 3-9 ST source file with hidden IF block (including block comment)
Note
The information relating to displayed and hidden blocks is saved in the project when the ST
source file is closed.
This information is not transferred when the ST source file is exported (Page 75).
Note
The editor window cannot be split if the program status (Page 398) test function is being used.
The snippet editor is disabled when split window is used.
Procedure
How to specify whether spaces and tabs are displayed in the active ST source file:
1. Set the cursor in the opened ST source.
2. Select the View > Formatting symbols context menu.
Proceed as follows
You can change the font size:
• For the current ST source
• For ST source files to be opened subsequently
How to change the font size for the current ST source (alternative):
• Press the CTRL key while moving the mouse wheel
• Press concurrently the CTRL key and one of the following keys on the numeric block:
– ADD (+) to increase,
– MINUS (-) to reduce,
– DIV for 100%.
Procedure
1. In the ST editor, select all the numbers that you want to replace with a series of numbers
(column-by-column, for example); see Selecting text (Page 42).
2. Press the CTRL+SHIFT+F7 shortcut.
The ST editor interprets all selected numbers as being possible elements and attempts to identify
the pattern of the series from the initial elements and to calculate the subsequent elements (see
below). The initial elements of the series must represent integer values. After the calculation has
been performed, the ST editor replaces all the selected numbers which follow the initial
elements with the calculated values.
*HQHUDWHQXPHULFDO
6HOHFWFROXPQVRILQGLFHV VHTXHQFH
$/7PRXVH &75/6+,)7)
*HQHUDWHQXPHULFDO
6HOHFWFROXPQVRIYDOXHV VHTXHQFH
$/7PRXVH &75/6+,)7)
an+1 = f(an) = j · an + k
Coefficients j and k are calculated from the initial elements in the series:
1. First of all, an attempt is made to determine the integer coefficients j and k from the
three initial elements of the series of numbers a1, a2 and a3 (j ≥ 0).
2. If this is not possible, only the first two elements a1 and a2 are used for the calculation:
– Coefficient j will be set to 1.
– Coefficient k will be determined from the resulting formula a2 = a1 + k.
These values are used to calculate the series of numbers. All selected numbers will be replaced
by the calculated elements; the initial elements of the series which are used remain unchanged.
The following table shows some examples for series of numbers calculated in this manner.
Table 3-2 Examples for linear series of numbers with specified initial elements
Note
The initial elements of the series used for the calculation must represent integer values.
However, they can also be entered as floating-point numbers.
When the series is calculated, the numbers to be taken into account must all be selected.
The selected area must only contain numbers and certain special characters (e.g. opening and
closing brackets, commas).
The first time an impermissible character is encountered in the selected area, the calculation of
the series will be aborted.
See the examples in the following figure.
6HOHFWFROXPQV *HQHUDWHQXPHULFDO
$/7PRXVH VHTXHQFH
&75/6+,)7)
(UURU 5HVXOW
1XPEHUVQRWIXOO\ ,QFRUUHFWQXPHULFDO
VHOHFWHG VHTXHQFH
6HOHFWFROXPQV *HQHUDWHQXPHULFDO
$/7PRXVH VHTXHQFH
&75/6+,)7)
(UURU 5HVXOW
,PSHUPLVVLEOH ,QFRPSOHWH
FKDUDFWHUVVHOHFWHG QXPHULFDOVHTXHQFH
Figure 3-17 Examples of how incorrect selections cause unwanted results when generating a series of
numbers in the ST editor
Note
Bookmarks are saved when the ST source file is closed.
Jump to bookmark
How to jump to the next bookmark within the ST source:
• Select the Bookmarks > Next bookmark context menu.
How to jump to the previous bookmark within the ST source:
• Select the Bookmarks > Previous bookmark context menu.
Procedure
How to automatically complete an identifier:
1. Write the first characters of the identifier (e.g. the letters of a word).
2. Press the Ctrl+space key combination.
The selection possibilities are displayed in a window.
3. Expand or refine the selection options displayed:
– Enter additional characters
– Delete characters
– Use the left/right arrow keys to move the cursor
4. Use the up/down arrow keys to select the required identifier.
5. Accept the identifier. The current word is overwritten.
Note
If only a single identifier is offered for selection, the selection window will not be opened and the
identifier completed immediately.
Functional description
The following identifiers that begin with the specified character will be offered:
• Keywords of the Structured Text language
• Identifiers from the command library
• For technology objects including their system variables and configuration data
• Identifiers of the own ST source:
– Program organization units (POU)
– Data types
– Variables and constants
– Structure elements
• Identifiers from program sources used
Note
Identifiers from the own ST source or from program sources used will be displayed correctly only
when the corresponding program source has been compiled.
The display is made context-sensitive, only those types of identifiers that are appropriate at the
associated location of the ST source will be offered:
• Within a declaration block, only data types and keywords
• Within a program organization unit (POU), no data types
• For a structure (e.g. var_struct.xx), only structure components
Rule Description
Creating and naming You create new snippets with the snippet editor. Enter a unique name. Per‐
snippets missible characters are A-Z, a-z, 0-9 and _.
Renaming snippets You can rename snippets that have already been created.
Deleting snippets You can delete snippets that have already been created. Perform the Save
function afterwards. Only then can the name of the deleted snippet be used
again for new snippets.
Snippet toolbar
The toolbar contains the following functionalities:
Function Description
Load snippets into the ed‐ This function loads the changes that have been made in the snippet editor
itor – without saving into the ST editor.
Save This function saves the selected snippet or all of the snippets under the se‐
lected node in the tree.
Save all This function saves all of the changes that have been made since the last save.
Reject This function rejects the changes that have been made to the selected snip‐
pet or all of the changes in the selected node in the tree.
Reject all This function rejects all of the changes that have been made since the last
save.
Import This function loads the user-defined snippets from the XML input file. The
validity of the file is checked. If there is an error, a corresponding message is
output. All existing user-defined snippers are deleted during the import.
Export This function saves the user-defined snippets into an XML file. For this pur‐
pose, you create a new file or overwrite an existing one. The changes in the
snippet are saved before the export.
Help This function calls the context-sensitive online help.
Close This function closes the snippet editor. Save your snippets before closing the
editor.
Snippet tree
The snippet editor shows the hierarchy of all of the available snippets in a clear tree structure.
The tree has a root node "Snippets" with two subordinate elements by the name of "STSnippets"
for non_OOP- and "STSnippetsOOP for OOP-relevant snippets". Both contain pre-defined and
user-defined snippets. The snippet IDs in the snippet tree are sorted alphabetically and all of the
pre-defined snippets (recognizable by the lock icon) are listed first, in alphabetical order.
Only user-defined snippets can be created, changed, or deleted. Master elements, scope IDs or
pre-defined snippets cannot be changed, deleted, or created. After you have created a new
snippet, the new snippet key (name) will be alphabetically sorted into the user-defined snippets
in the right position in the tree.
Symbol Meaning
Accept and compile
Click this symbol to transfer the active ST source file to the project and compile it into
executable code.
See: Starting the compiler (Page 61).
Insert ST source file
Click this icon to create a new ST source file. The icon is active only when the PROGRAMS
folder where the ST source file is to be saved is selected in the project navigator.
See: Insert ST source file (Page 25).
Program status
Click this icon to start the program status test mode. During the program execution, you
can monitor the values of the variables marked in the ST source.
The following prerequisites are necessary:
1. The program must be compiled with the appropriate compiler option.
2. The project and the program must be loaded into the target system.
3. An online connection to the target system must have been established.
Reclick this icon to end the program status.
See: Using the program status (Page 398).
Note: Status program and the snippet editor cannot be active at the same time.
• Close the snippet editor to open the status program.
Stop monitoring of the program variables
Click this icon in the program status test mode to stop the monitoring of the program
variables.
See Using the program status (Page 398).
Continue monitoring of the program variables
Click this icon in the program status test mode to continue the monitoring of the pro‐
gram variables.
See: Using the program status (Page 398).
Refresh
Click this symbol in the program status test mode to force updating of the values dis‐
played. The monitoring of the program variables must have been activated.
See: Using the program status (Page 398).
Symbol Meaning
Format current selection
Click this symbol to indent the blocks in the selected text area by one tab width, in
accordance with the block hierarchy.
See Indentations and tabs (Page 33).
Formatting symbols on/off
Click this symbol to show or hide blanks and tabs in the active ST source file.
See Displaying blanks and tabs (Page 40).
Insert/remove bookmark
Click this symbol to set a bookmark in the current line of the active ST source file or to
delete an existing bookmark.
See: Using bookmarks (Page 46).
Next bookmark
Click this symbol to jump to the next bookmark in the active ST source file.
See: Using bookmarks (Page 46).
Previous bookmark
Click this symbol to jump to the previous bookmark in the active ST source file.
See: Using bookmarks (Page 46).
Remove all bookmarks
Click this symbol to remove all bookmarks from the active ST source file.
See: Using bookmarks (Page 46).
Go to start of block
Click this symbol to move the cursor to the start of the current or higher-level block.
Go to end of block
Click this symbol to move the cursor to the end of the current block.
Insert comment character
Click this icon to convert to comment on the selected lines or line fragments or to insert
a comment character.
See Comments (Page 109).
Remove comment character
Click this icon to reactivate commented lines or line fragments.
See Comments (Page 109).
Function Meaning/information
Open called block 1
If the cursor is positioned in the identifier of a user-defined program organization
unit (POU), e.g. when calling a function or declaring an instance of a function
block:
Select this command to open and edit the source of this POU (ST source file, MCC
chart, LAD/FBD program).
See: Open called block (Page 49).
Refactoring You can change the case or rename. The function provides a list of suggested
renames of the symbols used in the actual unit, which differ in terms of notation
from the symbols declared in the cross-references. You can decide which changes
need to be applied. To avoid inconsistencies, compile the project afterwards.
Surround with Select this command to surround the selected text with pre-defined code snippets.
E.g. surround the selected variable with an If instruction.
Cut Select this command to cut the selected area from the ST source file and save it to
the clipboard.
Copy Select this command to copy the selected area to the clipboard.
Paste Select this command to insert the contents of the clipboard into the ST source file
at the current cursor position.
Copying text with syntax coloring Select this command to copy the selected area in RTF format to the clipboard. This
allows the insertion of text including syntax coloring into text processing pro‐
grams.
The copied text cannot be inserted into the ST editor.
Delete Select this command to delete the selected area or the character to the right of the
cursor.
Select all Select this command to select all of the text in the ST source file.
See: Select text (Page 42).
View
Function Meaning/information
Line numbering on/off Select this command to show or hide the line numbers in the active ST source file.
See: Other ST editor tools (Page 52).
Indent help Select this command to highlight the indents and outdents for blocks in the active
ST source file by means of vertical auxiliary lines (in accordance with the set tab
width).
See: Indentations and tabs (Page 33).
Display bracket pairs Select this command to highlight both brackets of a pair in the active ST source
file, if the cursor is positioned at one of the two brackets.
See: Other ST editor tools (Page 52).
Formatting symbols Select this command to show or hide blanks and tabs in the active ST source file.
See: Displaying blanks and tabs (Page 40).
Folding Select this command to activate or deactivate folding in the active ST source file.
The folding information in the active ST source file is then displayed or hidden.
See: Folding (showing and hiding blocks) (Page 35).
Format current selection Select this command to indent the blocks in the selected text area by one tab
width, in accordance with the block hierarchy.
See: Indentations and tabs (Page 33).
Split window Select this command to split the active window of the ST editor into two segments
horizontally, giving you two views of the same ST source file.
See: Splitting the editor window (Page 39).
Code snippets Select this command to activate or deactivate code snippets in the activate ST
source file. If active, after input of certain keywords (such as IF, WHILE, VAR), a
window opens to display a code snippet for the associated keyword (e.g. IF (con‐
dition) … END_IF). This code snippet can be transferred to the ST source file.
See: Code snippets (Page 50).
Bookmarks
Insert/remove bookmark Select this command to set a bookmark in the current line of the active ST source
file or to delete a bookmark which has been set there.
See: Using bookmarks (Page 46).
Next bookmark Select this command to jump to the next bookmark in the active ST source file.
See: Using bookmarks (Page 46).
Previous bookmark Select this command to jump to the previous bookmark in the active ST source file.
See: Using bookmarks (Page 46).
Remove all bookmarks Select this command to remove all bookmarks from the active ST source file.
See: Using bookmarks (Page 46).
Print
Complete source Select this command to print the complete active ST source file.
Selection Select this command to print the selected lines of the active ST source file.
Variable declaration Select this command to declare a variable "on-the-fly".
See: Declaring variables in the Variable declaration dialog box ("on-the-fly" varia‐
ble declaration) (Page 305).
Selection in upper case Select this command to change the selected text to upper case.
See: Other ST editor tools (Page 52).
Selection in lower case Select this command to change the selected text to lower case.
See: Other ST editor tools (Page 52).
Function Meaning/information
Code indentation Select this command to format the text automatically.
Indent selected area • If no text is selected:
Select this command to move the text on the right of the cursor to the next tab
position.
• If text is selected in one single line:
Select this command to delete the selected text and move the subsequent text
to the next tab position.
• If text is selected in multiple lines:
Select this command to indent the selected area (Page 33).
A tab character ($09) or the equivalent number of spaces ($20) will be inserted,
depending on the settings for the ST editor (Page 31).
Undo selected area • If no text is selected:
Select this command to move the cursor to the previous tab position.
• If text is selected in one single line:
Select this command to cancel the selection and move the cursor to the pre‐
vious tab position.
• If text is selected in multiple lines:
Select this command to outdent the selected area (Page 33).
Go to start of block Select this command to move the cursor to the start of the current or higher-level
block.
Go to end of block Select this command to move the cursor to the end of the current block.
Go to start of block, level 0 Select this command to move the cursor to the start of the higher-level block, 1st
level.
Go to start of block, level 1 Select this command to move the cursor to the start of the higher-level block, 2nd
level.
Go to line Select this command to move the cursor to a specific line. A dialog box for speci‐
fying the line number is opened.
Set/remove breakpoint 1 Select this command to set a breakpoint at the selected code position or to remove
an existing breakpoint.
See: Setting breakpoints (Page 406).
Activate/deactivate breakpoint 1
Select this command to activate or deactivate the breakpoint at the selected code
position.
See: Activating breakpoints (Page 414).
Add to watch table 1
New watch table If the cursor is within a variable or if the variable is selected:
Select this command to create a new watch table and to take it into this variable.
(Name of a watch table) If the cursor is within a variable or if the variable is selected:
Select this command to take the variable into the selected watch table
Go to 1
Local use >> If the cursor is within a variable or if the variable is selected:
Select this command to jump to the next use of the variable in the ST source file.
Local use << If the cursor is within a variable or if the variable is selected:
Select this command to jump back to the previous use of the variable in the ST
source file.
Function Meaning/information
Declaration position If the cursor is within a variable or if the variable is selected:
Select this command to jump to the declaration position of the variable. If the
variable is declared in a used source or library, the source or library is opened.
Points of use If the cursor is within a variable or if the variable is selected:
Select this command to list all the points of use of the variable in the detail view.
1
Not available in the script editor context menu.
3.3.4.19 Shortcuts
The ST editor also provides keyboard shortcuts. Some commands can also be called via the Edit
or ST editor menus:
The keyboard shortcuts related to editor functions also apply to the script editor.
Shortcuts Description
F2 Jump to the next bookmark.
F3 Find next (menu Edit > Find next).
A search is performed on the last text in the search field, even if it has been closed (see CTRL
+F).
F9 1 Set or remove a breakpoint (menu Debug > Set/remove breakpoint).
F12 1
Activate or deactivate a set breakpoint (menu Debug > Activate/deactivate breakpoint).
BACK Delete the character to the left of the cursor.
INS Switch between insert mode and overwrite mode.
DEL Delete the selected area or the character to the right of the cursor (menu Edit > Delete).
Arrow key Move the cursor.
POS1 Move cursor to the beginning of the line.
END Move cursor to the end of the line.
PG UP Move up one page. The cursor follows.
PG DN Move down one page. The cursor follows.
TAB • If no text is selected:
Move the text on the right of the cursor to the next tab position.
• If text is selected in one single line:
Delete the selected text and move the subsequent text to the next tab position.
• If text is selected in multiple lines:
Indent selected area.
A tab character ($09) or the equivalent number of spaces ($20) will be inserted, depending
on the settings for the ST editor.
SHIFT+F2 Jump to the previous bookmark.
SHIFT+BACK Delete the character to the left of the cursor.
SHIFT+INS Paste clipboard contents (menu Edit > Paste).
SHIFT+DEL Cut the selected area (menu Edit > Cut).
SHIFT+Arrow key Select line of text.
SHIFT+POS1 Select text back to the beginning of the line.
Shortcuts Description
SHIFT+END Select text to the end of the line.
SHIFT+PG UP Move up one page. Select lines of text up to the new cursor position.
SHIFT+PG DN Move down one page. Select lines of text up to the new cursor position.
SHIFT+TAB • If no text is selected:
Jump to the preceding tab position.
• If text is selected in one single line:
Jump to the preceding tab position.
• If text is selected in multiple lines:
Outdent selected area.
CTRL+A Select all text (menu Edit > Select All).
CTRL+B 1
Accept and compile ST source file (menu ST source file > Accept and compile).
CTRL+C Copy the selected area to the clipboard (menu Edit > Copy).
CTRL+D Duplicate the current line or the area selected.
CTRL+F Find text in ST source file (menu Edit > Find)
If text is selected in a single line, this is taken into the search screen form.
CTRL+H Replace text in ST source file (menu Edit > Replace).
CTRL+J Display the next search result in the project-wide search (menu Edit > Display next position).
CTRL+L Copy the current line or the selected area to the clipboard.
CTRL+U Change selected text to lower case.
CTRL+V Paste clipboard contents (menu Edit > Paste).
CTRL+X Cut the selected area (menu Edit > Cut).
CTRL+Y Redo the last action (menu Edit > Redo).
CTRL+Z Undo the last action (menu Edit > Undo).
CTRL+space Automatic completion
CTRL+F2 Set or remove bookmarks.
CTRL+F4 Close the active window (e.g. menu ST source file > Close).
CTRL+F5 1 Remove all the breakpoints (in all the program source) in the SIMOTION device (menu De‐
bug > Remove all breakpoints).
CTRL+F7 1 Activate or deactivate the program status function (menu ST source file > Program sta‐
tus on/off).
CTRL+F8 1 Continue to execute the program at the activated breakpoint (menu Debug > Continue).
CTRL+BACK Delete the word to the left of the cursor.
CONTROL+INS Copy the selected area to the clipboard (menu Edit > Copy).
CTRL+DEL Delete the word to the right of the cursor.
CTRL+arrow key (left/right) Move cursor left or right by one word.
CTRL+arrow key (up/down) Scroll one row up or down. The cursor remains in the same position for as long as it is visible
in the window.
CTRL+POS1 Move cursor to the beginning of the ST source file.
CTRL+END Move cursor to the end of the ST source file.
CTRL+SHIFT+B Highlight bracket pairs in the current ST source file.
CTRL+SHIFT+F Search for texts within the project (menu Edit > Search in the project)
CTRL+SHIFT+G Replace texts within the project (menu Edit > Replace in the project)
CTRL+SHIFT+H Assign parameters to a call. Under development.
CTRL+SHIFT+L Go to a line in the ST editor.
Shortcuts Description
CTRL+SHIFT+S Code indentation.
CTRL+SHIFT+U Change selected text to upper case.
CTRL+SHIFT+F2 Remove all bookmarks from the ST source file.
CTRL+SHIFT+F3 Arrange windows, tile horizontally.
CTRL+SHIFT+F5 Arrange windows, tile vertically.
CTRL+SHIFT+F7 Generate a simple series of numbers (sequence) in the selected area.
CTRL+SHIFT+F8 Format selected area.
CTRL+SHIFT+F9 Move cursor to the start of the current or higher-level block.
CTRL+SHIFT+F10 Move cursor to the end of the current block.
CTRL+SHIFT+F11 Move cursor to the start of the higher-level block, 1st level.
CTRL+SHIFT+F12 Move cursor to the start of the higher-level block, 2nd level.
CTRL+SHIFT+BACK Delete text to the left of the cursor up to the beginning of the line.
CTRL+SHIFT+DEL Delete text to the right of the cursor up to the end of the line.
CTRL+SHIFT+arrow key (left/ Select word to the left or right of the cursor.
right)
CTRL+SHIFT+POS1 Select lines of text back to the beginning of the ST source file.
CTRL+SHIFT+END Select lines of text up to the end of the ST source file.
CTRL+ALT+C Folding: Hide all blocks of the current ST source file.
CTRL+ALT+D Folding: Show all blocks of the current ST source file.
CTRL+ALT+F Folding: Show or hide folding information in the current ST source file.
CTRL+ALT+I Show indentation level in the current ST source file.
CTRL+ALT+L Show or hide line numbers in the current ST source file.
CTRL+ALT+O 1 If the cursor is in the identifier of a program organization unit (POU): Open called block,
i.e. open program source of the POU and position the cursor.
CTRL+ALT+R Folding: Show all subordinate blocks.
CTRL+ALT+S Split window or cancel split (menu ST source file > Split window).
CTRL+ALT+T Folding: Show/hide block.
CTRL+ALT+V Folding: Hide all subordinate blocks.
CTRL+ALT+W Show or hide blanks and tabs in the current ST source file.
CTRL+ADD (numeric keypad) Increase font size in the current ST source file.
CTRL+MINUS (numeric keypad) Decrease font size in the current ST source file.
CTRL+DIV (numeric keypad) Change font size in the current ST source file to 100%.
ALT+N Declare variable "on-the-fly" in the Variable declaration dialog box (Page 305).
ALT+SHIFT+L Change selected text to upper case.
ALT+SHIFT+S Activate or deactivate code snippets (Page 50).
ALT+SHIFT+U Change selected text to lower case.
ALT+SHIFT+Arrow key Select text by column.
ALT+SHIFT+POS1 Select columns of text back to the beginning of the line.
ALT+SHIFT+END Select columns of text to the end of the line.
ALT+SHIFT+Pg Up Move down one page. Select columns of text up to the new cursor position.
ALT+SHIFT+PG DN Move down one page. Select columns of text up to the new cursor position.
ALT+Arrow key Moves the selected code section up or down in the editor.
1
Keyboard shortcut does not apply to the script editor.
Table 3-6 Combined keyboard and mouse actions for ST editor and script editor
Requirement
The ST source file has been opened with the ST editor.
Proceed as follows
1. Click in the window with the ST editor. The dynamic ST source file menu appears.
2. Select the ST source file > Accept and compile menu command.
Note
The ST source file menu is dynamic. It only appears if the window of the ST editor is active.
The compiler checks the syntax of the ST source file. The "Compile/check output" tab of the detail
view displays the successful compilation of the source text or compiler errors. The error details
include: The name of the ST source file, the number of the line in which the error occurred, the
error number and the error description.
Procedure
1. Select the menu Options > Settings.
2. Select the Compiler tab.
3. Define the settings according to the following table.
4. Confirm with OK.
Parameter
Parameter Description
Display warning classes 1
In addition to error messages, the compiler can issue warnings and information. You can set the
scope of the warning messages to be output:
Active: The compiler issues warnings and information for the selected class.
Inactive: The compiler suppresses warnings and information for the respective class.
See also Meanings of the warning classes (Page 72).
Selective linking
1
Active (standard): Unused code is removed from the executable program.
Inactive: Unused code is retained in the executable program.
Use preprocessor 1
Active: Preprocessor is used.
Inactive (standard): Preprocessor is not used.
See Controlling the preprocessor (Page 363).
Enable program status 1
Active: Additional program code is generated to enable monitoring of program variables (in‐
cluding local variables).
Inactive (standard): Program status not possible.
See Properties of the program status (Page 396).
Permit language extensions 1
Active: Language elements are permitted that do not comply with IEC 61131‑3.
• Direct bit access to variables of a bit data type (Page 145)
• Accessing the input parameter of a function block while outside the function block
(Page 197)
• Calling a program while in a different program (Page 203)
Inactive (standard): Only language elements that comply with IEC 61131-3 are permitted.
Only create program instance Active: The local variables of a program are only stored once in the user memory of the unit.
data once1 This setting is required for calling a program while inside a different program (Page 203). This
setting also improves the download in RUN mode, see corresponding section in the Basic
Functions Function Manual.
Inactive (standard): The local variables of a program are stored according to the task assign‐
ment in the user memory of the respective task.
See Memory areas of the variable types (Page 289).
Parameter Description
Permit additional languages, Active: Additional language elements can be used in accordance with IEC 61131‑3 3rd edition.
IEC61131 3rd edition1 The corresponding keywords are locked as reserved or protected identifiers.
• Nested block comments (Page 109)
• CONTINUE statement (Page 168)
• Standard-compliant system functions LOWER_BOUND and UPPER_BOUND (Page 188) for
determining the limits of a dynamic ARRAY
• Additional system functions (see Basic Functions Function Manual):
– FROM_BIG_ENDIAN
– FROM_LITTLE_ENDIAN
– IS_VALID
– TO_BIG_ENDIAN
– TO_LITTLE_ENDIAN
Inactive (standard): The additional language elements cannot be used. The corresponding
keywords are not locked.
Note
When saving the project in the old project format: Projects in which language elements that
require this compiler option are used cannot be compiled correctly in SIMOTION SCOUT ver‐
sions earlier than V4.5.
Permit object-oriented pro‐ Active: With the ST programming language additional language elements for object-oriented
gramming1 programming can be used in accordance with IEC 61131‑3 3rd edition. The corresponding key
words are locked as reserved or protected identifiers in all programming languages.
Inactive (standard): The keywords for object-oriented programming are not locked in all pro‐
gramming languages. The additional language elements cannot be used with the ST program‐
ming language.
Note
Independently of the setting the program organization units generated in ST sources using
object-oriented programming (e.g. classes, methods) can be used in program sources for all
programming languages.
When saving the project in the old project format: Projects in which language elements that
require this compiler option are used cannot be compiled correctly in SIMOTION SCOUT ver‐
sions earlier than V4.5.
Permit forward declarations Only for the ST programming language.
(ST) Forward declarations enable you to use program organization units (POUs) before they are
fully defined. Prototype declarations of program organization units are possible prior to their
use, but are only required for an instance declaration of a function block or a class.
Active: Forward declarations are permitted.
Inactive (standard): Forward declarations are not permitted.
See Forward declarations (Page 375).
Forward declarations are always permitted with the MCC and LAD/FBD programming languag‐
es.
It is also possible to make a local setting on the ST source file (Page 65). Please also refer to the
description of the effectiveness of global or local compiler settings (Page 69).
Parameter Description
Permit single step (MCC) Only for the MCC programming language.
Active: An additional program code is created which enables individual program steps to be
monitored.
Inactive: Single step is not possible.
This function facilitates debugging of your program.
See "Tracking single steps in the program" in the MCC Programming Manual.
It is also possible to make a local setting on the MCC unit. Please also refer to the description
of the effectiveness of global or local compiler settings (Page 69).
Permit trace (MCC - only for RT Only for the MCC programming language and for SIMOTION Kernel as of version V4.2.
versions >= 4.2) Active: An additional program code is created which enables monitoring of the program exe‐
cution in program branches which are executed cyclically.
Inactive: Trace is not possible.
This function facilitates debugging of your program.
See "Tracking program execution per trace" in the MCC Programming Manual.
It is also possible to make a local setting on the MCC unit. Please also refer to the description
of the effectiveness of global or local compiler settings (Page 69).
Optimize execution order Only for LAD/FBD programming languages.
(LAD/FBD) Active: LAD/FBD networks are calculated in the optimized execution order.
Inactive: LAD/FBD networks are calculated in the non-optimized execution order.
Default setting Click the button to restore the default setting.
Create detailed message log Here, you can control the scope of the message log that will be displayed in the workbench's
during compilation of the detail view when you call the Save and compile changes command in SIMOTION SCOUT.
project/devices2 Active: A detailed message log is created that is similar to that for single compilation of an ST
source file.
Inactive: A compressed message log is created.
1
Local settings also possible, see Local settings of the compiler (Page 65). Please also refer to the description of the effec‐
tiveness of global or local compiler settings (Page 69).
2
User-specific settings. Valid for all SIMOTION projects that the user processes.
Note
You may have to save and compile the project for the settings to take effect.
Procedure
1. Open the Properties window for the ST source file, see Changing the properties of an ST
source file (Page 27):
Select the ST source file in the project navigator and select the Edit > Object properties menu
command.
2. Select the Compiler tab.
Parameter
Table 3-8 Parameters for the local compiler settings for the ST source file
Parameter Description
Exclude source from the com‐ Active: This source is not compiled upon compilation of the project, the device or the library
pilation (e.g. Menu Project > Save and recompile all). The source is marked accordingly in the project
navigator. Corresponding information is provided upon compilation.
Inactive (standard): The source is compiled upon compilation of the project, the device or the
library.
Use global settings This checkbox is available for every parameter which also has a global setting. It can only be
selected when the "Do not recompile the source if global compiler settings have been changed"
checkbox is inactive. This is where you define whether the global settings are adopted or
whether the local settings will apply.
See the description under "Effectiveness of global or local compiler settings (Page 69)".
Use the second checkbox or the other checkboxes for the relevant parameters (described
below) to define the local settings.
Selective linking1 Active: Unused code is removed from the executable program.
Inactive: Unused code is retained in the executable program.
Gray background (display only): The global setting displayed is adopted (when "Use global
settings" = active).
Parameter Description
Use preprocessor1 Active: Preprocessor is used.
Inactive: Preprocessor is not used.
Gray background (display only): The global setting displayed is adopted (when "Use global
settings" = active).
See Controlling the preprocessor (Page 363).
Enable program status1 Active: Additional program code is generated to enable monitoring of program variables (in‐
cluding local variables).
Inactive: Program status not possible.
Gray background (display only): The global setting displayed is adopted (when "Use global
settings" = active).
See Properties of the program status (Page 396).
Permit language extensions 1
Active: Language elements are permitted that do not comply with IEC 61131‑3.
• Direct bit access to variables of a bit data type (Page 145)
• Accessing the input parameter of a function block while outside the function block
(Page 197)
• Calling a program while in a different program (Page 203)
Inactive: Only language elements that comply with IEC 61131-3 are permitted.
Gray background (display only): The global setting displayed is adopted (when "Use global
settings" = active).
Permit additional languages, Active: Additional language elements can be used in accordance with IEC 61131‑3 3rd edition.
IEC61131 3rd edition1 The corresponding keywords are locked as reserved or protected identifiers.
• Nested block comments (Page 109)
• CONTINUE statement (Page 168)
• Standard-compliant system functions LOWER_BOUND and UPPER_BOUND (Page 188) for
determining the limits of a dynamic ARRAY
• Additional system functions (see Basic Functions Function Manual):
– FROM_BIG_ENDIAN
– FROM_LITTLE_ENDIAN
– IS_VALID
– TO_BIG_ENDIAN
– TO_LITTLE_ENDIAN
Inactive: The additional language elements cannot be used. The corresponding keywords are
not locked.
Gray background (display only): The global setting displayed is adopted (when "Use global
settings" = active).
Note
When saving the project in the old project format: Projects in which language elements that
require this compiler option are used cannot be compiled correctly in SIMOTION SCOUT ver‐
sions earlier than V4.5.
Parameter Description
Permit object-oriented pro‐ Active: Additional language elements for object-oriented programming can be used in ac‐
gramming1 cordance with IEC 61131‑3 3rd edition. The corresponding keywords are locked as reserved or
protected identifiers.
Inactive: The additional language elements cannot be used. The corresponding keywords are
not locked.
Gray background (display only): The global setting displayed is adopted (when "Use global
settings" = active).
Note
Independently of the setting the program organization units created in other ST source files
using object-oriented programming (e.g. classes, methods) can be used in this source.
When saving the project in the old project format: Projects in which language elements that
require this compiler option are used cannot be compiled correctly in SIMOTION SCOUT ver‐
sions earlier than V4.5.
Only create program instance Active: The local variables of a program are only stored once in the user memory of the unit.
data once1 This setting is required for calling a program while inside a different program (Page 203). This
setting also improves the download in RUN mode, see corresponding section in the Basic
Functions Function Manual.
Inactive: The local variables of a program are stored according to the task assignment in the
user memory of the respective task.
Gray background (display only): The global setting displayed is adopted (when "Use global
settings" = active).
See Memory areas of the variable types (Page 289).
For further information, refer to the SIMOTION Basic Functions Function Manual.
Issue warnings In addition to error messages, the compiler can issue warnings and information. You can set the
Warning classes 1 scope of the warning messages to be issued.
"Issue warnings" checkbox:
Active: The compiler issues the warnings and information according to the warning class
selection that follows.
Inactive: The compiler suppresses all warnings and information concerning this unit. The
checkboxes for the warning classes are hidden.
Gray background (display only): Operating on a global setting basis, the compiler always
issues warnings and information in accordance with the global warning class selection shown
below (if "Use global settings" = active).
"Warning classes" checkboxes (only if "Issue warnings" = active):
Active: The compiler issues warnings and information for the selected class.
Inactive: The compiler suppresses warnings and information for the respective class.
Gray background (display only): The global setting displayed is adopted (when "Use global
settings" = active).
See also Meanings of the warning classes (Page 72).
Permit forward declarations 1
Forward declarations enable you to use program organization units (POUs) before they are
fully defined. Prototype declarations of POUs are possible prior to their use, but only required
for an instance declaration of a function block.
Active: Forward declarations are permitted.
Inactive: Forward declarations are not permitted.
Gray background (display only): The global setting displayed is adopted (when "Use global
settings" = active).
See Forward declarations (Page 375).
Parameter Description
Permit OPC‑UA / ‑XML (load Active (standard): Symbol information for the unit variables of the ST source file is available
symbols to RT) in the SIMOTION device.
This is required for:
• The _exportUnitDataSet and _importUnitDataSet functions; see the SIMOTION Basic Func‐
tions Function Manual
• The watch function of IT DIAG.
Inactive: Symbol information is not created.
Ignore global compiler set‐ Active: The global settings of the compiler are ineffective for all parameters. The "Use global
tings settings" checkboxes cannot be selected and are grayed out. When changing the global com‐
(The program is not compiled piler settings, the ST source file is not recompiled.
again if the global settings are This setting is required for libraries that have a know-how protection program (Page 74) with
changed or extended.) a "High" level:
• For all program sources in this library.
• For the library itself.
Inactive (standard): The checkboxes "Use Global Settings" can be selected for all parameters
and are presented against a white background. These checkboxes specify whether the global
properties are taken over for the corresponding parameters.
This setting means that in the following case the ST source file is compiled even though all
"Accept global settings" checkboxes are inactive:
• The global settings of the compiler have been changed and the menu Project > Save and
compile changes is selected.
See the description under "Effectiveness of global or local compiler settings (Page 69)".
1
Global setting also possible, see Global settings of the compiler (Page 62). Please also refer to the description of the effec‐
tiveness of global or local compiler settings (Page 69).
Note
You can check the current compiler options which will be effective the next time the program
source is compiled.
• To do this, select the "Additional settings" tab (Page 72) in the Properties window of the
program source.
For the detailed description of the compiler error messages, specify which warning classes are
assigned to the individual warnings (Page 506) and information (Page 513).
Requirement
The Properties window of the program source (Page 27) is open.
Procedure
To display the current compiler options using the global or local settings of the compiler
(Page 62):
• Select the Additional settings tab.
The current compiler options for the program source are displayed. They are valid for a future
compilation.
To display the compiler options used for the last compilation of the program source:
• Select the Compiler tab.
The following are displayed for the last compilation of the program source:
– The version of the used compiler.
– The used compiler options.
Note
The compiler options can also be specified when the compiler is called from the command line,
e.g. using scripting.
Note
If you export in XML format, the ST source files are exported in an encrypted form. When
importing the encrypted XML files, the know-how protection, including login and password, is
retained.
See also
Know-how protection for libraries (Page 340)
Syntax Meaning
Identifier=text The specified identifier is defined and replaced in the ST source file by the
’Identifier=text’ specified text.
"Identifier=text" Permissible characters: See table footnote.
If the expression contains blanks (e.g. in the text), the syntax "Identifi‐
er=text" must be used.
Identifier The specified identifier is defined and replaced in the ST source file by blank
text.
Permissible characters: See table footnote.
Multiple preprocessor definitions are separated by commas: Definition_1, Definition_2, …
Permissible characters:
• For identifiers: In accordance with the rules for identifiers: Series of letters (A … Z, a … z), digits (0 … 9)
or single underscores (_) in any order, whereby the first character must be a letter or underscore. No
distinction is made between upper and lower case letters.
• For text: Sequence of any characters other than \ (backslash), ’ (single quote) and ” (double quote).
The keywords USES, USELIB and USEPACKAGE are not permitted.
Note
Preprocessor definitions, which are made within an ST source file with pragmas, overwrite the
definitions in the Properties dialog box.
Note the information relating to preprocessor statements (Page 364).
An overview is provided here of the export, import and printing of an ST source file.
Procedure
To export an ST source file as an ASCII file:
1. Open the ST source file (Page 27), entering the password if necessary (for ST source files
with know-how protection (Page 74)).
2. Make sure that the cursor is in the ST editor.
3. Select the ST source file > Export menu command.
4. Enter the path and file name for the ASCII file and click Save to confirm.
The ST source file is saved as an ASCII file; the file name is given the default extension *.st
Alternatively, you can also proceed as follows:
1. Select the ST source file in the project navigator.
2. Select Export from the context menu.
3. Only for ST source files with know-how protection (Page 74) and which are not already open:
If the user with the log-in details assigned to the ST source file has not yet logged in:
– Enter the corresponding password for the displayed login.
The know-how protection for this unit is temporarily canceled (for this export).
– If required, activate the Use login as a standard login checkbox.
You will be logged in with this login and can now export or open additional units to which
the same login is assigned without having to re-enter the password.
4. Enter the path and file name for the ASCII file and click Save to confirm.
Note
Folding information (Page 35) and bookmarks (Page 46) are not exported.
An ST source file with know-how protection is exported without protection.
An XML file with the ST source file name and a folder with additional associated XML files are
saved in the specified path.
Note
Know-how-protected ST source files can also be exported in XML format. The ST source files are
exported encrypted. When importing the encrypted XML files, the know-how protection,
including login and password, is retained.
Folding information (Page 35) and bookmarks (Page 46) are not exported.
Note
Note that if the XML data to be imported was exported from an ST source file that was know-how
protected: When importing the encrypted XML data, the know-how protection, including login
and password, is retained.
Note
If you use an external editor, the dynamic ST source file menu and its entries are not available.
The corresponding toolbar is also inactive.
It must be possible to start compilation of the ST source file from the external editor.
Program status (Page 398) continues with the ST editor.
NOTICE
Data loss possible
If you close a project or exit SIMOTION SCOUT before all windows of the external editor have
been closed, data can be lost!
Close all windows of the external editor before you close a project or exit SIMOTION SCOUT.
Function Meaning/information
Close Select this command to close the active ST source file. In the event of changes, you can decide
whether you want to transfer the changed source file to the project and whether the changes
should be saved in the snippet editor.
Properties Select this command to display the properties of the active ST source file. Several tabs are
provided to make local settings for this source.
See: Changing the properties of an ST source file (Page 27).
Accept and compile Choose this command to transfer the current ST source file to the project and compile into
executable code.
See: Starting the compiler (Page 61).
Execute preprocessor As an option, the preprocessor scans an ST source file before compiling and can, for example,
replace character strings in the file, which will then be taken into account during the compi‐
lation. You can specifically execute the preprocessor statements with this menu command.
Export Select this command to export the active ST source file as text file (ASCII).
See: Exporting an ST source file as a text file (ASCII) (Page 76).
Split window Select this command to split the active window of the ST editor into two segments horizon‐
tally, giving you two views of the same ST source file.
See: Splitting the editor window (Page 39).
Program status on/off Select this command to start the program status test mode. During the program execution,
you can monitor the values of the variables marked in the ST source.
The following prerequisites are necessary:
1. The program must be compiled with the appropriate compiler option.
2. The project and the program must be loaded into the target system.
3. An online connection to the target system must have been established.
Select the command again to close the program status.
See: Using the program status (Page 398).
Save variables You can save retain, unit and global variables with this menu command. You can save these
variables from the RAM/ROM memory of the target device and store them on a data medium
as XML file. When these variables are restored, they can be written from the data medium to
the RAM/ROM memory of the target device.
Restore variables You can restore retain, unit and global variables from the previously exported variables with
this menu command. When these variables are restored, they can be written from the data
medium to the RAM/ROM memory of the target device.
Function Meaning/information
Open Select this command to open the selected ST source file.
See: Opening an existing ST source file (Page 27).
Cut The selected ST source files are deleted and saved on the clipboard.
Copy The selected ST source files are copied to the clipboard.
Paste The contents of the clipboard are inserted in the selected folder.
Delete The selected ST source file is deleted, including all the data.
Rename Select this command in order to change the name of the selected ST source file.
Please note that with name changes, it is not possible to change the referencing to
this name and that the new name must comply with the Rules for identifiers
(Page 95).
Save variables You can save retain, unit and global variables with this menu command. You can
save these variables from the RAM/ROM memory of the target device and store
them on a data medium as XML file. When these variables are restored, they can
be written from the data medium to the RAM/ROM memory of the target device.
Restore variables You can restore retain, unit and global variables from the previously exported
variables with this menu command. When these variables are restored, they can
be written from the data medium to the RAM/ROM memory of the target device.
Expert
Import object Select this command to import XML data to the selected ST source file from an ST
source file which you have previously exported to another project. The existing
data in the ST source file being imported is overwritten.
See: Importing XML data into an ST source file (Page 77).
Save project and export object Select this command to export the selected ST source file in XML format. You can
import the exported data into other projects.
See: Exporting an ST source file in XML format (Page 76).
Accept and compile Choose this command to transfer the current ST source file to the project and
compile into executable code.
See: Starting the compiler (Page 61).
Execute preprocessor As an option, the preprocessor scans an ST source file before compiling and can,
for example, replace character strings in the file, which will then be taken into
account during the compilation. You can specifically execute the preprocessor
statements with this menu command.
Function Meaning/information
Program status on/off Select this command to start the program status test mode. During the program
execution, you can monitor the values of the variables marked in the ST source file.
The following requirements are necessary:
1. The program must be compiled with the appropriate compiler option.
2. The project and the program must be loaded into the target system.
3. An online connection to the target system must have been established.
Select the command again to close the program status.
See: Using the program status (Page 398).
Export Select this command to export the selected ST source file as a text file (ASCII).
See: Exporting an ST source file as a text file (ASCII) (Page 76).
Know-how protection
Set Select this command to protect the selected ST source file from unauthorized
access by third parties. Protected ST source files can only be opened or exported as
plain text files by entering a password.
See: Know-how protection for ST source files (Page 74).
Delete Select this command to cancel the know-how protection for the selected source
file permanently. The password needs to be entered in order to do this.
See: Know-how protection for ST source files (Page 74).
Display reference data An error-free compilation is required for a correct, consistent display of the refer‐
ence data. If required, compile the project, the CPU, the program or the library first.
See: Reference data (Page 355), creating a cross-reference list (Page 355).
Cross references The cross-reference list of the selected ST source file is generated and displayed.
The cross-reference list contains the declaration and uses all the identifiers for the
selected ST source file.
See: Content of the cross-reference list (Page 356).
Program structure The program structure of the selected ST source file is generated and displayed.
The program structure contains all the subprogram calls and their nesting within
the selected ST source file.
See: Content of the program structure (Page 359).
Code attributes The code attributes of the selected ST source file are generated and displayed. The
code attributes contain information about the storage requirements of various
data areas of the selected ST source file.
See: Code attribute contents (Page 361).
Print Select this command to print the selected ST source file. You can choose whether
you wish to print the text of the ST source file and/or their properties.
Print preview Choose this command to generate a preview of the expected print output.
Properties Select this command to display the properties of the selected ST source file. Several
tabs are provided to make local settings for this source file.
See: Changing the properties of an ST source file (Page 27).
Function
The Flash program sets a bit in an output byte of your target system and rotates it within this
byte. This causes each bit of the output byte to be set and reset in succession. After the last bit
of the byte, the first bit is to be set again. You can observe the result of the program at the outputs
of your target system.
3.4.1 Requirements
To create the sample program, you need
• A SIMOTION project and
• A SIMOTION device (e.g. SIMOTION C240) within the project whose output is configured at
address 62.
Proceed as follows
If a project does not yet exist, proceed as follows:
1. Select Project in the menu bar.
2. Select New or Open.
3. Specify a name for a new project, and click OK to confirm.
For details, see the online help.
Proceed as follows
1. In the project navigator, open the tree for your SIMOTION device (programs are assigned to
the SIMOTION device on which they are to run).
2. Select the PROGRAMS folder and choose Insert > Program > ST source file.
3. Enter a name for the ST source file consisting of up to 128 characters (see figure), e.g. ST_1,
and click OK to confirm the entries.
The ST editor appears in the working area. The ST source file ST_1 is inserted in the navigator.
4. Enter the source text from Source text of the sample program (Page 87), preferably with
indented lines. To do this, press the TAB key.
The features of the ST editor are described in Working with the ST editor (Page 29); the
structure of an ST source file is described in detail in Structure of the ST source file (Page 107)
and in Source file sections (Page 251).
5. Use comments as often as possible. Enter your comment after the // characters if the
comment fits on one line of text. If the comment extends across several lines, insert it
between character pairs (* and *).
6. Save the complete project with Project > Save.
A detailed description of the functions is contained in Working with the ST editor (Page 29) and
in Making settings for the compiler (Page 62).
IMPLEMENTATION
PROGRAM Flash
IF counterVar >= 500 THEN // in every 500th pass
%QB62 := outputVar; // set output byte
outputVar := ROL (in := outputVar, n := 1);
(* // rotate bit in byte
one digit to the left*)
counterVar := 0; // reset counter
END_IF;
counterVar := counterVar + 1; // increment counter
END_PROGRAM
END_IMPLEMENTATION
Before you can run or test your program, you must compile it into executable machine code. The
compiler performs this task.
The figure shows an example of compiling the ST source file ST_1 (see Source text of the sample
program (Page 87), in which the following change has been made: The semicolon is missing in
the statement "counterVar := counterVar + 1" at the end of line 18.
The compiler does not detect the error until Line19, because it continues with the compilation
after the missing semicolon.
Once the missing semicolon is added, the ST source file is compiled without errors.
A detailed list of all compiler error messages can be found in Compiler error messages and their
correction (Page 487).
Before you can run the program, you must assign it to an execution level or task. When you have
done this, you can establish the connection to the target system, download the program to the
target system and then start it.
5XOHQDPH
6HTXHQFH
%ORFN
%ORFN
The syntax diagram in the previous figure is read from left to right. The following rule structures
must be observed:
• Sequence: Sequence of blocks
• Option: Statement(s) that can be skipped
• Iteration: Repetition of one or more statements
• Alternative: Branch
%ORFNV
%DVLFHOHPHQWUHTXLULQJQRIXUWKHU &RPSRVLWHHOHPHQWWKDWLVGHVFULEHG
H[SODQDWLRQ E\IXUWKHUV\QWD[GLDJUDPV
7KHVHDUHSULQWDEOHFKDUDFWHUVDQGVSHFLDO
FKDUDFWHUVUHVHUYHGZRUGVDQGSUHGHILQHG
LGHQWLILHUV
7KHVSHFLILFDWLRQVLQWKHVHEORFNVVKRXOG
EHDFFHSWHGZLWKRXWPRGLILFDWLRQV
Formatted and unformatted rules must be observed when entering source text, i.e. when
converting the blocks or elements of a syntax diagram into source text, see Help for the
language description (Page 421).
selection of the main terminals; for a complete overview, refer to Basic elements (terminals)
(Page 423).
4.2.2 Identifiers in ST
Identifiers are names in ST. These names can be defined by the system, such as language
commands. However, the names can also be user-defined, for example, for a constant, variable
or function.
Valid identifiers
Identifiers are made up of letters (A … Z, a … z), numbers (0 … 9) or single underscores (_) in any
order, whereby the first character must be a letter or underscore.
No distinction is made between upper and lower case letters (e.g. Anna and AnNa are
considered to be identical by the compiler).
An identifier can by represented formally by the following syntax diagram:
,GHQWLILHU IRUPDWWHG
/HWWHU /HWWHU
B
/HWWHU 'LJLW
B 8QGHUVFRUH
'LJLW /HWWHU$=D]
8QGHUVFRUH 'LJLW
According to this syntax diagram, the first character of an identifier must be a letter or an
underscore. An underscore must be followed by a letter or number, i.e. more than one
underscore in succession is not allowed. This can be followed by any number or sequence of
underscores, letters or numbers. The only exception here again is that two underscores may not
appear together.
Reserved identifiers may only be used as predefined. You may not declare a variable or data type,
for example, with the name of a reserved identifier.
A
ABS ANYTYPE_TO_LITTLEBYTEARRAY
ABSTRACT 2 ARRAY
ACOS AS
AND ASIN
ANYOBJECT AT
ANYOBJECT_TO_OBJECT ATAN
ANYTYPE_TO_BIGBYTEARRAY
B
BIGBYTEARRAY_TO_ANYTYPE BY
BOOL BYTE
BOOL_TO_BYTE BYTE_TO_BOOL
BOOL_TO_DWORD BYTE_TO_DINT
BOOL_TO_WORD BYTE_TO_DWORD
BOOL_VALUE_TO_DINT BYTE_TO_INT
BOOL_VALUE_TO_INT BYTE_TO_SINT
BOOL_VALUE_TO_LREAL BYTE_TO_UDINT
BOOL_VALUE_TO_REAL BYTE_TO_UINT
BOOL_VALUE_TO_SINT BYTE_TO_USINT
BOOL_VALUE_TO_UDINT BYTE_TO_WORD
BOOL_VALUE_TO_UINT BYTE_VALUE_TO_LREAL
BOOL_VALUE_TO_USINT BYTE_VALUE_TO_REAL
C
CASE CTD_DINT
CLASS 2 CTD_UDINT
CONCAT CTU
CONCAT_DATE_TOD CTU_DINT
CONSTANT CTU_UDINT
CONTINUE 1 CTUD
COS CTUD_DINT
CTD CTUD_UDINT
D
DATE DO
DATE_AND_TIME DT
DATE_AND_TIME_TO_DATE DT_TO_DATE
DATE_AND_TIME_TO_TIME_OF_DAY DT_TO_TOD
DELETE DWORD
DINT DWORD_TO_BOOL
DINT_TO_BYTE DWORD_TO_BYTE
DINT_TO_DWORD DWORD_TO_DINT
DINT_TO_INT DWORD_TO_INT
DINT_TO_LREAL DWORD_TO_REAL
DINT_TO_REAL DWORD_TO_SINT
DINT_TO_SINT DWORD_TO_UDINT
DINT_TO_STRING DWORD_TO_UINT
DINT_TO_UDINT DWORD_TO_USINT
DINT_TO_UINT DWORD_TO_WORD
DINT_TO_USINT DWORD_VALUE_TO_LREAL
DINT_TO_WORD DWORD_VALUE_TO_REAL
DINT_VALUE_TO_BOOL
E
ELSE END_PROGRAM
ELSIF END_REPEAT
END_CASE END_STRUCT
END_CLASS 2 END_TYPE
END_EXPRESSION END_VAR
END_FOR END_WAITFORCONDITION
END_FUNCTION END_WHILE
END_FUNCTION_BLOCK ENUM_TO_DINT
END_IF EXIT
END_IMPLEMENTATION EXP
END_INTERFACE EXPD
END_LABEL EXPRESSION
END_METHOD 2
EXPT
END_NAMESPACE 2 EXTENDS 2
F
F_TRIG FROM_BIG_ENDIAN 1
FALSE FROM_LITTLE_ENDIAN 1
FINAL 2 FUNCTION
FIND FUNCTION_BLOCK
FOR
G
GOTO
I
IF INT_TO_SINT
IMPLEMENTATION INT_TO_TIME
IMPLEMENTS 2
INT_TO_UDINT
INSERT INT_TO_UINT
INT INT_TO_USINT
INT_TO_BYTE INT_TO_WORD
INT_TO_DINT INT_VALUE_TO_BOOL
INT_TO_DWORD INTERFACE
INT_TO_LREAL INTERNAL 2
INT_TO_REAL IS_VALID 1
L
LABEL LREAL_TO_REAL
LEFT LREAL_TO_SINT
LEN LREAL_TO_STRING
LIMIT LREAL_TO_UDINT
LITTLEBYTEARRAY_TO_ANYTYPE LREAL_TO_UINT
LN LREAL_TO_USINT
LOG LREAL_VALUE_TO_BOOL
LOWER_BOUND 1 LREAL_VALUE_TO_BYTE
LREAL LREAL_VALUE_TO_DWORD
LREAL_TO_DINT LREAL_VALUE_TO_WORD
LREAL_TO_INT
M
MAX MIN
METHOD 2 MOD
MID MUX
N
NAMESPACE 2 NULL 2
NOT
O
OF OVERLAP
OR OVERRIDE 2
P
PRIVATE 2 PROTECTED 2
PROGRAM PUBLIC 2
R
R_TRIG REAL_VALUE_TO_DWORD
REAL REAL_VALUE_TO_WORD
REAL_TO_DINT REF 2
REAL_TO_DWORD REF_TO 2
REAL_TO_INT REPEAT
REAL_TO_LREAL REPLACE
REAL_TO_SINT RETAIN
REAL_TO_STRING RETURN
REAL_TO_TIME RIGHT
REAL_TO_UDINT ROL
REAL_TO_UINT ROR
REAL_TO_USINT RS
REAL_VALUE_TO_BOOL RTC
REAL_VALUE_TO_BYTE
S
SEL SINT_TO_WORD
SHL SINT_VALUE_TO_BOOL
SHR SQRT
SIN SR
SINT STRING
SINT_TO_BYTE STRING_TO_DINT
SINT_TO_DINT STRING_TO_LREAL
SINT_TO_DWORD STRING_TO_REAL
SINT_TO_INT STRING_TO_UDINT
SINT_TO_LREAL STRUCT
SINT_TO_REAL StructAlarmId
SINT_TO_UDINT STRUCTALARMID_TO_DINT
SINT_TO_UINT StructTaskId
SINT_TO_USINT SUPER 2
T
TAN TOF
THEN TON
THIS 2
TO_BIG_ENDIAN 1
TIME TO_LITTLE_ENDIAN 1
TIME_OF_DAY TP
TIME_TO_INT TRUE
TIME_TO_REAL TRUNC
TO TYPE
TOD
U
UDINT UINT_TO_USINT
UDINT_TO_BYTE UINT_TO_WORD
UDINT_TO_DINT UINT_VALUE_TO_BOOL
UDINT_TO_DWORD UNIT
UDINT_TO_INT UNTIL
UDINT_TO_LREAL UPPER_BOUND 1
UDINT_TO_REAL USELIB
UDINT_TO_SINT USEPACKAGE
UDINT_TO_STRING USES
UDINT_TO_UINT USING 2
UDINT_TO_USINT USINT
UDINT_TO_WORD USINT_TO_BYTE
UDINT_VALUE_TO_BOOL USINT_TO_DINT
UINT USINT_TO_DWORD
UINT_TO_BYTE USINT_TO_INT
UINT_TO_DINT USINT_TO_LREAL
UINT_TO_DWORD USINT_TO_REAL
UINT_TO_INT USINT_TO_SINT
UINT_TO_LREAL USINT_TO_UDINT
UINT_TO_REAL USINT_TO_UINT
UINT_TO_SINT USINT_TO_WORD
UINT_TO_UDINT USINT_VALUE_TO_BOOL
V
VAR VAR_OUTPUT
VAR_GLOBAL VAR_TEMP
VAR_IN_OUT VOID
VAR_INPUT
W
WAITFORCONDITION WORD_TO_INT
WHILE WORD_TO_SINT
WITH WORD_TO_UDINT
WORD WORD_TO_UINT
WORD_TO_BOOL WORD_TO_USINT
WORD_TO_BYTE WORD_VALUE_TO_LREAL
WORD_TO_DINT WORD_VALUE_TO_REAL
WORD_TO_DWORD
X
XOR
1 Only with active compiler option "Permit language extensions, IEC61131 3rd edition".
2 Only with active compiler option "Permit object-oriented programming".
A
ACTION ADD_TIME
ADD ADD_TOD_TIME
ADD_DT_TIME
B
BCD_TO_BYTE BCD_TO_LWORD
BCD_TO_DINT BCD_TO_SINT
BCD_TO_DWORD BCD_TO_WORD
BCD_TO_INT BYTE_TO_BCD
C
CONFIGURATION CTU_ULINT
CTD_LINT CTUD_LINT
CTD_ULINT CTUD_ULINT
CTU_LINT
D
DINT_TO_BCD DIVTIME
DIV DWORD_TO_BCD
E
EN END_STEP
END_ACTION END_TRANSITION
END_CONFIGURATION ENO
END_RESOURCE EQ
F
F_EDGE FROM
G
GE GT
I
INITIAL_STEP INT_TO_BCD
L
LE LWORD
LINT LWORD_TO_BCD
LT
M
MUL MULTIME
N
NE
R
R_EDGE RESOURCE
S
SEMA SUB_DT_DT
SINT_TO_BCD SUB_DT_TIME
STEP SUB_TIME
SUB SUB_TOD_TIME
SUB_DATE_DATE SUB_TOD_TOD
T
TRANSITION
U
ULINT
V
VAR_ACCESS VAR_EXTERNAL
VAR_ALIAS VAR_OBJECT
W
WORD_TO_BCD
A list of all identifiers with a defined meaning can be found in the SIMOTION Basic Functions
Function Manual.
Numbers can be written in various ways in ST. A number can contain a sign, a decimal point or
an exponent. The following rules apply to all numbers:
• Commas and blanks may not appear within a number.
• An underscore ( _ ) is allowed as a visual separator.
• The number can be preceded by a plus ( + ) or minus ( – ). If no sign is used, it is assumed that
the number is positive.
• Numbers may not violate certain maximum and minimum values.
4.2.4.1 Integers
An integer contains neither a decimal point nor an exponent. An integer is thus a sequence of
numeric digits that can be preceded with a sign.
The following are valid integers:
0 1 +1 -1
743 -5280 60_000 -32_211_321
In ST, you can represent integers in different number systems. This is achieved by inserting a
keyword prefix for the number system.
The following are used:
• 2# for the binary system
• 8# for the octal system
• 16# for the hexadecimal system.
Valid representations of the decimal number 15 are:
1. A numeric digit must be present before the decimal point and after the
decimal point.
1,000.0 Commas are not permitted.
1,333,333 Two points are not permitted.
4.2.4.3 Exponents
An exponent can be included to define the position of the decimal point. If no decimal point
appears, it is assumed that it is on the right side of the digit. The exponent itself must be either
a positive or negative integer. Base 10 is expressed by the letter E.
The magnitude 3 x 108 can be represented in ST by the following correct floating-point numbers:
3.E+8 A numeric digit must be present before the decimal point and after the deci‐
mal point.
8e2.3 The exponent must be an integer.
.333e-3 A numeric digit must be present before the decimal point and after the deci‐
mal point.
30 E8 Blanks are not permitted.
a := 1; // corresponds to a := TRUE
b := FALSE; // corresponds to b := 0
Note
Floating-point numbers can only be assigned to data types REAL and LREAL.
Examples:
67VRXUFHILOH
67VRXUFHILOH
6RXUFHILOHVHFWLRQ
VAR CONSTANT
'HFODUDWLRQ PI : REAL := 3.1415;
VHFWLRQ END _ VAR
6RXUFHILOH VAR _ INPUT
VHFWLRQV r1 : REAL;
END _ VAR
You do not have to program every function yourself. You can also make use of SIMOTION system
components. These are preprogrammed sections such as system functions or the functions of
the technology objects (TO functions).
Note
An extensively annotated template for example unit is also available in the online help. You can
use it as a template for a new ST source file.
Call the ST editor Help and click the relevant link. Copy the text to the open window of the ST
editor and modify the template according to your requirements.
The section "Template for example unit" (Page 515) contains a copy of this template.
4.3.1 Statements
The statement section of a program organization unit (POU – program, function, function block)
consists of repeated single statements. It follows the declaration section of a POU and ends with
the end of the POU. There are no explicit keywords for the start and end.
There are three basic types of statements in ST:
• Value assignments
Assignment of an expression to a variable; see Variables declaration (Page 133)
• Control statements
Repetition or branching of statements; see Control statements (Page 159)
• Subroutine execution
Functions (FC) and function blocks (FB); see Functions, function blocks, programs
(Page 177)
// Control statement
IF a = b THEN
FOR c := 1 TO 10 DO
b := b + c;
END_FOR;
END_IF;
// Function call
retVal := Test1(10.0);
...
4.3.2 Comments
Comments are used for documentation purposes and to help the user understand the source
file section. After compilation, they have no meaning for the program execution.
There are two types of comments:
• Line comment
• Block comment
The line comment is preceded by //. The compiler will process the text which follows until the end
of the line as a comment.
You can enter a block comment over several lines if it is preceded by (* and ends with *).
You can also use the corresponding buttons in the ST editor toolbar to show or hide comments.
This is helpful for showing or hiding code positions.
(* Block comments can only be nested with compiler option “Admit language
extensions IEC61131 3rd edition".
(* Nested block comment *)
*)
Elementary data types define the structure of data that cannot be broken down into smaller
units. An elementary data type describes a memory area with a fixed length and stands for bit
data, integers, floating-point numbers, duration, time, date and character strings.
All the elementary data types are listed in the table below:
Table 4-7 Bit widths and value ranges of the elementary data types
Note
During variable export to other systems, the value ranges of the corresponding data types in the
target system must be taken into account.
6WULQJGDWDW\SH XQIRUPDWWHG
675,1*
> &RQVWDQWH[SUHVVLRQ @
&KDUDFWHUVWULQJOHQJWK
,17GDWDW\SHYDOXHWR
'HIDXOW
Table 4-8 Symbolic constants for the value range limits of elementary data types
Note
You cannot use general data types as type identifiers in variable or type declarations.
The general data type is retained when a user-defined data type (UDT) is derived directly from
an elementary data type (only possible with the SIMOTION ST programming language).
Table 4-11 Symbolic constants for invalid values of elementary system data types
User-defined data types (UDT) are created with the construct TYPE/END_TYPE in the declaration
subsections of subsequent source file modules (see Breakdown of ST source file (Page 107)
and Source file modules (Page 251)):
• Interface section
• Implementation section
• Program organization unit (POU)
You can continue to use the data types you created in the declaration section. The source file
section determines the range of the type declaration.
See also
Syntax of user-defined data types (type declaration) (Page 115)
Derivation of elementary or derived data types (Page 116)
Derived data type ARRAY (Page 117)
Derived data type - Enumerator (Page 120)
Derived data type STRUCT (structure) (Page 121)
8VHUGHILQHGGDWDW\SHVದ8'7 XQIRUPDWWHG
7<3( ,GHQWLILHU
8'7LGHQWLILHU
'DWDW\SH
$55$<GDWDW\SH
VSHFLILFDWLRQ ,QLWLDOL]DWLRQ (1'B7<3(
(QXPHUDWLRQGDWDW\SH
VSHFLILFDWLRQ
6758&7GDWDW\SH
VSHFLILFDWLRQ
For each data type to be declared, this is followed by, see figure:
1. Name:
The name of the data type must comply with the rules for identifiers.
2. Data type specification
The term data type comprises, see Derivation of elementary or derived data types
(Page 116):
– Elementary data types
– Previously declared UDTs
– TO data types
– System data types
The following data type specifications are also possible:
– ARRAY data type specification, see Derived data type ARRAY - array (Page 117)
– Enumerator data type specification, see Derived data type enumeration – enumerator
(Page 120)
– STRUCT data type specification, see Derived data type STRUCT – structure (Page 121)
The references in brackets refer to the following sections, in which the respective data type
specification is described in detail.
3. Optional initialization:
You can specify an initialization value for the data type. If you subsequently declare a variable
of this data type, the initialization value is assigned to the variable.
Exception: With the STRUCT data type specification, each individual component is initialized
within the data type specification.
See also Initialization of variables or data types (Page 136).
The complete UDT declaration is terminated with the keyword END_TYPE. You can create any
number of data types within the TYPE/END_TYPE construct. You can use the defined data types
to declare variables or parameters.
UDTs can be nested in any way as long as the syntax in the figure is observed. For example, you
can use previously defined UDTs or nested structures as a data type specification. Type
declarations can only be used sequentially and not in nested structures.
Note
You can learn how to declare variables and parameters in Overview of all variable declarations
(Page 134), and how to assign values with UDT in Syntax for value assignment (Page 142).
Below is a description of individual data type specifications for UDTs and examples
demonstrating their use.
$55$<GDWDW\SHVSHFLILFDWLRQ XQIRUPDWWHG
,QGH[VSHFLILFDWLRQ
'DWDW\SHVSHFLILFDWLRQ
2) 'DWDW\SH
%DVLFGDWDW\SH
Note
If array limits are violated during runtime, a processing error occurs in the program (see the
"SIMOTION Basic Functions" Function Manual).
You specify the data type of the array elements with the data type specification (basic data
type). All of the options described in this section can be used as data types, for example, even
user-defined data types (UDT).
You can define the size of the memory space occupied by the ARRAY with _sizeOf (in := array-
name). The following applies: _sizeOf (in := array_of_type) :=
_lengthIndexOf (in := array_of_type) * _sizeOf (in := type). The syntax of these functions is
described in the "SIMOTION Basic Functions" Function Manual.
The _arrayCopy function can be used to copy an area of an array into another array with the same
basic data type. The syntax of these functions is described in the "SIMOTION Basic Functions"
Function Manual.
Note
As of SIMOTION Kernel version V4.2, you can declare arrays with a dynamic length as in-out
parameters in functions and function blocks. For more information, refer to the corresponding
section (Page 188) for the FB and FC declaration subsection (Page 182).
Two-dimensional arrays are comparable to a table with lines and columns. You can create two-
or multi-dimensional arrays by means of a multi-level type declaration, see example:
VAR
m : matrix1; // Variable m of data type
// Two-dimensional array
n : matrix2; // Variable n of data type
// Two-dimensional array
END_VAR
Redeclaration
The data type definitions of arrays are recognized as identical (even in different sources) if the
following conditions are met:
1. The identifier of the data type is identical.
2. Both array limits are identical.
3. The data type of the array elements is identical.
4. The optional array initialization list is identical (including repeat factors and constant
expressions).
Initialization
Per default, the array elements are assigned the initialization value of the basic data type.
Optionally the initialization value of the array element can be changed by assigning an array
initialization list enclosed in square brackets [ ], see"Initialization of variables or data types"
(Page 136).
(QXPHUDWRUGDWDW\SHVSHFLILFDWLRQ XQIRUPDWWHG
(QXPHUDWLRQHOHPHQW
,GHQWLILHU
Once you have declared the identifier data type, you can define variables in the enumeration
data type. In the statement section, you can assign only elements from the list of defined
identifiers (enumeration elements) to these variables.
You can also specify the data type directly: Place the enumeration data type identifier and the "#"
sign in front of the enumeration element (see Table Examples of enumeration data types).
You can obtain the first and last value of an enumeration data type with enum_type#MIN and
enum_type#MAX respectively, whereby enum_type is the enumeration data type identifier.
You can obtain the numeric value of an enumeration element with the ENUM_TO_DINT
conversion function. The syntax of these functions is described in the "SIMOTION Basic
Functions" Function Manual.
Example
VAR
myC11, myC12, myC13 : C1;
END_VAR
myC11 := GREEN;
myC11 := C1#GREEN;
myC12 := C1#MIN; // RED
myC13 := C1#MAX; // BLUE
Note
You will also find enumeration data types as system data types.
Enumeration data types can be components of a structure, meaning that they can be found at
any lower level in the user-defined data structure.
Redeclaration
The data type definitions of enumeration data types are recognized as identical (even in
different sources) if the following conditions are met:
1. The identifier of the data type is identical.
2. All enumeration elements are identical.
3. The sequence of the enumeration elements is identical, so their numerical values are
identical.
4. The optional initialization value is identical.
Initialization
Per default, an enumeration data type is assigned the 1st value of the enumeration as
initialization value. Optionally the initialization value can be changed by assigning another
enumeration element, see"Initialization of variables or data types" (Page 136).
6758&7GDWDW\SHVSHFLILFDWLRQ XQIRUPDWWHG
6758&7 &RPSRQHQWGHFODUDWLRQ
&RPSRQHQWGHFODUDWLRQ
6758&7 ZLWKUHODWLYHDGGUHVV
&RPSRQHQWGHFODUDWLRQ
6758&729(5/$3 ZLWKUHODWLYHDGGUHVV
(1'B6758&7
Component declaration
Usually, a structure contains the definitions of the individual components between the keywords
STRUCT and END_STRUCT.
The syntax of the component declaration is shown in the following figure. The components are
arranged in the order of their declaration with this syntax. The relative addresses of the
components within the structure are assigned automatically by the compiler.
&RPSRQHQWGHFODUDWLRQ XQIRUPDWWHG
,GHQWLILHURIWKHFRPSR
QHQW $55$<GDWDW\SH
VSHFLILFDWLRQ
You also have the option to assign initialization values to the components see "Initialization" in
this section.
Note
The following data type specifications cannot be used directly within a component declaration:
• STRUCT data type specifications
• Enumeration data type specifications
Remedy:
Declare a UDT (user-defined data type) beforehand with the above-mentioned specifications and
use this in the component declaration.
This allows you to nest STRUCT data types.
You will also find STRUCT data types as system data types.
Example
This example shows how a UDT is defined and how this data type is used within a variable
declaration.
VAR
myS1 : S1;
END_VAR
myS1.var1 := -4;
myS1.var4 := T#2d_2h_20m_33s_2ms;
Redeclaration
The data type definitions of structures are recognized as identical (even in different sources) if
the following conditions are met:
1. The identifier of the data type is identical.
2. All components of the structure are identical in terms of their:
– Sequence
– Identifier
– Data types or ARRAY data type specifications
– Initialization values (including any array or structure initialization lists)
Initialization
Per default, each component is assigned the initialization value of its data type. Optionally, the
initialization value of the component can be changed by assigning an appropriate initialization.
When using the structure in another declaration (e.g. variable or data type declaration), the
initialization values of individual components can be changed by assigning a structure
initialization list, enclosed in round brackets ( ).
See "Initialization of variables or data types" (Page 136).
&RPSRQHQWGHFODUDWLRQZLWKUHODWLYHDGGUHVV XQIRUPDWWHG
,GHQWLILHU $7 5HODWLYHDGGUHVV
,GHQWLILHURIWKHFRPSRQHQW
'DWDW\SH ,QLWLDOL]DWLRQ
$55$<GDWDW\SH
VSHFLILFDWLRQ
5HODWLYHDGGUHVV XQIRUPDWWHG
% 'HFLPDOQXPEHU
'HFLPDOQXPEHU
If you specify relative addresses of the structure components, you must do this for all
components of this structure.
The permissible relative addresses of the components depends on their data type, see following
table:
If the above addressing rules are violated, the compiler issues an error message which indicates
the required divisor.
The declaration order of the components is arbitrary when specifying the relative addresses. The
structure in the following example is identical to that in the previous example.
The address ranges of the components must not overlap except when the structure is declared
with the keyword STRUCT OVERLAP, see following section.
If the address ranges of two components overlap, the following data types are not permitted in
these components:
• STRING
• ANYOBJECT
• TO data type
They are permitted in components whose address ranges do not overlap. For example, the
following declaration is permitted:
Note
The declaration of a structure with overlapping ARRAY OF BYTE, as specified in the examples,
does not replace the marshalling functions. The byte order (Little Endian or Big Endian) depends
on the respective SIMOTION device. For information on the Little Endian and Big Endian byte
order as well as the marshalling functions, see SIMOTION Basic Functions Function Manual.
Note
Hidden components can used in the programming. In the ST editor, they are shown in
the "Automatic completion" (Page 48) function.
You can monitor individual hidden components in a watch table (Page 391), see the appropriate
information in Section "Using a watch table" (Page 391).
As an example, the visible components of the following structure declaration are explained in
the table below.
The following examples of a structure declaration explain the behavior of the visible and hidden
components. The visible components and the associated relative addresses are specified in the
following table.
Relative address
0 1 2 3 4 5 6 7 8 9
Declared compo‐ a b c
nents ar[0] ar[1] ar[2] ar[3] ar[4] ar[5] ar[6]
Visible compo‐ ar[0] ar[1] ar[2] ar[3] ar[4] ar[5] ar[6] - c
nents
Relative address
0 1 2 3 4 5 6 7 8 9
Declared compo‐ ar[0] ar[1] ar[2] ar[3] ar[4] ar[5] ar[6]
nents a b c
Visible compo‐ a - - - - b c
nents
The following examples of a structure declaration explain this initialization behavior. The
initialization values of the respective relative addresses are specified in the following table.
Relative address
0 1 2 3 4 5 6 7 8 9
Declared compo‐ a b c
nents ar[0] ar[1] ar[2] ar[3] ar[4] ar[5] ar[6]
Initialization value 16#0 16#0 16#0 16#0 16#0 16#0 16#0 16#0 16#CCCC
1 1 1 1 1 1 1 0
Relative address
0 1 2 3 4 5 6 7 8 9
Declared compo‐ ar[0] ar[1] ar[2] ar[3] ar[4] ar[5] ar[6]
nents a b c
Initialization value 16#AAAA 16#0 16#0 16#0 16#0 16#BBBB 16#CCCC
0 0 0 0
For example, you can declare a variable with the data type posaxis and assign it an appropriate
instance of a position axis. Such a variable is often referred to as a reference.
Table 4-22 Symbolic constants for invalid values of technology object data types
See also
Inheritance of the properties for axes (Page 131)
Examples of the use of technology object data types (Page 131)
Table 4-23 Example of the use of a data type for technology objects
VAR
myAxis : posAxis; // Declaration variable for axis
myPos : LREAL; // Variable for position of axis
retVal: DINT; // Variable for return value of the
// TO function
END_VAR
myAxis := Axis1; // The name Axis1 was defined when the axis
// was configured in the project navigator.
// Axis is positioned.
retVal := _pos(axis := myAxis,
position := 100,
commandId:= _getCommandId() );
The second example does not use a variable with TO data type.
// Axis is positioned.
retVal := _pos(axis := Axis1
position := 100,
commandId:= _getCommandId() );
You will find details for configuration of technology objects in the SIMOTION Motion Control
function descriptions.
9DULDEOHVGHFODUDWLRQ XQIRUPDWWHG
'HVLJQDWLRQRIWKH
YDULDEOHRUWKHIRUPDO $55$<GDWDW\SH
SDUDPHWHU VSHFLILFDWLRQ
LQ)%RU)&
VAR
// Declaration of a variable ...
var1 : REAL;
// ... or if there are several variables of the same type:
var2, var3, var4 : INT;
// Declaration of a one-dimensional array:
a1 : ARRAY[1..100] OF REAL;
// Declaration of a character string:
str1 : STRING[40];
END_VAR
,QLWLDOL]DWLRQ XQIRUPDWWHG
&RQVWDQWH[SUHVVLRQ
,QLWLDOL]DWLRQRIHOHPHQWDU\GDWDW\SHV
> $UUD\LQLWLDOL]DWLRQOLVW @
,QLWLDOL]DWLRQRIDUUD\V
6WUXFWXUHLQLWLDOL]DWLRQOLVW
,QLWLDOL]DWLRQRILQGLYLGXDOFRPSRQHQWVZLWKLQVWUXFWXUHV
The initialization value assigned to a variable is calculated from the constant expression at the
time of the compilation. For information about the syntax of the constant expression, see the
figure titled Syntax: Constant expression.
Note that a variable list (a1, a2, a3, … : INT := … ) can be initialized with a common value. In this
case, you do not have to initialize the variables individually (a1 : INT := … ; a2 : INT := … ; etc.).
Note
The constant expressions used for initialization are calculated in the data type of the declared
variables or in the declared data type.
Variables of a technology object data type cannot be assigned an initialization value. They are
always initialized by the compiler with TO#NIL.
&RQVWDQWH[SUHVVLRQ XQIRUPDWWHG
&RQVWDQW
%DVLF
ORJLFRSHUDWRU
&RQVWDQW &RQVWDQW
H[SUHVVLRQ &RPSDULVRQRSHUDWRU H[SUHVVLRQ
%DVLF
DULWKPHWLFRSHUDWRU
&RQVWDQWH[SUHVVLRQ
8QDU\PLQXV
127
1HJDWLRQ
'DWDW\SH
FRQYHUVLRQIXQFWLRQ
&RQVWDQWH[SUHVVLRQ
52/
525
6+/
&RQVWDQW &RQVWDQW
6+5
H[SUHVVLRQ H[SUHVVLRQ
$UUD\LQLWLDOL]DWLRQOLVW XQIRUPDWWHG
,QLWLDOL]DWLRQ
,QLWLDOL]DWLRQ
'HFLPDOGLJLWVWULQJ
5HSHDWIDFWRU $UUD\LQLWLDOL]DWLRQOLVW
6WUXFWXUHLQLWLDOL]DWLRQOLVW XQIRUPDWWHG
,GHQWLILHU ,QLWLDOL]DWLRQ
&RPSRQHQWLGHQWLILHU
Information about the circumstances when variables are initialized can be found in Section
"Time of the variable initialization" (Page 294).
Initialization of structures
To initialize a structure (data type STRUCT), assign to it a structure initialization list enclosed in
brackets "(" ")". Assign the initialization value to the desired component in this initialization list,
see the syntax diagram above.
The following methods can be used to initialize components of lower-level structures:
• You assign another structure initialization list enclosed in brackets to a component and then
"nest" the lists inside one another.
• You aggregate the identifiers of the component, subcomponent, etc. as follows (use periods
as separators): comp_name.subcomp_name.subsubsomp_name and assign the
initialization value to this structure.
Note
Saving in an old project format:
Projects in which aggregated identifiers are used cannot be compiled correctly in SIMOTION
SCOUT versions earlier than V4.5.
You can use both notations within the same structure initialization list provided that you are
initializing different components.
You can initialize arrays within structures by assigning an array initialization list enclosed in
square brackets "[" "]" to the component. See example below:
4.5.4 Constants
Constants are data with a fixed value that you cannot change during program runtime.
Constants are declared in the same way as variables:
• In the declaration section of a POU for local constants (see Figure Syntax: Constant block in
a POU and syntax: Constant declaration).
• In the interface or implementation section of the ST source file for unit constants (see
Figure Syntax: Unit constants in the interface or implementation section and syntax:
Constant declaration). You can import unit constants declared in the interface section into
other ST source files (see Variable model (Page 277)).
The source file section also determines the range of the constant declaration.
&RQVWDQWEORFN XQIRUPDWWHG
8QLWFRQVWDQWVJOREDOFRQVWDQWEORFN XQIRUPDWWHG
&RQVWDQWGHFODUDWLRQ XQIRUPDWWHG
'HVLJQDWLRQRIWKH
FRQVWDQWV $55$<GDWDW\SH
VSHFLILFDWLRQ
To initialize a constant, see "Initialization of variables or data types (Page 136)". The value
assigned to a constant is calculated from the constant expression at the time of compilation.
See also
Notes on avoiding errors and on efficient programming (Page 381)
9DOXHDVVLJQPHQW XQIRUPDWWHG
9DULDEOHRIWKH
HOHPHQWDU\GDWDW\SH
9DULDEOHRIWKH
HQXPHUDWRUGDWDW\SH
$UUD\YDULDEOH
6WUXFWXUHGYDULDEOH
$EVROXWH3,DFFHVV ([SUHVVLRQ
2XWSXWVRQO\
([WHUQDOWDJ
$FFHVVWR)%LQSXWSDUDPHWHUV !
'LUHFWELWDFFHVV !
!2QO\IRUDFWLYDWHG3HUPLWODQJXDJHH[WHQVLRQVFRPSLOHURSWLRQ
The following contains explanations and examples for the left side of the value assignment:
• Value assignments with variables of an elementary data type (Page 144) ,
• Value assignments with variables of the derived enumerator data type (Page 147)
• Value assignments with variables of the derived ARRAY data type (Page 147)
• Value assignments with variables of the derived STRUCT data type (Page 148)
• Value assignments with absolute PI access (to addresses of the process image), see: Absolute
access to the fixed process image of the BackgroundTask (absolute PI access) (Page 332).
How the right side of a value assignment, i.e. an expression, is formed, is described in
Expressions (Page 149).
elemVar := 3*3;
elemVar := elemVar1;
See also
Value assignments with variables of a bit data type (Page 145)
4.6.1.3 Value assignments with variables of the STRING elementary data type
string20 := 'ABCDEFG';
string20 := string30;
byteVar := string20[5];
string20[10] := byteVar;
Editing strings
Various system functions are available for the editing of strings, such as the joining of strings,
replacement and extraction of characters, see SIMOTION Basic Functions Function Manual.
'LUHFWELWDFFHVV IRUPDWWHG
2QO\IRUDFWLYDWHG3HUPLWODQJXDJHH[WHQVLRQVFRPSLOHURSWLRQ
6LPSOHYDULDEOH
$UUD\YDULDEOH
6WUXFWXUHGYDULDEOH
([WHUQDOWDJ &RQVWDQW
'DWDW\SH$1<B,17
$FFHVVWR)%RXWSXWSDUDPHWHUV
$FFHVVWR)%LQSXWSDUDPHWHUV
3HUPLWWHGGDWDW\SHV
HDFK%<7(:25'':25'
Note
The access to bits of an I/O variable or system variable can be interrupted by other tasks. There
is therefore no guarantee of consistency.
Logic operators
Variables of the bit data types can be combined with logic operators; see Logic expressions and
bit-serial expressions (Page 157).
4.6.1.5 Value assignments with variables of the derived enumerator data type
Each expression and each variable of the derived enumerator data type (see also: Derived
enumerator data type (Page 120)) can be assigned to another variable of the same type.
type1 := BLUE;
4.6.1.6 Value assignments with variables of the derived ARRAY data type
An array consists of several dimensions and array elements, all of the same type (see
also: Derived ARRAY data type (Page 117)).
There are various ways to assign arrays to variables. You can assign complete arrays, individual
elements, or parts of arrays:
• A complete array can be assigned to another array if both the data types of the components
and the array limits (the smallest and largest possible array indices) are the same. Valid
assignments are:
array_1 := array_2;
• An individual array element is addressed by the array name followed by the index value in
square brackets. An index must be an arithmetic expression of the data type SINT, USINT, INT,
UINT or DINT.
• A value assignment for a valid subarray can be obtained by omitting a pair of square brackets
for each dimension of the array, starting at the right. This addresses a partial area of the array
whose number of dimensions is equal to the number of remaining indices (see example
below).
Consequently, you can reference rows and individual components within a matrix but not
closed columns (closed in the sense of from...to). Valid assignments are:
4.6.1.7 Value assignments with variables of the derived STRUCT data type
Variables of a user-defined data type that contain STRUCT data type specifications are called
structured variables (see also Derived STRUCT data type (Page 121)). They can either represent
a complete structure or a component of this structure.
Valid parameters for a structure variable are:
There are two ways to assign structures to variables. You can reference complete structures or
structure components:
• A complete structure can only be assigned to another structure if the data type and the name
of both structure components match.
A valid assignment is:
struct1 := struct2;
struct1.elem1 := Var1;
struct1.elem1 := 20;
struct1.elem1 := struct2.elem1;
struct1.array1 := struct2.array1;
struct1.array1[10] := 100;
Note
You also use structured variables in the FBInstanceName.OutputParameter format,
e.g. myCircle.circumference to access the output variables of a function block, i.e. the result of
the function block. For more detailed information about function blocks, refer to the
explanations in Defining functions (Page 177) and Defining function blocks (Page 178).
A further application of structured variables is to access TO variables and the variables of the
basic system.
4.6.2 Expressions
An expression represents a value that is calculated when the program is compiled or executed.
It consists of operands (e.g. constants, variables or function values) and operators (e.g. *, /, +,
-).
The data types of the operands and the operators involved determine the expression type.
ST uses the following types of expression:
• Arithmetic expressions (Page 152)
• Relational expressions (Page 155)
• Logic expressions and bit-serial expressions (Page 157)
For more information on this error source and its solution, see SIMOTION Basic Functions
Function Manual.
Note
Expressions containing only the following elements can be used for variable initialization and
index specification in ARRAY declarations (for initialization expressions – see Figure Syntax:
Constant expression in Initialization of variables or data types (Page 136)):
• Constants
• Basic arithmetic operations
• Logic and relational operations
• Bit string standard functions
The constant expressions used for initialization are calculated in the data type of the declared
variables or in the declared data type.
4.6.3 Operands
Definition
Operands are objects which can be used to formulate expressions. Operands can be represented
by the syntax diagram:
2SHUDQG XQIRUPDWWHG
9DULDEOHRIWKHHOHPHQWDU\GDWDW\SH
9DULDEOHRIWKHHQXPHUDWRUGDWDW\SH
$UUD\YDULDEOH
6WUXFWXUHGYDULDEOH
$EVROXWH3,DFFHVV
,QSXWVDQGRXWSXWV
&RQVWDQW
)&FDOO
$FFHVVWR)%RXWSXWSDUDPHWHUV
([WHUQDOWDJ
$FFHVVWR)%LQSXWSDUDPHWHUV !
'LUHFWELWDFFHVV !
!2QO\IRUDFWLYDWHG3HUPLWODQJXDJHH[WHQVLRQVFRPSLOHURSWLRQ
$ULWKPHWLFRSHUDWRU XQIRUPDWWHG
%DVLFDULWKPHWLFRSHUDWRU
%DVLFDULWKPHWLFRSHUDWRU XQIRUPDWWHG
02'
Note
Further operations are possible with standard numeric functions, see Standard numeric
functions in the SIMOTION Basic Functions Function Manual.
It is recommended to enclose negative numbers in parentheses, even in cases where it is not
absolutely necessary, in order to enhance legibility.
The arithmetic operators are processed in accordance with their rank (Page 159).
Note
If the limits of the value range are exceeded in operations with variables of the general
ANY_REAL data type, the result contains the equivalent bit pattern according to IEEE 754.
In order to establish whether the value range was exceeded in the operation, you can verify the
result using the function _finite (see SIMOTION Basic Functions Function Manual).
Expression Value
i + j 8
i - j 14
i * j -33
i MOD j -2
i / j -3
Some expressions with these variables and their values are shown in the example.
Expression Value
t1 + t2 T#3D_3H_3M_3S_3MS
dt1 + t1 DT#2004-01-12-12:12:12.111
t1 - t2 T#48D_16H_1M_46S_295MS
t1 * 2 T#2D_2H_2M_2S_2MS
t1 / 2 T#12H_30M_30S_500MS
DATE_AND_TIME_TO_TIME_OF_DAY(dt1) TOD#11:11:11.110
DATE_AND_TIME_TO_DATE(dt1) D#2004-01-11
Definition
A relational expression is an expression of the BOOL data type formed with relational operators
(see figure).
5HODWLRQDORSHUDWRU XQIRUPDWWHG
! ! !
Relational operators compare the values of 2 operands (see table) and return a Boolean value as
result.
1st Operand Operator 2nd Operand -> Boolean value
Operator Meaning
> 1. operand is greater than the 2nd operand
< 1. operand is less than the 2nd operand
>= 1. operand is greater than or equal to the 2nd operand
<= 1. operand is less than or equal to the 2nd operand
= 1. operand is equal to the 2nd operand
<> 1. operand is not equal to the 2nd operand
Table 4-36 Relational expressions: Permissible combinations of the data types and relational operators
1) The comparison is made in the lowest common data type to which both operands can be implicitly
converted.
2) Variables of the STRING data type can be compared irrespective of the declared length of the string.
To compare two variables of the STRING data type with different lengths, the shorter character string is
expanded to the length of the longer character string by inserting $00 on the right-hand side. The
comparison starts from left to right and is based on the ASCII code of the respective characters.
Example: ’ABC’ < ’AZ’ < ’Z’ < ’abc’ < ’az’ < ’z’.
3) Data type of the 1. operand.
Relational expressions and variables or constants of the BOOL data type can be combined with
logic operators to form logic expressions (see Logic expressions and bit-serial expressions
(Page 157)). This enables the implementation of queries such as If a < b and b < c, then ….
Note
Relational operators have a higher priority than logic operators in an expression (see Operator
priority (Page 159)). Therefore the operands of a relational expression must be placed in
brackets if they themselves are logic expressions or bit-serial expressions.
Note that errors can occur when comparing REAL or LREAL variables (also the corresponding
system variables, e.g. axis position).
Definition
With the logic operators AND, &, XOR, and OR, it is possible to combine operands and
expressions of the general data type ANY_BIT (BOOL, BYTE, WORD, or DWORD).
With the logic operator NOT it is possible to negate operands and expressions of data type
ANY_BIT.
The table provides information about the available operators:
Examples
Expression Value
2#01010101 AND 2#11110000 2#01010000
2#01010101 OR 2#11110000 2#11110101
2#01010101 XOR 2#11110000 2#10100101
NOT 2#01010101 2#10101010
Lowest
4.7.1 IF statement
Description
The IF statement is a conditional statement. It specifies one or more options and selects one (or
none) of its statement sections for execution.
The specified logic expressions are evaluated when the conditional statement is executed. If the
value of an expression is TRUE, the condition is fulfilled, if the value is FALSE, it is not fulfilled.
,)VWDWHPHQW XQIRUPDWWHG
&RQGLWLRQRIGDWDW\SH%22/
&RQGLWLRQRIGDWDW\SH%22/
'RQRWIRUJHWWRWHUPLQDWHWKH(1'B,)NH\ZRUGZLWKDVHPLFRORQ
Sequence of execution
The IF statement is processed according to the following rules:
1. If the value of the first expression is TRUE, the statement section after the THEN is executed.
The program is subsequently resumed after the END_IF.
2. If the value of the first expression is FALSE, the expressions in the ELSIF branches are
evaluated. If a Boolean expression in one of the ELSIF branches is TRUE, the statement
section following THEN is executed.
The program is subsequently resumed after the END_IF.
3. If none of the Boolean expressions in the ELSIF branches is TRUE, the sequence of statements
after the ELSE is executed (or, if there is no ELSE branch, no further statements are executed).
The program is subsequently resumed after the END_IF.
Any number of ELSIF statements can be programmed.
Note that there may not be any ELSIF branches and/or ELSE branch. This is interpreted in the
same way as if the branches existed with no statements.
Note
An advantage of using one or more ELSIF branches rather than a sequence of IF statements is
that the logic expressions following a valid expression are no longer evaluated. This helps to
reduce the processing time required for the program and to prevent execution of unwanted
program routines.
Example
The following example illustrates the use of the IF statement:
Description
The CASE statement is used to select 1 of n program sections.
This selection determines a selection expression (selector):
• Expression of general data type ANY_INT
• Variable of an enumeration data type (enumerator)
The selection is made from a list of values (value list), whereby a section of the program is
assigned to each value or group of values.
&$6(VWDWHPHQW XQIRUPDWWHG
9DULDEOH
(QXPHUDWRUGDWDW\SH
'DWDW\SH$1<B,17
9DOXHOLVW 6WDWHPHQWVHFWLRQ
'RQRWIRUJHWWRWHUPLQDWHWKH(1'B&$6(NH\ZRUGZLWKDVHPLFRORQ
Sequence of execution
The CASE statement is processed according to the following rules:
1. The selection expression (selector) is calculated. It must return a value of general data type
ANY_INT (integer) or an enumeration data type.
2. Then a check is performed to determine whether the selector value is contained in the value
list. Each value in the list represents one of the allowed values for the selection expression.
3. If a match is found, the program section assigned in the list is executed.
4. The ELSE branch is optional. It is executed if no match is found.
5. If the ELSE branch is missing and no match is found, the program is resumed after END_CASE.
Value list
The value list contains the allowed values for the selection expression.
9DOXHOLVW XQIRUPDWWHG
&RQVWDQW
9DOXH
&RQVWDQW &RQVWDQW
9DOXH 9DOXH
9DOXH 9DOXH
Note
A value should only occur once in the value lists of a CASE statement.
In the event of multiple occurrence of a value, the compiler will issue an alarm, and only the
section of the statement corresponding to the value list in which the value occurred first is
executed.
Example
The following example illustrates the use of the CASE statement:
Description
A FOR statement or a repeat statement executes a series of statements in a loop, whereby values
are assigned to a variable (a count variable) on each pass. The count variable must be a local
variable of type SINT, INT or DINT.
The definition of a loop with FOR includes the specification of a start and end value. Both
variables must be the same data type as the count variable.
Note
You use the FOR statement when the number of loop passes is known at the programming stage.
If the number of cycles is not known, the WHILE or REPEAT statement is more suitable, see WHILE
statement (Page 166) and REPEAT statement (Page 167).
)25VWDWHPHQW XQIRUPDWWHG
9DULDEOHLGHQWLILHU
)25 ([SUHVVLRQ
6WDUWYDOXH
6LPSOHYDULDEOHGDWDW\SH
6,1786,17,178,17',17
(QGYDOXH ,QFUHPHQW
'RQRWIRUJHWWRWHUPLQDWHWKH(1'B)25NH\ZRUGZLWKDVHPLFRORQ
Sequence of execution
The FOR statement is processed according to the following rules:
1. At the start of the loop, the count variable is set to the start value and is increased (positive
increment) or decreased (negative increment) by the specified increment after each loop
pass until the end value is reached. After the first loop pass, the content of the count variable
is known as the current value.
2. On each pass, the system checks whether the following conditions are true:
– Start value or current value <= end value (for positive increment) or
– Start value or current value >= end value (for negative increment)
If the condition is fulfilled, the sequence of statements is executed.
If the condition is not fulfilled, the loop and, thus, the sequence of statements is skipped and
the program is resumed after END_FOR.
3. If the FOR loop is not executed due to Step 2, the count variable retains the current value.
Rules
The following rules apply to the FOR statement:
• The BY [increment] specification can be omitted. If no increment is specified, the default is +1.
• The start value, end value and increment are expressions, see Expressions (Page 149). The
expression is evaluated once at the beginning of the FOR statement.
• If the start value and end value are of the data type DINT, the amount from (end value - start
value) must be less than DINT#MAX (2**31 - 1), see also Value range limits of elementary
data types (Page 113).
• The count variable contains the value which triggers the loop exit, i.e. it is incremented
before the loop is exited.
• During the loop execution, the count variable (current value) as well as the start value, the
end value and the increment must not be changed.
Example
The following example illustrates the use of the FOR statement:
Description
The WHILE statement allows a sequence of statements to be executed repeatedly under the
control of an iteration condition. The iteration condition is formulated in accordance with the
rules for a logic expression.
Note
You use the WHILE statement when the number of loop passes is not known at the programming
stage.
If the number of passes is known, the FOR statement (Page 164) is more suitable.
:+,/(VWDWHPHQW XQIRUPDWWHG
&RQGLWLRQRIGDWDW\SH%22/
6WDWHPHQWVHFWLRQ (1'B:+,/(
'RQRWIRUJHWWRWHUPLQDWHWKH(1'B:+,/(NH\ZRUGZLWKDVHPLFRORQ
The statement section after DO is repeated until the iteration condition has the value TRUE.
Sequence of execution
The WHILE statement is processed according to the following rules:
1. The iteration condition is evaluated each time before the statement section is executed.
2. If the value is TRUE, the statement section is executed.
3. If the value is FALSE, the WHILE statement is terminated (this can occur the first time the
condition is evaluated) and the program is resumed after END_WHILE.
Example
The following example illustrates the use of the WHILE statement:
Description
A REPEAT statement causes a sequence of statements programmed between REPEAT and UNTIL
to be executed repeatedly until a termination condition is true. The termination condition is
formulated in accordance with the rules for a logic expression.
Note
You use the REPEAT statement when the number of loop passes is not known at the
programming stage.
If the number of passes is known, the FOR statement (Page 164) is more suitable.
5(3($7VWDWHPHQW XQIRUPDWWHG
([SUHVVLRQ (1'B5(3($7
&RQGLWLRQRIGDWDW\SH%22/
'RQRWIRUJHWWRWHUPLQDWHWKH(1'B5(3($7NH\ZRUGZLWKDVHPLFRORQ
The condition is checked after the statement section is executed. That means the statement
section is executed at least once, even if the termination condition is true at the start.
Sequence of execution
The REPEAT statement is processed according to the following rules:
1. The iteration condition is evaluated each time after the statement section is executed.
2. If the value is FALSE, the statement section is executed again.
3. If the value is TRUE, execution of the REPEAT statement is terminated and program execution
is resumed after END_REPEAT.
Example
The following example illustrates the use of the REPEAT statement:
Description
An EXIT statement is used to exit a loop (FOR, WHILE or REPEAT loop) at any point, irrespective
of whether the termination condition is true or false.
This statement has the effect of jumping directly out of the loop immediately surrounding the
EXIT statement.
The program resumes after the end of the loop (e.g. after END_FOR).
Example
The following example illustrates the use of the EXIT statement:
Description
The CONTINUE statement is only available if the compiler option Language extensions
IEC61131 3rd edition is enabled, see Global settings of the compiler (Page 62) and Local
settings of the compiler (Page 65).
It acts as a jump to the start of a loop (FOR, WHILE or REPEAT loop) from any point. Use this to
jump to the start of the repeat statement which immediately surrounds the CONTINUE
statement.
• With a FOR loop the run tag is increased by the programmed increment and compared with
the full-scale value.
• With a WHILE loop the execution condition is reviewed.
Example
The following example illustrates the use of the CONTINUE statement:
Description
A RETURN statement causes termination of the POU currently being processed (program,
function, function block).
When a function or a function block is terminated, program execution continues in the higher-
level POU after the position where the function or function block was called.
Example
The following example illustrates the use of the RETURN statement:
Description
You can use the WAITFORCONDITION statement to wait for a programmable event or condition
in a MotionTask. The statement suspends execution of the calling MotionTask until the condition
is true. You program this condition in an Expression (Page 204).
More information about the WAITFORCONDITION and expressions in this regard is contained in
the SIMOTION Basic Functions Function Manual.
:$,7)25&21',7,21VWDWHPHQW XQIRUPDWWHG
:$,7)25&21',7,21
([SUHVVLRQLGHQWLILHU )&SDUDPHWHU
&RQGLWLRQ 7KHFDOORIDQH[SUHVVLRQZLWKSDUDPHWHUVLV
1DPHRIDFRQVWUXFWGHFODUHGZLWK SHUPLWWHGRQO\DVRI9HUVLRQ9RIWKH
(;35(66,21 6,027,21NHUQHO
(GJHHYDOXDWLRQ
:,7+ ([SUHVVLRQ '2
%22/GDWDW\SH
758(5LVLQJHGJHRIWKHFRQGLWLRQLVHYDOXDWHG
)$/6(&RQGLWLRQLVHYDOXDWHGVWDWLFDOO\ GHIDXOWVHWWLQJ
6WDWHPHQWVHFWLRQ (1'B:$,7)25&21',7,21
'RQRWIRUJHWWRWHUPLQDWHWKH
(1'B:$,7)25&21',7,21NH\ZRUGZLWKDVHPLFRORQ
Expression identifier is a construct declared with EXPRESSION; its value defines (together with
WITH edge evaluation, if necessary) whether the condition is considered as been satisfied.
The WITH edge evaluation sequence is optional. Edge evaluation is an expression of data type
BOOL; it determines how the value of expression identifier is interpreted:
• Edge evaluation = TRUE:
The rising edge of expression identifier is interpreted; i.e. the condition is satisfied when the
value of expression identifier changes from FALSE to TRUE.
• Edge evaluation = FALSE:
The static value of expression identifier is evaluated; i.e. the condition is satisfied when the
value of expression identifier is TRUE.
If WITH edge evaluation is not specified, the default setting is FALSE, i.e. the static value of
expression identifier is evaluated.
The statement section must contain at least one statement (empty statements also possible).
Example
The following example illustrates the use of the WAITFORCONDITION statement:
For a complete example, refer to the description for the Expression (Page 204).
*272VWDWHPHQW
*272 -XPSODEHO
-XPSODEHOGHILQHGLQDVWDWHPHQWDQGRSWLRQDOO\
LQWKHMXPSODEHOGHFODUDWLRQ /$%(/
Note
You should only use the GOTO statement in special circumstances (for example, for
troubleshooting). It should not be used at all according to the rules for structured programming.
Jumps are only permitted within a POU.
The following jumps are illegal:
• Jumps to subordinate control structures (WHILE, FOR, etc.)
• Jumps from a WAITFORCONDITION structure
• Jumps within CASE statements
Jump labels can only be declared in the POU in which they are used. If jump labels are declared,
only the declared jump labels may be used.
The table presents an overview of the conversion options between numerical data types and bit
data types. A distinction is made between:
• Implicit conversion (Page 173): Conversion is automatic when different data types are used
in an expression or when values are assigned by the compiler.
• Explicit conversion (Page 175): Conversion is carried out when the user calls a conversion
function (see SIMOTION Basic Functions Function Manual).
Table 4-40 Type conversion of numeric data types and bit data types
Source Target data type
data type BOOL BYTE WORD DWOR USINT UINT UDINT SINT INT DINT REAL LREAL STRING
D
BOOL – Im/Ex Im/Ex Im/Ex Val Val Val Val Val Val Val Val –
BYTE Ex – Im/Ex Im/Ex Ex Ex Ex Ex Ex Ex Val Val Elem
WORD Ex Ex – Im/Ex Ex Ex Ex Ex Ex Ex Val Val –
DWORD Ex Ex Ex – Ex Ex Ex Ex Ex Ex Ex/Val Val –
USINT Val Ex Ex Ex – Im/Ex Im/Ex Ex Im/Ex Im/Ex Im/Ex Im/Ex –
UINT Val Ex Ex Ex Ex – Im/Ex Ex Ex Im/Ex Im/Ex Im/Ex –
UDINT Val Ex Ex Ex Ex Ex – Ex Ex Ex Ex Ex Ex
SINT Val Ex Ex Ex Ex Ex Ex – Im/Ex Im/Ex Im/Ex Im/Ex –
INT Val Ex Ex Ex Ex Ex Ex Ex – Im/Ex Im/Ex Im/Ex –
DINT Val Ex Ex Ex Ex Ex Ex Ex Ex – Ex Im/Ex Ex
REAL Val Val Val Ex/Val Ex Ex Ex Ex Ex Ex – Im/Ex Ex
LREAL Val Val Val Val Ex Ex Ex Ex Ex Ex Ex – Ex
STRING – Elem – – – – Ex – – Ex Ex Ex –
Im: Implicit data type conversion possible
Ex: Explicit data type conversion possible by means of type conversion function source data type_TO_target data type
Val: Explicit data type conversion possible by means of type conversion functionsource data type_VALUE_TO_target data type
Elem: Implicit data type conversion with an element of the STRING data type
For information on conversion functions for date and time data types: Please refer to the
SIMOTION Basic Functions Function Manual.
The following figure provides a graphics-based view of all implicit type conversion chains. Each
stage in the type conversion chain - reading from left to right or from top to bottom - always
represents an enlargement of the value range.
,QWHJHUV
XQVLJQHG 86,17 8,17 8',17
,QWHJHUV
VLJQHG 6,17 ,17 ',17
5($/ /5($/
)ORDWLQJSRLQW
5($/ /5($/
QXPEHUV
Figure 4-35 Implicit type conversion chains (one or more levels from left to right or one level from top
to bottom)
Note
In arithmetic expressions, the result is always calculated in the largest number format contained
in the expression.
A value can only be assigned to the expression if:
• The calculated expression and the variable to be assigned are of the same data type.
• The data type of the calculated expression can be implicitly converted to the data type of the
variable to be assigned.
For more information on this error source and its solution: Please refer to the SIMOTION Basic
Functions Function Manual.
Note
If applicable, specify the data type explicitly for numbers (e.g. UINT#127, if the number 127 is
to be of data type UINT instead of USINT).
The compiler outputs warnings when it detects conversions associated with loss of precision.
Note
The type conversion may cause errors when the program is running, which will trigger the error
response set in the task configuration (see "Execution errors in programs" in the SIMOTION Basic
Functions Function Manual).
Special attention is required when converting DWORD to REAL. The bit string from DWORD is
taken unchecked as the REAL value. You must make sure that the bit string in DWORD
corresponds to the bit pattern of a normalized floating-point number in accordance with IEEE.
To do this, you can use the _finite and _isNaN functions.
Otherwise, an error can be triggered (FPU exception) as soon as the REAL value is first used for
an arithmetic operation (for example, in the program or when monitoring in the symbol
browser).
Note
The following applies if the value range limits are exceeded during conversion from LREAL to
REAL:
• Underflow (absolute value of LREAL number is smaller than the smallest positive REAL
number):
Result is 0.0
• Overflow (absolute value of LREAL number is larger than the largest positive REAL number):
The error response specified during task configuration is triggered.
)XQFWLRQ XQIRUPDWWHG
)XQFWLRQLGHQWLILHU
92,'
)81&7,21 ,GHQWLILHU
'DWDW\SH
)& 6WDWHPHQW
'HFODUDWLRQVHFWLRQ VHFWLRQ (1'B)81&7,21
Enter in the following sequence, see example in Source file with comments (Page 201)):
• The FUNCTION keyword
• An identifier as FC name
• If the function has a return value, the data type for the return value following a colon
The symbolic data type VOID can also be entered for functions with no return value.
This is then followed by:
• The optional declaration section (Page 182)
• The statement section (Page 187)
• The END_FUNCTION keyword
)XQFWLRQEORFN XQIRUPDWWHG
)XQFWLRQEORFNLGHQWLILHU
)81&7,21B%/2&. ,GHQWLILHU
)% 6WDWHPHQW
'HFODUDWLRQVHFWLRQ VHFWLRQ (1'B)81&7,21B%/2&.
Enter in the following sequence, see example in Source file with comments (Page 201)):
• The FUNCTION_BLOCK keyword
• An identifier as FB name
This is then followed by:
• The optional declaration section (Page 182)
• The statement section (Page 187)
• The END_FUNCTION_BLOCK keyword
)XQFWLRQEORFNVZLWKPHWKRGV XQIRUPDWWHG
)XQFWLRQEORFNLGHQWLILHU
)%
)81&7,21B%/2&. ,GHQWLILHU 'HFODUDWLRQVHFWLRQ
6WDWHPHQW
0HWKRGVLQ)% VHFWLRQ (1'B)81&7,21B%/2&.
2QO\ZLWKFRPSLOHURSWLRQ3HUPLWREMHFWRULHQWHGSURJUDPPLQJರ
Note
Object-oriented function blocks cannot be derived. Inheritance is therefore not possible for
methods.
0HWKRGVLQ)% XQIRUPDWWHG
0(7+2' )%DFFHVVLGHQWLILHU
0HWKRGLGHQWLILHU 92,'
,GHQWLILHU
'DWDW\SH
0HWKRG 6WDWHPHQW
'HFODUDWLRQVHFWLRQ VHFWLRQ (1'B0(7+2'
2QO\ZLWKFRPSLOHURSWLRQ3HUPLWREMHFWRULHQWHGSURJUDPPLQJರ
1RWHIRUPHWKRGVZLWKGDWDW\SH QRW92,' 7KHUHWXUQYDOXHRIWKHPHWKRGLGHQWLILHUPXVWEH
DVVLJQHGLQWKHVWDWHPHQWVHFWLRQ
You use the access identifier to determine whether the identifiers or the method can be used only
inside or outside of the function block, see the following table.
)%DFFHVVLGHQWLILHU XQIRUPDWWHG
38%/,&
35,9$7(
,17(51$/
2QO\ZLWKFRPSLOHURSWLRQ3HUPLWREMHFWRULHQWHGSURJUDPPLQJ
END_TYPE
Constant VAR CONSTANT1 X X X
Declaration list 4
END_VAR
Input parameter VAR_INPUT X X X
Declaration list 4
END_VAR
In/out parameter VAR_IN_OUT X X X
Declaration list 4
END_VAR
Output parameters VAR_OUTPUT X X X
Declaration list 4
END_VAR
Local static variable VAR1 3 X – –
Declaration list 4
END_VAR
Local temporary variable VAR – X X
Declaration list 4
END_VAR
VAR_TEMP X X X
Declaration list 4
END_VAR
Retentive variable VAR RETAIN2 3 X – –
(as of version 4.5 of the Declaration list 4
SIMOTION Kernel)
END_VAR
1
Additional specification of the FB access identifier possible with FB and compiler option (Page 62)
"Permit object-oriented programming" activated: PUBLIC, PRIVATE or INTERNAL, default PRIVATE; see
section "Access identifier within object-oriented FBs (Page 181)". The relevant blocks may occur multiple
times.
2
Additional specification of the access identifier PRIVATE or INTERNAL possible with FB and
activated compiler option (Page 62) "Permit object-oriented programming". The relevant blocks may
occur multiple times.
3
Additional specification of the keyword OVERRIDE possible with FB and activated compiler option
(Page 62) "Permit object-oriented programming". This keyword enables the initialization values of vari‐
ables to be overridden with the PRIVATE access identifier when the instance is declared.
4
Declaration list: The list of identifiers of the type to be declared
Parameter blocks
Parameters are local data and are formal parameters of a function block, a function or a method
in FB. When the FB or FC is called, the formal parameters are substituted by the actual
parameters, thus providing a means of exchanging information between the called and calling
source file sections.
• Formal input parameters receive the actual input values (data flow inwards).
• Formal output parameters are used to transfer output values (data flow outwards).
• Formal in/out parameters act as input and output parameters.
The following figures show the syntax for the parameter declaration of an FB, an FC or a method
in the FB.
)%SDUDPHWHUEORFN XQIRUPDWWHG
9$5B,1387
)RUPDOSDUDPHWHU
)RULQSXWSDUDPHWHU
9DULDEOHGHFODUDWLRQ
9$5B287387 (1'B9$5
)RURXWSXWSDUDPHWHU
9DULDEOHGHFODUDWLRQ
1RLQLWLDOL]DWLRQ
9$5B,1B287 ,QVWDQFHGHFODUDWLRQ
)RULQRXWSDUDPHWHU
'HFODUDWLRQRIDQ
$55$<ZLWK
G\QDPLFOHQJWK
2QO\DVRI9HUVLRQ9
RIWKH6,027,21.HUQHO
7KH9$5B,13879$5B287387DQG9$5B,1B287NH\ZRUGVPD\EHXVHGMXVWRQFHLQWKH
GHFODUDWLRQVHFWLRQ
9DULDEOHGHFODUDWLRQ
9$5B,1387
'HFODUDWLRQRIDQ
)RULQSXWSDUDPHWHU $55$<ZLWK
G\QDPLFOHQJWK
2QO\DVRI9HUVLRQ9
RIWKH6,027,21.HUQHO
9DULDEOHGHFODUDWLRQ
1RLQLWLDOL]DWLRQ
9$5B,1B287 ,QVWDQFHGHFODUDWLRQ
)RULQRXWSDUDPHWHU
'HFODUDWLRQRIDQ
$55$<ZLWK
G\QDPLFOHQJWK
2QO\DVRI9HUVLRQ9
RIWKH6,027,21.HUQHO
7KH9$5B,13879$5B287387DQG9$5B,1B287NH\ZRUGVPD\EHXVHGMXVWRQFHLQWKH
GHFODUDWLRQVHFWLRQ
0HWKRGSDUDPHWHUEORFN XQIRUPDWWHG
)RUPDOSDUDPHWHU
9DULDEOHGHFODUDWLRQ
9$5B,1387
'HFODUDWLRQRIDQ
)RULQSXWSDUDPHWHU $55$<ZLWK
G\QDPLFOHQJWK
9DULDEOHGHFODUDWLRQ
1RLQLWLDOL]DWLRQ
9$5B,1B287 ,QVWDQFHGHFODUDWLRQ
)RULQRXWSDUDPHWHU
'HFODUDWLRQRIDQ
$55$<ZLWK
G\QDPLFOHQJWK
7KH9$5B,13879$5B287387DQG9$5B,1B287NH\ZRUGVPD\EHXVHGMXVWRQFHLQWKH
GHFODUDWLRQVHFWLRQ
2QO\ZLWKFRPSLOHURSWLRQ3HUPLWREMHFWRULHQWHGSURJUDPPLQJ
:LWKPHWKRGVLQFODVVHV2QO\DVRIYHUVLRQ9RIWKH6,027,21.HUQHO
Apart from variables you can also declare the following in the parameter blocks:
• in the parameter block for in/out parameters:
– Instances of function blocks (Page 195)
– Arrays with a dynamic length (Page 188), as of version V4.2 of the SIMOTION Kernel.
• with functions in the parameter block for input parameters:
– Arrays with a dynamic length (Page 188), as of version V4.2 of the SIMOTION Kernel.
You can use the declared parameters the same as other variables within the FB or FC, with the
following exception: You cannot assign values to input parameters.
Note
When saving the project in the old project format:
Projects in which the output parameters for a function are declared cannot be compiled correctly
in SIMOTION SCOUT versions earlier than V4.5.
Note
For tips on the efficient use of parameters, please refer to the Runtime-optimized Programming
section in the SIMOTION Basic Functions Function Manual.
Parameter/variable Use
Input parameters With the call of an FC or an FB, assign the current values to the input param‐
eters. These values are used for data processing within the FC or the FB, for
example, for calculations, but cannot be modified themselves.
Only with "Permit language extensions" compiler option enabled (see Global
compiler settings (Page 62) or Local compiler settings (Page 65)): The input
parameters of an FB can be read and written using structured variables, in‐
cluding outside the FB (e.g. in the calling source file module).
In/out parameter You assign a variable to an in/out parameter for the call of the FC or FB. The FC
or the FB accesses this variable directly and can change this directly. Type
conversions are not supported.
The variable assigned to an in/out parameter must be able to be read and
written directly. Therefore, system variables (of the SIMOTION device or a
technology object), I/O variables or process image accesses cannot be as‐
signed to an in/out parameter.
Parameter/variable Use
Output parameters You assign a variable to an output parameter for the call of an FC or FB using
the => operator. The value of the output parameter (result) is transferred to
the variables when the FC or FB is closed.
The following also applies to FBs: The output parameters of an FB can be read
using structured variables, including outside the FB (e.g. in the calling source
file section).
Local variables Local variables are variables that are declared and used only within the block.
All local variables (VAR … END_VAR or VAR_TEMP … END_VAR) are temporary
in an FC, i.e. they lose their value when the FC is terminated. The next time the
FC is called, they are reinitialized.
A differentiation between static and temporary local variables is made in the
FB:
• Static variables (VAR ... END_VAR) retain their value when the FB is closed.
• Temporary variables (VAR_TEMP ... END_VAR) lose their value when the FB
is closed. The next time the FB is called, they are reinitialized.
The value of a local variable cannot be queried directly by the calling block.
This is only possible using an output parameter.
'HFODUDWLRQRIDQ$55$<ZLWKDG\QDPLFOHQJWK XQIRUPDWWHG
,GHQWLILHU $55$< > @ 2) 'DWDW\SH
,GHQWLILHURIWKH
)RUPDOSDUDPHWHU
LQ)%RU)&
2QO\DVRI9HUVLRQ9RIWKH6,027,21.HUQHO
Note
When saving the project in the old project format:
Projects in which [*] is used to identify a dynamic array cannot be compiled correctly in
SIMOTION SCOUT versions earlier than V4.5.
Note
With compiler option (Page 62) “Permit language extensions IEC61131 3rd edition" enabled the
standardized functions LOWER_BOUND (in := array-name) or UPPER_BOUND (in := array-name)
can be used to determine the lower and upper index limits respectively.
You can define the size of the memory space occupied by the ARRAY with _sizeOf (in := array-
name). The following applies: _sizeOf (in := array_of_type) :=
_lengthIndexOf (in := array_of_type) * _sizeOf (in := type).
The syntax of these functions is described in the "SIMOTION Basic Functions" Function Manual.
Note
The above functions are executed during runtime for an ARRAY with a dynamic length.
Example
FUNCTION_BLOCK example_dyn_array
VAR_IN_OUT
flexarray : ARRAY [..] OF DINT;
END_VAR
VAR_TEMP
i : DINT := 0;
END_VAR
PROGRAM test_dyn_array
VAR
array_1 : ARRAY [0 .. 29] OF DINT;
fb_example : example_dyn_array;
END_VAR
// ...
fb_example (flexarray := array_1);
// ...
END_PROGRAM
This provides an overview of the call of the functions and function blocks.
3DUDPHWHUWUDQVIHU
/LVWRISDUDPHWHUV
Input and in/out parameters are normally specified as a value assignment. In this way, you assign
values (actual parameters) to the parameters you have defined in the declaration section of the
called block (formal parameters).
The assignment of output parameters is made using the => operator. In this way, you assign a
variable (actual parameter) to the output parameters you have defined in the declaration section
of the called block (formal parameters).
,QSXWDVVLJQPHQW XQIRUPDWWHG
)RUPDOSDUDPHWHU $FWXDOSDUDPHWHUV
,GHQWLILHU ([SUHVVLRQ
,GHQWLILHURIWKH
LQSXWSDUDPHWHU
You transfer the data (actual parameters) to the formal input parameters of an FB or FC by means
of input assignments. You can specify the actual parameters in the form of expressions. You can
use the formal input parameters in statements within the FB or FC, but you cannot modify their
values.
A short form of parameter transfer is supported, but should not be applied in conjunction with
user-defined FBs. This short form is required only for some FCs, see SIMOTION Basic Functions
Function Manual.
The assignment of actual parameters is optional for an FB. If no input assignment is specified, the
values of the last call are retained because an FB is a source file section with memory.
The assignment of an actual parameter is optional for an FC when an initialization expression
was specified for the declaration of the formal parameter.
Also refer to the examples in Calling functions (Page 194) and Calling function blocks (instance
calls) (Page 195).
You can also gain read and write access to an FB's input parameter at any time outside the FB.
For further details, see: Accessing the FB's input parameter outside the FB (Page 197).
,QRXWDVVLJQPHQW XQIRUPDWWHG
)RUPDOSDUDPHWHU $FWXDOSDUDPHWHUV
,GHQWLILHU 9DULDEOHLGHQWLILHU
,GHQWLILHURIWKH 6LPSOHYDULDEOH
LQRXWSDUDPHWHU
You transfer the data (actual parameters) to the formal in/out parameters of an FB or an FC using
in/out assignments. You can only assign a variable of the same type to the formal in/out
parameter, data type conversions are not possible.
You can use and change the formal in/out parameters in statements within the FC or the FB. The
FC or the FB accesses the variable of the actual parameter directly and can change it directly.
See also the examples in Calling functions (Page 194) and Calling function blocks (instance calls)
(Page 195).
When using the STRING data type in in/out assignments, the declared length of the actual
parameter must be greater than or equal to the length of the formal in/out parameter (see
following example).
Table 5-5 Example of the use of the STRING data type in in/out assignments
FUNCTION_BLOCK REF_STRING
VAR_IN_OUT
io : STRING[80];
END_VAR
; // Statements
END_FUNCTION_BLOCK
FUNCTION_BLOCK test
VAR
my_fb : REF_STRING;
str1 : STRING [100];
str2 : STRING [50] ;
END_VAR
my_fb (io := str1); // Permissible call
my_fb (io := str2); // Illegal call,
// Compiler error message
END_FUNCTION_BLOCK
The variable assigned to an in/out parameter must be able to be read and written directly.
Therefore, system variables (of the SIMOTION device or a technology object), I/O variables or
process image accesses cannot be assigned to an in/out parameter.
Please note the different parameter access times!
2XWSXWDVVLJQPHQW XQIRUPDWWHG
)RUPDOSDUDPHWHU $FWXDOSDUDPHWHUV
,GHQWLILHU ! 9DULDEOHLGHQWLILHU
,GHQWLILHURIWKH 6LPSOHYDULDEOH
RXWSXWSDUDPHWHU
You use an output assignment to assign the formal output parameters of an FC or FB to the
variables (actual parameter) that accept the value of the formal output parameter when the FB
is closed.
You can use and change the formal output parameters in statements within the FC or the FB.
See also the examples in Calling functions (Page 194) and Calling function blocks (instance calls)
(Page 195).
Output assignments are optional for the parameter transfer. If there is no output assignment for
an output parameter, the following applies:
• With functions (FC):
The values for the output parameters are lost after the FC is terminated.
• With function blocks (FB):
You can gain read and write access to an FB's output parameter at any time, including outside
the FB. For further details, see: Accessing the FB's output parameter outside the FB
(Page 197).
Note
Using in/out parameters instead of input parameters is only faster if a large volume of data is to
be passed to the function block.
If unit variables are used predominantly instead of parameters, the resulting program structure
will be complex and confusing: object orientation, data encapsulation, multiple use of variable
names (encapsulation of validity ranges), etc., are no longer possible.
y := sin(x);
y := sin(in := x);
y := sqrt (1 - cos(x) * cos(x));
Note
In the function itself, the result (return value) is assigned to the function name.
Function without return value (no data type or VOID data type)
The assignment consists only of the function call.
The following example is valid provided a funct1 function has already been defined with the in1
and in2 input parameters along with the inout in/out parameter and the out1 and out2 output
parameters.
Example:
funct1 (in1 := var11, in2 := var12, inout1 := var13, out1 => var14, out2 =>
var15);
,QVWDQFHGHFODUDWLRQRI)% XQIRUPDWWHG
)XQFWLRQEORFN
,GHQWLILHU
LGHQWLILHU
,QVWDQFHLGHQWLILHU
)%$55$<
VSHFLILFDWLRQ
,QLWLDOL]DWLRQ
6WUXFWXUHLQLWLDOL]DWLRQOLVW
,QLWLDOL]DWLRQRQO\SRVVLEOHLIIXQFWLRQEORFNLQ67VRXUFHILOHZLWKIROORZLQJFRPSLOHURSWLRQ
3HUPLWREMHFWRULHQWHGSURJUDPPLQJ
)XQFWLRQEORFNVPXVWDOUHDG\H[LVW
:LWKRXWLQLWLDOL]DWLRQDQGZKHQWKH3HUPLWIRUZDUGGHFODUDWLRQVFRPSLOHURSWLRQLVHQDEOHGWKHIROORZLQJDSSOLHV
7KHSUHYLRXVGHILQLWLRQRID328SURWRW\SHLVVXIILFLHQW
Note
Pay attention to the different initialization times for different variable types.
)%FDOO XQIRUPDWWHG
,GHQWLILHU
,QVWDQFHQDPH
,QVWDQFHQDPH ,QGH[
',17GDWDW\SH
)%SDUDPHWHU
The example in the following table is applicable, assuming that the supply and motor function
blocks have already been defined:
• FB Supply:
Input parameters in1, in2; in/out parameter inout; output parameter out
• FB motor:
In/out parameters inout1, inout2; output parameters out1, out2
Table 5-6 Example of instance declaration, FB call, and access to output parameters
VAR
Supply1, Supply2: Supply;
Motor1 : Motor;
END_VAR
Note
To be able to use this option, the "Permit language extensions" compiler option must be
activated, see Global compiler settings (Page 62) and Local compiler settings (Page 65).
The instance name of the FB itself must not be used in a value assignment!
• There are several ways of defining the area of the circle for the FB and the FC:
– For the FB, an output parameter is defined.
– For the FC, its return value is used; the data type of the return value is defined
appropriately.
• Each FB and FC call will be recorded in a counter (local variable). The explanations for the
example state: We will see that this value will continue to be counted only in the FB.
• In the program section, the FB or the FC is called and the actual parameters assigned to the
following formal parameters:
– For the FB: Input, in/out and output parameters
– For the FC: Input and in/out parameters.
The values for the circumference and the area are available after calling the FB or the FC:
– For the FB: in the actual parameters of the in/out and output parameter.
The output parameter can be read even outside the FB.
– For the FC: in the return value of the function and in the actual parameter of the in/out
parameter.
Table 5-9 Example of the differences between FB and FC for the previous example
5.3 Programs
Programs are a series of statements placed between the PROGRAM and END_PROGRAM
keywords.
3URJUDP XQIRUPDWWHG
3URJUDPLGHQWLILHU
352*5$0 ,GHQWLILHU
3URJUDPGHFODUDWLRQVHFWLRQ 6WDWHPHQW
VHFWLRQ (1'B352*5$0
Programs are declared in the implementation section (Page 254) of an ST source file and are
comparable with the FB. Static local variables (VAR … END_VAR), retentive local variables
(VAR RETAIN … END_VAR) or temporary local variables (VAR_TEMP … END_VAR) can be created,
for example. However, they do not have any formal parameters and so cannot be called with
arguments. Examples of programs are contained in the Source file with comments
(Page 201) and Source text of the sample program (Page 87) sections.
The call is performed as for a function with parameters and return value, see following example.
Note
The activated "Create program instance data only once" compiler option causes:
• The static variables of the programs (program instance data) to be stored in a
different memory area (Page 289). This also changes the initialization behavior (Page 299).
• All called programs with the same name to use the same program instance data.
PROGRAM main_prog
; // ...
my_prog();
; // ...
END_PROGRAM
Note
Most of the programming work involved in assigning programs to tasks can be done if programs
are called from within a program. In the execution system, only one calling program needs to be
assigned to the associated tasks in each case.
5.4 Expressions
The expression is a special case of a function declaration:
• The data type of the return value is defined as BOOL and is not specified explicitly.
It is used in conjunction with the WAITFORCONDITION statement (Page 170).
An expression can only be declared in the implementation section of the ST source file.
([SUHVVLRQ XQIRUPDWWHG
([SUHVVLRQLGHQWLILHU
(;35(66,21 ,GHQWLILHU
([SUHVVLRQGHFODUDWLRQ 6WDWHPHQW
VHFWLRQ VHFWLRQ (1'B(;35(66,21
1RWHWKDWDQH[SUHVVLRQRIWKH%22/GDWDW\SHPXVWEHDVVLJQHGWRWKHH[SUHVVLRQ
LGHQWLILHULQWKHVWDWHPHQWVHFWLRQ
Note
The statement section of the expression cannot contain any function calls or loops.
Example
The following example assumes that the feeder program is running in a MotionTask. The option
Activation after StartupTask is selected for this MotionTask. The assignment of programs to tasks
is performed in SIMOTION SCOUT (see SIMOTION Motion Control Basic Functions Description of
Functions).
INTERFACE
USEPACKAGE cam;
PROGRAM feeder; // in MotionTask_1
END_INTERFACE
IMPLEMENTATION
// Condition for WAITFORCONDITION statement
EXPRESSION automaticExpr
automaticExpr := IOfeedCam; // Digital input
END_EXPRESSION
PROGRAM feeder
VAR
retVal : DINT ;
END_VAR ;
retVal := _enableAxis (axis := realAxis,
enableMode := ALL,
servoCommandToActualMode := INACTIVE,
nextCommand := WHEN_COMMAND_DONE,
commandId := _getCommandId() );
Further examples are contained in the SIMOTION Motion Control Basic Functions Function
Manual. In particular, the manual describes how, as of version V4.1 of the SIMOTION Kernel, you
use an EXPRESSION with parameters and, for example, program a time monitoring in a
WAITFORCONDITION statement.
Note
When using the compiler option Permit object-oriented programming there is an expanded
list of protected identifiers (Page 97) and of reserved identifiers (Page 102)in the ST
programming language.
The aforementioned conditions apply to the entire section Object-Oriented Programming –
OOP in this Manual.
Further information and usage examples of object-oriented programming can be found in the
following references:
Braun, Michael / Horn, Wolfgang: Objektorientiertes Programmieren mit SIMOTION (Object-
Oriented Programming with SIMOTION) Grundlagen, Programmbeispiele und
Softwarekonzepte nach IEC 61131‑3 (Basic Principles, Example Programs and Software
Concepts according to IEC61131-3) 1st edition, Erlangen: Publicis Publishing 2016. ISBN
978‑3‑89578‑455‑2.
%DVHFODVV XQIRUPDWWHG
$%675$&7
),1$/ &ODVVLGHQWLILHU
&/$66 ,GHQWLILHU
&ODVV
'HFODUDWLRQVHFWLRQ 0HWKRG (1'B&/$66
2QO\DVRI9HUVLRQ9RIWKH6,027,21.HUQHO
DQGZLWKFRPSLOHURSWLRQಯ3HUPLWREMHFWRULHQWHGSURJUDPPLQJರ
Enter an identifier as the class name after the keyword CLASS and optionally FINAL or ABSTRACT.
Then enter, see example in Table 6-7 Example: Up and Down counter as a class (Page 221):
• The optional declaration section (Page 210)
• The methods
• Keyword END_CLASS
Data Syntax
Data type TYPE Accessidentifier_class (optional)
Declaration list
END_TYPE
Constant VAR CONSTANT Accessidentifier_class (optional)
Declaration list
END_VAR
Local variable (static) VAR Accessidentifier_class (optional) OVERRIDE (optional)
Declaration list
END_VAR
Retentive variable VAR RETAIN access identifier (optional) OVERRIDE (optional)
Declaration list
END_VAR
(Only PROTECTED or PRIVATE access identifier permitted, default PRO‐
TECTED.)
Accessidentifier_class: PUBLIC, PROTECTED, PRIVATE or INTERNAL, default PROTECTED; see
section "Access identifiers within classes" (Page 211).
OVERRIDE: Specifying this keyword enable an override of the initialization values for values with the
access identifier PROTECTED or PRIVATE for the instance declaration (Page 222).
Declaration list: The list of identifiers of the type to be declared
&ODVVDFFHVVLGHQWLILHU XQIRUPDWWHG
38%/,&
3527(&7('
35,9$7(
,17(51$/
2QO\DVRIYHUVLRQ9RIWKH6,027,21.HUQHO
DQGZLWKFRPSLOHURSWLRQ3HUPLWREMHFWRULHQWHGSURJUDPPLQJ
0HWKRGLQFODVV XQIRUPDWWHG
),1$/
$FFHVVLGHQWLILHU
0(7+2' &ODVV
$%675$&7
0HWKRG
29(55,'(
LGHQWLILHU 92,'
,GHQWLILHU
'DWDW\SH
0HWKRG 6WDWHPHQW
'HFODUDWLRQVHFWLRQ VHFWLRQ (1'B0(7+2'
2QO\DVRI9HUVLRQ9RIWKH6,027,21.HUQHO
DQGZLWKFRPSLOHURSWLRQಯ3HUPLWREMHFWRULHQWHGSURJUDPPLQJರ
1RWHIRUPHWKRGVZLWKGDWDW\SH QRW92,' 7KHUHWXUQYDOXHRIWKHPHWKRGLGHQWLILHUPXVWEH
DVVLJQHGLQWKHVWDWHPHQWVHFWLRQ
Enter in the following sequence, see Table 6-7 Example: Up and Down counter as a class
(Page 221):
• The METHOD keyword.
• the optional class access identifier (PUBLIC, PROTECTED or PRIVATE), default PROTECTED.
See section “Access identifiers within Classes" (Page 211) for access identifiers.
• The keywords FINAL, ABSTRACT and OVERRIDE are only relevant for methods in classes that
are derived or are to be derived:
– FINAL: Method cannot be overridden in a derived class.
– ABSTRACT: Method cannot be called, it must be overridden in a class to be derived.
Furthermore, this keyword renders the class in which the method is defined an abstract
class. In this case, it is not possible to declare an instance of this class, see "Abstract
classes" (Page 233).
– OVERRIDE: Method overrides the existing method with the same name in a derived class.
• An identifier as method name.
• if the method has a return value, the data type for the return value following a colon.
The symbolic data type VOID can also be entered for a method with no return value.
This is then followed by:
• The optional declaration section (Page 214)
• The statement section (Page 216) (except in methods with keyword ABSTRACT)
• The END_METHOD keyword
Data Syntax
Constant VAR CONSTANT
Declaration list
END_VAR
Input parameters VAR_INPUT
Declaration list
END_VAR
In/out parameter VAR_IN_OUT
Declaration list
END_VAR
Output parameters VAR_OUTPUT
Declaration list
END_VAR
Data Syntax
Local variable VAR or VAR_TEMP
(temporary) Declaration list
END_VAR
Declaration list: The list of identifiers of the type to be declared
Parameter blocks
Parameters are local data and are formal parameters of a method. When the method is called,
the formal parameters are substituted by the actual parameters, thus providing a means of
exchanging information between the called and calling source file sections.
• Formal input parameters receive the actual input values (data flow inwards).
• Formal output parameters are used to transfer output values (data flow outwards).
• Formal in/out parameters act as input and output parameters.
The following figures show the syntax for the parameter declaration of a method. This is
identical to the syntax for the parameter declaration of a function (FC).
0HWKRGSDUDPHWHUEORFN XQIRUPDWWHG
)RUPDOSDUDPHWHU
9DULDEOHGHFODUDWLRQ
9$5B,1387
'HFODUDWLRQRIDQ
)RULQSXWSDUDPHWHU $55$<ZLWK
G\QDPLFOHQJWK
9DULDEOHGHFODUDWLRQ
1RLQLWLDOL]DWLRQ
9$5B,1B287 ,QVWDQFHGHFODUDWLRQ
)RULQRXWSDUDPHWHU
'HFODUDWLRQRIDQ
$55$<ZLWK
G\QDPLFOHQJWK
7KH9$5B,13879$5B287387DQG9$5B,1B287NH\ZRUGVPD\EHXVHGMXVWRQFHLQWKH
GHFODUDWLRQVHFWLRQ
2QO\ZLWKFRPSLOHURSWLRQ3HUPLWREMHFWRULHQWHGSURJUDPPLQJ
:LWKPHWKRGVLQFODVVHV2QO\DVRIYHUVLRQ9RIWKH6,027,21.HUQHO
Apart from variables you can also declare the following in the parameter blocks:
• in the parameter block for in/out parameters:
– Instances of function blocks (Page 195)
– Instances of classes (Page 222)
– Arrays with a dynamic length (Page 188), as of version V4.2 of SIMOTION Kernel.
• in the parameter block for input parameters:
– Arrays with a dynamic length (Page 188), as of version V4.2 of SIMOTION Kernel.
You can use the declared parameters in the same way as other variables within a method, with
the following exception: You cannot assign values to input parameters.
From outside the method you can only access the parameters by calling the method (including
return value).
Note
For tips on the efficient use of parameters, please refer to the Runtime-optimized Programming
section in the SIMOTION Basic Functions Function Manual.
Parameter/variable Use
Input parameters With the call of a method, assign the current values to the input parameters.
These values are used for data processing within the method, for example, for
calculations, but cannot be modified themselves.
In/out parameter You assign a variable to an in/out parameter for the call of the method. The
method accesses this variable directly and can change it directly. Type con‐
versions are not supported.
The variable assigned to an in/out parameter must be able to be read and
written directly. Therefore, system variables (of the SIMOTION device or a
technology object), I/O variables or process image accesses cannot be as‐
signed to an in/out parameter.
Output parameters You assign a variable to an in/out parameter for the call of a method using
the => operator. The value of the output parameter (result) is transferred to
the variables when the method is closed.
Local variables Local variables are variables that are declared and used only within the block.
All local variables (VAR … END_VAR or VAR_TEMP … END_VAR) are temporary
in methods, i.e. they lose their value when the method is terminated. The next
time the method is called, they are reinitialized.
Note
The statement section is omitted from methods that are declared with the keyword ABSTRACT.
&ODVVPHWKRGFDOO XQIRUPDWWHG
,QVWDQFHLGHQWLILHU
&ODVVLGHQWLILHU
7+,6
683(5
0HWKRGLGHQWLILHU )&PHWKRGSDUDPHWHU
2QO\DVRIYHUVLRQ9RIWKH6,027,21.HUQHO
DQGZLWKFRPSLOHURSWLRQ3HUPLWREMHFWRULHQWHGSURJUDPPLQJ
,QSXWDVVLJQPHQW XQIRUPDWWHG
)RUPDOSDUDPHWHU $FWXDOSDUDPHWHUV
,GHQWLILHU ([SUHVVLRQ
,GHQWLILHURIWKH
LQSXWSDUDPHWHU
You transfer the data (actual parameters) to the formal input parameters of a method by means
of input assignments. You can specify the actual parameters in the form of expressions. You can
use the formal input parameters in statements within the method, but you cannot modify their
values.
The assignment of an actual parameter is optional when an initialization expression was
specified for the declaration of the formal parameter.
See also Table 6-7 Example: Up and Down counter as a class (Page 221).
,QRXWDVVLJQPHQW XQIRUPDWWHG
)RUPDOSDUDPHWHU $FWXDOSDUDPHWHUV
,GHQWLILHU 9DULDEOHLGHQWLILHU
,GHQWLILHURIWKH 6LPSOHYDULDEOH
LQRXWSDUDPHWHU
You transfer the data (actual parameters) to the formal in/out parameters of a method by means
of in/out assignments. You can only assign a variable of the same type to the formal in/out
parameter, data type conversions are not possible.
You can use and change the formal in/out parameters in statements within the method. The
method accesses the variable of the actual parameter directly and can change it directly.
The variable assigned to an in/out parameter must be able to be directly read and written.
Therefore, system variables (of the SIMOTION device or a technology object), I/O variables or
process image accesses cannot be assigned to an in/out parameter.
When using the STRING data type in in/out assignments, the declared length of the actual
parameter must be greater than or equal to the length of the formal in/out parameter (see
following example).
Table 6-6 Example of the use of the STRING data type in in/out assignments
METHOD REF_STRING
VAR_IN_OUT
io : STRING[80];
END_VAR
; // Statements
END_METHOD
METHOD test
VAR
str1 : STRING [100];
str2 : STRING [50] ;
END_VAR
REF_STRING (io := str1); // Permissible call
REF_STRING (io := str2); // Illegal call,
// Compiler error message
END_METHOD
2XWSXWDVVLJQPHQW XQIRUPDWWHG
)RUPDOSDUDPHWHU $FWXDOSDUDPHWHUV
,GHQWLILHU ! 9DULDEOHLGHQWLILHU
,GHQWLILHURIWKH 6LPSOHYDULDEOH
RXWSXWSDUDPHWHU
You use an output assignment to assign the formal output parameters of a method to the
variables (actual parameter) that adopt the value of the formal output parameter when the
method is closed.
You can use and change the formal output parameters in statements within the method.
See also example: Table 6-8 Example: Call of the methods in the COUNTER class (Page 224)
Output assignments are optional for the parameter transfer. If there is no output assignment for
an output parameter, the values for the output parameters are lost once the method is
terminated.
The return value for both methods contains the current value of the counter variables CV. The
output parameter QU signals whether the upper limit value MAX_Val has been reached or the
lower limit value MIN_Val has not been reached as relevant.
CLASS COUNTER
VAR
CV : INT; // Current value of the counter
END_VAR
VAR OVERRIDE
MAX_Val : INT := 100;
MIN_Val : INT := 0;
END_VAR
,QVWDQFHGHFODUDWLRQRIDFODVV XQIRUPDWWHG
,GHQWLILHU &ODVVLGHQWLILHU
,QVWDQFHLGHQWLILHU
&ODVV$55$<
VSHFLILFDWLRQ
,QLWLDOL]DWLRQ
6WUXFWXUHLQLWLDOL]DWLRQOLVW
6,027,21.HUQHODVRIYHUVLRQ9
&ODVVHVPXVWDOUHDG\H[LVW
:LWKRXWLQLWLDOL]DWLRQDQGZKHQWKH3HUPLWIRUZDUGGHFODUDWLRQVFRPSLOHURSWLRQLVHQDEOHGWKHIROORZLQJDSSOLHV
7KHSUHYLRXVGHILQLWLRQRID328SURWRW\SHLVVXIILFLHQW
Note
Pay attention to the different initialization times for different variable types.
PROGRAM CallCounter_ST
VAR
C1 : COUNTER := (MAX_Val := 1000, MIN_Val := 0); // Instance
CountOut : INT;
Locking : BOOL;
UpValreached : BOOL;
END_VAR
&ODVV XQIRUPDWWHG
$%675$&7
),1$/ &ODVVLGHQWLILHU
&/$66 ,GHQWLILHU
%DVHFODVVLGHQWLILHU
(;7(1'6 &ODVVLGHQWLILHU
6WUXFWXUHLQLWLDOL]DWLRQOLVW
,03/(0(176 ,QWHUIDFHLGHQWLILHU
&ODVV
'HFODUDWLRQVHFWLRQ 0HWKRG (1'B&/$66
2QO\DVRI9HUVLRQ9RIWKH6,027,21.HUQHO
DQGZLWKFRPSLOHURSWLRQಯ3HUPLWREMHFWRULHQWHGSURJUDPPLQJರ
Use the keyword EXTENDS with the identifier for the base class in order to derive a class.
The properties for the derived class can now be adapted to the new circumstances:
• The initialization values for the variables from the base class can be modified:
– public or protected variables (access identifiers PUBLIC or PROTECTED) without
restrictions.
– private variables (access identifier PRIVATE) only when the keyword OVERRIDE has been
stated at their declaration block after the access identifier.
• Additional data types, variables and constants can be declared.
• Additional instances of classes and function blocks can be declared.
• Additional methods can be defined.
• Existing methods can be overridden.
Note
Data types, variables and constants that have been declared with the access identifier PRIVATE
in the base class cannot be accessed in the derived class. Access is only possible via methods
inherited from the base class.
Methods that have been defined with the access identifier PRIVATE in the base class cannot be
called in the derived class. They can only be called from methods inherited from the base class.
method of the base class are on the left side of the assignments, the formal parameters of the
overriding class are on the right side as actual parameter.
END_METHOD
END_CLASS
The DOWN method does not need to be overridden. Since the COUNTER_5STEP classes is derived
from the COUNTER class then it also inherits the DOWN method. The DOWN method calls the UP
method with the following statement: DOWN := THIS.UP (INC := - DEC);. The keyword
THIS means that the method applicable there is called in derived classes. Consequently the
DOWN method calls the following methods:
• in the COUNTER class:
the UP method for counting upwards in steps of 1
• in the COUNTER_5STEP class:
the UP method for counting upwards in steps of 5
This means that the DOWN method
• in the COUNTER class counts downwards in steps of 1
• in the COUNTER_5STEP class counts downwards in steps of 5.
Call in a program
The following program extends the Table 6-8 Example: Call of the methods in the COUNTER class
(Page 224) program to include the call of the methods in the COUNTER_5STEP class. A C2
instance of the COUNTER_5STEP classes is declared for this: The statements for calling the UP
and DOWN methods of the C1 instance of the COUNTER classes are duplicated and modified
accordingly.
This program must be assigned to a cyclic task of the execution system (e.g. BackgroundTask).
The complete ST source file also includes the classes COUNTER and COUNTER_5_STEP from Table
6-9 Up and Down counter in steps of 5 (Page 228) and Table 6-7 Example: Up and Down counter
as a class (Page 221) respectively in front of the program CallCounter_ST2.
Table 6-10 Call of the methods of the COUNTER and COUNTER_5STEP classes in stages
PROGRAM CallCounter_ST2
VAR
C1 : COUNTER; // COUNTER instance
C2 : COUNTER_5STEP; // COUNTER_5STEP instance
CountOut : INT;
CountOut2 : INT;
Locking : BOOL;
Locking2 : BOOL;
UpValreached : BOOL;
UpValreached2 : BOOL;
END_VAR
// Call of methods from COUNTER (C1)
IF UpValreached = TRUE THEN
Locking := TRUE;
END_IF;
IF Locking = FALSE THEN
CountOut := C1.UP (QU => UpValreached); // Increment
END_IF;
IF Locking = TRUE THEN
CountOut := C1.DOWN (); // Decrement
END_IF;
IF CountOut <= 0 THEN
Locking := FALSE;
UpValreached := FALSE;
END_IF;
// Call of methods from COUNTER_5STEP (C2)
IF UpValreached2 = TRUE THEN
Locking2 := TRUE;
END_IF;
IF Locking2 = FALSE THEN
CountOut2 := C2.UP (QU => UpValreached2); // Increment
END_IF;
IF Locking2 = TRUE THEN
CountOut2 := C2.DOWN (); // Decrement
END_IF;
IF CountOut2 <= 0 THEN
Locking2 := FALSE;
UpValreached2 := FALSE;
END_IF;
END_PROGRAM
Table 6-11 Call of the methods of the COUNTER and COUNTER_5STEP classes via a function
PROGRAM CallCounter_ST3
VAR
C1 : COUNTER;
C2 : COUNTER_5STEP;
CountOut : INT;
CountOut2 : INT;
Locking : BOOL;
Locking2 : BOOL;
UpValreached : BOOL;
UpValreached2 : BOOL;
END_VAR
// Call COUNTER (C1) for increment/decrement
CallSingleCounter (
C := C1,
CountOut := CountOut,
Locking := Locking,
UpValReached := UpValReached);
// Call COUNTER_5STEP (C2) for increment/decrement
CallSingleCounter (
C := C2,
CountOut := CountOut2,
Locking := Locking2,
UpValReached := UpValReached2);
END_PROGRAM
Example
The example below supplements the example Table 6-9 Up and Down counter in steps of 5
(Page 228).
Example
The following example supplements the examples Table 6-8 Example: Call of the methods in the
COUNTER class (Page 224) and Table 6-10 Call of the methods of the COUNTER and
COUNTER_5STEP classes in stages (Page 229).
Table 6-13 Initialization of instances of the COUNTER class and the derivations
VAR
C1 : COUNTER := (MIN_Val := -100);
// MAX_Val = 100, MIN_Val = -100
C2 : COUNTER_5STEP
:= (COUNTER := (MIN_Val := -100));
// Alternative:
// := (COUNTER.MIN_Val := -100);
// MAX_Val = 500, MIN_Val = -100
C3 : COUNTER_10STEP
:= (COUNTER_5STEP := (COUNTER := (MAX_Val := 1000)));
// Alternative:
// := (COUNTER_5STEP.COUNTER.MAX_Val := 1000);
// MAX_Val = 1000, MIN_Val = -500
END_VAR
Definition
A class is described as abstract if one of the two following conditions is met:
• The class is marked with the keyword ABSTRACT, see Class syntax diagram (Page 225).
• At least one method of the class is abstract, i.e. is marked with the keyword ABSTRACT,
see Method syntax diagram (Page 213).
No instances can be declared of an abstract class.
In order to be able to declare instances, derived classes must be declared from abstract classes
with all abstract methods overridden and their statement sections formulated. Derived classes
in which not all inherited methods are implemented remain abstract.
Use
Abstract classes are a means of structuring and abstraction often used in object-oriented
programming. The common variables and common methods are defined with their interfaces
(formal parameters) in an abstract class. The methods and specified in the derived classes and
overridden and implemented in accordance with the relevant requirements.
There are different motor types in a machine, e.g. motors that can be switched on directly via a
contactor or via a star-delta switch and speed-controlled drives. The concrete methods for
switching the motors on and off differ. Nevertheless the methods for switching on and off in an
abstract class can be stipulated with their signatures (identifier, access identifier, formal
parameters) with variables also defined for the status of the motor (e.g. running, stationary,
starting, stopping, actual speed, error). These methods and variables should be subject to
uniform usage in all classes. In the derived classes the methods are specified in accordance with
the motor type with the corresponding values assigned to the variables.
Note
While object-oriented interfaces start and end with the same keywords as the interface section
(Page 252) of a unit (INTERFACE / END_INTERFACE), they have different meanings and are used
in different ways.
2EMHFWRULHQWHGLQWHUIDFH XQIRUPDWWHG
,QWHUIDFHLGHQWLILHU
,17(5)$&( ,GHQWLILHU
%DVHLQWHUIDFHLGHQWLILHU
(;7(1'6 ,QWHUIDFHLGHQWLILHU
0HWKRGSURWRW\SH (1'B,17(5)$&(
2QO\DVRI9HUVLRQ9RIWKH6,027,21.HUQHO
DQGZLWKFRPSLOHURSWLRQಯ3HUPLWREMHFWRULHQWHGSURJUDPPLQJರ
Method prototype
A method prototype determines the call interface for a method. This call interface includes:
• the method identifier (name),
• optionally the data type of the return value
• the input, in-out parameters and output parameters for the method
0HWKRGSURWRW\SH XQIRUPDWWHG
0HWKRG
LGHQWLILHU 92,'
0(7+2' ,GHQWLILHU
'DWDW\SH
0HWKRGSDUDPHWHUEORFN (1'B0(7+2'
2QO\DVRIYHUVLRQ9RIWKH6,027,21.HUQHO
DQGZLWKFRPSLOHURSWLRQ3HUPLWREMHFWRULHQWHGSURJUDPPLQJ
These method prototypes must be formulated as public methods (access identifier PUBLIC) in the
classes which implement the interface. Observe the following here:
• The following must still be adopted here:
– the method identifier
– the data type of the return value (if present)
– the input, in/out and output parameters in the parameter block
• The following must or can be added:
– Optional: Property of the method (FINAL, ABSTRACT)
– Mandatory: Access identifier PUBLIC
– Optional: Declaration of variables and data types
– Mandatory: Statement section (except for methods with the property ABSTRACT: the
statement section is omitted in this case).
&ODVV XQIRUPDWWHG
$%675$&7
),1$/ &ODVVLGHQWLILHU
&/$66 ,GHQWLILHU
%DVHFODVVLGHQWLILHU
(;7(1'6 &ODVVLGHQWLILHU
6WUXFWXUHLQLWLDOL]DWLRQOLVW
,03/(0(176 ,QWHUIDFHLGHQWLILHU
&ODVV
'HFODUDWLRQVHFWLRQ 0HWKRG (1'B&/$66
2QO\DVRI9HUVLRQ9RIWKH6,027,21.HUQHO
DQGZLWKFRPSLOHURSWLRQಯ3HUPLWREMHFWRULHQWHGSURJUDPPLQJರ
To implement one or more object-oriented interfaces use the keyword IMPLEMENTS, followed
by the lists of the interfaces to be implemented separated by commas. A class can implement
multiple interfaces.
The following must or can be supplemented for the definition of the implementing class:
• Optional: the class property (FINAL, ABSTRACT)
• Mandatory: the class identifier (name)
• Optional: the keyword EXTENDS with the identifier of a base class to be derived as well as the
initialization (if applicable)
• Optional: the declaration subsection with the local variables and data type for the class
• Mandatory: all methods that have been defined as prototypes in the interfaces to be
implemented.
The following must still be adopted with this:
– the method identifier
– the data type of the return value (if present)
– the input, in/out and output parameters in the parameter block
The following must or can be added:
– Optional: Property of the method (FINAL, ABSTRACT)
– Mandatory: Access identifier PUBLIC
– Optional: Declaration of local variables and data types
– Mandatory: Statement section (except for methods with the property ABSTRACT: the
statement section is omitted in this case).
• Optional: Additional methods (any access identifier possible).
See: Creating methods (Page 213).
All method identifiers must be unique within the class. This means that the object-oriented
interface to be implemented
INTERFACE IfTest
// ...
END_INTERFACE
CLASS cl IMPLEMENTS IfTest
// ...
END_CLASS
CLASS clTest
VAR PROTECTED OVERRIDE
myInterf : IfTest := *;
END_VAR
END_CLASS
PROGRAM prog
VAR
clInst : cl;
testInst : clTest := (myInterf := clInst);
END_VAR
; // ...
END_PROGRAM
INTERFACE ITF1
METHOD m1 END_METHOD
END_INTERFACE
INTERFACE ITF2
METHOD m2 END_METHOD
END_INTERFACE
CLASS A IMPLEMENTS ITF1
METHOD PUBLIC m1 (* ... *) ; END_METHOD
// ...
END_CLASS
CLASS B IMPLEMENTS ITF2
METHOD PUBLIC m2 (* ... *) ; END_METHOD
// ...
END_CLASS
CLASS C IMPLEMENTS ITF1, ITF2
METHOD PUBLIC m1 (* ... *) ; END_METHOD
METHOD PUBLIC m2 (* ... *) ; END_METHOD
// ...
END_CLASS
interf1 := inst_a;
(* interf1 contains a valid reference to inst_a. *)
func_if1(interf1);
(* The method inst_a.m1() is therefore called within the function. *)
func_if1(inst_a);
(* Equivalent call to the last two code lines *)
interf2 := inst_b;
(* interf2 contains a valid reference to inst_b. *)
func_if2(interf2);
(* The method inst_b.m2() is therefore called within the function.
The method m1() is not called. The variable tmp contains the value NULL after
execution of the operator ?= because the class B does not implement the interface ITF1. *)
interf2 := inst_c;
(* interf2 contains a valid reference to inst_c. *)
func_if2(interf2);
(* The method inst_b.m2() is therefore called within the function.
The method inst_c.m1() is also called. The variable tmp contains a valid reference to
inst_c after execution of the operator ?= because the class C also implements the interface
ITF1. *)
END_PROGRAM
Two object-oriented interfaces (ITF1 and ITF2) are defined in the example shown. Each interface
contains one method as relevant: m1() in ITF1 and m2() in ITF2.
Note
This mechanism of course works in exactly the same way in methods, But we have used
functions here instead of methods because the example was simpler.
This option of forming object references and interface variables makes it possible to
independently develop and test program modules. Interfaces are a description of the interfaces
shared by the program modules containing the program code of the methods to be
implemented. This data description can then be used, for example, to perform a test in a
program area with dummy methods and data supplied by reference transfer. When the
formulated program sections are created later on, the tested sections will function
automatically. Of course, this arrangement will work successfully only if the interfaces are not
changed retrospectively. But the compiler monitors interfaces carefully for any changes.
Both constructs define methods as prototypes. This guarantees that the methods can be used
according to their definition in the derived or implementing classes. A programmer can thus feel
confident that the use (call) of methods defined as prototypes will function reliably when the
entire program is finished and the individual program sections are joined together.
The basic difference between the two constructs can be summarized as follows:
• An abstract class constitutes a contract for use in the derivation chain, i.e. within the class
hierarchy.
• Object-oriented interfaces constitute an external contract between different program
sections.
The following decision-making guide can be derived from the above information:
• Object-oriented interfaces are used if the following two conditions are satisfied:
– A more generalized definition between different programs is required.
– The methods should or may be accessed by anyone.
• Abstract classes are used if one of the following conditions is satisfied:
– A structure must be defined for a program area..
– Methods must be concealed (i.e. must not be PUBLIC).
Abstract classes can be combined very effectively with object-oriented interfaces in object-
oriented software and thus provide a wonderful tool for planning and designing the software
structure.
The benefits of abstract classes are:
• Abstract classes allow full programming of methods. thereby reducing the time and effort
involved in writing program sections that can be used by everyone in the same way. The
methods are simply inherited when real classes are derived.
• The specification of access rights to methods enhances the security of programs.
The benefits of object-oriented interfaces are:
• Object-oriented interfaces allow different program sections to be connected in a highly
flexible manner,
• so making it possible for software development teams to work more independently of one
another.
The associated declared data type is "Reference to the data type" (REF_TO data_type).
The following are permitted as data types to which references can be formed:
• Elementary data types (e.g. INT, DINT, REAL, WORD, TIME, STRING)
• User-defined data types (UDT)
• System data types
• Function blocks, provided they contain at least one static variable
• Classes
No references can be formed to the following data types because references exist already:
• Technology object data types
• Object-oriented interfaces
• General references
• I/O references
Variables of general references can be declared in the interface and implementation sections as
well as in all program organization units and classes. The data type to be referenced must be
declared beforehand and lie within the scope of the POU. The declaration as element of a
structure or an ARRAY is also possible.
All variable types for the relevant program organization unit are permitted with the exception of:
• VAR_IN_OUT.
Arrays, structures, function blocks or classes that contain general references may
nonetheless be transferred as VAR_IN_OUT.
• VAR RETAIN or VAR_GLOBAL RETAIN is not permitted.
However, structures that contain at least one element other than reference types (general
references, data types of the technology objects, object-oriented interfaces), can be stored
retentive.
• VAR CONSTANT or VAR_GLOBAL CONSTANT is not meaningful.
General references must be initialized with "NULL".
Note
Note for instances of function blocks that are passed as in/out parameter (VAR_IN_OUT):
• The REF function cannot be used for static variables (VAR) of function blocks imported from
technology packages or device-independent libraries.
The restriction does not apply to class instances.
The only exception is for references to classes. A reference to a derived class of a reference to the
base class can be assigned here.
For the assignment, no check is made for the validity of the reference; the assignment is always
possible.
An explicit assignment with NULL is also possible.
The validity of references should be checked by comparing with NULL before use.
Comparison operators
Only the comparison operators "=" and "<>" can be used to check for equality or inequality.
The operators ">", "<", ">=", "<=" as well as the MIN and MAX standard functions are not
permitted.
Example
FUNCTION_BLOCK myFB
VAR OVERRIDE
myInput AT %I* : INT; // Declaration input
myOutput AT %Q* : INT; // Declaration output
myOutArr AT %Q* : ARRAY[0..3] OF BYTE;
// Array of outputs
END_VAR
; // ...
END_FUNCTION_BLOCK
FUNCTION_BLOCK myFB
VAR OVERRIDE
myInput AT %I* : INT := NULL;
END_VAR
IF (myInput <> NULL) THEN
// Validity check of the I/O reference
Testvar := myInput;
// Access to the value
END_IF;
// ...
END_FUNCTION_BLOCK
Principle
The following restrictions apply to I/O reference variables:
• I/O references cannot be forwarded as in/out parameters (VAR_INOUT) to other program
organization units (POU).
• I/O references cannot be assigned general references and vice versa. In particular, the REF()
standard function cannot be used on I/O variables to assign I/O references.
• I/O references cannot be passed to input parameters (VAR_INPUT) defined as variable-length
ARRAY.
• I/O references are not displayed in the Symbol browser and in watch tables.
• I/O references cannot be read or written per HMI, Web access or OPC access.
• I/O references must not be declared in retentive variables (VAR RETAIN).
• Bit access is possible to I/O references of the BYTE, WORD or DWORD data type. This also
applies to the associated standard functions (e.g. _setbit() ).
• Use as argument for marshalling and endian functions is not possible.
VAR_GLOBAL
myFbInst1 : myFB := (myInput := InputVarW3,
myOutput := OutputVarW10);
myFbInst2 : myFB := (myInput := InputVarW4,
myOutput := OutputVarW14);
END_VAR
The compiler checks whether all I/O references are linked with I/O variables at least with
instances in VAR_GLOBAL or in the VAR declaration blocks of programs. Linking is also possible
even such an instance was included previously in other classes or function blocks.
If a class or a function block possesses an I/O reference, the following must be observed when
the instance is declared in the VAR blocks of other classes or function blocks:
• Either the instance itself is initialized,
• Or the variable block in which the instance is declared must be capable of initialization
(OVERRIDE or PUBLIC identifier).
The above-mentioned checks are omitted when the I/O reference for the declaration was
initialized with NULL.
You must follow certain structure and syntax rules in your source file sections so that the ST
source file can be compiled. A few general guidelines are presented here; details on source file
sections are presented later in this section:
• When creating the source file, you should always pay attention to the order of the source file
sections. A section that is to be called must always precede the calling section so that the
former is recognized by the latter.
For example, variables must always be declared before they are used and functions must be
defined before they are called.
• The source text for the most common source file sections – program, function or function
block – consists of the following:
– Start of section with reserved word and identifier
– Declaration section (optional)
– Statement section
– End of section with reserved word
• Identifiers for source file sections – hereinafter referred to as name or name_list - follow the
general syntax rules for identifiers, see Identifiers in ST (Page 95).
Note
A template with all possible source file sections (template for example unit) is available in the
online help.
Syntax
INTERFACE
// Interface statements (optional)
END_INTERFACE
An individual identifier of the section cannot be specified.
Optionally, interface statements exist in the following order between reserved words INTERFACE
and END_INTERFACE.
1. Specification of utilized technology package. Syntax:
USEPACKAGE tp-name [AS namespace];
For more details, refer to the SIMOTION Basic Functions Function Manual.
2. Specification of utilized libraries.
Syntax:
USELIB library-name-list [AS namespace];
For more information, see "Using data types, functions and function blocks from libraries
(Page 341)".
Sequence
The interface section is the first section of an ST source file.
Note
Optionally, the unit statement can precede the interface section, see "Identifier of the unit
(Page 272)".
Within number 4, any order is permitted. The individual declaration blocks for data type
definitions (including POU prototypes) and variables declarations can appear more than once.
Please note: Identifiers must be declared before they are used.
Only if the "Permit forward declarations" compiler option (Page 62) is activated: When declaring
an instance of a function block or a class, it is sufficient for the prototype of the function block
to have been declared beforehand. It is not possible to initialize the function block or the class.
Frequency
Once per ST source file
Mandatory section
Yes
Syntax
IMPLEMENTATION
// Implementation statements (optional)
END_IMPLEMENTATION
An individual identifier of the section cannot be specified.
Optionally, implementation statements (main part of the ST source file) exist in the following
order between the reserved words IMPLEMENTATION and END_IMPLEMENTATION:
1. Reference to other units in order to use their public components. Syntax:
USES unit_name-list;
For more information, see "USES statement in a using unit (Page 275)".
2. Declarations
– Data type definitions (Page 268):
User-defined data types (UDT) that are valid within the entire ST source file
– Variable declarations (Page 269):
Unit variables and unit constants that are valid within the entire ST source file.
Permissible keywords: See Section "Variable declaration" (Page 269).
– Object-oriented interfaces (Page 265):
Object-oriented interfaces that are valid within the entire ST source file
As of version V4.5 of the SIMOTION Kernel and with compiler option (Page 62) "Permit
object-oriented programming" activated.
– POU prototypes for the forward declaration (Page 375).
Specification of the prototypes for program organization units with forward declaration
(only effective if the "Permit forward declarations" compiler option (Page 62) is activated).
Note
Data types, variables or object-oriented interfaces that are to be declared public and used in
other program sources must be fully declared in the interface section (Page 252).
Sequence
Always follows the interface section (Page 252).
If the "Permit forward declarations" compiler option (Page 62) is not activated, the following
applies:
• The order of the implementation statements indicated above is mandatory; within
numbers 2 and 3, any order is permitted.
• All identifiers must be declared before they are used.
If the "Permit forward declarations" compiler option (Page 62) is activated, the following applies:
• As regards the order of the interface statements, the following applies:
Numbers 2 and 3 need no longer be strictly separated. Declarations may be freely
programmed between program organization units.
Exception: POU prototypes must be declared before the relevant program organization unit
is defined or used.
• As long as the following conditions are satisfied, the identifiers of program organization units
(Page 256) can be used before they are defined.
– There are no restrictions with respect to functions (Page 257), programs (Page 260),
expressions (Page 261) or methods (Page 264). Any order is permitted.
A POU prototype may be optionally declared in advance for programs or functions.
– This is possible for function blocks (Page 258) or classes (Page 262) subject to the
following restrictions (e.g. when the instance is declared):
Any order is permitted if initialization is not specified. In this case, however, it is absolutely
essential that the prototype of the function block or class is declared beforehand.
If initialization is specified, the function block or the class must be fully defined
beforehand.
• All other identifiers (e.g. data types, variables) must be declared before they are used.
Frequency
Once per ST source file
Mandatory section
Yes
The following applies for the sequence of the POUs in an ST source file:
• Usually, the called POUs must precede the calling POUs in the source file so that the former
are recognized by the latter.
• Exception: Only if the "Permit forward declarations" compiler option (Page 62) is activated.
The sequence is arbitrary: The following applies to the specification of a prototype
for forward declaration (Page 375) in the interface section (Page 252) or the implementation
section (Page 254):
– Essential for declaring instances with function blocks and classes
– Optional when calling functions and programs
Syntax
FUNCTION name : function_data_type
// Declaration section
// Statement section
END_FUNCTION
name stands for the identifier of the function, while function_data_type stands for the data type
of the return value.
Permissible keywords for the variable declaration in the declaration section (Page 266): See
Section "Variable declaration" (Page 269).
Note the following for functions with function_data_type <> VOID: In the body (Page 267), an
expression of data type function_data_type must be assigned to the function identifier.
Sequence
FCs can only be defined in the implementation section (Page 254).
• If the "Permit forward declarations" compiler option (Page 62) is not activated, the following
applies:
In the source file, functions must precede the POU from which they are called.
• If the "Permit forward declarations" compiler option (Page 62) is activated, the following
applies:
The sequence is arbitrary: There is an option to specify a prototype for the forward
declaration (Page 375) in the interface section (Page 252) or the implementation section
(Page 254).
The declaration section (Page 266) must precede the statement section (Page 267).
Frequency
Any number of times per ST source file
Mandatory section
No
Syntax
FUNCTION_BLOCK name
// Declaration section
// Methods (Only with compiler option (Page 62) "Permit object-oriented programming")
// Statement section
END_FUNCTION_BLOCK
name stands for the identifier of the function block.
Permissible keywords for the declaration of variables in the declaration section: See Section
"Variable declaration" (Page 269).
Special features
Before you call a function block (FB), you must declare an instance: You declare a variable and
enter the identifier of the function block as the data type. You can declare the instance locally
(within VAR / END_VAR in the declaration sections of a program or a function block).
You can also declare the instance globally (within VAR_GLOBAL/END_VAR in the interface or
implementation section).
• If the "Permit forward declarations" compiler option (Page 62) is not activated, the following
applies:
This is only possible with FBs which make used program sources and libraries available, but
not with FBs which are defined in the same ST source file.
• If the "Permit forward declarations" compiler option (Page 62) is activated, the following
applies:
You can declare global instances of FBs which are defined in the same ST source file.
– For instance declaration without specification of initialization:
The instance may be declared before the FB is fully defined. In this case, it is essential that
a prototype for the forward declaration (Page 375) is specified in the interface section
(Page 252) or the implementation section (Page 254).
– For instance declaration with specification of initialization:
The instance must always be declared after the FB is fully defined.
You cannot declare an instance of an FB in functions or methods.
Sequence
FBs can only be defined in the implementation section (Page 254).
• If the "Permit forward declarations" compiler option (Page 62) is not activated, the following
applies:
In the source file, an FB must precede the POU in which it is used, e.g. in which an instance
of the FB is declared as local variable.
• If the "Permit forward declarations" compiler option (Page 62) is enabled, the following
applies:
– Without specification of initialization:
The POU which uses the FB may precede the definition of the FB. In this case, it is essential
that a prototype for the forward declaration (Page 375) is specified in the interface section
(Page 252) or the implementation section (Page 254).
– With specification of initialization (only with compiler option (Page 62) "Permit object-
oriented programming"):
The FB must be fully defined before the POU in which it is used.
The declaration section (Page 266) must precede the statement section (Page 267).
Frequency
Any number of times per ST source file
Mandatory section
No
7.1.1.6 Programs
Programs are classified as program organization units (POUs). They are called on the target
system according to their task assignment (see Configuring the execution system in
the SIMOTION Basic Functions Function Manual) and can call functions (FC) and function blocks
(FB), as well as methods in classes and function blocks.
Programs have the following syntax:
Syntax
PROGRAM name
// Declaration section
// Statement section
END_PROGRAM
name stands for the name of the program.
Permissible keywords for the variable declaration in the declaration section: See Section
"Variable declaration" (Page 269).
Sequence
Programs can only be defined in the implementation section (Page 254).
• If the "Permit forward declarations" compiler option (Page 62) is not activated, the following
applies:
Programs are expediently placed after FCs, FBs, expressions and classes. The program then
recognizes these source file sections and can make use of them.
• If the "Permit forward declarations" compiler option (Page 62) is enabled, the following
applies:
The sequence is arbitrary: When a program is called within a program, there is an option to
specify a prototype for the forward declaration (Page 375) in the interface section
(Page 252) or the implementation section (Page 254).
The declaration section (Page 266) must precede the statement section (Page 267).
Frequency
Any number of times per ST source file
Mandatory section
No
7.1.1.7 Expressions
Expressions are a special case of a function declaration with the specified data type BOOL of the
return value. The expression within the EXPRESSION <expression identifier> ...
END_EXPRESSION reserved words assigned to the function name is evaluated.
You can use the WAITFORCONDITION (Page 170) construct to wait directly for a programmable
event or condition in a MotionTask. The statement suspends the task that called it until the
condition (expression) is true.
Expressions have the following syntax:
Syntax
EXPRESSION name
// Declaration section
// Statement section
END_EXPRESSION
name stands for the identifier of the expression.
Permissible keywords for the variable declaration in the declaration section: See Section
"Variable declaration" (Page 269).
Please note: In the body (Page 267), an expression of data type BOOL must be assigned to the
expression identifier.
Sequence
An expression can only be declared in the implementation section (Page 254) of an ST source file.
• If the "Permit forward declarations" compiler option (Page 62) is not activated, the following
applies:
Expressions must precede the program organization unit in which they are called from a
WAITFORCONDITION control structure.
• If the "Permit forward declarations" compiler option (Page 62) is activated, the following
applies:
The sequence is arbitrary: There is no option to specify a prototype for the forward
declaration (Page 375) in the interface section (Page 252) or the implementation section
(Page 254).
The declaration section (Page 266) must precede the statement section (Page 267).
Frequency
Any number of times per ST source file
Mandatory section
No
Syntax (simplified)
CLASS name
// Declaration section
// methods
END_CLASS
name stands for the identifier of the class.
Permissible keywords for the variable declaration in the declaration section: See Section
"Variable declaration" (Page 269).
For a complete syntax diagram see Figure 6-10 Syntax: Class (Page 225).
Special features
Before using public methods or variables of a class you must declare an instance of the class: You
declare a variable and enter the identifier of the class as the data type. You can declare the
instance locally (within VAR / END_VAR in the declaration sections of a program, a function block
or a class).
You can also declare the instance globally (within VAR_GLOBAL/END_VAR in the interface or
implementation section).
• If the "Permit forward declarations" compiler option (Page 62) is not activated, the following
applies:
This is only possible with classes which make used program sources and libraries available,
but not with classes which are defined in the same ST source file.
• If the "Permit forward declarations" compiler option (Page 62) is activated, the following
applies:
You can declare global instances of classes which are defined in the same ST source file.
– For instance declaration without specification of initialization:
The instance may be declared before the class is fully defined. In this case, it is essential
that a prototype for the forward declaration (Page 375) is specified in the interface section
(Page 252) or the implementation section (Page 254).
– For instance declaration with specification of initialization:
The instance must always be declared after the class is fully defined.
You cannot declare an instance of a class in functions or methods.
Sequence
Classes can only be defined in the implementation section (Page 254).
• If the "Permit forward declarations" compiler option (Page 62) is not activated, the following
applies:
In the source file, a class must precede the POU in which it is used, e.g. in which an instance
of the class is declared as a local variable.
• If the "Permit forward declarations" compiler option (Page 62) is enabled, the following
applies:
– Without specification of initialization:
The POU which uses the class may precede the definition of the class. In this case, it is
essential that a prototype for the forward declaration (Page 225) is specified in
the interface section (Page 252) or the implementation section (Page 254).
– With specification of initialization:
The class must be fully defined before the POU in which it is used.
The declaration section (Page 266) must precede the methods (Page 264).
Frequency
Any number of times per ST source file
Mandatory section
No
7.1.1.9 Methods
Methods belong to the program organization units (POE). They are callable and parameterizable
source file sections with temporary data within classes (Page 262) or function blocks (Page 258).
All internal variables lose their values when the method is exited and are reinitialized the next
time the method is called.
Methods can only be defined when compiler option (Page 62) “Permit object-oriented
programming" is enabled.
Methods have the following syntax:
Syntax
METHOD access-spec name : method_data_type
// Variable declaration
// Statement section
END_METHOD
access-spec stands for the optional access identifier (Page 211):
• In classes: PUBLIC, PROTECTED, PRIVATE. Default setting: PROTECTED.
• In function blocks: PUBLIC, PRIVATE. PRIVATE is default setting.
name stands for the identifier of the method, while method_data_type stands for the data type
of the return value.
Permissible keywords for the variable declaration in the declaration section (Page 266): See
Section "Variable declaration" (Page 269).
Note the methods with method_data_type <> VOID: In the statement section (Page 267), an
expression of data type method_data_type must be assigned to the method identifier!
For a complete syntax diagram see Figure 6-3 Syntax: Method (Page 213).
Special feature
The compiler option (Page 62) “Permit object-oriented programming" needs to be enabled.
Sequence
Methods can only be defined within classes (Page 262) and function blocks (Page 258).
• If the "Permit forward declarations" compiler option (Page 62) is not activated, the following
applies:
In the source file, methods must precede the POU from which they are called.
• If the "Permit forward declarations" compiler option (Page 62) is activated.
The sequence is arbitrary:
The declaration section (Page 266) must precede the statement section (Page 267).
Frequency
Any number of times per class or function block.
Mandatory section
No
Note
While object-oriented interfaces start and end with the same keywords as the interface section
(Page 252) of a unit (INTERFACE / END_INTERFACE), they have different meanings and are used
in different ways.
Object-oriented interfaces can only be defined and used with a SIMOTION Kernel as of version
V4.5. The compiler option (Page 62) "Permit object-oriented programming" also needs to be
activated.
Object-oriented interfaces have the following syntax:
Syntax (simplified)
INTERFACE name
// Method prototype
METHOD method_name : method_data_type
// Variable declaration (parameters only)
END_METHOD
// Other method prototypes
END_INTERFACE
name stands for the identifier of the object-oriented interface.
For complete syntax diagrams see Figure 6-11 Syntax: Object-oriented interface (Page 235) and
Figure 6-12 Syntax: Method prototype (Page 236).
Special features
In classes (Page 262) that implement object-oriented interfaces, all methods (Page 264)that are
defined as prototypes in the interfaces must be formulated. These methods must always be
declared public (access identifier PUBLIC). The call interface (input, output and in/out
parameters) specified in the interface must be transferred unchanged.
Variables of object-oriented interfaces can also be declared. Instances of classes that implement
the same object-oriented interface can be assigned to these variables.
Sequence
You can define object-oriented interfaces in the interface section (Page 252) and
the implementation section (Page 254). In most cases, they are declared in the interface section
because they are generally declared PUBLIC.
They must always be declared in full before they are used in the declaration of an interface
variable or an implementing class. This applies irrespective of the compiler option (Page 62)
"Permit forward declarations".
Frequency
Any number of times per ST source file
Mandatory section
No
Structure
// Data type definition
// Variable declaration
Sequence
The declaration section has no explicit keywords at the start or end. It begins after the keyword
of the respective program organization unit (POU) and ends with the first executable statement
of the statement section.
Frequency
Once per POU
Mandatory section
No
Configuration
// Statements
Sequence
The statement section has no explicit keywords at the start or end. It begins after the declaration
section and ends with the keyword of the respective POU.
Frequency
Once per POU
Mandatory section
No
Syntax
TYPE
name : data_type_specification;
// ...
END_TYPE
name represents the name of the individual data type that you use for the Variable declarations.
data_type_specification stands for any data type or a structure. Any number of individual data
types can appear between TYPE and END_TYPE.
Sequence
You can define UDTs as follows:
• In the Interface section:
The UDTs are recognized within the ST source file and will be exported
They can be used in the interface and implementation section for declaration of unit
variables and in all POUs for declaration of local variables.
In addition, they can be used in all units which import this ST source file (in SIMOTION ST with
the USES statement).
• In the Implementation section:
The UDTs are recognized within the ST source file
They can be used in the implementation section for declaration of unit variables and in all
POUs for declaration of local variables.
• In the declaration section of a POU (FC, FB, program, expression, class):
The UDTs are only recognized locally within the POU
They can only be used within the POU for declaration of local variables.
UDTs must be defined before they are used in a variable declaration.
Frequency
The TYPE / END_TYPE declaration block may appear more than once in a source file section; any
number of UDTs are possible within a declaration block.
Mandatory section
No
Syntax
variable_type
name_list : data_type;
// ...
END_VAR
variable_type represents the keyword of the variable type being declared. The permitted
keywords depend on the source file section.
• In the Interface section or Implementation section of an ST source file:
VAR_GLOBAL: Non-retentive unit variable
VAR_GLOBAL CONSTANT: Unit constant
VAR_GLOBAL RETAIN: Retentive unit variable
• In the Declaration section of a function:
VAR: Local variable
VAR CONSTANT: Local constant
VAR_INPUT: Input parameter
VAR_OUTPUT: Output parameters
VAR_IN_OUT: In/out parameter
Sequence
The variable is declared:
• In the Interface section of the ST source file:
Permissible keywords: See above at Syntax.
The unit variables are recognized within the ST source file and will be exported.
They can be used in all POUs of the ST source file.
In addition, they can be used in all units which import this ST source file (in SIMOTION ST with
the USES statement).
• In the Implementation section of the ST source file:
Permissible keywords: See above at Syntax.
The unit variables are recognized within the ST source file.
They can be used in all POUs of the ST source file.
• In the declaration section of a class:
Permissible keywords: See above under Syntax.
The variables are only recognized locally within the class.
• In the declaration section of a POU (FC, FB, program, expression):
Permissible keywords according to the type of POU: See above at Syntax.
The variables are only recognized locally within the POU.
Exceptions:
– You can also access the output parameters of a function block outside the FB.
– You can access the input parameters of a function block from outside the FB when
the compiler option (Page 62) "Permit language extensions" has been activated.
• In the declaration section of a method:
Permissible keywords: See above under Syntax.
The variables are only recognized locally within the method.
• In the method prototypes within an object-oriented interface (Page 265):
Permissible keywords: See above under Syntax.
The parameters define the call interface of the method.
Variables must be declared before they are used.
Frequency
The number of times the variable_type / END_VAR declaration block of a specific variable type
can appear depends on the associated source file section:
• In the interface and implementation section of the ST source:
The declaration blocks may appear more than once.
• In the declaration section of a POU (FC, FB, program, expression, class, method):
Each declaration block (other than VAR CONSTANT / END_VAR) may appear just once in the
declaration section.
• In the method prototypes within an object-oriented interface:
Each declaration block may only occur once in each method prototype.
Permitted declaration blocks and keywords depending on the associated source file section: See
above at Syntax.
Any number of variable declarations are possible within a declaration block.
Mandatory section
No
ST has a unit concept which can be used to access global variables, data types, functions (FC),
function blocks (FB) and programs from other source files. Thus, for example, you can compile
reusable subroutines and make them available.
UNIT name;
name corresponds to the name of the ST source file defined in SIMOTION SCOUT, see Add ST
source (Page 25) or Change the properties of an ST source file (Page 27).
The unit statement is ignored if the name specified there differs from the name of the ST source
file.
Note
The following further specifications are possible in the interface section, they are listed before
the data types, variables and POUs to be declared public:
1. Specification of utilized technology packages (USEPACKAGE …).
2. Specification of utilized libraries (USELIB …).
3. Reference to other units in order to use their public components (USES ...).
These imported technology packages, libraries and units are also declared public. For
inheritance, see "USES statement in a using unit (Page 275)".
You must adhere to the order presented for the specifications in the interface section of a unit
(ST source file), see "Interface section (Page 252)". Otherwise, error-free compilation of the ST
source file will not be possible.
Programs which are to be assigned to a task in the execution system must be listed in the
interface section (see Configuring the execution system in the SIMOTION Basic Functions
Function Manual). The compiler outputs a warning message if programs are not declared public
in the interface section of an ST source file.
Functions, function blocks, and programs that are only used in the ST source file should not be
listed in the interface section.
INTERFACE
// ... USES statement also possible here
TYPE // Declaration of data types to be declared public
color : (RED, GREEN, BLUE);
END_TYPE
VAR_GLOBAL
cycle : INT := 1; // Declaration of unit variables to be declared public
// unit variables to be exported
END_VAR
FUNCTION myFC; // DECLARE PUBLIC statement of an FC
FUNCTION_BLOCK myFB; // DECLARE PUBLIC statement of an FB
CLASS myClass; // DECLARE PUBLIC statement of a class
// (as of version V4.5 of the SIMOTION Kernel)
// and activated compiler option
// "Permit object-oriented programming")
PROGRAM myProgram_A; // Export statement of a program
// (to interface with the execution system)
END_INTERFACE
IMPLEMENTATION
Function myFC : LREAL // Function written out
; // ... (Statements)
END_FUNCTION
USES unit_name-list
This enables you to access the following elements that are declared public in the interface
section of the units used (e.g. ST source file, MCC unit):
• User-defined data types (UDT)
• Unit variables and unit constants
• Programs, functions, function blocks and classes
• Used technology packages, libraries and units
You can use the used elements as if they existed in the current unit.
Note
The keyword USES can only occur once in the interface section or in the implementation section
of a unit. When multiple units are to be used, enter them as a list separated by commas after the
keyword USES.
The USES statement can appear in either the interface section or the implementation section of
a unit. This has far-reaching implications:
Table 7-2 Implications regarding placement of USES statement in interface section or in implementation section of the ST
source file
• Implementation section
Note
You will find tips for use of unit variables in the SIMOTION Basic Functions Function Manual.
IMPLEMENTATION
USES myUnit_A; // Specification of used unit
VAR_GLOBAL
myInstance : myFB; // Declaration of an instance
// of the public FB of the used unit
mycolor : color; // Declaration of a variable
// of the public data type of the used unit
END_VAR
PROGRAM myProgram_B
mycolor := GREEN; // Value assignment to variables
// of the public data type of the used unit
cycle := cycle + 1; // Value assignment to
// public variables of the used unit
END_PROGRAM
END_IMPLEMENTATION
The following table shows all the variable types available for programming with ST.
• System variables of the SIMOTION device and the technology objects
• Global user variables (I/O variables, device-global variables, unit variables)
• Local user variables (variables within a program, a function, a method, a function block or a
class)
System variables
Note
Please note that downloading the ST source file to the target system and running tasks affect
variable initialization and thus the contents of the variables, see Time of the variable
initialization (Page 294).
You can define unit variables with different behavior, e.g. in case of power failure:
• Non-retentive unit variables (keyword VAR_GLOBAL): its value is lost in the event of a power
failure.
• Retentive unit variables (keyword VAR_GLOBAL RETAIN): its value remains in the event of a
power failure.
• Unit constants (keyword VAR_GLOBAL CONSTANT): its value is retained unchanged
(see Constants (Page 140)).
You will find tips for the efficient use of unit variables in the SIMOTION Basic Functions Function
Manual.
8QLWYDULDEOHVJOREDOYDULDEOHEORFN XQIRUPDWWHG
9DULDEOHGHFODUDWLRQ
6\PEROLF3,DFFHVV
9$5B*/2%$/ (1'B9$5
,QVWDQFHGHFODUDWLRQRI)%
,QVWDQFHGHFODUDWLRQRIDFODVV !
! 2QO\DVRIYHUVLRQ9RIWKH6,027,21.HUQHO
This declaration block may appear more than once within an interface or implementation
section. You specify the variable name and data type for the variable declaration (see Overview
of all variable declarations (Page 134) and Initialization of variables or data types (Page 136)).
For the scope of the declaration and the HMI export, see Unit variables (Page 279).
Note
For initialization of the non-retentive unit variables:
• See Initialization of non-retentive global variables (Page 296).
• The behavior during downloading can be set (Options > Settings menu
command, Download tab, Initialize non-retentive program data and global device
variables checkbox)
• The type of version ID and therefore the initialization behavior on downloading depends on
the SIMOTION Kernel version. For details, see Version ID of global variables and their
initialization during download (Page 303).
IMPLEMENTATION
VAR_GLOBAL // These variables are not declared public.
rotation2 : INT;
field2 : ARRAY [1..10] OF REAL;
flag2 : BOOL;
motor2 : motor; // Instance declaration
END_VAR
END_IMPLEMENTATION
5HWHQWLYHXQLWYDULDEOHVUHWHQWLYHJOREDOYDULDEOHEORFN XQIRUPDWWHG
9DULDEOHGHFODUDWLRQ
,QVWDQFHGHFODUDWLRQRIDFODVV !
! 2QO\DVRIYHUVLRQ9RIWKH6,027,21.HUQHO
This declaration block may appear more than once within an interface or implementation
section. You specify the variable name and data type for the variable declaration (see Overview
of all variable declarations (Page 134) and Initialization of variables or data types (Page 136)).
For the scope of the declaration and the HMI export, see Unit variables (Page 279).
Note
• For initialization of the retentive unit variables:
– See Initialization of retentive global variables (Page 294).
– The behavior during downloading can be set (Options > Settings menu
command, Download tab, Initialize retentive program data and global device
variables checkbox)
– The type of version ID and therefore the initialization behavior on downloading depends
on the SIMOTION Kernel version. For details, see Version ID of global variables and their
initialization during download (Page 303).
• The amount of memory available for retentive variables depends on the device (see quantity
framework in the SIMOTION SCOUT Configuration Manual).
To make efficient use of limited memory space, use the memory in a single ST source file and
sort the variables in descending order!
• Check the capacity utilization of the retentive memory in SIMOTION SCOUT.
In online mode, call the device diagnostics of the SIMOTION device to be checked (see
online help). In the System utilization tab under Retentive data, you can see how much
memory is available.
Note
Local variables cannot be accessed outside the source file section in which they were declared.
The following table provides an overview of the declaration of retentive, static and temporary
variables. It shows the source file sections in which these variables can be declared and the
keywords that can be used to declare them.
Table 7-6 Keywords for declaring retentive, static and temporary variables depending on source file section
Note
Please note that downloading the ST source file to the target system and running tasks affect
variable initialization and thus the contents of the variables, see Time of the variable
initialization (Page 294).
6WDWLFYDULDEOHEORFN XQIRUPDWWHG
!!
&ODVVDFFHVVLGHQWLILHU ! 29(55,'(
9$5
)%DFFHVVLGHQWLILHU !
9DULDEOHGHFODUDWLRQ
6\PEROLF3,DFFHVV
(1'B9$5
,QVWDQFHGHFODUDWLRQRI)%
,QVWDQFHGHFODUDWLRQRIDFODVV !
You can do the following in the static variable block, according to the syntax in the figure:
• Declare variables (name and data type), optionally with initialization.
• Declare symbolic accesses to the process image of the BackgroundTask.
• Declare instances of the function blocks.
• Declaring instances of classes (SIMOTION Kernel as of version V4.5)
For initialization of the static variables:
• In programs: Depending on the execution behavior to which the program is assigned
(see SIMOTION Basic Functions Function Manual).
See also Initialization of static program variables (Page 299).
• In function blocks: Depending on the initialization of the declared instance.
See also Initialization of instances of function blocks (FBs) (Page 301).
7HPSRUDU\YDULDEOHEORFNLQ)%DQGSURJUDP XQIRUPDWWHG
In functions, methods and expressions, you declare temporary variables in the FC temporary
variable block (see following figure):
7HPSRUDU\YDULDEOHEORFN)&PHWKRG XQIRUPDWWHG
9$5
9DULDEOHGHFODUDWLRQ (1'B9$5
9$5B7(03
5HWHQWLYHORFDOYDULDEOHVUHWHQWLYHORFDOYDULDEOHEORFN XQIRUPDWWHG
!!
!!
35,9$7( 29(55,'(
9$55(7$,1
!
3527(&7('
9DULDEOHGHFODUDWLRQ
,QVWDQFHGHFODUDWLRQRI)% (1'B9$5
,QVWDQFHGHFODUDWLRQRIDFODVV
2QO\DVRIYHUVLRQ9RIWKH6,027,21.HUQHO
! 2QO\ZLWKLQFODVVHVDQG
ZLWKFRPSLOHURSWLRQಯ3HUPLWREMHFWRULHQWHGSURJUDPPLQJರ
! 2QO\ZLWKLQIXQFWLRQEORFNV )% DQG
ZLWKFRPSLOHURSWLRQಯ3HUPLWREMHFWRULHQWHGSURJUDPPLQJರ
You can do the following in the retentive local variable block, according to the syntax in the
figure:
• Declare variables (name and data type), optionally with initialization.
Exception. No variables of data types can be declared in the retentive local variable block if
they exclusively contain elements that cannot be saved (e.g. variables of data types of the
technology objects).
• Declare instances of the function blocks.
Exception: No instances of function blocks can be declared in the retentive local variable
block if they contain the following:
– Retentive local variables
– Instances of system function blocks
• Declaring instances of classes (SIMOTION Kernel as of version V4.5)
Exception: No instances of classes can be declared in the retentive local variable block if they
contain the following:
– Retentive local variables
– Instances of system function blocks
For initialization of retentive local variables:
• In programs: dependent on the compiler option "Only create program instance data once”.
See also Initialization of retentive local variables of programs (Page 300).
• In function blocks or classes: dependent on the initialization of the retentive variables of the
declared instance.
See also Initialization of retentive local variables of function blocks and classes (Page 302).
Note
If you have declared unit variables or local variables of the same name (e.g. var-name), specify
the global device variable with _device.var-name.
An alternative to global device variables is the declaration of unit variables in a separate unit,
which is imported into other units. This has the following advantages:
1. Variable structures can be used.
2. The initialization of the variables during the STOP-RUN transition is possible (via Program in
StartupTask).
3. For newly created global unit variables, a download in RUN is also possible.
Please refer to the SIMOTION Basic Functions Function Manual.
The different variable types are stored in different memory areas, which are initialized at
different times. The table shows:
• The available memory areas for variable types that are declared in ST source files (possibly
dependent on the version of the SIMOTION Kernel).
• The initialization time for each memory area.
An explanation using an example is contained in the Example for memory areas (Page 291)
section.
Table 7-8 Memory areas assigned to different variable types and their initialization
IMPLEMENTATION
// The implementation section contains the executable code sections
// in different program organization units (POU)
// A POU can be a program, FC, or FB.
// Unit variables of the implementation section can only be used
// within the source file.
VAR_GLOBAL // Non-retentive unit variables are located
// in the unit user memory
u1_glob : INT;
END_VAR
VAR_GLOBAL CONSTANT // Unit constants are located
// in the unit user memory
END_VAR
VAR_GLOBAL RETAIN // Retentive unit variables are located
// in the retentive (power-fail-safe) memory
END_VAR
//----------------------------------------------------------------------
PROGRAM p1
VAR // By default, variables are located in the
// in the user memory of the task
p_var : INT;
p_varFB : FB1;
END_VAR
• Even if a function is called more than once in a task, it only uses the stack's resources once.
• Variables of type BOOL require 1 byte on the stack.
You can obtain information about the memory requirements of a POU in the local data stack
using the Program Structure (Page 359) function.
Note
You can upload values of unit variables or global device variables from the SIMOTION device into
SIMOTION SCOUT and save them in XML format.
1. Save the required data segments of the unit variables or global device variables as a data set
with the function _saveUnitDataSet.
2. Use the Save variables function in SIMOTION SCOUT.
You can use the Restore variables function to download these data sets and variables back to
the SIMOTION device.
For more information, refer to the SIMOTION SCOUT Configuration Manual.
This makes it possible, for example, to obtain this data, even if it is initialized by a project
download or if it becomes unusable (e.g. due to a version change of SIMOTION SCOUT).
Table 7-13 Initialization of retentive global variables during upgrade or configuration change
You can, however, make a setting whereby the non-retentive global variables are initialized
during the STOP-RUN transition:
• As of Version V4.2 of the SIMOTION Kernel, by activating the (Page 375) Initialization of
non-retentive global variables and program data during STOP-RUN transition checkbox
on the SIMOTION device.
With non-retentive unit variables, this setting can be overwritten by a pragma or pragma line
in the relevant data blocks of the program sources.
• As of Version V4.1 of the SIMOTION Kernel, by a pragma or pragma line in the relevant data
blocks of the program sources (only with non-retentive unit variables):
– With the SIMOTION ST programming language:
Specify the following attribute within a pragma in the relevant VAR_GLOBAL/END_VAR
declaration block: { BlockInit_OnDeviceRun := ALWAYS; }
– With the SIMOTION MCC or SIMOTION LAD/FBD programming languages:
Paste a pragma line with the following setting into the declaration table: "Initialization
during STOP-RUN transition = Always". All the variables declared with VAR_GLOBAL up to
the next pragma line or the end of the table form a data block which is initialized during
the STOP-RUN transition.
Note
With SIMOTION devices up to SIMOTION Kernel Version V4.0, non-retentive global variables are
never initialized during the STOP-RUN transition.
Note
You can obtain information about the memory requirements of a POU in the local data stack
using the Program Structure (Page 359) function.
The initialization behavior is determined by the memory area in which the static variables are
stored. This is determined by the "Only create program instance data once" (Page 62) compiler
option.
• For the deactivated "Only create program instance data once" compiler option (default):
The static variables are stored in the user memory of each task which is assigned to the
program.
The initialization of the variables thus depends on the execution behavior of the task to which
the program is assigned (see SIMOTION Basic Functions Function Manual):
– Sequential tasks (MotionTasks, UserInterruptTasks, SystemInterruptTasks, StartupTask,
ShutdownTask): The static variables are initialized every time the task is started.
– Cyclic tasks (BackgroundTask, SynchronousTasks, TimerInterruptTasks): The static
variables are only initialized only during the transition from STOP to RUN operating state.
• For the activated "Only create program instance data once" compiler option:
This setting is necessary, for example, if a program is to be called within a program.
The static variables of all programs from the program source (unit) involved are only stored
once in the user memory of the unit.
They are thus initialized together with the non-retentive unit variables, see Initialization of
non-retentive global variables (Page 296).
They are not initialized by default during the transition from STOP to RUN operating state.
You can, however, make a setting whereby they are initialized during the STOP-RUN
transition:
– As of version V4.2 of the SIMOTION Kernel, by activating the (Page 375) Initialization
of non-retentive global variables and program data during STOP-RUN transition
checkbox on the SIMOTION device.
This setting can be overwritten by a pragma or pragma line in the data block of the
relevant program organization unit (POU).
– As of version V4.1 of the SIMOTION Kernel, by a pragma or pragma line in the data block
of the relevant program organization unit (POU):
With the SIMOTION ST programming language:
Specify the following attribute within a pragma in the VAR/END_VAR declaration block:
{ BlockInit_OnDeviceRun := ALWAYS; }
With the SIMOTION MCC or SIMOTION LAD/FBD programming languages:
The declaration table starts with a pragma line containing the following setting:
"Initialization during STOP-RUN transition = Always". All the variables declared with VAR
in the table are initialized during the STOP-RUN transition.
Note
You can obtain information about the memory requirements of a POU in the local data stack
using the Program Structure (Page 359) function.
7.2.4.7 Initialization of retentive local variables of function blocks (FBs) and classes
The initialization of retentive variables of a function block (FB) or a class (as of version V4.5 of
the SIMOTION Kernel) is determined by the location at which the instance of a function block
(Page 195) or the instance of a class (Page 222) is declared:
• Global declaration (within VAR_GLOBAL/END_VAR in the interface of implementation
section):
The retentive variables are initialized:
– When retentive unit variables are initialized (Page 294).
– In addition to the download:
The data structure of the VAR RETAIN declaration blocks of the instances involved
changes.
The sequence of the VAR_GLOBAL declaration blocks in the current source changes.
• Local declaration in a program (within VAR / END_VAR):
Initialization as for retentive local variables of programs, see Initialization of retentive local
variables of programs (Page 300).
• Local declaration in a function block (within VAR / END_VAR):
Initialization as with the retentive variables of an instance of this function block.
• Declaration as in/out parameter in a function block or a function (within
VAR_IN_OUT / END_VAR):
For the initialization of the POU, only the reference (pointer) will be initialized with the
instance of the function block remaining unchanged.
Note
You can obtain information about the memory requirements of a POU in the local data stack
using the Program Structure (Page 359) function.
Table 7-17 Version code of global variables and their initialization during download
Procedure
To define variables "on-the-fly" in the Variable Declaration dialog box, proceed as follows:
1. Place the cursor at the place of use of the new variable.
2. Optionally, enter the name of the new variable.
3. Select the Variable declaration context menu.
The Variable Declaration dialog box appears.
If necessary, the Name field is preassigned with the name of the new variable.
4. Make the other entries in the dialog box according to the following table.
5. Set the desired filter criteria according to the following table and select the desired code
position.
6. Confirm with OK.
Principle
Field Description
Name Enter the name of the variable to be declared. The name must comply with the Rules for
identifiers (Page 95).
The field is preassigned with the word in which the cursor is positioned when the win‐
dow is called.
Absolute identifier You define the variable as access to the fixed process image of the BackgroundTask
(Page 326) by entering an absolute identifier.
The field is only active when a data type is selected that is contained in the general data
types (Page 113) ANY_BIT or ANY_INT.
Enter the absolute identifier according to the syntax (Page 333).
Field Description
Variable type Select the variable type.
Available for selection are all permitted keywords for variable types (Page 134).
Default is VAR when the cursor is within a POU when the window is called, otherwise
VAR_GLOBAL.
Data type Enter the data type. You are supported by the "Automatic completion" (Page 48) func‐
tion (CTRL+space).
Array length Not available when an absolute identifier is entered or the variable is a reference.
You can define the variable as an array [0..N-1] by entering an array length N. You have
the following options for entering the array length:
• You can specify a constant positive integer value.
• You can enter a value range with ".." separating the min. and max. values.
• You can enter a constant expression of data type DINT (or of a data type which is
implicitly convertible to DINT).
If the array is empty, a single variable is created rather than an array.
Initial value Not available when an absolute identifier is entered.
You can specify this initialization value as a constant or as an expression. The following
are permissible:
• Constants
• Arithmetic operations
• Bit slice and data conversion functions
Comment A comment can be entered in this column. All characters and special characters are
permitted.
Exportable (for GLOBAL variables) Only available when the keyword for a unit variable or unit constant has been selected
as variable type (e.g. VAR_GLOBAL).
If the checkbox is activated:
• The variable declaration is inserted in the interface section of the ST source file.
If the checkbox is deactivated:
• The variable declaration is inserted in the implementation section of the ST source
file.
Variable is a reference Only available when a valid data type has been entered.
With activated checkbox, a general reference (Page 244) is created for the entered data
type. The keyword REF_TO is set as prefix for the specified data type.
The checkbox is activated automatically when the entered data type starts with the
keyword REF_TO.
Possible code positions
Field Description
Filter criteria You can select the following as filter criteria:
• An access identifier within classes, function blocks or namespaces
– PUBLIC
– INTERNAL
– PROTECTED
– PRIVATE
– General (default, not an access identifier)
• The keyword OVERRIDE.
List of the code positions A list of the possible code positions is displayed at which the variable can be declared. A
distinction is made between:
• Insertion in an existing variable block
• Creation of a new variable block
The first entry in the list is selected. In the editor window, the code position is displayed
and selected at which the variable or the new variable block will be inserted.
Select from the
Result
The variable or the new variable block is inserted at the selected code position in the ST source
file.
The cursor is at the same position before the dialog box was called.
Exported variables
The following variables are exported to HMI devices where they are available:
• System variables of the SIMOTION device
• System variables of technology objects
• I/O variables
• Global device variables
• Retentive and non-retentive unit variables of the interface section (default setting).
Change this default as follows:
– In the SIMOTION ST programming language:
For each declaration block with the following pragma: { HMI_Export := FALSE; }.
See also Controlling compiler with attributes (Page 368).
– In the SIMOTION MCC and SIMOTION LAD/FBD programming languages:
For the variable declarations following a pragma line, if you deactivate the VAR_GLOBAL
for HMI devices or VAR_GLOBAL RETAIN for HMI devices parameters in this pragma line.
The unit variables of a data block identified in this way are not exported to HMI devices. The
HMI consistency check is also omitted for them during the download.
• Non-retentive static variables (VAR) of programs provided that the compiler option (Page 62)
"Only create program instance data once" is activated
• Non-retentive static variables (VAR) of function blocks
This is the default setting when the compiler option (Page 62) "Permit object-oriented
programming" is enabled. Change this default as follows:
– In the SIMOTION ST programming language:
For each declaration block with the following pragma: { HMI_Export := FALSE; }.
See also Controlling compiler with attributes (Page 368).
The variables of a data block identified in this way are not exported to HMI devices. The HMI
consistency check is also omitted for them during the download.
The pragma is not evaluated if the compiler option "Permit object-oriented programming"
is not activated. The export behavior cannot be changed.
• Non-retentive public variables (VAR PUBLIC) of classes (default setting, as of version V4.5 of
the SIMOTION Kernel)
Change this default as follows:
– In the SIMOTION ST programming language:
For each declaration block with the following pragma: { HMI_Export := FALSE; }.
See also Controlling compiler with attributes (Page 368).
The variables of a data block identified in this way are not exported to HMI devices. The HMI
consistency check is also omitted for them during the download.
Note
The total size of the unit variables that can be exported to HMI devices is limited to 64 KB per unit.
The effect of the { HMI_Export := FALSE; } / { HMI_Export := TRUE; } pragma (or
the VAR_GLOBAL for HMI devices or VAR_GLOBAL RETAIN for HMI devices settings in a pragma
line) depends on the SIMOTION Kernel version:
• As of Version V4.1 of the SIMOTION Kernel:
The pragma affects the export of the corresponding declaration block to HMI devices and the
structure of the HMI address space:
– Only those variables in declaration blocks exported to HMI devices occupy the HMI
address space.
– Within the HMI address space, the variables are arranged according to order of their
declaration.
• Up to Version V4.0 of the SIMOTION Kernel:
The pragma affects only the export of the corresponding declaration block to HMI devices.
The HMI address space is also occupied by unit variables of the interface section whose
declaration blocks are not assigned to HMI devices.
Within the HMI address space, the variables are sorted in the following order:
– Retentive unit variables of the interface section (exported and not exported).
– Retentive unit variables of the implementation section (only exported).
– Non-retentive unit variables of the interface section (exported and not exported).
– Non-retentive unit variables of the implementation section (only exported).
Within these segments, the variables are arranged according to order of their declaration.
Non-exported variables
The following variables are not exported to HMI devices and are not available there:
• Retentive and non-retentive unit variables of the implementation section (default setting)
Change this default as follows:
– In the SIMOTION ST programming language:
For each declaration block with the following pragma: { HMI_Export := TRUE; }
See also Controlling compiler with attributes (Page 368).
– In the SIMOTION MCC and SIMOTION LAD/FBD programming languages:
For the variable declarations following a pragma line, if you activate the VAR_GLOBAL for
HMI devices or VAR_GLOBAL RETAIN for HMI devices parameters in this pragma line.
The unit variables of a data block identified in this way are exported to HMI devices.
Consequently, they undergo the HMI consistency check during downloading.
• Local variables (VAR, VAR_TEMP) of functions or methods
• Temporary variables (VAR_TEMP) of programs, function blocks or classes
• Retentive local variables (VAR RETAIN) of programs (as of version 4.5 of the SIMOTION Kernel)
• Retentive local variables (VAR RETAIN) of function blocks (as of version 4.5 of the SIMOTION
Kernel)
This is the default setting when the compiler option (Page 62) "Permit object-oriented
programming" is enabled. Change this default as follows:
– In the SIMOTION ST programming language:
For each declaration block with the following pragma: { HMI_Export := TRUE; }.
See also Controlling compiler with attributes (Page 368).
The variables of a data block identified in this way are exported to HMI devices. Consequently,
they undergo the HMI consistency check during downloading.
The pragma is not evaluated if the compiler option "Permit object-oriented programming"
is not activated. The export behavior cannot be changed.
• Retentive local variables (VAR RETAIN) of classes (default setting, as of version 4.5 of the
SIMOTION Kernel)
Change this default as follows:
– In the SIMOTION ST programming language:
For each declaration block with the following pragma: { HMI_Export := TRUE; }.
See also Controlling compiler with attributes (Page 368).
The variables of a data block identified in this way are exported to HMI devices. Consequently,
they undergo the HMI consistency check during downloading.
• Non-retentive static variables (VAR) of programs provided that the compiler option (Page 62)
"Only create program instance data once" is not activated
• Non-retentive protected or private variables (VAR, VAR PROTECTED, VAR PRIVATE) of classes
(default setting, as of version V4.5 of the SIMOTION Kernel)
Change this default as follows:
– In the SIMOTION ST programming language:
For each declaration block with the following pragma: { HMI_Export := TRUE; }.
See also Controlling compiler with attributes (Page 368).
The variables of a data block identified in this way are exported to HMI devices. Consequently,
they undergo the HMI consistency check during downloading.
Table 7-19 Example for the control of the HMI export with the corresponding pragma
INTERFACE
VAR_GLOBAL
// HMI export
x1 : DINT;
END_VAR
VAR_GLOBAL
{ HMI_Export := FALSE; }
// No HMI export
x2 : DINT;
END_VAR
// ...
END_INTERFACE
IMPLEMENTATION
VAR_GLOBAL
// No HMI export
y1 : DINT;
END_VAR
VAR_GLOBAL
{ HMI_Export := TRUE; }
// HMI export
y2 : DINT;
END_VAR
// ...
END_IMPLEMENTATION
Note
An access via the process image is more efficient than direct access.
Table 7-20 Important properties of direct access and process image access
Direct access Access to process image of cy‐ Access to fixed process image
clic tasks of the BackgroundTask
Permissible address Entire address range of the SIMOTION device Addresses 0 .. 63.
range Exception: I/O variables comprising more than one byte must not Exception:
contain addresses 63 and 64 contiguously (example: PIW63 or Up to version V4.1 of the SIMO‐
PQD62 are not permitted). TION Kernel or the "Separate
process image" setting, ad‐
dresses used for the process im‐
age of the cyclic tasks are not
permitted.
Address configuration Necessary. The addresses used must be present in the I/O and ap‐ Not necessary. Addresses that
propriately configured. are not present in the I/O or
The "Rules for I/O addresses for direct access and the process image have not been configured can
of the cyclic tasks" (Page 320) must be observed. also be used.
Assigned task None. Cyclic task for selection: BackgroundTask.
• SynchronousTasks,
• TimerInterruptTasks,
• BackgroundTask.
Memory area for proc‐ - Depends on the SIMOTON Kernel version:
ess images • Up to version V4.1:
Separate memory areas in all cases
• As of version V4.2:
Option to select a common memory area
Direct access Access to process image of cy‐ Access to fixed process image
clic tasks of the BackgroundTask
Update • Onboard I/O of SIMOTION Update occurs with the assigned An update is made with
devices C230-2, C240, and task: the BackgroundTask:
C240 PN: • Inputs are read before the as‐ • Inputs are read before
Update occurs in a cycle signed task is started and the BackgroundTask is star‐
clock of 125 µs. transferred to the process in‐ ted and is transferred to the
• With I/O devices put image. process input image.
– via PROFIBUS DP or PRO‐ • Process output image is writ‐ • Process output image is
FINET on an isochronous ten to the outputs after the written to the outputs
SIMOTION device1 assigned task has been com‐ when the BackgroundTask
pleted. is complete.
– via DRIVE-CLiQ
– Onboard I/O of SIMO‐
TION D devices:
The update is performed in
the position control cycle
clock2.
• With I/O devices
– via PROFIBUS DP or PRO‐
FINET on a non-isochro‐
nous SIMOTION device1
– via P‑Bus:
The update is performed in
the interpolation cycle2 3.
Inputs are read at the start of the
cycle clock.
Outputs are written at the end of
the cycle clock.
Consistency – During the entire cycle of the as‐ During the entire cycle of
signed task. the BackgroundTask.
Exception: Direct access to out‐ Exception: Direct access to out‐
put occurs. put occurs.
Consistency is only ensured for elementary data types.
When using arrays, the user is responsible for ensuring data con‐
sistency.
Use Preferred in MotionTasks Preferred in the assigned task Preferred in the Background‐
Task
Declaration as variable Necessary, for the entire device as an I/O variable in the symbol Possible, but not necessary:
browser. • For the entire device as I/O
Each byte of the address range may only be assigned to a single I/O variable in the symbol
variable. browser
Syntax of I/O address: e.g. PIW1022, PQ63.3. • As unit variable
• As local static variable in a
program
Download of new or Only possible in STOP mode. -
changed I/O variables
Use the absolute ad‐ Not supported. Possible, with the following
dress syntax: E.g. %IW62, %Q63.3.
Direct access Access to process image of cy‐ Access to fixed process image
clic tasks of the BackgroundTask
Byte order when form‐ - As supplied by the I/O Depends on the SIMOTION Ker‐
ing the process image nel version and the memory
area setting for the process im‐
ages:
• Up to version V4.1 or the
"Separate process image"
setting:
Always Big Endian
• As of version V4.2 and the
"Common process image"
setting:
As supplied by the I/O
Byte order during ac‐ Depends on I/O Always Big Endian
cess
Writeability of inputs No Depends on the SIMOTION Ker‐ Yes
nel version:
• Up to version V4.1:
No
• As of version V4.2:
Yes
Write protection for Possible; Read only status can Not supported. Not supported.
outputs be selected.
Declaration of arrays Possible. Not supported.
Further information Direct access and process image of the cyclic tasks (Page 317). Access to the fixed process im‐
age of the BackgroundTask
(Page 326).
Responses in the event Error during access from user Error during generation of proc‐ Error during generation of proc‐
of an error program, alternative reactions ess image, alternative reactions ess image, reaction: CPU stop5
available: available: Exception: If a direct access
• CPU Stop4 • CPU stop5 has been created at the same
address, the behavior set there
• Substitute value • Substitute value
applies.
• Last value • Last value
See SIMOTION Basic Functions See SIMOTION Basic Functions Description of Functions.
Description of Functions.
Access
• In the RUN operat‐ Without any restrictions. Without any restrictions. Without any restrictions.
ing state
• During the Startup‐ Possible with restrictions: Possible with restrictions: Possible with restrictions:
Task • Inputs can be read. • Inputs are read at the start of • Inputs are read at the start
• Outputs are not written until the StartupTask. of the StartupTask.
StartupTask is complete. • Outputs are not written until • Outputs are not written un‐
StartupTask is complete. til StartupTask is complete.
Direct access Access to process image of cy‐ Access to fixed process image
clic tasks of the BackgroundTask
• During the Shut‐ Without any restrictions. Possible with restrictions: Possible with restrictions:
downTask • Inputs retain status of last • Inputs retain status of last
update update
• Outputs are no longer writ‐ • Outputs are no longer writ‐
ten. ten.
1
A SIMOTION device is considered isochronous if at least one PROFIBUS DP or PROFINET interface is operated isochronously
(constant bus cycle time). For SIMOTION D there is an exception with the DP Integrated interface to which the SINAMICS
Integrated is connected.
2
The following SIMOTION devices are updated in the Servo_fast cycle or IPO_fast cycle, if the cycles are configured: D445‑2 DP/
PN, D455‑2 DP/PN (as of version V4.2) and D435‑2 DP/PN (as of version V4.3).
3 IPO or IPO_2 adjustable, see “Setting system cycle clocks" section in the Basic Functions Function Manual.
4
Call the ExecutionFaultTask.
5
Call the PeripheralFaultTask.
Property
Direct access to inputs and outputs and access to the process image of the cyclic task always take
place via I/O variables. The entire address range of the SIMOTION device (Page 319) can be used.
A comparison of the most important properties, including in comparison to the fixed process
image of the BackgroundTask (Page 326) is contained in "Important properties of direct access
and process image" (Page 314).
Note
Observe the rules for I/O addresses for direct access and the process image of the cyclical tasks
(Page 320).
It is particularly important that every address used in an I/O variable is available in the I/O and
configured; each byte in the address range may be assigned to no more than one I/O variable
(does not apply to access with data type BOOL).
A detailed status of I/O variables (Page 324) can be read as of version V4.2 of the
SIMOTION Kernel, for example, in order to check the availability of the I/O variables.
Direct access
Direct access is used to access the corresponding I/O address directly. Direct access is used
primarily for sequential programming (in MotionTasks). The access to the current value of the
inputs and outputs at a specific time is particularly important.
For direct access, you define an I/O variable (Page 321) without assigning it a task.
Note
An access via the process image is more efficient than direct access.
Note
If (and only if) you are also using the fixed process image of the BackgroundTask, it is important
to consider the effects of the "Common process image" or "Separate process image" settings on
the fixed process image of the BackgroundTask (Page 326).
Table 7-21 Effect of "Common process image" or "Separate process image" settings on the process image of the cyclic tasks
Table 7-22 Address range of the SIMOTION devices according to the version of the SIMOTION Kernel
7.3.3.2 Rules for I/O addresses for direct access and the process image of the cyclical tasks
Note
You must observe the following rules for the I/O variable addresses for direct access and the
process image of the cyclic task (Page 317). Compliance with the rules is checked during the
consistency check of the SIMOTION project (e.g. during the download).
1. Addresses used for I/O variables must be present in the I/O and configured appropriately in
the HW Config.
2. I/O variables comprising more than one byte must not contain addresses 63 and 64
contiguously.
The following I/O addresses are not permitted:
– Inputs: PIW63, PID61, PID62, PID63
– Outputs: PQW63, PQD61, PQD62, PQD63
3. All addresses of an I/O variable comprising more than one byte (e.g. WORD, ARRAY data type)
must be within a continuous address range configured in HW Config, e.g. within the address
range (slot or subslot) of one I/O module.
4. An I/O address (input or output) can only be used by a single I/O variable of data type BYTE,
WORD or DWORD or an array of these data types. Access to individual bits with I/O variables
of data type BOOL is possible.
5. If several processes (e.g. I/O variable, technology object, PROFIdrive telegram) access an I/O
address, the following applies:
– Only a single process can have write access to an I/O address of an output (BYTE, WORD
or DWORD data type).
Read access to an output with an I/O variable that is used by another process for write
access, is possible.
– All processes must use the same data type (BYTE, WORD, DWORD or ARRAY of these data
types) to access this I/O address. Access to individual bits is possible irrespective of this.
Please be aware of the following, for example, if you wish to use an I/O variable to read the
PROFIdrive telegram transferred to or from the drive: The length of the I/O variable must
match the length of the telegram.
– Write access to different bits of an address is possible from several processes; however,
write access with the data types BYTE, WORD or DWORD is then not possible.
Note
These rules do not apply to accesses to the fixed process image of the BackgroundTask
(Page 326). These accesses are not taken into account during the consistency check of the
project (e.g. during download).
7.3.3.3 Creating I/O variables for direct access or process image of cyclic tasks
Create I/O variables for direct access or a process image of the cyclic tasks in the address list of
the detail view.
This is only possible in offline mode.
Here is a brief overview of the procedure:
1. Select the "Address list" tab in the detail view and choose the SIMOTION device
or
In the project navigator of SIMOTION SCOUT, double-click the "ADDRESS LIST" element in the
SIMOTION device subtree.
2. Select the line before which you want to insert the I/O variable and, from the context menu,
select Insert new line
or
Scroll to the end of the table of variables (empty line).
3. In the empty row of the table, enter or select the following:
– Names of the I/O variables
– I/O address
Select the "IN" or "OUT" entries if you wish to assign symbols to the I/O variable (input or
output). As of Version V4.2 of the SIMOTION Kernel the symbolic assignment must be
activated, menu Project > Use symbolic assignment.
Or enter a fixed address according to "Syntax for entering I/O addresses" (Page 323).
– Optional for outputs:
Activate the Read only checkbox if you only want to have read access to the output.
You can then read an output that is already being written by another process (e.g. output
of an output cam, PROFIdrive telegram).
A read-only output variable cannot be assigned to the process image of a cyclic task.
– Data type of the variables in accordance with "Possible data types of the I/O variables"
(Page 324).
4. Optionally, you can also enter or select the following (not for data type BOOL):
– Array length (array size).
– Process image or direct access:
Can only be assigned if the Read only checkbox is deactivated.
For process image, select the cyclic task to which you want to assign the I/O variable. To
select a task, it must have been activated in the execution system.
For direct access, select the blank entry.
– Strategy for behavior in the event of an error, see SIMOTION Basic Functions Function
Manual.
– Display format (if array, for each element), when you monitor the variable in the address
list
– Substitute value (if array, for each element).
5. Only if you have selected "IN" or "OUT" as the I/O address (symbolic assignment).
– In the Assignment column, click the […] button.
A window opens displaying the possible assignment targets of the SIMOTION device and,
if necessary, of SINAMICS Integrated. Only those assignment targets are displayed that
match the data direction (input/output) and data type.
– Select the assignment target.
The Assignment status column indicates whether the assignment was successful or not.
For details regarding symbolic assignment, refer to the SIMOTION Basic Functions Function
Manual.
You can now access this variable using the address list or any program of the SIMOTION device.
Details on how to manage the address list can be found in the online help.
Note
Note the following for the process image for cyclic tasks:
• A variable can only be assigned to one task.
• Each byte of an input or output can only be assigned to one I/O variable.
In the case of data type BOOL, please note:
• The process image for cyclic tasks and a strategy for errors cannot be defined. The behavior
defined via an I/O variable for the entire byte is applicable (default: direct access or CPU stop).
• The individual bits of an I/O variable can also be accessed using the bit access functions.
Take care when making changes within the I/O variables (e.g. inserting and deleting I/O
variables, changing names and addresses):
• In some cases the internal addressing of other I/O variables may change, making all I/O
variables inconsistent.
• If this happens, all program sources that contain accesses to I/O variables must be
recompiled.
Note
I/O variables can only be created in offline mode. You create the I/O variables in SIMOTION SCOUT
and then use them in your program sources (e.g. ST sources, MCC sources, LAD/FBD sources).
Outputs can be read and written to, but inputs can only be read.
Before you can monitor and modify new or updated I/O variables, you must download the
project to the target system.
You can use I/O variables like any other variable, see "Access I/O variables" (Page 337).
Syntax
For the input of the I/O address for the definition of an I/O variable for direct access or process
image of cyclical tasks (Page 317), use the following syntax. This specifies not only the address,
but also the data type of the access and the mode of access (input/output).
Table 7-23 Syntax for the input of the I/O addresses for direct access or process image of the cyclic tasks
Examples
Input at logic address 1022, WORD data type: PIW1022.
Output at logical address 63, bit 3, BOOL data type: PQ63.3.
Note
Observe the rules for I/O addresses for direct access and the process image of the cyclical tasks
(Page 320).
Table 7-24 Possible data types of the I/O variables for direct access and the process image of the cyclical
tasks
Data type of I/O address Possible data types for I/O variables
BOOL (PIn.x, PQn.x) BOOL
BYTE (PIBn, PQBn) BYTE, SINT, USINT
WORD (PIWn, PQWn) WORD, INT, UINT
DWORD (PIDn, PQDn) DWORD, DINT, UDINT
For details of the data type of the I/O address, see also "Syntax for entering I/O addresses"
(Page 323).
The fixed process image of the BackgroundTask is a memory area in the RAM of the SIMOTION
device on which a subset of the I/O address space of the SIMOTION device is mirrored. Preferably,
it should be used for programming the BackgroundTask (cyclic programming) as it is consistent
throughout the entire cycle.
The size of the fixed process image of the BackgroundTask for all SIMOTION devices is 64 bytes
(address range 0 .. 63).
Note
The fixed process image of the BackgroundTask can be used to access addresses that are not
available in the I/O or not configured in HW Config. These are treated like normal memory
addresses.
Memory area
• As of Version V4.2 of the SIMOTION Kernel, selecting a "Common process image" setting
on the device (Page 375) ensures the memory area for the fixed process image of the
BackgroundTask is a subset of the memory area for the process image of the cyclic tasks.
I/O addresses can be read and written to using both the fixed process image of the
BackgroundTask and the process image of the cyclic tasks.
• With Version V4.1 and lower of the SIMOTION Kernel or the "Separate process image"
setting on the device (as of Version V4.2 of the SIMOTION Kernel), the fixed process image of
the BackgroundTask and the process image of the cyclic tasks occupy different memory areas.
I/O addresses accessed using the process image of the cyclic tasks cannot be read or written
to using the fixed process image of the BackgroundTask. They are treated like normal memory
addresses.
Table 7-26 Effect of "Common process image" or "Separate process image" settings on the fixed process image of the
BackgroundTask
For information on the order of the Little Endian and Big Endian bytes, please refer to the SIMOTION Basic Functions Function
Manual.
A comparison of the most important properties in comparison to the direct access and process
image of the cyclic tasks (Page 317) is contained in "Important properties of direct access and
process image" (Page 314).
Note
The rules for I/O addresses for direct access and the process image of the cyclical tasks
(Page 320) do not apply. Access to the fixed process image of the BackgroundTask is not taken
into account during the consistency check of the project (e.g. during download).
Addresses not present in the I/O or not configured in HW Config are treated like normal memory
addresses.
You can access the fixed process image of the BackgroundTask by means of:
• Using an absolute PI access (Page 332): The absolute PI access identifier contains the address
of the input/output and the data type.
• Using a symbolic PI access (Page 334): You declare a variable that references the relevant
absolute PI access:
– A unit variable
– A static local variable in a program.
• Using an I/O variable (Page 336): In the symbol browser, you define a valid I/O variable for the
entire device that references the corresponding absolute PI access.
4. Access to the fixed process image of the BackgroundTask always takes place using the
Big Endian byte order.
5. These last two properties (nos. 3 and 4) affect access to inputs and outputs operating with
the Little Endian byte order (e.g. onboard I/O of C240, C240 PN SIMOTION devices).
If the fixed process image of the BackgroundTask is used for access, this leads to the following
behavior, regardless of whether I/O variables have been created for the relevant addresses for
the purpose of direct access or the process image of the cyclic tasks:
– Access to individual bytes always supplies the same result via an I/O variable or the fixed
process image of the BackgroundTask.
– With the fixed process image of the BackgroundTask, bytes only change places if data type
WORD is used for access.
Please also refer to the example below.
For information on the order of the Little Endian and Big Endian bytes, please refer to the
SIMOTION Basic Functions Function Manual.
Example for common process image: Access to I/O operating with the Little Endian byte order
The digital inputs of the C240 SIMOTION device operate with the Little Endian byte order and
occupy addresses 66 (bits 0 ..7) and 67 (bits 0.. 3) by default. The start address is changed to 60
in HW Config to ensure it is in the range occupied by the fixed process image of the
BackgroundTask. Addresses 60 and 61 are now accessed using various I/O variables and the
process image of the BackgroundTask.
The following three scenarios are considered, which differ in terms of whether and which I/O
variables are created for direct access or the process image of the cyclic tasks:
1. Scenario A:
No I/O variables are created for addresses 60 and 61.
2. Scenario B:
Two I/O variables with data type BYTE are created for addresses 60 and 61: io_byte_60
(PIB60) and io_byte_61 (PIB61).
3. Scenario C:
For adresss 60, one I/O‑Variable with data type WORD is created; this also covers address 61:
io_word_60 (PIW60).
Two additional I/O variables are also created in each of the three scenarios, making it possible to
access bit 3: io_bit_60_3 (PI60.3) and io_bit_61_3 (PI61.3).
The table below lists which values are generated with the following access types:
• Direct access or access to the process image of the cyclic tasks:
– Access to individual bytes or the word using the relevant I/O variables
– Access to each individual byte using the _getInOutByte function (direct access only)
– Access to the respective bit 3 using the relevant I/O variables
• Access to the fixed process image of the BackgroundTask:
– Access to individual bytes using an absolute name
– Access to the word using an absolute name
– Access to the respective bit 3 using an absolute name
Table 7-27 "Common process image" setting (as of Kernel V4.2): Different types of access to the process
images of an input operating with the Little Endian byte order
Example for separate process image: Access to I/O operating with the Little Endian byte order
The digital inputs of the C240 SIMOTION device operate with the Little Endian byte order and
occupy addresses 66 (bits 0 ..7) and 67 (bits 0.. 3) by default. The start address is changed to 60
in HW Config to ensure it is in the range occupied by the fixed process image of the
BackgroundTask. Addresses 60 and 61 are now accessed using various I/O variables and the
process image of the BackgroundTask.
The following three scenarios are considered, which differ in terms of whether and which I/O
variables are created for direct access:
1. Scenario A:
No I/O variables are created for addresses 60 and 61.
2. Scenario B:
Two I/O variables with data type BYTE are created for addresses 60 and 61: io_byte_60
(PIB60) and io_byte_61 (PIB61).
3. Scenario C:
For adresss 60, one I/O‑Variable with data type WORD is created; this also covers address 61:
io_word_60 (PIW60).
Two additional I/O variables are also created in each of the three scenarios, making it possible to
access bit 3: io_bit_60_3 (PI60.3) and io_bit_61_3 (PI61.3).
The table below lists which values are generated with the following access types:
• Direct access:
– Access to individual bytes or the word using the relevant I/O variables
– Access to each individual byte using the _getInOutByte (Page 317) function
– Access to the respective bit 3 using the relevant I/O variables
• Access to the fixed process image of the BackgroundTask:
– Access to individual bytes using an absolute name
– Access to the word using an absolute name
– Access to the respective bit 3 using an absolute name
Table 7-28 "Separate process image" setting or Kernel up to Version V4.1: Different types of access to
the process images of an input operating with the Little Endian byte order
7.3.4.3 Absolute access to the fixed process image of the BackgroundTask (absolute PI
access)
You make absolute access to the fixed process image of the BackgroundTask (Page 326) by
directly using the identifier for the address (with implicit data type). The syntax of the identifier
(Page 333) is described in the following section.
You can use the identifier for the absolute PI access in the same manner as a normal variable
(Page 333).
Note
Outputs can be read and written to, but inputs can only be read.
7.3.4.4 Syntax for the identifier for an absolute process image access
For the absolute access to the fixed process image of the BackgroundTask (Page 332), use the
following syntax. This specifies not only the address, but also the data type of the access and the
mode of access (input/output).
You also use these identifiers:
• For the declaration of a symbolic access to the fixed process image of the BackgroundTask
(Page 334).
• For the creation of an I/O variables for accessing the fixed process image of the
BackgroundTask (Page 336).
Table 7-29 Syntax for the identifier for an absolute process image access
Examples
Input at logic address 62, WORD data type: %IW62.
Note
Up to Version V4.1 of the SIMOTION Kernel or the "Separate process image" (Page 330) setting
on the device (as of Version V4.2 of the SIMOTION Kernel), the following applies:
• Addresses accessed using the process image of the cyclic tasks cannot be read or written to
using the fixed process image of the BackgroundTask.
This restriction no longer applies as of Version V4.2 of the SIMOTION Kernel or with
the "Common process image" (Page 328) setting on the device.
Note
The rules for I/O addresses for direct access and the process image of the cyclical tasks
(Page 320) do not apply. Access to the fixed process image of the BackgroundTask is not taken
into account during the consistency check of the project (e.g. during download).
Addresses not present in the I/O or not configured in HW Config are treated like normal memory
addresses.
Several examples for the assignment of variables of the same type follow:
7.3.4.5 Symbolic access to the fixed process image of the BackgroundTask (symbolic PI
access)
You can access the fixed process image of the BackgroundTask (Page 326) symbolically without
needing to always specify the absolute process image access.
You can declare symbolic access:
• As a static variable of a program (within the VAR/END_VAR structure in the declaration
section)
• As a unit variable (within the VAR_GLOBAL / END_VAR structure in the interface or
implementation section of the ST source file)
The syntax for declaring a symbolic name for the PI access is shown in the figure:
6\PEROLF3,DFFHVV XQIRUPDWWHG
,QWHJHUV
GDWDW\SH
DEVROXWH
,GHQWLILHU $7
3,DFFHVV
%LWGDWDW\SH
:LGWKRIWKHGHFODUHGGDWDW\SH
PXVWFRUUHVSRQGZLWKWKHZLGWKRIWKHDEVROXWH
LGHQWLILHU
For the absolute PI access, see "Syntax for the identifier for an absolute PI access (Page 333)".
The range of the declared integer or bit data type must correspond to the range of the absolute
PI access, see "Possible data types of the symbolic PI access (Page 335)". After declaring a
numerical data type, you can address the contents of the process image as an integer.
See also Example for the declaration (Page 336).
For the data type of the absolute PI access, see also "Syntax for the identifier for an absolute PI
access (Page 333)".
VAR
myInput AT %IB10 : BYTE;
END_VAR
If you want to use the integer value of the memory area, declare the myInput variable as follows:
VAR
myInput AT %IB10 : SINT;
END_VAR
If you want to use a CPU memory area other than %IB10 in your program at a later time, you only
need to change the absolute PI access in the variable declaration.
7.3.4.8 Creating an I/O variable for access to the fixed process image of the BackgroundTask
You create I/O variables for access to the fixed process image for the background task in the
symbol browser in the detail view; you must be in offline mode to do this.
Here is a brief overview of the procedure:
1. Select the "Address list" tab in the detail view and choose the SIMOTION device
or
In the project navigator of SIMOTION SCOUT, double-click the "ADDRESS LIST" element in the
SIMOTION device subtree.
2. Select the line before which you want to insert the I/O variable and, from the context menu,
select Insert new line
or
Scroll to the end of the table of variables (empty line).
3. In the detail view, select the Symbol browser tab and scroll down to the end of the variable
table (empty row).
4. In the empty row of the table, enter or select the following:
– Name of variable.
– Under I/O address, the absolute PI access according to the "Syntax for the identifier for an
absolute PI access" (Page 333)
(exception: The syntax %IXn.x or %QXn.x is not permitted for data type BOOL).
– Data type of the I/O variables according to the "Possible data types of the symbolic PI
access" (Page 335).
5. Select optionally the display format used to monitor the variable in the symbol browser.
You can now access this variable using the address list or any program of the SIMOTION device.
Note
I/O variables can only be created in offline mode. You create the I/O variables in SIMOTION SCOUT
and use them in your program sources.
Note that you can read and write outputs but you can only read inputs.
Before you can monitor and modify new or updated I/O variables, you must download the
project to the target system.
You can use I/O variables like any other variable, see "Access I/O variables" (Page 337).
Note
Consistency is only ensured for elementary data types.
When using arrays, the user is responsible for ensuring data consistency.
Note
If you have declared unit variables or local variables of the same name (e.g. var-name), specify
the I/O variable using _device.var-name (predefined name space, see the "Predefined name
spaces" table in "Name spaces").
It is possible to directly access an I/O variable that you created as a process image of a cyclic task.
Specify direct access with _direct.var-name or _device._direct.var-name.
If you want to deviate from the default behavior when errors occur during variable access, you
can use the _getSafeValue and _setSafeValue functions (see SIMOTION Basic Functions Function
Manual).
For Errors associated with access to I/O variables, see SIMOTION Basic Functions Function
Manual.
Libraries can be written in all programming languages; they can be used in all program sources
(e.g. ST source files, MCC units).
You can obtain more details on inserting and managing libraries in the online help.
Note
The same rules as for the names of program source files apply to the library names, see Insert ST
source file (Page 25). In particular, the permissible length of the name depends on the
SIMOTION Kernel version:
• As of Version V4.1 of the SIMOTION Kernel: maximum 128 characters.
• Up to Version V4.0 of the SIMOTION Kernel: maximum 8 characters.
With versions of the SIMOTION Kernel up to V4.0, a violation of the permissible length of the
library name may not be detected until a consistency check or a download of the project is
performed!
There is also the option of having a library make programs available, which can be called from
other programs or function blocks. Please refer to the conditions which apply when calling a
"program in a program" (Page 203). In each case, the static data for the program called is stored
once in the user memory of the device on which the library program is called. The same program
instance data is used every time the program is called on the same device. A library program
cannot be assigned to the execution system.
Prohibited commands:
• _getTaskId function (see SIMOTION Basic Functions Function Manual).
• _getAlarmId function (see SIMOTION Basic Functions Function Manual).
• _checkEqualTask function (see SIMOTION Basic Functions Function Manual).
• If the library is not device-dependent (i.e. compiled without reference to a SIMOTION
device or SIMOTION Kernel version):
– System functions of SIMOTION devices (see the Parameter Manual for SIMOTION devi‐
ces)
– Version-dependent system functions
Prohibited variable accesses:
• Unit variables (retentive and non-retentive)
• Global device variables (retentive and non-retentive)
• I/O variables
• Instances of the technology objects and their system variables
• Variables of task names and configured messages (_task and _alarm namespaces,
see Namespaces (Page 347), Predefined namespaces table)
• If the library is not device-dependent (i.e. compiled without reference to a SIMOTION
device or SIMOTION Kernel version):
– System variables of SIMOTION devices (see the Parameter Manual for SIMOTION devi‐
ces)
– Configuration data of technology objects (see Parameter Manual of configuration data
for the relevant SIMOTION technology package)
Note
The Program status debug function is not available in libraries.
4. Select the SIMOTION devices (with SIMOTION kernel version) and the technology packet that
you want to use as a basis for compiling the library; see the SIMOTION Basic Functions
Function Manual.
5. Select Accept and compile from the context menu.
The library is compiled with reference to all selected SIMOTION devices, SIMOTION kernel
versions and technology packages (and independently of devices).
Note
If the library to be compiled imports another library, note the following:
1. For the imported library, at least the same devices and SIMOTION kernel versions must be
selected as for the importing library.
Alternatively, the imported library can be compiled independently of devices if the
prerequisites for this are fulfilled (refer to the SIMOTION Basic Functions Function Manual).
2. The imported library must already be compiled individually with reference to all configured
devices, kernel versions and technology packages.
Compilation of the library as part of a project-wide compilation is generally not sufficient.
Note
When performing project-wide compilation, note the following:
1. The system automatically identifies dependencies between libraries and selects the
appropriate compilation sequence.
2. A library is only compiled with reference to the SIMOTION devices (including versions of the
SIMOTION kernel) that are configured in the project and which use the library.
3. Other SIMOTION devices and kernel versions set for the library are ignored.
You can:
• Provide individual sources of a library with know-how protection:
Only the sources are protected against unauthorized access.
The setting of the SIMOTION devices including the versions of the SIMOTION Kernel and the
technology packages, for which the library is to be compiled, can still be changed and
adapted by the user. Please refer to the SIMOTION Basic Functions Function Manual.
The user can thus use the library for other SIMOTION devices and kernel versions.
• Provide the library with know-how protection:
The following is then protected against unauthorized access:
– All sources of the library
– The setting of the SIMOTION device including the versions of the SIMOTION Kernel and
the technology packages for which the library is to be compiled.
You thus prevent that the user can use the library for other SIMOTION devices and kernel
versions.
Only use this setting if this is intended.
The SIMOTION online help provides additional information on know-how protection.
Note
If you export in XML format, the libraries or sources are exported in an encrypted form. When
importing the encrypted XML files, the know-how protection, including login and password, is
retained.
7.4.3 Using data types, functions and function blocks from libraries
Before using data types, functions or function blocks from libraries, you must make them known
to the ST source file. To do so, use the following construct in the interface section of the ST source
file:
In this case, library-name is the name of the library as it appears in the project navigator.
When multiple libraries are to be specified, enter them as a list separated by commas, e.g.:
You can use the optional AS namespace add-on to define a namespace (Page 347).
• You can then access data types, functions, and function blocks in the library that have the
same name as such an ST source file of a SIMOTION device (in the PROGRAMS folder).
• You can also use namespaces to change the names of data types, functions and function
blocks in the library so that they have different names.
IMPLEMENTATION
FUNCTION Function1 : VOID
VAR
ComID : CommandIdType;
END_VAR
ComId := _getCommandId();
END_FUNCTION
PROGRAM Main_program
function1(); // Function from this source
NS_1.Var1:=1;
NS_2.Var1:=2;
NS_1.function1(); // Function from the Bib1 library
NS_2.function1(); // Function from the Bib2 library
END_PROGRAM
END_IMPLEMENTATION
General Information
It is possible to use unit variables and local variables (program variables, FB variables, FC
variables) with the same name. When compiling a program source, the compiler searches for
identifiers beginning with the current POU. The smaller validity range always takes priority over
the larger validity range.
You can therefore use the same identifiers in different source file sections, as long as the rules
below are adhered to. If a higher-level identifier is hidden by an identifier in a unit or POU, the
compiler issues a warning.
Note
Under certain circumstances, the compiler may not issue a warning if, for example, the
associated technology package is not imported.
Identifiers in a unit
Public identifiers of all units (unit variables, data types, and POUs) must be unique throughout
the device.
All the following identifiers must be unique within a unit:
• Unit variables (declared in the interface or implementation section)
• Data types (declared in the interface or implementation section)
• Program organization units (POUs)
They must not be identical to the following identifiers either:
• Reserved identifiers.
• Unit variables, data types and POU imported units.
• Standard system functions, standard system function blocks, and associated data types.
• System functions and system data types of the SIMOTION device.
• Program organization units (POUs) and data types from imported libraries
– This can be resolved by entering a user-defined namespace.
• System functions and system data types from imported technology packages.
– This can be resolved by entering a user-defined namespace.
The compiler issues a warning when the following identifiers are hidden:
• SIMOTION device variables (system variables, I/O variables, global device variables).
– This can be resolved by entering the predefined namespace _device.
• Technology objects configured on the SIMOTION device.
– This can be resolved by entering the predefined namespace _to.
Identifiers on the SIMOTION device (e.g. I/O variables, global device variables)
All the following identifiers on the SIMOTION device must be unique:
• I/O variables
• Global device variables
• System variables of the SIMOTION device
• System functions and system data types of the SIMOTION device.
They must not be identical to the following identifiers either:
• Reserved identifiers.
• Standard system functions, standard system function blocks, and associated data types.
Example
The following example illustrates this situation. It shows that for use of identical names for unit
variables (large validity range) and FC variables (small variable scope), only the variables
declared in the function are valid within this source file section. The unit variables are only valid
in POUs in which no local variables of the same name were declared. See the example.
VAR_GLOBAL
var_a, var_b : DINT; // Unit variables
END_VAR
7.5.2 Namespaces
You can also access data types, unit variables, functions, and function blocks defined outside of
a program source (e.g. in libraries, technology packages, and on the SIMOTION device) using
their names.
When compiling a program source, the compiler searches for identifiers beginning with the
current POU. The data types, variables, functions, or function blocks declared in a program
source therefore hide identifiers with the same name which have been defined outside the
source, see Use of the same identifiers (Page 342). In order to still access these hidden
identifiers, you can use namespaces in certain cases.
You can also use namespaces to make names consistent within different libraries.
If you wish to use a data type, a function or a function block from a library or a technology
package, place the namespace identifier in front of the name, separated by a period, for
example, namespace.fc-name, namespace.fb-name, namespace.type-name
Example
The following example shows how to select the Cam technology package, assign it the
namespace Cam1 and use the namespace:
IMPLEMENTATION
FUNCTION function1 : VOID
VAR_INPUT
p_Axis : posAxis;
END_VAR
VAR
retVal : DINT;
END_VAR
retVal:= Cam1._enableAxis (
axis := p_Axis,
nextCommand := Cam1.WHEN_COMMAND_DONE,
commandId := _getCommandId() );
END_FUNCTION
END_IMPLEMENTATION
Note
If a namespace is defined for an imported library or technology package, this must always be
specified if a function, function block, or data type from this library or technology package is
being used. See above example: Cam1._enableAxis, Cam1.WHEN_COMMAND_DONE.
Namespace Description
_alarm For AlarmId: The _alarm.name variable contains the AlarmId of the message with
the name identifier (see SIMOTION Basic Functions Function Manual).
_device For device-specific variables (global device variables, I/O variables, and system varia‐
bles of the SIMOTION device).
_direct For direct access to I/O variables – see Direct access and process image of the cyclic
tasks (Page 317).
Local namespace for _device. Nesting as in _device._direct.name is permitted.
_project For names of SIMOTION devices in the project; only used with technology objects on
other devices.
With unique project-wide names of technology objects, used also for these names and
their system variables.
_task For TaskID: The _task.name variable contains the TaskId of the task with the name
identifier (see SIMOTION Basic Functions Function Manual).
_quality As of version V4.2 of the SIMOTION Kernel: For the detailed status of I/O variables
(Page 324). A value with data type DWORD is supplied.
Local namespace for _device. Nesting as in _device._quality.name is permitted.
_to For technology objects configured on the SIMOTION device, and their system varia‐
bles and configuration data.
Not for system functions and data types of the technology objects. In this case, if
necessary, use the user-defined namespace for the imported technology package
,GHQWLILHUVRIWKHQDPHVSDFHV +LHUDUFK\
3URMHFW
8VHUGHILQHG 7HFKQRORJ\SDFNDJHV
6\VWHPIXQFWLRQVDQGV\VWHPGDWDW\SHVRIWKH72
8VHUGHILQHG /LEUDULHV
)XQFWLRQVIXQFWLRQEORFNVGDWDW\SHV
BSURMHFW 'HYLFH
BWR 7HFKQRORJ\REMHFWV
&RQILJXUDWLRQGDWDRIWKH72
6\VWHPYDULDEOHVRIWKH72
BWDVN 7DVNQDPHV
BDODUP 0HVVDJHV
BGHYLFH 6\VWHPYDULDEOHVRIWKHGHYLFH
*OREDOGHYLFHYDULDEOHV
,2YDULDEOHV
3URFHVVLPDJHRIWKHF\FOLFWDVNV
BGLUHFW 'LUHFWDFFHVV
BTXDOLW\ 6WDWXV
,(&DQGGHYLFHV\VWHPGDWDW\SHV
,(&DQGGHYLFHV\VWHPIXQFWLRQV
8QLWYDULDEOHVXQLWGDWDW\SHV
3URJUDPRUJDQL]DWLRQXQLWV
8QLWYDULDEOHVDQGGDWDW\SHV
BSURMHFW 'HYLFH
BWR 7HFKQRORJ\REMHFWV
6\VWHPYDULDEOHVRIWKH72
2EMHFWRULHQWHGQDPHVSDFH XQIRUPDWWHG
,17(51$/
1$0(63$&( ,GHQWLILHU
1DPHVSDFHLGHQWLILHU
1DPHVSDFHVWDWHPHQWV (1'B1$0(63$&(
328SURWRW\SHV
2EMHFWRULHQWHGQDPHVSDFHV
8VHUGHILQHGGDWDW\SHV 8'7
8QLWYDULDEOHVJOREDOYDULDEOHEORFNV
8QLWFRQVWDQWVJOREDOFRQVWDQWEORFNV
5HWHQWLYHXQLWYDULDEOHVUHWHQWLYHJOREDOYDULDEOHEORFNV
2EMHFWRULHQWHGLQWHUIDFHV!
&/$66FODVVGHVLJQDWLRQ!! &ODVVHV!!
)81&7,21IXQFWLRQGHVLJQDWLRQV! )XQFWLRQV!
)81&7,21B%/2&.IXQFWLRQEORFNGHVLJQDWLRQV! )XQFWLRQEORFNV!
352*5$0SURJUDPGHVLJQDWLRQV! ([SUHVVLRQV!
3URJUDPV!
2QO\ZKHQFRPSLOHURSWLRQ3HUPLWREMHFWRULHQWHGSURJUDPPLQJLVDFWLYDWHG
)RUDQDPHVSDFHVWDWHPHQWWKHRSWLRQDO,17(51$/DFFHVVLGHQWLILHUFDQEHVSHFLILHGDIWHUWKHDVVRFLDWHG
NH\ZRUG
! 2QO\DVRIYHUVLRQ9RIWKH6,027,21.HUQHO
! 2QO\LQWKHLQWHUIDFHVHFWLRQ
7KHVHVWDWHPHQWVDUHDOVRLQWHUSUHWHGDV328SURWRW\SHVZKHQWKH3HUPLWIRUZDUGGHFODUDWLRQV
FRPSLOHURSWLRQLVDFWLYDWHG
! 2QO\LQWKHLPSOHPHQWDWLRQVHFWLRQ
Specify an identifier for the name of the namespace after the NAMESPACE and the optional
INTERNAL keywords.
As for structured variables, access can be made from outside an object-oriented namespace to
its elements by prefixing the namespace identifier separated with a period to the element
identifier: namespace.element.
The INTERNAL access identifier can be specified for every element defined within a namespace
(default is public). The INTERNAL access identifier immediately follows the associated keyword,
e.g. VAR_GLOBAL, VAR_GLOBAL CONSTANT, TYPE, CLASS, INTERFACE, FUNCTION_BLOCK,
FUNCTION, PROGRAM or NAMESPACE. Methods, type and variable declarations, as well as
constants, can also be declared within INTERNAL classes and function blocks; see sections
"Access identifier within classes (Page 211)" and "Access identifiers within object-oriented FBs
(Page 181)". Access can be made to elements identified with INTERNAL only within the higher-
level namespace.
Name conflicts for elements defined within a namespace are not permitted.
The definition of a namespace does not need to be closed. If a previously defined namespace
with the same name is found, the content of the declaration is included there. This also applies
when the namespace is specified with a USES statement.
Predefined namespaces (Page 347) (e.g. _task, _alarm, _device, _project) cannot be extended.
Consequently, it is not permitted to use these identifiers for a namespace definition. Access per
USING with these namespaces is also not possible.
NAMESPACE ns1
CLASS INTERNAL cl_int
METHOD PUBLIC m_public
// Warning: Method is INTERNAL.
// (The complete class is INTERNAL)
;
END_METHOD
METHOD INTERNAL m_internal
;
END_METHOD
END_CLASS
VAR_GLOBAL
vg_clint : cl_int;
// Instance can be created, because within ns1.
END_VAR
END_NAMESPACE
FUNCTION_BLOCK fb_test
VAR
v_clint : ns1.cl_int;
// Instance cannot be created
// cl_int is INTERNAL in ns1.
END_VAR
ns1.vg_clint.m_public();
(* Access to method m_public not possible Although the instance vg_clint from ns1 is
visible, access is not possible to its elements *)
END_FUNCTION_BLOCK
NAMESPACE ns1
NAMESPACE INTERNAL ns_int
CLASS cl
METHOD PUBLIC m_public ; END_METHOD
METHOD INTERNAL m_internal ; END_METHOD
END_CLASS
END_NAMESPACE
VAR_GLOBAL
vg_cl : ns_int.cl;
// Instance can be created, because within ns1.
END_VAR
END_NAMESPACE
FUNCTION_BLOCK fb_test1
VAR
v_cl : ns1.ns_int.cl;
// Instance cannot be created
// ns_int is INTERNAL in ns1.
END_VAR
ns1.vg_cl.m_public();
// Access possible to method m_public
ns1.vg_cl.m_internal();
// Access not possible to method m_internal
END_FUNCTION_BLOCK
USING directive
The USING directive has the following syntax:
USING namespace-list;
The namespace list is a list of namespace identifiers each separated by a comma.
Example:
USING namespace_1, namespace_2;
The USING directive affects the scope of the source file section in which it is specified. In this
scope, the public elements of the namespaces specified in the USING directive can be used
without details of the namespace identifier. These elements are considered as if they were
declared themselves there.
This means name conflicts between the elements from different namespaces shown with
USING, and elements of the current scope are not permitted. Compiler error messages are
issued.
The USING directive always acts in the scope of the source file section in which it is specified. It
does not apply to external accesses in this source file section. Consequently, the USING directive
is always restricted to the current source. It has no effect in other sources that the current source
uses.
The namespace identifier specified on the USING directive (possibly cascaded) must reference a
namespace valid at this time. A USING directive does not implicitly declare namespaces.
USING directives can be specified at the following places, possibly several times successively:
• In the interface section of the source:
Immediately after statements for importing technology packages, libraries and other sources
(USEPACKAGE, USELIB, USES).
This allows, for example, declared elements in namespaces for libraries to be shown in the
global namespace.
• For the first declaration of a namespace within a source:
Immediately on the following namespace identifier itself.
• Within a program organization unit (POU), e.g. class, function block, object-oriented
interface, program, method:
Immediately before the declaration section of the POU.
Examples
INTERFACE
USELIB mylib; // Link with the mylib library
USING ns_mylib; // Show the elements of the namespace
// ns_mylib in the global namespace of the source
// ...
END_INTERFACE
NAMESPACE ns2
USING ns1;
USING ns1.ns11;
// ...
END_NAMESPACE
Table 7-39 Example: USING directive in the interface section of a program organization unit
CLASS cl
USING ns1;
USING ns1.ns11;
// ...
METHOD m : VOID
USING ns1.ns11.ns111;
;
END_METHOD
END_CLASS
Note
The USING directive cannot be used on namespaces included in the namespace path of the
current source file section.
NAMESPACE ns1.ns11.ns111
CLASS cltest
USING ns11; // Error: ns11 is part of its own declaration path
// ...
END_CLASS
END_NAMESPACE
Note
Namespace identifiers of other USING directives are not visible within a USING directive.
NAMESPACE ns1.ns11
// ...
END_NAMESPACE
NAMESPACE ns_test
USING ns1;
USING ns11; // Error:
// Namespace ns11 not visible for USING directive
USING ns1.ns11; // Specification must be made as such
END_NAMESPACE
The cross-reference list shows all identifiers in program sources (e.g. ST source files, MCC units):
• Declared as variables, data types, or program organization units (program, function,
function block)
• Used as previously defined types in declarations
• Used as variables in the statement section of a program organization unit.
Update of the cross-reference list when selecting a tree (CPU, project, library, program
folder)
The cross-reference list is generated automatically when opening the first time. There is no
automatic update when opened again.
Note
An error-free compilation is required for a correct, consistent display of the reference data. If
required, compile the project, the CPU, the program or the library first.
Table 7-42 Meanings of columns and selected entries in the cross-reference list
Note
Single-step tracking and trace diagnostic functions in MCC programming
Additional variables and functions are created or used for these diagnostics functions:
• The variables TSI#dwuser_1 and TSI#dwuser_2 of the TaskStartInfo are used for the single-
step tracking diagnostic function.
• Various internal functions and variables, whose identifier begins with an underscore, are
automatically created by the compiler for the trace diagnostic function. The
TSI#currentTaskId variable of the TaskStartInfo is also used.
With activated diagnostic function, these variables and functions are used for the control of the
diagnostics function. These variables and functions must not be used in the user program.
Note
A filter is automatically activated after the cross-reference list has been created.
The program structure contains all the function calls and their nesting within a selected element.
You can display the program structure selectively for:
• An individual program source (e.g. ST source file, MCC unit, LAD/FBD source file)
• All program sources of a SIMOTION device
• All program sources and libraries of the project
• Libraries (all libraries, single library, individual program source within a library)
Proceed as follows:
1. In the project navigator, select the element for which you want to display the program
structure.
2. Select the Edit > Display reference data > Program structure menu command.
The cross-reference tab is replaced by the program structure tab in the detail view.
Note
The display data is updated every time the program structure is opened.
You can update the detail view of an opened program structure with the F5 key.
Element Description
Base List separated by a comma
(declared POU or task • Identifier of the program organization unit (POU) or task
used)) The specification Name_1::Name_2 means: Method Name_2 within the
class or the function block Name_1.
• Identifier of the program source in which the POU or task was declared, with
add-on [UNIT]
• Minimum and maximum stack requirement (memory requirement of the
POU or task on the local data stack), in bytes [Min, Max]
• Minimum and maximum overall stack requirement (memory requirement of
the POU or task on the local data stack including all called POUs), in bytes
[Min, Max]
Referenced POU List separated by a comma:
• Identifier of called POU
The specification Name_1::Name_2 means: Method Name_2 within the
class or the function block Name_1.
• Optionally: Identifier of the program source / technology package in which
the POU was declared:
Add-on (UNIT): User-defined program source
Add-on (LIB): Library
Add-on (TP): System function from technology package
• with function blocks or methods only: Identifier of the instance of the func‐
tion block or the higher-level class
• with function blocks or methods only: Identifier of program source in which
the instance of the function block or of the higher-level class was declared:
Add-on (UNIT): User-defined program source
Add-on (LIB): Library
• Number of the line in the (compiled) source in which the POE is called; several
line numbers are separated by “/".
You can find information on or the memory requirement of various data areas of the program
sources under code attribute.
You can display the code attributes selectively for:
• An individual program source (e.g. ST source file, MCC unit, LAD/FBD source file)
• All program sources of a SIMOTION device
• All program sources and libraries of the project
• Libraries (all libraries, single library, individual program source within a library)
Proceed as follows:
1. In the project navigator, select the element for which you want to display the code attributes.
2. Select the Edit > Display reference data > Code attributes menu command.
The Cross-references tab is now replaced by the Code attributes tab in the detail view.
Note
The display data is updated every time the code attributes are opened.
You can update the detail view of the opened code attributes with the F5 key.
Note
In arrays and structures, only the variable can be selected, not a single element.
Pragmas are enclosed in { and } brackets and can contain (see figure):
• Preprocessor statements for controlling the preprocessor, see Controlling the preprocessor
(Page 363).
The pragmas with preprocessor statements contained in an ST source file are evaluated by
the preprocessor and interpreted as control statements.
• Attributes for compiler options to control the compiler, see Controlling compiler with
attributes (Page 368).
The pragmas with attributes for compiler options contained in an ST source file are evaluated
by the compiler and interpreted as control statements.
• Non-assigned compiler messages, see Issuing non-assigned compiler messages (Page 372).
Non-assigned compiler messages are issued in the “Compile/check output” tab in the detailed
view.
3UDJPD XQIRUPDWWHG
3UHSURFHVVRUVWDWHPHQW
^ $WWULEXWH `
1RQDVVLJQHGFRPSLOHUPHVVDJH
Note
Be sure to use the correct pragma syntax (e.g. upper- and lower-case notation of attributes).
Unrecognized pragmas are ignored with no warning message.
The preprocessor prepares an ST source file for compilation. For example, character strings can
be defined as replacement texts for identifiers, or sections of the source program can be hidden/
shown for compilation.
The preprocessor is disabled by default. You can activate it as follows:
• Globally for all program source files and programming languages within the project, see
"Global settings of the compiler (Page 62)".
• Local for a program source file, see "Local compiler settings (Page 65)".
During the compilation of a program source file, you will be informed about the preprocessor
actions. This requires, however, that the display of class 7 warnings is activated, see Meanings
of the warning classes (Page 72). You specify the details for issued warnings and information:
• In the global or local settings of the compiler.
• With the _U7_PoeBld_CompilerOption := warning:n:off or warning:n:on attribute within an
ST source file, see "Controlling compiler with attributes (Page 368)".
Like all compiler messages, information about the preprocessor actions is shown on the
"Compile/check output" tab of the detail view.
Note
You can also view the text of the ST source file modified by the preprocessor:
1. Open the ST source file.
2. Select the ST source file > Execute preprocessor menu command.
The modified source text is shown in the "Compile/check output" tab of the detail view.
3UHSURFHVVRUVWDWHPHQW XQIRUPDWWHG
XQGHI ,GHQWLILHU
LIGHI ,GHQWLILHU
LIQGHI ,GHQWLILHU
HOVH
HQGLI
(DFKVWDWHPHQWPXVWEHJLQZLWKDQHZOLQHDQGHQGZLWKDOLQHEUHDN
7KHIROORZLQJRUGHUPXVWEHPDLQWDLQHGIRUWKHVWDWHPHQWVEHORZ
LIGHIದHOVH RSWLRQDO ದHQGLIRULIQGHIದHOVH RSWLRQDO ದHQGLI
7H[W&KDUDFWHUVHTXHQFHDQ\FKDUDFWHUVH[FHSWIRU
? %DFNVODVK VLQJOHTXRWH DQG GRXEOHTXRWH
7KHNH\ZRUGV86(686(/,%DQG86(3$&.$*(DUHQRWSHUPLWWHG
Statement Meaning
#define The specified identifier will be replaced below by the specified text.
Permissible characters: See table footnote.
#undef The replacement rule for the identifier is cancelled.
#ifdef For variant formation (conditional compilation)
If the specified identifier is defined, the following program lines (until the next
pragma that contains #else or #endif) are compiled by the compiler.
#ifndef For variant formation (conditional compilation)
If the specified identifier is not defined, the following program lines (until the next
pragma that contains #else or #endif) are compiled by the compiler.
#else For variant formation (conditional compilation)
Alternative branch to #ifdef or #ifndef.
The following program lines (until the next pragma containing #endif) are com‐
piled by the compiler, if the preceding query with #ifdef or #ifndef was not fulfilled.
#endif Concludes variant formation with #ifdef or #ifndef.
Permissible characters:
• For identifiers: In accordance with the rules for identifiers (Page 95).
• For text: Sequence of any characters other than \ (backslash), ’ (single quote) and ” (double quote).
The keywords USES, USELIB and USEPACKAGE are not permitted.
Note
Each preprocessor statement must begin with a new line and end with a line break.
Consequently, the curly brackets ({ and }) enclosing the pragma must be placed in separate lines
of the ST source file!
In the case of pragmas with #define statements, please note:
• Pragmas with #define statements in the interface section of an ST source file are declared
public. The defined identifiers can be used with the USES statement into other ST source files
of the same SIMOTION device or of the same library.
• Identifiers defined in pragmas of libraries cannot be imported into ST source files of a
SIMOTION device.
• Redefinition of reserved identifiers is not possible.
You can also make preprocessor definitions in the Properties dialog box of the ST source file. In
the case of different definitions of the same identifiers, #define statements within the ST source
file have priority.
IMPLEMENTATION IMPLEMENTATION
FUNCTION f : INT FUNCTION f : INT
VAR_INPUT VAR_INPUT
i : INT; i : INT;
END_VAR END_VAR
f := i; f := i;
END_FUNCTION END_FUNCTION
$WWULEXWH XQIRUPDWWHG
$WWULEXWHLGHQWLILHU $WWULEXWHYDOXH
,GHQWLILHU 7H[W
Note
Be sure to use the correct upper- and lower-case notation for attributes!
Note
The insertion, deletion or changing of the HMI_Export, BlockInit_OnChange or
BlockInit_OnDeviceRun attributes in a declaration block does not change its version
identification!
1RQDVVLJQHGFRPSLOHUPHVVDJH XQIRUPDWWHG
LQIRUPDWLRQ
ZDUQLQJ &KDUDFWHUVWULQJ
HUURU
7KHFORVLQJEUDFNHW DQGVHPLFRORQPXVWEHLQWKHVDPHOLQH
The text of the non-assigned message is stated after the keyword in brackets as a character string
(Page 106). A semi-colon completes the statement within the pragma.
Note
These pragma statements are not included when checking the backward compatibility of the
project (Menu Project > Old project format > Check the project for backward compatibility).
The non-assigned compiler messages can e.g. be controlled with version formation by using
preprocessor statements (Page 364), see example below.
{ #ifdef test }
; // Statements
{ #else
warning ('This message appears when “test” has not been defined');
#endif }
Pragmas for message output which are in hidden program sequences with the version formation
are not taken into account.
Note
Projects that contain device identifiers, which do not comply with the general Rules for
identifiers (Page 95), cannot be saved in the old project format (up to and including V4.2).
Note
Device identifiers that comply with the general Rules for identifiers (Page 95) can also be
enclosed in double inverted commas.
Example: The following notations are permitted for access to the system
variable motionStateData.motionState of the technology object axis_2 on the device D435_2:
• D435_2.axis_2.motionStateData.motionState
• "D435_2".axis_2.motionStateData.motionState
Procedure
Settings on the device can be made as follows:
1. Select the SIMOTION device in the project navigator.
2. Select the Edit > Object Properties menu command.
3. Select the Settings tab.
4. Enter the settings.
5. Click OK to confirm.
• All of the statement sections of program organization units are compiled in a second
compiler run. For this reason, the following calls are possible regardless of the declaration
position:
– Call of a function block instance
– Call of a function (Page 194)
– Call of a method
– Call of a program within a program (Page 203), provided that the other relevant
requirements have been met.
If a function or a program is called before it is implemented, the declaration of the prototype
is optional; the call can still be carried out even if the prototype is not declared. Please note
the additional relevant requirements when calling a program within a program.
POU prototypes
328SURWRW\SHV XQIRUPDWWHG
328LGHQWLILHU
)81&7,21B%/2&. ,GHQWLILHU
)81&7,21 ,GHQWLILHU
7<3( (1'B7<3(
352*5$0 ,GHQWLILHU
Note
If the POU prototypes are declared within the interface section, the corresponding POUs are
declared public.
DECLARE PUBLIC statements for POUs within the interface section
(e.g. FUNCTION_BLOCK fb‑name;) are also interpreted as prototypes.
If the "Permit forward declarations" compiler option (Page 62) is not activated, the POU
prototypes are ignored. Only the prototypes in the interface section are interpreted as DECLARE
PUBLIC statements for the corresponding POU.
Example
(*
Only if the "Permit forward declarations" compiler option is activated.
*)
(*
The following compiler options also need to be activated due to a program
being called within the program:
"Permit language extensions" and "Only create program instance data once".
*)
INTERFACE
PROGRAM prog_main;
END_INTERFACE
IMPLEMENTATION
TYPE // POU prototypes
FUNCTION_BLOCK fb_1; // Required for instance declaration
FUNCTION fc_1; // Optional
PROGRAM prog_1; // Optional
END_TYPE
// Instance declaration prior to implementation
VAR_GLOBAL
var_fb_1 : fb_1;
END_VAR
PROGRAM prog_main
VAR
var_1, var_2 : DINT;
var_3, var_4 : INT;
END_VAR
FUNCTION_BLOCK fb_1
VAR_INPUT
x_in : INT;
END_VAR
VAR_OUTPUT
x_out : INT;
END_VAR
x_out := x_in;
END_FUNCTION_BLOCK
FUNCTION fc_1: DINT
VAR_INPUT
x_in : DINT;
END_VAR
fc_1 := x_in;
END_FUNCTION
PROGRAM prog_1
VAR
var_int1, var_int2 : INT;
END_VAR
var_int1 := var_int2;
END_PROGRAM
END_IMPLEMENTATION
x := y;
lab_1 : y := z; // Jump label with statement
IF x = y THEN
GOTO lab_2; // Jump statement
END_IF;
GOTO lab_1; // Jump statement
lab_2 : ; // Jump label with blank statement
END_FUNCTION
Note
You should only use the GOTO statement in special circumstances (for example, for
troubleshooting). It should not be used at all according to the rules for structured programming.
Jumps are only permitted within a POU.
The following jumps are illegal:
• Jumps to subordinate control structures (WHILE, FOR, etc.)
• Jumps from a WAITFORCONDITION structure
• Jumps within CASE statements
Jump labels can only be declared in the POU in which they are used. If jump labels are declared,
only the declared jump labels may be used.
Note
Runtime and memory utilization increase as the use of diagnostic functions increases.
WARNING
Dangerous plant states possible
If problems occur in the communication link between the PC and the SIMOTION device, this
may result in dangerous plant states (e.g. the axis may start moving in an uncontrollable
manner).
Therefore, use the debug mode or a control panel only with the life-sign monitoring function
activated with a suitably short monitoring time!
You must observe the appropriate safety regulations.
The function is released exclusively for commissioning, diagnostic and service purposes. The
function should generally only be used by authorized technicians. The safety shutdowns of the
higher-level control have no effect.
Therefore, there must be an EMERGENCY STOP circuit in the hardware. The appropriate
measures must be taken by the user.
In the following cases, the SIMOTION device and SIMOTION SCOUT regularly exchange life-signs
to ensure a correctly functioning connection:
• In debug mode with activated breakpoints.
• When controlling an axis or a drive via the control panel (control priority at the PC):
If the exchange of the life-signs is interrupted longer than the set monitoring time, the following
reactions are triggered:
• In debug mode for activated breakpoints:
– The SIMOTION device switches to the STOP operating state.
– The outputs are deactivated (ODIS).
• For controlling an axis or a drive using the control panel (control priority for the PC):
– The axis is brought to a standstill.
– The enables are reset.
Note
The life-sign monitoring also responds in the following cases:
• Pressing the spacebar.
• Switching to a different Windows application.
• Too high a communication load between the SIMOTION device and SIMOTION SCOUT (e.g.
by uploading task trace data).
The following reactions are triggered:
• In debug mode for activated breakpoints:
– The SIMOTION device switches to the STOP operating state.
– The outputs are deactivated (ODIS).
• For controlling an axis or a drive using the control panel (control priority for the PC):
– The axis or the drive is brought to a standstill.
– The enables are reset.
WARNING
Dangerous plant states possible
This function is not guaranteed in all operating states.
Therefore, there must be an EMERGENCY STOP circuit in the hardware. The appropriate
measures must be taken by the user.
Field Description
Life-sign monitoring The SIMOTION device and SIMOTION SCOUT regularly exchange
life-signs to ensure a correctly functioning connection. If the ex‐
change of the life-signs is interrupted longer than the set moni‐
toring time, the following reactions are triggered:
• In debug mode for activated breakpoints:
– The SIMOTION device switches to the STOP operating state.
– The outputs are deactivated (ODIS).
• For controlling an axis or a drive using the control panel (con‐
trol priority for the PC):
– The axis is brought to a standstill.
– The enables are reset.
The following parameterizations are possible:
• Checkbox active:
If the checkbox is activated, life-sign monitoring is active.
The deactivation of the life-sign monitoring is not always pos‐
sible.
• Monitoring time:
Enter the timeout.
Prudence
Do not make any changes to the defaults for life-sign monitoring,
if possible.
Changes should only be made in special circumstances and in
observance of all danger warnings.
Safety information Please observe the warning!
Click the button to obtain further safety information.
See: Important information about the life-sign monitoring
(Page 384)
However, you can only activate the "program status", "monitor program execution" (only for
MCC), and trace (only for MCC) test functions for a program source or a program organization
unit (POU) if the following conditions are met:
1. This program source or any POU of this source (e.g. MCC chart) does not contain any changes
which have not been saved.
2. The program source (unit) in SCOUT is consistent with the target system.
Note
If the "program status" test function is activated, editing of the corresponding program source
or one of its POUs is disabled.
If an MCC unit or MCC chart is changed and the "monitor program execution" or trace test
functions are active for that unit or chart, the test functions are canceled.
Note
If breakpoints have been activated and the SIMOTION device is in debug mode:
Entering a space switches the SIMOTION device to STOP operating mode and deactivates all
outputs (ODIS).
Requirements
• Make sure that a connection to the target system has been established and a project has been
downloaded to the target system. To load the project with the sample program, see
"Executing the sample program (Page 89)".
• You can run the user program, but you do not have to. If the program is not run, you only see
the initial values of the variables.
The procedure depends on the memory area in which the variables to be monitored are stored.
Procedure
Proceed as follows:
1. Select the appropriate element in the project navigator in accordance with the following
table.
2. In the detail view, click the Symbol browser tab.
The corresponding variables are displayed in the symbol browser.
3. Select how each variable in the "Display format" column should be displayed.
Table 8-3 Elements in the project navigator and variables to be monitored in the symbol browser
Note
You can monitor temporary variables (together with unit variables and static variables)
with Program status (see Properties of the program status (Page 396)).
Note
Trace diagnostic function for MCC programming
Various internal variables, whose identifier begins with an underscore, are automatically created
by the compiler for the trace diagnostic function. These variables are displayed in the symbol
browser.
With activated diagnostic function, these variables are used for the control of the diagnostics
function. These variables must not be used in the user program.
WARNING
Dangerous plant states possible
You assign the entered values to the variables during control. This can result in dangerous plant
states, e.g. unexpected axis motion.
Note
Note when you change the values of several variables:
The values are written sequentially to the variables. It can take several milliseconds until the next
value is written. The variables are changed from top to bottom in the symbol browser. There is
therefore no guarantee of consistency.
Display Meaning
1.#QNAN Invalid bit pattern in accordance with IEEE 754 (NaN Not a Number). There is no
-1.#QNAN distinction between signaling NaN (NaNs) and quiet NaN (NaNq).
1.#INF Bit pattern for + infinity in accordance with IEEE 754
-1.#INF Bit pattern for – infinity in accordance with IEEE 754
-1.#IND Bit pattern for indeterminate
WARNING
Dangerous plant states possible
You assign the entered values to the variables during control. This can result in dangerous plant
states, e.g. unexpected axis motion.
Note
Note when you change the values of several variables:
The values are written sequentially to the variables. It can take several milliseconds until the next
value is written. The variables are changed from top to bottom in the watch table. There is
therefore no guarantee of consistency.
Display Meaning
1.#QNAN Invalid bit pattern in accordance with IEEE 754 (NaN - Not a Number). There is no
-1.#QNAN distinction between signaling NaN (NaNs) and quiet NaN (NaNq).
1.#INF Bit pattern for + infinity in accordance with IEEE 754
-1.#INF Bit pattern for – infinity in accordance with IEEE 754
-1.#IND Bit pattern for indeterminate
Requirements
• Make sure that a connection to the target system has been established and a project has been
downloaded to the target system. For information on loading a project, see "Running the
sample program (Page 89)".
• The program source containing the program organization unit (POE) whose variables you
want to monitor must be consistent with the target system.
• The associated source (e.g. ST source file, MCC chart, LAD program) must be open.
• With the MCC programming language only: The parameter screen form for the command in
which the variable you want to monitor is being used must be open.
• You can run the user program, but you do not have to. If the program is not run, you only see
the initial values of the variables.
Procedure
To monitor an individual variable using variable status:
1. Position the cursor above the identifier for a variable.
– With the ST programming language: in the open ST source file
– With the ST programming language: within an input field in the open parameter screen
form
– With the LAD/FBD programming language: within a network of the LAD/FBD program
2. Briefly position the cursor above the identifier.
The tool tip shows the current value of the variable. If you keep the cursor above the identifier
for a longer period, the value is updated on an ongoing basis.
Note
With "variable status", the current value for the variable is displayed, wherever the selected
variable is being used.
The "variable status" function enables you to monitor all those variables you are also able to
monitor in the symbol browser (Page 388) or the address list. These are:
• System variables of SIMOTION devices
• System variables of technology objects
• Global device variables
• Retentive and non-retentive unit variables of the interface section of a program source (unit)
• Retentive and non-retentive unit variables of the implementation section of a program
source (unit)
• Static variables of the programs
• Static variables of the function blocks whose instances are declared as unit variables
• Static variables of the function blocks whose instances are declared as static variables of
programs
• I/O variables
Name Meaning
taskbind.hid Execution system
stdfunc.pck IEC library
device.pck Device-specific library
tp-name.pck Library of the tp-name technology package,
e.g. cam.pck for the library of the CAM technology package
Array Description
Selected CPU The selected SIMOTION device is displayed.
Refresh Clicking the button reads the current code positions from the SIMO‐
TION device and shows them in the open window.
Calling task Select the task for which you want to determine the code position
being executed.
All configured tasks of the execution system.
Current code position The position being executed in the program code (e.g. line of an ST
source file) is displayed (with the name of the program source, line
number, name of the POU).
is called by The code positions that call the code position being executed within
the selected task are shown recursively (with the name of the program
source, line number, name of the POU, and name of the function block
instance, if applicable).
For names of the SIMOTION RT program sources, refer to the table in Program run (Page 394).
Symbol Meaning
Display program run
Click this symbol to open the Program run call stack window. In this window, you can
display the currently active code position with its call path.
See: Program run: Display code position and call path (Page 394)
Note
The values of constants are not displayed.
Due to the restricted buffer capacity and the requirement for minimum runtime corruption, the
following variables cannot be displayed:
• Complete arrays
• Complete structures
Individual array elements or individual structure elements are displayed, however, provided an
assignment is made in the ST source file.
Table 8-9 Differences between process mode and test mode in Program Status
Note
Program status requires additional CPU resources.
Please note if you want to monitor several programs at the same time with the status program:
• Test mode must be activated (see Operating modes of the SIMOTION devices (Page 382)).
• In version V3.2 of the SIMOTION Kernel, the programs must be assigned to various tasks.
Field Description
Calling task Select the task.
All tasks in which the selected code position is called are available for
selection.
Current code position The selected section of the POU (code position) is shown (with the
name of the ST source file, line number, name of the POU)
is called by Select the calling code position.
The following are available:
• The code positions to be called within the selected task (with the
name of the program source, line number, name of the POU).
If the selected calling code position is in turn called by several code
positions, further lines are displayed in which you proceed similarly.
• All:
All displayed code positions are selected. Moreover, all code posi‐
tions (up to the top level of the hierarchy) are selected from which
the displayed code positions are called.
8.2.8 Breakpoints
Requirement:
• The program source with the POU (e.g. ST source file, MCC chart, LAD/FBD program) is open.
Procedure
Follow these steps:
1. Select "Debug mode" for the associated SIMOTION device; see Setting debug mode
(Page 402).
2. Specify the tasks to be stopped, see Specifying the debug task group (Page 403).
3. Set breakpoints, see Setting breakpoints (Page 406).
4. Define the call path, see Defining a call path for a single breakpoint (Page 409).
5. Activate the breakpoints, see Activating breakpoints (Page 414).
WARNING
Dangerous plant states possible
If problems occur in the communication link between the PC and the SIMOTION device, this
may result in dangerous plant states (e.g. the axis may start moving in an uncontrollable
manner).
Therefore, use the debug mode only with activated life-sign monitoring (Page 384) with a
suitably short monitoring time!
You must observe the appropriate safety regulations.
The function is released exclusively for commissioning, diagnostic and service purposes. The
function should generally only be used by authorized technicians. The safety shutdowns of the
higher-level control have no effect!
Therefore, there must be an EMERGENCY STOP circuit in the hardware. The appropriate
measures must be taken by the user.
Requirement
1. A connection to the target system must have been established (online mode)
2. Debug mode must not be selected for any SIMOTION device.
Procedure
To set the debug mode, proceed as follows:
1. Highlight the SIMOTION device in the project navigator.
2. Select Operating mode from the context menu.
3. Select Debug mode (Page 382).
4. Accept the safety information
5. Parameterize the sign-of-life monitoring.
See also section: Important information about the life-sign monitoring (Page 384).
6. Confirm with OK.
SIMOTION SCOUT switches to debug mode for this device; the SIMOTION device itself remains
in "test mode", as long as at least one breakpoint is activated:
The project navigator indicates that debug mode is activated for SIMOTION SCOUT by means of
a symbol next to the SIMOTION device.
The breakpoints toolbar (Page 408) is displayed.
As long as no breakpoints are activated, you can edit program sources in debug mode
(Page 386).
Debug mode is not enabled for the SIMOTION device until at least one set breakpoint is
activated. If all breakpoints are deactivated, debug mode is canceled for the SIMOTION device.
The status bar indicates that debug mode is activated for the SIMOTION device.
Note
Pressing the spacebar or switching to a different Windows application causes the following to
happen if the SIMOTION device is in debug mode (breakpoints activated):
• The SIMOTION device switches to the STOP operating state.
• The outputs are deactivated (ODIS).
WARNING
Dangerous plant states possible
This function is not guaranteed in all operating states.
Therefore, there must be an EMERGENCY STOP circuit in the hardware. The appropriate
measures must be taken by the user.
Requirement
1. A connection to the target system must have been established (online mode).
2. SIMOTION SCOUT is in debug mode for the corresponding SIMOTION device; see Setting
debug mode (Page 402).
Procedure
How to assign a task to the debug task group:
1. Highlight the relevant SIMOTION device in the project navigator.
2. Select Debug task group from the context menu.
The Debug Task group window opens.
3. Select the tasks to be stopped on reaching the breakpoint:
– If you only want to stop individual tasks (in RUN operating state): Activate the Debug task
group selection option.
Assign all tasks to be stopped on reaching a breakpoint to the Tasks to be stopped list.
– If you only want to stop individual tasks (in HOLD operating state): Activate the All tasks
selection option.
In this case, also select whether the outputs and technology objects are to be released
again after resumption of program execution.
Note
Note the different behavior when an activated breakpoint is reached, see the following table.
Table 8-11 Behavior at the breakpoint depending on the tasks to be stopped in the debug task group.
Note
You can only make changes to the debug task group if no breakpoints are active.
The settings of the debug task group are retained after exiting "Debug mode".
Proceed as follows:
1. Set breakpoints (see Setting breakpoints (Page 406)).
2. Define the call path (see Defining a call path for a single breakpoint (Page 409)).
3. Activate the breakpoints (see Activating breakpoints (Page 414)).
Field Description
Debug task group Select this selection option if you only want to stop individual tasks. The
SIMOTION device remains in RUN mode after an activated breakpoint is
reached. Outputs and technology objects remain activated.
Assign all tasks to be stopped on reaching a breakpoint to the Tasks to
be stopped list.
All tasks Select this selection option if you only want to stop all user tasks. The
SIMOTION device remains in STOP mode after an activated breakpoint
is reached, all outputs and technology objects will be deactivated (ODIS
activated).
In this case, also select whether the outputs and technology objects are
to be released again after resumption of program execution.
'Resume' activates the outputs Only if All tasks is selected.
(ODIS deactivated). Activate the checkbox, to release again the outputs and technology
objects after program execution has been resumed.
All outputs and technology objects can only be released after a down‐
load of the project with deactivated checkbox.
Note
Note the different behavior at the activated breakpoint depending on the tasks to be stopped,
see table in Define the debug task group (Page 403).
You can only make changes to the debug task group if no breakpoints are active.
Field Description
Debug points (table)
Active The activation state of the corresponding breakpoint is dis‐
played and can be modified:
Active: The breakpoint is activated.
Inactive: The breakpoint is deactivated.
See: Activating breakpoints (Page 414).
Source, line (POU) The code position is shown with the set breakpoint (with the
name of the program source file, line number, name of the POU).
Field Description
Call path Click the button to define the call path for the breakpoint.
See: Defining the call path for a single breakpoint (Page 409).
All breakpoints ...
Activate Click the button to activate all breakpoints (in all program sour‐
ces) of the SIMOTION device.
See: Activating breakpoints (Page 414).
Deactivate Click the button to deactivate all breakpoints (in all program
sources) of the SIMOTION device.
See: Activating breakpoints (Page 414).
Delete Click the button to clear all breakpoints (in all program sources)
of the SIMOTION device.
See: Setting breakpoints (Page 406).
Requirements:
1. The program source with the POU (e.g. ST source file, MCC chart, LAD/FBD program) is open.
2. A connection to the target system must have been established (online mode).
3. SIMOTION SCOUT is in debug mode for the corresponding SIMOTION device; see Setting
debug mode (Page 402).
4. The tasks to be stopped are specified, see Specifying the debug task group (Page 403).
Procedure
How to set a breakpoint:
1. Select the code location where no breakpoint has been set:
– SIMOTION ST: Place the cursor on a line in the ST source file that contains a statement.
– SIMOTION MCC: Select an MCC command in the MCC chart (except module or comment
block).
– SIMOTION LAD/FBD: Set the cursor in a network of the LAD/FBD program.
2. Perform the following (alternatives):
– Select the Debug > Set/remove breakpoint menu command (shortcut F9).
– Click the button in the Breakpoints toolbar.
To remove a breakpoint, proceed as follows:
1. Select the code position with the breakpoint.
2. Perform the following (alternatives):
– Select the Debug > Set/remove breakpoint menu command (shortcut F9).
– Click the button in the Breakpoints toolbar.
To remove all breakpoints (in all program sources) of the SIMOTION device, proceed as follows:
• Perform the following (alternatives):
– Select the Debug > Remove all breakpoints menu command (shortcut CTRL+F5).
– Click the button in the Breakpoints toolbar.
Note
You cannot set breakpoints:
• For SIMOTION ST: In lines that contain only comment.
• For SIMOTION MCC: On the module or comment block commands.
• For SIMOTION LAD/FBD: Within a network.
• At code locations in which other debug points (e.g. trigger points) have been set.
You can list the debug points in all program sources of the SIMOTION device in the debug table:
• Click the button for "debug table" in the Breakpoints toolbar.
In the debug table, you can also remove all breakpoints (in all program sources) of the SIMOTION
device:
• Click the button for "Clear all breakpoints".
The breakpoints set also remain saved after leaving debug mode; they are displayed in debug
mode only.
You can use the program status (Page 398) diagnosis functions and breakpoints together in a
program source or POU. However, the following restrictions apply depending on the program
languages:
• SIMOTION ST: For version V3.2 of the SIMOTION Kernel, the (marked) ST source file lines to
be tested with program status must not contain a breakpoint.
• SIMOTION MCC and LAD/FBD: The commands of the MCC chart (or networks of the LAD/FBD
program) to be tested with program status must not contain a breakpoint.
Proceed as follows
1. Define the call path, see Defining a call path for a single breakpoint (Page 409).
2. Activate the breakpoints, see Activating breakpoints (Page 414).
Symbol Meaning
Set/remove breakpoint
Click this icon to set at breakpoint for the selected code position or to remove an existing
breakpoint.
See: Setting breakpoints (Page 406).
Activate/deactivate breakpoint
Click this icon to activate or deactivate the breakpoint at the selected code position.
See: Activating breakpoints (Page 414).
Edit the call path
Click this icon to define the call path for the breakpoints:
• If a code position with breakpoint is selected: The call path for this breakpoint.
• If a code position without breakpoint is selected: The call path for all breakpoints of
the POU.
See: Defining the call path for a single breakpoint (Page 409), Defining the call path for
all breakpoints (Page 412).
Activate all breakpoints of the active POU
Click this symbol to activate all breakpoints in the active program source or POU (e.g. ST
source file, MCC chart, LAD/FBD program).
See: Activating breakpoints (Page 414).
Deactivate all breakpoints of the active POU
Click this symbol to deactivate all breakpoints in the active program source or POU
(e.g. ST source file, MCC chart, LAD/FBD program).
See: Activating breakpoints (Page 414).
Remove all breakpoints of the active POU
Click this symbol to remove all breakpoints from the active program source or POU
(e.g. ST source file, MCC chart, LAD/FBD program).
See: Setting breakpoints (Page 406).
Debug table
Click this icon to display the debug table.
See: Debug table parameters (Page 405).
Display call stack
Click this icon after reaching an activated breakpoint to:
• View the call path at the current breakpoint.
• View the code positions at which the other tasks of the debug task group have been
stopped together with their call path.
See: Displaying the call stack (Page 417).
Resume
Click this icon to continue the program execution after reaching an activated breakpoint.
See: Resuming program execution (Page 418), Displaying the call stack (Page 417).
Symbol Meaning
Next step (SIMOTION Kernel as of version V4.4)
Only available for the MCC and LAD/FBD programming languages:
Click this icon to resume the program execution until the next MCC command or LAD/FBD
network is reached.
See: Resume program execution in single steps.
Step through the subprogram (SIMOTION Kernel as of version V4.4)
Only available for the MCC programming language.
Click this icon to jump to the called subprogram and stop at the first command. The
subprogram must be created in the MCC or LAD/FBD programming language.
See: Resume program execution in single steps.
Requirements:
1. The program source with the POU (e.g. ST source file, MCC chart, LAD/FBD program) is open.
2. A connection to the target system must have been established (online mode).
3. SIMOTION SCOUT is in debug mode for the corresponding SIMOTION device; see Setting
debug mode (Page 402).
4. The tasks to be stopped are specified, see Specifying the debug task group (Page 403).
5. Breakpoint is set, see Setting breakpoints (Page 406).
Procedure
To define the call path for a single breakpoint, proceed as follows:
1. Select the code location where a breakpoint has already been set:
– SIMOTION ST: Set the cursor in an appropriate line of the ST source.
– SIMOTION MCC: Select an appropriate command in the MCC chart.
– SIMOTION LAD/FBD: Set the cursor in an appropriate network of the LAD/FBD program.
2. Click the button for "edit call path" in the Breakpoints toolbar.
In the Call path / task selection breakpoint window, the marked code position is displayed
(with the name of the program source, line number, name of the POU).
3. Select the task in which the user program (i.e. all tasks in the debug task group) will be
stopped when the selected breakpoint is reached.
The following are available:
– All calling locations starting at this call level
The user program will always be started when the activated breakpoint in any task of the
debug task group is reached.
– The individual tasks from which the selected breakpoint can be reached.
The user program will be stopped only when the breakpoint in the selected task is
reached. The task must be in the debug task group.
The specification of a call path is possible.
4. Only for functions and function blocks: Select the call path, i.e. the code position to be called
(in the calling POU).
The following are available:
– All calling locations starting at this call level
No call path is specified. The user program is always stopped at the activated breakpoint
if the POU in the selected tasks is called.
– Only when a single task is selected: The code positions to be called within the selected
task (with the name of the program source, line number, name of the POU).
The call path is specified. The user program will be stopped at the activated breakpoint
only when the POU is called from the selected code position.
If the POU of the selected calling code position is also called from other code positions,
further lines are displayed successively in which you proceed similarly.
5. If the breakpoint is only to be activated after the code position has been reached several
times, select the number of times.
Note
You can also define the call path to the individual breakpoints in the debug table:
1. Click the button for "debug table" in the Breakpoints toolbar.
The "Debug table" window opens.
2. Click the appropriate button in the "Call path" column.
3. Proceed in the same way as described above:
– Specify the task.
– Define the call path (only for functions and function blocks).
– Specify the number of passes after which the breakpoint is to be activated.
Proceed as follows:
• Activate the breakpoints, see Activating breakpoints (Page 414).
Note
You can use the "Display call stack (Page 417)" function to view the call path at a current
breakpoint and the code positions at which the other tasks of the debug task group were
stopped.
See also
Defining the call path for all breakpoints (Page 412)
Field Description
Selected CPU The selected SIMOTION device is displayed.
Calling task Select the task in which the user program (i.e. all tasks in the debug task
group) will be stopped when the selected breakpoint is reached.
The following are available:
• All calling locations starting at this call level
The user program will always be started when the activated break‐
point in any task of the debug task group is reached.
• The individual tasks from which the POU with the selected break‐
point can be reached.
The user program will be stopped only when the breakpoint in the
selected task is reached. The task must be in the debug task group.
The specification of a call path is possible.
Current code position The code position is shown with the set breakpoint (with the name of
the program source file, line number, name of the POU).
Is called by Only for functions and function blocks:
Select the call path, i.e. the code position to be called (in the calling
POU).
The following are available:
• All calling locations starting at this call level
No call path is specified. The user program will always be stopped
at the activated breakpoint when the POU in the tasks is reached.
• Only when a single task is selected: The code positions to be called
within the selected task (with the name of the program source, line
number, name of the POU).
The call path is specified. The user program will be stopped at the
activated breakpoint only when the POU is called from the selected
code position.
If the POU of the selected calling code position is also called from
other code positions, further lines are displayed successively in
which you proceed similarly.
The breakpoint will be activa‐ If you do not want the breakpoint to be activated until the code position
ted at each nth pass. has been reached a certain number of times, set this number.
Note
You can only make changes to the debug task group if no breakpoints are active.
Requirements
1. The program source with the POU (e.g. ST source file, MCC chart, LAD/FBD program) is open.
2. A connection to the target system must have been established (online mode).
3. SIMOTION SCOUT is in debug mode for the corresponding SIMOTION device; see Setting
debug mode (Page 402).
4. The tasks to be stopped are specified, see Specifying the debug task group (Page 403).
Procedure
To define the call path for all future breakpoints of a POU, proceed as follows:
1. Select the code location where no breakpoint has been set:
– SIMOTION ST: Set the cursor in an appropriate line of the ST source.
– SIMOTION MCC: Select an appropriate command in the MCC chart.
– SIMOTION LAD/FBD: Set the cursor in an appropriate network of the LAD/FBD program.
2. Click the button for "edit call path" in the Breakpoints toolbar.
In the "Call path / task selection all breakpoints for each POU" window, the marked code
position is displayed (with the name of the program source, line number, name of the POU).
3. Select the task in which the user program (i.e. all tasks in the debug task group) will be
stopped when a breakpoint in this POU is reached.
The following are available:
– All calling locations starting at this call level
The user program will always be started when an activated breakpoint of the POU in any
task of the debug task group is reached.
– The individual tasks from which the selected breakpoint can be reached.
The user program will be stopped only when a breakpoint in the selected task is reached.
The task must be in the debug task group.
The specification of a call path is possible.
4. Only for functions and function blocks: Select the call path, i.e. the code position to be called
(in the calling POU).
The following are available:
– All calling locations starting at this call level
No call path is specified. The user program is always stopped at an activated breakpoint
when the POU in the selected tasks is called.
– Only when a single task is selected: The code positions to be called within the selected
task (with the name of the program source, line number, name of the POU).
The call path is specified. The user program will be stopped at an activated breakpoint only
when the POU is called from the selected code position.
If the selected calling code position is in turn called by other code positions, further lines
are displayed successively in which you proceed similarly.
5. If a breakpoint is only to be activated after the code position has been reached several times,
select the number of times.
6. If you want to accept and compare this call path for all previously set breakpoints in this POU:
– Click Accept.
Proceed as follows:
• Activate the breakpoints, see Activating breakpoints (Page 414).
Note
You can use the "Display call stack (Page 417)" function to view the call path at a current
breakpoint and the code positions at which the other tasks of the debug task group were
stopped.
See also
Defining the call path for a single breakpoint (Page 409)
8.2.8.11 Call path / task selection parameters of all breakpoints per POU
Here you can define a presetting for the call path of all future breakpoints to be set in a POU.
Moreover, you can also accept this setting for all previously set breakpoints of this POU.
Table 8-16 Call path / task selection parameter description of all breakpoints per POU
Field Description
Selected CPU The selected SIMOTION device is displayed.
Calling task Select the task in which the user program (i.e. all tasks in the debug task
group) will be stopped when a breakpoint in this POU is reached.
The following are available:
• All calling locations starting at this call level
The user program will always be started when an activated break‐
point of the POU in any task of the debug task group is reached.
• The individual tasks from which the selected breakpoint can be
reached.
The user program will be stopped only when an activated break‐
point in the selected task is reached. The task must be in the debug
task group.
The specification of a call path is possible.
Current POU The POU in which the cursor is located is displayed (with the name of
the program source file, name of the POU).
Is called by Only for functions and function blocks:
Select the call path, i.e. the code position to be called (in the calling
POU).
The following are available:
• All calling locations starting at this call level
No call path is specified. The user program will always be stopped
at an activated breakpoint when the POU in the selected tasks is
called.
• Only when a single task is selected: The code positions to be called
within the selected task (with the name of the program source, line
number, name of the POU).
The call path is specified. The user program will be stopped at an
activated breakpoint only when the POU is called from the selected
code position.
If the POU of the selected calling code position is also called from
other code positions, further lines are displayed successively in
which you proceed similarly.
The breakpoint will be activa‐ If you do not want the breakpoint to be activated until the code position
ted at each nth pass. has been reached a certain number of times, set this number.
Apply this call path to all previ‐ Click the Apply button, if you want to apply the call path to all previ‐
ous breakpoints of this POU ously set breakpoints of the current POU. Any existing settings will be
overwritten.
Requirements
1. The program source with the POU (e.g. ST source file, MCC chart, LAD/FBD program) is open.
2. A connection to the target system must have been established (online mode).
3. SIMOTION SCOUT is in debug mode for the corresponding SIMOTION device; see Setting
debug mode (Page 402).
4. The tasks to be stopped are specified, see Specifying the debug task group (Page 403).
5. Breakpoints are set, see Setting breakpoints (Page 406).
6. Call paths are defined, see Defining a call path for a single breakpoint (Page 409).
Activating breakpoints
How to activate a single breakpoint:
1. Select the code location where a breakpoint has already been set:
– SIMOTION ST: Set the cursor in an appropriate line of the ST source file.
– SIMOTION MCC: Select an appropriate command in the MCC chart.
– SIMOTION LAD/FBD: Set the cursor in an appropriate network of the LAD/FBD program.
2. Perform the following (alternatives):
– Select the Debug > Activate/deactivate breakpoint menu command (shortcut F12).
– Click the button in the Breakpoints toolbar.
To activate all breakpoints (in all program sources) of the SIMOTION device, proceed as follows:
• Perform the following (alternatives):
– Select the Debug > Activate all breakpoints menu command.
– Click the button in the Breakpoints toolbar.
Once the first breakpoint has been activated, the SIMOTION device switches to debug mode. It
remains in this mode until the last breakpoint is deactivated.
In the Task status function bar, (Page 419) the tasks with activated breakpoints are highlighted
in gray ( ).
Note
Breakpoints of all program sources of the SIMOTION device can also be activated and
deactivated in the debug table:
1. Click the button for "debug table" in the Breakpoints toolbar.
The "Debug Table" window opens.
2. Perform the action below, depending on which breakpoints you want to activate or
deactivate:
– Single breakpoints: Check or clear the corresponding checkboxes.
– All breakpoints (in all program sources): Click the corresponding button.
The following applies up to version V4.3 of the SIMOTION Kernel:
• In the case of activated breakpoints, the "Single step" test function of the SIMOTION MCC
programming language cannot be used.
The following applies as of version V4.4 of the SIMOTION Kernel:
• The "Single step" test function of the SIMOTION MCC programming language is not available
in the Debug mode.
Breakpoints cannot be activate if the control priority is at the axis control panel. Conversely, you
cannot fetch the control priority for the axis control panel when a breakpoint activated.
Deactivate breakpoints
To deactivate a single breakpoint, proceed as follows:
1. Select the code position with the activated breakpoint.
2. Perform the following (alternatives):
– Select the Debug > Activate/deactivate breakpoint menu command (shortcut F12).
– Click the button in the Breakpoints toolbar.
To deactivate all breakpoints (in all program sources) of the SIMOTION device, proceed as
follows:
• Perform the following (alternatives):
– Select the Debug > Deactivate all breakpoints menu command.
– Click the button in the Breakpoints toolbar.
Once the last breakpoint has been deactivated, the SIMOTION device switches to "test mode";
SIMOTION SCOUT continues to run in debug mode.
Requirement
The user program is stopped at an activated breakpoint, i.e. the tasks of the debug task group
(Page 403) have been stopped.
Procedure
To call the "Display call stack" function, proceed as follows:
• Click the button for "display call stack" in the Breakpoints toolbar.
The "Breakpoint call stack" dialog opens. The current call path (including the calling task and
the number of the set passes) is displayed.
The call path cannot be changed.
Field Description
Selected CPU The selected SIMOTION device is displayed.
Calling task Select the task for which you want to display the code position at which
the task was stopped.
All tasks of the debug task group can be selected.
Current code position The position in the program code (e.g. line of an ST source file) at which
the selected task was stopped is displayed (with the name of the pro‐
gram source file, line number, name of the POU).
is called by The code positions that call the current code position within the selec‐
ted task are shown recursively (with the name of the program source
file, line number, name of the POU, and name of the function block
instance, if applicable).
For names of the SIMOTION RT program sources, refer to the table in "Program run (Page 394)".
The stopped task is continued until the next active breakpoint is reached.
Table 8-18 Meaning of background colors in the Task status function bar
Note
A selection of a task in the combo box is only possible:
• For the following test functions of the SIMOTION MCC programming language:
– Monitoring
– Single step
– Trace
• at activated breakpoints (Page 414) in the MCC or LAD/FBD programming languages.
8.2.10 Trace
Using the trace tool, you can record and store the course of variable values over time (z. B. unit
variables, local variables, system variables, I/O variables). This allows you to document the
optimization, for example, of axes.
You can set the recording time, display up to four channels, select trigger conditions,
parameterize timing adjustments, select between different curve displays and scalings, etc.
Aside from isochronous recording, you can also select Recording at code position. This lets you
record the values of variables whenever the program runs through a specific point in the ST
source file.
The trace tool is described in detail in the online help.
Syntax diagrams are used as a basis for the language description in the individual sections. They
provide you with an invaluable insight into the syntactic (i.e. grammatical) structure of ST.
Instructions for using syntax diagrams were presented in Language description resources.
Information about the difference between formatted and unformatted rules, of interest to the
advanced user, is presented below.
,GHQWLILHU IRUPDWWHG
/HWWHU /HWWHU
B
/HWWHU 'LJLW
B 8QGHUVFRUH
'LJLW /HWWHU$=D]
8QGHUVFRUH 'LJLW
R_CONTROLLER3
_A_ARRAY
_100_3_3_10
9DOXHDVVLJQPHQW XQIRUPDWWHG
9DULDEOHRIWKH
HOHPHQWDU\GDWDW\SH
9DULDEOHRIWKH
HQXPHUDWRUGDWDW\SH
$UUD\YDULDEOH
6WUXFWXUHGYDULDEOH
$EVROXWH3,DFFHVV ([SUHVVLRQ
2XWSXWVRQO\
([WHUQDOWDJ
$FFHVVWR)%LQSXWSDUDPHWHUV !
'LUHFWELWDFFHVV !
!2QO\IRUDFWLYDWHG3HUPLWODQJXDJHH[WHQVLRQVFRPSLOHURSWLRQ
A terminal is a basic element that is declared verbally and not by a further rule. It is represented
in the syntax diagrams by an oval or circle.
You can use the complete extended ASCII character set in comments. You can use all printable
ASCII code characters starting from decimal equivalent 32 (blank).
For language commands, identifiers, constants, expressions and operators, you can use special
characters, i.e. characters other than letters and digits, only according to certain rules.
See also
Language description resources (Page 93)
A.1.2.5 Operators
Below is a list of all ST operators and the syntactic rules in which they are used.
Note
Variables must not be assigned the names of keywords or predefined identifiers. For more
information about identifiers, see Identifiers in ST. You will find an overview of the identifiers
reserved for technology objects and other reserved identifiers in Reserved identifiers.
1 Only with active compiler option "Permit language extensions, IEC61131 3rd edition".
2 Only with active compiler option "Permit object-oriented programming".
A.1.3 Rules
The following syntax rules of the ST language are subdivided into rules with formatted notation
(lexical rules) and unformatted notation (syntactic rules). Language description resources
describes the differences between syntactic and lexical rules.
A.1.3.1 Identifiers
,GHQWLILHU IRUPDWWHG
/HWWHU /HWWHU
B
/HWWHU 'LJLW
B 8QGHUVFRUH
'LJLW /HWWHU$=D]
8QGHUVFRUH 'LJLW
1XPEHU IRUPDWWHG
'LJLW
'LJLW
Literals
/LWHUDO IRUPDWWHG
,QWHJHU
)ORDWLQJSRLQWQXPEHU
7LPHOLWHUDO
&KDUDFWHUVWULQJ
,QWHJHU IRUPDWWHG
,QWHJHUV 'HFLPDO
GDWDW\SH GLJLWVWULQJ
%LWGDWDW\SH
%LQDU\GLJLWVWULQJ
2FWDOGLJLWVWULQJ
2QO\IRUGDWDW\SHV
6,17,17DQG',17
+H[DGHFLPDOGLJLWVWULQJ
)ORDWLQJSRLQWQXPEHU IRUPDWWHG
)ORDWLQJSRLQWQXPEHU
GDWDW\SH
'HFLPDOGLJLW 'HFLPDOGLJLW
([SRQHQW
VWULQJ VWULQJ
$WOHDVWRQHRSWLRQPXVWEHRIIHUHG
([SRQHQW IRUPDWWHG
(
'HFLPDOGLJLWVWULQJ
H
7LPHOLWHUDO IRUPDWWHG
'DWH
7LPHRIGD\
'DWHDQGWLPH
'XUDWLRQ
&KDUDFWHUVWULQJ IRUPDWWHG
675,1*
$SRVWURSKH $SRVWURSKH
LQYHUWHGFRPPD &KDUDFWHUV LQYHUWHGFRPPD
&KDUDFWHUV IRUPDWWHG
+H[DGHFLPDOGLJLW +H[DGHFLPDOGLJLW
3ULQWDEOHFKDUDFWHU
$SRVWURSKHLQYHUWHGFRPPD
'ROODUVLJQ
/
/LQHIHHG/) $
O
1
&DUULDJH5HWXUQ/LQH)HHG&5/) '$
Q
3
)RUPIHHG)) &
S
5
&DUULDJHUHWXUQ&5 '
U
7
+RUL]RQWDOWDE+7
W
3ULQWDEOHFKDUDFWHU
$Q\FKDUDFWHUIURPWKHH[WHQGHG$6&,,FKDUDFWHUVHW $6&,,FRGH
WR(DQGWR))
H[FHSW 'ROODUVLJQ DQG
DSRVWURSKHLQYHUWHGFRPPD
+H[DGHFLPDOGLJLWV$)
Digit string
'HFLPDOGLJLWVWULQJ IRUPDWWHG
'HFLPDOGLJLW
B
8QGHUVFRUH
'HFLPDOGLJLWV
%LQDU\GLJLWVWULQJ IRUPDWWHG
%LQDU\GLJLW
B
%LQDU\GLJLWV 8QGHUVFRUH
2FWDOGLJLWVWULQJ IRUPDWWHG
2FWDOGLJLW
B
8QGHUVFRUH
2FWDOGLJLWV
+H[DGHFLPDOGLJLWVWULQJ IRUPDWWHG
+H[DGHFLPDOGLJLW
B
+H[DGHFLPDOGLJLWV$) 8QGHUVFRUH
'DWH IRUPDWWHG
'$7(
'DWHLQIRUPDWLRQ
'
'XUDWLRQ IRUPDWWHG
7,0( 'HFLPDOUHSUHVHQWDWLRQ
7LPHRIGD\ IRUPDWWHG
7,0(B2)B'$<
7LPHRIGD\LQIRUPDWLRQ
72'
'DWHDQGWLPH IRUPDWWHG
'$7(B$1'B7,0(
'DWHLQIRUPDWLRQ 7LPHRIGD\LQIRUPDWLRQ
'7
'DWHLQIRUPDWLRQ IRUPDWWHG
7LPHRIGD\SDUDPHWHU IRUPDWWHG
'HFLPDOGLJLWVWULQJ 'HFLPDOGLJLWVWULQJ
+RXU 0LQXWH
'HFLPDOGLJLWVWULQJ 'HFLPDOGLJLWVWULQJ
6HFRQG 0LOOLVHFRQG
6HTXHQFHUHSUHVHQWDWLRQ IRUPDWWHG
'HFLPDOGLJLWVWULQJ G B 'HFLPDOGLJLWVWULQJ K B
'D\V +RXUV>@
'HFLPDOGLJLWVWULQJ P B 'HFLPDOGLJLWVWULQJ V B
0LQXWHV>@ 6HFRQGV>@
'HFLPDOGLJLWVWULQJ PV
0LOOLVHFRQGV>@
$WOHDVWRQHHQWU\LVUHTXLUHG
7KHYDOXHUDQJHPD\EHH[FHHGHGLQWKHKLJKHVWRUGHUVHTXHQFH
'HFLPDOUHSUHVHQWDWLRQ IRUPDWWHG
'D\V
'HFLPDOGLJLWVWULQJ 'HFLPDOGLJLWVWULQJ G
KRXUV
'HFLPDOGLJLWVWULQJ 'HFLPDOGLJLWVWULQJ K
0LQXWHV
'HFLPDOGLJLWVWULQJ 'HFLPDOGLJLWVWULQJ P
VHFRQGV
'HFLPDOGLJLWVWULQJ 'HFLPDOGLJLWVWULQJ V
0LOOLVHFRQGV
'HFLPDOGLJLWVWULQJ 'HFLPDOGLJLWVWULQJ PV
7KHHQWU\WRGHFLPDOUHSUHVHQWDWLRQLVRQO\SRVVLEOHIRUWLPHXQLWVWKDWDUHQRW\HWGHILQHG
A.1.3.3 Comments
Note the following when inserting comments:
• The character pairs (* and *) are ignored within the line comment.
• Nesting of block comments is not allowed as standard. However, you can nest line comments
in block comments.
With activated compiler option "Permit language extensions IEC61131 3rd edition" only: It is
possible to nest block comments.
• You can use the complete extended ASCII character set in comments.
• Comments are not allowed in formatted (lexical) rules.
&RPPHQW IRUPDWWHG
/LQHFRPPHQW
%ORFNFRPPHQW
/LQHFRPPHQW IRUPDWWHG
&DUULDJH5HWXUQ
(QWHURU5HWXUQNH\
%ORFNFRPPHQW IRUPDWWHG
&KDUDFWHUV
3DUWVRIWKH67VRXUFHILOH XQIRUPDWWHG
8QLW [SHU67VRXUFHILOH
,QWHUIDFH [SHU67VRXUFHILOH
,PSOHPHQWDWLRQ [SHU67VRXUFHILOH
8VHUGHILQHGGDWDW\SH [HDFKSHULQWHUIDFHDQGLPSOHPHQWD
WLRQSURJUDPVHFWLRQ
)XQFWLRQ
Q[SHU67VRXUFHILOH
)XQFWLRQEORFN Q[SHU67VRXUFHILOH
3URJUDP Q[SHU67VRXUFHILOH
'HFODUDWLRQEORFN Q[SHU67VRXUFHILOH
6WDWHPHQW Q[SHU67VRXUFHILOH
1RWLFH7KHILJXUHVKRZVRQO\WKHRSWLRQVIRUGHILQLQJVRXUFHILOHVHFWLRQV
7KHKLHUDUFK\RIWKHVHFWLRQVFDQQRWEHVKRZQRQRQHOHYHOUHIHUWRWKHH[SODQDWLRQV
LQWKHWH[WIRUPRUHGHWDLOV
67VRXUFHILOH XQIRUPDWWHG
,PSOHPHQWDWLRQ
8QLWGHILQLWLRQ ,QWHUIDFHVHFWLRQ VHFWLRQ
8QLWGHILQLWLRQ IRUPDWWHG
8QLWLGHQWLILHU 'HYLFHW\SH
,GHQWLFDOWRWKHLGHQWLILHURIWKH67
VRXUFHILOH
,QWHUIDFHVHFWLRQ XQIRUPDWWHG
86(/,%OLEUDU\LGHQWLILHU$6QDPHVSDFH
86(3$&.$*(WHFKQRORJ\SDFNDJHLGHQWLILHU$6QDPHVSDFH
86(6XQLWGHVLJQDWLRQV
2EMHFWRULHQWHGQDPHVSDFHV!
8VHUGHILQHGGDWDW\SHV 8'7
8QLWYDULDEOHVJOREDOYDULDEOHEORFN
8QLWFRQVWDQWVJOREDOFRQVWDQWEORFN
5HWHQWLYHYDULDEOHEORFN
2EMHFWRULHQWHGLQWHUIDFHV!
)81&7,21IXQFWLRQGHVLJQDWLRQV!
)81&7,21B%/2&.IXQFWLRQEORFNGHVLJQDWLRQV!
352*5$0SURJUDPGHVLJQDWLRQV!
&/$66FODVVGHVLJQDWLRQ!!
328SURWRW\SHV
! 2QO\ZKHQFRPSLOHURSWLRQ3HUPLWREMHFWRULHQWHGSURJUDPPLQJLVDFWLYDWHG
! 2QO\DVRIYHUVLRQ9RIWKH6,027,21.HUQHO
DQGZKHQFRPSLOHURSWLRQ3HUPLWREMHFWRULHQWHGSURJUDPPLQJLVDFWLYDWHG
! 7KHVHVWDWHPHQWVDUHDOVRLQWHUSUHWHGDV328SURWRW\SHVZKHQWKH3HUPLWIRUZDUGGHFODUDWLRQV
FRPSLOHURSWLRQLVDFWLYDWHG
,PSOHPHQWDWLRQVHFWLRQ XQIRUPDWWHG
86(6XQLWGHVLJQDWLRQV
328SURWRW\SHV
2EMHFWRULHQWHGQDPHVSDFHV!
8VHUGHILQHGGDWDW\SHV 8'7
8QLWYDULDEOHVJOREDOYDULDEOHEORFNV
8QLWFRQVWDQWVJOREDOFRQVWDQWEORFNV
5HWHQWLYHXQLWYDULDEOHVUHWHQWLYHJOREDOYDULDEOHEORFNV
)XQFWLRQV
)XQFWLRQEORFNV
([SUHVVLRQV
3URJUDPV
&ODVVHV!
2EMHFWRULHQWHGLQWHUIDFHV!
! 2QO\ZKHQFRPSLOHURSWLRQ3HUPLWREMHFWRULHQWHGSURJUDPPLQJLVDFWLYDWHG
! 2QO\DVRIYHUVLRQ9RIWKH6,027,21.HUQHO
DQGZKHQFRPSLOHURSWLRQ3HUPLWREMHFWRULHQWHGSURJUDPPLQJLVDFWLYDWHG
328SURWRW\SHV XQIRUPDWWHG
328LGHQWLILHU
)81&7,21B%/2&. ,GHQWLILHU
)81&7,21 ,GHQWLILHU
7<3( (1'B7<3(
352*5$0 ,GHQWLILHU
([SUHVVLRQ XQIRUPDWWHG
([SUHVVLRQLGHQWLILHU
(;35(66,21 ,GHQWLILHU
([SUHVVLRQGHFODUDWLRQ 6WDWHPHQW
VHFWLRQ VHFWLRQ (1'B(;35(66,21
1RWHWKDWDQH[SUHVVLRQRIWKH%22/GDWDW\SHPXVWEHDVVLJQHGWRWKHH[SUHVVLRQ
LGHQWLILHULQWKHVWDWHPHQWVHFWLRQ
)XQFWLRQ XQIRUPDWWHG
)XQFWLRQLGHQWLILHU
92,'
)81&7,21 ,GHQWLILHU
'DWDW\SH
)& 6WDWHPHQW
'HFODUDWLRQVHFWLRQ VHFWLRQ (1'B)81&7,21
)XQFWLRQEORFN XQIRUPDWWHG
)XQFWLRQEORFNLGHQWLILHU
)81&7,21B%/2&. ,GHQWLILHU
)% 6WDWHPHQW
'HFODUDWLRQVHFWLRQ VHFWLRQ (1'B)81&7,21B%/2&.
3URJUDP XQIRUPDWWHG
3URJUDPLGHQWLILHU
352*5$0 ,GHQWLILHU
3URJUDPGHFODUDWLRQVHFWLRQ 6WDWHPHQW
VHFWLRQ (1'B352*5$0
&ODVV XQIRUPDWWHG
$%675$&7
),1$/ &ODVVLGHQWLILHU
&/$66 ,GHQWLILHU
%DVHFODVVLGHQWLILHU
(;7(1'6 &ODVVLGHQWLILHU
6WUXFWXUHLQLWLDOL]DWLRQOLVW
,03/(0(176 ,QWHUIDFHLGHQWLILHU
&ODVV
'HFODUDWLRQVHFWLRQ 0HWKRG (1'B&/$66
2QO\DVRI9HUVLRQ9RIWKH6,027,21.HUQHO
DQGZLWKFRPSLOHURSWLRQಯ3HUPLWREMHFWRULHQWHGSURJUDPPLQJರ
0HWKRGLQFODVV XQIRUPDWWHG
),1$/
$FFHVVLGHQWLILHU
0(7+2' &ODVV
$%675$&7
0HWKRG
29(55,'(
LGHQWLILHU 92,'
,GHQWLILHU
'DWDW\SH
0HWKRG 6WDWHPHQW
'HFODUDWLRQVHFWLRQ VHFWLRQ (1'B0(7+2'
2QO\DVRI9HUVLRQ9RIWKH6,027,21.HUQHO
DQGZLWKFRPSLOHURSWLRQಯ3HUPLWREMHFWRULHQWHGSURJUDPPLQJರ
1RWHIRUPHWKRGVZLWKGDWDW\SH QRW92,' 7KHUHWXUQYDOXHRIWKHPHWKRGLGHQWLILHUPXVWEH
DVVLJQHGLQWKHVWDWHPHQWVHFWLRQ
&ODVVDFFHVVLGHQWLILHU XQIRUPDWWHG
38%/,&
3527(&7('
35,9$7(
,17(51$/
2QO\DVRIYHUVLRQ9RIWKH6,027,21.HUQHO
DQGZLWKFRPSLOHURSWLRQ3HUPLWREMHFWRULHQWHGSURJUDPPLQJ
2EMHFWRULHQWHGLQWHUIDFH XQIRUPDWWHG
,QWHUIDFHLGHQWLILHU
,17(5)$&( ,GHQWLILHU
%DVHLQWHUIDFHLGHQWLILHU
(;7(1'6 ,QWHUIDFHLGHQWLILHU
0HWKRGSURWRW\SH (1'B,17(5)$&(
2QO\DVRI9HUVLRQ9RIWKH6,027,21.HUQHO
DQGZLWKFRPSLOHURSWLRQಯ3HUPLWREMHFWRULHQWHGSURJUDPPLQJರ
0HWKRGSURWRW\SH XQIRUPDWWHG
0HWKRG
LGHQWLILHU 92,'
0(7+2' ,GHQWLILHU
'DWDW\SH
0HWKRGSDUDPHWHUEORFN (1'B0(7+2'
2QO\DVRIYHUVLRQ9RIWKH6,027,21.HUQHO
DQGZLWKFRPSLOHURSWLRQ3HUPLWREMHFWRULHQWHGSURJUDPPLQJ
)XQFWLRQEORFNVZLWKPHWKRGV XQIRUPDWWHG
)XQFWLRQEORFNLGHQWLILHU
)%
)81&7,21B%/2&. ,GHQWLILHU 'HFODUDWLRQVHFWLRQ
6WDWHPHQW
0HWKRGVLQ)% VHFWLRQ (1'B)81&7,21B%/2&.
2QO\ZLWKFRPSLOHURSWLRQ3HUPLWREMHFWRULHQWHGSURJUDPPLQJರ
0HWKRGVLQ)% XQIRUPDWWHG
0(7+2' )%DFFHVVLGHQWLILHU
0HWKRGLGHQWLILHU 92,'
,GHQWLILHU
'DWDW\SH
0HWKRG 6WDWHPHQW
'HFODUDWLRQVHFWLRQ VHFWLRQ (1'B0(7+2'
2QO\ZLWKFRPSLOHURSWLRQ3HUPLWREMHFWRULHQWHGSURJUDPPLQJರ
1RWHIRUPHWKRGVZLWKGDWDW\SH QRW92,' 7KHUHWXUQYDOXHRIWKHPHWKRGLGHQWLILHUPXVWEH
DVVLJQHGLQWKHVWDWHPHQWVHFWLRQ
)%DFFHVVLGHQWLILHU XQIRUPDWWHG
38%/,&
35,9$7(
,17(51$/
2QO\ZLWKFRPSLOHURSWLRQ3HUPLWREMHFWRULHQWHGSURJUDPPLQJ
([SUHVVLRQGHFODUDWLRQVHFWLRQ XQIRUPDWWHG
&RQVWDQWEORFN !
7HPSRUDU\YDULDEOHEORFN)&PHWKRG !
-XPSODEHOGHFODUDWLRQ !
!7KLVEORFNLVRQO\SHUPLWWHGDVRIYHUVLRQ9RIWKH6,027,21.HUQHO
!7KLVEORFNPD\EHXVHGPXOWLSOHWLPHVLQWKHGHFODUDWLRQVHFWLRQ
!7KLVEORFNPD\EHXVHGRQO\RQFHLQWKHGHFODUDWLRQVHFWLRQ
)&GHFODUDWLRQVHFWLRQ XQIRUPDWWHG
&RQVWDQWEORFN !
)&SDUDPHWHUEORFN !
7HPSRUDU\YDULDEOHEORFN)&PHWKRG !
-XPSODEHOGHFODUDWLRQ !
! 7KLVEORFNPD\EHXVHGPXOWLSOHWLPHVLQWKHGHFODUDWLRQVHFWLRQ
! 7KLVEORFNPD\EHXVHGRQO\RQFHLQWKHGHFODUDWLRQVHFWLRQ
! 7KLVEORFNPD\EHXVHGPXOWLSOHWLPHVLQWKHGHFODUDWLRQVHFWLRQLI
WKHFRPSLOHURSWLRQ3HUPLWODQJXDJHH[WHQVLRQV,(&UGbHGLWLRQLVDFWLYDWHG
)%GHFODUDWLRQVHFWLRQ XQIRUPDWWHG
&RQVWDQWEORFN !
)%SDUDPHWHUEORFN !
7HPSRUDU\YDULDEOHEORFNLQ)%SURJUDP !
-XPSODEHOGHFODUDWLRQ !
! 7KLVEORFNPD\EHXVHGPXOWLSOHWLPHVLQWKHGHFODUDWLRQVHFWLRQ
! 7KLVEORFNPD\EHXVHGRQO\RQFHLQWKHGHFODUDWLRQVHFWLRQ
! 7KLVEORFNPD\EHXVHGPXOWLSOHWLPHVLQWKHGHFODUDWLRQVHFWLRQLI
WKHFRPSLOHURSWLRQ3HUPLWREMHFWRULHQWHGSURJUDPPLQJLVDFWLYDWHG
! 7KLVEORFNPD\EHXVHGPXOWLSOHWLPHVLQWKHGHFODUDWLRQVHFWLRQLI
WKHFRPSLOHURSWLRQ3HUPLWODQJXDJHH[WHQVLRQV,(&UGbHGLWLRQLVDFWLYDWHG
! 2QO\DVRIYHUVLRQ9RIWKH6,027,21.HUQHO
3URJUDPGHFODUDWLRQVHFWLRQ XQIRUPDWWHG
&RQVWDQWEORFN !
6WDWLFYDULDEOHEORFN !
7HPSRUDU\YDULDEOHEORFNLQ)%SURJUDP !
-XPSODEHOGHFODUDWLRQ !
! 7KLVEORFNPD\EHXVHGPXOWLSOHWLPHVLQWKHGHFODUDWLRQVHFWLRQ
! 7KLVEORFNPD\EHXVHGRQO\RQFHLQWKHGHFODUDWLRQVHFWLRQ
! 2QO\DVRIYHUVLRQ9RIWKH6,027,21.HUQHO
&ODVVGHFODUDWLRQVHFWLRQ XQIRUPDWWHG
8VHUGHILQHGGDWDW\SHV 8'7
&RQVWDQWEORFN
5HWHQWLYHORFDOYDULDEOHEORFN
6WDWLFYDULDEOHEORFN
2QO\DVRIYHUVLRQ9RIWKH6,027,21.HUQHO
DQGZLWKFRPSLOHURSWLRQ3HUPLWREMHFWRULHQWHGSURJUDPPLQJ
7KLVEORFNVPD\EHXVHGPXOWLSOHWLPHVLQWKHGHFODUDWLRQVHFWLRQ
0HWKRGGHFODUDWLRQVHFWLRQ XQIRUPDWWHG
&RQVWDQWEORFN !
0HWKRGSDUDPHWHUEORFN !
7HPSRUDU\YDULDEOHEORFN)&PHWKRG !
-XPSODEHOGHFODUDWLRQ !
2QO\ZLWKFRPSLOHURSWLRQ3HUPLWREMHFWRULHQWHGSURJUDPPLQJ
! 7KLVEORFNPD\EHXVHGPXOWLSOHWLPHVLQWKHGHFODUDWLRQVHFWLRQ
! 7KLVEORFNPD\EHXVHGRQO\RQFHLQWKHGHFODUDWLRQVHFWLRQ
! 7KLVEORFNPD\EHXVHGPXOWLSOHWLPHVLQWKHGHFODUDWLRQVHFWLRQLI
WKHFRPSLOHURSWLRQ3HUPLWODQJXDJHH[WHQVLRQV,(&UGbHGLWLRQLVDFWLYDWHG
Constant blocks
&RQVWDQWEORFN XQIRUPDWWHG
8QLWFRQVWDQWVJOREDOFRQVWDQWEORFN XQIRUPDWWHG
Variable blocks
8QLWYDULDEOHVJOREDOYDULDEOHEORFN XQIRUPDWWHG
9DULDEOHGHFODUDWLRQ
6\PEROLF3,DFFHVV
9$5B*/2%$/ (1'B9$5
,QVWDQFHGHFODUDWLRQRI)%
,QVWDQFHGHFODUDWLRQRIDFODVV !
! 2QO\DVRIYHUVLRQ9RIWKH6,027,21.HUQHO
5HWHQWLYHXQLWYDULDEOHVUHWHQWLYHJOREDOYDULDEOHEORFN XQIRUPDWWHG
9DULDEOHGHFODUDWLRQ
,QVWDQFHGHFODUDWLRQRIDFODVV !
! 2QO\DVRIYHUVLRQ9RIWKH6,027,21.HUQHO
7HPSRUDU\YDULDEOHEORFN)&PHWKRG XQIRUPDWWHG
9$5
9DULDEOHGHFODUDWLRQ (1'B9$5
9$5B7(03
7HPSRUDU\YDULDEOHEORFNLQ)%DQGSURJUDP XQIRUPDWWHG
6WDWLFYDULDEOHEORFN XQIRUPDWWHG
!!
&ODVVDFFHVVLGHQWLILHU ! 29(55,'(
9$5
)%DFFHVVLGHQWLILHU !
9DULDEOHGHFODUDWLRQ
6\PEROLF3,DFFHVV
(1'B9$5
,QVWDQFHGHFODUDWLRQRI)%
,QVWDQFHGHFODUDWLRQRIDFODVV !
5HWHQWLYHORFDOYDULDEOHVUHWHQWLYHORFDOYDULDEOHEORFN XQIRUPDWWHG
!!
!!
35,9$7( 29(55,'(
9$55(7$,1
!
3527(&7('
9DULDEOHGHFODUDWLRQ
,QVWDQFHGHFODUDWLRQRI)% (1'B9$5
,QVWDQFHGHFODUDWLRQRIDFODVV
2QO\DVRIYHUVLRQ9RIWKH6,027,21.HUQHO
! 2QO\ZLWKLQFODVVHVDQG
ZLWKFRPSLOHURSWLRQಯ3HUPLWREMHFWRULHQWHGSURJUDPPLQJರ
! 2QO\ZLWKLQIXQFWLRQEORFNV )% DQG
ZLWKFRPSLOHURSWLRQಯ3HUPLWREMHFWRULHQWHGSURJUDPPLQJರ
Parameter fields
)%SDUDPHWHUEORFN XQIRUPDWWHG
9$5B,1387
)RUPDOSDUDPHWHU
)RULQSXWSDUDPHWHU
9DULDEOHGHFODUDWLRQ
9$5B287387 (1'B9$5
)RURXWSXWSDUDPHWHU
9DULDEOHGHFODUDWLRQ
1RLQLWLDOL]DWLRQ
9$5B,1B287 ,QVWDQFHGHFODUDWLRQ
)RULQRXWSDUDPHWHU
'HFODUDWLRQRIDQ
$55$<ZLWK
G\QDPLFOHQJWK
2QO\DVRI9HUVLRQ9
RIWKH6,027,21.HUQHO
7KH9$5B,13879$5B287387DQG9$5B,1B287NH\ZRUGVPD\EHXVHGMXVWRQFHLQWKH
GHFODUDWLRQVHFWLRQ
9DULDEOHGHFODUDWLRQ
9$5B,1387
'HFODUDWLRQRIDQ
)RULQSXWSDUDPHWHU $55$<ZLWK
G\QDPLFOHQJWK
2QO\DVRI9HUVLRQ9
RIWKH6,027,21.HUQHO
9DULDEOHGHFODUDWLRQ
1RLQLWLDOL]DWLRQ
9$5B,1B287 ,QVWDQFHGHFODUDWLRQ
)RULQRXWSDUDPHWHU
'HFODUDWLRQRIDQ
$55$<ZLWK
G\QDPLFOHQJWK
2QO\DVRI9HUVLRQ9
RIWKH6,027,21.HUQHO
7KH9$5B,13879$5B287387DQG9$5B,1B287NH\ZRUGVPD\EHXVHGMXVWRQFHLQWKH
GHFODUDWLRQVHFWLRQ
0HWKRGSDUDPHWHUEORFN XQIRUPDWWHG
)RUPDOSDUDPHWHU
9DULDEOHGHFODUDWLRQ
9$5B,1387
'HFODUDWLRQRIDQ
)RULQSXWSDUDPHWHU $55$<ZLWK
G\QDPLFOHQJWK
9DULDEOHGHFODUDWLRQ
1RLQLWLDOL]DWLRQ
9$5B,1B287 ,QVWDQFHGHFODUDWLRQ
)RULQRXWSDUDPHWHU
'HFODUDWLRQRIDQ
$55$<ZLWK
G\QDPLFOHQJWK
7KH9$5B,13879$5B287387DQG9$5B,1B287NH\ZRUGVPD\EHXVHGMXVWRQFHLQWKH
GHFODUDWLRQVHFWLRQ
2QO\ZLWKFRPSLOHURSWLRQ3HUPLWREMHFWRULHQWHGSURJUDPPLQJ
:LWKPHWKRGVLQFODVVHV2QO\DVRIYHUVLRQ9RIWKH6,027,21.HUQHO
'HFODUDWLRQRIDQ$55$<ZLWKDG\QDPLFOHQJWK XQIRUPDWWHG
,GHQWLILHU $55$< > @ 2) 'DWDW\SH
,GHQWLILHURIWKH
)RUPDOSDUDPHWHU
LQ)%RU)&
2QO\DVRI9HUVLRQ9RIWKH6,027,21.HUQHO
Jump labels
-XPSODEHOGHFODUDWLRQ XQIRUPDWWHG
-XPSODEHO
/$%(/ ,GHQWLILHU (1'B/$%(/
Declarations
&RQVWDQWGHFODUDWLRQ XQIRUPDWWHG
'HVLJQDWLRQRIWKH
FRQVWDQWV $55$<GDWDW\SH
VSHFLILFDWLRQ
9DULDEOHVGHFODUDWLRQ XQIRUPDWWHG
'HVLJQDWLRQRIWKH
YDULDEOHRUWKHIRUPDO $55$<GDWDW\SH
SDUDPHWHU VSHFLILFDWLRQ
LQ)%RU)&
6\PEROLF3,DFFHVV XQIRUPDWWHG
,QWHJHUV
GDWDW\SH
DEVROXWH
,GHQWLILHU $7
3,DFFHVV
%LWGDWDW\SH
:LGWKRIWKHGHFODUHGGDWDW\SH
PXVWFRUUHVSRQGZLWKWKHZLGWKRIWKHDEVROXWH
LGHQWLILHU
,QVWDQFHGHFODUDWLRQRI)% XQIRUPDWWHG
)XQFWLRQEORFN
,GHQWLILHU
LGHQWLILHU
,QVWDQFHLGHQWLILHU
)%$55$<
VSHFLILFDWLRQ
,QLWLDOL]DWLRQ
6WUXFWXUHLQLWLDOL]DWLRQOLVW
,QLWLDOL]DWLRQRQO\SRVVLEOHLIIXQFWLRQEORFNLQ67VRXUFHILOHZLWKIROORZLQJFRPSLOHURSWLRQ
3HUPLWREMHFWRULHQWHGSURJUDPPLQJ
)XQFWLRQEORFNVPXVWDOUHDG\H[LVW
:LWKRXWLQLWLDOL]DWLRQDQGZKHQWKH3HUPLWIRUZDUGGHFODUDWLRQVFRPSLOHURSWLRQLVHQDEOHGWKHIROORZLQJDSSOLHV
7KHSUHYLRXVGHILQLWLRQRID328SURWRW\SHLVVXIILFLHQW
)%$55$<VSHFLILFDWLRQ XQIRUPDWWHG
,QGH[VSHFLILFDWLRQ
,QLWLDOL]DWLRQ ,QLWLDOL]DWLRQ
$55$< > @
H[SUHVVLRQ H[SUHVVLRQ
',17GDWDW\SH ',17GDWDW\SH
2) )XQFWLRQEORFNLGHQWLILHU
,QVWDQFHGHFODUDWLRQRIDFODVV XQIRUPDWWHG
,GHQWLILHU &ODVVLGHQWLILHU
,QVWDQFHLGHQWLILHU
&ODVV$55$<
VSHFLILFDWLRQ
,QLWLDOL]DWLRQ
6WUXFWXUHLQLWLDOL]DWLRQOLVW
6,027,21.HUQHODVRIYHUVLRQ9
&ODVVHVPXVWDOUHDG\H[LVW
:LWKRXWLQLWLDOL]DWLRQDQGZKHQWKH3HUPLWIRUZDUGGHFODUDWLRQVFRPSLOHURSWLRQLVHQDEOHGWKHIROORZLQJDSSOLHV
7KHSUHYLRXVGHILQLWLRQRID328SURWRW\SHLVVXIILFLHQW
Initialization
,QLWLDOL]DWLRQ XQIRUPDWWHG
&RQVWDQWH[SUHVVLRQ
,QLWLDOL]DWLRQRIHOHPHQWDU\GDWDW\SHV
> $UUD\LQLWLDOL]DWLRQOLVW @
,QLWLDOL]DWLRQRIDUUD\V
6WUXFWXUHLQLWLDOL]DWLRQOLVW
,QLWLDOL]DWLRQRILQGLYLGXDOFRPSRQHQWVZLWKLQVWUXFWXUHV
&RQVWDQWH[SUHVVLRQ XQIRUPDWWHG
&RQVWDQW
%DVLF
ORJLFRSHUDWRU
&RQVWDQW &RQVWDQW
H[SUHVVLRQ &RPSDULVRQRSHUDWRU H[SUHVVLRQ
%DVLF
DULWKPHWLFRSHUDWRU
&RQVWDQWH[SUHVVLRQ
8QDU\PLQXV
127
1HJDWLRQ
'DWDW\SH
FRQYHUVLRQIXQFWLRQ
&RQVWDQWH[SUHVVLRQ
52/
525
6+/
&RQVWDQW &RQVWDQW
6+5
H[SUHVVLRQ H[SUHVVLRQ
$UUD\LQLWLDOL]DWLRQOLVW XQIRUPDWWHG
,QLWLDOL]DWLRQ
,QLWLDOL]DWLRQ
'HFLPDOGLJLWVWULQJ
5HSHDWIDFWRU $UUD\LQLWLDOL]DWLRQOLVW
6WUXFWXUHLQLWLDOL]DWLRQOLVW XQIRUPDWWHG
,GHQWLILHU ,QLWLDOL]DWLRQ
&RPSRQHQWLGHQWLILHU
'DWDW\SH XQIRUPDWWHG
(OHPHQWDU\GDWDW\SH
8'7LGHQWLILHU
8VHUGHILQHGGDWDW\SHVಥ8'7
6\VWHPGDWDW\SH
72GDWDW\SH
(OHPHQWDU\GDWDW\SH XQIRUPDWWHG
%LWGDWDW\SH
1XPHULFGDWDW\SH
7LPHW\SH
6WULQJGDWDW\SH
%LWGDWDW\SH XQIRUPDWWHG
%22/ %LW
%<7( %\WH
:25' :RUG
':25' 'RXEOHZRUG
1XPHULFGDWDW\SH XQIRUPDWWHG
,QWHJHUGDWDW\SH
)ORDWLQJSRLQWQXPEHUGDWDW\SH
,QWHJHUGDWDW\SH XQIRUPDWWHG
6,17 6KRUWLQWHJHU
,17 ,QWHJHU
',17 'RXEOHSUHFLVLRQLQWHJHU
86,17 8QVLJQHGVKRUWLQWHJHU
8,17 8QVLJQHGLQWHJHU
8',17 8QVLJQHGLQWHJHUZLWKGRXEOHSUHFLVLRQ
)ORDWLQJSRLQWQXPEHUGDWDW\SH XQIRUPDWWHG
5($/ )ORDWLQJSRLQWQXPEHU
/5($/ /RQJIORDWLQJSRLQWQXPEHU
7LPHW\SH XQIRUPDWWHG
7,0( 7LPH
'$7( 'DWH
7,0(B2)B'$<
7LPHRIGD\
72'
'$7(B$1'B7,0(
'DWHDQGWLPH
'7
6WULQJGDWDW\SH XQIRUPDWWHG
675,1*
> &RQVWDQWH[SUHVVLRQ @
&KDUDFWHUVWULQJOHQJWK
,17GDWDW\SHYDOXHWR
'HIDXOW
8VHUGHILQHGGDWDW\SHVದ8'7 XQIRUPDWWHG
7<3( ,GHQWLILHU
8'7LGHQWLILHU
'DWDW\SH
$55$<GDWDW\SH
VSHFLILFDWLRQ ,QLWLDOL]DWLRQ (1'B7<3(
(QXPHUDWLRQGDWDW\SH
VSHFLILFDWLRQ
6758&7GDWDW\SH
VSHFLILFDWLRQ
$55$<GDWDW\SHVSHFLILFDWLRQ XQIRUPDWWHG
,QGH[VSHFLILFDWLRQ
'DWDW\SHVSHFLILFDWLRQ
2) 'DWDW\SH
%DVLFGDWDW\SH
(QXPHUDWRUGDWDW\SHVSHFLILFDWLRQ XQIRUPDWWHG
(QXPHUDWLRQHOHPHQW
,GHQWLILHU
6758&7GDWDW\SHVSHFLILFDWLRQ XQIRUPDWWHG
6758&7 &RPSRQHQWGHFODUDWLRQ
&RPSRQHQWGHFODUDWLRQ
6758&7 ZLWKUHODWLYHDGGUHVV
&RPSRQHQWGHFODUDWLRQ
6758&729(5/$3 ZLWKUHODWLYHDGGUHVV
(1'B6758&7
&RPSRQHQWGHFODUDWLRQ XQIRUPDWWHG
,GHQWLILHURIWKHFRPSR
QHQW $55$<GDWDW\SH
VSHFLILFDWLRQ
&RPSRQHQWGHFODUDWLRQZLWKUHODWLYHDGGUHVV XQIRUPDWWHG
,GHQWLILHU $7 5HODWLYHDGGUHVV
,GHQWLILHURIWKHFRPSRQHQW
'DWDW\SH ,QLWLDOL]DWLRQ
$55$<GDWDW\SH
VSHFLILFDWLRQ
5HODWLYHDGGUHVV XQIRUPDWWHG
% 'HFLPDOQXPEHU
'HFLPDOQXPEHU
6WDWHPHQWVHFWLRQ XQIRUPDWWHG
-XPSODEHO
,GHQWLILHU
6WDWHPHQW
6WDWHPHQW XQIRUPDWWHG
9DOXHDVVLJQPHQWV
6XEURXWLQHH[HFXWLRQ
&RQWUROVWDWHPHQW
9DOXHDVVLJQPHQW XQIRUPDWWHG
9DULDEOHRIWKH
HOHPHQWDU\GDWDW\SH
9DULDEOHRIWKH
HQXPHUDWRUGDWDW\SH
$UUD\YDULDEOH
6WUXFWXUHGYDULDEOH
$EVROXWH3,DFFHVV ([SUHVVLRQ
2XWSXWVRQO\
([WHUQDOWDJ
$FFHVVWR)%LQSXWSDUDPHWHUV !
'LUHFWELWDFFHVV !
!2QO\IRUDFWLYDWHG3HUPLWODQJXDJHH[WHQVLRQVFRPSLOHURSWLRQ
([SUHVVLRQ XQIRUPDWWHG
2SHUDQG
%DVLF
ORJLFRSHUDWRU
%DVLFDULWKPHWLF
RSHUDWRU
3RZHU ([SRQHQW
([SUHVVLRQ ([SUHVVLRQ
([SUHVVLRQ
8QDU\PLQXV
127
1HJDWLRQ
([SUHVVLRQ
Operands
2SHUDQG XQIRUPDWWHG
9DULDEOHRIWKHHOHPHQWDU\GDWDW\SH
9DULDEOHRIWKHHQXPHUDWRUGDWDW\SH
$UUD\YDULDEOH
6WUXFWXUHGYDULDEOH
$EVROXWH3,DFFHVV
,QSXWVDQGRXWSXWV
&RQVWDQW
)&FDOO
$FFHVVWR)%RXWSXWSDUDPHWHUV
([WHUQDOWDJ
$FFHVVWR)%LQSXWSDUDPHWHUV !
'LUHFWELWDFFHVV !
!2QO\IRUDFWLYDWHG3HUPLWODQJXDJHH[WHQVLRQVFRPSLOHURSWLRQ
6WUXFWXUHGYDULDEOH XQIRUPDWWHG
6WDUWRILGHQWLILHULVYDULDEOHQDPHRU
SDUDPHWHUQDPHFRPSRQHQWQDPHDIWHUWKHGRW
,GHQWLILHU
6LPSOHDUUD\
$EVROXWH3,$FFHVV IRUPDWWHG
%22/
; 1XPEHU 1XPEHU
,QSXW
%<7(
, % 1XPPHU
:25'
4 : 1XPEHU
2XWSXW
':25'
' 1XPEHU
&RQVWDQW XQIRUPDWWHG
/LWHUDO
,GHQWLILHURIWKHFRQVWDQWV
(QXPHUDWRUYDOXH
(QXPHUDWRUYDOXH IRUPDWWHG
(QXPHUDWRUHOHPHQW
8'7LGHQWLILHU
(QXPHUDWRUGDWDW\SH
([WHUQDOYDULDEOH XQIRUPDWWHG
6\VWHPYDULDEOHRUFRQILJXUDWLRQGDWDLWHP
RIWKHGHYLFH
6\VWHPYDULDEOHRUFRQILJXUDWLRQGDWDLWHP
RIDWHFKQRORJ\REMHFW
,2YDULDEOH
*OREDOGHYLFHYDULDEOH
$FFHVVWR)%RXWSXWSDUDPHWHU IRUPDWWHG
,GHQWLILHURIWKH
,GHQWLILHURIWKH)%LQVWDQFH
RXWSXWSDUDPHWHU
$FFHVVWR)%LQSXWSDUDPHWHUV IRUPDWWHG
2QO\IRUDFWLYDWHG3HUPLWODQJXDJHH[WHQVLRQVFRPSLOHURSWLRQ
,GHQWLILHURIWKH
,GHQWLILHURIWKH)%LQVWDQFH
LQSXWSDUDPHWHUV
'LUHFWELWDFFHVV IRUPDWWHG
2QO\IRUDFWLYDWHG3HUPLWODQJXDJHH[WHQVLRQVFRPSLOHURSWLRQ
6LPSOHYDULDEOH
$UUD\YDULDEOH
6WUXFWXUHGYDULDEOH
([WHUQDOWDJ &RQVWDQW
'DWDW\SH$1<B,17
$FFHVVWR)%RXWSXWSDUDPHWHUV
$FFHVVWR)%LQSXWSDUDPHWHUV
3HUPLWWHGGDWDW\SHV
HDFK%<7(:25'':25'
Operators
%DVLFORJLFDORSHUDWRU XQIRUPDWWHG
$ULWKPHWLFRSHUDWRU XQIRUPDWWHG
%DVLFDULWKPHWLFRSHUDWRU
%DVLFDULWKPHWLFRSHUDWRU XQIRUPDWWHG
02'
5HODWLRQDORSHUDWRU XQIRUPDWWHG
! ! !
)%FDOO XQIRUPDWWHG
,GHQWLILHU
,QVWDQFHQDPH
,QVWDQFHQDPH ,QGH[
',17GDWDW\SH
)%SDUDPHWHU
)&FDOO XQIRUPDWWHG
6\VWHPIXQFWLRQLGHQWLILHU
72IXQFWLRQLGHQWLILHU )&PHWKRGSDUDPHWHU
)XQFWLRQLGHQWLILHU
&ODVVPHWKRGFDOO XQIRUPDWWHG
,QVWDQFHLGHQWLILHU
&ODVVLGHQWLILHU
7+,6
683(5
0HWKRGLGHQWLILHU )&PHWKRGSDUDPHWHU
2QO\DVRIYHUVLRQ9RIWKH6,027,21.HUQHO
DQGZLWKFRPSLOHURSWLRQ3HUPLWREMHFWRULHQWHGSURJUDPPLQJ
)%PHWKRGFDOO XQIRUPDWWHG
,QVWDQFHLGHQWLILHU
)%LGHQWLILHU
7+,6
0HWKRGLGHQWLILHU )&PHWKRGSDUDPHWHU
2QO\ZLWKFRPSLOHURSWLRQ3HUPLWREMHFWRULHQWHGSURJUDPPLQJ
)%SDUDPHWHU XQIRUPDWWHG
,QSXWDVVLJQPHQW
,QRXWDVVLJQPHQW
2XWSXWDVVLJQPHQW
)&PHWKRGSDUDPHWHU XQIRUPDWWHG
&DOOLQVKRUWIRUP
([SUHVVLRQ
IRULQSXWSDUDPHWHU
9DULDEOHLGHQWLILHU
IRULQRXWSDUDPHWHU
,QSXWDVVLJQPHQW
,QRXWDVVLJQPHQW
2XWSXWDVVLJQPHQW
,QSXWDVVLJQPHQW XQIRUPDWWHG
)RUPDOSDUDPHWHU $FWXDOSDUDPHWHUV
,GHQWLILHU ([SUHVVLRQ
,GHQWLILHURIWKH
LQSXWSDUDPHWHU
,QRXWDVVLJQPHQW XQIRUPDWWHG
)RUPDOSDUDPHWHU $FWXDOSDUDPHWHUV
,GHQWLILHU 9DULDEOHLGHQWLILHU
,GHQWLILHURIWKH 6LPSOHYDULDEOH
LQRXWSDUDPHWHU
2XWSXWDVVLJQPHQW XQIRUPDWWHG
)RUPDOSDUDPHWHU $FWXDOSDUDPHWHUV
,GHQWLILHU ! 9DULDEOHLGHQWLILHU
,GHQWLILHURIWKH 6LPSOHYDULDEOH
RXWSXWSDUDPHWHU
Branches
,)VWDWHPHQW XQIRUPDWWHG
&RQGLWLRQRIGDWDW\SH%22/
&RQGLWLRQRIGDWDW\SH%22/
'RQRWIRUJHWWRWHUPLQDWHWKH(1'B,)NH\ZRUGZLWKDVHPLFRORQ
&$6(VWDWHPHQW XQIRUPDWWHG
9DULDEOH
(QXPHUDWRUGDWDW\SH
'DWDW\SH$1<B,17
9DOXHOLVW 6WDWHPHQWVHFWLRQ
'RQRWIRUJHWWRWHUPLQDWHWKH(1'B&$6(NH\ZRUGZLWKDVHPLFRORQ
9DOXHOLVW XQIRUPDWWHG
&RQVWDQW
9DOXH
&RQVWDQW &RQVWDQW
9DOXH 9DOXH
9DOXH 9DOXH
5HSHWLWLRQVWDWHPHQWDQGMXPSVWDWHPHQW XQIRUPDWWHG
)25VWDWHPHQW
:+,/(VWDWHPHQW
5(3($7VWDWHPHQW
(;,7VWDWHPHQW
5(7851VWDWHPHQW
:$,7)25&21',7,21VWDWHPHQW
*272VWDWHPHQW
)25VWDWHPHQW XQIRUPDWWHG
9DULDEOHLGHQWLILHU
)25 ([SUHVVLRQ
6WDUWYDOXH
6LPSOHYDULDEOHGDWDW\SH
6,1786,17,178,17',17
(QGYDOXH ,QFUHPHQW
'RQRWIRUJHWWRWHUPLQDWHWKH(1'B)25NH\ZRUGZLWKDVHPLFRORQ
:+,/(VWDWHPHQW XQIRUPDWWHG
&RQGLWLRQRIGDWDW\SH%22/
6WDWHPHQWVHFWLRQ (1'B:+,/(
'RQRWIRUJHWWRWHUPLQDWHWKH(1'B:+,/(NH\ZRUGZLWKDVHPLFRORQ
5(3($7VWDWHPHQW XQIRUPDWWHG
([SUHVVLRQ (1'B5(3($7
&RQGLWLRQRIGDWDW\SH%22/
'RQRWIRUJHWWRWHUPLQDWHWKH(1'B5(3($7NH\ZRUGZLWKDVHPLFRORQ
(;,7VWDWHPHQW XQIRUPDWWHG
(;,7
5(7851VWDWHPHQW XQIRUPDWWHG
5(7851
:$,7)25&21',7,21VWDWHPHQW XQIRUPDWWHG
:$,7)25&21',7,21
([SUHVVLRQLGHQWLILHU )&SDUDPHWHU
&RQGLWLRQ 7KHFDOORIDQH[SUHVVLRQZLWKSDUDPHWHUVLV
1DPHRIDFRQVWUXFWGHFODUHGZLWK SHUPLWWHGRQO\DVRI9HUVLRQ9RIWKH
(;35(66,21 6,027,21NHUQHO
(GJHHYDOXDWLRQ
:,7+ ([SUHVVLRQ '2
%22/GDWDW\SH
758(5LVLQJHGJHRIWKHFRQGLWLRQLVHYDOXDWHG
)$/6(&RQGLWLRQLVHYDOXDWHGVWDWLFDOO\ GHIDXOWVHWWLQJ
6WDWHPHQWVHFWLRQ (1'B:$,7)25&21',7,21
'RQRWIRUJHWWRWHUPLQDWHWKH
(1'B:$,7)25&21',7,21NH\ZRUGZLWKDVHPLFRORQ
*272VWDWHPHQW
*272 -XPSODEHO
-XPSODEHOGHILQHGLQDVWDWHPHQWDQGRSWLRQDOO\
LQWKHMXPSODEHOGHFODUDWLRQ /$%(/
A.1.3.14 Pragmas
3UDJPD XQIRUPDWWHG
3UHSURFHVVRUVWDWHPHQW
^ $WWULEXWH `
1RQDVVLJQHGFRPSLOHUPHVVDJH
3UHSURFHVVRUVWDWHPHQW XQIRUPDWWHG
XQGHI ,GHQWLILHU
LIGHI ,GHQWLILHU
LIQGHI ,GHQWLILHU
HOVH
HQGLI
(DFKVWDWHPHQWPXVWEHJLQZLWKDQHZOLQHDQGHQGZLWKDOLQHEUHDN
7KHIROORZLQJRUGHUPXVWEHPDLQWDLQHGIRUWKHVWDWHPHQWVEHORZ
LIGHIದHOVH RSWLRQDO ದHQGLIRULIQGHIದHOVH RSWLRQDO ದHQGLI
7H[W&KDUDFWHUVHTXHQFHDQ\FKDUDFWHUVH[FHSWIRU
? %DFNVODVK VLQJOHTXRWH DQG GRXEOHTXRWH
7KHNH\ZRUGV86(686(/,%DQG86(3$&.$*(DUHQRWSHUPLWWHG
$WWULEXWH XQIRUPDWWHG
$WWULEXWHLGHQWLILHU $WWULEXWHYDOXH
,GHQWLILHU 7H[W
1RQDVVLJQHGFRPSLOHUPHVVDJH XQIRUPDWWHG
LQIRUPDWLRQ
ZDUQLQJ &KDUDFWHUVWULQJ
HUURU
7KHFORVLQJEUDFNHW DQGVHPLFRORQPXVWEHLQWKHVDPHOLQH
Error Description
1000 A read/write error has occurred on file access.
1001 Unable to load the file with the plain text error messages; cannot output error message texts. Please
refer to the online help using the error number!
1002 The created code could not be stored. Please close some windows and recompile!
1003 A read/write error has occurred on opening the file. Please close the application and try again!
1100 The option for stating a preprocessor definition contains an invalid identifier as the defined token. The
correct syntax of the call option is: -D identifier[=[text]]
Examples:
• -D myident // Definition of myident; this can be queried using #ifdef.
• -D myident= // myident is defined as empty character string
• -D "myident=This is a text" // myident is defined as character string 'This is a text'. The quotation
marks only have to be used if the replacement text contains a blank.
Error Description
2001 The specified character is illegal.
2002 The specified identifier contains illegal characters or combinations of characters. According to
IEC 61131, an identifier must start with a letter or an underscore. Any number of letters, digits, or
underscores may follow, but no more than one underscore in a row.
Error Description
3002 Keyword "IMPLEMENTATION" to identify the code section of the load unit is expected.
3003 The specified declaration block is not permitted in this context.
3004 The VAR, VAR_INPUT, VAR_OUTPUT, VAR_IN_OUT, VAR CONSTANT, VAR RETAIN variable declaration
blocks are permitted only once for each POU.
3005 TASK statement: The task link has already been made in the source file for the specified task. Further
task linking not possible.
3006 Incorrect stack size for task specified. Only positive integers are permitted.
3007 The specified identifier must be a task identifier; see task configuration.
3008 The specified identifier must be a program identifier. The declaration is made in the statement PRO‐
GRAM xx … END_PROGRAM.
3009 The EXPRESSION keyword must be followed by an identifier. The declaration is made in the statement
EXPRESSION xx … END_EXPRESSION.
3010 The specified identifier is not an EXPRESSION identifier. Check whether the declaration was made
using the statement EXPRESSION xx … END_EXPRESSION.
3011 The TASK statement is not permitted in the unit. Use the task configuration in the Workbench.
3012 The specified identifier has already been declared at another position. It cannot be used again as a
function identifier.
3013 The specified identifier has already been declared at another position. It cannot be used again as a
function block identifier.
3014 The UNIT statement is expected. The following forms are permissible:
• UNIT myunit;
• UNIT myunit : dvtype;
The UNIT statement is only required when compiling at the ASCII file level. It is optional when the
compiler is called from the Workbench.
3015 The source file is not ended with END_IMPLEMENTATION. Observe the structure for a source file!
3016 No further statements may be specified after keyword END_IMPLEMENTATION.
3017 The task declaration is not ended with END_TASK. Observe the structure for a source file!
3018 The POU declaration is not ended with END_FUNCTION, END_FUNCTION_BLOCK, or END_PROGRAM.
Observe the structure for a source file!
3019 A POU starting with keywords FUNCTION, FUNCTION_BLOCK, or PROGRAM is expected.
Error Description
3020 The task linking statement is expected. Structure: TASK tname … END_TASK;
3021 Methods can only be declared within classes, function blocks or interfaces. In this case, no further
statements may be inserted between the variable or data type declaration and the methods.
3022 The keyword INTERFACE is expected. See the structure for a source file.
3023 Keyword INTERFACE or IMPLEMENTATION is expected. See the structure for a source file.
3024 Syntax error in TASK statement. Correct structure: TASK tname … END_TASK;
3025 The specified identifier has already been declared at another position. It cannot be used again as a
program identifier.
3026 The WAITFORCONDITION statement cannot be used recursively. An attempt was made to use a
WAITFORCONDITION statement a second time within a WAITFORCONDITION statement. This is not
possible.
3027 An attempt was made to insert a WAITFORCONDITION statement within an EXPRESSION … END_EX‐
PRESSION block. This is not possible. The WAITFORCONDITION statement cannot be used within an
expression.
3028 The specified identifier has already been declared at another position. It cannot be used again as a
class identifier.
3029 The specified identifier has already been declared at another position. It cannot be used again as an
interface identifier.
3040 The specified identifier does not reference a namespace. It cannot be used in the USING statement.
3041 The specified identifier references a namespace that cannot be accessed. The namespace is declared
INTERNAL.
3042 The specified identifier references a namespace whose symbols could not be added to the current
context.
3043 The specified identifier references a namespace used system-internal. The identifier cannot be used
as user namespace.
3050 A class definition starting with the keyword CLASS is expected.
3051 The class definition does not end with END_CLASS. Observe the structure for a source file.
3052 A method definition starting with the keyword METHOD is expected.
3053 A method definition ends with END_METHOD. The method definition contains a syntax error. Observe
the structure for a source file.
3060 It is not permissible to use the specified access identifier at this position. For example, the access
identifier PROTECTED cannot be used within a FUNCTION_BLOCK.
3061 The specified method property cannot be accepted. For example, OVERRIDE, ABSTRACT or FINAL
cannot be declared for a method within a FUNCTION_BLOCK. OVERRIDE can be used for methods in
CLASS only if a base class exists in which the method has already been declared. In this case, OVER‐
RIDE cannot be declared for PRIVATE methods.
3062 If a method is overridden in a derived class, the access identifiers must be identical. Accordingly, a
PROTECTED method can only be overridden with PROTECTED and a PUBLIC method only with PUBLIC.
3063 If a method is to be overridden in a derived class, it is absolutely essential to specify the keyword
OVERRIDE in the method declaration.
3064 A method that is already defined in the base class cannot be overridden with "ABSTRACT".
3065 The keyword "OVERRIDE" is used in the declaration of the specified method. Since the method is not
defined in the base class, it is not permissible to specify this keyword.
3066 The method signatures are different in the specified classes. This is not compatible with override
mechanisms. For example, not all the parameters have the same name or they are defined in a
different sequence or they have different data types. Even the return value must have the same data
type.
Error Description
3067 If a method is declared with the PUBLIC identifier in a base class and a method of the same name is
required by an object-oriented interface to be implemented, this method must already be declared
PUBLIC in the base class. Methods in object-oriented interfaces are always PUBLIC. It is not possible to
change the access level for derivations.
3068 A method that is already defined in the base class and identified as "FINAL" cannot be overridden.
3069 A method cannot be declared ABSTRACT if the class is identified as FINAL. This combination cannot be
used because it is not possible to create any instances of this class.
3070 The specified data type cannot be used as a base class or a base interface. A CLASS can only ever be
derived from another CLASS. An INTERFACE can only ever be derived from another INTERFACE. It is not
possible to use mixtures of the two or to create derivations of other data types.
3071 The specified CLASS is identified with the keyword FINAL. A CLASS identified as FINAL cannot be used
as a base class.
3072 The specified CLASS is not exported in the interface section of the unit or stems from a unit imported
in the implementation section and cannot therefore be used as a base class of an exported CLASS.
• If the CLASS mentioned in the error message is declared in the current unit, it must be exported
in the interface section. CLASS <classname>; must be added there for this purpose.
• If it is a CLASS from another unit, the USES statement for this unit must be moved from the
implementation section to the interface section.
3073 The specified CLASS is identified with the keyword FINAL. However, the relevant class does not im‐
plement all of the methods (in base classes) identified as ABSTRACT and therefore cannot be instan‐
tiated. All ABSTRACT methods must either be implemented in the class, or the class cannot be iden‐
tified as FINAL.
3075 The specified identifier does not refer to an INTERFACE. Only INTERFACE identifiers can be used for
IMPLEMENTS.
3076 The specified INTERFACE is already implemented by the CLASS itself or by the base class(es). An
INTERFACE can only ever be implemented once by a CLASS.
3077 The specified INTERFACE is not exported in the interface section of the unit or stems from a unit
imported in the implementation section and cannot therefore be used at an exported CLASS (IM‐
PLEMENTS).
• If the INTERFACE mentioned in the error message is declared in the current unit, this declaration
must be included in the interface section. For this purpose, the entire declaration must be moved
to the interface section.
• If it is an INTERFACE from another unit, the USES statement for this unit must be moved from the
implementation section to the interface section.
3078 The specified INTERFACE is identified as a prototype. This is a programming error. Object-oriented
interfaces must always be defined in full.
3080 A method that is identified as PRIVATE cannot be declared as either ABSTRACT or FINAL. It must always
be implemented and no override mechanisms of any kind may be used.
3081 A method identifier is concealing a global identifier. This is only permissible if you activate the com‐
piler option 'Permit forward declarations'.
This ensures that calls of this method within the current CLASS or the current FUNCTION_BLOCK
without a preceding name refer to this method in all other methods.
The global identifier can no longer be accessed in the class because it is concealed by the method
identifier.
3100 The specified identifier is already defined and identified as public in the base class. It cannot be
declared again in the derived class.
Error Description
3150 The specified identifier has already been identified as public without INTERNAL being specified. It is
not possible to declare it INTERNAL again differently.
• If this situation occurs for a POU, this POU has already been identified as public without INTERNAL
in the INTERFACE section of the source. Add the INTERNAL identifier here to use the POU only
within the namespace.
• If this situation occurs for a namespace, an identically named namespace declaration from a
source or library imported via USES/USELIB may also be present. In this case, all declarations must
be either INTERNAL or not INTERNAL.
3151 The specified identifier has already been declared as INTERNAL in the current source or in an imported
source or library. The current declaration location, however, does not contain the INTERNAL identi‐
fier. Add INTERNAL for the declaration of the affected element.
3160 The specification of USING within a namespace is possible only for the first declaration within the
source and then applies to all blocks of the affected namespace. Move the USING statement to this
position.
3161 The specification of USING within a namespace or a POU is permissible only for namespaces not
contained in the declaration path. For example, a namespace NS1 or class, function, etc., declared in
NS1, may not itself contain any USING statement for NS1.
Table A-11 Declaration errors in data type declarations (4001 ... 4105)
Error Description
4001 The specified identifier is a standard function identifier that cannot be overwritten. Choose a different
identifier.
4002 The specified identifier has already been used. Use as a type identifier is not possible. Choose a
different identifier.
4003 The specified identifier has already been used. Use as a constant identifier is not possible. Choose a
different identifier.
4004 The specified initialization value has an incorrect format. Choose the initialization value that corre‐
sponds to the data type declaration.
4005 Syntax error in type declaration.
4006 Syntax error in the structure element specification in the structure declaration.
4007 Syntax error in declaration of an ARRAY data type.
4008 Syntax error in the identifier list specification. The identifiers must be separated by commas.
4009 The specified constant identifier has been assigned different values. This occurs when enumeration
data types are declared. Identical enumeration elements in different enumeration data types must be
located in the same position in the type declaration.
4010 The specified type identifier is not exported from the source file, although the POU in which it is used,
is exported. Use a different data type or declare the data type in the implementation section.
4011 A constant declaration requires the specification of an initialization value. Example: x : DINT := 5;
Error Description
4012 The specified data type cannot be used at the current position.
• When compiler option "Permit object-oriented programming" is not activated, type identifiers
declared locally in the POU may not be used with VAR_INPUT, VAR_OUTPUT, and VAR_IN_OUT
because they must also be known outside the POU for parameter transfer purposes.
• When compiler option "Permit object-oriented programming" is activated, the local data types
used for variables, parameters and other type declarations must have at least the same access
definition as that applicable at the point of use. For example, a local data type used at the transfer
parameters of a PROTECTED method must itself be declared as at least PROTECTED. PRIVATE data
types may only be used at local variables.
4013 The specified value is used several times in the enumeration data type. The values in the enumeration
data type must differ, however.
4020 The specified identifier has already been used as a data type identifier. However, the definition differs
from the current definition. This is not permitted.
Either choose a different identifier or adapt the type definitions. If this message appears on loading
libraries or technology packages, you can use namespaces here too (e.g. USELIB mylib AS Name‐
space_1).
4050 The data type or variable declaration creates a data type that is larger than the specified maximum
permissible data size.
4051 The variable declaration requires a memory area that is larger than the specified maximum permis‐
sible memory size.
4100 The definition of the structure component requires the specification of a user-defined offsets. If off‐
sets are explicitly specified in a structure definition, the offset specification is necessary for all structure
components. Furthermore, the keyword OVERLAP requires the explicit specification of the offsets.
4101 The offset specified in the definition of the structure component is not allowed because a component
without an explicitly specified offset has already been defined. If offsets are explicitly specified in a
structure definition, the offset specification is necessary for all structure components.
4102 The offset value specified in the definition of the structure component is not allowed. The value must
be a multiple of the number specified in the error message so that the data elements are in the correct
alignment.
4103 The offset values declared in the structure definition result in overlaps in the memory layout. This is
only allowed for identification of the structure as OVERLAP.
4105 The overlaps in the memory space are not allowed for the following data types: STRING, ANYOBJECT
and all TO-references derived thereof!
Error Description
5001 The specified constant value causes the value range to be exceeded and cannot be converted to the
requested type.
5002 The specified identifier has already been used. Use as a variable identifier is not possible. Choose a
different identifier.
5003 Syntax error in variable declaration.
5004 The specification of a data type is expected (simple or derived data type).
5005 The specified constant value has the wrong data type or causes the value range to be exceeded.
Error Description
5006 Check the number of initialization values for array initialization.
5007 Syntax error in the specification of the time and date literals.
5008 An instance of a function block or a class cannot be created at the specified position. For example,
instances of function blocks or classes cannot be created in functions or methods. The output pa‐
rameters (VAR_OUTPUT) of function blocks cannot be FB instances. Furthermore, classes and func‐
tion blocks that have been compiled under the compiler option "Permit object-oriented extensions"
cannot be used as input parameters (VAR_INPUT). It is not possible to copy classes and function blocks
of the kind that would be created if they were to be used in this way.
5009 The data type specified in the declaration cannot be applied to the variable with absolute address. An
integer or bit data type with matching bit width must be used.
5010 An attempt was made to assign a memory address to a variable. This is not possible at the specified
position. Use this assignment only within the VAR_GLOBAL declaration of a unit or within the VAR
declaration of a PROGRAM.
5011 The data type stated in the declaration cannot be accessed. It is not identified as public. The data type
must be declared as PUBLIC to allow external access and PROTECTED to allow access from a derived
class.
5012 The specified variables cannot be preassigned an initialization value.
5014 Incorrect initialization of a data structure. The initialization value for a component was specified more
than once.
5016 The initialization of variables and data types with technology objects defined in the project is not
possible. Technology objects are themselves variables and so cannot be used for the initialization.
5030 If it is necessary for variable declarations and POU implementations to be compiled in an optional
sequence in the implementation section of the source file, the compiler option "Permit forward
declarations" must be activated.
5040 The specified data type cannot be used within a declaration of retentive variables (VAR RETAIN,
VAR_GLOBAL RETAIN) because it already contains retentive elements (VAR RETAIN).
5041 The specified data type cannot be used within a declaration of retentive variables (VAR RETAIN,
VAR_GLOBAL RETAIN). The data type does not contain any information that can be backed up or
restored in the retentive memory. This message is issued, for example, if a class or a function block
does not contain instance data of any kind. This message is also output for variables of type INTER‐
FACE or with the data type of a technology object.
5042 The specified data type cannot be used within a declaration of retentive variables (VAR RETAIN,
VAR_GLOBAL RETAIN). The data type contains at least one system function block in the instance data
or is one itself. Since its information cannot be restored, this data type cannot be used in retentive
variable declarations.
5050 The class definition is identified as ABSTRACT. As a result, it is not possible to create any instances of
the relevant class.
5051 The specified method is identified as ABSTRACT and has not yet been implemented in a method
override mechanism. As a result, it is not possible to create any instances of the relevant class.
5052 The class in which a method is defined cannot be used as a variable or parameter at methods within
a class declaration. The same applies to function blocks and interfaces. In this case as well, the data
type of the function block or interface cannot be used within the declaration section as a data type
for variables or transfer parameters.
5053 A variable with the specified data type cannot be directly declared as an in/out parameter
(VAR_IN_OUT). Since dynamic type conversion is not supported for in/out parameter calls, it is not
possible, for example, to return an INTERFACE value or a reference to VAR_IN_OUT. Declare the
variable as either VAR_INPUT or VAR_OUTPUT.
5054 The specified class does not possess any instance data. As a result, it is not possible to create any
instances of the relevant class in the form of an ARRAY.
Error Description
5055 Initialization is only possible with the stated value at the specified position. For example, INTERFACE
variables that are defined within structures, methods or functions, or as VAR_TEMP or VAR_IN_OUT,
cannot be initialized with class instances. In this case, only NULL can be specified as a value. Refer‐
ences to technology objects that are defined within structures, methods or functions, or as VAR_TEMP
or VAR_IN_OUT, may only be initialized with the value TO#NIL.
5056 An initialization value may not contain a variable ARRAY index. An initialization value is not a constant.
5057 The instance variables of classes or function blocks of type INTERFACE may only be initialized with
exported global class instances. They can also be initialized with local class instances defined with the
class or the base classes. They cannot be initialized with class instances from the IMPLEMENTATION
area.
5058 Variables of type INTERFACE can only be initialized with the value NULL or with specified class in‐
stances. They cannot be initialized with the value of other variables of type INTERFACE.
5059 Method arguments of type INTERFACE cannot be initialized with class instances that are declared as
retentive local variables (VAR RETAIN) within the CLASS or the FUNCTION_BLOCK.
5070 The specified variable must be initialized. Please enter a valid initialization value. To do this, use the
valid syntax for instance initialization, i.e.: <var_name> : <var_type> := ( <element_name1> := <val‐
ue1>, <element_name2> := <value2> );
5071 The specified variable must be initialized. The variable must be declared before an initialization value
can be specified:
• either in a declaration section made accessible for initialization with OVERRIDE
• or in a declaration section identified as PUBLIC.
5072 The specified data type has been declared by "forward declaration". It is not possible to specify in‐
stance-specific initialization values at the stated position. If it is a variable in the implementation
section of the source file, check whether you can place it after the declaration of the relevant CLASS
or FUNCTION_BLOCK. It is not generally possible to initialize variables created by "forward declara‐
tion" in the interface section of the source file.
5080 It is not permissible to specify the initialization value " * " for the specified data type. Instance-specific
initialization can be forced using " * "' only for variables of data type INTERFACE or for the references
of technology objects.
5081 The initialization value " * " may only be specified for static variables of the CLASS and FUNC‐
TION_BLOCK. Furthermore, the declaration block that contains the variable(s) must permit initiali‐
zation by OVERRIDE or PUBLIC.
5090 An I/O reference can be declared only within VAR declaration blocks for classes and function blocks.
An attempt was made to declare such a variable in a different declaration section. This is not permit‐
ted.
5091 The specified data type is not permitted. Only the following data types can be used for I/O references:
• Integer data types, e.g. SINT, UINT
• Bit data types, e.g. BOOL, WORD
• Arrays of these elementary data types, other than arrays of the BOOL data type
Other data types cannot be used, because they cannot be specified in the address list.
5092 The I/O reference cannot be linked with the specified I/O variable. The I/O reference requires that the
affected variable must be read/write.
• I/O references declared with %I* can be linked with all variables of an appropriate data type from
the address list.
• I/O references declared with %Q* require a variable from the address list for an output. This
variable may not be identified with the attribute "read only".
5100 The specified variables cannot be preassigned an initialization value.
Error Description
5110 The following specifications containing the special character $… are permitted: $$, $', $L, $N, $P, $R,
$T. Moreover, the numeric value of a character can be stated using $xx, where xx stands for the two-
digit hexadecimal specification of the character code.
5111 The special character can only be specified via $... . This applies to: $L, $N, $P, $R, $T
5112 Multi-line character string constants are not permitted. To produce a new line in the output, use the
appropriate special character in the character string, e.g. $N, $R$L.
5120 No general reference can be generated to the specified data type. General references can be gener‐
ated for the following data types:
• Elementary data types
• User-defined data types
• Classes
• Function blocks with at least one static variable.
References to the following data types are not permitted:
• General references
• Object-oriented interfaces
• Technology object data types
• Function blocks without static variables.
5200 The data type definition contains a recursion, either directly or indirectly. This is not permitted. Do not
use this data type at the position concerned.
5201 The function call creates a recursion, either directly or indirectly. This is not permitted. Do not call the
function at the position concerned.
5500 The specified jump label identifier was already defined. Choose a different name.
5501 The specified jump label identifier has not been defined. Include this identifier in the LABEL declara‐
tion.
5502 The jump label identifier has been assigned more than once. However, each jump label can only be
used once as a label.
5503 The jump label is specified as a jump destination, but the associated label is missing.
5504 No jumps are possible in subordinate control structures (e.g. WHILE loops). The specified jump label
cannot be used at this position.
5505 No jumps are possible in subordinate control structures (e.g. WHILE loops). The specified jump des‐
tination cannot be reached.
5506 No jumps are possible in WAITFORCONDITION blocks. The specified jump label cannot be used at this
position.
5507 No jumps are possible in WAITFORCONDITION blocks. The specified jump destination cannot be
reached.
5509 Jump labels cannot be used within a CASE statement. The syntax does not allow any differentiation
between a jump label and the value list of the CASE statement.
Error Description
6001 Syntax error: A statement terminated with a semicolon is expected, e.g. a := b*c;
6002 Syntax error: An expression is expected, e.g. x < y .
6003 The specified identifier is no variable identifier. You must specify a variable identifier. Check whether
the indicated identifier is covered.
Up to and including V4.0, access to global device identifiers was possible within a program or function
block of the same name despite warning 16021.
6004 The index for array access must be the DINT data type. Perform a suitable type conversion or use
another expression.
6005 Type conflict in the expression. One of the operands cannot be converted to the data type of the
calculation, or the result assignment produces a type conflict.
6006 The specified variable cannot be accessed. Therefore it cannot be used in the expression. Possible
causes:
• Variable cannot be read.
• Attempt to access a local variable of a function or function block from outside.
6007 Cannot write specified variable. A value assignment is not possible.
6008 The specified function does not supply a return value. An application in the expression is therefore not
possible (function declared with a return value of VOID).
6009 The specified identifier does not refer to a function or a function block instance. Therefore it cannot
be used as function identifier.
When calling a program, the compiler option "Allow language extensions" should have been set (-C
lang_ext).
6010 The specified identifier is not included as an input parameter (VAR_INPUT) or in/out parameter
(VAR_IN_OUT) in the declaration of the POU (function or function block). It cannot be used in the POU
call.
6011 The number of function arguments in the call differs from the declaration, or the call parameters
required are missing in the call.
6012 RETURN is not permitted syntactically at this position. RETURN may only be used in functions.
6013 EXIT is not permitted syntactically at this position. EXIT can only be used within FOR, WHILE, and
REPEAT.
6014 The specified index value is outside the array limits. Only index values that match the array declaration
are permissible.
6015 The specified task control command cannot be applied to the task. It is not permitted for this type of
task.
6016 The specified task is deactivated in the execution system. It must be enabled before it can be used.
6017 Syntax error on specifying programs within a task. The programs must be listed by name and sepa‐
rated by commas.
6018 The specified identifier does not refer to a PROGRAM. Therefore it cannot be used as a program
identifier.
6019 Multiple assignment of program to task. Only one assignment is possible.
6020 Syntax error on specifying directly displayed variables. Inputs must have the syntax %Ix.y and outputs
the syntax %Qx.y. Further valid address declarations are %IBx or %QBx for byte access operations,
%IWx or %QWx for word access operations and %IDx or %QDx for double word access operations.
6021 The specified byte offset of the directly displayed variables lies outside the permissible address space.
Error Description
6022 The specified byte offset of the directly displayed variables lies outside the permissible address space.
Values 0 to 7 are permissible.
6023 The return value of the function or method has not been assigned. An assignment is however im‐
perative.
6024 A variable with the specified identifier is not included in the task start information.
6025 The condition variable and condition values of a CASE statement must be of the data type SINT, INT,
DINT, USINT, UINT or UDINT. It must be possible to implicitly convert the condition values to the data
type of the condition variables.
6026 The specified message identifier is not contained in the message configuration. Switch to the message
configuration and add the identifier.
6027 System variable access is only possible directly by means of a technology object reference. Access by
means of a structure or array is not possible. Create a local variable of type TO and assign the TO
reference to this variable. You can then access the required system variable by means of this local TO
variable.
6028 Type conflict in expression at specified operation. One of the operands cannot be converted to the
data type of the calculation, or the result assignment produces a type conflict. The specified data type
in the expression is expected.
6029 The specified function parameter does not have a default value, so it is imperative to specify a value
when the function is called.
6030 An attempt was made to transfer an expression to an in/out parameter (VAR_IN_OUT). This is not
possible. User variables must be specified as in/out parameters.
6031 An attempt was made to transfer a system variable (TO, I/O direct access) to an in/out parameter
(VAR_IN_OUT). This is not possible. User variables must be specified as in/out parameters.
6032 An attempt was made to transfer a variable in the process image to an in/out parameter
(VAR_IN_OUT). This is not possible. User variables must be specified as in/out parameters.
6033 An attempt was made to transfer a variable with a non-matching data type to an in/out parameter
(VAR_IN_OUT). However, an Implicit type conversion is not possible. User variables with the correct
data type must be specified as in/out parameters.
6034 An attempt was made to transfer a read only variable to an in/out parameter (VAR_IN_OUT). This is not
possible. In/out parameters must be read/write.
6035 An attempt was made to transfer a constant to an in/out parameter (VAR_IN_OUT). This is not pos‐
sible. In/out parameters must be user variables.
6036 An operation is applied to a constant. The value of the constant is outside the definition range for the
function. Examples are:
• Application of SQRT to a negative number.
• Use of logarithmic functions on a number <= 0.
• Use of ASIN or ACOS on a number outside the interval [0..1]
6037 An attempt was made to divide a constant by zero. This operation is not permitted.
6038 The specified function parameter occurs more than once in the argument list.
6039 The specified POU (function or function block) cannot be used. Possible causes:
• The definition of the POU in the implementation section is missing. Only the prototype was
specified in the interface section.
• The POU is fully defined only after its use (e.g. call, instance declaration). If necessary, move this
POU in the program source before the POU in which it is used.
• An instance of the function block cannot be declared as unit variable in the same program source
in which this function block is defined.
6040 Only simple variables may be used as semaphores; indexing is not possible.
Error Description
6041 The message function requires an auxiliary value of the specified data type. Type conversion is not
possible.
6042 The message function requires that you specify a message number. The specified message number is
invalid.
6043 Only simple variables that belong to the static instance data of the class can be used as semaphores.
6050 There is a type conflict in the expression for the specified operation / variables. One of the operands
cannot be converted to the type of the calculation, or the result assignment produces a type conflict.
A conversion between source file type and target type is not possible.
6051 The expression contains a type conflict for the specified operation. One of the operands cannot be
converted to the data type of the other operand to perform the calculation, or the operand data types
are not permitted for this operation.
6052 Type conflict in the expression. The specified data type cannot be used for the operation (see mar‐
shalling functions).
6053 The expression contains a type conflict for the specified operation. This operation is not permissible
on the specified data type.
6054 Type conflict in the expression. The specified variable cannot be used as indexed array variable.
6055 The expression contains a type conflict for the specified operation. Dynamic data type conversion is
not permitted for the operand.
6060 At the function call, there is a mixture of assignments of function arguments and setting parameters.
Use one form of the function call. Example:
• f (x, y); or
• f (in1 := x, in2 := y);
6061 The specified parameter of the function or the function block is an in/out parameter. Consequently,
a variable must be assigned when the POU is called.
6062 The specified identifier cannot be used as a function argument. Only variables from the declaration
blocks VAR_INPUT and VAR_IN_OUT are permitted.
6063 The specified identifier cannot be used as a function argument. Only variables from the declaration
blocks VAR_INPUT and VAR_IN_OUT are permitted.
6064 The specified POU is a prototype, for which there is no implementation. Therefore, calling is not
possible.
6070 Access to configuration data is only possible for variables that have been specified completely. Append
the name according to the configuration data for the selected technology object.
6071 Access to configuration data is only possible for variables that have been specified completely. There‐
fore, array indices, which cannot be resolved until runtime, may not be used.
6080 The specified variable is no input or output variable that can be directly accessed. Such a variable must
be declared in the I/O container of the associated device; it must have the syntax PI* or PQ*.
6085 The specified variable has been declared within the source file with a data type declared by forward
declaration. It is not possible in this instance to use public subcomponents of this variable in other
declaration sections as initialization values for other interface variables or references. The use of
subcomponents by means of ARRAY access is also not possible.
6100 The specified construct can only be compiled if the device type to be used is stated. To do this, set the
required device variants at the library. It is not possible to compile the construct as a device-neutral
library.
6110 The specified construct cannot be used in libraries.
6111 The specified construct cannot be used in libraries.
6112 The specified construct cannot be used in libraries.
6113 Access to technology objects and devices is not permitted in libraries.
Error Description
6114 A function block from a different source of the same library has been used. This is only possible within
a library if the declaring source is compiled with the "Permit forward declarations" compiler setting
activated.
6130 The specification of an interval is not permissible for the data type indicated in the CASE statement.
6140 The specification of a constant in ENUM_TO_DINT requires specifying the data type in the form of
enum_type#value.
6141 An attempt has been made to access a value of an enumeration data type (ENUM) that cannot be
assigned in the current scope. The specified value must be preceded by the declaration scope of the
enumeration data type. This is the name of the CLASS, the FUNCTION_BLOCK or the NAMESPACE
within which the relevant enumeration data type has been declared. Furthermore, you should enter
the identifier of the enumeration data type before you specify the value. Use the following notation:
<scope_name>.<enum_type_name>#<enum_value>.
6150 The specified bit offset lies outside the valid range for the specified data type.
6160 The stated array type without length specification is only permitted:
• when VAR_IN_OUT parameters are declared in functions, function blocks or methods,
• when VAR_INPUT parameters are declared in functions and methods.
These kinds of variables cannot be declared in any other declaration sections.
6161 The direct assignment between arrays without length specification is not possible. You need to iterate
over the elements for the assignment.
6170 The specified identifier is no variable identifier. You must specify a variable identifier. It should be
noted that local variables of a POU are not usable in an independent EXPRESSION (condition).
6180 The specified function is not usable for variables that contain structures with overlapping memory
spaces (OVERLAP).
6200 Only with compiler option "Permit language extensions" (-C lang_ext):
The called PROGRAM contains instance data (VAR … END_VAR declaration block) stored in the user
memory of the assigned task. This means a call of the PROGRAM from another POU is not possible.
Compile the source file with the "Create program instance data only once" compiler option (-
C prog_once) or remove the instance data.
6201 Only with compiler option "Permit language extensions" (-C lang_ext):
The call of a PROGRAM is not supported in functions. Such calls can be made only in function blocks
or another PROGRAM.
6250 The specified method is not declared public. It has not been declared PUBLIC and cannot therefore be
called.
6251 SUPER cannot be used in the current context. SUPER can be used in class methods only if the relevant
class has a base class (EXTENDS required).
6252 The specified method is implemented in the base class. It cannot be called directly. To call the method,
use either SUPER (call the method of the base class with static binding) or THIS (call with dynamic
binding). A call that is not preceded by these names is supported only for methods implemented
directly in the current class. The call syntax without a preceding name cannot be used for methods of
the base class.
An error message is also issued if a method without a preceding name is called that is programmed
to be overridden after the current call point. In this case, the source file can be successfully compiled
after the compiler option "Permit forward declarations" has been set.
6253 The specified method is not identified as public in the base class. It has not been declared as PUBLIC
or PROTECTED and cannot therefore be called.
Error Description
6254 The specified method is implemented in the base class. To be able to recognize any method override
mechanism programmed in the current class, this method must either be specified before it is called
for the first time or the compiler option "Permit forward declarations" must be activated. The method
can be successfully compiled with this option even if the method is not to be overridden.
6260 A reference cannot be generated on the specified variable. References can only be generated on
elements that are in the global memory of the controller (VAR_GLOBAL). It cannot be ensured that the
specified variable is in the global memory of the controller. It is therefore not possible to generate
references to the following variables:
• Input parameters (VAR_INPUT) and output parameters (VAR_OUTPUT) for functions or methods
• In/out parameters (VAR_IN_OUT) for functions, function blocks or methods
• Temporary variables (VAR_TEMP as well as VAR in functions and methods)
• Retentive local variables (VAR RETAIN)
• Variables of technological objects
• Variables of the address list
6261 A reference cannot be generated on the specified variable. Variables to which references are gener‐
ated must be read/write. It is therefore not possible to generate references to constants.
6262 A reference cannot be generated on the specified variable. Type conversion and dereferencing is not
possible within REF().
6300 Only when pragma "ToHookApplicable = YES" is specified: The call to the specified POU is not possible
since this POU is not marked as ToHookApplicable. Only the other functions suitable for this can be
used in hook functions.
6301 Only when pragma "ToHookApplicable = YES" is specified: The access to the specified variable is not
possible while compiling for use in TO hooks. In TO hooks, the following variables cannot be accessed:
• Variables of technology objects
• I/O variables
• Global device variables
6302 Only when pragma "ToHookApplicable = YES" is specified: It is not possible to call the specified method
because this method requires a dynamic call (i.e. via the VTable). Only static method calls may be used
in hook functions.
Table A-14 Syntax errors, errors in the expression (7000 ... 7014)
Error Description
7000 A syntax error has occurred. Possible causes:
• Incorrectly ended control structures (e.g. END_IF missing)
• Statements not terminated with ;
• Missing brackets
7001 The specified identifier does not refer to a constant. Please enter one constant per value or identifier.
7002 A signed integer is expected. The integer can be of data type SINT, INT, or DINT.
7003 When specifying the interval, the initial value must be less than or equal to the end value. This applies
to the declaration of arrays and the specification of the interval in CASE selection conditions.
Error Description
7004 An initialization value is expected. The value must be a constant. Constants can be assigned as
follows:
• Directly per value
• Symbolically via a preceding constant declaration
• As an expression containing constants only
7005 If identical data types are to be initialized in different sources, this requires an identical initialization
value too. Adapt the initialization values.
7009 An expression that supplies data type BOOL is expected as condition for WHILE, REPEAT, and IF. This
can be specified as a variable of data type BOOL or via a comparison expression. You can also specify
a function with a return value of data type BOOL.
7010 A syntax error has occurred. Possible causes:
• Incorrectly terminated control structures (e.g. END_IF missing)
• Statements not terminated with ;
• Missing brackets
7011 A syntax error has occurred. Possible causes:
• Incorrectly terminated control structures (e.g. END_IF missing)
• Statements not terminated with ;
• Missing brackets
7012 A syntax error in the statement, that starts at the specified line, has occurred. Possible causes:
• Incorrectly terminated control structures (e.g. END_IF missing)
• Statements not terminated with ;
• Missing brackets
7013 A syntax error has occurred. An illegal construct is being used.
7014 A syntax error has occurred. Possible causes:
• Incorrectly terminated control structures (e.g. END_IF missing)
• Statements not terminated with ;
• Missing brackets
7068 A source is being used by another source with incorrect RT interface stamp. Compile the used sources
individually. In case of doubt, select "Project > Save and compile all".
Error Description
8001 The specified POU has been exported to the INTERFACE section, but an IMPLEMENTATION section is
missing. Either delete the export statement or specify a valid implementation.
8002 The data structure of the specified POU cannot be determined. The cause of the problem is that the
POU contains other POUs that are resulting in recursion in the data structure, or that POUs are used
that have not been implemented. The message is issued in conjunction with the compiler option
'Permit forward declarations'. Note further error messages indicating the exact error location at which
recursion or lack of implementation has been detected.
8010 The interface method is not implemented by the specified class. Since the interface is referenced at
the class by IMPLEMENTS, it is absolutely essential that the method is implemented. This also applies
if a base class already contains a method implementation of the same name. When an interface is
linked, this implementation must be explicitly overridden in the class in which the interface link is
programmed.
A.2.9 Errors while loading the interface of another UNIT or a technology package
(10000 ... 10101)
Table A-16 Errors while loading the interface of another UNIT or a technology package (10000 ... 10101)
Error Description
10000 The specified unit has an invalid file format. Probably, the unit was created using an older version of
the compiler or compiled using incompatible options. If a unit is involved, it should compiled first.
Then repeat the current compilation. If a package is involved, a newer version should be installed.
10001 The unit name has an invalid format. The rules for identifiers in ST are also true for unit names; the
following restrictions apply to their length:
• Up to version V4.0 of the SIMOTION Kernel: 8 characters.
• As of version V4.1 of the SIMOTION Kernel: 128 characters.
10002 Error while loading the interface of another UNIT, a library or technology package. The specified
identifier is contained in two different imported units, libraries or technology packages.
• Remove a unit, library or technology package from the import list or
• Establish uniqueness between the identifiers in imported units, libraries or technology packages.
Change the exporting units in the interface section or specify a namespace for a library or a
technology package (USELIB … AS namespace; USEPACKAGE … AS namespace; ).
10003 The specified data type has an invalid memory layout. Probably, the unit was created using an older
version of the compiler or compiled using incompatible options. If a unit is involved, it should com‐
piled first. Then repeat the current compilation. You can also perform "Save and recompile every‐
thing".
If a package is involved, a newer version should be installed.
If the error persists, inform the support department.
10004 The exported symbols of the stated unit could not be loaded. Compile the specified unit and try again.
Alternatively, perform "Save and compile changes".
10005 A recursion was detected on loading packages. The specified package has already been loaded with
USEPACKAGE and cannot be specified a second time.
Error Description
10006 A recursion was detected on loading the unit. The specified unit has already been loaded with USES
and cannot be specified a second time.
10007 The maximum number of imported units which can be referenced in a unit was exceeded. A maxi‐
mum of 223 imported units per load unit are permissible. This number includes units that are im‐
ported directly with USES as well as units containing used variables or POUs that are indirectly im‐
ported by these units.
10008 The number of imported packages that can be referenced in a unit has been exceeded. A maximum
of 127 imported packages per load unit are permissible.
10009 The specified package is used in the unit, but it is not available on the device. This error message
occurs when you compile with the "implicit package utilization" option and have programmed a
USEPACKAGE statement that has a different content than the packages specified on the device.
10010 The specified package is used in unit <a>, but not in unit <b>. This error message occurs when
different packages have been specified with USEPACKAGE in units that reference each other with
USES. Correct the USEPACKAGE statements.
10011 The specified unit is used directly or indirectly by itself via one or more units. Correct the USES
statements.
10012 The specified unit is imported directly or indirectly into several units in different compilation versions.
Recompile all units that reference the specified unit in the USES statement.
10013 The specified unit has not yet been compiled, or an error occurred during the last compilation. Com‐
pile this unit first to ensure successful compilation.
10014 The type of specified technology object (TO) is not supported by the package specified previously
during compilation with USEPACKAGE. Use a package that contains the TO type.
10015 The maximum number of technology objects (TO) which can be referenced in a unit was exceeded.
A maximum of 65535 TOs can be referenced.
10016 The device type parameter is not available. If the unit to be compiled is not allocated to a device, use
the statement UNIT <unitname> : <typname>;
10017 The device type has not been specified uniquely. The statement UNIT <unitname> : <typname>; has
been used to specify a device type in the unit that is different from the device type detected from the
assignment of the unit to the device or library.
10018 The specified unit could not be found. Check whether the unit name is available in the PROGRAM
container of Workbench or whether the specified file is contained in the current working directory
(only u7bt00ax - command line).
10019 The specified technology package could not be found. Observe the preceding error outputs.
10020 Error occurred while loading the technology package. Observe further error outputs.
10021 The technology package is used in the specified source file, however, it is not selected on the device.
Correct the USEPACKAGE statement, or select the technology package on the device.
10022 The specified technology package is being used with different versions. Correct the settings for the
technology package selection on the device and, if required, in the library. Only one version of a
technology package can be used on a device. If this message is issued after the CPU version has been
upgraded, select "Save and recompile all".
10024 The specified technology package does not contain any components which can be used in the pro‐
gramming environment. Therefore, it cannot be used in the USEPACKAGE statement either.
10025 The specified identifier is not an identifier for a valid or an installed technology package. Therefore, it
cannot be used in the USEPACKAGE statement either. If this technology package is an OEM package,
the error message can be eliminated by installing this package. Otherwise remove the identifier from
the statement.
10026 The technology package is used in the specified source file; however, it is not selected for the current
device type on the library. Correct the USEPACKAGE statement in the source file or select the tech‐
nology package for the device type.
Error Description
10027 The specified source file is imported directly or indirectly into several units in different compilation
versions. Recompile all units that use the specified unit. Do this using "Save and recompile all".
10030 The device type has not been specified uniquely. In the unit, the statement UNIT xx : dvtype; specifies a
different device type than the one determined via the assignment of the unit to the library container.
10031 The specified library is used directly or indirectly by itself via one or more libraries. Correct the USELIB
statements.
10032 The specified library could not be found. Check your project.
10033 A recursion was detected on loading the library. The specified library has already been loaded with
USELIB and cannot be specified a second time.
10034 The specified library is not compiled for the required device type. Possible causes:
• The device type is not selected at the library.
• The specified library has not yet been compiled.
The message might also be displayed if an error occurred in the last compilation. To remedy the
situation, check the device settings at the library and compile the library.
10035 The specified library could not be found. Check whether the library name is available in the Work‐
bench project or whether the specified file is contained in the current working directory (only
u7bt00ax command line).
10036 The specified package is used in the source file, but it is not available in the library. Libraries are
generally compiled against the package versions specified in the library container. You have pro‐
grammed a USEPACKAGE statement that has a different content than the packages specified in the
library. Either select the correct package version or remove the USEPACKAGE statement from the
source file.
10037 The code variant for the current device type is not selected for the specified library. This means this
library cannot be used. Activate the code variant for this library.
10038 A DCC library can only be used in the DCC. It is not permissible to integrate such a library into
different programming languages.
10039 Compiling a library requires access to the sources. Access to the specified source is not possible due
to the selected protection level of the know-how protection. You have to log in for compiling.
10050 All POUs exported by the specified libraries are identical. Simultaneous use of these libraries is not
possible. Modify at least one exported element in one of the relevant libraries.
Note: Typically, this error occurs in conjunction with know-how protected libraries when they are
imported and used jointly in the project used to create the library.
10051 The specified POUs are identical. Simultaneous use of these classes and therefore these libraries is not
possible.
Note: Typically, this error occurs in conjunction with know-how protected libraries when they are
imported and used jointly in the project used to create the library or when copies of such libraries are
used jointly.
10100 The specified type of a technology object is contained in several packages that were referenced by the
source file. Please choose the technology package that meets your requirements.
10101 The specified technology object is not compatible with the types of technology objects supported by
the loaded packages Update the package or change the type of technology object.
Error Description
15001 The specified construct is not supported by the current version of the compiler.
15002 The currently selected device does not support the specified function. Select a different device version
if you want to use this function. To do so, replace the CPU in the hardware catalog and, if necessary,
update the firmware.
15003 The specified identifier is a keyword that is not supported and therefore cannot be used as user-
specific in order to ensure compatibility with later compiler versions.
15004 The specified identifier denotes a standard function that is not supported and cannot be used as user-
specific identifier in order to ensure compatibility with later compiler versions.
15005 The specified identifier denotes a non-supported standard function and cannot be used as user-
specified identifier in order to ensure compatibility with later compiler versions.
15006 The specified construct can only be used in source files generated with MCC. Usage in ST is not
possible.
15007 A source/library/package is used in the implementation section either directly or indirectly without
specifying a namespace. In the interface section, it is used with a namespace. Solve this conflict by
specifying a namespace in the interface section for the specified source/library/package.
15008 The specified source uses the library or the technology package with different namespace specifica‐
tion between the interface and implementation section. For successful compilation, the library or the
technology package must have already been homed to the interface section with USELIB or USE‐
PACKAGE.
15010 The current device setting does not support the specified function. Select a different device version
if you want to use this function.
15060 The currently selected device does not support the specified function. Select a different device version
if you want to use this function. To do this, exchange the CPU in the hardware catalog and, if neces‐
sary, update the firmware. For example, use of the keyword CLASS or INTERFACE requires a CPU
version as of V4.5.
15061 The current device setting does not support the specified function. Select a different device version
for the library if you want to use this functionality. For example, use of the keyword CLASS or INTER‐
FACE requires a CPU version as of V4.5.
15070 The specified construct does not conform to the language standard; however, for compatibility rea‐
sons, it is supported for old platforms. Convert the usage to the specified alternative.
15152 A USES, USELIB, or USEPACKAGE statement was found in a source file section hidden by conditional
compilation. This is not permitted. Source file sections that contain these statements cannot be
complied conditionally.
15153 The specified definition is not considered during code generation. It is not possible to define keywords
differently.
15154 It is not permitted to apply a line comment and to use multi-line comments in the definition section.
15200 The specification of a bit offset for a bitstring variable requires activation of the "Permit language
extensions" compiler option (-C lang_ext).
15700 The specified construct is not supported by the version of SIMOTION SCOUT into which conversion is
to be performed.
Error Description
16001 (Warning class: 0)
Only in conjunction with the "Selective Linking" compiler option. The specified function, the function
block, or the program are neither exported nor called in the current unit. No code is generated.
16002 (Warning class: 0)
Only in conjunction with the "Selective Linking" compiler option. The specified unit does not contain
any exported PROGRAM nor any task link. No code is generated for the unit.
16003 (Warning class: 2)
The operands of the comparison operation do not contain any explicit type definition. The data type
listed in the comparison can be seen in the warning message issued. Specify the data type of the used
constants explicitly with <type>#<value>.
16004 (Warning class: 2)
The specified type conversion may cause the variable value to change due to the reduced display
width or inadequate accuracy of the target data type.
16005 (Warning class: 2)
During type conversion, the dependency of the variable value can cause the sign to change.
16006 (Warning class: 2)
The specified value will be rounded to the next displayable value due to insufficient display width. This
is generally the value 0.0.
16007 (Warning class: 2)
A loss of accuracy occurred during type conversion. Not all decimal places are considered.
16008 (Warning class: 2)
A loss of accuracy occurred during initialization of the specified variables. The constant will be con‐
verted to the specified data type. Not all decimal places are considered.
16009 (Warning class: 0)
Not in conjunction with compiler option "Selective linking". The specified unit does not contain any
exported PROGRAMs nor a task link. Unable to access unit code. Unable to call relevant POU.
16010 (Warning class: 0)
Specified program not exported to unit; therefore unable to use it in configuration of the execution
level.
Error Description
16011 (Warning class: 0)
The source file does not contain any exported global variables. No data is loaded to the target system.
16012 (Warning class: 0)
The specified source file name was taken over from the PROGRAMS container of the selected device.
The designation of the source file in the UNIT statement was ignored.
16013 (Warning class: 2)
Because of the marshalling function, the specified data type is not portably convertible. Only use
SIMOTION devices in conjunction with this data type, or perform an explicit conversion of the data
type.
16014 (Warning class: 2)
With the specified operation, a data type conversion is performed between signed and unsigned.
Because the bit string is adopted in this case, the resulting numerical value can differ from the
specified value.
16015 (Warning class: 2)
For the assignment of the character string constants to the variables, only part of the character string
constants is transferred, because the length of the variable is insufficient to accept all characters.
16016 (Warning class: 2)
The operands in the expression do not contain any explicit type definition. The data type of the
operation is determined by specifying the values. The resulting data type in which the expression is
calculated can be seen in the issued warning message. To define the data type:
• Specify the data type of the used constants explicitly with <type>#<value> or
• Use an explicit data type conversion.
16017 (Warning class: 2)
The operands in the expression contain only constants. The data type of the operation can be deter‐
mined by specifying the data type (in the form <type>#<value>) or explicit data type conversion.
This output is used for troubleshooting, in particular, for the use of symbolic constants, because the
data type of the operation cannot normally be determined easily.
16018 (Warning class: 2)
The data type of the comparison operation is defined using the value of a constant that has a larger
value range than the contained variable. The comparison is performed with the data type of the
constant.
16019 (Warning class: 1)
The declaration conceals the identifier declared in the scope of the class or the function block. This
identifier can no longer be accessed from the POU in which the identifier is declared.
16020 (Warning class: 1)
The declaration hides the specified identifier which has been globally defined in its own source file or
an imported source file. Access to the global identifier is no longer possible from the POU where this
identifier is declared locally.
16021 (Warning class: 1)
The declaration hides the specified identifier which is defined on the device. You can access the global
device identifier with _device.<name>.
16022 (Warning class: 1)
The declaration conceals the specified identifier which is defined in the project (e.g. technology object
or device). You can access the global project identifier with _project.<name>.
16023 (Warning class: 1)
The declaration hides the specified identifier for the data type of a technology object. Access to the
data type identifier is no longer possible.
Error Description
16024 (Warning class: 1)
The declaration hides the access to the technology object on the device. You can access this TO with
_to.<name>.
16025 (Warning class: 1)
The declaration hides the IEC standard function with the identical name. Access to this function is no
longer possible in the current context.
16026 (Warning class: 1)
The specified identifier is reserved by SIEMENS for potential extensions. The use of this identifier can
cause compiler errors in later versions. If you want to avoid this, change this identifier.
16027 (Warning class: 1)
The specified identifier which is reserved for access to I/O qualities, is already assigned on the device.
This means that I/O qualities cannot be accessed.
16030 (Warning class: 1)
A label has been specified several times in a CASE statement. Only the first label is ever evaluated.
Other specifications have no effect.
16040 (Warning class: 1)
Within a CASE statement, the stated identifier is interpreted as a jump label and not as a CASE selector.
This may occur if a LABEL is defined in a control structure within a CASE statement:
CASE sel OF
first_val: IF TRUE THEN
second_val: // -> warning 16040
result := 2; END_IF;
third_val: result := 3;
END_CASE;
This warning will not be issued if the jump label has been explicitly declared between LABEL and
END_LABEL.
16102 (Warning class: 3)
The option for output of code for the program status diagnosis function is ignored because no debug
information was generated. Output of debug information was deactivated via compiler options.
16103 (Warning class: 3)
The option for outputting code at the library for the program status diagnosis function is ignored. The
code for program status is generated as defined in the option in the individual source files.
16110 (Warning class: 3)
The specified pragma statement is not supported in the current version.
16111 (Warning class: 3)
The specified pragma statement is not supported in the used context. The position of the pragma in
the source text is not correct.
16112 (Warning class: 3)
A valid pragma has been used. However, the value specified for the pragma is not valid. Use a valid
value.
16113 (Warning class: 3)
The pragma contains a syntax error in an attribute declaration. The valid syntax is as follows: <At‐
tribute identifier> := <Attribute value>; .
Error Description
16150 (Warning class: 7)
A new definition has been made for the specified identifier. Consequently, the previous definition is
invalid.
This warning enables the work of the preprocessor to be tracked.
16151 (Warning class: 7)
An attempt has been made to delete the definition of the specified identifier with #undef. However,
the identifier is not defined or the definition is already deleted.
This warning enables the work of the preprocessor to be tracked.
16152 (Warning class: 7)
The specified definition is not considered during code generation. This may be caused by the pre‐
processor being deactivated for the compiled source.
16153 (Warning class: 7)
The preprocessor is not active in the current source, even though preprocessor statements are used.
Activate the preprocessor or remove the statements.
16154 (Warning class: 10)
The preprocessor cannot be used to control the contents of USEPACKAGE, USELIB, and USES state‐
ments. It is no longer possible to automatically determine the dependencies between sources for the
"Save project and compile changes" and "Save project and recompile all" functions.
16170 (Warning class: 10)
The definitions from sources imported using USES are not considered during code generation.
16171 (Warning class: 10)
The definition from the specified source imported using USES could not be loaded. Compile the
specified source file beforehand.
16200 (Warning class: 4)
The use of a semaphore requires a global variable to enable access to it from a different task. Local task
operations do not have to be blocked via semaphores.
16210 (Warning class: 4)
The basis of the exponential function (EXPT standard function or ** operator) is negative. The op‐
eration can be executed at run time only under the following conditions:
1. It can be used on a device with a version of the SIMOTION Kernel as of V4.1.
2. The exponent is an integer.
The ExecutionFaultTask will be initiated for non-integer exponents or for use on a device with a
version of the SIMOTION Kernel up to V4.0. The program will be aborted at this position.
16220 (Warning class: 4)
The condition of an IF statement, WHILE statement or REPEAT statement is a constant expression.
16230 (Warning class: 4)
The expression with the specified values does not cause any change to the result; optimized code will
be created.
16240 (Warning class: 4)
The expression with the specified values exceeds the definition range of the operation. The result may
be incorrect.
16250 (Warning class: 4)
A modification of the control variable of a FOR loop occurs inside this loop. This modification is either
not effective or may cause an unexpected result when editing this loop. If the modification of the
variables inside the loop is necessary, then use WHILE or REPEAT at this point instead of FOR.
Error Description
16260 (Warning class: 4)
With the values assigned to the specified function, it has no effect. Optimized code is generated.
16261 (Warning class: 4)
The return value of the function or method has not been assigned. The result of the function is thus
lost.
16270 (Warning class: 4)
The operation for the dynamic type conversion is executed as assignment operation. The associated
variables enable an evaluation at the time of the compilation. As a result of this message, it may be
determined that a type conversion is not possible. An error message is output as for an assignment
of the variables.
16280 (Warning class: 4)
The INTERNAL access identifier was specified for an element not contained in any NAMESPACE. The
identifier is ignored and the element is PUBLIC.
16281 (Warning class: 4)
The specified identifier has already been declared as INTERNAL in the current source or in an imported
source or library. The current declaration location, however, does not contain the INTERNAL identi‐
fier. Add INTERNAL for the declaration of the affected element.
16282 (Warning class: 4)
The specified NAMESPACE was identified as public in one source and declared as INTERNAL in another
source. This conflict is resolved by declaring the NAMESPACE as INTERNAL. Consequently, the con‐
tained elements can be accessed only in accordance with the rules that apply to INTERNAL.
16283 (Warning class: 4)
Rather than the PUBLIC access identifier specified for the data type declaration, INTERNAL is used,
because the complete POU was declared as INTERNAL. This identifies contained elements as INTER‐
NAL, because they may not be accessed outside the NAMESPACE.
16300 (Warning class: 5)
The auxiliary value has a data type that cannot be converted to the data type configured for the
message.
16301 (Warning class: 5)
The specified auxiliary value is not evaluated during output of the message.
16302 (Warning class: 5)
The data type of the auxiliary value cannot be determined from the message configuration. The
specified data type is used.
16303 (Warning class: 5)
No auxiliary value has been specified for the function although the message configuration requires
such a value. A default value of the corresponding data type was added.
16304 (Warning class: 5)
An alarm accompanying value is specified using a constant or a constant expression. The resulting
data type of the alarm accompanying value can be seen in the issued warning message. To define the
data type:
• Specify the data type of the used constants explicitly with <type>#<value> or
• Use an explicit data type conversion.
16400 (Warning class: 6)
A global variable has been declared in a library. This may mean that the library cannot be used more
than once.
Error Description
16401 (Warning class: 6)
A PROGRAM has been declared in a library. This cannot be used in the process system. Set the compiler
option "Only create program instance data once" (-C prog_once) or declare a FUNCTION_BLOCK.
16420 (Warning class: 6)
The return value has not been assigned within the function or a method. If such a function or method
is called, it returns a random value.
16421 (Warning class: 6)
A variable that has neither been assigned nor read in the code has been declared.
The output of this warning can only be suppressed for a POU by means of a pragma.
16430 (Warning class: 6)
An attempt is being made to use a function block, which is either a system function block itself or
includes one, as a temporary variable. This can result in runtime problems when using the block in a
cyclic level.
16440 (Warning class: 10)
A global variable that does not contain any user data that can be backed up has been created in the
retentive memory area. These kinds of variables should not be declared in RETAIN areas. It is not
meaningful to specify RETAIN in this case and this specification is supported only for compatibility
reasons
TO references are an example of a data type for which this message is output.
16441 (Warning class: 6)
The specified data type contains some variables that cannot be restored in addition to those that can
be backed up in RETAIN areas. Data types of this kind include, for example, TO references and IN‐
TERFACE variables.
16450 (Warning class: 10)
A global variable has been created in the retentive memory range. This declaration is not permissible
at the specified position.
16451 (Warning class: 10)
The initialization of large arrays with values other than 0 causes a high data volume in the controller.
This results in long load times as well as high memory utilization.
16452 (Warning class: 10)
The specified program has a large quantity of instance data to be initialized. This can lead to a runtime
violation when the task is started because both the initialization code and the user code are being
executed. In particular, caution is advised in the case of SynchronousTasks.
16470 (Warning class: 10)
The specified construct does not conform to the language standard; however, for compatibility rea‐
sons, it is supported for old platforms. Convert the usage to the specified alternative.
16600 (Warning class: 6)
The specified variable is not contained in the initialization list. The default initialization value is used.
16601 (Warning class: 6)
The specified variable is not contained in the initialization list. The default initialization value is used.
16602 (Warning class: 6)
The specified variable is not contained in the initialization list. The default initialization value is used.
16603 (Warning class: 6)
The specified function block does not contain any instance data and, as a result, has a size of 0 bytes.
When transferred as a non-dimensional array for referencing purposes, the size of the element is
defined as 1 element.
Error Description
16604 (Warning class: 6)
The data type used in the declaration has no unique initialization value. The initial value known last
is used. In order to achieve a unique behavior at this point, the initial value for the variable or data type
declaration must be specified explicitly.
16605 (Warning class: 6)
The memory space of the specified variable overlaps with another variable. Thus, the initialization
value cannot be included. The remaining memory space is assigned the default value 0.
16606 (Warning class: 6)
The memory space of the specified variable overlaps with another variable. Thus, the data type cannot
be transferred to the OPC XMP information. The component is symbolically unavailable and also not
included in backups using _exportUnitDataSet.
16607 (Warning class: 6)
The specified function block does not contain any instance data and, as a result, has a size of 0 bytes.
The instance declaration in the form of an ARRAY is not appropriate.
16700 (Warning class: 3)
The SIMOTION device can also be processed with previous versions of the SIMOTION SCOUT. The
specified construct is not supported by all the earlier versions of the compiler.
See also
Global compiler settings (Page 62)
Local compiler settings (Page 65)
Controlling the preprocessor and compiler with pragmas (Page 362)
Controlling compiler with attributes (Page 368)
Error Description
22000 This message is a user-defined error message. See error text.
22001 (Warning class: 0)
This message is a user-defined warning. See warning text.
22002 (Warning class: 0)
This message is a user-defined information message. See information text.
Error Description
32010 (Warning class: 6)
The specified jump label identifier has been declared but not used.
32020 (Warning class: 10)
The specified variable was declared globally in this source file or in another source file with the
indicated data type. This may be a variable, a constant, or another identifier.
This information helps when searching for the cause of compilation errors. It is issued together with
error messages.
32021 (Warning class: 10)
The specified variable was declared on the device as an I/O variable, a global device variable, or a
system variable.
This information helps when searching for the cause of compilation errors. It is issued together with
error messages.
32022 (Warning class: 10)
The specified variable was declared in the project as a global identifier. This may be a device identi‐
fier, a technology object or another identifier from the project.
This information helps when searching for the cause of compilation errors. It is issued together with
error messages.
32023 (Warning class: 10)
Until now, no valid declaration has been found for the specified identifier.
This information is issued together with error messages.
32024 (Warning class: 0)
The specified variable has been declared as a global identifier in the current unit or in an importing
unit.
This information helps when searching for the cause of compilation errors. It is issued together with
error messages.
32025 (Warning class: 10)
The specified identifier was declared in this source or in another source in the specified namespace.
In order to be able to use this identifier, it must be prefixed with the identifier of the namespace. This
may be a variable, a constant or another identifier.
This information is helpful when searching for the cause of compilation errors. It is issued together
with error messages.
32026 (Warning class: 0)
The specified identifier is a standard function that can be activated via a compiler option. In order to
use the function, activate the required compiler options for language extensions.
32030 (Warning class: 0)
The stated array initialization does not conform to IEC 61131-3. For portable programs, you should
enclose the array initialization values in square brackets. Example of field initialization in compliance
with the standard:
x : ARRAY [0 to 1] OF INT := [1, 2];
Error Description
32050 (Warning class: 0)
The maximum size that can be reached via an HMI is 65536 bytes. This limit has been exceeded with
the specified variable. All subsequent variables cannot be reached either.
32060 (Warning class: 0)
The specified identifier is a keyword that can be activated via a compiler option. In order to use the
keyword, activate the compiler option "Language extensions IEC61131-3rd Edition".
This message is output as a guide for debugging syntax errors.
32061 (Warning class: 0)
The specified identifier is a keyword that can be activated via a compiler option. In order to use the
keyword, activate the compiler option "Permit object-oriented programming".
This message is output as a guide for debugging syntax errors.
32300 (Warning class: 1)
A label has been specified several times in a CASE statement. Only the first label is ever evaluated.
Other specifications have no effect.
32650 (Warning class: 7)
The specified identifier will be replaced thereafter by the output text.
This information enables the work of the preprocessor to be tracked.
32651 (Warning class: 7)
The definition of the specified identifier has been deleted with #undef.
This information enables the work of the preprocessor to be tracked.
32652 (Warning class: 7)
The identifier will be used with the specified replacement text in the source file. Compilation takes
place with the replacement text.
This information enables the work of the preprocessor to be tracked.
32653 (Warning class: 7)
The specified identifier will be replaced thereafter by the output text. This information appears if
additional replacements are loaded with a USES statement.
This information enables the work of the preprocessor to be tracked.
//============================================================================
//(organization)
//(division / place)
//(c)Copyright 2009 All Rights Reserved
//-----------------------------------------------------------------------------
// project name: (name)
// file name: (name as soon as saved)
// library: (that the source is dedicated to)
// system: (target system)
// version: (SIMOTION / SCOUT version)
// application: (relation to project/ product/ usage)
// restrictions:
// requirements: (hardware, technological package, memory needed, etc.)
// search items: (with the purpose of browser usage)
// functionality: (that is implemented)
//-----------------------------------------------------------------------------
// change log table:
// version date expert in charge changes applied
//
//=============================================================================
INTERFACE
// All statements added between INTERFACE and END_INTERFACE/
// Keywords are used to define which source contents
// (variables, functions, function blocks, etc.) also in other
// sources (units) are available or exported.
USEPACKAGE cam;
// The technology packages to be used are known here and thus
// made usable in the source. Technology object (TO)-specific
// Commands can be used in this UNIT only when the
// appropriate package has been included.
// If a source file that uses USEPACKAGE cam is integrated via USES,
// it will be "inherited". USEPACKAGE can then be omitted.
// The package used in this example is "cam". However, other
// technology packages can also be used (see documentation).
// USELIB testlib;
// If library functions are to be used in the source file, they must be made
// known in the source, too. If the library
// with the name "testlib" does not exist in the project,
// the error message
// "Error 10035, "testlib.lib" library could not be loaded"
// "Error 10032, "testlib" library could not be loaded"
// will be output.
// If libraries are not being used, this line can be
// deleted..
// USES header;
// ******************************************************
// * Type definition in the INTERFACE *
// ******************************************************
VAR_GLOBAL CONSTANT
PI : REAL := 3.1415;
ARRAY_MAX1 : INT := 4;
ARRAY_MAX2 : INT := 4;
COLLECTION_MAX : INT := 6;
GLOBARRAY_MAX : INT := 12;
END_VAR
// Declaration of a global constant. In the source file
// no other value can be assigned to the identifier.
// User defined variable types (UDT) are
// defined between TYPE and END_TYPE.
TYPE
ai16Dim1 : ARRAY [0..ARRAY_MAX1-1] OF INT;
// Definition of a one-dimensional array with four array elements from
// type INT under the name "ai16Dim1". With "ai16Dim1" as the data type
// in all source file segments, one-dimensional arrays can now
// be declared by type INT.
aaDim2 : ARRAY [0..ARRAY_MAX2-1] OF ai16Dim1;
// A two-dimensional array is an array of one-dimensional arrays.
// Here a two-dimensional field with 16 elements occurs
// of the type INT under the name "aaDim2"
eTrafficLight : (RED, YELLOW, GREEN);
// Definition of enumerator "eTrafficLight" as a
// user-defined variable type. Variables of this type can
// only accept the values "RED", "YELLOW" and "GREEN".
sCollection : STRUCT
toAxisX : posaxis;
aInStructDim1 : ai16Dim1;
eTrafficInStruct : eTrafficLight;
i16Counter : INT;
b16Status : WORD;
END_STRUCT;
// A user-defined structure is created here. It is possible to
// combine elementary data types (here INT and WORD) or already defined
// user data types (here "array1dim" and "eTrafficLight") into
// one structure. In addition, types
// of technology objects can also be used.
// In the example, the structure contains an element of
type // a position axis (posaxis).
// In the definition, make certain to sort the variables
// by size in increasing sequence
// (ARRAY, STRUCT, LREAL, DWORD, INT, BOOL ...)
aCollection : ARRAY [0..5] OF sCollection;
// Nesting is also possible. The type "aCollection"
// contains a field comprising six elements of type "sCollection"
END_TYPE
// ******************************************************
// * Variable declaration in the INTERFACE *
// ******************************************************
END_VAR
VAR_GLOBAL RETAIN
END_VAR
// The variables declared with the add-on RETAIN are
// RETAIN stored in the data area of the hardware platform used and
// are therefore safe from network failure.
END_INTERFACE
A.3.4 Implementation
// ******************************************************
// * IMPLEMENTATION section *
// ******************************************************
IMPLEMENTATION
// In the IMPLEMENTATION section of a unit, the executable code sections
// are stored in various program organization units (POUs).
// A POU can be a program, FC, or FB.
VAR_GLOBAL CONSTANT
END_VAR
TYPE
END_TYPE
// The type definition can also be made in the IMPLEMENTATION section.
// However, this definition cannot be imported in another source file.
The type definition can, however, be used for variables
// in all POUs of the source file "sttemp_l_de". The definition of types must
// be performed before the declaration of a variable.
VAR_GLOBAL // In the user memory of the UNIT
gboDigInput1 : BOOL;
// Boolean variable for "EXPRESSION" example (see below).
END_VAR
VAR_GLOBAL RETAIN
END_VAR
// The variables declared with the add-on RETAIN are
// stored in the RETAIN data area of the hardware platform used and
// are therefore safe from network failure.
// Variable declaration in the IMPLEMENTATION section.
// The declaration of VAR, VAR CONSTANT, VAR_TEMP, VAR_INPUT, VAR_OUTPUT
// and VAR_IN_OUT is not permissible here.
EXPRESSION xCond
xCond := gboDigInput1;
END_EXPRESSION
// Definition of an EXPRESSION.
// An EXPRESSION is a special function case, which recognizes only the
// return value TRUE and FALSE. It is used in conjunction with the
// statement WAITFORCONDITON (see myPRG) and should only be used
// if the program is executed as part of
// a MotionTask. If "gboDigInput1" (usual in a digital input or a
// condition in the program) takes on the value 1, the return value of the
// EXPRESSION TRUE.
A.3.5 Function
// ******************************************************
// * FUNCTION *
// ******************************************************
TYPE
END_TYPE
// The type declaration can also be made in POUs. The
// basic difference is the validity of the
// type declaration. A type declared in a POU can only
// be used for variables within associated POU.
VAR_INPUT // In the stack of the calling TASK, will be placed on
// stack on call, assignment optional.
END_VAR
VAR // In the stack of the calling TASK,
// is used in FUNCTION.
END_VAR
// Variable declaration in an FC.
// The declaration of VAR_GLOBAL, VAR_GLOBAL CONSTANT,
// VAR_GLOBAL RETAIN and VAR_RETAIN is not permissible here.
FCmyFirst := 17;
// In this example, the function returns the value "17" to the
// calling program.
END_FUNCTION
// ******************************************************
// * FUNCTION_BLOCK *
// ******************************************************
FUNCTION_BLOCK FBmyFirst
// The statement section of the POU FUNCTION_BLOCK begins here.
// Instance data are dependent where the instance is formed
// (see comments at the template end) in the user memory of UNIT
// or TASK and are initialized with STOP->RUN or starting the TASK
END_FUNCTION_BLOCK
A.3.7 Program
// ******************************************************
// * PROGRAM *
// ******************************************************
PROGRAM myPRG
// The statement section of the POU PROGRAM begins here.
VAR CONSTANT
END_VAR
TYPE
END_TYPE
// The type definition can also be made in POUs. The
// basic difference is the validity of the
// type definition. A type defined in a POU can only
// be used for variables within associated POU.
VAR // In the user memory of the TASK.
instFBMyFirst : FBmyFirst;
// In order to be able to call an FB, an area for static
// variables (forming an instance) must be generated. This has to do with
// the "memory" of the FB.
retFCMyFirst : INT;
// Variable for the return value of the function.
END_VAR
VAR_TEMP // In the stack of the TASK, initialized in each pass.
END_VAR
// Variable declaration in a PROGRAM.
// The declaration of VAR_GLOBAL, VAR_GLOBAL CONSTANT,
// VAR_GLOBAL RETAIN, VAR_INPUT, VAR_OUTPUT and VAR_IN_OUT
// is not permissible here.
// Comment: Whether the local variables declared via VAR
// are temporary variables depends on the task context in which the
// PROGRAM is used.
//
// In non-cyclic tasks (StartupTask, ShutdownTask, MotionTasks,
// SystemInterruptTasks and UserInterruptTasks), the previous
// contents of VAR and VAR_TEMP are no longer available.
// The variables are thus temporary.
//
// In cyclic tasks (BackgroundTask, IPOsynchronousTask,
// IPOsynchronousTask_2 and TimerInterruptTasks), the contents
// of variables declared in the VAR section remain the same
// for the following run. The variables are thus static.
// Variables from VAR_TEMP are always temporary.
instFBMyFirst ();
// FB call with a valid instance.
retFCMyFirst := FCmyFirst();
// FC call and assignment of return value.
END_PROGRAM
END_IMPLEMENTATION
<
* <, 155
*, 153 <=, 155
**, 153 <>, 155
/ =
/, 153 =, 155
=>, 193, 220
:
:, 115, 133
>
:=, 143, 191, 192, 218, 219, 246 >, 155
>=, 155
?
?=, 247
1
1.#INF, 391, 393
1.#QNAN, 391, 393
_
_AdditionObjectType, 130
_alarm, 347
_CamTrackType, 130
Breakpoint, 401
Activating, 414
A Call path, 409, 412
Call stack, 417
Absolute identifier
Deactivating, 417
Overview, 425
remove, 406
Access times
Setting, 406
Parameter, 193
Toolbar, 408
ANY, 113
BYTE, 111
ANY_BIT, 113
ANY_DATE, 113
ANY_ELEMENTARY, 113
ANY_INT, 113
C
ANY_NUM, 113 Call path
ANY_REAL, 113 Breakpoint, 409, 412
ANYOBJECT, 130 Call stack, 417
Arithmetic operators, 152 Program run, 394
ARRAY Program status, 400
Data type, 117 CamType, 130
With a defined length, 117 CASE statement
With a dynamic length, 189 Description, 161
Arrays Character set, 95, 423
Data type, 117 Class
Value assignments, 147, 148 Instances, 222
With a defined length, 117 Names, 222
With a dynamic length, 189 Source file section, 262
AT, 124 Code attributes, 360
Attribute Commands
Compiler option, 368 Overview of the basic system, 426
Availability ST programming language overview, 102
I/O variable, 324 Comments, 109
Source file section, 109
Syntax, 443
B Compiler, 87
Attribute, 368
Base class
Correcting errors, 61, 88
definition, 210
Declaration errors in data type declarations, 491
Structure, 210
Declaration errors in POU, 488
Syntax, 210
Declaration errors in variable declarations, 492
Basic elements
Error when linking a source file, 502
of ST, 94
Errors in expression, 496
Basic functions, 152
Errors while loading the interface of another UNIT
Bit constants, 106
or technology package, 502
Bit data types, 111
File access errors, 487
BlockInit_OnChange, 370
Implementation restrictions, 505
BlockInit_OnDeviceRun, 370
Information, 513
Blocks, 94
Scanner errors, 488
Bookmarks, 46
setting, 62
BOOL, 111
Start, 87
Boolean data, 106
starting, 61
Branches
Syntax errors, errors in expression, 500
Syntax, 481
Warnings, 506
Compiler option, 62, 73
Jump labels
Syntax, 462
Jump statement, 379 N
Names, 95
Namespace
K for libraries, 346
Key combination for technology packages, 346
Script editor, 58 Predefined, 347
ST editor, 58 New
Keyboard shortcuts, 58 I/O variable, 321, 336
Know-how protection Number systems
Libraries, 340 Notation, 105
Source files, 74 Numbers
Data types for numbers, 110
Description, 104
L Notation, 104
Numeric data types, 111
LABEL declaration, 379
Language description
Resources, 93, 421, 423
Library, 337
O
Compiling, 339 Opening
Using, 341 ST source file, 27
Line numbering, 52 Operands
Local data stack, 289, 293 Syntax, 474
Local variables Operating mode
Variable model, 277 Debug mode, 383, 402
Logic expression; bit-serial expression; expressions Process mode, 382
logic; expressions: bit-serial; operators:logic, 157 Test mode, 382, 398
Lower case, 52 Operators, 426
LREAL, 111 Priority, 159
Relational operators, 155
Syntax, 477
M Output parameters
Access in the function block, 197
MeasuringInputType, 130
Function, 188
Memory requirement, 289, 293
Function block, 188
Method
Method, 216
define, 180
Transfer, 193, 220
definition, 213
OutputCamType, 130
In/out parameter, 216
OVERLAP, 126
Input parameters, 216
Local variables, 216
Output parameters, 216
Structure, 180, 213
P
Syntax, 180, 213 Parameter
MOD, 153 Access times, 193
Monitoring variables Block (syntax), 184, 215
Variable status, 393 Declaration, 182, 214
Multi-element variables, 147, 148 Declaration, general, 134
Function and function block, 182, 214
Transfer (in/out parameter), 192
Transfer (input parameter), 191
Temporary, 282
timing of initialization, 294
Unit variable, 280
Validity, 277
Watch tables, 391
W
WAITFORCONDITION statement
Description, 170
Example, 172
Warning class, 72, 364
Watch tables, 391
WHILE statement
Description, 166
WORD, 111
Workbench
Elements, 23
Programming environment, 21