Siemens s7-300 Programming

Download as pdf or txt
Download as pdf or txt
You are on page 1of 98
At a glance
Powered by AI
The document provides an overview of Siemens S7-300 PLC programming including the different instruction types, data types, and programming examples.

The main components of a Siemens S7-300 PLC include the rail, power supply, CPU, signal modules, function modules, communication processor, interface module, and programming cable.

The main steps involved in configuring and programming a PLC using STEP 7 include installation and authorization, planning the controller, hardware configuration, block programming, compiling and loading, commissioning, and documentation.

AUTOMATION TRAINING

of

SIEMENS
S7-300 PROGRAMMING

CONTENTS:

PAGE NO

1. STEP7 OVERVIEW

2. COMPARISON OF CPU's AND MODULES AVAILABLE

3. ADDRESSING OF MODULES

10

4. LOAD MEMORY AND WORK MEMORY

12

5. BLOCKS IN THE USER PROGRAM

14

6. DATA TYPES

15

7. STATEMENT LIST PROGRAMMING

17

8. BIT LOGIC INSTRUCTIONS

24

9. COMPARISON INSTRUCTIONS

28

10. CONVERSION INSTRUCTIONS

30

11. COUNTER INSTRUCTIONS

39

12. DATA BLOCK AND LOGIC CONTROL INSTRUCTIONS

46

13. LOAD AND TRANSFER INSTRUCTIONS

49

14. FLOATING POINT MATH INSTRUCTIONS

50

15. INTEGER MATH INSTRUCTIONS

52

16. PROGRAM CONTROL INSTRUCTIONS

55

17. SHIFT INSTRUCTIONS

57

18. TIMER INSTRUCTIONS

59

19. WORD LOGIC INSTRUCTIONS

72

20. ACCUMULATOR INSTRUCTIONS

74

21. PROGRAMMING EXAMPLES

76

22. GLOSSARY

87

SIMATIC S7
PAGE 2

PLC

RANGE

S7-400

HIGH END RANGE/MEDIUM RANGE

S7-300

MID AND LOW END PERFORMANCE


RANGE
MICRO PLC'S

S7-200
SIMATIC S7-300 COMPONENTS

S.No.

COMPONENT

FUNCTION

1.

Rail

Accomodates the S7-300 modules

2.

Power Supply (PS)

Converts the power system voltage (120/230VAC) into


24VDC for the S7-300 and load power supply for 24
VDC load circuits.

3.

CPU

Executes the user program, provides the 5V supply


For the S7-300 backplane bus, communicates with
other CPU's or with a programming device via the
MPI(Multi Point Interface).

4.

Signal Modules(SM)DI,DO,AI,AO

Match different process signal levels to the internal


signal level of S7-300

5.

Function Modules (FMs)

For time critical and memory intensive process signal


processing tasks eg. Closed loop control

6.

Communication Processor
(CP)

Relieves the CPU of communication tasks eg-CP 342-5


DP for connection to SINEC L2-DP.

7.

Interface Module(IM)

Interconnects the individual tiers of an S7-300

8.

Sinec L2 cable with LAN


connector

Interconnects CPUs and PCs

9.

Programmer Cable

Connects a CPU to a programming device

10.

RS 485 Repeater

Interfaces the S7-300 over large distances to other S7300s or programming devices

PAGE 3

Overview of STEP 7
What is STEP 7?
STEP 7 is the standard software package used for configuring and programming
SIMATIC programmable logic controllers. It is part of the SIMATIC industry software.
Basic Tasks
When you create an automation solution with STEP 7, there are a series of basic tasks. The following
figure shows the tasks that need to be performed for most projects and assigns them to a basic
procedure.

Alternative Procedures
As shown in the figure above, you have two alternative procedures:
PAGE 4

You can configure the hardware first and then program the blocks.
You can, however, program the blocks first without configuring the hardware. This is
recommended for service and maintenance work, for example, to integrate programmed
blocks into in an existing project.
Brief Description of the Individual Steps
Installation and authorization
The first time you use STEP 7, install it and transfer the authorization from diskette to the hard
disk
Plan your controller
Before you work with STEP 7, plan your automation solution from dividing the process into
individual tasks to creating a configuration diagram Design the program structure
Turn the tasks described in the draft of your controller design into a program structure using
the blocks available in STEP 7
Start STEP 7
You start STEP 7 from the Windows 95/98/NT user interface
Create a project structure
A project is like a folder in which all data are stored in a hierarchical structure and are
available to you at any time. After you have created a project, all other tasks are executed in
this project Configure a station
When you configure the station you specify the programmable controller you want to use; for
example, SIMATIC 300, SIMATIC 400
Configure hardware
When you configure the hardware you specify in a configuration table which modules you
want to use for your automation solution and which addresses are to be used to access the
modules from the user program. The properties of the modules can also be assigned using
Configure networks and communication connections
The basis for communication is a pre-configured network. For this, you will need to create the
subnets required for your automation networks, set the subnet properties, and set the network
connection properties and any communication connections required for the networked
stations
Define symbols
You can define local or shared symbols, which have more descriptive names, in a symbol
table to use instead of absolute addresses in your user program
Create the program
Using one of the available programming languages create a program linked to a module or
independent of a module and store it as blocks, source files, or charts
S7 only: generate and evaluate reference data
You can make use of these reference data to make debugging and modifying your user
program easier
Configure messages
You create block-related messages, for example, with their texts and attributes. Using the
transfer program you transfer the message configuration data created to the operator
interface system database (for example, SIMATIC WinCC, SIMATIC ProTool)
Configure operator control and monitoring variables
You create operator control and monitoring variables once in STEP 7 and assign them the
required attributes. Using the transfer program you transfer the operator control and
monitoring variables created to the database of the operator interface system WinCC
Download programs to the programmable controller
S7 only: after all configuration, parameter assignment, and programming tasks are
completed, you can download your entire user program or individual blocks from it to the
programmable controller (programmable module for your hardware solution).
Test programs
S7 only: for testing you can either display the values of variables from your user program or a
CPU, assign values to the variables, and create a variable table for the variables that you
want to display or modify
PAGE 5

Monitor operation, diagnose hardware


You determine the cause of a module fault by displaying online information about a module.
You determine the causes for errors in user program processing with the help of the
diagnostic buffer and the stack contents. You can also check whether a user program can run
on a particular CPU
Document the plant
After you have created a project/plant, it makes sense to produce clear documentation of the
project data to make further editing of the project and any service activities easier

PAGE 6

COMPARISON OF CPU'S
CPU's

CPU312IFM

Mem Statement/Bytes
Memory Cards

2K/6KB
-

Processing Time 1024


Statements
DI & DO Max
AI & AO Max
Rack Configuration
Expansion Modules Max
Bit Memories
Counters
Timers
MPI Interface
187.5 Kbit/s
Max 32 Nodes
Integrated
functions+Interfaces

CPU313

CPU314IFM

CPU314

8K/24KB
-

0.6 ms

4K/12KB
512KB
FEPROM
0.6 ms

0.3 ms

16K/48KB
512KB
FEPROM
0.3 ms

256
64
1-Tier
8
1024
32
64
Yes

256
64
1-Tier
8
2048
32
64
Yes

1024
256
4-Tier
31
2048
64
72
Yes

1024
256
4-Tier
31
2048
64
128
Yes

10DI/6DQ
onboard. int.
functions:Count
ers/Freq.
Measuremensts

20DI/16DQ
,4AI,1AO
onboard. int.
functions:Co
unters/Freq.
Measuremen
sts/Positionin
g PID Control

CPU's

CPU315

CPU315-2DP

CPU316-2DP

CPU318-2

Mem Statement/Bytes
Memory Cards

16K/48KB
512KB FEPROM
0.3 ms

42K/128KB
4MB
FEPROM
0.3 ms

256KB
4MB FEPROM

Processing Time 1024


Statements
DI & DO Max
AI & AO Max
Rack Configuration
Expansion Modules Max
Bit Memories
Counters
Timers
MPI Interface
187.5 Kbit/s
Max 32 Nodes
Integrated
functions+Interfaces

16K/48KB
512KB
FEPROM
0.3 ms

1024
256
4-Tier
32
2048
64
128
Yes

2048
256
4-Tier
32
2048
64
128
Yes

4096
256
4-Tier
32
2048
64
128
Yes

16384
1024
4-Tier
32
8192
512
512
Upto 12Mbaud

PROFIBUSDP
Master/Slave
(64 DP
stations,12M
baud)

PROFIBUSDP
Master/Slave
(64 DP
stations,12M
baud)

PROFIBUS-DP
Master/Slave
(125 DP
stations,12Mb
aud)

