3BSE043732-600 en System 800xa Control 6.0 AC 800M Planning
3BSE043732-600 en System 800xa Control 6.0 AC 800M Planning
3BSE043732-600 en System 800xa Control 6.0 AC 800M Planning
AC 800M
Planning
System Version 6.0
ABB may have one or more patents or pending patent applications protecting the intel-
lectual property in the ABB products described in this document.
The information in this document is subject to change without notice and should not be
construed as a commitment by ABB. ABB assumes no responsibility for any errors that
may appear in this document.
In no event shall ABB be liable for direct, indirect, special, incidental or consequential
damages of any nature or kind arising from the use of this document, nor shall ABB be
liable for incidental or consequential damages arising from use of any software or hard-
ware described in this document.
This document and parts thereof must not be reproduced or copied without written per-
mission from ABB, and the contents thereof must not be imparted to a third party nor used
for any unauthorized purpose.
The software or hardware described in this document is furnished under a license and
may be used, copied, or disclosed only in accordance with the terms of such license. This
product meets the requirements specified in EMC Directive 2004/108/EC and in Low Volt-
age Directive 2006/95/EC.
TRADEMARKS
All rights to copyrights, registered trademarks, and trademarks reside with their respec-
tive owners.
3BSE043732-600 5
Table of Contents
6 3BSE043732-600
Table of Contents
3BSE043732-600 7
Table of Contents
8 3BSE043732-600
Table of Contents
INDEX
3BSE043732-600 9
Table of Contents
10 3BSE043732-600
About This User manual
General
Any security measures described in this User Manual, for example, for user
access, password security, network security, firewalls, virus protection, etc.,
represent possible steps that a user of an 800xA System may want to consider
based on a risk assessment for a particular application and installation. This risk
assessment, as well as the proper implementation, configuration, installation,
operation, administration, and maintenance of all relevant security related
equipment, software, and procedures, are the responsibility of the user of the
800xA System.
This manual provides some guidelines of what to consider when designing an
automation solution using Control Software for AC 800M, such as memory
consumption, CPU load, and task execution. The manual also contains advice to
programmers regarding optimization of code.
The libraries described in this manual conform to the IEC 61131-3 Programming
Languages standard, except for control modules and diagrams, which are not
supported by this standard.
• Section 1, Design Considerations, helps to identify the considerations when
planning the automation system. This section also gives advice on how to
design the automation system.
• Section 2, Programming Languages, helps to decide which programming
language to use. This section is a description of the supported programming
languages.
• Section 3, Programming in Practice, gives practical advice on programming. It
discusses a number of areas and gives practical advice on how to solve
common problems.
3BSE043732-600 11
User Manual Conventions About This User manual
Feature Pack
The Feature Pack content (including text, tables, and figures) included in this
User Manual is distinguished from the existing content using the following
two separators:
Feature Pack Functionality______________________________________________________________________
12 3BSE043732-600
About This User manual Warning, Caution, Information, and Tip Icons
Electrical Warning icon indicates the presence of a hazard that could result in
electrical shock.
Warning icon indicates the presence of a hazard that could result in personal
injury.
Tip icon indicates advice on, for example, how to design your project or how to
use a certain function
Although Warning hazards are related to personal injury, and Caution hazards are
associated with equipment or property damage, it should be understood that
operation of damaged equipment could, under certain operational conditions, result
in degraded process performance leading to personal injury or death. Therefore,
fully comply with all Warning and Caution notices.
Terminology
A complete and comprehensive list of Terms is included in the System 800xA,
Engineering Concepts (3BDS100972*) instruction. The list included in Engineering
Concepts includes terms and definitions as they apply to the 800xA system where
the usage is different from commonly accepted industry standard definitions and
definitions given in standard dictionaries such as Webster’s Dictionary of Computer
Terms.
3BSE043732-600 13
Related Documentation About This User manual
Related Documentation
A complete list of all documents applicable to the System 800xA, Extended
Automation System is provided in Released User Documents, (3BUA000263*).
This document lists applicable Release Notes and User Instructions. It is provided in
PDF format and is included on the Release Notes/Documentation media provided
with your system. Released User Documents are updated with each release and a
new file is provided that contains all user documents applicable for that release with
their applicable document number. Whenever a reference to a specific instruction is
made, the instruction number is included in the reference.
14 3BSE043732-600
Section 1 Design Considerations
Introduction
Consider the following while planning an automation solution:
• The application layer protocol to be used – MMS or Inter Application
Communication (IAC). MMS uses control modules and function blocks
whereas IAC uses cyclic communication using communication variables.
• A number of conceptual choices have to be made, for example regarding which
programming strategy to use, see Conceptual Considerations on page 16.
• The right hardware and network solutions have to be selected, so that the
performance is satisfactory and there is sufficient margin for further
development. See Performance Considerations on page 40.
• There are certain constraints to the number of controllers, applications,
diagrams, programs, and tasks that co-exist in an 800xA system and in a single
controller. See Constraints on page 49.
In addition to the information in this manual, refer to the following manuals:
• The 800xA System Guide, Performance and Capacity (3BSE041434*) contains
performance data and information on how to make important calculations.
Performance Considerations on page 40 contains an overview of the
information that can be found in this manual.
• The System 800xA, System Configuration (3BDS011222*) contains
information on how to configure the engineering environment and how to use
high-level tools such as Bulk Data Manager to create a basis for the automation
system.
3BSE043732-600 15
Conceptual Considerations Section 1 Design Considerations
Conceptual Considerations
Consider the strategical (conceptual) considerations provided below, before creating
an automation solution:
• The type of programming to be used: traditional or object oriented
programming. See Traditional Programming and Object-Oriented
Programming on page 16.
• The type of execution to be used: list-driven or data flow driven execution. See
List-Driven Execution and Data Flow Driven Execution on page 18.
• The type of libraries to be used to create re-usable type solutions, and the
system parts suited for creating type solutions. See Libraries on page 20.
• The coding process to be used: control modules, programs or diagrams. See
Code Organization on page 21.
• The programming language to be used. See Programming Languages on page
38.
• The structured data type to be used, and the instance to use structured data
types. See Structured Data Types on page 39.
Traditional Programming
In traditional programming, the design and execution is determined by the
sequential appearance of the code, starting from the top to the bottom. As the
program design proceeds, the code has to be re-written if any major changes are
made. Also, the programmer must understand the type of an action and when the
action should occur during an execution cycle. Hence, the code design is time-
consuming, excessive, and difficult to maintain and update. It also has a poor
structural design.
16 3BSE043732-600
Section 1 Design Considerations Traditional Programming and Object-Oriented Programming
Object-Oriented Programming
Object-oriented programming is quite different from traditional programing in
design and execution. While traditional programming focuses on the overall task
(for example “Manufacture cement”), the object-oriented method reduces a
complex or large problem, to isolated, self-sustained procedures. Such procedures,
while considering the “Manufacture cement” example, could be “Regulate motor
speed”, “Open valve for water”, etc. Each of these objects is an isolated procedure.
For example, “Regulate motor speed” does not require any specific information
about the motor itself, and the same holds for the valve. Each object has an input
and an output, and between these, the object analyses the situation and makes the
appropriate decisions, resulting in an action, or output. While doing this analysis,
the object does not require any input from the outside world.
When using this method of program design, the dependencies on other objects must
be placed outside the current object.
For example, consider the command to start a motor. The “Regulator” object cannot
start the motor independently; however, it can stop the motor if the speed becomes
too high. Even the normal stopping order for the motor is placed outside the
“Regulator” object, since this object is only concerned with regulating the motor
speed and stopping the motor in cases of faults or emergency.
The normal behavior is placed outside the object, while actions, such as security
measures, are placed within the object.
Using object-oriented design, the modelling environment is made simple. A number
of reusable tools are created while the objects are being developed. These tools help
in creating larger and more complex projects easily.
When the number of re-usable tools has reached a stage such that they become an
acceptable and defined standard in the daily project development routine, they can
be made into a library, for even more simplified project development.
In object-oriented programming, the initial effort and time is high. Each object must
be analyzed thoroughly, and then designed, such that it can remain as an isolated,
self-sustained, and re-usable object. Once the toolbox (or library) is ready with re-
usable objects, large-scale projects can be developed with ease.
3BSE043732-600 17
List-Driven Execution and Data Flow Driven Execution Section 1 Design Considerations
Summary
The object-oriented programming/design:
• Simplifies daily project development.
• Provides a toolbox of reusable building blocks.
• Makes it easier to design large, complex projects using the building blocks.
• Makes it possible to create full-scale libraries that can be shared among project
participants.
• Makes it easier to survey, maintain, and update your code.
List-Driven Execution
The list-driven execution is a cyclic process. The code must be programmed and
executed in the correct order. Otherwise, it leads to time delays.
18 3BSE043732-600
Section 1 Design Considerations List-Driven Execution and Data Flow Driven Execution
Figure 1. The code block in control module 1 must be executed before the code block
in control module 2 – not the other way around
A data flow driven design can avoid errors caused in the execution order. In data
flow-driven execution, code sorting exists.
Sometimes, Control Builder may not analyze the code design, resulting in code
sorting loop errors. For example, two IF statements cannot possibly be executed at
the same time. However, the code sorting routine may consider it as a loop, though it
is not a loop. For such instances, there is a nosort attribute that can be issued to
suppress such errors.
Summary
The data flow driven execution:
• Eliminates dangerous situations caused by poor, unclear design.
• Optimizes the code so that execution is carried out efficiently.
• Simplifies the code design allowing the user to concentrate on small parts
rather than the entire project.
• Maintains the execution cycle and performs the actions contained in the cycle.
3BSE043732-600 19
Libraries Section 1 Design Considerations
Libraries
There are two types of libraries, Standard and Self-Defined. The set of Standard
libraries is installed with the system and is always present. They may not all be
present in the current project, but will be loaded on demand (that is, if you connect
them to your library or application).
To re-use the function blocks, control modules and diagrams, save them as types in
either of following ways:
• Save them in the application. You can then re-use types within that particular
application only.
• Save them in a self-defined library and then re-use them in any application or
project.
Types saved locally in the application will not be available for the other applications
or project.
As mentioned earlier, you can save your building blocks in your own, self-defined
library. As is the case with any of the other libraries, this library will also be
available to other projects, and you can also share the library with other project
members.
The structure of a library does not need to be flat, you can connect other libraries
(Standard or Self-Defined) to a new library, and by doing so, you create a library
hierarchy. Assume you want to set up a project library called Cement Factory
Library, which connects to a large number of Standard and Self-Defined libraries
(perhaps in a deep hierarchical structure). By doing so, other participants do not
have to load all the libraries required, just the “Cement Factory Library” in order to
access all the necessary data types, function block types, control module types, and
diagram types.
20 3BSE043732-600
Section 1 Design Considerations Code Organization
Applications
libraries
Application 1 Application 2
Process
section
Process
object
MyValveLib1 MyValveLib2
standard libraries
ProcessObjBasicLib AlarmEventLib
Control Builder
System BasicLib
Figure 2. Create (deep) hierarchical structures using both Standard and Self-
Defined libraries
Code Organization
This part of the manual will help you understand how function blocks,
control modules, and diagrams interact and important differences that might affect
which programming strategy you choose to use.
When organizing code, there are three basic methods of doing this:
• Using control modules, see Using Control Modules on page 22.
• Using function blocks inside programs, see Using Programs on page 23.
• Using diagrams, see Using Diagrams on page 28.
3BSE043732-600 21
Code Organization Section 1 Design Considerations
It is also possible to mix control modules and function blocks in diagrams (see
Using Diagrams on page 28; and it is also possible to mix control modules and
function blocks inside each other (see Mixing Control Modules in Function Blocks
and Vice Versa on page 26).
For more detailed information on control module type, function block type,
diagram type, and objects, refer to the System 800xA, Control, AC 800M,
Configuration (3BSE035980*).
1. Since only control modules are used, all code will be sorted.
22 3BSE043732-600
Section 1 Design Considerations Code Organization
Using Programs
As well as using control modules only, it is also possible to use function blocks only.
These are then placed in a program.
When organizing your code, you will sooner or later face the question of how many
programs, code blocks, function blocks, etc., are needed and how the code should be
distributed on these objects. The below list provides some recommendations and
hints regarding this.
• A Few Large Programs or Several Smaller Programs?
The smallest unit that is compiled and downloaded to the controller is a
Program Organization Unit (POU). As discussed in other sections in this
manual, a program is also a POU. It is tempting to put all the code in one
program, but this is not recommended, since this will lead to all code being
compiled every time, and all code being downloaded, even if the changes made
are minimal. The results of such a design would be that downloading would
take a long time, and that much more memory would be allocated in the
controller during download. The latter would result in a dramatic reduction in
the possible size of an application.
An obvious solution to this problem is to divide the program into several
smaller ones, and then make use of the code block features within the programs
(or POUs). Although this may seem to be an ideal solution, there are a number
of drawbacks with this design, compared to fewer but larger, programs. Finding
the right balance can be difficult.
• Let Programs Reflect Reality on a Large Scale!
Programs should be organized according to functional areas, such as “Intake”,
“Production”, “Outlet”, etc. Putting the code for these three functional areas in
one program would be poor design. Furthermore, programs (and code) should
also be organized with regard to execution demands (interval time, priority,
etc.), that is, task properties.
Several programs can share the same task, and they should if the programs all
have the same requirements regarding interval time, priority etc. There is seldom
need for more than 3–5 tasks per application. Use Task Analysis to verify that the
tasks are properly configured with respect to priority and offset.
3BSE043732-600 23
Code Organization Section 1 Design Considerations
B
Number of Code blocks
24 3BSE043732-600
Section 1 Design Considerations Code Organization
Having several programs and few code blocks (A), or few programs and several
code blocks (B) is poor design. A compromise like (C) is the best solution. We
can also add a third dimension – function blocks that are declared in the
programs.
Number of Programs
Function blocks
A
C
B
Number of Code blocks
3BSE043732-600 25
Code Organization Section 1 Design Considerations
When you need to implement simple tasks, function blocks can be included in
a control module (or several control modules).
26 3BSE043732-600
Section 1 Design Considerations Code Organization
3BSE043732-600 27
Code Organization Section 1 Design Considerations
Figure 8. The boundaries of the function blocks limit the sorting of control modules
Using Diagrams
Diagrams allow you to configure the control logic in the project in a comprehensive
graphical language called FD (Function Diagram). The diagram allows mixing of
the functions, function blocks, control modules, and other diagrams, in the same
graphical editor. The diagrams also support cyclic communication between different
applications, using communication variables.
The diagrams provide a graphical overview of the application. In addition to the FD
code block, the diagram also supports SFC and ST code blocks, which are invoked
from FD code block or sorted separately.
The main elements in FD are:
• Pages
• Blocks (objects)
• Connection Ports
The diagram is defined under an application, and it is available for download to the
controller.
Additionally, it is possible to:
• Connect the diagram and its objects to controller tasks.
• Control the execution order of the diagrams, based on the controller tasks.
Figure 9 shows an example of a diagram.
28 3BSE043732-600
Section 1 Design Considerations Code Organization
The graphical user interface makes complex control strategies easy to engineer and
even easier to maintain.
3BSE043732-600 29
Code Organization Section 1 Design Considerations
Several diagrams can share the same task, and they should, if the diagrams all
have the same requirements regarding interval time, priority etc. There is seldom
need for more than 3–5 tasks per application. Use Task Analysis tool to verify
that the tasks are properly configured with respect to priority and offset.
• Let Pages and Data Flow Order Reflect Reality on a Small Scale
Apart from dividing the code into several diagrams, you can also use several
pages within each diagram, and arrange objects in each page according to the
desired data flow. Each object in a page has a unique Data Flow Order number,
which determines the forward data flow.
It is then necessary to decide how many pages to use, and how much objects
should be inserted in each page.
(Up to 200 pages can be used in a diagram, and up to 50 objects can be placed
in one page. But, it is seldom appropriate to have so many pages and objects.)
30 3BSE043732-600
Section 1 Design Considerations Code Organization
As diagrams reflect the process on a large scale, pages can be used to reflect the
process on a smaller scale. For example, the control of a motor or valve (within
a functional area) can be put in a single page with a suitable name.
Obtaining a good balance between the number of diagrams and the number of
pages within the diagrams may be difficult. The problem can be illustrated as a
two-dimensional chart.
Number of Diagrams
B
Number of Pages
3BSE043732-600 31
Code Organization Section 1 Design Considerations
Number of Diagrams
Diagram Types
A
C
B
Number of Pages
Figure 11. Including reusable diagram types adds a third dimension to the problem
This third dimension is unlimited since you can have as many diagram types as
you like, and many objects in each diagram type.
• Lower SIL Signal Used in a Higher SIL Diagram
Another advantage of using diagram for the design with SIL applications is that
the FD code block in a diagram of higher SIL can accept a signal of lower SIL,
if required, using communication variables. The FD code block also displays
such a lower SIL signal with a distinct color.
32 3BSE043732-600
Section 1 Design Considerations Code Organization
Furthermore, connected parameters (In or Out) in function blocks are copied from
one variable to another in order to establish data consistency within the block.
Parameters in control modules, on the other hand, are simply references that are
resolved during compilation.
The difference in performance between function blocks and control modules is
caused by the number of parameters used. Connecting parameters in function blocks
and/or having parameters of structured type in function blocks will result in poorer
performance for the function blocks. Neither of these affect control module
performance.
Function block parameters are copied at each call, which means that the CPU will
spend considerable time passing parameter values to and from function blocks, if
there are deep structures in the program. The parameter connections of a control
module, on the other hand, are defined prior to compilation. This gives superior
performance using control modules when parameters are transferred through deep
hierarchies.
Function block solution Control module solution
A.. A A.. A
A' A'
A" A"
3BSE043732-600 33
Code Organization Section 1 Design Considerations
If diagrams are used in the design, the FD code blocks in the diagrams allow mixing
function block instances, functions, control module instances, and diagram
instances in the same diagram,
The following are the special rules that apply to diagrams:
• A Diagram POU (under an application) can contain only one FD code block,
but the FD code block itself can contain multiple diagram type instances, which
can also be nested. If structuring of a diagram is needed, the diagram is
separated in several pages in the FD code block.
• Non-FD code blocks (ST and SFC) in the diagram can be invoked within the
FD code block. Code blocks with no invocation in the FD code block are sorted
with code blocks in the invoked control modules.
• Each diagram constitutes a code block sorting group. This means that all
control module instances under a diagram are sorted together, but they are not
sorted together with any control module instances outside the scope of the
diagram.
The most important differences among control modules, function blocks, and
diagrams are summarized in Table 1.
34 3BSE043732-600
Section 1 Design Considerations Code Organization
Diagrams or
Property Control modules Function Blocks
Diagram Types
Execution order Automatic; compiler- Manual; code Code blocks from
determined via code statements, based on control modules are
sorting/data flow program flow as sorted into the diagram’s
optimization. implemented by the execution order
programmer. according to control
module sorting rules
(writing into a variable is
sorted before a read).
For other objects, the
execution order is based
on the Data Flow Order
number that is
automatically assigned.
Execution per scan Code blocks are A function block can be The code blocks in the
always executed once called, and executed, diagram types inside the
per scan according to zero, one, or several diagram are executed
data flow analysis. times per scan. once per scan. For
control modules and
function blocks inside the
diagram, the respective
rules apply.
3BSE043732-600 35
Code Organization Section 1 Design Considerations
Table 1. Differences among function blocks, control modules, and diagrams (Continued)
Diagrams or
Property Control modules Function Blocks
Diagram Types
Static parameter Yes. This is an No. Parameters are Yes, the diagram types
connections important feature. A copied each time the allow static parameter
static parameter function block is connections (same
connection does not executed according to benefit as control
change during the IEC 61131-3 modules).
execution; it can only standard. For deep and
be changed via code complex hierarchies, the
changes and parameter copying of
recompilation. Static function blocks demands
connections are set at significant CPU time.
compilation, yielding By using the By-ref
efficient code attribute for function
generation, powerful blocks, the issue related
compiler-based to CPU time can be
program analysis, and avoided.
better performance.
Graphics Yes, in three different Indirectly via inclusion of Yes.
ways: free-layout sub control modules. In the same editor,
programming, free-layout programming,
supervision, and supervision, and
interaction. interaction are possible.
36 3BSE043732-600
Section 1 Design Considerations Code Organization
Table 1. Differences among function blocks, control modules, and diagrams (Continued)
Diagrams or
Property Control modules Function Blocks
Diagram Types
Parameters Parameters of the type Parameters of the type In diagram type, all
in_out can be in, out, or in_out can be parameters (in, out, and
connected to graphics. connected to sub control in_out) can be connected
Connections cannot be modules. However, to graphics. Additionally,
inverted. ("NOT current in_out parameters must an out parameter can be
parameter name" is be connected statically if connected to an in_out
invalid.) they are connected to a parameter, and an in_out
control module parameter can be
parameter. connected to in
parameter.
Task connections Can be connected Cannot be connected to Can be connected freely
freely to any task. a task if it contains to any task.
in_out parameters (see The diagram type
further Task Connection instance in a diagram
and Parameters of Type inherits the task of the
in_out). diagram.
The control module
instances and function
block instances in a
diagram can be
connected to a different
task, if required.
Otherwise, they inherit
the same task as the
diagram.
3BSE043732-600 37
Programming Languages Section 1 Design Considerations
Summary
When choosing which way to organize your code, you have a number of choices to
make:
• If you prefer a task-oriented and graphics-oriented approach, mixing different
objects and providing graphical connections between them, you have to choose
diagrams and diagram types.
• If you prefer a task-oriented programming approach using programs, you have
to choose between control modules or function blocks organized in programs
(but in the first case, function blocks can be used inside control modules, and in
the latter case, control modules can also be used in the program and inside
function blocks).
Which approach to choose depends on things such as how your organization collects
data and converts it to an automation solution, as well as on the development and
maintenance strategy chosen for the automation solution in question.
Programming Languages
When it comes to selecting which one of the available programming languages to
use, there is no clear rule. The languages available are Structured Text, Instruction
List, Function Block Diagram, and Ladder Diagram. These are all “basic”
programming languages and can be used in any code block. You can even use more
than one language in a single program, function block, or control module.
There are two additional programming languages, Sequential Flow Chart (SFC) and
Function Diagram (FD).
SFC is not, in a sense, a “real” programming language, but rather a structural
programming tool. Using SFC, you can easily design more complex sequences than
would be possible (with the same effort) in any of the other languages. As the name
Sequential Flow Chart implies, you have to plan sequentially when using this
language.
For each step in the sequence you can connect three code blocks, one that executes
at the start of the step, one that executes during the step and one that executes at the
end of the step. Additionally, there is also a Boolean variable for each step that can
be used as an indicator in another code block in any of the four languages listed
above.
38 3BSE043732-600
Section 1 Design Considerations Structured Data Types
The Function Diagram (FD) language allows mixing of functions, function blocks,
control modules, and diagrams in the same editor.
For a more complete overview of the available programming languages, see Section
2, Programming Languages.
3BSE043732-600 39
Performance Considerations Section 1 Design Considerations
Performance Considerations
Before deciding on which hardware and communication protocol(s) to use, it is
necessary to make a number of calculations and estimate a number of things. Once
you have an idea of what you need, you can go on to choose your hardware. In order
to help you prepare for this choice, this subsection has been split into the following
parts:
• Memory Consumption on page 40, discusses things related to memory
consumption that should be considered during the planning phase.
• Calculations and Performance Data on page 41, gives an overview of the
Industrial IT, 800xA System Guide, Performance and Capacity
(3BSE041434*), which is of great help when discussing performance
considerations.
• Choosing Controller Hardware on page 42, lists a number of things that should
be considered when choosing controller hardware.
• Distribution on Applications and Controllers on page 45, discusses advantages
and disadvantages of splitting your code on several applications and/or
controllers.
When planning your control network communication, you should also read the
AC 800M, Communication Protocols (3BSE035982*). This manual gives a
conceptual overview of all supported protocols and contains useful performance
data for a number of key protocols, such as MMS.
Memory Consumption
Memory is reserved for each defined function block type, control module type, and
diagram type. When another function block or control module or diagram is created
from a type, the amount of memory reserved is very small, in relation to the memory
reserved for the type. You should therefore create as many instances of control
modules, function blocks, and diagrams, as possible from a few types, instead of
implementing your control solution with many different memory-consuming types.
40 3BSE043732-600
Section 1 Design Considerations Calculations and Performance Data
3BSE043732-600 41
Choosing Controller Hardware Section 1 Design Considerations
CPU Capacity
If your application puts high demands on the controller regarding application
execution or communication performance, the following points should be
considered.
• How many I/Os are to be connected? As the number of I/Os increases, so do
the requirements on the control system.
• Do you have I/Os that require short interval times? You might want to add
external cards that contain separate CPUs for I/O processing,
for example, PROFIBUS-DP.
• Which protocol should be used, and hence, which control hardware?
42 3BSE043732-600
Section 1 Design Considerations Choosing Controller Hardware
CPU Priority
1. AC 800M controller:
In AC 800M, servicing the S800 I/O via ModuleBus has the highest priority
(interrupt), and may cause a significant load on the CPU. Note that this
interrupt load is not accounted for separately, it will be evenly distributed over
other tasks. This means that the cyclic load presented for IEC 61131-3 task
execution includes the extra load caused by ModuleBus interrupts during task
execution.
The default setting for the ModuleBus scan cycle time is 100 ms.
Calculate the minimum scan time possible for the I/O configuration that is
used, using the formula in section Modulebus Scanning of Digital/Analog
modules in the System Guide, Performance and Capacity (3BSE041434*).
Set the modulebus scan time to a value as high as possible, but higher than the
calculated minimum value and lower than the interval time of the fastest task
using I/O signals. This decreases CPU load, in favor of user application(s), and
communication handling. This is needed in order to avoid sampling problems
due to the fact that the I/O systems and the IEC 61131-3 tasks execute
asynchronously.
A Supervision function implemented in the controller generates a system alarm
if the time taken to scan all modules exceeds the configured value +10 ms. If
the configured value is set to 0, then the Supervision is disabled.
The ModuleBus scan cycle time should be defined at an early stage of the
project, since many other parameters depend on it. Based on the ModuleBus
I/O system configuration, the complier indicates a recommendation or a
warning on scan time while downloading to the controller.
Decreasing the ModuleBus scan cycle time in a running plant reduces CPU
capacity available for application(s) and communication handling.
3BSE043732-600 43
Choosing Controller Hardware Section 1 Design Considerations
Should an application require more than 70% of CPU capacity, the task
scheduler automatically increases the task interval times to re-establish a 70%
load. This tuning is performed at 10-second intervals. You can read more about
task handling in the System 800xA, Control, AC 800M, Configuration
(3BSE035980*).
Load balancing can be disabled. For SIL certified applications, load balancing is
always replaced by overrun and latency supervision.
Since IEC 61131-3 has higher priority than communication, it is recommended
not to configure for consecutive execution of more than 200ms.
3. Cyclic Diagnostics in an AC 800M HI controller:
It is important to consider the relevant FDRT setting in perspective of the
required diagnostic interval time for the system background diagnostics. Do
not set the FDRT setting lower than necessary, since this has a significant
impact on the load from diagnostic measures in the controller.
The system background diagnostics in the Controller must be able to execute to
completion with a cycle time of half the FDRT. The cyclic diagnostics executed
within FDRT has the priority next to 1131 application execution, which is, the
sum of all 1131 application task execution time should not exceed 80% of ½
the configured FDRT setting. For example, with an FDRT setting of 3 sec, the
1131 execution during any 1.5 sec period must never exceed 1,2 sec (80% of ½
FDRT).
4. Communication Handling (lowest priority):
It is important to consider CPU load if communication handling is vital to the
application. Running at the maximum cyclic load will result in poor capacity
and response times for peer-to-peer and OPC Server communication.
Communication handling has the lowest priority in a controller. It is therefore
important to consider controller CPU load if the communication handling is
vital to the application. Running close to 100% total load will result in poor
capacity and response times for peer-to-peer and (OPC Server for AC 800M)
communication. It is recommended that peak total load will be kept below
100%.
1. This is not true if load balancing is set to false or if you run with an AC 800M HI. The controller will run until
it is forced to stop.
44 3BSE043732-600
Section 1 Design Considerations Distribution on Applications and Controllers
Inter Application Communication (IAC) has higher priority than normal MMS
communication.
Application 1 Application 2
3BSE043732-600 45
Distribution on Applications and Controllers Section 1 Design Considerations
Figure 15. Project Explorer configuration with two controllers, each with one
application
However, there are disadvantages. An application requires twice the memory size in
the controller when downloading changes, which means that more memory must be
allocated in the controller (to be able to handle future modifications).
46 3BSE043732-600
Section 1 Design Considerations Distribution on Applications and Controllers
Controller 1 Controller 2
Application
3BSE043732-600 47
Distribution on Applications and Controllers Section 1 Design Considerations
• The values of strings are normally not transferred (default setting) as this
lowers communication performance. If you want string values to be
transferred, set the system variable EnableStringTransfer to True.
• Data consistency is not guaranteed with Application Internal Communication.
Task execution can interrupt this communication service so it can not be
guaranteed that all exported variables are sampled from the same execution, or
incorporated into the client at the same time.
There is more information in the Control Builder online help. Search for
“Distributed Execution”.
• There is no automatic supervision of communication. This must be performed
manually, by using appropriate function blocks.
• I/O signals must be read/written by a task residing in the controller to which the
I/O signal is physically connected.
• You cannot run Compact Flash with distributed applications.
Application 1
Application 2
48 3BSE043732-600
Section 1 Design Considerations Constraints
Constraints
When designing an automation solution, there are certain constraints to the system
and to hardware that must be considered. Constraints can be found within the
following fields:
• OPC server Constraints, see OPC Server Constraints on page 49.
• The size of applications, see Application Size Limit on page 50.
• Number of controllers, applications, diagrams, programs and tasks, see
Maximum Number of Controllers, Applications, Diagrams, Programs and
Tasks on page 51.
• Number of Program Organization Units (POUs) and variables, see Maximum
Number of POUs and Variables on page 52.
• INSUM communication and number of MCUs, see INSUM Constraints on
page 55.
3BSE043732-600 49
Application Size Limit Section 1 Design Considerations
50 3BSE043732-600
Section 1 Design Considerations Maximum Number of Controllers, Applications, Diagrams,
3BSE043732-600 51
Maximum Number of POUs and Variables Section 1 Design Considerations
Applications
The maximum number of variables in one application is comprised of:
• Global variables with their total number of components,
• Local variables with their total number of components,
• Each program corresponds to one variable,
• Each diagram corresponds to one variable.
52 3BSE043732-600
Section 1 Design Considerations Maximum Number of POUs and Variables
• Variables representing each SFC code block (two per code block),
• Variables representing each SFC state (three or four per SFC state),
• Project constants used in the control module type,
• Each function block corresponds to one variable.
Program
The maximum number of variables in one program is made up from:
• Local variables and Communication variables (total number of all
components),
• Variables representing each graphical connection in FBD between sub-function
blocks (total number of all components),
• Variables representing each SFC code block (two per code block),
• Variables representing each SFC state (three or four per SFC state),
• Project constants used in the program,
• Each function block corresponds to one variable.
Diagram
The maximum number of variables in one diagram is made up from:
• Local variables and Communication variables (total number of all
components),
• Variables representing each graphical connection in the FD code block,
• Variables representing each optional SFC code block (two per code block),
• Variables representing each SFC state in the SFC code block (three or four per
SFC state).
3BSE043732-600 53
Maximum Number of POUs and Variables Section 1 Design Considerations
Diagram Type
The maximum number of variables in one diagram type is made up from:
• Parameters (two variables per parameter),
• Local variables with their total number of components,
• Variables representing each graphical connection in the FD code block,
• Variables representing each optional SFC code block (two per code block),
• Variables representing each SFC state in the SFC code block (three or four per
SFC state)
54 3BSE043732-600
Section 1 Design Considerations INSUM Constraints
INSUM Constraints
For information on INSUM-specific constraints, see INSUM performance data in
the System Guide, Performance and Capacity (3BSE041434*).
3BSE043732-600 55
INSUM Constraints Section 1 Design Considerations
56 3BSE043732-600
Section 2 Programming Languages
General
Depending on previous experience, programmers often have their own personal
preference for a certain language. All the languages have advantages and
disadvantages, and no single one of them is suitable for all control tasks. We start
with three basic statements and then proceed to some important characteristics of
each language.
• In small applications with relatively few logical conditions, the demand for
good structure and re-use of code is not as great as in larger systems.
• ST and IL are textual languages, while FBD, LD, SFC, and FD are based on
graphical metaphors.
• LD and IL are not as powerful as ST or FBD or FD.
• FBD is not as powerful as FD.
Note that the definition of function block is allowed in all the six languages.
A function block is a method of encapsulating the code in a “black box” with
inputs and outputs.
3BSE043732-600 57
General Section 2 Programming Languages
A1 A3 M1
LDN A3
AND( A1
OR A2
)
A2
ST M1
LD IL
A1
A2 1
M1 := ( A1 OR A2 ) AND NOT A3; & M1
A3
ST FBD
Figure 18. A Boolean condition programmed with four of the five IEC 61131-3
programming languages. SFC is normally only used for sequences
Some important characteristics of the languages are listed in the Table 3.
58 3BSE043732-600
Section 2 Programming Languages Function Diagram (FD)
Table 4.
3BSE043732-600 59
Pages in FD Section 2 Programming Languages
The FD language has three main elements that help in creation of the logic:
• Pages
• Invocation blocks (objects)
• Data connections
Pages in FD
The Page element in FD represents one page in a diagram or diagram type.
It contains objects and data connection elements. Pages are numbered starting at 1.
Page numbers are unique within one diagram or diagram type.
60 3BSE043732-600
Section 2 Programming Languages Data Connection through Connection Ports
3BSE043732-600 61
Data Connection through Connection Ports Section 2 Programming Languages
Figure 21. Example of connection ports with negation (Activate and Alarm)
Some blocks display built-in connection ports. One example is invocation blocks,
invoking SFC code blocks. These blocks display the built-in control variables such
as Hold, Reset, and so on, as connection ports.
62 3BSE043732-600
Section 2 Programming Languages Data Connection through Connection Ports
3BSE043732-600 63
Execution of Diagram and Diagram Type Section 2 Programming Languages
Page Connector
A Page Connector block is a reference to a connection port on a block located on
another page than the page connector itself. The page connector allows connections
between ports on blocks on different pages in a diagram.
Asynchronous execution
The diagram supports asynchronous execution of both function block instances and
control module instances. If an invocation block referring to an asynchronous
function block is placed in a diagram, the invocation of this block results in passing
parameter to the function block instance. This works similarly as invocations to
asynchronous function block instances in Structured Text.
The code block sorting of function diagram is affected, if invocation block refers to
an asynchronous control module instance. Asynchronous control module instances
are not sorted together with the sorting group defined by the function diagram.
Instead, they are sorted with the sorting group defined by the task to which they are
connected.
64 3BSE043732-600
Section 2 Programming Languages Structured Text, ST
Structured Text, ST
Structured Text (ST) is a high-level programming language, similar to Pascal and C,
that has been specifically designed for use in programmable controllers. It is
compact, highly structured and contains a comprehensive range of constructs for
assignments, function/function block calls, expressions, conditional statements,
iterations and more. The code is simple to write and easy to read, because of its
logical and structured layout. The compactness of the language allows a clear
overview of the code and less scrolling in the editor. Tabs and spaces are used to
structure the code for easy reading.
ST code can be written using any text editor, for example Microsoft Word, and
then copied and pasted into the Structured Text editor code pane in Control
Builder. Note however, that you only have access to online help (use the F1 key)
in the editor of Control Builder.
3BSE043732-600 65
Functions in ST Section 2 Programming Languages
Functions in ST
Statements
The ST language contains a list of statements, such as assignment statements
(variable:= expression), conditional statements (if, then, else, case), iteration
statements (for, while, repeat) and control statements (exit, return). Statements
contain expressions which, when evaluated, result in a value of a variable having
any kind of data type.
Statements should be written in a structured way, similarly to when programming in
Pascal or C.
Expressions
ST uses Boolean expressions (and, or, not, xor), arithmetic expressions (+, -, *, **,
mod), and relational expressions (=, >=, >, <=, <, <>). An expression using these
operators always results in a single value. An expression contains operators,
functions and operands. Operators may be +, -, /. Functions may be, for example,
sin(x) or cos(x). The operand can be a value, a variable, a function or another
expression.
When you run your code in Test mode, it is possible to view the code in Ladder or
Function Block Diagram. Select Tools> Setup in the menu of the code block where
the code is written (you must be in Test or Online mode when performing this).
66 3BSE043732-600
Section 2 Programming Languages Function Block Diagram, FBD
Function Blocks
Function blocks are called by a statement consisting of the function block name
followed by a list of named inputs and output parameter value assignments. The
programmer selects any available function block from a list and enters the values.
Timer( IN := switch3,
PT := delay1,
Q => lamp;
The code above shows a function block in ST with input and output parameters.
Execution Rules
The priority of operators determines the order of evaluation of an expression. An
expression in parentheses has the highest priority and the OR expression has the
lowest priority.
Code blocks are executed from left to right, see Figure 25.
3BSE043732-600 67
Similar to Electrical Diagrams Section 2 Programming Languages
TON
AND IN Q
Negation symbol PT ET
Figure 27. Some fundamental rules for drawing function block diagrams
68 3BSE043732-600
Section 2 Programming Languages Boolean Functions and Feedback are Easy to Implement
lines between blocks symbolize signal flow in the system. Electrical engineers who
have experience in designing and analyzing circuit diagrams often have a preference
for programming with FBD.
Functions in FBD
When graphically connecting two functions that have parameters of data type
string, the system will create an intermediate string variable limited to 40
characters (default length of string data type). This means that strings may be
truncated to 40 characters.
Basic Functions
The following basic FBD language functions correspond to the operators of textual
programming languages.
• Assignment functions (move, :=)
• Boolean functions (not, and, &, xor, or, >=)
3BSE043732-600 69
Standard Function Block Types in FBD Section 2 Programming Languages
Connections
In the Function Block Diagram editor, the parameters of functions and function
blocks are shown as pins on the boxes. The assignment of values (variables and
constants) to parameters is shown by lines connecting the pins.
If a parameter is assigned to another parameter, one of them must be an output
parameter and the other an input parameter (an output parameter can be assigned to
any number of input parameters but never to another output parameter).
All function blocks have a built-in algorithm for calculating output values based on
the status of the inputs.
When working with Boolean signals, negated inputs or outputs can be shown using
a small circle placed at the corresponding line, close to the block symbol. Some
systems use a NOT function block instead of the circle.
Execution Rules
The evaluation of parameter values corresponds to the execution order of the
function blocks and functions within the POU. The execution order is represented
by the order of the graphic symbols (boxes) in FBD, from left to right, and from top
to bottom. You can change the execution order later, by moving the selected
function blocks and functions.
70 3BSE043732-600
Section 2 Programming Languages Standard Function Block Types in FBD
• Timers
• Counters
Bistables
Two types of bistables are available, SR and RS. Both of them have two Boolean
inputs and one output. The output is set (SR) or reset (RS) as a memory when the
triggering input (S1 or R1) momentarily becomes true. When the other input
becomes true the output returns to its initial state. If both inputs are true the SR will
be set while the RS will be reset.
SR bistable RS bistable
SR RS
S1 Q1 S Q1
R R1
S1 R1
Q1 Q1
R S
Figure 28. SR and RS bistable symbols with their corresponding functions below
Edge Detectors
There are two edge-detecting function blocks, Rising edge trigger (R_TRIG) and
Falling edge trigger (F_TRIG), which are used to detect the changing state of a
Boolean input. The output of the blocks produces a single pulse when a transition
edge is detected.
When the input changes state, according to the type of edge detector, the output is
true during one function block execution. After that the output remains false until a
new edge is detected.
3BSE043732-600 71
Standard Function Block Types in FBD Section 2 Programming Languages
R_TRIG F_TRIG
CLK Q1 CLK Q1
CLK CLK
Q Q
Figure 29. Edge detectors create a single pulse with the same duration as the
execution time of the function block
Timers
Timers are among the most used function blocks in a control application. Whenever
there is a need for a time delay between a change of state and the corresponding
action a timer can be used. In most programmable control systems the timing is
based on the CPU system clock, which means that the specified time intervals are
very precise.
There are three different types of timer function blocks, pulse timers (TP), on-delay
timers (TON) and off-delay timers (TOF). All of them have a Boolean input called
IN, a Boolean output called Q, an input of type time called PT and an output of type
time called ET.
The required delay (or pulse width) is specified on input PT (Preset Time) while the
actual elapsed time is shown on output ET (Elapsed Time).
A pulse timer is normally used to generate output pulses of a specified duration.
When input IN changes to the true state the output Q follows and remains true for a
duration specified by input PT. The elapsed time ET is increased linearly as long as
the pulse output is true. When the pulse terminates, the elapsed time is held until the
input changes to false. Note that the output Q will remain true until the pulse time
has elapsed, even if the input changes to false.
Both delay timers are used to delay an output action by the specified time PT when
a certain condition becomes true.
72 3BSE043732-600
Section 2 Programming Languages Standard Function Block Types in FBD
The on-delay timer delays the activation of an output. When the input IN becomes
true the elapsed time at output ET starts to increase. If the elapsed time reaches the
value specified in PT, the output Q becomes true and the elapsed time is held. The
output Q remains true until input IN becomes false. If input IN is not true longer
than the specified delay in PT, the output remains false.
The off-delay timer delays the deactivation of an output. When the input IN
becomes false, the elapsed time starts to increase and continues until it reaches the
specified delay given by PT. The output Q is then set to false and the elapsed time is
frozen. When input IN becomes true the output Q follows and the elapsed time is
reset to zero.
Pulse timer On-delay timer Off-delay timer
TP TON TOF
IN Q IN Q IN Q
PT ET PT ET PT ET
IN IN IN
PT PT PT PT PT PT
Q Q Q
ET ET ET
Figure 30. Timing diagrams for the three different types of timer function blocks
Counters
Counters are another commonly used type of function block. These are designed to
be used in a wide range of applications, for example counting pulses, revolutions,
completed production batches, etc.
There are three types of counter blocks, up-counters (CTUs), down-counters
(CTDs) and up-down counters (CTUDs). CTUs are used to indicate when the
counter has reached a specified maximum value. CTDs indicate when the counter
reaches zero, on counting down from a specified value. CTUDs can be used to both
count up and count down and have two outputs indicating both maximum value and
zero.
3BSE043732-600 73
Standard Function Block Types in FBD Section 2 Programming Languages
A CTU has three inputs and two outputs. A CTU block counts the number of pulses
(rising edges) detected at the Boolean input CU. The input PV (Preset Value) of data
type integer defines the maximum value of the counter. Each time a new rising edge
occurs on CU the output CV (Counter Value) of type integer is incremented by one.
When the counter reaches the value specified in PV, the Boolean output Q becomes
true and counting stops.
If necessary, the Boolean input R (reset) can be used to set the output Q to false and
to clear CV to zero.
Up counter
CU
CTU
bool CU Q bool Q
bool R R
int PV CV int CV=PV
CV=0
CV
Figure 31. Example of a CTU counter block with preset value PV=5
The CTD is very similar to CTU with three inputs and two outputs. A CTD counts
down the number of pulses detected at the Boolean input CD. The input PV is used
to specify the starting (integer) value of the counter. Each time a new rising edge
occurs on CD the output CV is incremented by one. When the counter reaches zero,
the output Q becomes true and counting stops.
If necessary, the Boolean input LD (load) can be used to clear the output Q to false
and to load the output CV with the value specified in PV.
Down counter
CD
CTD
bool CD Q bool Q
bool LD LD
PV CV=PV
int CV int
CV CV=0
Figure 32. Example of a CTD counter block with preset value PV=5
The CTUD is a combination of the other two counter blocks. It has two Boolean
inputs, CU and CD, used for counting up and counting down the value in output CV.
Similarly to the two other counters, the integer input PV defines the counter's
74 3BSE043732-600
Section 2 Programming Languages Ladder Diagram, LD
maximum value. When the counter reaches the value specified in PV the output QU
is set to true and counting stops. In a similar way, the output QD is set to true and
counting stops when the counter reaches zero.
If necessary, the input LD can be used to load the value from PV to the output CV
while the input R can be used to clear the output CV to zero.
Up-down counter
CU
CTUD
bool CU QU bool CD
bool CD QD bool QU
bool R
QD
bool LD CV int
int PV LD
R
CV=PV CV=PV
CV CV=0
Figure 33. Example of a CTUD counter block with preset value PV=3
The CTUD is often used in applications where there is a need to monitor the actual
number of items in a process. It could, for example, be used to count the number of
products placed on and taken off a store shelf.
Ladder Diagram, LD
Ladder Diagram (LD) is a graphical language. LD describes the POUs in a way
similar to relay logic. In LD, you can implement complex AND/OR logic based on
the idea of power flow from a power rail through relay contacts and coils, to the
other power rail. You can also add function blocks and functions to the power rails
and LD presents them similarly to a Function Block Diagram (FBD). The use of the
LD editor is especially advantageous with small systems, and if you are familiar
with electrical wiring diagrams and relay control.
3BSE043732-600 75
Ladder Diagram, LD Section 2 Programming Languages
Contacts represent inputs from the process and coils outputs. An LD diagram is
limited on both sides by vertical lines, called power rails. The power rails serve as a
symbolic electrical power supply for all the contacts and coils that are spread out
along horizontal rungs.
Each contact represents the state of a Boolean variable, normally a transducer, but
sometimes also an internal variable in the control system. When all contacts in a
horizontal rung are made, i.e. in the true state, power can flow along the rail and
operate the coil on the right of the rung. The coil normally represents physical
objects like a motor or a lamp, but may also be an internal variable in the control
system.
There are two types of contacts, normally open and normally closed. Contacts
which are normally open present a true state (Boolean variable is 1) when they are
76 3BSE043732-600
Section 2 Programming Languages Easy to Understand
closed. Normally closed contacts present a false state (Boolean variable is 0) when
they are closed.
In analogy with electrical circuits, contacts connected horizontally in series
represent logical AND operations. Parallel contacts represent logical OR operations.
It is possible to create LD programs that contain feedback loops, where the variable
from an output coil is used as an input contact, either in the same or in other logical
conditions. In a real-world relay circuit this is equivalent to using one of the relay's
physical switches as an input contact. A person with experience in computing would
probably call this a memory bit.
start stop fan
fan
Figure 35. Feedback loop in an LD program. The fan starts with an impulse on
contact start and continues to run until the contact stop is opened
Easy to Understand
Programming with LD can be learnt relatively quickly and the graphical
presentation is easy to follow. The method is particularly easy to understand by
people who are familiar with simple electrical or electronic circuits.
3BSE043732-600 77
Weak Software Structure Section 2 Programming Languages
78 3BSE043732-600
Section 2 Programming Languages Limited Support for Sequences
The lack of features for passing parameters between program blocks makes it
difficult to break down a large program into smaller parts that have a clear interface
with each other. Usually, it is possible for one part of a Ladder Diagram to read and
set contacts and outputs in any other part of the program, which makes it almost
impossible to have truly encapsulated data.
This lack of data encapsulation is a serious problem when large programs are
written by several different programmers. There is always a danger that internal data
in one block can be modified by faulty code in other program blocks. Each
programmer, therefore, has to be very careful when accessing data from other
program blocks.
There are also problems in using structured data with ladder programs since data are
normally stored and addressed in single memory bits. Many control applications
often have a need to group data together as a structure. Some sensors provide more
than one variable that has to be recorded by the control system. Apart from the
physical value measured by the sensor, the application sometimes needs to disable
the sensor, place it in test mode, record the time when the sensor is active and also
raise an alarm if the sensor is activated longer than a certain prescribed period.
All of this information from the sensor should ideally be handled as a single
structure that can be addressed using a common name. In most ladder programs
such data is often spread out among different ladder rungs. Without a data structure
the programmable controller has no provision for warning the programmer when
incorrect data are accessed.
3BSE043732-600 79
Limited Support for Sequences Section 2 Programming Languages
state_1 state_2
state_2 state_3
state_3 state_1
state_1 output_a
state_2
state_3 output_b
Figure 37. Sequence program with three states controlling two outputs
From the above example it is obvious that ladder programs with sequences can
become very large and difficult to maintain. The most obvious problem is that
control of the memory-based sequence model is mixed with the application logic so
the behavior of the complete program is difficult to understand and follow.
80 3BSE043732-600
Section 2 Programming Languages Difficult to Reuse Code
Functions in LD
Basic Functions
The basic functions in the LD language are the same as the basic functions in FBD,
see Basic Functions on page 69.
Connections
You can assign variables to coils of rungs and output parameters of function blocks
and functions. The variables assume the values of the corresponding coils and
output parameters. You can assign values to contacts of rungs and input parameters
of function blocks and functions. The value can either be a variable, such as one
with the value of an output parameter, or a constant. The assignment of parameters
is shown by variable names, constant names and lines between the pins on boxes
symbolizing the function blocks and functions.
Execution Rules
The evaluation of parameter values corresponds to the execution order of the rungs,
function blocks and functions within the POU. The execution order is represented
by the order of the rungs in LD from the top to the bottom. You can change the
execution order later by moving the selected rungs up or down within the POU, for
example, by cutting and pasting, or by moving them in the Structure pane.
The execution order of function blocks and functions within a rung is defined by
their position. They are executed from left to right, as the current flows from the left
power rail to the right one.
3BSE043732-600 81
Instruction List, IL Section 2 Programming Languages
Instruction List, IL
Instruction List (IL) is a low-level language in which the instructions are listed in a
column, one instruction on each line. It has a structure similar to simple machine
assembler code.
IL has been chosen as the preferred language by a number of PLC manufacturers for
their small to medium-sized systems. The lack of structured variables and weak
debugging tools make the language less suitable for larger systems.
IL code can be written in Microsoft Excel, and then copied and pasted into the
Instruction List editor code pane in Control Builder. Note, however, that you can
only have access to online help (use the F1 key) in the editor of Control Builder.
82 3BSE043732-600
Section 2 Programming Languages Best System Performance
Machine-dependent Behavior
Of all the five IEC languages, IL has been found to be the most controversial.
Unfortunately, the semantics, i.e. the way in which the instructions operate, are not
fully defined in the standard. For example, it is unclear how the result register stores
values of different data types. Normally, the RR is not intended for storing
structured data, which means that it is very difficult to obtain consistent behavior
when working with arrays or strings.
Another problem is that the control system behavior for error conditions is not
defined. This means that different system types may respond differently if the
programmer uses inappropriate data types. Errors can normally only be detected
when the system is running the application.
3BSE043732-600 83
Functions in IL Section 2 Programming Languages
Functions in IL
Instructions
The following instructions are available in the IL language.
• Load and store (ld, ldn, st, s, r)
• Return (ret, retc, retcn)
• Jump (jmp, jmpc, jmpcn)
• Function block call (cal, calc, calcn)
Expressions
Expressions available in IL are boolean expressions (and, andn, or, not, xor, xorn),
arithmetic expressions (add, sub, mul, div), and relational and equality expressions
(gt, ge, eq, lt, le, ne). An expression using these operators always results in a single
value. An expression contains operators, functions and operands. The operand can
be a value, a variable, a function or another expression.
Execution Rules
The instruction list is executed line by line, regardless of what is on the next line, as
long as there are no parentheses.
Example
IL programs are often written on a spreadsheet-like form with one column for
instructions and another for operands. Labels, used to identifying entry points for
jump instructions, are placed in their own column to the left of the instruction. The
instructions only need to have labels if the program contain jumps. Descriptions are
placed in a fourth column to the right of the operand. It is strongly advisable to add
descriptions to all instructions during programming. Large IL programs without
descriptions are very difficult to follow.
84 3BSE043732-600
Section 2 Programming Languages Result Register
Result Register
The result register (RR) is of central importance in IL. This register is also called the
IL register or accumulator. Current data and the results of calculations,
comparisons, loading of variables, etc., are stored in this register.
In the Instruction List (IL) language, literals are assigned the shortest data type
that can hold this literal. This might cause unwanted truncations during
calculations. To avoid this, use variables with the attribute constant.
Most operations consist of calculation between the result register and the operand.
The result of an instruction is always stored in the result register. Most programs
start with the instruction LD, which loads the accumulator with a variable. The
result register changes its data type automatically during program execution in order
to fit the value that needs to be stored.
Programmable controllers normally only have one result register. This must
naturally be taken into consideration by the programmer when writing code. The
program example in Table 5 first loads the RR with a real variable. The second
instruction compares RR with another variable which results in a Boolean TRUE or
FALSE result in RR.
3BSE043732-600 85
Sequential Function Chart, SFC Section 2 Programming Languages
86 3BSE043732-600
Section 2 Programming Languages Powerful Tool for Design and Structuring
Figure 39. Example of a sequence structure. In the box Init P1 contains code, N and
P0 are empty
3BSE043732-600 87
Other Programming Languages are Needed Section 2 Programming Languages
The SFC schemes produced in the first phase of a project can be further specified
and refined as new information becomes available. Actions associated with overall
steps can then be described via other nested SFC schemes.
The good continuity of SFC from the initial phase to the refining design phases
makes it very popular among system designers and programmers.
Functions in SFC
Basic Functions
The SFC editor contains a number of commands for creating steps, transitions,
sequence selections, new branches, jumps, make subsequence etc. Basic elements in
a sequence are steps and transitions. Each transition has an associated boolean
transition condition.
The actions in a step are written in structured text, ST. To see whether the actions
P1, N or P0 contain any code or not, there is an indication for each action type (P1,
N and P0) on the right-hand side part of the step-box (see Figure 39). The text color
indicates the following:
• White text means that the block exists, but is empty.
• Black text means that the block exists and contains code.
• No color means that the action block does not exist.
Double-clicking on a box expands the information, as shown in Figure 40.
88 3BSE043732-600
Section 2 Programming Languages Functions in SFC
Sequential Rules
The sequence loop is always closed. The last transition is always connected to the
first step. Execution continues from the last step to the first step when the last
transition condition becomes true.
Transitions
The transition from one step to another is controlled by transition conditions, which
are boolean expressions including process signals.
Online Functions
In online mode, code and the variable values are displayed in the program editor.
Online commands in the menu bar and tool bar buttons for the code are the same as
in the other language program editors. Live values for global variables declared in
the application root can be shown in SFC Viewer.
Some functions are only available in the online mode, for example:
• Disable Actions
• Show Actions
• Block Transitions
3BSE043732-600 89
Chart Structure Section 2 Programming Languages
Chart Structure
SFC is a method of dividing the control function into a series of steps represented by
rectangular boxes and connected by vertical lines. Each step represents a physical
state of the system being controlled. On each connecting line there is a horizontal
bar representing a transition. The transition is associated with a transition condition
which, when true, deactivates the step before the transition and activates the step
after the transition. The execution flow is normally down the page, but SFC can also
branch backwards in the chart.
Each step is normally associated with one or more actions. These actions describe
the actual physical behavior in the plant, e.g. open valve, start motor, and so on. An
action can, in some editors, be described directly in the associated step rectangle.
However, in most editors the actions are described as separate program statements
(normally in ST language) in other code blocks or in a separate editor window
associated with the step. An important consideration in SFC programs is that only
the code in active steps is executed.
All SFC sequences must have an initial step identifying where program execution
starts after system initialization. This step is drawn as a rectangular box with double
border lines. The initial step remains active until the following transition enables
flow to the next step.
Some editors allow the programmer to describe short transition conditions directly
on the SFC, close to the corresponding bar. However with more complex conditions
it is better to put the code in a separate window.
When the sequence has finished, the flow can be terminated by a step with no
associated action. If necessary, the sequence can also repeat the same behavior
cyclically. Cyclic execution is enabled by a conditional branch backwards to the first
step in the flow. To avoid cluttering the SFC with crossing lines, branches are drawn
with a starting arrow where the branch begins and a concluding arrow at the step
where the branch ends up. In order to clarify the flow the transition name is written
at both places.
90 3BSE043732-600
Section 2 Programming Languages Steps and Transitions
Initial step
Start Transition
Tr1 Transition conditions with code
in other windows
Push
Drill
Tr3
Wait
Tr4
Label
Tr5
Stop
Tr6
Figure 41. Example of an SFC program for an automatic drilling machine. Note the
cyclic execution being enabled by the Tr6 transition condition
3BSE043732-600 91
Action Descriptions Section 2 Programming Languages
Action Descriptions
Steps in an SFC are used to describe the states of a controlled plant or machine.
When the programmable controller executes an SFC program the state model only
works as an internal memory representation of the control function. In order to get
real-world actions each state has one or more action descriptions containing
program code controlling the physical objects. Any of the four IEC languages can
be used to describe the behavior of an action.
Action descriptions are normally placed in rectangular boxes that are attached to the
step with a connection line. To avoid overloading the SFC with too much detailed
information the boxes can be folded in or out. Most editors use a separate window or
another code block for specifying the actions.
Figure 42. Example of a step with the associated actions folded out and one of them
described in a separate editor window
Each action can have one or more action qualifiers that determine when and how the
action is executed. Most editors support the following three action qualifiers.
• The N action qualifier (Non-stored) causes the action code to be executed
continuously as long as the step is active.
• The P1 (Pulse rising edge) action qualifier causes the action code to be
executed once when the step becomes active.
• The P0 (Pulse falling edge) action qualifier causes the action code to be
executed once when the step becomes inactive.
To use one or more of the action qualifiers the programmer writes the code
statements in the associated editor window. It is not necessary to use all three action
qualifiers. Most sequences use the N action qualifier, but it is possible to leave all
three qualifiers empty resulting in a step without any actions.
92 3BSE043732-600
Section 2 Programming Languages Sequence Selection and Simultaneous Sequences
S1
Tr1
S2
Tr2 Tr3
S3 S4
Tr4 Tr5
S5
Tr6
3BSE043732-600 93
Sequence Selection and Simultaneous Sequences Section 2 Programming Languages
Start
Tr1
Acid
Tr2
Tr3 Tr4
Heat Temp
Tr5
Wait
Tr6
94 3BSE043732-600
Section 2 Programming Languages Subsequences
Subsequences
One of the main uses of SFC is as a tool for developing the top down design of the
control function in a complex plant. Most processes can be described by a relatively
small number of main states, each representing a subprocess with a number of
minor states.
Some editors provide a method for dividing large SFC programs into a number of
subsequences, each represented by a general symbol. A subsequence may in turn
contain other subsequences which provides a powerful tool for structuring the
overall control function into any number of hierarchical levels. This allows attention
to be focused on either the overall behavior of the entire plant or on the detailed
operation of the controlled process objects.
A subsequence usually contains sequence parts that perform a set of logically
related actions. Steps and actions from different hierarchical levels are never visible
at the same time. To study the inside of a subsequence the programmer has to step
into the subsequence which changes the SFC view, so that only the contents of the
selected subsequence are displayed.
3BSE043732-600 95
SFC Viewer Recommendations Section 2 Programming Languages
• More than one step and one transition can be used in each subsequence.
Subsequences should not contain more than two levels of sequence selections
or simultaneous sequences.
• Sequences with a maximum of up to 8 steps and/or up to 16 transitions can be
executed parallely.
• Use Boolean variables for display in the transition display of SFC Viewer.
Keep analog supervision separated.
• Keep the variable name to be exposed in the SFC Viewer as the left most part in
the structured variable used in the SFC Editor. This has to be notified in order
to secure the essential part of the very long structured variable name to get
exposed in the SFC Viewer. In SFC Viewer the tool tip function shows the
complete structure variable name.
• Do not refer function block sub object parameter names directly in SFC Viewer
transition conditions, instead connect a local variable to the sub object variable
and use it. Example, if there is a sub object called "Motor1" with a parameter
called "Running", one can not write "Motor1.Running" in the SFC, because
that property does not exist on the SFC object. Instead a variable can be
connected to "Motor1.Running", and used in SFC.
• The function block or control module in control builder with the SFC must be
an aspect object in order to create the SFC Viewer. In order to show function
blocks and control modules as aspect objects in PPA the option "Instantiate as
aspect object" must be checked in control builder. The option is located in
context menu for function block and control module tree items in the project
explorer.
The Transition window (Function plan or List view) has a limitation on the
number of variable entries it can immediately display when clicked. This limit is
found to be 150 variable entries. For variable entries more than 150, the
performance is negatively affected, and the transition window takes a longer time
to display the function plan or list views.
For example, for a transition window showing 200 variable instances, it takes
around 15 seconds to display the function plan or list view contents.
96 3BSE043732-600
Section 2 Programming Languages Advice on Good Programming Style
3BSE043732-600 97
Advice on Good Programming Style Section 2 Programming Languages
98 3BSE043732-600
Section 3 Programming in Practice
Introduction
This section contains examples and practical advice on:
• How to organize your code, see Organizing Code on page 99.
• How to use the code sorting function to optimize execution and how to solve
code loops, see Code Sorting on page 127.
• How to optimize your code, see Code Optimization on page 141.
• How to tune your tasks to optimize execution, see Task Tuning on page 149.
Organizing Code
This subsection contains advice on how to implement the methods for organizing
code, as well as more detailed information about data flow and execution designed
to help you understand how to solve various programming problems:
• For advice on how to program using function blocks, see Programming with
Function Blocks on page 100.
• For information on function block calls, see Function Block Calls on page 103.
• For information on function block execution, see Function Block Execution on
page 104.
• For information on function block code sorting, see Function Block Code
Sorting on page 106.
3BSE043732-600 99
Programming with Function Blocks Section 3 Programming in Practice
• For advice on how to create your own function block type, control module type
and diagram type, see Self-Defined Types on page 116.
• For an example of how to use structured data types, see Structured Data Type
Examples on page 122.
For a discussion of which method (control modules, programs or Function
Designer) to use when organizing your code, see Code Organization on page 21 in
Section 1, Design Considerations.
Functions
• always return a (single) value at the time they are executed,
• can be used in expressions,
• do not retain their old values from one scan to the next,
• always give the same value when the input parameters have the same value,
• has a declaration and a definition,
• do not have a type-instance relationship
• cannot be customized.
Function Blocks
• have both input and output parameters,
• can provide several output values using local variables, external variables,
parameters, and extensible parameters,
• retain their values, from the last call, when called again, and can give different
output values even if the input values are the same,
100 3BSE043732-600
Section 3 Programming in Practice Programming with Function Blocks
3BSE043732-600 101
Programming with Function Blocks Section 3 Programming in Practice
Conclusions
Using an In_out parameter instead of an In or Out parameter, will result in better
execution time, and memory performance, if the data type size of the parameter is
greater than 4 bytes (for example, for the string data type, and structured data type).
For simple data types (for example dint, real, bool, dword) no improvement in
performance is gained by using the In_out parameter type, and it is then better to
select either the In or Out parameter type depending on how the parameter is to be
used.
In and Out parameters can be assigned initial values. These can be used together
with the possibility of leaving In and Out parameters unconnected. When writing
the function block type, you can, for example add an In parameter that can be
optionally connected when calling a function block of the function block type. The
parameter can then have a suitable initial value, being the default value of the
parameter that is used inside the function block, if the parameter is left unconnected.
Note, however, that the parameter will not be re-initialized if it is unconnected in
one call, but has been connected (or assigned a value in another way) earlier. The
parameter of the function block will only be initialized once when the controller is
started (at warm restart, or at cold restart) depending on the parameter attribute
(retain or coldretain).
102 3BSE043732-600
Section 3 Programming in Practice Function Block Calls
MyFirstFB(In1 := Indata1,
Out1 => LocalVar);
MySecondFB(In1 := LocalVar,
Out => Outdata1);
The code can be written without using the intermediate
variable LocalVar:
MyFirstFB (In1 := Indata1);
3BSE043732-600 103
Function Block Execution Section 3 Programming in Practice
104 3BSE043732-600
Section 3 Programming in Practice Function Block Execution
Another related problem concerns the ability of the controller to handle a power
failure. If a power failure occurs, the controller must go into a safe state and
maintain this safe state until the power supply is re-established. To do this, the
controller must thus be able to reach a scheduling point within a certain limited time
(a few milliseconds).
Conclusions
It is important to bear in mind that scheduling points at inappropriate places in the
code can give rise to data inconsistency (especially when using In_out parameters).
A sufficient number of scheduling points should be included in the code so as not to
cause task latency.
The frequency of scheduling points should be such that one can be reached within a
few milliseconds to allow the controller to reach a safe state in the event of a power
failure
In practise, this means that you should avoid writing long code blocks and avoid
data access from several code blocks which may involve changes in data.
You can read more about tasks in the System 800xA, Control, AC 800M,
Configuration (3BSE035980*).
3BSE043732-600 105
Function Block Code Sorting Section 3 Programming in Practice
In FD, the execution order of a function block is based on its Data Flow Order
number. Each function block can be used once in a diagram and can be placed
anywhere in the FD code block.
106 3BSE043732-600
Section 3 Programming in Practice Control Modules in Function Blocks
That is, no analysis is made of how the function blocks actually use parameters. In
addition, function block references to external variables do not affect the execution
order of control module code blocks.
The table below shows the parameters that affect the code block sorting.
Hence, it is important to note that IN_OUT parameters may result in a code block
loop error, since the analysis cannot determine if the parameter has write or read
status. For further information, see Correcting Sorting Problems on page 139.
3BSE043732-600 107
Control Modules in Function Blocks Section 3 Programming in Practice
The group is considered empty if all control modules are either of the following.
• asynchronous (a sub control module has a task connection other than its
parent's task connection)
• without code
• only contain start code
Compile errors are generated if the rule does not apply.
It is possible to make several calls to ExecuteControlModules from the function
block code. At each call, all control modules in the group are executed.
108 3BSE043732-600
Section 3 Programming in Practice Control Modules in Function Blocks
3BSE043732-600 109
Control Modules in Function Blocks Section 3 Programming in Practice
As a comparison in the figure above, CM1, SubCM1, SubCM2 and CM2 form a co-
sorted group of control module code blocks executing in the Slow task.
110 3BSE043732-600
Section 3 Programming in Practice Continuous and Event-Driven Execution of Function Blocks
Continuous Execution
The table below lists the general parameters used in continuously executed function
blocks. Note that all parameters do not have to be connected.
If an error and a warning take place at the same time, the error has precedence over
the warning and Status is set to the error code. Error and Warning are only activated
upon the call of the function block.
The duration of the Error and Warning parameters is a pulse during one scan
only. Therefore latching in the application is required to detect these signals.
Parameter
Data Type Direction Description
Name
Enable bool In Activates/deactivates continuous
functionality
Valid bool Out Indicates that there is no error and that
the function is active. Warning status
does not affect Valid
Enabled bool Out Indicates that the function is active. Is
not affected by error status or warnings
status.
3BSE043732-600 111
Continuous and Event-Driven Execution of Function Blocks Section 3 Programming in Practice
Parameter
Data Type Direction Description
Name
Error bool Out Indicates an error (Status < 0)
Warning bool Out Indicates a warning (Status > 1)
Status dint Out Indicates Status code
A function block can be activated and deactivated using the Enable parameter.
Figure 47 shows an example of the parameter interaction in this case.
If a function block is invoked exactly once every scan, the distance in time
between two invocations is the interval time of the task.
112 3BSE043732-600
Section 3 Programming in Practice Continuous and Event-Driven Execution of Function Blocks
This is for functions that can be started and stopped directly. The Enable parameter
is used to activate/deactivate the function block.
3BSE043732-600 113
Continuous and Event-Driven Execution of Function Blocks Section 3 Programming in Practice
114 3BSE043732-600
Section 3 Programming in Practice Continuous and Event-Driven Execution of Function Blocks
Parameter
Data Type Direction Description
Name
Req or bool In Activates the function block on a positive
Request edge. Must be reset by the user.
When the Req parameter is set for the
first time, it is advisable to wait until the
execution of the operation is completed.
That is, wait for the result derived via the
Done (Ndr) parameter or alternatively
the Error parameter before triggering
again. The Status parameter can be
used for this validation instead of the
above mentioned parameters.
A “pending operation” is indicated by
setting the Status parameter to “0”.
An important example of this usage is
when communicating in a multi drop
configuration where it is important to
achieve a distributed access to the
slaves. That is, do not ever trigger them
in a stochastic way without using the
handshaking.
Done or Ndr bool Out Indicates that a command has been
(New Data executed but there were errors.
Received)
Error bool Out Indicates that a command has been
executed but there were errors.
Status dint Out Status code
Warning bool Out Optional parameter. Indicates that the
command has been executed and that
there were no errors, but a warning.
3BSE043732-600 115
Self-Defined Types Section 3 Programming in Practice
Self-Defined Types
This section gives some good advice on increasing the performance of your own
function block types, control module types, and diagram types. The advice concerns
solutions where an efficient application code is the primary goal. Other advice
would be given if readability of the application code was of more interest.
It is important to apply foresight when creating your own function block,
control module or diagram types. The choice of suitable types saves memory and
reduces execution time, which means increased control system performance. Saving
1 kilobyte of memory in a type may mean that megabytes of memory will be saved
in the whole application.
Examples showing how to create your own function block types, control module
types, and diagram types are given in the System 800xA, Control, AC 800M,
Configuration (3BSE035980*).
116 3BSE043732-600
Section 3 Programming in Practice Self-Defined Types
It is recommended that you create your own libraries when working on a large
project, as this will give the project a better structure. Another major advantage of
creating your own libraries is that it is possible to re-use data types, function block
types, control module types, and diagram types in other projects. You can create
online help for own your libraries, see the System 800xA, Control, AC 800M, Binary
and Analog Handling (3BSE035981).
Each library has to be connected to the application where objects from the library
are used. See the System 800xA, Control, AC 800M, Configuration
(3BSE035980*).
3BSE043732-600 117
Self-Defined Types Section 3 Programming in Practice
• Code Arrangement
Considering that types are instantiated, it may be better to accept a less well-
arranged code, in order to achieve increased type performance. Comments in
source code (comments are not included in the compiled code), may
compensate for the reduced clarity of the code.
• Code Tab Start
Note that code tabs starting with Start_ in control modules, are only executed
once, after each warm restart, before all other code. This is a feature that
reduces code size and memory consumption.
• Overhead Time
Each code tab requires an extra overhead time in control modules. No
application execution will take place during this overhead time. The overhead
time will be 4 – 5 microseconds in a PM860 CPU1, so use a minimum of code
tabs in a control module. For example, removing five code tabs in a function
block type with 1000 function blocks based on that type, will save 25 ms of
execution time.
• Simple Function Blocks
Avoid the use of simple function blocks such as SR and R_Trig. Write the
equivalent code instead. The overhead time for simple function blocks will be
long due to parameter copying. For the same reason, avoid creating simple
types of your own.
Use timer functions instead of timer function blocks in your type. This will
save memory and reduce the execution time.
• Project Constants
Do not use variables intended to be literals in a type, even if they have the
attribute constant. Use project constants instead.
Project constants are easy to change in a single place, the same value is always
used in the whole control project, and they facilitate easier use of logical
names, instead of values. Objects access project constants by pointers. They
can be located in your library, thus they are easy to find and modify.
1. Code tabs used in SIL application has much greater influence on the overhead time compared to non SIL
applications.
118 3BSE043732-600
Section 3 Programming in Practice Self-Defined Types
3BSE043732-600 119
Self-Defined Types Section 3 Programming in Practice
Diagram Types
A diagram type is a POU that consists of parameters, variables, and code that
supports FD language. It is based on the object1 type design, which means that they
are described by their types. From the object types, you create instances that behave
exactly as the type.
Each instance (object) has its own memory representation of variables and
parameters, and when an object is called, it is the object that is called, not the
underlying type. The executable code, however, is shared between all objects and
belongs to the object type. To reduce memory usage, it is therefore a good idea to try
to have object types that can be used as a source for several objects. If different
behavior is required for an object, this can be expressed by type parameters, see
Flexible Types on page 121.
When you create your own, self-defined, diagram types, consider the following:
• Language Selection
The FD (Function Diagram) language is a mandatory programming language
for diagram types. Additionally, two IEC 61131-3 programming languages, ST
and SFC, can be used optionally in a diagram type.
120 3BSE043732-600
Section 3 Programming in Practice Self-Defined Types
• Code Arrangement in FD
The FD code pane supports graphical connections between the inserted objects.
It is recommended to divide the code in many pages in the FD code pane, for
better understanding and analysis. Each page and each object can have optional
description that is displayed together with the objects.
Each object has a unique Data Flow Order number that is assigned
automatically and displayed, based on the position of the object in the page.
This number is assigned from left to right when new objects are added. The
order of execution follows the Data Flow Order.
However, if the position of an object is changed after its graphical connections
are made, the connections are analyzed and the source will have the lowest
Data Flow Order number.
Therefore, it is recommended to place the objects that need to be executed first
on the extreme left of the FD code pane.
If the code becomes too complex to have graphical connections, the optional
ST and SFC code blocks can be used, which are either invoked from the FD
code block or sorted separately.
Flexible Types
A flexible (adaptable) function block, control module type or diagram type can be
used for creating several objects (that is, instances of a type), without having to
make too many variants of them. This can be done in two ways, you can either set
specific initial values (Init_Val) on an object in Plant Explorer (see System 800xA,
Control, AC 800M, Configuration, 3BSE035980*), or create parameters (for the
flexible type) for the control of certain behavior of the type. The parameters should
be set up (initiated) during the application start procedure.
To distinguish such parameters from other parameters, it is recommended that the
phrase Init be included at the end of the parameter name. You can see an example of
this by examining the library control module PidCC, where the parameters
SpExternalInit, SpManValueInit, etc., have the suffix Init.
3BSE043732-600 121
Structured Data Type Examples Section 3 Programming in Practice
122 3BSE043732-600
Section 3 Programming in Practice Structured Data Type Examples
Question Answer
What type of valve object do I need and A control module with activate and two
what additional functions/modules do I feedbacks.
need to achieve this?
How shall the valve be configured? Both in online and offline mode, that is,
from an interaction window (during
engineering) and/or from a faceplate
(Operators workplace). Also during
offline: in programming mode, set a
value on a connection that sets a default
(opened/closed) value for the valve in
the editor.
What kind of interfaces do we need? Four kinds of interfaces (HSI, IO,
Configuration and Application).
How shall the object operate, that is, Our valve must be able to operate both
shall it operate independently, or be an independently, as an object type, and as
integrated part of a larger object type, an object.
for example a tank line?
What kind of property permissions do HSI and Configure Variables are the
we need? only ones that need to be exposed via
the OPC server. Thus, these variables
need property permission settings and,
eventually, security definition settings as
aspect objects.
Does the valve need alarm handling, In our case we will make the valve
and if so, which object level shall contain template the alarm owner (highest
the alarm owner? level).
3BSE043732-600 123
Structured Data Type Examples Section 3 Programming in Practice
In Figure 51, one data type is used to send data to the application (POType) and
another data type is used to send data to the IO (IOType). Read steps 1 – 5 below
Figure 51.
Figure 51. Using structured Data Types to communicate between IO and the
application
1. The Application code (IEC 61131-3) is connected to the valve module via the
PO Data Type, forming a star connection.
2. The software creates an automatic OR function.
3. Each individual function (Fill, Clean, Empty etc) that activates the valve object
can be written as if it was the only function using the valve. This makes the
design easier, and improves the re-usability of the software.
4. The IO data type is the connection between the valve and the IO module.
5. If the type of IO connection should change from, for example, local IO to
fieldbus, you only need to change the object. You do not have to make any
changes in your application module (see item 3), since it has already been
tested and validated!
When we know what kind of object we are going to build, and how it should be
configured, we need to decide on what interfaces the valve needs. We could be
content with a single interface for all IO, HSI, configuration etc., but it would not be
a very good design.
Earlier on, we identified at least four separate interfaces (HSI, IO, Configuration
and Application). These interfaces can in turn be divided or translated into data
types.
124 3BSE043732-600
Section 3 Programming in Practice Structured Data Type Examples
MyValve can be put in the center of a design map, surrounded by interfaces that are
linked to the valve.
3BSE043732-600 125
Structured Data Type Examples Section 3 Programming in Practice
Another valve in our process is a single actuator, one-way valve for non-acid
liquids. It is programmed as ValveOnewayType and has an I/O parameter of
IO_ValveOnewayType with the following components.
Figure 55. I/O signals collected in one structured data type, (IO_MixingType)
We have now grouped the signals from and to the process (from the point of view of
the control system) into different parts of the process. The degree to which signals
are grouped is up to you. The I/O data types should preferably be placed as variables
or global variables in the application editor, so that they can be read and written
from the application.
126 3BSE043732-600
Section 3 Programming in Practice Code Sorting
Code Sorting
For control modules, the compiler analyzes each code block separately, with respect
to which variables are read and written by each block. ST, IL, FBD, and LD – SFC
are treated somewhat differently, see remark below. The compiler then determines
the optimal execution order for the code block. A block that assigns a value to a
variable has to be executed before the block that reads the variable value.
Figure 56. The code block in control module 1 must be executed before the code
block in control module 2
The technique for ordering the blocks is called code sorting, and means that the
optimal execution order will be based on data flow, instead of the program flow (as
is the case for function blocks). Code sorting guarantees that the code will be
executed in the correct order. Code sorting reduces time delays and results in a new
control module automatically being correctly placed in the process.
If a function block is called from a control module, only the parameter interface
(In, Out, or In_out) affects the code block sorting. That is, no analysis is carried
out of the actual use of parameters within the function block. In addition,
function block references to external variables do not affect the execution order
of control module code blocks.
Code sorting has no effect on control modules connected to different tasks.
Within an SFC code block, only the N action parts (not P0 or P1 actions) are
sorted.
The execution order of function blocks follows the program flow, as implemented
by the programmer according to IEC 61131-3.
3BSE043732-600 127
Sorting of Diagrams Section 3 Programming in Practice
Sorting of Diagrams
The FD language allows function block instances and control module instances to
be used in the same diagram even though they have very different execution models.
Function block instances are explicitly invoked whereas control module instances
are implicitly invoked by the system as a result of their declaration.
The code block sorting determines the order in which the code blocks are executed
in control module instances. The two mechanisms working together on function
diagrams are:
• Grouping of function block instances, functions calls, and code blocks calls
into invocation groups.
• Code block sorting performed on function diagrams. A function diagram
constitutes a sorting group which covers both the control module instances and
invocation groups in the function diagram.
The initial order presented to the sorting operation is based on the data flow order
specified on control modules in the diagram. Only data dependencies between the
control modules can alter this order.
If the diagram contains ST or SFC code blocks without invocations in the FD code
block, these code blocks do not have a data flow order. Instead, they are sorted with
the code blocks of invoked control modules.
128 3BSE043732-600
Section 3 Programming in Practice Sorting of Diagrams
When sorting code blocks (and when running with the same task), the DT1
boundary is ignored. Instead, all code blocks both within control modules and other
types are sorted together with the code blocks outside DT1. The control module
code blocks are sorted first, and then, the data flow order (which is already set)
determines the sorting order of the rest of the code blocks.
If the data flow order of a code block is smaller than the sort order, it is inserted
before. For example, in Figure 58, the sort order of code blocks can be
1A 2 3 4A 5A 5B 4B 1B.
3BSE043732-600 129
Code Loops Section 3 Programming in Practice
It is also possible to have code blocks in diagrams without specifying the data flow
order. The code block will then be sorted like code blocks in a Control Module.
Code Loops
If more than one control module code block uses the same variable for both reading
and writing, the compiler gives a warning message that a code loop has been found,
which means that the execution order cannot be resolved:
Figure 59. Control module 2 reads Request and writes Deliver, and control
module 1 reads Deliver and writes Request. This execution order cannot be resolved
This case yields the following error information:
Code loops can generate an error during compilation and interrupt the download.
Set the compiler switch Loops in Control Modules to Warning to bypass the
interruption for download.
However, it still might lead to unexpected execution behavior. It is recommended
that you solve code loop problems when they occur.
130 3BSE043732-600
Section 3 Programming in Practice Variable State
Variable State
State can only be specified for local variables of types bool, int, uint, dint, and real.
If, for some reason, you wish to override sorting and avoid the State implications,
you can assign the NoSort attribute to the variable.
3BSE043732-600 131
NoSort Attribute Section 3 Programming in Practice
NoSort Attribute
Incorrectly used, the NoSort attribute may cause execution errors and application
failure. NoSort should typically be used only when the code block connections
themselves unambiguously determine the execution order.
Use NoSort only if you know the data flow characteristics in detail.
132 3BSE043732-600
Section 3 Programming in Practice Interpret and Correct Code Loop Errors
3BSE043732-600 133
Interpret and Correct Code Loop Errors Section 3 Programming in Practice
134 3BSE043732-600
Section 3 Programming in Practice Interpret and Correct Code Loop Errors
2. Note the CONTROL MODULE lines and the succeeding CODE BLOCK line.
For each code block line, draw a circle on a piece of paper and write “1”, “2”,
etc, representing the code block identifiers.
Figure 63. The four code block representatives in the Loop Block 1
3. Return to the first control module in the code loop block and proceed to the
CODE BLOCK section. Inspect the lines below the code block line (1). (Do
not continue reading into the next CONTROL MODULE section.)
At the end of the first line we note that the variable M1_Fwd is read from “4”.
Draw an arrow from “4” to “1” (it is read from “4” by “1”). Label the arrow
“M1_Fwd”.
Continue to the next line. We note that the variable V1_Open is written to “3”.
Draw an arrow from “1” to “3” (it is written by “1” to “3”). Label the arrow
“V1_Open”.
3BSE043732-600 135
Interpret and Correct Code Loop Errors Section 3 Programming in Practice
At the end of the first line the variable M1_Fwd is read from “4”. Draw an
arrow from “4” to “2” (it is read from “4” by “2”). Label the arrow “M1_Fwd”.
Continue to the next line. The variable V2_Open is written to “3”. Draw an
arrow from “2” to “3” (it is written by “2” to “3”). Label the arrow “V2_Open”
136 3BSE043732-600
Section 3 Programming in Practice Interpret and Correct Code Loop Errors
Figure 67. The Loop Block 1 visualized from the Error Log output
The analysis shows that the code contains two loops, and that the variable M2_Stop
is part of both loops. Therefore, programming adjustments should, in this case, be
concentrated to the variable M2_stop. These are the facts, we can either accept that
code block 4 reads M2_Stop with a delay of one scan, or start over and re-design the
code. See Correcting Sorting Problems on page 139.
When you have a more trained eye you will be able to identify the flows in the error
log more quickly. Think as follows.
3BSE043732-600 137
Interpret and Correct Code Loop Errors Section 3 Programming in Practice
138 3BSE043732-600
Section 3 Programming in Practice Interpret and Correct Code Loop Errors
3BSE043732-600 139
Interpret and Correct Code Loop Errors Section 3 Programming in Practice
from the outside, another that performs the actual control and handles any state
machines, and a third that transfers signals to the outside.
There are a number of ways of correcting a sorting problem. The solutions below
represent an ascending scale of responsibility for the programmer. Complex code
loops may require combinations of these methods, in order to solve problems
efficiently.
1. Change code blocks contents.
This is the best way to correct a sorting problem. The compiler determines the
execution order of the code blocks in each control module. It is sometimes
possible to correct a code loop simply by splitting, or merging, code blocks.
Note that all “pages” in an FBD or LD code block belong to the same code
block.
a. Split one or more of the affected code blocks into two or more code
blocks.
b. Merge two or more of the affected code blocks. Note that this is only
possible if they are in the same control module.
2. Instruct the compiler what action should be taken when a sorting problem
arises. This is necessary if it is not possible to solve the code loop.
a. Use the “State” attribute on the variable/variables that form the code loop.
Use “:New” when you want the value from the current scan, and “:Old”
when you want the value from the previous scan. Use “:Old” in the code
block that is the least affected by data one scan old.
This alternative is used when the programmer wants to decide the sorting
order. Note, however, that not all data types have the “State” attribute;
only simple data types, excluding the string type.
The State attribute can only be specified for local variables of type bool, int, uint,
dint, and real. If you, for some reason, want to override sorting and thereby avoid
the State implications, you can assign the NoSort attribute to the variable.
140 3BSE043732-600
Section 3 Programming in Practice Code Optimization
3. Use “NoSort” attribute on the variable/variables that form the code loop.
This alternative is used when it is not important which code block is executed
first. In this case, the programmer take full responsibility and allows the
compiler to randomly choose one code block before the other.
Incorrectly used, the NoSort attribute may cause execution errors and application
failure. Use NoSort only if you know the data flow characteristics in detail.
Code Optimization
Code optimization involves many different activities and can be seen from a number
of angles. This section does not aim to tell you all about code optimization, it merely
intends to provide you with hints and good advice within a number of important
fields:
• Basic Rules and Guidelines Regarding Tasks and Execution on page 142 gives
you some basic rules and guidelines regarding tasks and execution.
• Function Block, Operation, and Function Calls on page 143 discusses the best
way to call function blocks and functions, and gives some tips on how to
improve communication with the operator interface.
• Excessive Conditional Statements on page 146 shows you how to reduce the
number of conditional statements (these consume a lot of time and memory).
• 16- or 32-Bit Data Variables on page 147 discusses in which cases it is
advisable to use 16-bit and 32-bit variables, respectively.
3BSE043732-600 141
Basic Rules and Guidelines Regarding Tasks and Execution Section 3 Programming in Practice
Recommendations
• Code items that are closely connected or exchange large amount of data with
each other should be connected to the same task.
• There should be no more than five tasks in each controller. The controller can
handle more than five tasks, but experience shows that most users find it
difficult to maintain an overview if there are too many tasks.
142 3BSE043732-600
Section 3 Programming in Practice Function Block, Operation, and Function Calls
• Execution of code should not load the system by more than 55–65%.
• Excessive use of code tabs lowers the performance, use only as many code tabs
as the design requires without loosing readability or creating code loops.
• Use attribute by_ref for In or Out whenever possible. When parameters are
passed to control modules and function blocks, especially for strings and large
data types it is time consuming. In that case, a reference to the data instance is
passed in the function block call. This is achieved by setting the attribute of the
parameter to by_ref.
• Use the Task Analysis tool to analyze the task scheduling in the application,
view the graphical representation of how the tasks will execute, understand
possible overload situations, and prepare remedial actions by changing the
execution time in the analysis.
String handling is especially demanding for the CPU. By minimizing the number of
string operations, significant savings in CPU capacity can be made. Especially
string concatenations increase CPU load, and should be avoided, if possible.
3BSE043732-600 143
Function Block, Operation, and Function Calls Section 3 Programming in Practice
Another alternative is to use project constants for static strings, or to encapsulate the
string procedure in a conditional statement, so that it executes only on demand.
If FirstScanAfterApplicationStart() then
MMSConnect_1.Partner := IPAddress_1;
end_if;
where IPAddress_1 is a string variable with the actual address as initial value.
144 3BSE043732-600
Section 3 Programming in Practice Firmware Functions for Arrays and Struct
Project constants are suitable to use for library items that the user wants to change.
Examples are, date and time formats, logical colors and logical names. Do not use
project constants to change the functionality of an object, for example, initial values
and comparisons in code.
One example of this is the time-out for an ACOF function block. Let us say that
there are ACOFs in ten different programs in your project. They should all have a
time-out setting of 3 s. Instead of declaring 10 variables with the initial value of 3 s
and the attribute constant, one project constant with this value can be created and
used for all ACOF function blocks.
3BSE043732-600 145
Excessive Conditional Statements Section 3 Programming in Practice
Example 1
If Reset then
Count := 0;
elsif Stop then
Count := Count;
elsif Start then
Count := Count +1;
end_if;
Example 2
If Reset then
Count := 0;
end_if;
If Stop then
Count := Count;
end_if;
If Start then
Count := Count +1;
end_if;
The code examples above have the same function, but the code in example 1 is
executed much faster than that in example 2.
In the first example only the first condition is evaluated as long as Reset is true. In
the second example all conditions must be evaluated in each cycle, even though the
three variables are mutually exclusive. If there is a large amount of code inside the
conditions, valuable CPU power will be wasted.
146 3BSE043732-600
Section 3 Programming in Practice 16- or 32-Bit Data Variables
Strings
Below is some good advice when handling strings.
• The handling and copying of strings creates considerable CPU load. Variables
of type string require a great deal of memory, and the execution time is long
during copying and concatenation.
• Always use square brackets, [ ] around strings, to limit string variables or string
parameters.
• Copy strings every scan only when required. Remember that a connection to a
function block actually involves copying variables from one to the other, see
the System 800xA, Control, AC 800M, Configuration (3BSE035980*).
• Concatenation of strings should only be performed when absolutely necessary.
• Use the attribute by_ref for in and out function block parameters whenever
possible.
Variable Attributes
The attribute retain1 should only be set for variables if they really require such an
attribute, as this attribute increases the stop time during download of program
changes to the controller.
3BSE043732-600 147
Code Optimization Example Section 3 Programming in Practice
fb Function Block
p Parameter
v Variable
c Project constant
The code below (before optimization) will generate an alarm, and an output will be
activated if the alarm value exceeds a preset value.
148 3BSE043732-600
Section 3 Programming in Practice Task Tuning
fbAlarmCond.SrcName := pName;
fbAlarmCond.Message := pDesciption + cTextSpace +
cTextHighLevel;
fbAlarmCond.Severity := pSeverity;
fbAlarmCond.Class := pClass;
fbAlarmCond.FilterTime := pFilterTime;
vFirstScan := False;
end_if;
if pLevel > pHighLevel then
fbAlarmCond.Signal := True;
elsif pLevel < pNormalLevel then
fbAlarmCond.Signal := False;
end_if;
fbAlarmCond( EnDetection := pEnDetection );
pAlarm := fbAlarmCond.CondState > 2;
The following modifications have been made in the optimized code example:
• The function block fbSR has been replaced by equivalent code.
• Local variables have been replaced by project constants.
• The alarm function block is called using connected static values during start-up
only.
• The alarm function block will be called continuously with its parameters,
which can be changed dynamically.
• Writing and reading the inputs and outputs of the alarm function block is
performed without using any intermediate variables.
Task Tuning
To make all the tasks work together, without deterioration in performance, you may
have to tune task settings, such as offset. In the example below, we show a typical
situation and some actions that can be taken in order to tune task execution.
This topic contains:
• Example of Task Tuning Using Manual Analysis on page 150
• Example of Task Tuning Using the Task Analysis Tool on page 154
3BSE043732-600 149
Example of Task Tuning Using Manual Analysis Section 3 Programming in Practice
Follow the steps below to tune these tasks for optimum performance.
1. Compile information
Gather information about existing tasks. Tasks that are defined, but not used,
should be deleted. Note the interval time and execution time of all remaining
tasks.
2. Analyze
Analyze the tasks regarding the interval time, that is, are they reasonable?
It is recommended that all interval times must be multiples of each other. A
slower task should preferably have an interval time that is n times the interval
time of the closest faster task. In this example, the interval times are optimal, B
has 150 = 3 x 50
(= A), C has 300 = 2 x 150 (= B), and D has 600 = 2 x 300 (= C)ms.
The smallest common denominator is 50 ms.
3. Draw a time diagram
Draw a time diagram of a complete cycle, in our case, 600 ms. Mark the 12
time slots (600/50 = 12).
150 3BSE043732-600
Section 3 Programming in Practice Example of Task Tuning Using Manual Analysis
b. Continue with the second shortest interval time (in our case, task B). This
task should be executed in every third slot (interval time = 150 ms = 3
slots). Since the execution time for A + B = 10 + 20 ms < 50 ms we can
start in slot 1 and then use slots 4, 7, and 10.
c. Continue with the third shortest interval time (in our case, task C). This
task should be executed in every 6th slot (interval time = 300 ms = 6
slots). Since the execution time for A + B + C = 10 + 20 + 30 ms > 50 ms
3BSE043732-600 151
Example of Task Tuning Using Manual Analysis Section 3 Programming in Practice
we cannot start in slot 1. We start in slot 2, and then again after 6 slots, that
is, slot 8.
d. Finally, consider the task with the longest interval time (in our case, task
D). This task should be executed in every 12th slot (interval time = 600 ms
= 12 slots), that is, once every cycle. Task D could be started in slot 1 since
the execution time for the three tasks then would become 10 + 20 + 20 =
50 ms. But then the entire slot would be filled, which is not recommended.
Task D cannot be placed in slot 2 for the same reason. We choose slot 3.
152 3BSE043732-600
Section 3 Programming in Practice Example of Task Tuning Using Manual Analysis
The first alternative means longer execution time for task execution, thus other
functions are locked-out for a longer time, before they can be executed. Alternative
2 and 3 are the most suitable ones, since they use offset. With offset, a time gap is
maintained between task executions for other functions, for example
communication. However, to accomplish offset for tasks, you need to re-design the
entire time diagram.
3BSE043732-600 153
Example of Task Tuning Using the Task Analysis Tool Section 3 Programming in Practice
We have now tuned our tasks without having to use priorities. All the tasks in the
example above have the same priority. The only reason for using priorities is when
you can not find a slot to contain a task as mentioned above.
154 3BSE043732-600
Section 3 Programming in Practice Example of Task Tuning Using the Task Analysis Tool
This is a well tuned task configuration (for normal execution) that will allow all
tasks to execute on time and within the overrun and latency restrictions. The load
from the tasks should be (10/50 + 20/150 + 30/300 + 20/600) * 100 = 46.7%.
The Task Analysis tool displays the task execution as shown in Figure 68.
3BSE043732-600 155
Example of Task Tuning Using the Task Analysis Tool Section 3 Programming in Practice
The execution will result in a task layout without margins and in fact Task B will be
interrupted by Task A, see Figure 69. This should not be a problem in itself but still,
it is not fully acceptable, so a warning for interrupted task execution appears with
the information about the consequences. It is possible with the Task Analysis tool to
abort or continue the download.
It can also be seen that the risk for task C to get latency has increased significantly.
If task B suddenly executes just slightly longer than before, task C will not be able
to start at the correct time. This will also give a warning, since the margin is less
than 5% of the interval time of task C.
In the Task Analysis tool it is possible to modify the execution time of tasks for
analysis, and view the updated analysis in the graph. For details, refer to
System 800xA Control, AC 800M, Configuration (3BSE035980*) manual.
156 3BSE043732-600
Appendix A IEC 61131-3 Standard
Main Objectives
The main objectives of the IEC 61131-3 standard are as follows.
• The standard encourages well-structured program development. All application
programs should be broken down into functional elements, referred to as
program organization units or POUs. A POU may contain functions, function
blocks or programs.
• It should be possible to execute different parts of the application program at
different rates. This means that the system must support individual interval
times for different POUs.
• Complex sequential behavior can easily be broken down into events using a
concise graphical language.
• The system must support data structures so that associated data can be
transferred between different parts of a program as if they were a single entity.
• The system should have parallel support for the five most used languages,
Ladder Diagram (LD), Instruction List (IL), Function Block Diagram (FBD),
Structured Text (ST) and Sequential Function Chart (SFC).
• The programming syntax should be vendor independent, resulting in more or
less portable code that can easily be transferred between programmable
controllers from different vendors.
3BSE043732-600 157
Benefits Offered by the Standard Appendix A IEC 61131-3 Standard
158 3BSE043732-600
Appendix A IEC 61131-3 Standard Software Exchange between Different Systems
An optimal software application often contains parts written in more than one of the
five programming languages. The standard allows the definition of function block
types using all the languages.
3BSE043732-600 159
Software Exchange between Different Systems Appendix A IEC 61131-3 Standard
160 3BSE043732-600
Appendix B Naming Conventions and Tools
For more information about naming conventions etc, when creating control
module types, see also the manual AC 800M, Library Objects Style guide
(3BSE042835*).
Introduction
In order for operators and maintenance personnel to be able to quickly find
information about the status of your process and recent events, it is important that a
consistent naming strategy is used. This appendix gives advice on how to avoid
naming problems:
• Naming Conventions on page 162 gives an overview of naming conventions
that are widely used throughout the field of automation. It is recommended that
these conventions are considered when creating a naming standard.
• Suggested I/O Signal Extensions on page 174 suggest names for types,
parameters and I/O extensions. Read this section if you need a basis for
developing naming rules.
• Name Handling in an 800xA System on page 178 describes the name handling
functions of the 800xA system, including name aspects and how to address
sub-objects using type qualification. This part also describes how to use the
Name Uploader to upload names to the system from the controllers.
For information on NLS handling of alarms and events, see System 800xA,
Control, AC 800M, Configuration (3BSE035980*). For information on NLS
handling of graphics, see operator workplace information.
3BSE043732-600 161
Naming Conventions Appendix B Naming Conventions and Tools
Naming Conventions
The importance of a good naming standard cannot be over-emphasized. The
standard should be general enough to cover all possible applications and all possible
extensions or changes to the plant installation. Needless to say, the name of each
item must be unique, with no room for misinterpretation. The names used should
follow rules that are easy to learn and have precise definitions. It should be possible
for personnel at all skill levels to comprehend and use these rules.
Object names have been in use for a long time and certain national and international
standards have been defined. In addition, different plants and companies have
defined their own standards. These should, of course, be used as a base, which, with
small changes and/or additions, will let you take full advantage of the possibilities
offered by the 800xA system.
General Guidelines
When addressing a type, variable, parameter, function block, etc., excessive length
is not recommended. Bear in mind that dot-notation is used to access hierarchical
(structured) variables and if each “level” has a lengthy name, the total length of the
path will be considerable.
Variable Names
The identifier, the name of the variable, function block type or function, may have a
maximum length of 32 characters, and may contain letters (a–z, A–Z), digits (0–9)
and the underscore character ( _ ). The first character must be a letter (or
underscore), and spaces are not allowed. See also Table 13 on page 165.
More information is given in Control Builder online help. Search the index for
“naming conventions”.
162 3BSE043732-600
Appendix B Naming Conventions and Tools General Guidelines
Compound Words
If the parameter name is a compound word, it is recommended to write the
verb/action first, and then the noun/object on which the action should be taken. The
description field of the parameter should use the long name, for example,
AlarmCond.
3BSE043732-600 163
General Guidelines Appendix B Naming Conventions and Tools
164 3BSE043732-600
Appendix B Naming Conventions and Tools General Guidelines
Note that some words are reserved, which means that they cannot be used. Such
keywords, which are recognized by the IEC 61131-3 standard are, for example,
IF, THEN, ELSE.
3BSE043732-600 165
Variables Appendix B Naming Conventions and Tools
~ Tilde * Asterisk
' Apostrophes < The less than sign
> The greater than sign | The vertical bar
, Comma ; Semicolon
. Period : Colon
- Hyphen
Project Constants
It is important that you follow certain naming conventions when naming project
constants. Apart from normal naming conventions, it is recommended that all
project constants begin with a “c”. Furthermore, it is not permitted to call
parameters and variables in POUs by the same name as a project constant. If you do
so, you might face some extremely serious situations. For example, a project
constant with the name “Max” is not a good idea. If you also define a local variable
with the name “Max”, this will take precedence over the project constant, which
could lead to severe problems. Use the name “cMax” instead or, even better, a more
descriptive name such as “cMaxTempAllowedInTank”.
Variables
Naming of variables is especially important in templates (compared to hidden or
protected code), since the user should be able to easily understand the design and
function of any given template. Some general recommendations on variable names
are given below:
• Variable names should be descriptive.
To help distinguish between different types of variables, add a suffix “v” to the
variable name for local variables, “e” for external variables, and “cv” for
communication variables.
• Underscore ( _ ) should not be used. To separate parts of a name, use uppercase
letters instead.
166 3BSE043732-600
Appendix B Naming Conventions and Tools Types and Parameters
Data Types
The naming rules for data types are essentially the same as for object types. That is,
it is recommended that the length of data type names does not exceed 12 characters.
When this is not possible, up to 32 characters are allowed.
You may find it helpful to add a suffix “Type” to your function block, control
module, diagram, and data type to explicitly show that it is a type.
Parameters
The need for short names is equally important for function block types, control
module types, and diagram types. The names in Suggested I/O Signal Extensions on
page 174 and Table 12 on page 163 are reserved for special types of parameters.
FB, M, and D denote that the name applies to function block types, control module
types and diagram types, respectively. However, a parameter used in function block
type, control module type, and diagram type should have the same name throughout
all types.
3BSE043732-600 167
Types and Parameters Appendix B Naming Conventions and Tools
Short names for types and parameters are important considering the following:
• How many function block symbols will fit on a screen or printed page in the
Function Block Diagram (FBD) language.
• How many function blocks, control modules, and diagrams will fit on a page in
the FD code block of a diagram or diagram type
In FBD and FD, the possibility to simultaneously see many symbols/objects and
their connections is essential to readable logic. Unnecessary paging (both on screen
and in printout) has a negative effect on readability, and requires more space for
page references.
Also, note that using upper- and lower-case letters improves the readability of
names, for example, ManMode is better than MANMODE. POU editors allow the
use of upper- and lower-case letters for declaration of parameter names, and allows
the user to refer to the name in any form, as long as the letters are the same (for
example, entering ManMode is the same as entering MANMODE).
A short name is more space efficient and easier to read. This assumes, of course,
that the user knows what the name means. Standardized short names or acronyms
are most helpful in this respect, for example, PV = Process Value, and T = time. It
should also be kept in mind that a long name does not necessarily provide more – or
enough – information. Hence, a shorter name together with a good description often
proves to be the best alternative.
In addition, in the editor, it is often possible to show the parameter description
adjacent to the parameter name, for greater clarity. Seldom used, or unusual,
parameter names may require longer names to be understandable (for example
SourceSuffix), compared to traditionally used names (for example. Min).
The length of parameter names should not exceed eight characters (however, the
system allows longer names for parameters, up to the system limit of 32 characters).
These restrictions also apply to graphically connected parameters in control module
types and diagram types. Other parameter names in control module types and
diagram types should be as short as possible, and easy to understand.
168 3BSE043732-600
Appendix B Naming Conventions and Tools Diagrams
Full Names and Short Counterparts for Type Names and Parameter Names
There are no strict rules on how to construct a short name, but the following
methods should be considered.
• Use only part of a whole word.
Example: Request = Req
• Remove all vowels (and some consonants).
Example: Print = Prt
• Use a new word.
Example: Communication Link = COMLI
Use the description field in Control Builder editors to provide a short name with its
full name. Example: The description field for the parameter PrtAckAlarms may
contain “Prints acknowledged alarms…” etc.
A list of names and recommended abbreviations of names for types and parameters
is given in the AC 800M, Library Object Style Guide (3BSE042835*).
Diagrams
It is recommended that you change the standard names for diagram POUs, from
“Diagram1” etc. to what the diagrams actually do in the application, for
example, “PIDControl”.
3BSE043732-600 169
Tasks Appendix B Naming Conventions and Tools
Tasks
It is recommended that you change the standard names for the tasks, from for
example “Slow”, to what the tasks actually do control. However, do not include
task-specific information such as interval time, offset, etc. in the name.
You can read more about tasks in the System 800xA, Control, AC 800M,
Configuration (3BSE035980*). If a High Integrity controller is used, there is also
an additional task, called VMT (Virtual Machine Test). Never change the name of
this task.
Libraries
Standard Libraries
The name of a library should include upper- and lower-case letters, forming the
structure “LibNameLib”. That is, the different parts of the name should be separated
with upper-case letters and the name string should always end with “Lib”. The
maximum string length may not exceed 20 characters (letters or figures), and some
names are reserved.
Split Libraries
Split libraries are libraries that belong to a certain functionality family. Control
libraries, in which the total functionality is split into several libraries, are examples
of this. They all have control functionality in common, but are divided into
categories, for example, ControlStandardLib, ControlAdvancedLib, and so on. The
naming rules for split libraries should follow this example, that is, first the function
family (Control), then the sub-category (for example “Advanced”), and, finally, the
suffix “Lib”.
Another example of this principle is a hidden-contents library that contains basic
control functions; such a library could be named ControlSupportLib. That is, in a
hidden-contents library, the word “Support” should always be included, between the
main part of the name and the “Lib” suffix.
An object type name should be unique, not only within a library, but throughout all
libraries. Remember that an object type is referenced by its name only, in other
words, not by the name of the library.
170 3BSE043732-600
Appendix B Naming Conventions and Tools I/O Naming
As for library names, the object type name should start with an upper-case letter,
and different parts of the name should be separated by capital letters, such as
PidCascadeLoop and FFToCC
A library may not have the same name as an application. If this happens, the
handling of coldretain values will fail in certain situations.
Aspect Objects should be categorized in such a way that, for example, the names of
all motors contain the string Motor, all valves contain the string Valve, all PID
controllers the string PID, and so on.
I/O Naming
An object name should locate the object in the project, state the function of the
object, and uniquely define the individual object. This can be achieved with a
designation according to the following example:
Location
The 3-character location “block” is a concatenation of a letter and two digits,
describing the Area “block”. The Area “block” consists of the concatenation of two
digits, the first describing the process area, and the second the process equipment.
Function Code
Function codes for instrumentation functions have been in use for a long time and
can be found in several national and international standards (for example ISA at
www.isa.org).
Function codes should be reduced to two characters that indicate the main function.
An LIC, would for example, be written LC.
3BSE043732-600 171
I/O Naming Appendix B Naming Conventions and Tools
There is no widespread standard for function codes for electrical equipment, and the
simplest way of designating them is to use the equipment number or the code M, for
a motor. A more elaborate standard is to define codes such as PU for pumps, FA for
fans, etc. Ensure that you do not use any function code already used for instrument
functions.
Extension
The extension is defined as a 2 – 5 character code to identify single signals related to
a main object.
A list of examples of different I/O and calculated signals, for which extensions
should be defined, can be found in Suggested I/O Signal Extensions on page 174.
AI PID AO
A21FT121A A21FIC121A A21FV121A
172 3BSE043732-600
Appendix B Naming Conventions and Tools Collect I/O
Collect I/O
You may collect all your I/O in a structured type. For such design, it is
recommended that you add the prefix “IO_” to this structured type. For example, if
the type is named “MotorType”, its I/O data type could be called “IO_MotorType”.
The parameter of the type could be named “IO” (of “IO_MotorType”).
For examples on how to use structured data types, see Structured Data Type
Examples on page 122.
Parameters
All objects with an Alarm Condition must have the Name and a Description
parameter connected, if the Name Uploader aspect in Plant Explorer is to work
properly. See Name Uploader on page 183.
It is never a problem to have a Name parameter in control module types. In function
block types, however, care must be taken, since the parameter is copied to a local
copy in the function block, which consumes memory and degrades performance.
Descriptions
A description should be provided, whenever possible. This means that all object
types and data types should have a brief (three or four short lines) but clear
description which is shown under the Description tab in the lower pane of Project
Explorer, when the object is selected.
A structured data type component should have a line of text briefly describing its
purpose/function. Use the column specifically designated for this in the POU/object
type editor. Parameters in object types should be described in a similar way.
3BSE043732-600 173
Suggested I/O Signal Extensions Appendix B Naming Conventions and Tools
174 3BSE043732-600
Appendix B Naming Conventions and Tools Suggested I/O Signal Extensions
3BSE043732-600 175
Suggested I/O Signal Extensions Appendix B Naming Conventions and Tools
176 3BSE043732-600
Appendix B Naming Conventions and Tools Suggested I/O Signal Extensions
The list shows examples of I/O signals. More types can be defined as desired.
3BSE043732-600 177
Name Handling in an 800xA System Appendix B Naming Conventions and Tools
178 3BSE043732-600
Appendix B Naming Conventions and Tools Name Aspects in an 800xA System
Name Conversion
If we create a control object in Plant Explorer and give it a name that is not allowed
according to IEC 61131-3 naming conventions, it would still be possible to keep the
new name without any name conflicts. The reason for this is that the aspect system
handles multiple object names.
If a name is entered in Plant Explorer that does not follow IEC 61131-3 naming
conventions, the Project Explorer name will be changed to fit the IEC 61131-3
naming conventions. If we, in Plant Explorer, name a tank object "12-1456%tank",
the Control Builder conversion would look like "x12_1456_tank". The automatic
name conversion function always adds an “x” to the beginning of the name and
replaces all non-alphanumeric characters with underscore. If the name is longer than
32 characters, it will be truncated.
Name Server
The Name Server keeps track of names from both the Control Builder Name aspect
and the Name aspect. This means that references to an object may refer to either
name.
When you create a new object, the system proposes a valid IEC 61131-3 name for
the object. Objects on the same level as the newly created object are checked, so that
name conflicts are avoided.
You should create object descriptions in Project Explorer. These descriptions will
then be transferred to the aspect system and finally be visible in the Name aspect.
Consequences of a Rename
When an object is renamed, the consequences depend on if the Name and Control
Builder Name aspects are synchronized or not. There are two cases of interest:
• Rename when the Name aspect has never been changed, and therefore has the
same control object name as the Control Builder Name aspect:
– If you rename the object from the Control Builder Name aspect, the name
will change in the Name aspect as well.
3BSE043732-600 179
Name Aspects in an 800xA System Appendix B Naming Conventions and Tools
– If you rename the object from the Name aspect, this will only change the
name in Plant Explorer. The Control Builder Name aspect will not change,
that is, the two aspects are no longer synchronized.
• Rename when the Control Builder Name aspect and the Name aspect already
have separate names.
– Changes in one aspect will not affect the other.
– To synchronize the two aspects, simply rename the object in the Name
aspect, so that it has the same name in both aspects.
Objects always have the same name in Project Explorer and in the Control
Builder Name aspect.
The advantage of having a synchronized Name aspect is that the aspect object name
will be updated every time you change the corresponding control object name.
Once the Name aspect has been used, which could be the case if you need to choose
names from other industry standards that conflict with IEC 61131-3 naming
conventions, synchronization is lost. Control object names in the Project Explorer
must follow IEC 61131-3 naming conventions, but the corresponding aspect objects
do not.
Name uploading can be used to secure unique names for control objects that are
embedded in type solutions. See Name Uploader on page 183.
Never rename an object inside a POU editor. If you give an object a new name in
an editor, the old object, with all its added aspects, will be deleted, and a new
object, without those aspects, will be created.
180 3BSE043732-600
Appendix B Naming Conventions and Tools Avoid Name Conflicts for Types–Type Qualification
3BSE043732-600 181
Avoid Name Conflicts for Types–Type Qualification Appendix B Naming Conventions and Tools
Figure 73. Application_1 has two libraries connected that contain the function
block MyFBtype. A function block call to MyFBtype will cause a name conflict
This is avoided by declaring which library or application the type belongs to, before
addressing it, see Figure 74.
Figure 74. The MyFBtype name conflict is avoided by first pointing to the library in
the Program editor, and then referencing the function block type
182 3BSE043732-600
Appendix B Naming Conventions and Tools Name Uploader
Name Uploader
When a function block type, control module type, or diagram type is used to create
an object, only the top-level of the type is assigned a new and unique name. The
Name Uploader tool solves this problem by going through all objects further down
in the Control Structure, looking for Name properties. The Name Uploader then
fetches the names via the OPC server so that each object has a system-unique name.
Each object calculates the name of the objects on the next level.
For the Name Uploader to work, all objects must have a Name and a Description
parameter.
The Name Uploader aspect is by default placed on all control networks and on all
applications. You can add the Name Uploader aspect to other objects if you want to
upload a specific branch.
The Name Uploader must be run in order for suffixes to be added to all sub-objects.
To start a Name Upload for an application:
1. In the Control Structure, select your application and click the Name Uploader
icon.The aspect preview pane opens.
2. Select the Name Uploader tab and click Start Upload.
3. Verify the name changes in the Control Structure.
Figure 75. Tank100 and Tank200 after a name upload. The two objects HiLevel and
LowLevel receives unique names in the Plant Explorer
3BSE043732-600 183
Name Uploader Appendix B Naming Conventions and Tools
‘Tank100’ Name
ThisNameVar1 := Name + NextNameVar1 ‘Motor10’
1 3 2
ThisNameVar2 := Name + NextNameVar2 ‘Motor20’
4 Motor10 Motor20
Name Name
Figure 76. Code example showing how to create unique object names below the first
level. Note the numbers and corresponding descriptions below (1 - 5)
184 3BSE043732-600
Appendix B Naming Conventions and Tools Name Uploader
Study the below steps to get a better understanding of how name uploading should
be set up:
1. A Name parameter and four local variables ThisNameVar1, ThisNameVar2,
NextNameVar1 and NextNameVar2 (all of data type string) have been
declared in the MyTank type.
2. The initial values for NextNameVar1 and NextNameVar2 have been set to
“Motor10”, and ”Motor20”. The Name parameter gets its initial value, once a
Tank object is created in the application.
3. In the Start Code block, the start value for the variables ThisNameVar1 and
ThisNameVar2 will be the concatenation of the Name (Tank100) parameter of
the tank object and the initial value of the variable NextNameVar1 (Motor10),
that is, ‘Tank100Motor10’.
(The same type of calculation is of course valid for ThisNameVar2.)
4. The ThisNameVar1 variable is connected to the Name parameter in Motor10,
and ThisNameVar2 is connected to the Name parameter in Motor20.
5. The Name parameter of Motor10 now holds the following value:
Tank100Motor10
3BSE043732-600 185
Name Uploader Appendix B Naming Conventions and Tools
186 3BSE043732-600
Appendix C AC 800M Aspects
This Appendix presents the most common aspects you will meet during engineering
in the Plant Explorer. The description below contains some branch-specific words
that are explained under Terminology on page 13.
3BSE043732-600 187
Appendix C AC 800M Aspects
188 3BSE043732-600
Appendix C AC 800M Aspects
3BSE043732-600 189
Appendix C AC 800M Aspects
190 3BSE043732-600
INDEX
A correct 132
acronyms 163 code sorting 127
advantages control modules 127
small applications 48 correct problems 139
alarm event optimization 148 collect
applicable specification 14 I/O 173
applications communication 44
several in one controller 48 conflicts
split on several controllers 46 names 181
aspects Constraints 49
CBName 179 control modules
Control Builder Name 180 code sorting 127
Name 179 control objects
attributes rename 179
NoSort 132 controllers
Retain 147 distributed execution 46
multiple applications 48
C conversion
calculate object names 179
offset for tasks 153 correct
call code loop errors 132
function blocks 103 code sorting problems 139
capacity CPU
CPU 42 capacity 42
CBName Aspect 179 priority 43
change custom
Control Builder Name Aspect 180 data types 39
characters cyclic load
non-valid 165 maximum 43
code blocks
in SFC 141 D
sorting 127 data types
code loop create 39
error log 132 custom 39
code loops 130 naming 167
3BSE043732-600 191
Index
192 3BSE043732-600
Index
3BSE043732-600 193
Index
T
Task Analysis tool 154
tasks
calculate offset 153
execution rules 142
naming 170
terminology 13
types
address 181
naming 167
syntax 181
U
unused
variables and parameters 119
user-defined
data types 39
V
variables
allowed characters 166
naming 162, 166
state 131
W
WriteVar 47
194 3BSE043732-600
Contact us
3BSE043732-600
www.abb.com/controlsystems All rights reserved.