3BSE044222-610 A en Compact Control Builder AC 800M - Planning
3BSE044222-610 A en Compact Control Builder AC 800M - Planning
3BSE044222-610 A en Compact Control Builder AC 800M - Planning
ABB may have one or more patents or pending patent applications protecting the intellectual 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.
Products described or referenced in this document are designed to be connected, and to communicate information and
data via a secure network. It is the sole responsibility of the system/product owner to provide and continuously ensure
a secure connection between the product and the system network and/or any other networks that may be connected.
The system/product owners must establish and maintain appropriate measures, including, but not limited to, the
installation of firewalls, application of authentication measures, encryption of data, installation of antivirus programs,
and so on, to protect the system, its products and networks, against security breaches, unauthorized access, interference,
intrusion, leakage, and/or theft of data or information.
ABB Ltd and its affiliates are not liable for damages and/or losses related to such security breaches, any unauthorized
access, interference, intrusion, leakage and/or theft of data or information.
ABB verifies the function of released products and updates. However system/product owners are ultimately responsible
to ensure that any system update (including but not limited to code changes, configuration file changes, third-party
software updates or patches, hardware change out, and so on) is compatible with the security measures implemented.
The system/product owners must verify that the system and associated products function as expected in the environment
they are deployed.
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 hardware described in this document.
This document and parts thereof must not be reproduced or copied without written permission 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
2014/30/EU and in Low Voltage Directive 2014/35/EU.
Trademarks
All rights to copyrights, registered trademarks, and trademarks reside with their respective owners.
Table of Contents
1 Design Considerations
1.1 Introduction ....................................................................................................... 13
1.2 Conceptual Considerations ............................................................................... 13
1.2.1 Traditional Programming and Object-Oriented Programming ............. 14
1.2.2 List Driven Execution and Data Flow Driven Execution ....................... 16
1.2.3 Libraries ............................................................................................... 17
1.2.4 Code Organization ............................................................................... 18
1.2.5 Programming Languages .................................................................... 34
1.2.6 Structured Data Types ......................................................................... 34
1.2.7 Connecting I/O to application variables ............................................... 35
1.3 Performance Considerations ............................................................................. 36
1.3.1 Memory Consumption .......................................................................... 36
1.3.2 Calculations and Performance Data .................................................... 36
1.3.3 Choosing Controller Hardware ............................................................ 37
1.3.4 Distribution on Applications and Controllers ........................................ 39
1.4 Constraints ........................................................................................................ 43
1.4.1 OPC Server Constraints ...................................................................... 44
1.4.2 Application Size Limit ........................................................................... 44
1.4.3 Maximum Number of Controllers, Applications, Diagrams, Programs
and Tasks ............................................................................................. 44
1.4.4 Maximum Number of POUs and Variables .......................................... 45
1.4.5 INSUM Constraints .............................................................................. 47
3BSE044222-610 A 5
Table of Contents
2 Programming Languages
2.1 General ............................................................................................................. 49
2.2 Function Diagram (FD) ...................................................................................... 51
2.2.1 Pages in FD ......................................................................................... 52
2.2.2 Invocation Blocks (Objects) in FD ........................................................ 52
2.2.3 Data Connection through Connection Ports ........................................ 53
2.2.4 Execution of Diagram and Diagram Type ............................................ 56
2.3 Structured Text, ST ........................................................................................... 58
2.3.1 Suitable for Complex Calculations and Looping .................................. 58
2.3.2 High Threshold for Programmers ........................................................ 59
2.3.3 Functions in ST .................................................................................... 59
2.4 Function Block Diagram, FBD ........................................................................... 61
2.4.1 Similar to Electrical Diagrams .............................................................. 62
2.4.2 Boolean Functions and Feedback are Easy to Implement .................. 62
2.4.3 Not Suitable for Conditional Statements .............................................. 62
2.4.4 Functions in FBD ................................................................................. 63
2.4.5 Standard Function Block Types in FBD ............................................... 64
2.5 Ladder Diagram, LD .......................................................................................... 68
2.5.1 Easy to Understand ............................................................................. 70
2.5.2 Weak Software Structure ..................................................................... 72
2.5.3 Limited Support for Sequences .......................................................... 72
2.5.4 Difficult to Reuse Code ........................................................................ 74
2.5.5 Functions in LD .................................................................................... 74
2.6 Instruction List, IL .............................................................................................. 75
2.6.1 Best System Performance ................................................................... 75
2.6.2 Weak Software Structure ..................................................................... 76
2.6.3 Machine-dependent Behavior .............................................................. 76
2.6.4 Functions in IL ...................................................................................... 76
2.6.5 Example ............................................................................................... 77
2.6.6 Result Register .................................................................................... 78
2.7 Sequential Function Chart, SFC ....................................................................... 78
2.7.1 Powerful Tool for Design and Structuring ............................................ 79
2.7.2 Other Programming Languages are Needed ....................................... 80
3BSE044222-610 A 6
Table of Contents
3 Programming in Practice
3.1 Introduction ....................................................................................................... 89
3.2 Organizing Code ............................................................................................... 89
3.2.1 Programming with Function Blocks ..................................................... 90
3.2.2 Function Block Calls ............................................................................ 92
3.2.3 Function Block Execution .................................................................... 93
3.2.4 Function Block Code Sorting ............................................................... 96
3.2.5 Control Modules in Function Blocks .................................................... 96
3.2.6 Continuous and Event-Driven Execution of Function Blocks ............... 99
3.2.7 Self-Defined Types ...............................................................................105
3.2.8 Structured Data Type Examples .......................................................... 110
3.3 Code Sorting ..................................................................................................... 114
3.3.1 Sorting of Diagrams ............................................................................. 115
3.3.2 Code Loops ..........................................................................................117
3.3.3 Variable State .......................................................................................118
3.3.4 NoSort Attribute ................................................................................... 118
3.3.5 Interpret and Correct Code Loop Errors .............................................. 119
3.4 Code Optimization .............................................................................................128
3.4.1 Basic Rules and Guidelines Regarding Tasks and Execution ............. 129
3.4.2 Function Block, Operation, and Function Calls .................................... 130
3.4.3 Firmware Functions for Arrays and Struct ........................................... 131
3.4.4 Excessive Conditional Statements ...................................................... 132
3.4.5 16- or 32-Bit Data Variables ................................................................. 132
3.4.6 Variables and Parameters ....................................................................133
3.4.7 Code Optimization Example ................................................................ 133
3BSE044222-610 A 7
Table of Contents
3BSE044222-610 A 8
About This User manual
User Manual Conventions
This manual provides some guidelines of what to consider when designing an automation
solution using Control Software for Compact Control Builder, 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.
In addition, the appendixes describe support information:
• Appendix A gives a short introduction to the standard.
• Appendix B contains rules and recommendations for naming variables, parameters,
types and instances (objects).
3BSE044222-610 A 9
About This User manual
Terminology
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.
Required action icon indicates actions that are required for the product or system to
function as intended.
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
The following is a list of terms associated with Compact Control Builder. You should be
familiar with these terms before reading this manual. The list contains terms and
abbreviations that are unique to ABB or have a usage or definition that is different from
standard industry usage.
3BSE044222-610 A 10
About This User manual
Terminology
Term/Acronym Description
Application Applications contain program code to be compiled and
downloaded for execution in a controller.
Control Builder A programming tool with a compiler for control software.
Control Builder is accessed through the Project Explorer
interface.
Control Module (Type) A program unit that supports object-oriented data flow
programming. Control modules offer free-layout graphical
programming, code sorting and static parameter connections.
Control module instances are created from control module
types.
Firmware The system software in the PLC.
Hardware Description The tree structure in the Project Explorer, that defines the
hardware’s physical layout.
Interaction Window A graphical interface used by the programmer to interact
with an object. Available for many library types.
MMS Manufacturing Message Specification, a standard for
messages used in industrial communication.
OPC/DA An application programming interface defined by the
standardization group OPC Foundation. The standard
defines how to access large amounts of real-time data
between applications. The OPC standard interface is used
between automation/control applications, field
systems/devices and business/office application.
Process Object A process concept/equipment such as valve, motor,
conveyor or tank.
Project Explorer The Control Builder interface. Used to create, navigate and
configure libraries, applications and hardware.
Type A type solution that is defined in a library or locally, in an
application. A type is used to create instances, which inherit
the properties of the type.
3BSE044222-610 A 11
3BSE044222-610 A 12
1 Design Considerations
1.1 Introduction
1 Design Considerations
1.1 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 13.
• 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 36.
• There are certain constraints to the number of controllers, applications, diagrams,
programs, and tasks that co-exist in a single controller. See Constraints on page
43.
3BSE044222-610 A 13
1 Design Considerations
1.2 Conceptual Considerations
• How to organize data into structured data types. See Structured Data Types on
page 34.
• The type of I/O connection to use, using Signals or not. See Connecting I/O to
application variables on page 35.
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.
Object-Oriented Programming
Object-oriented programming is quite different from traditional programming 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.
3BSE044222-610 A 14
1 Design Considerations
1.2 Conceptual Considerations
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.
The object-oriented design applies to function blocks, control modules, and diagrams.
However, technical considerations may lead to one technique being more suitable than
the other in some situations.
The difference between control modules and function blocks is the automatic code sorting
of code blocks in control modules, which gives better execution performance since the
code blocks are then executed in the most optimized way (see Data Flow Driven Execution
on page 16).
If diagrams are used, it is possible to include the entire object-oriented design in a single
diagram as it allows mixing control modules and function blocks by graphical connections.
The number of re-usable elements can also be reduced to a minimum as all of them can
be included in a single re-usable diagram type, and used in many diagrams.
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.
3BSE044222-610 A 15
1 Design Considerations
1.2 Conceptual Considerations
Figure 1.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.
3BSE044222-610 A 16
1 Design Considerations
1.2 Conceptual Considerations
• 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.
1.2.3 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.
3BSE044222-610 A 17
1 Design Considerations
1.2 Conceptual Considerations
Applications
Application 1 Application 2
libraries
Process
section
Process
object
MyValveLib1 MyValveLib2
standard libraries
ProcessObjBasicLib AlarmEventLib
Control Builder
System BasicLib
Figure 1.2: Create (deep) hierarchical structures using both Standard and Self-Defined
libraries
3BSE044222-610 A 18
1 Design Considerations
1.2 Conceptual Considerations
Figure 1.3 shows an example of extensive use of control modules. All code is sorted for
optimal data flow during execution.
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.
1. Since only control modules are used, all code will be sorted.
3BSE044222-610 A 19
1 Design Considerations
1.2 Conceptual Considerations
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.
3BSE044222-610 A 20
1 Design Considerations
1.2 Conceptual Considerations
Number of Programs
B
Number of Code blocks
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
Figure 1.5: Including function blocks adds a third dimension to the problem
3BSE044222-610 A 21
1 Design Considerations
1.2 Conceptual Considerations
This third dimension is unlimited since you can have as many function blocks as
you like, and more function blocks, in each function block, etc. You can also add
control modules within a function block type, in order to use control modules in a
program. (This provides a way of using regulatory functions that are only available
as control modules, although you are using programs.)
It is important to note that the two-dimensional design (see Figure 1.4) is more
important than the three-dimensional design (see Figure 1.5), when it comes to
download time and memory consumption.
When using the programming languages FBD and LD it is easy to assume that the
pages in a code block correspond to the “function block axis” in Figure 1.5. This is
not the case. Code blocks in FBD and LD can contain many pages but they still belong
to the same code block in the POU.
3BSE044222-610 A 22
1 Design Considerations
1.2 Conceptual Considerations
In Figure 1.6, a function block (LevelHigh_1) of type LevelHigh (taken from BasicLib)
has been included within the InputValve control module (of Valve type).
When control modules contain function blocks, the code blocks inside the function
blocks are not sorted.
Control modules are only executed once per scan, whereas function blocks may be
executed several times per scan (or not at all).
3BSE044222-610 A 23
1 Design Considerations
1.2 Conceptual Considerations
3BSE044222-610 A 24
1 Design Considerations
1.2 Conceptual Considerations
Figure 1.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 1.9 shows an example of a diagram.
3BSE044222-610 A 25
1 Design Considerations
1.2 Conceptual Considerations
The graphical user interface makes complex control strategies easy to engineer and
even easier to maintain.
3BSE044222-610 A 26
1 Design Considerations
1.2 Conceptual Considerations
3BSE044222-610 A 27
1 Design Considerations
1.2 Conceptual Considerations
• 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.
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
Having many diagrams and few pages (A), or few diagrams and many pages (B) is
a poor design. A compromise like (C) is the best solution.
3BSE044222-610 A 28
1 Design Considerations
1.2 Conceptual Considerations
Number of Diagrams
Diagram Types
A
C
B
Number of Pages
Figure 1.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.
3BSE044222-610 A 29
1 Design Considerations
1.2 Conceptual Considerations
Differences arise when adding parameters to the block. Each parameter in a function
block adds to memory requirements, but parameters in control modules do not.
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.
In other words, you should consider using control modules for complex applications with
deep hierarchical structures, and in applications with many parameters. In such cases,
the use of control modules may decrease the risk of deterioration in performance.
3BSE044222-610 A 30
1 Design Considerations
1.2 Conceptual 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.1.
Table 1.1: Differences among function blocks, control modules, and diagrams
Diagrams or
Property Control modules Function Blocks
Diagram Types
Execution order Automatic; Manual; code statements, Code blocks from
compiler-determined via based on program flow as control modules are sorted
code sorting/data flow implemented by the into the diagram’s
optimization. programmer. execution order 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 always A function block can be The code blocks in the
executed once per scan called, and executed, diagram types inside the
according to data flow zero, one, or several times diagram are executed
analysis. per scan. once per scan. For control
modules and function
blocks inside the diagram,
the respective rules apply.
3BSE044222-610 A 31
1 Design Considerations
1.2 Conceptual Considerations
Table 1.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 executed connections (same benefit
connection does not according to the IEC as control modules).
change during 61131-3 standard. For
execution; it can only be deep and complex
changed via code hierarchies, the parameter
changes and copying of function blocks
recompilation. Static demands significant CPU
connections are set at time.
compilation, yielding By using the By-ref
efficient code attribute for function
generation, powerful blocks, the issue related
compiler-based program to CPU time can be
analysis, and better avoided.
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.
3BSE044222-610 A 32
1 Design Considerations
1.2 Conceptual Considerations
Table 1.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, In diagram type, all
in_out can be connected out, or in_out can be parameters (in, out, and
to graphics. connected to sub control in_out) can be connected
Connections cannot be modules. However, in_out to graphics. Additionally,
inverted. ("NOT current parameters must be an out parameter can be
parameter name" is connected statically if they connected to an in_out
invalid.) are connected to a control parameter, and an in_out
module parameter. parameter can be
connected to in parameter.
Task connections Can be connected freely Cannot be connected to a Can be connected freely
to any task. task if it contains in_out to any task.
parameters (see further The diagram type instance
Task Connection and in a diagram inherits the
Parameters of Type task of the diagram.
in_out). 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.
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, 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).
3BSE044222-610 A 33
1 Design Considerations
1.2 Conceptual Considerations
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.
3BSE044222-610 A 34
1 Design Considerations
1.2 Conceptual Considerations
Figure 1.13 illustrates the use of structured data types inside a ValveLib library, in Project
Explorer.
Figure 1.13: (Left) MyValveIOType created in ValveLib. (Right) MyValveIOType with its
components
For examples of the use of structured data types for I/O communication, see Structured
Data Type Examples on page 110.
For more detailed information on how to use signals for connecting I/O, refer to the
Compact Control Builder, AC 800M, Configuration (3BSE040935*) manual.
3BSE044222-610 A 35
1 Design Considerations
1.3 Performance Considerations
3BSE044222-610 A 36
1 Design Considerations
1.3 Performance Considerations
• How does performance differ between redundant and single controller configurations?
• How does the execution interval affect CPU load?
• How do I calculate the CPU load percentage?
• How much memory does the first instance of a type consume and how much do
additional instances consume? Numbers are given for a number of common library
types.
• What is the execution time for instances of a number of common library types?
• How do I calculate the ModuleBus scan time?
• What is the I/O response time for a number of common protocols?
• What effects MMS communication speed?
Performance data for all supported protocols is also found in the Communication
manual.
CPU Capacity
If your application puts high demands on the controller regarding application execution
or communication performance, the following points must 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 shall be used, and hence, which control hardware?
3BSE044222-610 A 37
1 Design Considerations
1.3 Performance Considerations
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 Calculation of Scan Time on the Modulebus in the
Compact Control Builder Product Guide.
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.
3BSE044222-610 A 38
1 Design Considerations
1.3 Performance Considerations
2. This is not true if load balancing is set to false. The controller will run until it is forced to stop.
3BSE044222-610 A 39
1 Design Considerations
1.3 Performance Considerations
Controller 1
Application 1
Application 2
Communication variables, which use controller-IP based resolution, are used for cyclic
communication between diagrams, programs, and top level single control modules
(communication in the entire project).
A small application in a controller has the following advantages.
• The stop time during program modification will be reduced.
• The application will be easier to survey.
• There will be more memory available for future modifications.
However, there are a few disadvantages:
• It will be more complicated to exchange data between applications, for example, if
several applications must read from the same analog input.
• The number of tasks increases, which means that the overhead (the controller load)
will increase. A task can only execute code from one application, which makes it
difficult to specify the order of programs in different applications.
3BSE044222-610 A 40
1 Design Considerations
1.3 Performance Considerations
Controller 1 Controller 2
Application 1 Application 2
There are several 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).
However, there are some advantages to doing this, such as:
• There is only one application to keep track of.
• I/O variables can be freely connected (if several applications are connected to the
same controller, then variables must be sent between the applications via
communication), and it will be easy to search amongst them. You will not have to
transfer I/O values between applications.
• Communication variables, which use controller-IP based resolution, are used for
cyclic communication between diagrams, programs, and top level single control
modules (communication in the entire project).
Figure 1.16: Project Explorer configuration with two controllers, each with one
application
3BSE044222-610 A 41
1 Design Considerations
1.3 Performance Considerations
Controller 1 Controller 2
Application
Figure 1.17: One application, divided on several controllers. There is automatic Application
Internal Communication between the controllers
3BSE044222-610 A 42
1 Design Considerations
1.4 Constraints
There is more information in the Control Builder online help. Search for “Distributed
Execution”.
1.4 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 44.
• The size of applications, see Application Size Limit on page 44.
• Number of controllers, applications, diagrams, programs and tasks, see Maximum
Number of Controllers, Applications, Diagrams, Programs and Tasks on page 44.
• Number of Program Organization Units (POUs) and variables, see Maximum Number
of POUs and Variables on page 45.
• INSUM communication and number of MCUs, see INSUM Constraints on page 47.
3BSE044222-610 A 43
1 Design Considerations
1.4 Constraints
3BSE044222-610 A 44
1 Design Considerations
1.4 Constraints
If you reach this limit, you must split your application (or type) into several. For details
on other options, refer to Compact Control Builder Configuration (3BSE040935*).
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,
3BSE044222-610 A 45
1 Design Considerations
1.4 Constraints
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).
3BSE044222-610 A 46
1 Design Considerations
1.4 Constraints
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
3BSE044222-610 A 47
3BSE044222-610 A 48
2 Programming Languages
2.1 General
2 Programming Languages
This section gives an overview of the six programming languages in Control Builder, and
provides guidelines on selecting the language that suits your application best.
Among the six languages, five languages are defined in the IEC 61131-3 standard,
see also Appendix A. However, there are some differences compared to the
implementation in Control Builder. The sixth language, FD, is another graphical
programming language.
Control Builder online help provides detailed information on the use of instructions,
functions, expressions, and so on, in the different languages.
2.1 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 some 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.
3BSE044222-610 A 49
2 Programming Languages
2.1 General
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 2.1: 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 2.1.
Language Function
Function Diagram (FD) on page 51 Function Diagram (FD) is a graphical language that
allows mixing of functions, function blocks, control
modules, and diagrams in one code block and
create graphical connections between them.
Function Block Diagram, FBD on A graphical language for depicting signal and data
page 61 flows through function blocks and
re-usable software elements. Function blocks and
variables are interconnected graphically, which
makes the resulting control diagrams easy to read.
3BSE044222-610 A 50
2 Programming Languages
2.2 Function Diagram (FD)
3BSE044222-610 A 51
2 Programming Languages
2.2 Function Diagram (FD)
The FD language has three main elements that help in creation of the logic:
• Pages
• Invocation blocks (objects)
• Data connections
2.2.1 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.
3BSE044222-610 A 52
2 Programming Languages
2.2 Function Diagram (FD)
An object can be freely placed on a diagram page, as long as it is completely inside the
page boundary.
3BSE044222-610 A 53
2 Programming Languages
2.2 Function Diagram (FD)
• Direction (In, Out, In_Out, or Unspecified), which determines the position (left or
right, or on both sides)
• Negated - Boolean attribute, which depends on the Inverted command at the port.
Figure 2.4: 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.
3BSE044222-610 A 54
2 Programming Languages
2.2 Function Diagram (FD)
3BSE044222-610 A 55
2 Programming Languages
2.2 Function Diagram (FD)
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.
3BSE044222-610 A 56
2 Programming Languages
2.2 Function Diagram (FD)
Control modules in a diagram are sorted based on access of variables to enable both
forward and backward calculations and data flows to be executed in the same task scan.
Therefore code blocks in invoked control modules will not always be executed in the
order specified by the Data Flow Order.
Note that backward graphical connections in diagrams, where the source of the
connection have a higher Data Flow Order than the destination, are automatically
handled as nosort when sorting control modules. Figure 2.8.
This can be solved in two ways. Either by doing the connection textually to a local
variable on the ports involved in the backward connection, or by creating a structured
variable containing one component for the data of the forward direction and one
component marked as reverse representing the backward connection. Then this
structured data type is used for the connection. See Figure 2.9
3BSE044222-610 A 57
2 Programming Languages
2.3 Structured Text, ST
The Structured Text and SFC code blocks can be defined without invoking them from
the FD code block. These code blocks are then sorted together with code blocks of
invoked control modules.
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.
3BSE044222-610 A 58
2 Programming Languages
2.3 Structured Text, ST
2.3.3 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.
3BSE044222-610 A 59
2 Programming Languages
2.3 Structured Text, ST
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).
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 2.10.
3BSE044222-610 A 60
2 Programming Languages
2.4 Function Block Diagram, FBD
3BSE044222-610 A 61
2 Programming Languages
2.4 Function Block Diagram, FBD
TON
AND IN Q
Negation symbol PT ET
3BSE044222-610 A 62
2 Programming Languages
2.4 Function Block Diagram, FBD
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, >=)
• Arithmetic functions (expt, mul, div, add, sub, mod, abs)
• Relational functions (<, >, <=, >=, =, <>).
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.
3BSE044222-610 A 63
2 Programming Languages
2.4 Function Block Diagram, FBD
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 2.13: 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.
3BSE044222-610 A 64
2 Programming Languages
2.4 Function Block Diagram, FBD
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.
R_TRIG F_TRIG
CLK Q1 CLK Q1
CLK CLK
Q Q
Figure 2.14: 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.
3BSE044222-610 A 65
2 Programming Languages
2.4 Function Block Diagram, 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.
IN IN IN
PT PT PT PT PT PT
Q Q Q
ET ET ET
Figure 2.15: 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.
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.
3BSE044222-610 A 66
2 Programming Languages
2.4 Function Block Diagram, FBD
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 2.16: 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 2.17: 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 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.
3BSE044222-610 A 67
2 Programming Languages
2.5 Ladder Diagram, LD
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 2.18: 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.
3BSE044222-610 A 68
2 Programming Languages
2.5 Ladder Diagram, LD
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 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.
3BSE044222-610 A 69
2 Programming Languages
2.5 Ladder Diagram, LD
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.
fan
Figure 2.20: 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
3BSE044222-610 A 70
2 Programming Languages
2.5 Ladder Diagram, LD
LD programs are very popular among maintenance engineers since faults can easily be
traced. Most programming stations generally provide an animated display showing the
live state of transducers while the programmable controller is running. This provides a
very powerful online diagnostics facility for locating incorrect logic paths or faulty
equipment.
3BSE044222-610 A 71
2 Programming Languages
2.5 Ladder Diagram, LD
3BSE044222-610 A 72
2 Programming Languages
2.5 Ladder Diagram, LD
When sequences are constructed with ladder programming the normal method is to
assign one internal memory bit to each state and to use contact conditions from the
transducers to trigger transitions between the states. Each state consists of a feedback
loop using the memory bit as an alternative condition for remaining in the state. The
feedback loop of a state is normally broken by the memory bit of a succeeding state. To
get real-world actions the memory bits are used as conditions in separate rungs to control
the outputs.
state_1 state_2
state_2 state_3
state_3 state_1
state_1 output_a
state_2
state_3 output_b
Figure 2.22: Sequence program with three states controlling two outputs
3BSE044222-610 A 73
2 Programming Languages
2.5 Ladder Diagram, LD
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.
2.5.5 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 63.
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.
3BSE044222-610 A 74
2 Programming Languages
2.6 Instruction List, IL
3BSE044222-610 A 75
2 Programming Languages
2.6 Instruction List, IL
There is also another reason for using IL in order to optimize system performance. During
a period of several years a huge amount of software has been written and thoroughly
tested. Such software can be modularized into libraries and reused even by programmers
with no detailed knowledge of the internal behavior.
2.6.4 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)
3BSE044222-610 A 76
2 Programming Languages
2.6 Instruction List, IL
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.
2.6.5 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.
3BSE044222-610 A 77
2 Programming Languages
2.7 Sequential Function Chart, SFC
3BSE044222-610 A 78
2 Programming Languages
2.7 Sequential Function Chart, SFC
Figure 2.24: Example of a sequence structure. In the box Init P1 contains code, N and
P0 are empty
3BSE044222-610 A 79
2 Programming Languages
2.7 Sequential Function Chart, SFC
The good continuity of SFC from the initial phase to the refining design phases makes
it very popular among system designers and programmers.
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 2.24). 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 2.25.
3BSE044222-610 A 80
2 Programming Languages
2.7 Sequential Function Chart, 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
3BSE044222-610 A 81
2 Programming Languages
2.7 Sequential Function Chart, SFC
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.
3BSE044222-610 A 82
2 Programming Languages
2.7 Sequential Function Chart, SFC
Initial step
Start Transition
Tr1 Transition conditions with code
in other windows
Push
Drill
Tr3
Wait
Tr4
Label
Tr5
Stop
Tr6
Figure 2.26: Example of an SFC program for an automatic drilling machine. Note the
cyclic execution being enabled by the Tr6 transition condition
3BSE044222-610 A 83
2 Programming Languages
2.7 Sequential Function Chart, SFC
Figure 2.27: 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.
3BSE044222-610 A 84
2 Programming Languages
2.7 Sequential Function Chart, SFC
S1
Tr1
S2
Tr2 Tr3
S3 S4
Tr4 Tr5
S5
Tr6
We have earlier seen how divergent paths can be used to execute alternative paths in
sequences. An important characteristic of such parallel branches is however, that only
one step in one of the branches may be active at any time.
However, in many batch process applications there is a need for simultaneous sequence
structure with several branches. The main sequence is used for primary process control,
while secondary parallel sequences are used to monitor that the process is running
normally. Such parallel sequences can e.g. check that plant temperatures and pressures
are within required limits, otherwise the control system may shut down the process.
3BSE044222-610 A 85
2 Programming Languages
2.7 Sequential Function Chart, SFC
In the example below, all three divergent branches start with a common transition
condition. Execution then continues in parallel and independently along all three paths
until convergence is reached. Both the divergent and the convergent flow in simultaneous
sequences are drawn with a pair of lines to distinguish the construct from a sequence
selection. The transition condition that succeeds the simultaneous sequence structure
will not be tested until all the branches have finished execution, that is when the last step
of each branch is active.
Start
Tr1
Acid
Tr2
Tr3 Tr4
Heat Temp
Tr5
Wait
Tr6
2.7.8 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.
3BSE044222-610 A 86
2 Programming Languages
2.7 Sequential Function Chart, SFC
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.
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.
3BSE044222-610 A 87
3BSE044222-610 A 88
3 Programming in Practice
3.1 Introduction
3 Programming in Practice
3.1 Introduction
This section contains examples and practical advice on:
• How to organize your code, see Organizing Code on page 89.
• How to use the code sorting function to optimize execution and how to solve code
loops, see Code Sorting on page 114.
• How to optimize your code, see Code Optimization on page 128.
• How to tune your tasks to optimize execution, see Task Tuning on page 135.
3BSE044222-610 A 89
3 Programming in Practice
3.2 Organizing Code
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,
• have to be used as function blocks of a function block type definition,
• support type-instance relationship
• can be customized.
3BSE044222-610 A 90
3 Programming in Practice
3.2 Organizing Code
3BSE044222-610 A 91
3 Programming in Practice
3.2 Organizing Code
• In and Out parameters can be supplied with initial values, but not In_out parameters.
The initial value will be the value of unconnected In or Out parameters inside the
function block.
• The extensible parameters (multi-parameters) have a general limit of 128 parameters
in each function block. However, a few function blocks have a lower limit, described
in the online help.
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).
3BSE044222-610 A 92
3 Programming in Practice
3.2 Organizing Code
If UpdateIndata then
MyFB.In1 := Indata1;
MyFB.In2 := Indata2;
end_if;
MyFB(InOut1 := InOutdata1,
InOut2 := InOutdata2);
If ReadOutdata then
Outdata1 := MyFB.Out1;
Outdata2 := MyFB.Out2;
end_if;
It is possible to omit In and Out parameters in a function block call. The In parameters
of MyFB will only be changed occasionally in this example.
The method of directly accessing In and Out parameters by dot notation (for example
MyFB.In1 or MyFB.Out1) in the code can be used to save a local variable when
connecting two function blocks, see below.
MyFirstFB(In1 := Indata1,
Out1 => LocalVar);
MySecondFB(In1 := LocalVar,
Out => Outdata1);
MyFirstFB(In1 := Indata1);
MySecondFB(In1 := MyFirstFB.Out1,
Out => Outdata1);
3BSE044222-610 A 93
3 Programming in Practice
3.2 Organizing Code
The following are defined as scheduling points during the execution of an application:
• at the beginning of each code block (in function blocks, control modules and
programs),
• at backward jumps in the code (that is, loops such as For, While and Repeat
statements).
The main concern with task switching is data consistency. It must be assured that the
data required in a function block, do not change during function block execution. Such
a problem may arise if In_out parameters are used and the data referred to the In_out
parameter are also manipulated by another task. This problem does not occur for In and
Out parameters, since they make use of local copies within the function block, which
remain unchanged during the execution of the whole function block.
It is important to allow scheduling points, bearing data consistency in mind, at a sufficient
number of points in the application code, otherwise tasks with higher priority will be
delayed by a low priority task leading to what is called task latency.
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 must be included in the code not to cause task
latency.
The frequency of scheduling points shall 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 shall 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 Compact Control Builder, AC 800M,
Configuration manual.
3BSE044222-610 A 94
3 Programming in Practice
3.2 Organizing Code
3BSE044222-610 A 95
3 Programming in Practice
3.2 Organizing Code
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 126.
3BSE044222-610 A 96
3 Programming in Practice
3.2 Organizing Code
3BSE044222-610 A 97
3 Programming in Practice
3.2 Organizing Code
In the figure above, in Program1, the FB1 function block contains a group of control
modules. This local group contains the CMinFB1 control module with its SubCMinFB1
and SubCMinFB2 sub control modules and the CMinFB2 control module. All execute
when the ExecuteControlModules function is called from the FB1 function block.
In this group of control modules, the execution order of all code blocks is determined by
the code sorting.
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.
3BSE044222-610 A 98
3 Programming in Practice
3.2 Organizing Code
It is also possible to make a task connection to a sub control module other than its parent's
task connection. In Figure 3.2 above, CMinFB2 in FB1 has such a task connection and
is therefore removed from the local group in FB1. The CMinFB2 control module is instead
added to the group of co-sorted control modules in the Slow task.
3BSE044222-610 A 99
3 Programming in Practice
3.2 Organizing Code
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.
A function block can be activated and deactivated using the Enable parameter. Figure
3.3 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.
3BSE044222-610 A 100
3 Programming in Practice
3.2 Organizing Code
3BSE044222-610 A 101
3 Programming in Practice
3.2 Organizing Code
3BSE044222-610 A 102
3 Programming in Practice
3.2 Organizing Code
The duration of the Error, Warning and Done or Ndr parameters is a pulse during one
scan only. Therefore latching in the application is required to detect these signals.
3BSE044222-610 A 103
3 Programming in Practice
3.2 Organizing Code
3BSE044222-610 A 104
3 Programming in Practice
3.2 Organizing Code
Figure 3.6 shows examples of event-driven execution. Parameters are used according
to Table 3.3. The output signal Done only lasts for one call, whereas Status is stable
until next change. Figure 3.6 shows an example of the parameter interaction in this case.
3BSE044222-610 A 105
3 Programming in Practice
3.2 Organizing Code
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 your own
libraries, see the Compact Control Builder, AC 800M, Binary and Analog Handling manual.
Each library has to be connected to the application where objects from the library are
used. See the Compact Control Builder, AC 800M, Configuration manual.
3BSE044222-610 A 106
3 Programming in Practice
3.2 Organizing Code
• 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 CPU, 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.
Project constants may be defined in two locations: in the project or in a library. Project
constants to be used in types should be defined in the library where the type is defined.
More information about project constants can be found in the Compact Control Builder,
AC 800M, Configuration manual.
3BSE044222-610 A 107
3 Programming in Practice
3.2 Organizing Code
• HSI Communication
Take any possible communication with HSI (operator stations, etc.) into consideration,
when creating a type. Consider which variables are required for communication,
and which name convention is to be used. Variables that do not have to be visible
in the HSI should have the attribute Hidden.
• Alarm and Event Objects
Generally speaking, you only have to use a single SimpleEventDetector function
block in a type. The function of SimpleEventDetector is like that of a printer, logging
an event according to its parameter values when the condition is changed. Using a
single event detector and then changing its parameter values for different purposes
will save a considerable amount of memory.
Diagram Types
A diagram type is a POU that consists of parameters, variables, and code that supports
FD language. It is based on the object4 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 109.
3BSE044222-610 A 108
3 Programming in Practice
3.2 Organizing Code
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.
• 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 by creating 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.
3BSE044222-610 A 109
3 Programming in Practice
3.2 Organizing Code
To distinguish such parameters from other parameters, it is recommended that the phrase
Init is 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.
• Programming Example with Flexible Types:
Suppose we have created a control module type named MyPIDLoop. It consists of
an AnalogInCC, a PidCC, and an AnalogOutCC. The purpose of the type is to
generate a general PID loop, which can be used for several purposes (to regulate
temperature, level, pressure, etc.).
Most parameters of the included objects must be connected to parameters of the
new type, in order to make the type general.
We also want to be able to set the gain for each PID object during the engineering
phase (not during runtime). We must then declare a parameter called GainInit [real].
The following piece of code in the new type sets the PID gain for each object after
the first download:
(* The variable 'init' is of type bool, has the initial value false,
and has the attribute ColdRetain set *)
If Not Init Then
Init := True;
PidCC_InteractionPar.Main.Gain := GainInit;
end_if;
3BSE044222-610 A 110
3 Programming in Practice
3.2 Organizing Code
Table 3.4: Questions to ask before deciding on what data types to use
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, shall Our valve must be able to operate both
it operate independently, or be an independently, as an object type, and as
integrated part of a larger object type, for an object.
example a tank line?
Does the valve need alarm handling, and In our case we will make the valve template
if so, which object level shall contain the the alarm owner (highest level).
alarm owner?
In Figure 3.7, the process object for valve V100 uses one data type to exchange data
with the tank (V100_POType) and another data type to exchange data with the IO
(ValveOnewayIOType). Read steps 1 – 5 below Figure 3.7.
3BSE044222-610 A 111
3 Programming in Practice
3.2 Organizing Code
Agitate Valve :
V100
Heat
Clean
Empty
3 1, 2 4, 5
Figure 3.7: Using structured Data Types to communicate between IO and the application
1. The Application code (IEC 61131-3) in the tank T1 is connected to the valve module
via the V100_POType data type, forming a star connection.
2. Connections into the V100_POType result in an automatic OR logic.
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 ValveOnewayIOType is the connection between the valve object
and the IO module.
5. If the type of IO connection is to be changed 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 tank 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 what interfaces the valve needs. One could use 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.
The valve, in this case named V100, can be put in the center of a design map, surrounded
by interfaces that are linked to the valve.
3BSE044222-610 A 112
3 Programming in Practice
3.2 Organizing Code
2. Application 3. Configuration
V100
1. IO 4. HSI
The four interfaces IO, Application, Configuration and HSI can then each use a structured
data type to communicate with HSI, IO etc.
Now, lets look at the details of the structured data type for usage in a Valve to control
the I/O.
The valve in this example has a total of four signals: OrderOpen, OrderClose,
AnswerOpen, and AnswerClosed.
The valve is programmed as a type in a library, and the name of the valve type is
ValveOnewayType. One of the parameters of this valve is the I/O parameter of structured
data type, ValveOnewayIOType. It consists of four components.
The components are of the predefined structured data type BoolIO. Further, each
component of the ValveOnewayIOType will be connected to an I/O channel of the digital
I/O modules.
When adding a variable of this data type in a diagram and choosing to create Signals,
for connection to I/O, the name of the Signals can be automatically assigned. The signals
will then get names based on the variable name and the component names and as an
example they can be V100_IO_OrderOpen, V100_IO_OrderClose etc (in this case the
variable was named V100_IO). When creating a structured type for usage with I/O it is
therefore important to select good names on the components.
3BSE044222-610 A 113
3 Programming in Practice
3.3 Code Sorting
Figure 3.10: 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.
Communication variables are always marked as nosort, see NoSort Attribute on page
118, and are not considered during code sorting.
3BSE044222-610 A 114
3 Programming in Practice
3.3 Code Sorting
3BSE044222-610 A 115
3 Programming in Practice
3.3 Code Sorting
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 3.12, the sort order of code blocks can be
1A 2 3 4A 5A 5B 4B 1B.
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.
3BSE044222-610 A 116
3 Programming in Practice
3.3 Code Sorting
Figure 3.13: Control module 2 reads Request and writes Deliver, and control module 1
reads Deliver and writes Request. This execution order cannot be resolved
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.
3BSE044222-610 A 117
3 Programming in Practice
3.3 Code Sorting
The code loop dependency has now been eliminated; Delivered:old stores the value
from the previous scan and Delivered:new contains the updated value from the current
scan. Hence, the execution order becomes code blocks 11 – 21 – 12. This approach is
particularly valuable for complex applications, which are difficult to monitor manually.
Use NoSort only if you know the data flow characteristics in detail.
3BSE044222-610 A 118
3 Programming in Practice
3.3 Code Sorting
3BSE044222-610 A 119
3 Programming in Practice
3.3 Code Sorting
The five parts of the log labeled A – E, in the figure are explained below.
• A: Code loop block identifier/delimiter
Each code sorting error results in a block, numbered 1, 2, …
• B: Control module name
The name of the control module in question.
• C: Control module type
The name of the control module type in question (see B above).
• D: Code block name
The name of the code block in question.
• E: Code block identifier
The number given by the compiler to the code block.
3BSE044222-610 A 120
3 Programming in Practice
3.3 Code Sorting
Figure 3.17: The four code block representatives in the Loop Block 1
3BSE044222-610 A 121
3 Programming in Practice
3.3 Code Sorting
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”.
3BSE044222-610 A 122
3 Programming in Practice
3.3 Code Sorting
Figure 3.21: The Loop Block 1 visualized from the Error Log output
3BSE044222-610 A 123
3 Programming in Practice
3.3 Code Sorting
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 126.
When you have a more trained eye you will be able to identify the flows in the error log
more quickly. Think as follows.
• Concentrate on one code loop block at a time.
• Reduce the control module lines by deleting the “CONTROL MODULE” lines.
CODE BLOCK ValveCode (1)
READ In => MyApplication.Pump1:M1_Fwd (4)
WRITE Out => MyApplication.Pump1:V1_Open (3)
CODE BLOCK ValveCode (2)
READ In => MyApplication.Pump1:M1_Fwd (4)
WRITE Out => MyApplication.Pump1:V2_Open (3)
CODE BLOCK MotorCode (3)
READ In => MyApplication.Pump1:V1_Open (1)
In2 => MyApplication.Pump1:V2_Open (2)
WRITE Out => MyApplication.Pump1:M2_Stop (4)
CODE BLOCK MotorCode (4)
READ In => MyApplication.Pump1:M2_Stop (3)
WRITE Out => MyApplication.Pump1:M1_Fwd (1)
Out => MyApplication.Pump1:M1_Fwd (2)
3BSE044222-610 A 124
3 Programming in Practice
3.3 Code Sorting
3BSE044222-610 A 125
3 Programming in Practice
3.3 Code Sorting
• Replace “Write Out =>” and the application name, up to the variable name with
“Write:”, change the places of the variable name and the identifier.
CODE BLOCK (1)
READ (4) M1_Fwd
WRITE (3) V1_Open
CODE BLOCK (2)
READ (4) M1_Fwd
WRITE (3) V2_Open
CODE BLOCK (3)
Read: (1) V1_Open
(2) V2_Open
Write: (4) M2_Stop
CODE BLOCK (4)
Read: (3) M2_Stop
Write: (1) M1_Fwd
(2) M1_Fwd
• The flow has now been greatly simplified, and is easier to read. Code Block 3 write
out the value from variable M2_Stop, before the value has been read in (see Code
Block 4), thus one scan delay.
3BSE044222-610 A 126
3 Programming in Practice
3.3 Code Sorting
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.
3. 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.
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.
3BSE044222-610 A 127
3 Programming in Practice
3.4 Code Optimization
3BSE044222-610 A 128
3 Programming in Practice
3.4 Code Optimization
Recommendations
• Code items that are closely connected or exchange large amount of data with each
other should be connected to the same task.
• Use 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.
• Make sure execution of code do 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 function blocks, especially for strings and large data types it is time consuming.
In that case, a reference to the data instance can instead be 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.
3BSE044222-610 A 129
3 Programming in Practice
3.4 Code Optimization
3BSE044222-610 A 130
3 Programming in Practice
3.4 Code Optimization
If the project consists of programs and function blocks instead, the function
FirstScanAfterApplicationStart can be used. This function only returns a true value for
the first cycle after downloading a change in the code, or after a cold start. This function
can be used in conditional statements, for example, to set the value of a function block
parameter:
If FirstScanAfterApplicationStart() then
MMSConnect_1.Partner := IPAddress_1;
end_if;
where IPAddress_1 is a string variable with the actual address as initial value.
3BSE044222-610 A 131
3 Programming in Practice
3.4 Code Optimization
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.
3BSE044222-610 A 132
3 Programming in Practice
3.4 Code Optimization
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
Basic Control Software manual.
• Only perform string concatenation when absolutely necessary.
• Use the attribute by_ref for in and out function block parameters whenever possible.
Variable Attributes
The attribute retain5 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.
However, In parameters should normally have the attribute retain to obtain bumpless
transfer of signals, after a warm restart. Out parameters that are always written (before
reading) in each scan, do not require a retain attribute.
More information on attributes can be found in the Basic Control Software manual.
Abbreviation Description
fb Function Block
p Parameter
3BSE044222-610 A 133
3 Programming in Practice
3.4 Code Optimization
The code below (before optimization) will generate an alarm, and an output will be
activated if the alarm value exceeds a preset value.
(* Comment placed here *)
fbSR( S1 := pLevel > pHighLevel,
Reset := pLevel < pNormalLevel,
Q1 => vSignal );
fbAlarmCond( Signal := vSignal,
SrcName := pName,
Message := pDescription + vTextSpace + vTextHighLevel,
Severity := pSeverity,
Class := pClass,
FilterTime := pFilterTime,
EnDetection := pEnDetection,
CondState => vCondState );
pAlarm := vCondState > 2;
The code below has been optimized for the best performance.
(* The variable vFirstScan is default true *)
if vFirstScan then
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.
3BSE044222-610 A 134
3 Programming in Practice
3.5 Task Tuning
• 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.
3BSE044222-610 A 135
3 Programming in Practice
3.5 Task Tuning
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.
3BSE044222-610 A 136
3 Programming in Practice
3.5 Task Tuning
3BSE044222-610 A 137
3 Programming in Practice
3.5 Task Tuning
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 we cannot start
in slot 1. We start in slot 2, and then again after 6 slots, that is, slot 8.
3BSE044222-610 A 138
3 Programming in Practice
3.5 Task Tuning
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.
3BSE044222-610 A 139
3 Programming in Practice
3.5 Task Tuning
3BSE044222-610 A 140
3 Programming in Practice
3.5 Task Tuning
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.
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 3.22.
3BSE044222-610 A 141
3 Programming in Practice
3.5 Task Tuning
Let us then assume that the execution time for Task B is doubled. This will create a total
load of 60%, still leaving some time for other system jobs to execute, e.g. for
communication, but it will result in a warning that the cyclic load is high since it exceeds
the limit of 50%.
The execution will result in a task layout without margins and in fact Task B will be
interrupted by Task A, see Figure 3.23. 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
Compact Control Builder, AC 800M, Configuration (3BSE040935*) manual.
3BSE044222-610 A 142
3 Programming in Practice
3.6 Testing & Simulation
By default, Hardware simulation is not allowed. One needs to enable it in the Control
Builder Project settings for application download HWSimulationAllowed = true.
3BSE044222-610 A 143
3BSE044222-610 A 144
A IEC 61131-3 Standard
A.1 Main Objectives
3BSE044222-610 A 145
A IEC 61131-3 Standard
A.2 Benefits Offered by the Standard
A function block is part of a control program that has been packaged and named so that
it can be reused in other parts of the same program, or even in another program or
project. Function blocks can provide any kind of software solution from simple logical
conditions, timers or counters, to advanced control functions for a machine or part of a
plant. Since the definition of input and output data has to be very precise, a function
block can easily be used, even by other programmers than those who developed it.
By packaging software into function blocks the internal structure may be hidden so that
well-tested parts of an application can be reused without risk of data conflict or
malfunction.
3BSE044222-610 A 146
A IEC 61131-3 Standard
A.2 Benefits Offered by the Standard
3BSE044222-610 A 147
3BSE044222-610 A 148
B Naming Conventions and Tools
B.1 Introduction
For more information about naming conventions etc, when creating control module
types, see also the manual AC 800M, Library Objects Style guide (3BSE042835*).
B.1 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 149 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 160 suggest names for types, parameters
and I/O extensions. Read this section if you need a basis for developing naming
rules.
3BSE044222-610 A 149
B Naming Conventions and Tools
B.2 Naming Conventions
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 B.2 on page 152.
More information is given in Control Builder online help. Search the index for “naming
conventions”.
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.
3BSE044222-610 A 150
B Naming Conventions and Tools
B.2 Naming Conventions
3BSE044222-610 A 151
B Naming Conventions and Tools
B.2 Naming Conventions
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.
3BSE044222-610 A 152
B Naming Conventions and Tools
B.2 Naming Conventions
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”.
3BSE044222-610 A 153
B Naming Conventions and Tools
B.2 Naming Conventions
B.2.2 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.
• Avoid global/external variables, whenever possible.
• Avoid access variables, whenever possible.
• Avoid very long names, especially in FBD.
• Add the suffix Old to the variable name, to create a variable that keeps the old value.
• Add the suffix Loc to the variable name, to create a variable that is a working copy
of, for example, an EDIT parameter.
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.
3BSE044222-610 A 154
B Naming Conventions and Tools
B.2 Naming Conventions
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 160
and Table B.1 on page 151 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.
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.
3BSE044222-610 A 155
B Naming Conventions and Tools
B.2 Naming Conventions
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 Library Object Style Guide manual.
B.2.4 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”.
B.2.5 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 Compact Control Builder Configuration
(3BSE040935*) manual.
B.2.6 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.
3BSE044222-610 A 156
B Naming Conventions and Tools
B.2 Naming Conventions
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.
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.
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.
3BSE044222-610 A 157
B Naming Conventions and Tools
B.2 Naming Conventions
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.
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 160.
3BSE044222-610 A 158
B Naming Conventions and Tools
B.2 Naming Conventions
AI PID AO
A21FT121A A21FIC121A A21FV121A
For examples on how to use structured data types, see Structured Data Type
Examples on page 110.
B.2.9 Parameters
All objects with an Alarm Condition must have the Name and a Description parameter
connected.
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.
B.2.10 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.
3BSE044222-610 A 159
B Naming Conventions and Tools
B.2 Naming Conventions
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.
Suggested Suggested
Function extension or Function extension or
function function
Alarm ALM Local forward LFWD
Alignment ZSA Local reverse LREV
Automatic control AUTO Local start LSTR
(order)
Bypass BYP Local stop LSTP
Clear CLR Main contactor M
acknowledge
Close CLS Main contactor MF
acknowledge,
forward
Control voltage CTRLV Main contactor MH
acknowledge, high /
fast
Cycle CYC Main contactor ML
acknowledge, low /
slow
Decrease (Local) LDEC Main contactor MR
acknowledge,
reverse
Emergency pull cord SAFE Main contactor MPOS
switch position
Emergency stop ESTOP Manual control MAN
(order)
Fast FST Off OFF
Fault FLT On ON
3BSE044222-610 A 160
B Naming Conventions and Tools
B.2 Naming Conventions
3BSE044222-610 A 161
B Naming Conventions and Tools
B.2 Naming Conventions
Suggested
Suggested extension
Function Function extension or
or function
function
Blocking BLK Main contactor MFWD
forward
Close valve CLS Main contactor high MHGH
/ fast
Decrease DEC Main contactor low MLOW
/ slow, Crawl
Electrically EV Main contactor MOPN
operated valve open
Electrically EVC Main contactor MREV
operated valve reverse
close
Electrically EVO Main contactor MSEL
operated valve selector
open
Increase INC Main contactor start MSTR
Lamp (pilot) H1 Main contactor stop MSTP
Local/Remote LR Open valve OPN
Main contactor MCLS Solenoid valve XV
close
Trip or shutdown of TRIP
external equipment
Suggested Suggested
Function extension or Function extension or
functions functions
Actuator position ZT,POS Power JT
Analysis AT Power (reactive) QT
3BSE044222-610 A 162
B Naming Conventions and Tools
B.2 Naming Conventions
Suggested Suggested
Function extension or Function extension or
functions functions
Control valve V Output (General) OUT
(general)
Flow control valve FV Pressure control PV
valve
Indication IND Set-point SETP
Level control valve LV Temperature control TV
valve
The list shows examples of I/O signals. More types can be defined as desired.
3BSE044222-610 A 163
B Naming Conventions and Tools
B.3 Name Handling
LibraryOrApplicationName.TypeName
3BSE044222-610 A 164
B Naming Conventions and Tools
B.3 Name Handling
Figure B.4: 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 B.5.
Figure B.5: The MyFBtype name conflict is avoided by first pointing to the library in the
Program editor, and then referencing the function block type
3BSE044222-610 A 165
3BSE044222-610 A 166
Revision History
Revision History
Revision History
This section provides information on the revision history of this User Manual.
Revision History
The following table lists the revision history of this User Manual.
Revision
Description Date
Index
A Published for Compact Control Builder AC 800M 6.1.0-0 November 2019
3BSE044222-610 A 167
3BSE044222-610 A 168
Index
Index
A controllers
acronyms, 150 distributed execution, 42
advantages multiple applications, 40
small applications, 40 control modules
alarm event optimization, 133 code sorting, 114
applications correct
several in one controller, 40 code loop errors, 119
split on several controllers, 42 code sorting problems, 126
attributes CPU
NoSort, 118 capacity, 37
Retain, 133 priority, 38
custom
C data types, 34
calculate cyclic load
offset for tasks, 139 maximum, 39
call
function blocks, 92 D
capacity data types
CPU, 37 create, 34
characters custom, 34
non-valid, 152 naming, 154
code blocks structured, 34
in SFC, 128 Description parameter, 159
sorting, 114 descriptions
code loop naming, 159
error log, 119 diagrams
code loops, 117 naming, 156
correct, 119 Diagrams, 25
code sorting, 114 execution, 56
control modules, 114 sorting, 115
correct problems, 126 disadvantages
collect small applications, 40
I/O, 159 distributed execution, 42
communication, 39
conflicts E
names, 164 EnableStringTransfer, 43
Constraints, 43 error logs
3BSE044222-610 A 169
Index
3BSE044222-610 A 170
Index
3BSE044222-610 A 171
3BSE044222-610 A 172
www.abb.com/compactproductsuite 800xA is a registered or pending trademark We reserve all rights to this document and
of ABB. All rights to other trademarks reside the items and images it contains. The
www.abb.com/controlsystems with their respective owners. reproduction, disclosure to third parties or
the use of the content of this document –
We reserve the right to make technical including parts thereof – are prohibited
changes to the products or modify the without ABB’s prior written permission.
3BSE044222-610 A