PAGE 7

0.1 ms

* 1 K statements correspond to approx. 3Kbytes of user memory.

PAGE 8

THE DIFFERENT TYPES OF MODULES AVAILABLE ARE


1. SIGNAL MODULES - FOR DIGITAL AND ANALOG SIGNALS
DIGITAL INPUTS

16 X 24 VDC
8 X 120 / 230 VAC
16 X 120 V AC
32 X 24 V DC

DIGITAL OUTPUTS

16 x 24 VDC ,0.5A
8 X 24 VDC ,2A
8 X 120 / 230 VAC, 2A
16 X 120 VAC, 1A
32 X 24 V DC, 0.5A

RELAY OUTPUTS

8 X Relay 30 VDC ,0.5A


8 X Relay 250 VAC ,3A
16 X Relay 30VDC,0.5A
16 X Relay 120VAC, 2.5A

DI/DO MODULES

ANALOG INPUTS PARAMETERIZABLE

8 Analog Inputs/ 2 Analog Inputs


+/- 10V , +/- 50 mV, +/-1 V, +/-20 Ma, 4 to
20mA, Pt100, Thermocouple

8DI/8DO X 24VDC 0.5A

ANALOG OUTPUTS PARAMETERIZABLE

4 Analog Outputs/ 2 Analog Outputs


+/-10V, +/-50mV, +/-1 V, +/-20 mV, 4 to 20
mA

2. FUNCTION MODULES
High Speed Counter Modules - Upto 100 KHz range
Positioning Modules - For position control, Stepper Motor Control, Cam Controllers
All function modules are enclosed and can be installed in any slot.
3. COMMUNICATION PROCESSORS - FOR DATA EXCHANGE WITH PRINTERS,COMPUTERS,
SIMATIC SYSTEMS
CP340 - Point to Point Communication for the serial link with RS232, 3964R and any ASCII
protocol
4. INTERFACE MODULES - FOR MULTI TIER CONFIGURATION
For Central Controller Expansion
For Expansion Unit Connection
5. POWER SUPPLY MODULES - FOR 24 VDC LOAD CIRCUITS WITH DIFFERENT RATINGS.

MPI - MULTI POINT INTERFACE FOR COMMUNICATION

MPI INTEGRATED IN CPU


DATA EXCHANGE RATE : 187.5 Kbits / s
PAGE 9

SIMULTANEOUS COMMUNICATION WITH PG/PC/OP(OPERATOR PANEL) AND FURTHER


PLCS REQUIRING NO ADDITIONAL HARDWARE
UPTO 32 NODES CAN BE CONNECTED

ADDRESSING OF MODULES

Slot Addressing for Rack 0

RACK 0

PS

CPU

10

11

Digital Address

12

16

20

24

28

Analog Address

256

272

288

304

320

336

352

368

Slot Number

Module Starting Addresses of the Signal Modules on Rack 0

Slot Addressing for Rack 1


CPU

IM

AI / AO / DI / DO Modules

10

11

Digital Address

64
32

36

40

44

48

52

56

60

Analog Address

512
384

400

416

432

448

464

480

496

RACK 1

Slot Number

Module
Starting Addresses
theTHEATRE,
Signal Modules
onMALAD(W)
Rack 1
MUMBAI OFF: 43, DATTANI
CHAMBERS,
NEAR NEW of
ERA
S.V. ROAD,
MUMBAI-64
TEL.: 022-8883737

Slot Addressing for Rack 2

RACK 2

10

11

Digital Address

64

68

72

76

80

84

88

92

Analog Address

512

528

544

560

576

592

608

624

Slot Number

Module Starting Addresses of the Signal Modules on Rack 2

Slot Addressing for Rack 3


CPU

IM

AI / AO / DI / DO Modules

RACK 3

10

11

Digital Address

64
96

100

104

108

112

116

120

124

Analog Address

512
640

656

672

688

704

720

736

752

Slot Number

Module Starting Addresses of the Signal Modules on Rack 3


PAGE 11

Rack 3

Slot Number

IM

10

11

64
512

Rack 2

Slot Number

IM

10

11

Connecting
cable 368
64
512

Rack 1

Slot Number

IM

10

11

Connecting
cable 368
64
512

Rack 0

Slot Number

PS

CPU

(IM) 3

PAGE 12
PUNE OFF: C-17,PAWANA IND. EST., T-204, MIDC - BHOSARI, PUNE-411026

10

11

Load Memory and Work Memory in the CPU


After completing the configuration, parameter assignment, and program creation and establishing the
online connection, you can download complete user programs or individual blocks to a programmable
controller. To test individual blocks, you must download at least one organization block (OB) and the
function blocks (FB) and functions (FC) called in the OB and the data blocks (DB) used. To download
the system data created when the hardware was configured, the networks configured, and the
connection table created to the programmable controller, you download the object System Data".
You download user programs to a programmable controller using the SIMATIC Manager, for example,
during the end phase of the program testing or to run the finished user program.
Relationship - Load Memory and Work Memory
The complete user program is downloaded to the load memory; the parts relevant to program
execution are also loaded into the work memory.
CPU Load Memory
The load memory is used to store the user program without the symbol table and the
comments (these remain in the memory of the programming device).
Blocks that are not marked as required for startup will be stored only in the load memory.
The load memory can either be RAM, ROM, or EPROM memory, depending on the
programmable controller.
CPU Work Memory
The work memory (integrated RAM) is used to store the parts of the user program required for
program processing.
Possible Downloading/Uploading Procedures
You use the download function to download the user program or loadable objects (for example,
blocks) to the programmable controller. If a block already exists in the RAM of the CPU, you will be
prompted to confirm whether or not the block should be overwritten.
You can select the loadable objects in the project window and download them from the
SIMATIC Manager (menu command: PLC > Download).
When programming blocks and when configuring hardware and networks you can directly
download the object you were currently editing using the menu in the main window of the
application you are working with (menu command: PLC > Download).
Another possibility is to open an online window with a view of the programmable controller (for
example, using View > Online or PLC > Display Accessible Nodes) and copy the object
you want to download to the online window.
Alternatively you can upload the current contents of blocks from the RAM load memory of the CPU to
your programming device via the load function.

PAGE 13

Blocks in the User Program


The STEP 7 programming software allows you to structure your user program, in other words to break
down the program into individual, self-contained program sections. This has the following advantages:
Extensive programs are easier to understand.
Individual program sections can be standardized.
Program organization is simplified.
It is easier to make modifications to the program.
Debugging is simplified since you can test separate sections.
Commissioning your system is made much easier.
The example of an industrial blending process illustrated the advantages of breaking down an
automation process into individual tasks. The program sections of a structured user program
correspond to these individual tasks and are known as the blocks of a program.
Block Types
There are several different types of blocks you can use within an S7 user program:

Block

Brief Description Of Function

Organization blocks (OB)

OBs determine the structure of the user program.

System function blocks (SFB)


and system functions (SFC)

SFBs and SFCs are integrated in the S7 CPU and allow you
access to some important system functions.

Function blocks (FB)

FBs are blocks with a "memory" which you can program yourself.

Functions (FC)

FCs contain program routines for frequently used functions.

Instance data blocks


(instance DB)

Instance DBs are associated with the block when an FB/SFB is


called. They are created automatically during compilation.

Data blocks (DB)

DBs are data areas for storing user data. In addition to the data
that are assigned to a function block, shared data can also be
defined and used by any blocks.

OBs, FBs, SFBs, FCs, and SFCs contain sections of the program and are therefore also known as
logic blocks. The permitted number of blocks per block type and the permitted length of the blocks is
CPU-specific.

PAGE 14

DATA TYPES
Introduction to Data Types and Parameter Types
All the data in a user program must be identified by a data type. The following data types are
available:
Elementary data types provided by STEP 7
Complex data types that you yourself can create by combining elementary data types
Parameter types with which you define parameters to be transferred to FBs or FCs
General Information
Statement List, Ladder Logic, and Function Block Diagram instructions work with data objects of
specific sizes. Bit logic instructions work with bits, for example. Load and transfer instructions (STL)
and move instructions (LAD and FBD) work with bytes, words, and double words.
A bit is a binary digit "0" or "1." A byte is made up of eight bits, a word of 16 bits, and a double word of
32 bits.
Math instructions also work with bytes, words, or double words. In these byte, word, or double word
addresses you can code numbers of various formats such as integers and floating-point numbers.
When you use symbolic addressing, you define symbols and specify a data type for these symbols
(see table below). Different data types have different format options and number notations.
This chapter describes only some of the ways of writing numbers and constants. The following table
lists the formats of numbers and constants that will not be explained in detail.
Format
Size in Bits
Number Notation
Hexadecimal

