Programming Guideline DOCU v14 en PDF
Programming Guideline DOCU v14 en PDF
http://www.siemens.com/simatic-programming-guideline
The Application Examples are not binding and do not claim to be complete with
regard to configuration, equipment or any contingencies. The Application
Examples do not represent customer-specific solutions. They are only intended
to provide support for typical applications. You are responsible for the correct
operation of the described products. These Application Examples do not relieve
you of the responsibility of safely and professionally using, installing, operating
and servicing equipment. When using these Application Examples, you
recognize that we cannot be made liable for any damage/claims beyond the
liability clause described. We reserve the right to make changes to these
Application Examples at any time and without prior notice. If there are any
deviations between the recommendations provided in this Application Example
and other Siemens publications e.g. catalogs the contents of the other
documents have priority.
We do not accept any liability for the information contained in this document.
Any claims against us based on whatever legal reason resulting from the use of
the examples, information, programs, engineering and performance data etc.,
described in this application example will be excluded. Such an exclusion will not
apply in the case of mandatory liability, e.g. under the German Product Liability Act
(Produkthaftungsgesetz), in case of intent, gross negligence, or injury of life, body
or health, guarantee for the quality of a product, fraudulent concealment of a
deficiency or breach of a condition which goes to the root of the contract
(wesentliche Vertragspflichten). The compensation for damages due to a breach
of a fundamental contractual obligation is, however, limited to the foreseeable
damage, typical for the type of contract, except in the event of intent or gross
negligence or injury to life, body or health. The above provisions do not imply a
change of the burden of proof to your detriment.
Any form of duplication or distribution of these Application Examples or excerpts
hereof is prohibited without the expressed consent of Siemens Industry Sector.
Security
information
Siemens provides products and solutions with industrial security functions that
support the secure operation of plants, solutions, machines, equipment and/or
networks. They are important components in a holistic industrial security
concept. With this in mind, Siemens products and solutions undergo continuous
development. Siemens recommends strongly that you regularly check for
product updates.
For the secure operation of Siemens products and solutions, it is necessary to
take suitable preventive action (e.g. cell protection concept) and integrate each
component into a holistic, state-of-the-art industrial security concept. Third-party
products that may be in use should also be considered. For more information
about industrial security, visit http://www.siemens.com/industrialsecurity.
To stay informed about product updates as they occur, sign up for a productspecific newsletter. For more information, visit
http://support.automation.siemens.com.
Table of Contents
Table of Contents
Warranty and Liability ................................................................................................. 2
1
Preface ................................................................................................................ 6
2.6.6
2.7
2.7.1
2.7.2
2.8
2.8.1
2.8.2
2.8.3
2.8.4
2.8.5
2.9
2.9.1
2.9.2
2.9.3
2.9.4
2.10
2.10.1
2.10.2
2.11
2.12
2.13
2.14
3
Introduction ........................................................................................... 8
Terms ................................................................................................... 8
Programming languages .................................................................... 11
Optimized machine code .................................................................... 11
Block creation ..................................................................................... 12
Optimized blocks ................................................................................ 13
S7-1200: Setup of optimized blocks ................................................... 13
S7-1500: Setup of optimized blocks ................................................... 14
Best possible data storage in the processor on S7-1500 .................. 15
Conversion between optimized and non-optimized tags ................... 18
Parameter transfer between blocks with optimized access and
standard access ................................................................................. 19
Communication with optimized data .................................................. 20
Block properties .................................................................................. 21
Block sizes ......................................................................................... 21
Number of organization blocks (OB) .................................................. 21
New data types for S7-1200/1500 ...................................................... 22
Elementary data types........................................................................ 22
Date_Time_Long data type ................................................................ 23
Further time data types ...................................................................... 23
Unicode data types ............................................................................. 24
VARIANT data type (S7-1500 and S7-1200 from FW4.1) ................. 25
Instructions ......................................................................................... 28
CALCULATE ...................................................................................... 28
MOVE instructions .............................................................................. 29
VARIANT instructions (S7-1500 and S7-1200 from FW4.1) .............. 31
RUNTIME ........................................................................................... 31
Symbolic and comments .................................................................... 32
Programming editor ............................................................................ 32
Comment lines in watch table ............................................................ 33
System constants ............................................................................... 34
User constants ................................................................................... 35
Internal reference ID for controller and HMI tags ............................... 36
STOP mode in the event of errors ..................................................... 38
Table of Contents
3.4
3.4.1
3.4.2
3.4.3
3.4.4
3.5
3.6
3.6.1
3.6.2
3.6.3
3.6.4
3.6.5
3.7
3.7.1
3.7.2
3.7.3
3.7.4
3.8
3.9
3.10
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.10.7
3.10.8
3.10.9
4
Introduction ......................................................................................... 91
Terms ................................................................................................. 92
Components of the safety program .................................................... 93
F runtime group .................................................................................. 94
F signature ......................................................................................... 94
Assigning the PROFIsafe address at the F-I/O .................................. 96
Evaluation of F-I/O ............................................................................. 96
Value status (S7-1200F / S7-1500F) ................................................. 97
Data types .......................................................................................... 98
F-conform PLC data type ................................................................... 98
TRUE / FALSE ................................................................................. 100
Optimizing compilation and program runtime .................................. 101
Avoiding time-processing blocks: TP, TON, TOF ............................ 102
Avoiding deep call hierarchies ......................................................... 102
Separation of standard and safety program ..................................... 102
Use of multi-instances ...................................................................... 102
Avoiding JMP/label structures .......................................................... 102
Data exchange between standard and F-program .......................... 103
Testing the safety program............................................................... 104
STOP mode in the event of F errors ................................................ 105
Migration of safety programs ............................................................ 105
General recommendations for safety ............................................... 105
Table of Contents
The Most Important Recommendations ...................................................... 106
History............................................................................................................. 108
1 Preface
Preface
Uniform programming
Increased performance
The new control generation SIMATIC S7-1200 and S7-1500 has an up-to-date
system architecture, and together with the TIA Portal offers new and efficient
options of programming and configuration. It is no longer the resources of the
controller (e.g. data storage in the memory) that are paramount but the actual
automation solution.
This document gives you many recommendations and tips on the optimal
programming of S7-1200/1500 controllers. Some differences in the system
architecture of the S7-300/400, as well as the thus connected new programming
options are explained in an easy to understand way. This helps you to create a
standardized and optimal programming of your automation solutions.
The examples described can be universally used for the controllers S7-1200 and
S7-1500.
Core content of this programming guideline
The following key issues on the TIA Portal are dealt with in this document:
S7-1200/1500 innovations
Programming languages
Optimized blocks
Storage concept
Symbolic addressing
Libraries
1 Preface
Additional Information
When programming SIMATIC controllers, the task of the programmer is to create
as clear and readable a user program as possible. Each user uses its own
strategy, for example, how to name tags or blocks or the way of commenting. The
different philosophies of the programmers create very different user programs that
can only be interpreted by the respective programmer.
The programming styleguide offers you coordinated set of rules for consistent
programming. These specifications for example describe a uniform assignment of
tags and block names up to clear programming in SCL.
You can user these rules and recommendations at will; they serve as a suggestion
(not a standard in programming) for consistent programming.
Hinweis
You will find the programming styleguide for S7-1200 and S7-1500 in the
following entry:
https://support.industry.siemens.com/cs/ww/en/view/81318674
2 S7-1200/1500 Innovations
2.1 Introduction
S7-1200/1500 Innovations
2.1
Introduction
In general, the programming of SIMATIC controllers has stayed the same from
S7-300/400 to S7-1500. There are the familiar programming languages such as
LAD, FBD, STL, SCL or graph and blocks such as organization blocks (OBs),
function blocks (FBs), functions (FCs) or data blocks (DBs). I.e. already created
S7-300/400 programs can be implemented on S7-1500 and already created LAD,
FBD and SCL programs on S7-1200 controller without any problems.
Additionally, there are many innovations that make programming easier for you and
which allow a powerful and storage-saving code.
Note
easier to understand,
2.2
Terms
STEP 7 V5.x
Symbol table
PLC tags
UDT
VAT table
Watch table
2 S7-1200/1500 Innovations
2.2 Terms
Terms for tags and parameters
When it is about tags, functions, and function blocks, many terms are repeatedly
used differently or even incorrectly. The following figure is to clarify these terms.
Figure 2-2: Terms associated with tags and parameters
Globaler DB
FC / FB
1
3
Term
Description
1.
Tag
PLC tags
2.
Tag value
3.
Actual parameter
4.
Formal parameter
(transfer parameter,
block parameter)
2 S7-1200/1500 Innovations
2.2 Terms
Note
Why is it not possible to mix register passing and explicit parameter transfer with
the S7-1500 in STEP 7 (TIA Portal)?
Among others, the migration of STL programs to S7-1500 is described in this
entry.
https://support.industry.siemens.com/cs/ww/en/view/67655405
10
2 S7-1200/1500 Innovations
2.3 Programming languages
2.3
Programming languages
For the programming of a user program, various different programming languages
are available. Each language has its own advantages, which can be variably used,
depending on the application. Every block in the user program can therefore be
created in any programming language.
Table 2-2: Programming languages
Programming language
Note
S7-1200
S7-1500
Ladder (LAD)
Graph
2.4
Advantages
All programming languages have the same high performance (with the same
access types)
Properties
The following figure displays the difference of the compilation of S7 programs into
machine code.
11
2 S7-1200/1500 Innovations
2.5 Block creation
Figure 2-3: Machine code generation with S7-300/400/WinAC and S7-1200/1500
S7-1200/1500
S7-300/400/WinAC
SCL
LAD
FBD
SCL
LAD
FBD
STL
(only S7-1500)
STL
Maschine code
S7-300/400/WinAC
2.5
Maschine code
S7-1200/1500
For S7-300/400/WinAC controllers LAD and FBD programs are first of all
compiled in STL before the machine code is created.
Block creation
All blocks such as OBs, FBs and FCs can be programmed directly in the desired
programming language. Thus no source has to be created for SCL programming.
You only select the block, and SCL as programming language. The block can then
be directly programmed.
Figure 2-4: Add new block dialog
12
2 S7-1200/1500 Innovations
2.6 Optimized blocks
2.6
Optimized blocks
S7-1200/1500 controllers have optimized data storage. In optimized blocks, all tags
are automatically sorted by their data type. The sorting ensures that data gaps
between the tags are minimized and that the tags are stored access-optimized for
the processor.
Non-optimized blocks only exist for reasons of compatibility in S7-1200/1500.
Advantages
2.6.1
The access is always as fast as possible, since the file storage is optimized by
the system and is independent of the declaration.
Declaration changes do not lead to access errors since, for example, HMI
accesses are performed symbolically.
No settings in the instance data block are necessary. Everything is set in the
assigned FB (e.g. retentivity).
Memory reserves in the data block make it possible to change the actual
values without any loss (see chapter 3.2.7 Downloading without reinitialization)
Standard block
Bits
Standard
0
0
Optimized
B1
X2
X3
3
4
W1
B
y
t
e
s
W2
B1
W1
5
6
X1
B
y
t
e
s
Optimized block
Bits
X1
X2
X3
X4
X3
7
8
W2
Properties
No data gaps are formed since larger tags are located at the beginning of the
block and smaller ones at the end.
13
2 S7-1200/1500 Innovations
2.6 Optimized blocks
2.6.2
Standard block
Bits
Standard
0
0
Optimized
W1
B1
X2
B
y
t
e
s
X3
3
4
W1
5
6
X1
B
y
t
e
s
Optimized block
Bits
W2
B1
X1
X2
X4
X3
X4
8
W2
Reserve
Optimized
0
16
DW
W
B B B B X X X
Reserve
32
B
y
t
e
s
48
64
80
96
DW
102
128
B X X
DW
DW
Reserve
144
1. Structures are stored separately and can thus be copied as one block.
2. Retentive data are stored in a separate area and can be copied as one block.
In the event of a power failure, these data are stored CPU-internally. "MRES"
resets these data to the start values stored in the load memory.
Properties
No data gaps are formed since larger tags are located at the beginning of the
block and smaller ones at the end.
Fast access due the best possible storage in the processor (All tags are stored
in a way so that the processor of the S7-1500 can directly read or write all tags
with just one machine command).
Boolean tags are stored as byte for faster access. The controller therefore
does not have to mask the access.
14
2 S7-1200/1500 Innovations
2.6 Optimized blocks
2.6.3
Bits
Standard
Conversion for
processor access:
Big Little Endian
1
Copyright Siemens AG 2015 All rights reserved
BYTE
B
y
t
e
s
Optimized block
max. 16MB
REAL
Big-Endian
7
8
Standard block
max. 64kB
Bits
Optimized
3
2
B
y
t
e
s
REAL
0 Little-Endian
1
WORD
0 Little-Endian
BYTE
X
X
WORD
Big-Endian
Reserve
Optimized block
1.
2.
3.
15
2 S7-1200/1500 Innovations
2.6 Optimized blocks
Recommendation
The optimized block accesses for all newly created blocks for S7-1200/1500 is
enabled by default. Block access can be set for OBs, FBs and global DBs. For
instance DBs, the setting depends on the respective FB.
The block access is not reset automatically when a block is migrated from a
S7-300/400 controller to a S7-1200/1500. You can change the block access later
on to optimized block access. You need to recompile the program after changing
the block access. If you change the FBs to optimized block access, the assigned
instance data blocks are automatically updated.
Follow the instructions below, in order to set the optimized block access.
Table 2-4: Setting optimized block access
Step
Instruction
1.
2.
16
2 S7-1200/1500 Innovations
2.6 Optimized blocks
Step
3.
Instruction
This is where you see all blocks in the program and whether they are optimized
or not. In this overview the Optimized block access status can be conveniently
changed.
In the two following figures the differences between an optimized and a nonoptimized instance DB can be seen.
For a global DB there are the same differences.
Figure 2-9: Optimized data block (without offset)
17
2 S7-1200/1500 Innovations
2.6 Optimized blocks
The retentivity of tags of a global DB is defined directly in the global DB. The
default setting is non-retentive.
The retentivity of tags of one instance is defined in the function block (not in the
instance DB).These settings then apply to all instances of this FB.
Access type
Optimized block
Non-optimized
block
Symbolic
Indexed (fields)
Slice accesses
AT instruction
Direct absolute
(Alternatively: VARIANT /
ARRAY with index)
Downloading without
reinitialization
Note
2.6.4
18
2 S7-1200/1500 Innovations
2.6 Optimized blocks
2.6.5
NOTE
Recommendation:
Always set the same access type for both blocks that communicate with each
other.
19
2 S7-1200/1500 Innovations
2.6 Optimized blocks
2.6.6
Compatible
data transfer
(byte stream)
Send CPU
0A
B1
32
39
4F
6D 7A
Receive CPU
FF
Example
In the send CPU, the tag is interconnected as actual parameter with the
communication block (TSEND_C).
In the receive CPU, the receive data are assigned to a tag of the same type.
Note
Any tags or data blocks (derived from PLC data types) can be used as data
records.
Note
It is also possible that the send and receive data are not defined identically:
Send data
Receive data
optimized
-->
not optimized
not optimized
-->
optimized
The controller automatically provides for correct data transmission and storage.
20
2 S7-1200/1500 Innovations
2.7 Block properties
2.7
Block properties
2.7.1
Block sizes
For S7-1200/1500 controllers the maximum size of blocks was significantly
increased in the main memory.
Table 2-7: Block sizes
Max. size and number
(regardless of the main memory
size)
DB
FC/FB
FC / FB / DB
S7 -300/400
S7-1200
S7-1500
Max. size
64 kB
64 kB
64 kB (non-optimized)
10 MB (optimized
CPU1518)
Max. number
16.000
65.535
65.535
Max. size
64 kB
64 kB
512 kB
3 MB (optimized
CPU1518)
Max. number
7.999
65.535
65.535
Max. number
4.096 (CPU319)
6.000 (CPU412)
1.024
10.000 (CPU1518)
Recommendation
2.7.2
Use the DBs for S7-1500 controllers as data container of very large data
volumes.
S7-1200
S7-1500
Benefit
100
100
Modularization of the
user program
Hardware interrupt
50
50
Separator OB possible
for each event
20
Modularization of the
user program
20
Modularization of the
user program
20
Modularization of the
user program
21
2 S7-1200/1500 Innovations
2.8 New data types for S7-1200/1500
2.8
Note
2.8.1
Size
Value range
USint
8 bit
0 .. 255
SInt
8 bit
-128 .. 127
UInt
16 bit
0 .. 65535
UDInt
32 bit
0 .. 4.3 million
ULInt*
64 bit
LInt*
64 bit
LWord
64 bit
18
Size
Value range
Real
-3.40e+38 .. 3.40e+38
Note
-1.79e+308 .. 1.79e+308
The TIA Portal contains the global library Long Functions with a great scope of
instructions for long data types.
22
2 S7-1200/1500 Innovations
2.8 New data types for S7-1200/1500
Note
2.8.2
Month
Day
Weekday
Hour
Minute
Second
Nanosecond
DTL always reads the current system time. Access to the individual values is
through the symbolic names (e.g. My_Timestamp.Hour)
Advantages
Recommendation
Use the new DTL data type instead of LDT and address symbolically (e.g.
My_Timestamp.Hour).
Note
2.8.3
Size
Value range
LTime
64 bit
LT#-106751d23h47m16s854ms775us808ns
up to
LT#+106751d23h47m16s854ms775us807ns
LTIME_OF_DAY
64 bit
LTOD#00:00:00.000000000
up to
LTOD#23:59:59.999999999
23
2 S7-1200/1500 Innovations
2.8 New data types for S7-1200/1500
2.8.4
Size
WCHAR
2 bytes
(4 + 2*n) byte
Preset value:
0 ..254 characters
Max. value: 0 ..16382
WSTRING
Value range
WCHAR#a
WSTRING#Hello World!
Example
24
2 S7-1200/1500 Innovations
2.8 New data types for S7-1200/1500
2.8.5
Figure 2-12: VARIANT data type as input parameter for the TSEND_C instruction
VARIANT
Beinhaltet in dem Fall die berprfung
auf die Struktur TCON_IP_v4
Advantages
Due to the symbolic addressing of the variant tags, the code can be read
easier.
Properties
A comparison between ANY and Variant makes the properties apparent.
Table 2-14: Comparison ANY and Variant
ANY
Variant
25
2 S7-1200/1500 Innovations
2.8 New data types for S7-1200/1500
Recommendation
Only use the VARIANT data type for indirect addressing if the data types are
not determined until the program is running.
Check what you have used the ANY pointer for so far. In many cases, a pointer
is not required (see table below).
Only use the VARIANT data type for indirect addressing if the data types are
not determined until the program is running.
Using data type VARIANT as InOut formula parameter for creating generic
blocks which are independent of the data type of the actual parameters
(see example in this chapter).
Use the VARIANT data type instead of the ANY pointer. Due to the
integrated type test, errors are detected early on. Due to the symbolic
addressing, the program code can be easily interpreted.
Use the Variant instruction, for example, for type recognition (see following
example and Chapter 2.9.3 VARIANT instructions)
Use the indexed ARRAYs instead of ANY pointer to address ARRAY elements
(see chapter 3.6.2 ARRAY data type and indirect field accesses).
Processing of arrays
26
2 S7-1200/1500 Innovations
2.8 New data types for S7-1200/1500
Example
With data type VARIANT it is possible to recognize data types in the user program
and react accordingly. The following code of FC MoveVariant shows a possible
way of programming.
The InOut formal parameter InVar (data type VARIANT) is used to show a tag
independent of the data type.
The data type of the actual parameter is recognized with the Type_Of
instruction.
// Move Integer
// Move Real
#MoveVariant := WORD_TO_INT(#NO_CORRECT_DATA_TYPE);
// 80B4: Error code of MOVE_BLK_VARIANT: Data types do
not correspond
END_CASE;
NOTE
If you want to copy values of not structured VARIANT tags, you can also use
VariantGet instead of MOVE_BLK_VARIANT (see chapter
2.9.3 VARIANT instructions).
27
2 S7-1200/1500 Innovations
2.9 Instructions
2.9
Instructions
2.9.1
CALCULATE
With the CALCULATE instruction you can carry out mathematical calculations (e.g.
(IN1 + IN2) * IN3) that are independent from the data type. The mathematical
formula is programmed in the formula editor of the instruction.
Figure 2-14: CALCULATE instruction with formula editor
Note
For more information refer to the Online Help of the TIA Portal with the
CALCULATE instruction.
Advantages
Properties
Recommendation
28
2 S7-1200/1500 Innovations
2.9 Instructions
2.9.2
MOVE instructions
STEP 7 (TIA) provides the following MOVE instructions. The instruction
MOVE_BLK_VARIANT for S7-1200/1500 is new.
Table 2-16: Move instructions
Instruction
MOVE
Typical use
Copy value
Properties
Copy array
MOVE_BLK
Copy several
areas
UMOVE_BLK
Copy array
without
interruption
MOVE_BLK_VARIANT
Copy array
(S7-1500 and
S7-1200 from FW4.1)
Serialize
(S7-1500 and
S7-1200 from FW4.1)
Deserialize
(S7-1500 and
S7-1200 from FW4.1)
Copy structured
data into byte
array
Copy from a
byte array into
one/several
structure/s
29
2 S7-1200/1500 Innovations
2.9 Instructions
Figure 2-15: Serialize and deserialize (S7-1500 and S7-1200 from FW4.1)
Array[0..7] of Byte
Byte0
Byte1
.
.
.
Byte7
Serialize
Struct3
Struct2
Struct1
Int
Real
Uint
.
.
.
Deserialize
Recommendation
Note
Note
30
2 S7-1200/1500 Innovations
2.9 Instructions
2.9.3
Typical use
Properties
MOVE operations
VariantGet
Read value
VariantPut
Write value
Counting elements
TypeOf()
(only SCL)
TypeOfElements()
(only SCL)
VARIANT_TO_DB_ANY
(only SCL)
DB_ANY_TO_VARIANT
(only SCL)
List
CountOfElements
Compare operations
Conversion operations
Note
2.9.4
For more VARIANT instructions, please refer to the online help of the TIA Portal.
RUNTIME
Using the "RUNTIME" instruction you measure the runtime of the complete
program, single blocks or the command sequences. You can call this instruction in
SCL (S7-1200/S7-1500) and in STL (S7-1500).
Note
31
2 S7-1200/1500 Innovations
2.10 Symbolic and comments
2.10
2.10.1
Programming editor
Advantages
You can make the code easy to understand and readable for your colleagues with
the use of symbolic names and comments in your program.
The complete symbolic is saved together with the program code during the
download to the controller and allows fast maintenance of the plant when no offline
project is at hand.
Recommendation
Use the comments in the programs in order to improve readability. Network title
comments are visible even if networks are collapsed.
Design the program code in a way so that colleagues can understand the
program straight away.
In the following example you can see the extensive options for commenting the
program in the editors.
Example
In the following figure you can see the options for commenting in the LAD editor
(same functionality in FDB).
Figure 2-16: Commenting in the user program (LAD)
1
2
3
32
2 S7-1200/1500 Innovations
2.10 Symbolic and comments
In the programming languages SCL and STL, it can be commented with // in every
row.
Example
Filling level := Radius * Radius * PI * height;
// calculation of the filling level for medium tank
Note
2.10.2
Advantages
For better structuring it is possible to create comment lines in the watch table.
Recommendation
Example
Figure 2-17: Watch table with comment lines
33
2 S7-1200/1500 Innovations
2.11 System constants
2.11
System constants
For S7-300/400 controllers the identification of hardware and software components
is performed by logic address or diagnostic addresses.
For S7-1200/1500 the identification is by system constants. All hardware and
software components (e.g. interfaces, modules, OBs, ...) of the S7-1200/1500
controllers have their own system constants. The system constants are
automatically created during the setup of the device configuration for the central
and distributed I/O.
Advantages
Recommendation
Example
In the following example you can see how system constants are used in the user
program.
Figure 2-18: System constants in the user program
34
2 S7-1200/1500 Innovations
Open the Device configuration to quickly find the system constant for each
device.
Note
2.12
User constants
Using user constants, constant values can be saved. Generally, there are local
constants for OBs, FCs and FBs and global constants for the entire user program
in a controller.
Advantages
User constants can be used for changing constant values globally or locally for
all usage locations.
The user program only enables read access to the user constants.
For know-how protected blocks the user constants are not visible.
Properties
35
2 S7-1200/1500 Innovations
2.13 Internal reference ID for controller and HMI tags
Recommendation
Use the user constants for improved readability of the program and central
changeability of
error codes,
CASE instructions,
conversion factors,
Example
Note
2.13
36
2 S7-1200/1500 Innovations
2.13 Internal reference ID for controller and HMI tags
In the figure below the internal reference to the data is displayed schematically.
Figure 2-21: Internal reference ID for PLC and HMI
PLC_1
HMI_1
Access
mode
Connection
with PLC
Motor_1
I0.0
000123
009876
Motor_1
<symbolic
access>
PLC_1
Valve_2
Q0.3
000138
000578
Valve_2
<symbolic
access>
PLC_1
Note
name is changed.
type is changed.
tag is deleted.
Advantages
You can rewire tags without changing internal relations. The communication
between controller, HMI and drive also remains unchanged.
The length of the symbolic name does not have an influence on the
communication load between controller and HMI.
Properties
If you change addresses of PLC tags, you only have to reload the controller. It is
not necessary to reload the HMI devices, since internally, the system addresses
with the reference IDs (see Figure 2-22: Changing address or adding row).
Figure 2-22: Changing address or adding row
PLC Tags
Motor_1
%I0.0
Changing address
&
PLC
Motor_1
%I2.0
DB Elements
Adding row
&
PLC
37
2 S7-1200/1500 Innovations
2.14 STOP mode in the event of errors
2.14
Advantages
There are only three fault situations that put the S7-1200/1500 controllers into the
STOP mode. This makes the programming of the error management clearer and
easier.
Properties
Table 2-18: Responses to errors of S7-1200/1500
Error
S7-1200
S7-1500
1.
RUN
2.
STOP
STOP
3.
Programming errors
RUN
Error OBs:
OB80 Time error interrupt is called by the operating system when the
maximum cycle time of the controller is exceeded.
Note
38
3 General Programming
3.1 Operating system and user program
General Programming
3.1
The operating system organizes all functions and sequences of the controller
that are not connected with a specific control task (e.g. handling of restart,
updating of process image, calling the user program, error handling, memory
management, etc.). The operating system is an integral part of the controller.
The user program includes all blocks that are required for the processing of
your specific automation task. The user program is programmed with program
blocks and loaded onto the controller.
User
program
FB
FC
Local
Hardware
Operating
system
OB
Main
cyclic
call
FC
FC
Global
For SIMATIC controllers the user program is always executed cyclically. The
Main cycle OB already exists in the Program blocks folder after a controller was
created in STEP 7. The block is processed by the controller and recalled in an
infinite loop.
3.2
Program blocks
In STEP 7 (TIA Portal) there are all familiar block types from the previous STEP 7
versions:
Organization blocks
Function blocks
Functions
Data blocks
Experienced STEP 7 users will know their way around straight away and new
users can very easily get familiar with the programming.
Advantages
You can give your program a good and clear structure with the different block
types.
Due to a good and structured program you get many function units that can be
multiply reused within a project and also in other projects. These function units
then usually only differ by a different configuration (see chapter
3.2.8 Reusability of blocks).
You project or your plant becomes more transparent. Error states in a plant
can be more easily detected, analyzed and removed. The maintainability of
your plant becomes easier. This is also the case for errors in programming.
39
3 General Programming
3.2 Program blocks
Recommendation
Divide the entire function of your plant into individual areas and form subfunction units. Divide these sub function units again into smaller units and
functions. Divide until you get functions that you can use several times with
different parameters.
Specify the interfaces between the function units. Define the unique interfaces
for functionalities that are to be delivered by third party companies.
All organization blocks, function blocks and functions can be programmed with the
following languages:
Table 3-1: Programming languages
Programming language
3.2.1
S7-1200
S7-1500
Ladder (LAD)
Graph
OBs are the interface between the operating system and the user program. They
are called by the operating system and control, e.g. the following processes:
Error handling
40
3 General Programming
3.2 Program blocks
Properties
Several Main OBs can be created in a program. The OBs are processed
sequentially by OB number.
User program
Main_1
OB1
FB
FC
Main_y
OB200
FC
Main_x
OB300
FC
Local
FB
Local
FB
Local
Recommendation
Avoid the communication between the different Main OBs. They can then be
used independent from each other. If you nevertheless exchange data
between the individual main OBs, use the global DBs (see chapter 4.2 No bit
memory but global data blocks).
Divide all program parts that belong to each other into folders and store them
for reusability in the project or global library.
41
3 General Programming
3.2 Program blocks
Figure 3-4: Storing program parts in order in the project library
Note
42
3 General Programming
3.2 Program blocks
3.2.2
Functions (FC)
FCs are blocks without cyclic data storages. This is why the values of block
parameters cannot be saved until the next call and has to be provided with actual
parameters when called.
Properties
In order to permanently save the data of an FC, the functions of the global data
blocks are available.
Recommendation
Use the functions for continuously recurring applications that are called several
times in different locations of the user program.
43
3 General Programming
3.2 Program blocks
Example
In the following example a mathematical formula is programmed in a FC. The result
of the calculation is directly declared as return value and the function value can be
directly reused.
Table 3-2: Reusing function value
Step
4.
Instruction
Create an FC with the mathematical formula (circular segment) and define the
Return value as the result for the formula.
FC
5.
Note
Call the FC with the circular segment calculation in any block (SCL).
<Operand> := <FC name> (parameter list);
44
3 General Programming
3.2 Program blocks
3.2.3
FBs are blocks with cyclic data storage, in which values are permanently stored.
The cyclic data storage is realized in an instance DB.
Copyright Siemens AG 2015 All rights reserved
Properties
Recommendation
Use the function blocks in order to create subprograms and structure the user
program. A function block can also be called several times in different locations
of the user program. This makes programming of frequently recurring program
parts easier.
If function blocks are applied multiply in the user program, use separate
instances, preferably multi-instances.
45
3 General Programming
3.2 Program blocks
3.2.4
Instances
The call of a function block is called instance. The data with which the instance is
working is saved in an instance DB.
Instance DBs are always created according to the specifications in the FB interface
and can therefore not be changed in the instance DB.
Figure 3-8: Structure of the interfaces of an FB
Instance
Input
Output
InOut
Static
The instance DB consists of a permanent memory with the interfaces input, output,
InOut and static. In a volatile memory (L stack) temporary tags are stored. The
L stack is always only valid for the current process. I.e. temporary tags have to be
initialized in each cycle.
Properties
Instance DBs do not have to be created manually in the TIA Portal and are
created automatically when calling an FB.
Recommendation
Program it in a way so that the data of the instance DB can only be changed by
the appropriate FB. This is how you can guarantee that the block can be used
universally in all kinds of projects.
For further information, please refer to chapter 3.4 Block interfaces as data
exchange.
3.2.5
Multi-instances
With multi-instances called function blocks can store their data in the instance data
block of the called function block. I.e. if another function block is called in a function
block, it saves its data in the instance DB of the higher-level FBs. The functionality
of the called block is thus maintained even if it is transferred.
The following figure shows an FB that uses another FB (IEC Timer). All data is
saved in a multi instance DB. It is thus possible to create a block with an
independent time behavior, for example, a clock generator.
46
3 General Programming
3.2 Program blocks
Figure 3-9: Multi-instances
FB
Multi-instance DB
FB Parameter
Switch-on
delay call
FB Statics
TOF_TIME
Advantages
Reusability
Properties
Recommendation
Use multi-instances in order to
Example
If you require the time and counter function, use the IEC Timer blocks and the
IEC Counter blocks instead of the absolutely addressed SIMATIC Timer. If
possible, also always use multi-instances here. This keeps the number of blocks in
the user program low.
47
3 General Programming
3.2 Program blocks
Figure 3-10: Library of the IEC Timer
Note
3.2.6
Variable data is located in data blocks that are available to the entire user program.
48
3 General Programming
3.2 Program blocks
Figure 3-12: Global DB as central data memory
FC
OB
DB
FB
Local
Advantages
The structure of the global DBs can be arbitrarily made up of all data types.
Global DBs are either created via the program editor or according to a
previously created user-defined PLC data type" (see chapter 0
Properties
Recommendation
Note
Use the global DBs when data is used in different program parts or blocks.
3.2.7
49
3 General Programming
3.2 Program blocks
Figure 3-13: Downloading without reinitialization
Block
in project
Block in
the controller
Name
Value
Tag1
3.4
Tag2
451
Tag2
Tag3
23
Tag3
Block in
the controller
Name
Name
Tag1
Tag1
3.4
Tag2
451
Tag3
23
Tag4
Tag4
Tag5
Tag5
Value
2
Execute the following steps whilst the controller is in RUN mode.
1. Enable Downloading without reinitialization
2. Insert new defined tags in existing block
Reloading of new defined tags without interrupting the running process. The
controller stays in RUN mode.
New defined tags will be initialized. The remaining tags keep their current
values.
The memory reserve depends on the work memory of the controller; however it
is max. 2 MB.
Properties
Recommendation
50
3 General Programming
3.2 Program blocks
Example: Setting memory reserve in block
The following table describes how you can set the memory reserve for the
downloading without reinitializing.
Table 3-3: Setting memory reserve
Step
1.
Instruction
Right-click any optimized block in the project navigator and select Properties.
2.
2
1
3
1.
2.
3.
Note
You can also set a default value for the size of the memory reserve for new
blocks in the TIA portal.
In the menu bar, navigate to "Options Settings" and then to "PLC programming
General Download without reinitialization.
51
3 General Programming
3.2 Program blocks
Example: Downloading without reinitialization
In the following example it is displayed how to download without reinitialization.
Table 3-4 Downloading without reinitialization
Step
Note
Instruction
1.
2.
3.
Click the Download without reinitialization button and confirm the dialog with
OK
4.
5.
6.
Result:
Further information can be found in the online help of the TIA Portal under
Loading block extensions without reinitialization.
You will find further information in the following entry:
What options does the S7-1500 provide for downloading data in RUN?
https://support.industry.siemens.com/cs/ww/en/view/68015630
52
3 General Programming
3.2 Program blocks
3.2.8
Reusability of blocks
The block concept offers you a number of options to program in a structured and
effective way.
Advantages
Recommendation
If you want to reuse the block, please note the following recommendations:
Always execute a data exchange between the blocks via its interfaces and not
via its instances (see chapter 3.4.1 Block interfaces as data exchange).
Do not use project-specific data and avoid the following block contents:
Access to tags
53
3 General Programming
3.2 Program blocks
3.2.9
Advantages
Recommendation
54
3 General Programming
3.3 Block interface types
3.3
3.3.1
My_int
value: 31
Properties
3.3.2
FC / FB
IN
value: 31
IN
Each block displays the same behavior with connected parameters
Wert: '2'
"My_string"
value: 'test'
FC / FB
IN/OUT
Reference to "My_string"
Properties
Recommendation
Generally use the InOut interface type for structured tags (e.g. of the ARRAY,
STRUCT, STRING, type) in order to avoid enlarging the required data
memory unnecessarily.
55
3 General Programming
3.4 Storage concept
3.3.3
FB
Note
Elementary data
type
Structured data
type
Input
copy
reference
Output
copy
reference
InOut
copy
reference
Input
copy
copy
Output
copy
copy
InOut
copy
reference
If, when calling the block, optimized data is transferred to a block with property
standard access, this data is principally transferred as a copy. If the block
contains many structured parameters, this may quickly cause the temporary
memory area (local data stack) of the block to overflow.
This can be prevented by creating the same access type for both blocks (see
chapter 2.6.5 Parameter transfer between blocks with optimized access and
standard access).
3.4
Storage concept
For STEP 7 there is generally the difference between the global and local memory
area. The global memory area is available for each block in the user program. The
local memory area is only available within the respective block.
3.4.1
Advantages
Program can be made up modularly from ready blocks with partial tasks.
Program code is easier to read since there are no hidden cross accesses.
Recommendation
If possible, only use the local tags. This is how the blocks can be used
universally and modularly.
Use the data exchange via the block interfaces (In, Out, InOut), to ensure the
reusability of blocks.
Only use the instance data blocks as local memory for the respective function
block. Other blocks shall not be written into instance data blocks.
56
3 General Programming
3.4 Storage concept
Figure 3-19: Avoiding accesses to instance data blocks
FB
Local
OB
FC
FB
Local
If only the block interfaces are used for the data exchange it can be ensured that
all blocks can be used independent from each other.
Figure 3-20: Block interfaces for data exchange
OB
FC
FB
Local
FB
Local
3.4.2
Global memory
Memories are called global when they can be accessed from any location of the
user program. There are hardware-dependent memories (e.g. bit memory, timers,
counters, etc.) and global DBs. For hardware-dependent memory areas there is the
danger that the program may not be portable to any controller because the areas
there may already be used. This is why you should use global DBs instead of
hardware-dependent memory areas.
Advantages
User programs can be used universally and independent from the hardware.
The user program can be structured modularly without dividing bit memory
address areas for different users.
Optimized global DBs are clearly more powerful than the bit memory address
area that is not optimized for reasons of compatibility.
Recommendation
Do not use any bit memory and use global DBs instead.
57
3 General Programming
3.4 Storage concept
Figure 3-21: IEC Timers
3.4.3
Local memory
Static tags
Temporary tags
Recommendation
Note
Use the static tags for values that are required for the next cycle.
Use the temporary tags as cache memory in current cycle. The access time for
temporary tags is shorter than for static ones.
Optimized blocks: Temporary tags are initialized in any block call with the
default value (S7-1500 und S7-1200 Firmware V4).
Non-optimized blocks: Temporary tags are undefined for each call of the block.
58
3 General Programming
3.4 Storage concept
3.4.4
Access speed
Non-structured
elementary data type FC
parameter
fast
1
intermediate
Retentive tags
slow
Non-retain tags
1
Temporary tags
1
4
5
5
5
6
Copying between optimized
and non-optimized blocks
3
2
Access to optimized DBs
Access to non-optimized
blocks
Retentive FB tags
59
3 General Programming
3.5 Retentivity
3.5
Retentivity
In the event of a failure of the power supply, the controller copies the retentive data
with its buffer energy from the controllers work memory to a non-volatile memory.
After restarting the controller, the program processing is resumed with the retentive
data. Depending on the controller, the data volume for retentivity has different
sizes.
Table 3-6: Retentive memory for S7-1200/1500
Usable retentive memory for bit memory,
times, counters, DBs and technology
objects
Controller
CPU 1211C,1212C, 1214C, 1215C, 1217C
10 Kbytes
CPU 1511-1 PN
88 Kbytes
CPU 1513-1 PN
88 Kbytes
472 Kbytes
768 Kbytes
S7-1500
Retentivity can be set for bit memory, times
and counters
Advantages
Retentive data maintain their value when the controller goes to STOP and back
to RUN or in the event of a power failure and a restart of the controller.
Properties
For elementary tags of an optimized DB the retentivity can be set separately. Nonoptimized data blocks can only be defined completely retentive or non-retentive.
The retentive data can be deleted with the actions "memory reset" or "Reset to
factory settings" via:
Recommendation
Avoid the setting Set in IDB. Always set the retentive data in the function
block and not in the instance data block.
The Set in IDB setting increases the processing time of the program
sequence. Always either select Non-retain or Retain for the interfaces in the
FB.
60
3 General Programming
3.5 Retentivity
Figure 3-23: Program editor (Functions block interfaces)
61
3 General Programming
3.6 Symbolic addressing
Figure 3-26: Retentive counter as multi-instance
Note
If the retentive memory on the PLC is not sufficient, it is possible to store data in
the form of data blocks that are only located in the load memory of the PLC. The
following entry is described by taking the example of an S7-1200. This
programming also works for S7-1500.
You will find further information in the following entry:
In STEP 7 (TIA Portal), how do you configure data blocks with the "Only store in
load memory" attribute for an S7-1200?
https://support.industry.siemens.com/cs/ww/en/view/53034113
3.6
Symbolic addressing
3.6.1
Advantages
Automatic update of tag names at all usage locations in the user program
Memory storage of the program data does not have to be manually managed
(absolute addressing)
Fewer program errors due to type checking (validity of data types is checked
for all accesses)
62
3 General Programming
3.6 Symbolic addressing
Recommendation
Think symbolically. Enter the descriptive name for each function, tag or
data, such as, for example, Pump_boiler_1, heater_room_4, etc. This is how a
generated program can easily be read without requiring many comments.
Give all the tags used a direct symbolic name and define it afterwards with a
right-click.
Example
Table 3-8: Example for creating symbolic tags
Step
Instruction
1.
2.
3.
Right-click next to the block and select Define tag in the context menu.
63
3 General Programming
3.6 Symbolic addressing
Step
4.
Instruction
Define the tag.
There is an elegant method to save time, if you want to define several tags in a
network. Assign all tag names first of all. Then define all tags at the same time with
the dialog of step 4.
Note
3.6.2
You can indirectly access individual elements in the ARRAY with a runtime tag
(array [index]).
64
3 General Programming
3.6 Symbolic addressing
Figure 3-28: Indirect field access
LAD / FBD:
SCL:
Advantages
Simple access since the data type of the ARRAY elements is irrelevant for the
access.
Data structure made of fixed number of elements of the same data type
Possible indirect access with runtime tag with dynamic index calculation at
runtime
Properties
Recommendation
Use ARRAY for indexed accesses instead of pointer (e.g. ANY pointer). This
makes it easier to read the program since an ARRAY is more meaningful with
a symbolic name than a pointer in a memory area.
As run tag use the DINT data type as temporary tag for highest performance.
Use the MOVE_BLK instruction to copy parts of an ARRAY into another one.
Use the GET_ERR_ID instruction to catch access errors within the Array.
65
3 General Programming
3.6 Symbolic addressing
Note
3.6.3
In comparison to structures, PLC data types are defined across the controller in the
TIA Portal and can be centrally changed. All usage locations are automatically
updated.
PLC data types are declared in the PLC data types folder in the project navigation
before being used.
Figure 3-30: PLC data types
66
3 General Programming
3.6 Symbolic addressing
Advantages
PLC data types always end at WORD limits (see the figures below).
Properties
using different I/O areas (see chapter 3.6.4 Access to I/O areas with PLC
data types).
Elements
VarByte_0
1st WORD
Defined size
3 bytes
MyType
VarByte_1
VarByte_2
2nd WORD
Actual size
4 bytes
I/O area
3 bytes
Tag of
PLC data type
Defined size
3 bytes
Actual size
4 bytes
67
3 General Programming
3.6 Symbolic addressing
Recommendation
Note
Use the PLC data types to summarize several associated data, such as, e.g.
frames or motor data (setpoint, speed, rotational direction, temperature, etc.)
Always use PLC data types instead of structures for the multiple uses in the
user program.
Use the PLC data types for structuring into data blocks.
Use the PLC data types in order to specify a structure for a data block. The
PLC data type can be used for any number of DBs. You can easily and
conveniently create as many DBs of the same structure and adjust them
centrally on the PLC data type.
68
3 General Programming
3.6 Symbolic addressing
3.6.4
PLC tag
FB call
FB interface
Copyright Siemens AG 2015 All rights reserved
3
4
Recommendation
Note
Use PLC data types for access to I/O areas, for example, to symbolically
receive and send drive telegrams.
Individual elements of a PLC data type of a tag can also be directly accessed in
the user program:
69
3 General Programming
3.6 Symbolic addressing
3.6.5
Slice access
For S7-1200/1500 controllers, you can access the memory area of tags of the Byte,
Word, DWord or LWord data type. The division of a memory area (e.g. byte or
word) into a smaller memory area (e.g. Bool) is also called slice. In the figure below
displays the symbolic bit, byte and word accesses to the operands.
Figure 3-34: Slice access
My_B_Variable BYTE
Operands in
blocks, DBs and
E/A/M
My_W_Variable
DWORD
My_DW_Variable
My_LW_Variable
Examples
Slice access: My_LW_Variable.%D1
LWORD
My_DW_Variable.%W1
My_W_Variable.%X0
X
63
B7
B1
W3
W1
D1
WORD
W0
D0
X X X
2 1 0
Bit by bit
B0
Bit by bit
Word by word
DWord by
DWord
Advantages
Recommendation
Note
Use the slice access rather than AT construct via accessing certain data areas
in operands.
70
3 General Programming
3.7 Libraries
3.7
Libraries
With the TIA Portal you can create independent libraries from different project
elements that can be easily reused.
Advantages
Recommendations
Note
Versioning of blocks
Use the global library for the exchange with other users or as central storage
for the simultaneous use of several users.
71
3 General Programming
3.7 Libraries
3.7.1
"Project library"
"Global library".
"Types"
"Master Copies"
4
2
Independent library
(4) "Types"
Types are connected with your usage locations in the project. When types
are changed, the usage locations in the project can be updated
automatically.
72
3 General Programming
3.7 Libraries
3.7.2
Supported types are controller blocks (FCs, FBs), PLC data types, HMI
images, HMI faceplates, HMI UDT, scripts).
Type concept
The type concept allows the creation of standardized automation functions that you
can use in several plants or machines. The type concept supports you with
versioning and updating functions.
You can use types from the library in the user program. This offers the following
advantages:
Advantages
If a type is deleted, all usage locations in the user program are deleted.
Properties
By using types you can make the changes centrally and update them in the
complete project.
Figure 3-36: Typifying with user libraries
Project
User library
Use
without
typification
Master copy
Use
Use
Use V2
Central update to
newer version
Update
Typ V1
Use V2
with typification
Typ V2
Use V2
73
3 General Programming
3.7 Libraries
3.7.3
HMI
3.7.4
Versioning of a block
Instruction
1.
Create a new PLC data type with Add new data type and create some tags.
Later on this is the subordinate type.
2.
Create a new function block with Add new Block. This is the higher-level type.
74
3 General Programming
3.7 Libraries
Step
Instruction
Define an input tag of the data type you have created. The PLC data type is
therefore subordinate to the function block.
4.
Drag the function block via drag & drop into the Types folder in the project
library.
5.
Optionally assign: Type name, version, author and comment and confirm the
dialog with OK.
6.
The subordinate PLC data type is automatically also stored in the library.
3.
75
3 General Programming
3.7 Libraries
Example: Changing a type
Table 3-11: Changing a type
Step
Instruction
1.
Right-click the block in the Project library and select Edit type
2.
Select which controller is to be used as test environment and confirm the dialog
with OK.
If several controllers in the project use the selected block, a controller has to be
selected as test environment.
76
3 General Programming
3.7 Libraries
Step
Instruction
3.
The library view opens. A new version of the block has been created and is now
marked with in test.
4.
In this place you have the option to test the change on the block by loading the
project onto a controller. When you have finished testing the block, continue with
the following steps.
5.
77
3 General Programming
3.7 Libraries
Step
6.
Instruction
A dialog box opens. Here you can store a version-related comment. Confirm the
dialog with OK.
If there are several usage locations of the block in different controllers of the
project, you can update them all at the same time: Update instances in the
project.
If older versions of the element are no longer required you can delete them by
clicking Delete unused type versions from library
7.
78
3 General Programming
3.8 Increasing performance with process interrupts
3.8
Event
e.g. falling
edge E6.1
e.g. rising
edge E0.0
Hardware
interrupt
OB40
Hardware
interrupt_1
OBxxx
In the following figure you can see the configuration of a hardware interrupt in the
hardware configuration of a digital input module.
Figure 3-38: Configuring hardware interrupt
Advantages
79
3 General Programming
3.8 Increasing performance with process interrupts
Recommendation
If the system responses are not fast enough despite programming a process
interrupt, you can still accelerate the responses. Set as small an Input delay
as possible in the module. A response to an event can always only occur if the
input delay has lapsed. The input delay is used for filtering the input signal in
order to, for example, compensate faults such as contact bounce or chatter.
80
3 General Programming
3.9 Additional performance recommendations
3.9
Recommendation
Note the following recommendations for programming S7-1200/1500 controllers in
order to achieve a high performance:
Note
LAD/FBD: Disable generate ENO for blocks. This avoids tests at runtime.
STL: Do not use registers since address and data registers are only emulated
for compatibility reasons by S7-1500.
81
3 General Programming
3.10 SCL programming language: Tips and tricks
3.10
3.10.1
Example
Table 3-12: Easy expanding of the call template
Step
Instruction
1.
Drag an instruction from the library into the SCL program. The editor shows the
complete call template.
2.
Now fill in the required parameter and finish the entry with the Return button.
3.
4.
If you want to edit the complete call later on again, proceed as follows.
Click into the call at any place and then click CTRL+SHIFT+SPACE. You are
now in the Call Template mode. The editor expands the call again. You can
navigate with the TAB button through the parameters.
5.
82
3 General Programming
3.10 SCL programming language: Tips and tricks
3.10.2
3.10.3
1.
Instruction
Drag the tag via drag & drop to the tag in the program that is to be replaced.
Hold the tag for more than 1 second before releasing it.
83
3 General Programming
3.10 SCL programming language: Tips and tricks
3.10.4
Using the EXIT command, the loop can be interrupted at any time.
Recommendation
Use WHILE or REPEAT loops if a runtime tag needs to be adjusted during loop
editing.
84
3 General Programming
3.10 SCL programming language: Tips and tricks
3.10.5
Example
CASE #myVar OF
5:
FC5(#myParam);
10,12:
FC10(#myParam);
15:
FC15(#myParam);
0..20:
FCGlobal(#myParam);
Note
3.10.6
CASE instructions also work with CHAR, STRING data types, as well as with
elements (see example in Chapter 2.8.5 VARIANT data type ).
Advantages
The compiler can optimize the program better, since it does not know the
number of iterations.
Example
FOR #var := #lower TO #upper DO
#var := #var + 1; // no effect, Compiler -> Warning
END_FOR;
85
3 General Programming
3.10 SCL programming language: Tips and tricks
3.10.7
Example
FOR #var := #upper TO #lower BY -2 DO
END_FOR;
If you are defining BY as -2, as in the example, the counter is lowered by 2 in
every iteration. If you omit BY, the default setting for BY is 1
3.10.8
If you prefer to work with the keyboard, there is a simple possibility to create
instances for blocks in SCL.
Example
Table 3-14: Easy creation of instances
Step
3.10.9
Instruction
1.
Give the block name a: followed by a "." (dot). The automatic compilation now
shows you the following.
2.
On the top you can see the already existing instances. In addition, you can
directly create a new single instance or multi-instance.
Use the shortcuts "s" or "m" to go directly to the respective entries in the
automatic compilation window.
Example
timeDifference := timeStamp1 timeStamp2;
86
3 General Programming
3.10 SCL programming language: Tips and tricks
The following table summarizes the overloaded operators and which operation is
behind it:
Operation
ltime + time
T_ADD LTime
ltime + time
T_SUB LTime
ltime + lint
T_ADD LTime
ltime + lint
T_SUB LTime
time + time
T_ADD Time
time + time
T_SUB Time
time + dint
T_ADD Time
time + dint
T_SUB Time
ldt + ltime
ldt + ltime
ldt + time
ldt + time
dtl + ltime
dtl + ltime
dtl + time
dtl + time
ltod + ltime
ltod + ltime
ltod + lint
ltod + lint
ltod + time
ltod + time
tod + time
tod + time
tod + dint
tod + dint
dt + time
T_ADD DT / Time
dt + time
T_SUB DT / Time
ldt ldt
T_DIFF LDT
dtl dtl
T_DIFF DTL
dt dt
T_DIFF DT
date date
T_DIFF DATE
ltod ltod
T_DIFF LTOD
date + ltod
date + tod
87
4 Hardware-Independent Programming
4.1 Data types of S7-300/400 and S7-1200/1500
Hardware-Independent Programming
To make sure that a block can be used on all controllers without any further
adjustments, it is important not use hardware-dependent functions and properties.
4.1
Recommendation
Only use the data types that are supported by the controllers on which the
program is to run.
S7 300/400
S7-1200
S7-1500
BOOL
BYTE
WORD
DWORD
LWORD
Character type
CHAR (8 bit)
Numerical data
types
SINT (8 bit)
USINT (8 bit)
UINT (16 bit)
UDINT (32 bit)
LREAL (64 bit)
TIME
DATE
TIME_OF_DAY
S5TIME
LTIME
L_TIME_OF_DAY
Time types
88
4 Hardware-Independent Programming
4.1 Data types of S7-300/400 and S7-1200/1500
Table 4-2: Data groups that are made up of other data types
Description
S7 300/400
S7-1200
S7-1500
DT
(DATE_AND_TIME)
DTL
LDT
(L_DATE_AND_TIME)
Character type
STRING
Field
ARRAY
Structure
STRUCT
Time types
Table 4-3: Parameter types for formal parameters that are transferred between blocks
Description
Pointer
Blocks
S7 300/400
S7-1200
S7-1500
POINTER
ANY
VARIANT
TIMER
COUNTER
BLOCK_FB
BLOCK_FC
BLOCK_DB
BLOCK_SDB
VOID
2)
1)
2)
1)
89
4 Hardware-Independent Programming
4.2 No bit memory but global data blocks
4.2
Advantages
Optimized global DBs are clearly more powerful than the bit memory address
area that is not optimized for reasons of compatibility.
Recommendation
4.3
The handling with bit memory (also system and clock memory bits) is
problematic, since every controller has a bit memory address area with a
different size. Do not use bit memory for the programming but always global
data blocks. This is how the program can always be used universally.
Recommendation
For the programming of clock memory bits, the hardware configuration always has
to be correct.
Use a programmed block as clock generator. Below, you can find a programming
example for a clock generator in the SCL programming language.
Example
The programmed block has the following functions. A desired frequency is
specified. The Q output is a Boolean value that toggles in the desired frequency.
The Countdown output outputs the remaining time of the current state of Q.
If the desired frequency is smaller or equal 0.0, then the output Q = FALSE and
Countdown = 0.0.
FB
Q [Bool]
0.5
Period: 2 seconds
Frequency [Real]
Countdown [Time]
Note
TRUE
T#0S_703MS
90
5.1
Introduction
Fail-safe S7-1200F and S7-1500F CPUs are supported from TIA Portal V13 SP1
onward. In these controllers, standard as well as the fail-safe programming in a
device is possible. For programming the fail-safe user programs, the SIMATIC
STEP 7 Safety (TIA Portal) option package is used.
Figure 5-1: Standard and safety program
S7-1200F
S7-1500F
Standard user
program
Safety program
Advantages
Note
Fail-safe does not mean that the program contains no errors. The programmer is
responsible for the correct programming logic.
Fail-safe means that the correct processing of the fail-safe user program in the
controller is ensured.
Note
91
5.2
Terms
This document consistently uses the terms with the following meaning.
Table 5-1: Safety terms
Term
Description
The standard user program is the program part,
which is not connected with F programming.
Safety program
(F program,
fail-safe user program)
92
5.3
1.
2.
User-created F blocks
3.
4.
5.
Compiler blocks
System-generated verification blocks
These run in the background of
the controller and provide for failsafe processing of the safety
program.
These blocks cannot be
processed by the user.
Screen
2
3
4
5
93
5.4
F runtime group
A safety program is always processed in an F-runtime group with defined cycle. An
F run-time group consists of a Fail-safe organization block which calls a
Main safety block. All user-generated safety functions are called from the
Main safety block.
Advantages
Properties
5.5
F signature
Each F component (station, I/O, blocks) has a unique F signature. Using the
F signature it can be quickly detected whether an F device configuration, F blocks
or a complete station still corresponds to the original configuration or programming.
Advantages
Properties
F block signature is only changed when the logic in the F block changes.
94
block number,
block interface,
block version.
Example
Figure 5-3: Examples of F signatures
Note
95
5.6
ET 200MP / ET 200SP
(PROFIsafe address type 2)
Advantages
Note
The PROFIsafe address of all F modules can be assigned at the same time
within an ET 200SP.
5.7
Evaluation of F-I/O
All of the current states of the respective F-I/O are saved in the F-I/O blocks. In the
safety program the states can be evaluated and processed. The following
differences exist between S7-1200/1500F and S7-300F/400F.
Table 5-4: Tags in the F-I/O DB with S7-300F/400F and S7-1500F
Tag in F-I/O DB
or value status in PAE
F-I/O with
S7-300/400F
F-I/O with
S7-1200/1500F
ACK_NEC
QBAD
PASS_OUT
QBAD_I_xx *
QBAD_O_xx *
Value status
96
5.8
Table 5-5: Differences between Q_BAD (S7-300F/400F) and value status (S7-1200/1500F)
Scenario
QBAD (S7-300F/400F)
Value status
(S7-1200/1500F)
FALSE
TRUE
TRUE
FALSE
TRUE
FALSE
FALSE
TRUE
Properties
The value status is entered into the process image of the inputs and outputs.
Channel value and value status of an F-I/O must only be accessed from the
same F run-time group.
Recommendation
For improved readability you assign the ending _VS, e.g. Tag_In_1_VS as
the symbolic name for the value status.
Example
Position of the value status bits in the process image using the example of an F-DI
8x24VDC HF module.
Table 5-6: Value status bits in the process image using the example of an F-DI 8x24VDC HF
Byte in
the FCPU
x+0
DI7
DI6
DI5
DI4
DI3
DI2
DI1
DI0
x +1
Value
status
for DI7
Value
status
for DI6
Value
status
for DI5
Value
status
for DI4
Value
status
for DI3
Value
status
for DI2
Value
status
for DI1
Value
status
for DI0
97
More information about the value status of all ET 200SP modules is available at:
Failsafe CPUs - Manuals
https://support.industry.siemens.com/cs/ww/en/ps/13719/man
Failsafe I/O modules - Manuals
https://support.industry.siemens.com/cs/ww/en/ps/14059/man
5.9
Data types
There is an unrestricted scope of data types for the safety programs of the
S7-1200/1500F.
5.10
Type
Size
Value range
BOOL
1 bit
0 .. 1
INT
16 Bit
-32.768 .. 32.767
WORD
16 Bit
-32.768 .. 65.535
DINT
32 bit
TIME
32 bit
T#-24d20h31m23s648ms to
T#+24d20h31m23s647ms
Advantages
F-PLC data types are declared and used in the same way as PLC data types.
F-PLC data types can use all data types which are allowed in the safety
program.
Nesting of F-PLC data types within other F-PLC data types is not supported.
In F-PLC data types, standard user programs can be used in the safety
program as well as in the standard user program.
Properties
98
For accessing I/O areas you use F-PLC data types (as in Chapter 3.6.4 Access
to I/O areas with PLC data types)
The structure of the tags of the F-conform PLC data type must match the
channel structure of the F-I/O.
An F-conform PLC data type for an F-I/O with 8 channels is, for example:
Example
Figure 5-4: Access to I/O areas with F-PLC data types
F-PLC Datentyp
F-Peripherie
PLC Variable
99
5.11
TRUE / FALSE
If you require TRUE and FALSE signals in the safety programs, there are two
possible cases:
as assignment to operations
Assignments to operations
If you require TRUE or FALSE signals at operations you can create them as in
the figure below.
The tags can be used as True and False-tag in the entire block.
100
5.12
Example
Figure 5-7: User and system-generated F-blocks
System created
F-blocks
User created
F-blocks
101
5.12.1
Recommendation
Use these blocks as little as possible.
5.12.2
Recommendation
5.12.3
Recommendation
Use standard DBs (see chapter 5.13 Data exchange between standard and Fprogram). Changes in the standard program then do not affect the safety program.
The controller does not need to be in STOP mode for loading the standard
program.
5.12.4
Use of multi-instances
If an instance DB is called at several locations in the safety program, this DB must
be processed more than once during a cycle. This processing requires a higher
scope of system-internal F blocks.
Recommendation
If possible, always use multi-instances. This may reduce the scope of the systeminternal F blocks.
5.12.5
102
5.13
Recommendations
No data exchange via flags (see chapter 4.2 No bit memory but global data
blocks
Concentrate the access between safety program and the standard user
program on two standard DBs.
Main
Safety program
FOB1
Data buffer
Standard
DataToSafety
MainSafety
InstMainSafety
DataFromSafety
103
5.14
F-I/O DBs
The trigger point needs to be set to permanent or once for cycle start or
cycle end.
Setting stop points in the standard user program will lead to errors in the safety
program:
Properties
If you still wish to use stop points for testing, you need to deactivate the safety
mode beforehand. This leads to the following errors:
104
5.15
5.16
In the "System blocks" folder you must not add, change or delete any blocks.
If the result of an instruction lies outside of the area permitted for the data type
(overflow). The cause of the diagnostic event is entered in the diagnostics
buffer of the F CPU.
There must not be any access to instance DBs of F-FBs which are not called in
the safety program.
If the Maximal cycle time of the F run-time group is exceeded, the F-CPU
goes to STOP. Select the maximal permitted time for "Maximum cycle time der
F run-time group" which can elapse between two calls of this F run-time group
(maximal 20,000 ms).
If the F run-time group, from whose DB for F-run-time groups tags shall be
read, is processed (main safety block of the F run-time group), the F-CPU goes
to STOP.
Editing the start values in instance DBs of F-FBs is not permitted online and
offline and can lead to STOP of the F-CPU.
The main safety block must not contain any parameters since they cannot be
supplied.
5.17
Always use one password for the safety program to prevent unauthorized
changes. The password is set in the Safety administration editor.
105
Symbolic programming
106
7 Related Literature
Related Literature
Table 7-1
Topic
Title
\1\
https://support.industry.siemens.com/cs/sta
rt?lc=en-DE
\2\
https://support.industry.siemens.com/cs/ww
/en/view/81318674
\3\
https://support.industry.siemens.com/cs/ww
/en/view/81318674
\4\
https://support.industry.siemens.com/cs/ww
/en/view/65601780
\5\
https://support.industry.siemens.com/cs/ww
/en/ps/14673/man
\6\
S7-1200 Manuals
https://support.industry.siemens.com/cs/ww
/en/ps/13683/man
\7\
https://support.industry.siemens.com/cs/ww
/de/ps/13716/man
\8\
https://support.industry.siemens.com/cs/ww
/en/ps/13888/man
\9\
https://support.industry.siemens.com/cs/ww
/de/view/39644875
\10\
https://support.industry.siemens.com/cs/ww
/de/view/78027451
\11\
http://support.automation.siemens.com/WW
/view/en/86630375
107
8 History
History
Table 8-1
Date
V1.0
09/2013
First version
V1.1
10/2013
V1.2
03/2014
New chapter:
2.6.4 Conversion between optimized and non-optimized tags
2.6.6 Communication with optimized data
2.9.2 MOVE instructions
2.9.3 VARIANT instructions
3.6.4 Access to I/O areas with PLC data types
Version
Modifications
09/2014
New chapter:
2.8.4 Unicode data types
2.10.2 Comment lines in watch table
2.12 User constants
3.2.9 Auto numbering of blocks
5 STEP 7 Safety in the TIA Portal
Extension of following chapter:
2.7 Block sizes
2.8 New data types for S7-1200/1500
2.9 Instructions
2.10 Symbolic and comments
3.6.3 STRUCT data type and PLC data types
3.7 Libraries
Several corrections in different chapter
108
8 History
Date
Modifications
1.4
11/2015
New chapter:
2.6.5 Parameter transfer between blocks with optimized access
and standard access
3.3.3 Overview for transfer of parameters
3.10.4 Correct application of FOR, REPEAT and WHILE loops
5.12 Optimizing compilation and program runtime
Version
109