8, 16, and 32

B#16#, W#16#, and DW#16#

Binary

8, 16, and 32

2#

date

16

D#

time

32

T#

Time of day

32

TOD#

Character

'A'

Elementary Data Types


Each elementary data type has a defined length. The following table lists the elementary data types.
Size
Range and Number
Type and
in Format Options
Notation (lowest
Example
Description
Bits
to highest value)_
BOOL(Bit)
BYTE
(Byte)

Boolean text
8

Hexadecimal number

TRUE/FALSE

TRUE

B16#0 to B16#FF

L B#16#10
L byte#16#10

WORD
(Word)

16

L 2#0001_0000_0000_0000
2. 0 to
2#1111_1111_1111_1111
L W#16#1000
Hexadecimal number
W#16#0 to W#16#FFFF
L word16#1000
L C#998
BCD
C#0 to C#999
L B#(10,20)
Decimal number unsigned B#(0.0) to B#(255.255)
L byte#(10,20)

DWORD

32

Binary number

Binary number

2#0 to
PAGE 15

2#1000_0001_0001_1000_

(Double word)

2#1111_1111_1111_1111
1111_1111_1111_1111
Hexadecimal number
DW#16#0000_0000 to
DW#16#FFFF_FFFF
Decimal number unsigned B#(0,0,0,0) to
B#(255,255,255,255)

1011_1011_0111_1111

16

Decimal number signed

-32768 to 32767

L1

DINT
32
(Integer, 32 bits)

Decimal number signed

L#-2147483648 to
L#2147483647

L L#1

REAL
(Floating-point
number)

32

IEEE
Floating-point number

Upper limit: 3.402823e+38


L 1.234567e+13
Lower limit: 1.175 495e-38

16

S7 time in
steps of
10 ms (default)

S5T#0H_0M_0S_10MS to
S5T#2H_46M_30S_0MS
and
S5T#0H_0M_0S_0MS

INT
(Integer)

S5TIME
(SIMATIC time)

L DW#16#00A2_1234
L dword#16#00A2_1234
L B#(1, 14, 100, 120)
L byte#(1,14,100,120)

L S5T#0H_1M_0S_0MS
L
S5TIME#0H_1H_1M_0S_0
MS

TIME
(IEC time)

32

IEC time in steps of 1 ms,


integer signed

T#24D_20H_31M_23S_64 L T#0D_1H_1M_0S_0MS
L
8MS to
T#24D_20H_31M_23S_64 TIME#0D_1H_1M_0S_0MS
7MS

DATE
(IEC date)

16

IEC date in steps of 1 day

D#1990-1-1 to
D#2168-12-31

L D#1996-3-15
L DATE#1996-3-15

TIME_OF_DAY
(Time)

32

Time in steps of 1 ms

TOD#0:0:0.0 to
TOD#23:59:59.999

L TOD#1:10:3.3
L TIME_OF_DAY#1:10:3.3

CHAR
(Character)

ASCII characters

'A','B' etc.

L 'E'

Parameter Types
In addition to elementary and complex data types, you can also define parameter types for formal
parameters that are transferred between blocks. STEP 7 recognizes the following parameter types:
TIMER or COUNTER: this specifies a particular timer or particular counter that will be used
when the block is executed. If you supply a value to a formal parameter of the TIMER or
COUNTER parameter type, the corresponding actual parameter must be a timer or a counter,
in other words, you enter "T" or "C" followed by a positive integer.
BLOCK: specifies a particular block to be used as an input or output. The declaration of the
parameter determines the block type to be used (FB, FC, DB etc.). If you supply values to a
formal parameter of the BLOCK parameter type, specify a block address as the actual
parameter. Example: FC101" (when using absolute addressing) or Valve" (with symbolic
addressing).
Parameter
TIMER

Capacity

Description

Indicates a timer to be used by the program in the called logic block.


2. Byte
Format: T1
s
PAGE 16

COUNTER

2 bytes

BLOCK_FB
BLOCK_FC
2 bytes
BLOCK_DB
BLOCK_SDB

Indicates a counter to be used by the program in the called logic block.


Format: C10
Indicates a block to be used by the program in the called logic block.
Format: FC101
DB42

PAGE 17

PROGRAMMING IN STATEMENT LIST


What is Statement List?
Statement List (STL) is a textual programming language that can be used to create the code section
of logic blocks. Its syntax for statements is similar to assembler language and consists of instructions
followed by addresses on which the instructions act.
The Programming Language STL
Of all the programming languages with which you can program S7 controllers, STL is the closest to
the machine code MC7 of the S7 CPU. This means that by using it to program S7 controllers, you can
optimize the run time and the use of memory.
The programming language STL has all the necessary elements for creating a complete user
program. It contains a comprehensive range of instructions. A total of over 130 different basic
instructions and a wide range of addresses are available. Functions and function blocks allow you to
structure your STL program clearly.
The Programming Package
The STL programming package is an integral part of the STEP 7 Standard Software. This means that
following the installation of your STEP 7 software, all the editor functions, compiler functions and
test/debug functions for STL are available to you.
Using STL, you can create your own user program as follows:
_ With the Incremental Editor. The input of the local data structure is made easier with the help of
table editors.
_ With a source file in the Text Editor. Text input is made easier with the help of block templates.
There are three programming languages in the standard software, STL, FBD, and LAD. You can
switch from one language to the other almost without restriction and choose the most suitable
language for the particular block you are programming.
If you write programs in LAD or FBD, you can always switch over to the STL representation. If you
convert LAD programs into FBD programs and vice versa, program elements that cannot be
represented in the destination language are displayed in STL.
A STATEMENT CONSISTS OF AN INSTRUCTION AND AN ADDRESS
Address of an Instruction
The address of an instruction indicates a constant or the location where the instruction finds a value
(data object) on which to perform an operation. The address can have a symbolic name or an
absolute designation. The address can point to any of the following items :
_ A constant, the value of a timer or counter, or an ASCII character string to be loaded into
accumulator 1 (for example, L +27 See Table 2.1)
_ A bit in the status word of the programmable logic controller
_ A symbolic name (for example, A Motor.On, see Table 2-3)
_ A data block and a location within the data block area (for example, L DB4.DBD10, see Table 2-4)
_ A function (FC), function block (FB), integrated system function (SFC), or integrated system function
block (SFB) and the number of the function or block (see Table 2-5)
_ An address identifier and a location within the memory area that is indicated by the address
identifier (for example, A I 1.0)

PAGE 18

PAGE 19

PAGE 20

PAGE 21

PAGE 22

PAGE 23

PAGE 24

COMMANDS USED IN STATEMENT LIST


Bit Logic Instructions
)
=
A
A(
AN
AN(
FN
FP
O
O
O(
ON
ON(
R
S

Nesting Closed
Assign
And
And with Nesting Open
And Not
And Not with Nesting Open
Edge Negative
Edge Positive
Or
And before Or
Or with Nesting Open
Or Not
Or Not with Nesting Open
Reset
Set

PAGE 25

PAGE 26

PAGE 27

PAGE 28

Comparison Instructions

PAGE 29

PAGE 30

Conversion Instructions

AUTOMATION & CONTROL SYTEMS

PAGE 31

PUNE OFF: C-17,PAWANA IND. EST., T-204, MIDC - BHOSARI, PUNE-411026


MUMBAI OFF: 43, DATTANI CHAMBERS, NEAR NEW ERA THEATRE, S.V. ROAD, MALAD(W)
MUMBAI-64
TEL.: 022-8883737

BTD
BCD to Double Integer (32-Bit)
Example:
L
MD10
Load the BCD number into ACCU 1.
BTD
Convert from BCD to integer; store result in ACCU 1.
T
MD20
Transfer result (double integer number) to MD20.

BTI
BCD to Integer (16-Bit)
Example:
L
MW10
Load the BCD number into ACCU 1-L.
BTI
Convert from BCD to integer; store result in ACCU 1-L.
T
MW20
Transfer result (integer number) to MW20.

CAD
Change Byte Sequence in ACCU 1 (32-Bit)
Example:
L
MD10
Load the value of MD10 into ACCU 1.
CAD
Reverse the sequence of bytes in ACCU 1.
T
MD20
Transfer the results to MD20.
Contents of ACCU 1 before execution of CAD:
ACCU 1-H-H: ACCU 1-H-L: ACCU 1-L-H:
value "A"
value "B"
value "C"

ACCU 1-L-L:
value "D"

Contents of ACCU 1 after execution of CAD:


ACCU 1-H-H: ACCU 1-H-L: ACCU 1-L-H:
value "D"
value "C"
value "B"

ACCU 1-L-L:
value "A"

PAGE 32

CAW
Change Byte Sequence in ACCU 1-L (16-Bit)
Example:
L
MW10
Load the value of MW10 into ACCU 1.
CAW
Reverse the sequence of bytes in ACCU 1-L.
T
MW20
Transfer the result to MW20.
Contents of ACCU 1 before execution of CAW:
ACCU 1-H-H:
value "A"

ACCU 1-H-L:
value "B"

ACCU 1-L-H:
value "C"

ACCU 1-L-L:
value "D"

Contents of ACCU 1 after execution of CAW:


ACCU 1-H-H: ACCU 1-H-L: ACCU 1-L-H:
value "A"
value "B"
value "D"

ACCU 1-L-L:
value "C"

DTB
Double Integer (32-Bit) to BCD
Example:
L
MD10
Load the 32-bit integer into ACCU 1.
DTB
Convert from integer (32-bit) to BCD, store result in ACCU 1.
T
MD20
Transfer result (BCD number) to MD20.

PAGE 33

DTR
Double Integer (32-Bit) to Floating-Point Number (32-Bit, IEEE-FP)
Example:
L
MD10
Load the 32-bit integer into ACCU 1.
DTR
Convert from double integer to floating point (32-bit IEEE FP); store result in
ACCU 1.
T
MD20
Transfer result (BCD number) to MD20.

INVD
Example:
Bit

Ones Complement Double Integer (32-Bit)


31

16

15

Contents of ACCU 1
before execution of INVD

0110

1111

1000

1100

0110

0011

1010

1110

Contents of ACCU 1
after execution of INVD

1001

0000

0111

0011

1001

1100

0101

0001

L
INVD
T

ID8
MD10

Load value into ACCU 1.


Form ones complement (32-bit).
Transfer result to MD10.

PAGE 34

INVI
Ones Complement Integer (16-Bit)
Example:
Bit
15
Contents of ACCU 1-L before execution of INVI 0110
Contents of ACCU 1-L after execution of INVI 1001
L
INVI
T

IW8
MW10

0011
1100

1010
0101

0
1110
0001

Load value into ACCU 1-L.


Form ones complement 16-bit.
Transfer result to MW10.

ITB
Integer (16-Bit) to BCD
Example:
L
MW10
Load the integer number into ACCU 1-L.
ITB
Convert from integer to BCD (16-bit); store result in ACCU 1-L.
T
MW20
Transfer result (BCD number) to MW20.

PAGE 35

ITD
Integer (16-Bit) to Double Integer (32-Bit)
Example:
L
MW12
Load the integer number into ACCU 1.
ITD
Convert from integer (16-bit) to double integer (32-bit); store result in
ACCU 1.
T
MD20
Transfer result (double integer) to MD20.
MW12 = "-10" (Integer, 16-bit):
Bit:

ACCU 1-H
31

Contents of ACCU 1 before execution of ITD:


Contents of ACCU 1 after execution of ITD:

XXXX
1111

XXXX
1111

ACCU 1-L
16 : 15
XXXX
1111

XXXX
1111

1111
1111

1111
1111

0
1111
1111

0110
0110

(X = 0 or 1, bits are not used for conversion)

NEGD
Example:

Twos Complement Double Integer (32-Bit)


ACCU 1-H

Bit:

31

Contents of ACCU 1 before execution of NEGD:


Contents of ACCU 1 after execution of NEGD:

0101
1010

L
ID8
NEGD
T
MD10

ACCU 1-L
.0

1111
0000

0110
1001

Load value into ACCU 1.


Generate twos complement (32-bit).
Transfer result to MD10.

PAGE 36

0100
1011

0101
1010

1101
0010

0011
1100

1000
1000

NEGI
Twos Complement Integer (16-Bit)
Example:
Bit
15
Contents of ACCU 1-L before execution of NEGI 0101
Contents of ACCU 1-L after execution of NEGI 1010
L
NEGI
T

IW8
MW10

1101
0010

0011
1100

0
1000
1000

Load value into ACCU 1-L.


Form twos complement 16-bit.
Transfer result to MW10.

NEGR
Negate Floating-Point Number (32-Bit, IEEE-FP)
Example:
L
ID8
Load value into ACCU 1 (example: ID 8 = 1.5E+02).
NEGR
Negate floating-point number (32-bit, IEEE-FP); stores the result in ACCU 1.
T
MD10
Transfer result to MD10 (example: result = -1.5E+02).

PAGE 37

RND
Round
Example:
L
MD10
Load the floating-point number into ACCU 1-L.
RND
Convert the floating-point number (32-bit, IEEE-FP) into an integer (32-bit)
and
round off the result.
T
MD20
Transfer result (double integer number) to MD20.
Value before conversion:
Value after conversion:
MD10 = "100.5"
=> RND => MD20 = "+100"
MD10 = "-100.5"
=> RND => MD20 = "-100"

PAGE 38

RND+
Round to Upper Double Integer
Example:
L
MD10
Load the floating-point number (32-bit, IEEE-FP) into ACCU 1-L.
RND+
Convert the floating-point number (32-bit, IEEE-FP) to an integer (32-bit) and
round
result.Store output in ACCU 1.
T
MD20
Transfer result (double integer number) to MD20.
Value before conversion:
Value after conversion:
MD10 = "100.5"
=> RND+ => MD20 = "+101"
MD10 = "-100.5"
=> RND+ => MD20 = "-100"

RNDRound to Lower Double Integer


Example:
L
MD10
Load the floating-point number into ACCU 1-L.
RNDConvert the floating-point number (32-bit, IEEE-FP) to an integer (32-bit) and
round
result.Store result in ACCU 1.
T
MD20
Transfer result (double integer number) to MD20.
PAGE 39

Value before conversion:


Value after conversion:
MD10 = "100.5"
=> RND- => MD20 = "+100"
MD10 = "-100.5"
=> RND- => MD20 = "-101"

TRUNC
Truncate
Example:
L
MD10
Load the floating-point number into ACCU 1-L.
TRUNC
Convert the floating-point number (32-bit, IEEE-FP) to an integer (32-bit) and
round
result.Store the result in ACCU 1.
T
MD20
Transfer result (double integer number) to MD20.
Value before conversion:
Value after conversion:
MD10 = "100.5"
=> TRUNC =>
MD20 = "+100"
MD10 = "-100.5"
=> TRUNC =>
MD20 = "-100"

PAGE 40

Counter Instructions

PAGE 41

PAGE 42

PAGE 43

PAGE 44

PAGE 45

PAGE 46

CD
Example:
L
C#14
A
I 0.1
S
C1
A
I 0.0
CD
C1
input
AN
=

C1
Q 0.0

Counter Down
Counter preset value.
Preset counter after detection of rising edge of I 0.1.
Load counter 1 preset if enabled.
One count down per rising edge of I 0.0.
Decrement counter C1 by 1 when RL0 transitions from 0 to 1 depending on
I 0.0.
Zero detection using the C1 bit.
Q 0.0 = 1 if counter 1 value is zero.

CU
Example:
A
I 2.1
CU
C3

Counter Up

L
Example:
L
C3

Load Current Counter Value into ACCU 1

LC
Example:
LC
C3
format.

Load Current Counter Value into ACCU 1 as BCD

R
Example:
A
I 2.3
R
C3

Reset Counter

S
Example:
A
I 2.3
L
C#3
S
C1

If there is a positive edge change at input I 2.1.


Counter C3 is incremented by 1 when RL0 transitions from 0 to 1.

Load ACCU 1-L with the count value of counter C3 in binary format.

Load ACCU 1-L with the count value of counter C3 in binary coded decimal

Check signal state at input I 2.3.


Reset counter C3 to a value of 0 if RLO transitions from 0 to 1.

Set Counter Preset Value


Check signal state at input I 2.3.
Load count value 3 into ACCU 1-L.
Set counter C1 to count value if RLO transitions from 0 to 1

PAGE 47

Data Block Instructions


Format:
Example:
OPN
L
T
OPN
L
T

OPN <data block>

DB10
DBW35
MW22
DI20
DIB12
DBB37

Open data block DB10 as a shared data block.


Load data word 35 of the opened data block into ACCU 1-L.
Transfer the content of ACCU 1-L into MW22.
Open data block DB20 as an instance data block.
Load data byte 12 of the opened instance data block into ACCU 1-L.
Transfer the content of ACCU 1-L to data byte 37 of the opened shared data
block.

Logic Control Instructions


JC
Example:
A
A
JC
L
T
JOVR: A

JCB
Example:
A
A
JCB
L
T
JOVR: A

JCN
Example:
A
A
JCN
L
T
JOVR: A

JM
Example:
L
L
-I
JM

Jump if RLO = 1
I 1.0
I 1.2
JOVR Jump if RLO=1 to jump label JOVR.
IW8
Program scan continues here if jump is not executed.
MW22
I 2.1
Program scan resumes here after jump to jump label JOVR.

Jump if RLO = 1 with BR


I 1.0
I 1.2
JOVR Jump if RLO = 1 to jump label JOVR. Copy the contents of the RLO bit
into the BR bit.
IW8
Program scan continues here if jump is not executed.
MW22
I 2.1
Program scan resumes here after jump to jump label JOVR.

Jump if RLO = 0
I 1.0
I 1.2
JOVR Jump if RLO = 0 to jump label JOVR.
IW8
Program scan continues here if jump is not executed.
MW22
I 2.1
Program scan resumes here after jump to jump label JOVR.

Jump if Minus
IW8
MW12
NEG

//Subtract contents of MW12 from contents of IW8.


//Jump if result < 0 (that is, contents of ACCU 1 < 0).
PAGE 48

AN
S
JU
NEG: AN
S
NEXT: NOP 0

M 4.0 //Program scan continues here if jump is not executed.


M 4.0
NEXT
M 4.1 //Program scan resumes here after jump to jump label NEG.
M 4.1
//Program scan resumes here after jump to jump label NEXT.

JMZ
Jump if Minus or Zero
Example:
L
IW8
L
MW12
-I
Subtract contents of MW12 from contents of IW8.
JMZ
RGE0
Jump if result <=0 (that is, contents of ACCU 1 <= 0).
AN
M 4.0
Program scan continues here if jump is not executed.
S
M 4.0
JU
NEXT
RGE0: AN
M 4.1 Program scan resumes here after jump to jump label RGE0.
S
M 4.1
NEXT: NOP 0
Program scan resumes here after jump to jump label NEXT.

JN
Example:
L
L
XOW
JN
AN
S
JU
NOZE: AN
S
NEXT: NOP 0

JP
Example:
L
L
-I
JP
AN
S
JU
POS: AN
S
NEXT: NOP 0

JPZ
Example:
L

Jump if Not Zero


IW8
MW12
NOZE Jump if the contents of ACCU 1-L are not equal to zero.
M 4.0 Program scan continues here if jump is not executed.
M 4.0
NEXT
M 4.1 Program scan resumes here after jump to jump label NOZE.
M 4.1
Program scan resumes here after jump to jump label NEXT.

Jump if Plus
IW8
MW12
Subtract contents of MW12 from contents of IW8.
POS Jump if result >0 (that is, ACCU 1 > 0).
M 4.0 Program scan continues here if jump is not executed.
M 4.0
NEXT
M 4.1 Program scan resumes here after jump to jump label POS.
M 4.1
Program scan resumes here after jump to jump label NEXT.

Jump if Plus or Zero


IW8
PAGE 49

L
-I
JPZ
AN
S
JU
REG0: AN
S
NEXT: NOP 0

MW12

JU
Example:
A
A
JC
L
INC
T
JU
DELE: L
T
FORW: A

Jump Unconditional

JUO
Example:
L
L
/D
JUO
T
A
R
JU
ERRO: AN
S
NEXT: NOP 0
JZ
Example:
L
SRW
JZ
L
INC
T
JU
ZERO: L
INC
T
NEXT: NOP 0

Subtract contents of MW12 from contents of IW8.


REG0 Jump if result >=0 (that is, contents of ACCU 1 >= 0).
M 4.0 Program scan continues here if jump is not executed.
M 4.0
NEXT
M 4.1 Program scan resumes here after jump to jump label REG0.
M 4.1
Program scan resumes here after jump to jump label NEXT.

I 1.0
I 1.2
DELE Jump if RLO=1 to jump label DELE.
MB10
1
MB10
FORW Jump unconditionally to jump label FORW.
0
MB10
I 2.1
Program scan resumes here after jump to jump label FORW.

Jump if Unordered
MD10
ID2
Divide contents of MD10 by contents of ID2.
ERRO Jump if division by zero (that is, ID2 = 0).
MD14 Program scan continues here if jump is not executed.
M 4.0
M 4.0
NEXT
M 4.0 Program scan resumes here after jump to jump label ERRO.
M 4.0
Program scan resumes here after jump to jump label NEXT.
Jump if Zero
MW10
1
ZERO Jump to jump label ZERO if bit that has been shifted out = 0.
MW2 Program scan continues here if jump is not executed.
1
MW2
NEXT
MW4 Program scan resumes here after jump to jump label ZERO.
1
MW4
Program scan resumes here after jump to jump label NEXT.

PAGE 50

LOOP
Loop
Example for calculating the factor of 5:
L
L#1
Load the integer constant (32 bit) into ACCU 1.
T
MD20 Transfer the contents from ACCU 1 into MD20 (initialization).
L
5
Load number of loop cycles into ACCU 1-L.
NEXT: T
MW10 Jump label = loop start / transfer ACCU 1-L to loop counter.
L
MD20
*
D
Multiply current contents of MD20 by the current contents of MB10.
T
MD20 Transfer the multiplication result to MD20.
L
MW10 Load contents of loop counter into ACCU 1.
LOOP

NEXT

L
L
>I

Decr. the contents of ACCU 1 and jump to the NEXT jump label if ACCU 1-L > 0.

MW24 Program scan resumes here after loop is finished.


200

Load and Transfer Instructions


L
Load
L <address> loads the addressed byte, word, or double word into ACCU 1 after the old contents of
ACCU 1 have been saved into ACCU 2, and ACCU 1 is reset to "0".
Example:
L
IB10
L
MB120
L
DBB12
L
DIW15
L
LD252

Load input byte IB10 into ACCU 1-L-L.


Load memory byte MB120 into ACCU 1-L-L.
Load data byte DBB12 into ACCU 1-L-L.
Load instance data word DIW15 into ACCU 1-L.
Load local data double word LD252 ACCU 1.

T
Transfer
T <address> transfers (copies) the contents of ACCU 1 to the destination address if the Master
Control Relay is switched on (MCR = 1). If MCR = 0, then the destination address is written with 0.
The number of bytes copied from ACCU 1 depends on the size expressed in the destination address.
ACCU 1 also saves the data after the transfer procedure. A transfer to the direct I/O area (memory
type PQ) also transfers the contents of ACCU 1 or "0" (if MCR=0) to the corresponding address of the
process image output table (memory type Q). The instruction is executed without regard to, and
without affecting, the status bits.
Example:
T
QB10
T
MW14
T
DBD2

Transfers contents of ACCU 1-L-L to output byte QB10.


Transfers contents of ACCU 1-L to memory word MW14.
Transfers contents of ACCU 1 to data double word DBD2.

PAGE 51

Floating-Point Math Instructions; Basic


*R
Multiply ACCU 1 and ACCU 2 as Floating Point Numbers (32-Bit IEEE-FP)
Example:
OPN DB10
L
ID10
Load the value of ID10 into ACCU 1.
L
MD14
Load the value of ACCU 1 into ACCU 2.Load the value of MD14 into
ACCU 1.
*R
Multiply ACCU 2 and ACCU 1; store the result in ACCU 1.
T
DBD25
The content of ACCU 1 (result) is transferred to DBD25 in DB10.

+R
Add ACCU 1 and ACCU 2 as a Floating Point Number (32-Bit IEEE-FP)
Example:
OPN DB10
L
ID10
Load the value of ID10 into ACCU 1.
L
MD14
Load the value of ACCU 1 into ACCU 2.Load the value of MD14 into
ACCU 1.
+R
Add ACCU 2 and ACCU 1; store the result in ACCU 1.
T
DBD25
The content of ACCU 1 (result) is transferred to DBD25 in DB10.

-R
Example:
OPN DB10
L
ID10
L
MD14
ACCU 1.
-R
T
DBD25

Subtract ACCU 1 from ACCU 2 as a Floating Point Number (32-Bit IEEE-FP)

Load the value of ID10 into ACCU 1.


Load the value of ACCU 1 into ACCU 2.Load the value of MD14 into
Subtract ACCU 1 from ACCU 2; store the result in ACCU 1.
The content of ACCU 1 (result) is transferred to DBD25 in DB10.

/R
Divide ACCU 2 by ACCU 1 as a Floating Point Number (32-Bit IEEE-FP)
Example:
OPN DB10
L
ID10
Load the value of ID10 into ACCU 1.
L
MD14
Load the contents of ACCU 1 into ACCU 2.Load the value of MD14 into
ACCU 1.
/R
Divide ACCU 2 by ACCU 1; store the result in ACCU 1.
T
DBD20
The content of ACCU 1 (result) is transferred to DBD20 in DB10.

ABS
Absolute Value of a Floating Point Number (32-Bit IEEE-FP)
Example:
L
ID8
Load value into ACCU 1 (example: ID8 = -1.5E+02).
ABS
Form the absolute value; store the result in ACCU 1.
T
MD10
Transfer result to MD10 (example: result = 1.5E+02).

PAGE 52

Floating-Point Math Instructions: Extended

PAGE 53

Integer Math Instructions


+
Add Integer Constant (16, 32 Bit)
+ <integer constant> adds the integer constant to the contents of ACCU 1 and stores the result in
ACCU 1. The instruction is executed without regard to, and without affecting, the status word bits.
The contents of accumulator 2 remain unchanged for CPUs with two ACCUs.
The contents of accumulator 3 are copied into accumulator 2, and the contents of accumulator 4 are
copied into accumulator 3 for CPUs with four ACCUs. The contents of accumulator 4 remain
unchanged.
+ <16-bit integer constant>: Adds a 16-bit integer constant (in the range of -32768 to +32767) to the
contents of ACCU 1-L and stores the result in ACCU 1-L.
The contents of accumulator 2 remain unchanged for CPUs with two ACCUs.
The contents of accumulator 3 are copied into accumulator 2, and the contents of accumulator 4 are
copied into accumulator 3 for CPUs with four ACCUs. The contents of accumulator 4 remain
unchanged.
+ <32-bit integer constant>: Adds a 32-bit integer constant (in the range of -2,147,483,648 to
2,147,483,647) to the contents of ACCU 1 and stores the result in ACCU 1.
The contents of accumulator 2 remain unchanged for CPUs with two ACCUs.
The contents of accumulator 3 are copied into accumulator 2, and the contents of accumulator 4 are
copied into accumulator 3 for CPUs with four ACCUs. The contents of accumulator 4 remain
unchanged.
Example 1:
L
IW10
L
MW14
+I
+
T

25
DB1.DBW25

Example 2:
L
IW12
L
IW14
+
100
>I
JC
NEXT
Example 3:
L
MD20
L
MD24
+D
+
L#-200
T
MD28

Load the value of IW10 into ACCU 1-L.


Load the contents of ACCU 1-L to ACCU 2-L. Load the value of MW14 into
ACCU 1-L.
Add ACCU 2-L and ACCU 1-L; store the result in ACCU 1-L.
Add ACCU 1-L and 25; store the result in ACCU 1-L.
Transfer the contents of ACCU 1-L (result) to DBW25 of DB1.

Add ACCU 1-L and 100; store the result in ACCU 1-L.
If ACCU 2 > ACCU 1, or IW12 > (IW14 + 100)
then conditional jump to jump label NEXT.

Add ACCU 1and ACCU 2; store the result in ACCU 1.


Add ACCU 1 and -200; store the result in ACCU 1.

+D
Add ACCU 1 and ACCU 2 as Double Integer (32-Bit)
Example:
L
ID10
Load the value of ID10 into ACCU 1.
L
MD14
Load the contents of ACCU 1 to ACCU 2.Load the value of MD14 into
ACCU 1.
+D
Add ACCU 2 and ACCU 1; store the result in ACCU 1.
T
DB1.DBD25
The contents of ACCU 1 (result) are transferred to DBD25 of DB1.

PAGE 54

-D
Subtract ACCU 1 from ACCU 2 as Double Integer (32-Bit)
Example:
L
ID10
Load the value of ID10 into ACCU 1.
L
MD14
Load the contents of ACCU 1 into ACCU 2.Load the value of MD14 into
ACCU 1.
-D
Subtract ACCU 1 from ACCU 2; store the result in ACCU 1.
T
DB1.DBD25
The contents of ACCU 1 (result) are transferred to DBD25 of DB1.

*D
Example:
L
ID10
L
MD14
*D
T
DB1.DBD25

Multiply ACCU 1 and ACCU 2 as Double Integer (32-Bit)


Load the value of ID10 into ACCU 1.
Load contents of ACCU 1 into ACCU 2.Load contents of MD14 into ACCU 1.
Multiply ACCU 2 and ACCU 1; store the result in ACCU 1.
The contents of ACCU 1 (result) are transferred to DBD25 in DB1.

/D
Divide ACCU 2 by ACCU 1 as Double Integer (32-Bit)
Example:
L
ID10
Load the value of ID10 into ACCU 1.
L
MD14
Load the contents of ACCU 1 into ACCU 2.Load the value of MD14 into
ACCU 1.
/D
Divide ACCU 2 by ACCU 1; store the result (quotient) in ACCU 1.
T
MD20
The contents of ACCU 1 (result) are transferred to MD20.
Example above: 13 divided by 4
Contents of ACCU 2 before instruction (ID10):
Contents of ACCU 1 before instruction (MD14):
Instruction /D (ACCU 2 / ACCU 1)
Contents of ACCU 1 after instruction (quotient):

"13"
"4"
:
"3"

"13/4"

+I
Add ACCU 1 and ACCU 2 as Integer (16-Bit)
Example:
L
IW10
Load the value of IW10 into ACCU 1-L.
L
MW14
Load the contents of ACCU 1-L into ACCU 2-L.Load the value of MW14 into
ACCU 1-L.
+I
Add ACCU 2-L and ACCU 1-L; store the result in ACCU 1-L.
T
DB1.DBW25
The contents of ACCU 1-L (result) are transferred to DBW25 of DB1.

-I
Subtract ACCU 1 from ACCU 2 as Integer (16-Bit)
Example:
L
IW10
Load the value of IW10 into ACCU 1-L.
L
MW14
Load the contents of ACCU 1-L into ACCU 2-L.Load the value of MW14 into
ACCU 1-L.
-I
Subtract ACCU 1-L from ACCU 2-L; store the result in ACCU 1-L.
T
DB1.DBW25
The contents of ACCU 1-L (result) are transferred to DBW25 of DB1.

*I
Example:

Multiply ACCU 1 and ACCU 2 as Integer (16-Bit)


PAGE 55

L
IW10
L
MW14
ACCU 1*I
T

DB1.DBD25

/I
Example:
L
L

Load the value of IW10 into ACCU 1-L.


Load contents of ACCU 1-L into ACCU 2-L.Load contents of MW14 into

IW10
MW14

/I
quotient,

L.
Multiply ACCU 2-L and ACCU 1-L, store result in ACCU 1.
The contents of ACCU 1 (result) are transferred to DBW25 in DB1.

Divide ACCU 2 by ACCU 1 as Integer (16-Bit)


Load the value of IW10 into ACCU 1-L.
Load the contents of ACCU 1-L into ACCU 2-L.Load the value of MW14 into
ACCU 1-L.
Divide ACCU 2-L by ACCU 1-L; store the result in ACCU 1:ACCU 1-L:

ACCU 1-H: remainder


T
MD20
The contents of ACCU 1 (result) are transferred to MD20.
Example above: 13 divided by 4
Contents of ACCU 2-L before instruction (IW10): "13"
Contents of ACCU 1-L before instruction (MW14):
"4"
Instruction /I (ACCU 2-L / ACCU 1-L):
"13/4"
Contents of ACCU 1-L after instruction (quotient):
"3"
Contents of ACCU 1-H after instruction (remainder):
"1"

MOD
Division Remainder Double Integer (32-Bit)
Example:
L
ID10
Load the value of ID10 into ACCU 1.
L
MD14
Load the contents of ACCU 1 into ACCU 2.Load the value of MD14 into
ACCU 1.
MOD
Divide ACCU 2 by ACCU 1, store the result (remainder) in ACCU 1.
T
MD20
The contents of ACCU 1 (result) are transferred to MD20.
Example above : 13 divided by 4
Contents of ACCU 2 before instruction (ID10): "13"
Contents of ACCU 1 before instruction (MD14): "4"
Instruction MOD (ACCU 2 / ACCU 1):
"13/4"
Contents of ACCU 1 after instruction (remainder):
"3"

PAGE 56

Program Control Instructions


BE
Block End
BE (block end) terminates the program scan in the current block and causes a jump to the block that
called the current block. The program scan resumes with the first instruction that follows the block call
statement in the calling program.

BEC
Block End Conditional
If RLO = 1, then BEC (block end conditional) interrupts the program scan in the current block and
causes a jump to the block that called the current block.
Example:
A
I 1.0
BEC
L
IW4
T
MW10

Update RLO.
End block if RLO = 1.
Continue here if BEC is not executed, RLO = 0.

BEU
Block End Unconditional
BEU (block end unconditional) terminates the program scan in the current block and causes a jump to
the block that called the current block. The program scan resumes with the first instruction that follows
the block call.
Example:
A
I 1.0
JC
NEXT
Jump to NEXT jump label if RLO = 1 (I 1.0 = 1).
L
IW4
Continue here if no jump is executed.
T
IW10
A
I 6.0
A
I 6.1
S
M 12.0
BEU
Block end unconditional.
NEXT: NOP 0
Continue here if jump is executed.

CALL
Block Call
CALL <logic block identifier> is used to call functions (FCs) or function blocks (FBs), system functions
(SFCs) or system function blocks (SFBs) you created yourself or to call the standard pre-programmed
blocks shipped by Siemens. The CALL instruction calls the FC and SFC or the FB and SFB that you
input as an address, independent of the RLO or any other condition.
Example: CALL FB1, DB1 or CALL FILLVAT1, RECIPE1
Logic Block
FC
SFC
FB
SFB

Block Type
Function
System function
Function block
System function block

Absolute Address Call Syntax


CALL FCn
CALL SFCn
CALL FBn1,DBn2
CALL SFBn1,DBn2

Example 1: Assigning parameters to the FC6 call


CALL FC6
Formal parameter
Actual parameter
NO OF TOOL := MW100
TIME OUT
:= MW110
FOUND := Q 0.1
PAGE 57

ERROR

:= Q 100.0

Example 2: Calling an SFC without parameters


CALL SFC43 Call SFC43 to re-trigger watchdog timer (no parameters).
Example 3: Calling FB99 with instance data block DB1
CALL FB99,DB1
Formal parameter
Actual parameter
MAX_RPM
:= #RPM1_MAX
MIN_RPM
:= #RPM2
MAX_POWER := #POWER
MAX_TEMP
:= #TEMP
Example 4: Calling FB99 with instance data block DB2
CALL FB99,DB2
Formal parameter
Actual parameter
MAX_RPM
:= #RPM3_MAX
MIN_RPM
:= #RPM2
MAX_POWER := #POWER1
MAX_TEMP
:= #TEMP

CC
Conditional Call
CC <logic block identifier> (conditional block call) calls a logic block if RLO=1. CC is used to call logic
blocks of the FC or SFC type without parameters.
Example:
A
I 2.0
Check signal state at input I 2.0.
CC
FC6
Call function FC6 if I 2.0 is "1".
A
M 3.0
Executed upon return from called function (I 2.0 = 1) or directly after A I 2.0
statement if I 2.0 = 0.

UC
Unconditional Call
UC <logic block identifier> (unconditional block call) calls a logic block of the FC or SFC type. UC is
like the CALL instruction, except that you cannot transfer parameters with the called block.
Example 1:
UC
FC6

Call function FC6 (without parameters).

Example 2:
UC
SFC43 Call system function SFC43 (without parameters).

PAGE 58

Shift Instructions
SLD
Shift Left Double Word (32-Bit)
SLD <number>: The number of shifts is specified by the address <number>. The permissible value
range is from 0 to 32. The status word bits CC 0 and OV are reset to zero if <number> is greater than
zero. If <number> is equal to zero, then the shift instruction is regarded as a NOP operation.
Examples:
ACCU 1-H
Bit:
31
ACCU 1 before execution of SLD 5: 0101
ACCU 1 after execution of SLD 5: 1110

Example 1:
L
MD4
SLD
5
T
MD8

1111
1100

0110
1000

ACCU 1-L
16
0100
1011

15
0101
1010

1101
0111

0011
0110

0
1011
0000

Load value into ACCU 1.


Shift bits in ACCU 1 five places to the left.
Transfer result to MD8.

SLW
Shift Left Word (16-Bit)
SLW <number>: The number of shifts is specified by the address <number>. The permissible value
range is from 0 to 15. The status word bits CC 0 and OV are reset to zero if <number> is greater than
zero. If <number> is equal to zero, then the shift instruction is regarded as a NOP operation.
Examples:
ACCU 1-H
Bit:

31

ACCU 1 before execution of SLW 5:


ACCU 1 after execution of SLW 5:

0101
0101

Example 1:
L
MW4
SLW 5
T
MW8

1111
1111

0110
0110

ACCU 1-L
16

15

0100
0100

0101
1010

0
1101
0111

0011
0110

1011
0000

Load value into ACCU 1.


Shift the bits in ACCU 1 five places to the left.
Transfer result to MW8.

SRD
Shift Right Double Word (32-Bit)
SRD <number>: The number of shifts is specified by the address <number>. The permissible value
range is from 0 to 32. The status word bits CC 0 and OV are reset to 0 if <number> is greater thnan
zero.
Examples:
ACCU 1-H
ACCU 1-L
Bit:
31
ACCU 1 before execution of SRD 7: 0101
ACCU 1 after execution of SRD 7: 0000

Example 1:
L
MD4
SRD 7
T
MD8

1111
0000

0110
1011

16
0100
1110

15
0101
1100

1101
1000

0011
1011

0
1011
1010

Load value into ACCU 1.


Shift bits in ACCU 1 seven places to the right.
Transfer result to MD8.

SRW
Shift Right Word (16-Bit)
SRW <number>: The number of shifts is specified by the address <number>. The permissible value
range is from 0 to 15. The status word bits CC 0 and OV are reset to 0 if <number> is greater than
zero.
PAGE 59

Examples:
ACCU 1-H

ACCU 1-L

Bit:
31
ACCU 1 before execution of SRW 6:
0011
1011
ACCU 1 after execution of SRW 6: 0101
0100

Example 1:
L
MW4
SRW 6
T
MW8

0101

1111

16
0110

1111

0110

0100

Load value into ACCU 1.


Shift bits in ACCU 1-L six places to the right.
Transfer result to MW8.

PAGE 60

15
0100
0000

0
0101

1101

0001

0111

Timer Instructions

PAGE 61

SD
On-Delay Timer
SD <timer> starts the addressed timer when the RLO transitions from "0" to "1". The programmed
time interval elapses as long as RLO = 1. The time is stopped if RLO transitions to "0" before the
programmed time interval has expired. This timer start instruction expects the time value and the time
base to be stored as a BCD number in ACCU 1-L.
Example:
A
I 2.1
L
S5T#10s
SD
T1

Preset 10 seconds into ACCU 1.


Start timer T1 as an on-delay timer.

PAGE 62

PAGE 63

SE
Extended Pulse Timer
SE <timer> starts the addressed timer when the RLO transitions from "0" to "1". The programmed
time interval elapses, even if the RLO transitions to "0" in the meantime. The programmed time
interval is started again if RLO transitions from "0" to "1" before the programmed time has expired.
This timer start command expects the time value and the time base to be stored as a BCD number in
ACCU 1-L.
Example:
A
I 2.1
L
S5T#10s
Preset 10 seconds into ACCU 1.
SE
T1
Start timer T1 as an extended pulse timer.
A
I 2.2
R
T1
Reset timer T1.
A
T1
Check signal state of timer T1.
=
Q 4.0

PAGE 64

PAGE 65

SF
Off-Delay Timer
SF <timer> starts the addressed timer when the RLO transitions from "1" to "0". The programmed
time elapses as long as RLO = 0. The time is stopped if RLO transitions to "1" before the programmed
time interval has expired. This timer start command expects the time value and the time base to be
stored as a BCD number in ACCU 1-L.
Example:
A
I 2.1
L
S5T#10s
Preset 10 seconds into ACCU 1.
SF
T1
Start timer T1 as an off-delay timer.
A
I 2.2
R
T1
Reset timer T1.
A
T1
Check signal state of timer T1.
=
Q 4.0

PAGE 66

PAGE 67

SP
Pulse Timer
SP <timer> starts the addressed timer when the RLO transitions from "0" to "1". The programmed
time elapses as long as RLO = 1. The timer is stopped if RLO transitions to "0" before the
programmed time interval has expired. This timer start command expects the time value and the time
base to be stored as a BCD number in ACCU 1-L.
Example:
A
I 2.1
L
S5T#10s
Preset 10 seconds into ACCU 1.
SP
T1
Start timer T1 as a pulse timer.
A
I 2.2
R
T1
Reset timer T1.
A
T1
Check signal state of timer T1.
=
Q 4.0

PAGE 68

PAGE 69

SS
Retentive On-Delay Timer
SS <timer> (start timer as a retentive ON timer) starts the addressed timer when the RLO transitions
from "0" to "1". The full programmed time interval elapses, even if the RLO transitions to "0" in the
meantime. The programmed time interval is re-triggered (started again) if RLO transitions from "0" to
"1" before the programmed time has expired. This timer start command expects the time value and
the time base to be stored as a BCD number in ACCU 1-L.
Example:
A
I 2.1
L
S5T#10s
Preset 10 seconds into ACCU 1.
SS
T1
Start timer T1 as a retentive on-delay timer.
A
I 2.2
R
T1
Reset timer T1.
A
T1
Check signal state of timer T1.
=
Q 4.0

PAGE 70

PAGE 71

PAGE 72

R
Reset Timer
R <timer> stops the current timing function and clears the timer value and the time base of the
addressed timer word if the RLO transitions from 0 to 1.
Example:
A
I 2.1
R T1
Check the signal state of input I 2.1 If RLO transitioned from 0 = 1, then reset timer
T1.

PAGE 73

Word Logic Instructions


AD
AND Double Word (32-Bit)
AD (AND double word) combines the contents of ACCU 1 with ACCU 2 or a 32-bit constant bit by bit
according to the Boolean logic operation AND. A bit in the result double word is "1" only when the
corresponding bits of both double words combined in the logic operation are "1".
Examples:
Bit:
31
ACCU 1 before execution of AD:
0101
0000
ACCU 2 or 32-bit constant:
1111
0011
Result (ACCU 1) after execution of AD:0101 0000

L
L
AD
T

ID20
ID24
MD8

1111
1000
1000

1100
0101
0100

1000
0111
0000

1001
0110
0000

0011
1011
0011

Bit:0
1011
0101

0001

Load contents of ID20 into ACCU 1.


Load contents of ACCU 1 into ACCU 2.Load contents of ID24 into ACCU 1.
Combine bits from ACCU 1 with ACCU 2 by AND, store result in ACCU 1.
Transfer result to MD8.

AW
AND Word (16-Bit)
AW (AND word) combines the contents of ACCU 1-L with ACCU 2-L or a 16 bit-constant bit by bit
according to the Boolean logic operation AND. A bit in the result word is "1" only when the
corresponding bits of both words combined in the logic operation are "1".
Examples:
Bit:
15
Bit:0
ACCU 1-L before execution of AW:
0101 1001 0011 1011
ACCU 2-L or 16-bit constant:
1111 0110 1011 0101
Result (ACCU 1-L) after execution of AW:
0101 0000 0011 0001
L
L
AW
T

IW20
IW22

Load contents of IW20 into ACCU 1-L.


Load contents of ACCU 1 into ACCU 2.Load contents of IW22 into ACCU 1-L.
Combine bits from ACCU 1-L with ACCU 2-L bits by AND; store result in ACCU 1-L.
MW 8 Transfer result to MW8.

OD
OR Double Word (32-Bit)
OD (OR double word) combines the contents of ACCU 1 with ACCU 2 or a 32-bit constant bit by bit
according to the Boolean logic operation OR. A bit in the result double word is "1" when at least one of
the corresponding bits of both double words combined in the logic operation is "1".
Examples:
Bit:

31

ACCU 1 before execution of OD:


0101
0000
ACCU 2 or 32-bit constant:
1111
0011
Result (ACCU 1) after execution of OD:1111 0011

L
L
OD
T

OW

ID20
ID24
MD8

Bit:0
1111
1000
1111

1100
0101
1101

1000
0111
1111

0101
0110
0111

0011
1011
1011

1011
0101

1111

Load contents of ID20 into ACCU 1.


Load contents of ACCU 1 into ACCU 2.Load contents of ID24 into ACCU 1.
Combine bits from ACCU 1 with ACCU 2 bits by OR; store result in ACCU 1.
Transfer result to MD8.

OR Word (16-Bit)
PAGE 74

OW (OR word) combines the contents of ACCU 1-L with ACCU 2-L or a 16 bit-constant bit by bit
according to the Boolean logic operation OR. A bit in the result word is "1" when at least one of the
corresponding bits of both words combined in the logic operation is "1".
Examples:
Bit:
15
Bit:0
ACCU 1-L before execution of OW:
0101 0101 0011 1011
ACCU 2-L or 16 bit constant:
1111 0110 1011 0101
Result (ACCU 1-L) after execution of OW:
1111 0111 1011 1111
L
L
OW
T

IW20
IW22
MW8

Load contents of IW20 into ACCU 1-L.


Load contents of ACCU 1 into ACCU 2.Load contents of IW22 into ACCU 1-L.
Combine bits from ACCU 1-L with ACCU 2-L by OR, store result in ACCU 1-L.
Transfer result to MW8.

XOD
Exclusive OR Double Word (32-Bit)
XOD (XOR double word) combines the contents of ACCU 1 with ACCU 2 or a 32-bit constant bit by
bit according to the Boolean logic operation XOR (Exclusive Or). A bit in the result double word is "1"
when only one of the corresponding bits of both double words combined in the logic operation is "1".
Examples:
Bit:

31

ACCU 1 before execution of XOD: 0101


0000
ACCU 2 or 32-bit constant:
1111
0011
Result (ACCU 1) after execution of OD:1010 0011

L
L
XOD
T

ID20
ID24
MD8

Bit:0
1111
1000
0111

1100
0101
1001

1000
0111
1111

0101
0110
0011

0011
1011
1000

1011
0101
1110

Load contents of ID20 into ACCU 1.


Load contents of ACCU 1 into ACCU 2.Load contents of ID24 into ACCU 1.
Combine bits from ACCU 1 with ACCU 2 by XOR; store result in ACCU 1.
Transfer result to MD8.

XOW
Exclusive OR Word (16-Bit)
XOW (XOR word) combines the contents of ACCU 1-L with ACCU 2-L or a 16 bit-constant bit by bit
according to the Boolean logic operation XOR. A bit in the result word is "1" only when one of the
corresponding bits of both words combined in the logic operation is "1".
Examples:
Bit:
15
Bit:0
ACCU 1 before execution of XOW:
0101 0101 0011 1011
ACCU 2-L or 16-bit constant:
1111 0110 1011 0101
Result (ACCU 1) after execution of XOW:
1010 0011 1000 1110
L
L
XOW
T

IW20
IW22
MW8

Load contents of IW20 into ACCU 1-L.


Load contents of ACCU 1 into ACCU 2.Load contents of ID24 into ACCU 1-L.
Combine bits of ACCU 1-L with ACCU 2-L bits by XOR, store result in ACCU 1-L.
Transfer result to MW8.

PAGE 75

Accumulator Instructions
DEC
Decrement ACCU 1-L-L
Example:
L
MB250
Load the value of MB250
DEC 1
Instruction "Decrement ACCU 1-L-L by 1"; store result in ACCU 1-L-L.
T
MB250
Transfer the contents of ACCU 1-L-L (result) back to MB250.

INC
Increment ACCU 1-L-L
Example:
L
MB22
Load the value of MB22
INC
1
Instruction "Increment ACCU 1 (MB22) by 1"; store result in ACCU 1-L-L
T
MB22
Transfer the contents of ACCU 1-L-L (result) back to MB22

TAK
Toggle ACCU 1 with ACCU 2
Example:
Subtract smaller value from greater value:
Example:
L
MW10
Load contents of MW10 into ACCU 1-L.
L
MW12
Load contents of ACCU 1-L into ACCU 2-L.Load contents of MW12
into ACCU 1>I
Check if ACCU 2-L (MW10) greater than ACCU 1-L (MW12).
JC
NEXT
Jump to NEXT jump label if ACCU 2 (MW10) is greater than ACCU 1
(MW12).
TAK
Swap contents ACCU 1 and ACCU 2
NEXT: -I
Subtract contents of ACCU 2-L from contents of ACCU 1-L.
T
MW14
Transfer result (= greater value minus smaller value) to MW14.

PAGE 76

PROGRAMMING EXAMPLES

PAGE 77

PAGE 78

PAGE 79

PAGE 80

PAGE 81

PAGE 82

PAGE 83

PAGE 84

AUTOMATION & CONTROL SYTEMS

PAGE 85

PUNE OFF: C-17,PAWANA IND. EST., T-204, MIDC - BHOSARI, PUNE-411026


MUMBAI OFF: 43, DATTANI CHAMBERS, NEAR NEW ERA THEATRE, S.V. ROAD, MALAD(W)
MUMBAI-64
TEL.: 022-8883737

PAGE 86

PAGE 87

PAGE 88

PAGE 89

PAGE 90

PAGE 91

PAGE 92

PAGE 93

PAGE 94

PAGE 95

PAGE 96

PAGE 97

----------------------------------------------------------------------------------------------------------------

PAGE 98

You might also like