You are on page 1of 64

Programming a

DENSO robot via a


SIMATIC S7-1500

SIMATIC S7-1500 / TIA Portal V15.1


Siemens
DENSO Command Slave Industry
Online
https://support.industry.siemens.com/cs/ww/en/view/109761432 Support
Legal information

Legal information
Use of application examples
Application examples illustrate the solution of automation tasks through an interaction of several
components in the form of text, graphics and/or software modules. The application examples are
a free service by Siemens AG and/or a subsidiary of Siemens AG (“Siemens”). They are non-
binding and make no claim to completeness or functionality regarding configuration and
equipment. The application examples merely offer help with typical tasks; they do not constitute
customer-specific solutions. You yourself are responsible for the proper and safe operation of the
products in accordance with applicable regulations and must also check the function of the
respective application example and customize it for your system.
Siemens grants you the non-exclusive, non-sublicensable and non-transferable right to have the
application examples used by technically trained personnel. Any change to the application
examples is your responsibility. Sharing the application examples with third parties or copying the
application examples or excerpts thereof is permitted only in combination with your own products.
The application examples are not required to undergo the customary tests and quality inspections
of a chargeable product; they may have functional and performance defects as well as errors. It is
your responsibility to use them in such a manner that any malfunctions that may occur do not
result in property damage or injury to persons.

Disclaimer of liability
Siemens shall not assume any liability, for any legal reason whatsoever, including, without
limitation, liability for the usability, availability, completeness and freedom from defects of the
application examples as well as for related information, configuration and performance data and
any damage caused thereby. This shall not apply in cases of mandatory liability, for example
under the German Product Liability Act, or in cases of intent, gross negligence, or culpable loss of
life, bodily injury or damage to health, non-compliance with a guarantee, fraudulent
non-disclosure of a defect, or culpable breach of material contractual obligations. Claims for
damages arising from a breach of material contractual obligations shall however be limited to the
© Siemens AG 2019 All rights reserved

foreseeable damage typical of the type of agreement, unless liability arises from intent or gross
negligence or is based on loss of life, bodily injury or damage to health. The foregoing provisions
do not imply any change in the burden of proof to your detriment. You shall indemnify Siemens
against existing or future claims of third parties in this connection except where Siemens is
mandatorily liable.
By using the application examples you acknowledge that Siemens cannot be held liable for any
damage beyond the liability provisions described.

Other information
Siemens reserves the right to make changes to the application examples at any time without
notice. In case of discrepancies between the suggestions in the application examples and other
Siemens publications such as catalogs, the content of the other documentation shall have
precedence.
The Siemens terms of use (https://support.industry.siemens.com) shall also apply.

Security information
Siemens provides products and solutions with industrial security functions that support the secure
operation of plants, systems, machines and networks.
In order to protect plants, systems, machines and networks against cyber threats, it is necessary
to implement – and continuously maintain – a holistic, state-of-the-art industrial security concept.
Siemens’ products and solutions constitute one element of such a concept.
Customers are responsible for preventing unauthorized access to their plants, systems, machines
and networks. Such systems, machines and components should only be connected to an
enterprise network or the Internet if and to the extent such a connection is necessary and only
when appropriate security measures (e.g. firewalls and/or network segmentation) are in place.
For additional information on industrial security measures that may be implemented, please visit
https://www.siemens.com/industrialsecurity.
Siemens’ products and solutions undergo continuous development to make them more secure.
Siemens strongly recommends that product updates are applied as soon as they are available
and that the latest product versions are used. Use of product versions that are no longer
supported, and failure to apply the latest updates may increase customer’s exposure to cyber
threats.
To stay informed about product updates, subscribe to the Siemens Industrial Security RSS Feed
at: https://www.siemens.com/industrialsecurity.

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 2
Table of contents

Table of contents
Legal information ......................................................................................................... 2
1 Introduction ........................................................................................................ 5
1.1 Overview............................................................................................... 5
1.2 Principle of operation............................................................................ 5
1.3 Aim of this application example ............................................................ 7
1.4 Components used ................................................................................ 7
2 Basics ................................................................................................................. 9
2.1 Structure of an industrial robot ............................................................. 9
2.2 DENSO Command Slave ................................................................... 10
2.2.1 Overview............................................................................................. 10
2.2.2 Block library DENSO Command Slave .............................................. 11
2.2.3 Interpreter on the DENSO robot controller ......................................... 11
2.3 Configuration of the block library ........................................................ 11
2.3.1 Block inputs and outputs .................................................................... 11
2.3.2 MC_SetDynamic ................................................................................ 14
3 Creating a program .......................................................................................... 15
3.1 Hardware configuration ...................................................................... 15
3.1.1 Robot as PROFINET device .............................................................. 15
3.1.2 Installing the GSDML file of the robot ................................................ 15
3.1.3 Integrating a robot into the hardware configuration ........................... 16
© Siemens AG 2019 All rights reserved

3.1.4 Connecting the SIMATIC S7 and the robot ........................................ 18


3.1.5 Controlling several robots using a SIMATIC S7 ................................. 18
3.2 Importing a block library ..................................................................... 19
3.2.1 Unpacking a block library ................................................................... 19
3.2.2 Opening a block library....................................................................... 19
3.2.3 Transferring blocks to the user program ............................................ 20
3.3 Basic program structure ..................................................................... 21
3.4 Block "SiemensDenso" ....................................................................... 22
3.4.1 MC_ReadAxesGroup ......................................................................... 23
3.4.2 MC_WriteAxesGroup ......................................................................... 24
3.4.3 Function blocks for robot movements ................................................ 25
3.5 Block "DensoControl" ......................................................................... 25
3.5.1 MC_Initialize ....................................................................................... 27
3.5.2 MC_ReadErrorID ................................................................................ 27
3.5.3 MC_Reset .......................................................................................... 28
3.5.4 MC_Power .......................................................................................... 28
3.5.5 MC_ReadActualPosition .................................................................... 29
3.5.6 MC_MoveJogJoint .............................................................................. 30
3.5.7 MC_MoveJogWork ............................................................................. 31
3.5.8 MC_TeachPosition ............................................................................. 32
3.6 Block "PickPlace" ............................................................................... 34
3.6.1 MC_GroupStop .................................................................................. 35
3.6.2 MC_GroupInterrupt ............................................................................ 35
3.6.3 MC_GroupContinue ........................................................................... 36
3.6.4 Define grinding procedure .................................................................. 36
3.6.5 Define coordinate system ................................................................... 39
3.6.6 MC_MoveAxisAbsolute ...................................................................... 39
3.6.7 MC_MoveLinearAbsolute ................................................................... 42
3.7 Block "Circle" ...................................................................................... 45
3.7.1 MC_DefinePositionVar ....................................................................... 46
3.7.2 MC_MoveDirectAbsolute.................................................................... 47
3.7.3 MC_MoveCircularAbsolute................................................................. 50
3.8 Operation ............................................................................................ 54

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 3
Table of contents

3.8.1 Status bar and Override ..................................................................... 54


3.8.2 Control functions ................................................................................ 54
3.8.3 Jogging the robot ................................................................................ 55
3.8.4 Example Programs ............................................................................. 57
3.9 Error handling ..................................................................................... 57
3.9.1 HMI only shows rhombuses ............................................................... 57
3.9.2 No connection to the robot controller ................................................. 59
3.9.3 CommandSlave-interface is not initialized ......................................... 59
4 Additional function .......................................................................................... 60
4.1 Safety Integrated ................................................................................ 60
4.2 Diagnostic messages ......................................................................... 60
5 Appendix .......................................................................................................... 61
5.1 Advanced example ............................................................................. 61
5.2 Service and support ........................................................................... 62
5.3 Contact partner ................................................................................... 63
5.3.1 DENSO Robotics ................................................................................ 63
5.4 Links and literature ............................................................................. 63
5.5 Change documentation ...................................................................... 64
© Siemens AG 2019 All rights reserved

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 4
1 Introduction

1 Introduction
The use of industrial robots continues to grow. They are increasingly being used in
machines and plants. Their standardized mechanics are well-developed and highly
flexible in terms of their movement; as a result, robots are increasingly replacing
expensive specialist mechanics. This also enables production from the first
production batch without expensive modifications to machines and plants.
Unfortunately, plant controllers and robot controllers usually constitute two different
systems. Communication between the two controllers usually occurs solely on the
bit level and the movement programs of the robot are stored on the robot controller
and may only be called up by the plant controller. It is therefore difficult to trigger
flexible robot reactions to specific plant events.
Also, the plant controller and the robot are usually very different in terms of their
programming, which means that it is not possible for one person to control both
systems. Interface and coordination problems are therefore pre-programmed.

1.1 Overview
A complete integration of the actuation and the movement control of the robot into
the machine and plant controller should make the use of the industrial robot in a
production plant easier and more flexible.
The following requirements are imposed on the automation task:
• The robot should be fully programmable via the machine and plant controller
© Siemens AG 2019 All rights reserved

(PLC).
• The robot can be operated via the same HMI of the PLC/machine (Single Point
of Operation).
• Robot diagnostics should be fully possible via the PLC.
• Further functions, such as Safety Integrated, should be integrable and
controllable via the PLC.

1.2 Principle of operation


A DENSO industrial robot is to be completely programmed and operated via a
SIMATIC S7-1500 controller. The block library DENSO Command Slave in the TIA
Portal is used for this purpose, which provides all function blocks required for this.
Additional programming of the robot controller is therefore not required.
Communication between the SIMATIC S7-1500 controller and the DENSO
industrial robot takes place via a PROFINET connection. All commands and status
information between the SIMATIC controller and the robot are exchanged via this
connection.

Note Several DENSO industrial robots can be controlled simultaneously via a


SIMATIC S7-1500 controller using the DENSO Command Slave block library in
the TIA portal.
However, the application example presented here is limited to the coupling of a
robot to a SIMATIC S7-1500.

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 5
1 Introduction

Diagram
The following diagram provides a schematic representation of the most important
components of the application example:

Figure 1-1: Schematic overview of the application example

SIMATIC CPU
S7-1500

VS-050

RC8

PROFINET IE

The motion control of the DENSO industrial robot is completely programmed in the
SIMATIC controller using the DENSO Command Slave block library. The robot is
assigned to the SIMATIC controller via a PROFINET connection as an I/O device.
© Siemens AG 2019 All rights reserved

The DENSO industrial robot consists of the DENSO RC8 robot controller and the
robot arm. The interpreter for the commands of the DENSO Command Slave block
library is installed on the robot controller. The interpreter receives the SIMATIC
controller commands and executes these, including the kinematics transformation,
via the robot mechanics.

Advantages
Programming a DENSO industrial robot via a SIMATIC S7-1500 controller using
the DENSO Command Slave block library in the TIA portal offers the following
advantages:
• All programming of robots and plants is performed in the TIA Portal. Training in
a robot manufacturer-specific development environment is not necessary.
• The movement program of the robot is fully integrated into the plant control
program and can be archived together with this program.
• The robot cell can be fully integrated into the SIMATIC plant controller.
• The operation of the robot can be integrated into the HMI user interface of the
plant.
• Diagnostic messages of the robot are sent to the SIMATIC controller where
they can be further processed and displayed on the HMI user interface of the
plant.
• Remote access to the SIMATIC controller for service and maintenance is
possible via standard functions and can be extended to the robot.

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 6
1 Introduction

1.3 Aim of this application example


The application example described here presents the use of the DENSO
Command Slave block library in the TIA Portal as an example and shows which
functions are basically necessary to be able to program and operate a DENSO
robot via a SIMATIC controller.
The application example is intended to familiarize you with the basic functions of
the DENSO Command Slave block library in the TIA Portal and offer you
assistance in decision-making and planning your own projects and user programs
with a DENSO industrial robot.
The functioning of the blocks from the DENSO Command Slave block library is
demonstrated by creating three function blocks in which the following robot
functions are programmed:
• Switching on the robot (DensoControl)
• Implementation of a simple pick & place movement (PickPlace)
• Moving the robot on a circular path (Circle)

The application example is suitable for programming a basic control of the robot in
the SIMATIC controller.
On the basis of this application example, a further example can be requested via
Siemens Robotics Support, in which the use of a DENSO industrial robot with an
extended range of functions, including the HMI user interface required for this, is
© Siemens AG 2019 All rights reserved

shown. For more information on this topic, refer to section 5.1.

A detailed description of the function and the application of the block library
DENSO Command Slave can be found in the DENSO documentation for the library
DENSO Command Slave, which is mentioned in section 5.4.

Required knowledge
Basic knowledge of the creation of a user program on the SIMATIC S7-1500 in the
TIA Portal or the hardware configuration is not taught in this application example,
but is assumed.
In addition, this application example is not an introduction to robotics. Basic
knowledge of the application and the capabilities of an industrial robot are also
required.

1.4 Components used


The application example was created with the following hardware and software
components:

Table 1-1: SIEMENS components


Component Quantity Article number Note
SIMATIC CPU S7-1516F 1 6ES7 516-3FN01- Firmware-Version 2.6
0AB0
TIA Portal V15.1
STEP 7 Professional 1 6ES7822-1AA04-
0YA5

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 7
1 Introduction

Table 1-2: DENSO components


Component Quantity Article number Note
RC8 with firmware 1 - Robot controller
2.5.0.12
VS-050 1 411200-0510 Robot arm
DENSO Command Slave 1 - Version: 2.0.4
DENSO GSD file for RC8 1 - Version: GSDML-V2.3-
with firmware 2.5.0.12 DENSOWAVE-RC8 RE
PNS-20130626.xml

This application example consists of the following components:

Table 1-3
Component File name Note
Documentation 109761432_S7-1500_DENSO_ This document
CommandSlave_DOCU_v11_en.pdf
TIA V15.1 Project DENSO_BASIC_EXAMPLE_1516F.zip Example program

Note In this application example, the DENSO RC8 robot controller is used. The
DENSO RC8A robot controller can also be used in the same way. In this case,
© Siemens AG 2019 All rights reserved

the Denso Command Slave interface is already installed on the robot controller
and only needs to be activated via a corresponding license. To do this, please
contact DENSO Robotics Support (see 5.3.1). The use of an RC8A enables the
use of the optional MRK functionality “Safety Motion” (see 4.1).

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 8
2 Basics

2 Basics
This section is intended to provide you with basic functions and background
information for using a DENSO industrial robot in connection with the DENSO
Command Slave block library.

2.1 Structure of an industrial robot


A DENSO industrial robot generally consists of the following components.

Figure 2-1: Construction of a DENSO industrial robot

2
1

3
© Siemens AG 2019 All rights reserved

Table 2-1
No. Component Function
1 Manipulator The manipulator represents the actual
robot mechanics, i.e. the kinematics,
which executes the ordered
commands.
2 Programming handset Teaching Pendant Settings on the robot controller can be
entered and checked via the Teaching
3 Connecting cable/ Teaching Pendant Pendant programming handset. The
robot can also be moved manually and
automatically using the programming
handset.
4 Robot controller The robot controller coordinates the
movements of the robot. The
5 Connection cable/ data cable/ engine calculation of the coordinate
cable transformation for the robot
movements and the control of the
robot axis motors occur in this
controller.
The robot controller may also contain
the power units for the robot axis
motors.

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 9
2 Basics

2.2 DENSO Command Slave


2.2.1 Overview

The following graphic gives an overview of how the DENSO Command Slave block
library works.

Figure 2-2: Function overview of DENSO Command Slave

Reading the process image

Function blocks of the user program

Reading of robot data

CmdSlv library block

CmdSlv library block

Writing of robot data

DENSO Command Slave (Library)


© Siemens AG 2019 All rights reserved

Function blocks of the user program

Writing the process image

Fieldbus
SIMATIC interface
PLC
PROFINET IE

Fieldbus
interface

Reading
The instructions

Write Cache Read Path calculation


memory for Program Actions
the next
command memory

DENSO Command Slave (Interpreter) Executing


The instructions

DENSO
Robot controller RC8

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 10
2 Basics

Option package DENSO Command Slave


The option package for a DENSO industrial robot DENSO Command Slave
consists of two parts:
• A block library for programming a DENSO industrial robot from a SIMATIC
controller.
• An interpreter on the robot controller which interprets the commands of the
function blocks from the SIMATIC controller and passes them on to the path
planning of the robot controller.

Program sequence
In the figure, the robot program, based on the block library DENSO Command
Slave, is embedded in the program sequence of the machine program in the
SIMATIC controller. The following functions of the robot program are executed with
each program cycle:
1. Reading of robot data.
2. Ordering the robot movement via the function blocks of the block library
DENSO Command Slave.
3. Writing of robot data.
In the robot controller, in addition to the active robot movement, the subsequent
movement is also stored in an intermediate memory. Only when the active
movement has been completed and the following movement has been transferred
to the program memory is the next movement order transferred to the robot
© Siemens AG 2019 All rights reserved

controller.

2.2.2 Block library DENSO Command Slave

The DENSO Command Slave block library provides various blocks for controlling a
DENSO industrial robot. The desired functions of the DENSO robot can be
controlled by simply calling the corresponding block from the block library.
By calling a function block from the block library, the corresponding commands are
transferred to the DENSO robot controller and interpreted there.

2.2.3 Interpreter on the DENSO robot controller

The interpreter on the DENSO robot controller accepts the commands of the
function blocks from the DENSO Command Slave block library in the robot
controller. There it processes one command in its own cycle, while another is
stored in the buffer. When the active command is completed, the command moves
from the cache and a new command is moved to the cache.

2.3 Configuration of the block library


2.3.1 Block inputs and outputs

The function blocks of the DENSO Command Slave block library are designed
according to the PLCopen standard. The motion blocks basically have the following
inputs and outputs:

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 11
2 Basics

Figure 2-3: Example of a PLCopen motion block of the block library

Table 2-2: Input and output parameters of the PLCopen movement blocks
Interface Description
Inputs
AxesGroup Index of the axis group (as defined in
section 3.4.1)
Execute Starts / buffers movement at positive edge.
© Siemens AG 2019 All rights reserved

Position Target position (data type depends on


movement type)
Velocity Speed for path movement
In %
• 0.0 < Value < 100:
Specified value is used
• Value = 0.0:
Smallest possible value 0.001 is used
• Value = -1.0:
Defined default value is used (see
section 2.3.2)
• Value < 0.0 and ≠ -1.0:
Not allowed, leads to error message
and shutdown of robot drives
Acceleration Acceleration for path movement
In %
• 0.0 < Value < 100:
Specified value is used
• Value = 0.0:
Smallest possible value 0.001 is used
• Value = -1.0:
Defined default value is used (see
section 2.3.2)
• Value < 0.0 and ≠ -1.0:
Not allowed, leads to error message
and shutdown of robot drives

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 12
2 Basics

Interface Description
Deceleration Deceleration of the path movement in %.
• 0.0 < Value < 100:
Specified value is used
• Value = 0.0:
Smallest possible value 0.001 is used
• Value = -1.0:
Defined default value is used (see
section 2.3.2)
• Value < 0.0 and ≠ -1.0:
Not allowed, leads to error message
and shutdown of robot drives
Buffermode Buffer mode selection (see section 3.6.5)
TransitionMode Transition mode selection (see section
3.6.5)
Transition parameters Definition of the transition parameters (see
section 3.6.5)
Outputs
Done Movement has been completed
successfully.
NextActionPermit The next function block can be processed.
Busy Function block has not yet been completely
© Siemens AG 2019 All rights reserved

executed.
Active Movement is currently being executed.
CommandAborted Instruction / movement aborted.
Error Error during execution of the function block.
ErrorID Indicates the origin of the error.
• 2800: Error in PLC
• 2801: Error in robot control
ErrorIDEx Error number
The assignment to the corresponding error
message can be found in the DENSO user
manual under "Error Code List".

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 13
2 Basics

2.3.2 MC_SetDynamic

Using the function block "MC_SetDynamic" (FB 2044), preset values for speed,
acceleration and deceleration can be defined. These are stored in the data block
"DB_DENSO_ROBOTS" and always called when the corresponding input
parameter of a motion block is assigned the value -1.0.

Figure 2-4: Define default values for speed, acceleration and deceleration

Table 2-3: Input parameters of "MC_SetDynamic"


Parameters Description
AxesGroup Index of the axis group (as defined in
section 3.4.1)
Execute Starts / buffers movement at positive edge.
© Siemens AG 2019 All rights reserved

Dynamic Default values "eRC_Dynamic"


The data type "eRC_Dynamic" consists of
the following real values:
• Velocity
• Accel
• Decel

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 14
3 Creating a program

3 Creating a program
This section explains how the Example Program for the application example was
set up.
This section explains the following:
• Integration of the robot in the hardware configuration of the TIA Portal project.
• Integration of the block library DENSO Command Slave.
• Programming of the basic functions of the robot.
• Programming of selected movement sequences of the robot.

3.1 Hardware configuration


3.1.1 Robot as PROFINET device

The DENSO robot is integrated into the hardware configuration of the TIA Portal
project as a PROFINET IO device. The robot is integrated via an additional
GSDML file to be integrated into the TIA Portal which contains the hardware
description of the robot and the possible data telegrams for the data exchange
between the SIMATIC controller and the robot.

3.1.2 Installing the GSDML file of the robot


© Siemens AG 2019 All rights reserved

The GSDML file of the robot is stored on the robot controller. To access the file,
open the following link with any Internet browser:
http://<RC8 Ethernet IP-Adresse>/eds/

Note Make sure that the IP address of the Ethernet interface is entered instead of the
IP address of the PROFINET interface.

Open the link of the GDSML file, copy the contents and save the file as a .xml file.

Figure 3-1: Obtain GSDML file from Robot controller.

The GSDML file generated in this way can then be integrated into the TIA Portal
using the management function for GSD files.

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 15
3 Creating a program

Figure 3-2: Importing the GSDML file

Select the GSDML file "DENSOWAVE-RC8 RE PNS".

Figure 3-3: Install GSDML file


© Siemens AG 2019 All rights reserved

3.1.3 Integrating a robot into the hardware configuration

Once the GSDML file has been integrated into the TIA portal, the DENSO RC8
robot controller in the corresponding firmware version can be integrated into the
hardware configuration of the TIA portal using drag & drop.
Double-clicking on the robot controller in the hardware configuration allows further
configuration of the components for data exchange with the SIMATIC controller.
So that the data necessary for controlling the robot by the SIMATIC controller can
be exchanged, the necessary data exchange telegrams with the robot controller
must still be configured in the hardware configuration. For this purpose, one
telegram each for 256 bytes in input and output direction must be integrated into
the Robot Control component of the hardware configuration by drag & drop from
the telegram selection.

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 16
3 Creating a program

Figure 3-4: Selection of the DENSO robot from the hardware catalog
© Siemens AG 2019 All rights reserved

Figure 3-5: Data exchange between SIMATIC controller and the robot

Figure 3-6: Data telegram

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 17
3 Creating a program

3.1.4 Connecting the SIMATIC S7 and the robot

Finally, the robot controller and the SIMATIC controller must be connected to each
other via PROFINET connection. For this purpose suitable IP addresses must be
assigned to the individual devices or in the hardware configuration.

Note Optionally, an HMI device, which can be used to control and monitor the robot
functions, can also be integrated into the configuration.

Figure 3-7: Connection of robots, SIMATIC controller and HMI


© Siemens AG 2019 All rights reserved

3.1.5 Controlling several robots using a SIMATIC S7

Using a suitable SIMATIC controller and the DENSO Command Slave block library,
up to ten DENSO robots can be controlled separately in the standard configuration.
Demarcation is defined in the library. On the SIMATIC control side, the remanence
of the memory has a limiting effect. The greater the number of robot positions
which have to be stored, the more retentive memory is required. However, the
remanence memory can be increased by a corresponding power supply module,
whereby even smaller controllers could store more robot positions and theoretically
control more than ten robots.
The data block supplied with the DENSO Command Slave block library contains
ten data arrays for data exchange between the SIMATIC controller and the robot.
The data are assigned to the corresponding robot via the defined telegram
addresses in the IO area of the SIMATIC controller, as defined in the hardware
configuration.
The assignment of the function blocks or the robot functions to the individual robots
in the user program is made via the AxesGroup input of the blocks, which
represents the index of the data array in the DB_DENSO_ROBOTS data block.
This functionality will be explained in more detail in the following sections.

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 18
3 Creating a program

Figure 3-8: Data pool for ten robots in data block DB_DENSO_ROBOTS

3.2 Importing a block library


3.2.1 Unpacking a block library

Before you can use the block library DENSO Command Slave in your user
© Siemens AG 2019 All rights reserved

program, the function blocks of the block library must be transferred to the TIA
Portal project.
The DENSO Command Slave block library for the TIA Portal is delivered as a
global library from which all function blocks of the block library can be transferred to
a TIA Portal project via drag&drop.
To make the global library usable for the TIA Portal, extract the global library
archive to a convenient location on the hard drive of your programming device.

Note The DENSO Command Slave block library for the TIA portal can be requested
directly from DENSO Robotics or downloaded from the DENSO website. The
version of the library must match the interpreter on the robot controller.

3.2.2 Opening a block library

After unpacking, you can open the global library via the access functions of the TIA
Portal.

Figure 3-9: Opening a block library

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 19
3 Creating a program

The block library DENSO Command Slave is stored as a copy template in the
global library.

3.2.3 Transferring blocks to the user program

The block library DENSO Command Slave is transferred to your user program by
simple drag&drop from the global library. Both the necessary PLC data types and
the function and data blocks from the copy templates of the global library must be
transferred to your TIA Portal project. All templates are in the "Master copies"
folder.
• First drag the object "Copy of PLC data types in DN_UDT" to the folder "PLC
data types" in your project. A subfolder is automatically created there which
contains all PLC data types of the DENSO Command Slave block library.
• Then drag the remaining objects into the "Program blocks" folder of your TIA
Portal project. A subfolder is also automatically created there which contains all
function blocks and data blocks of the DENSO Command Slave block library.

Figure 3-10: Copy templates of the Command Slave library


© Siemens AG 2019 All rights reserved

Now all necessary data types and blocks of the block library DENSO Command
Slave are contained in your TIA Portal project. The functions of the block library
can now be used in your user program.

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 20
3 Creating a program

3.3 Basic program structure


The graphic below shows the basic structure of the Example Program for the robot.

Figure 3-11: Schematic representation of the program sequence

MC_
Main Siemens
ReadAxes
Cycle Denso
Group

See
Denso
detailed
Control
graphic

See
PickPlace detailed
graphic

See
Circle detailed
graphic
© Siemens AG 2019 All rights reserved

MC_
WriteAxes
Group

The complete robot program is summarized in a function (FC) for better structuring.
In this FC, the blocks required for the robot are then called from the DENSO block
library and additional function blocks (FB) which contain special motion programs
of the robot.
The function "SiemensDenso" has the following structure:
• Reading the robot data via the block "MC_ReadAxesGroup".
• Executing the basic functions of the robot via the "DensoControl" block.
• Calling a block to execute a simple pick & place movement. This movement is
summarized in the "PickPlace" block.
• Calling a block to execute a simple circular movement. This movement is
summarized in the "Circle" block.
• Write the robot data via the block "MC_WriteAxesGroup".

Note The function "SiemensDenso" serves for a better structuring and is to be


understood accordingly as call FC. This means that it contains accesses to
global DBs and thus cannot be used as a library element.

Note The function block "DensoControl" contains accesses to global DBs of the
DENSO Command Slave library. It can therefore only be used as a library
element in conjunction with the DENSO Command Slave block library.

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 21
3 Creating a program

3.4 Block "SiemensDenso"


Create a new block by right-clicking in the Program blocks area.

Figure 3-12: Adding a new block


© Siemens AG 2019 All rights reserved

Select "Function", assign a name and determine the desired programming


language.

Figure 3-13: Creating a new function

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 22
3 Creating a program

Open the newly created function and add the blocks "MC_ReadAxesGroup"
(FB2301) and "MC_WriteAxesGroup" (FB2302) from the DENSO Command Slave
library.

3.4.1 MC_ReadAxesGroup

The "MC_ReadAxesGroup" (FB2301) block from the DENSO Command Slave


library allows the data from the robot controller to be read into the internal data
storage of the DENSO Command Slave block library in the SIMATIC controller.
This makes the data of the robot or the robot controller available to the user
program in the SIMATIC controller for the other blocks from the DENSO Command
Slave library.

Figure 3-14: Reading data from the robot


© Siemens AG 2019 All rights reserved

Via the "AxesGroup" input, which corresponds to the index of the data array in the
"DB_DENSO_ROBOTS" data block, and the "InAdress" input, at which the
hardware address of the configured telegram is communicated from the robot
controller to the SIMATIC controller, the assignment of the data to the
corresponding robot connected to the SIMATIC controller is established.
For the "InAdress" input, select the hardware address that was automatically
generated during the project engineering of the robot controller in section 3.1.3.
Type in the symbolic name. You can also find it in the standard variable table under
System constants. It consists of the names of the head module and the other
modules.

Figure 3-15: Hardware address in the standard variable table

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 23
3 Creating a program

Note The index of the "AxesGroup" input can then be used to assign the robot to the
program blocks of the robot program in the SIMATIC.

3.4.2 MC_WriteAxesGroup

The "MC_WriteAxesGroup" block (FB2302) from the DENSO Command Slave


library transfers the data from the "DB_DENSO_ROBOTS" data block to the robot
defined via the hardware address after the robot program has been processed in
the SIMATIC controller.

Figure 3-16: Writing data to the robot


© Siemens AG 2019 All rights reserved

The inputs of this block are connected according to the function block
"MC_ReadAxesGroup" from section 3.4.1.

CAUTION When entering the hardware addresses of the robot for reading and writing
the robot data, make sure that they are correctly assigned to the desired
robot.

The "Override" input also determines the percentage override of the programmed
speed:
• For axis-related movement commands, the override acts on the specified axis
velocity.
• For path-related movement commands, the override acts on the specified path
velocity.
The following example is provided to explain this connection in more detail. In the
figure, the maximum velocity, the programmed velocity and the resulting velocity
with the override are given as a percentage of the maximum velocity.

Figure 3-17: 50% override at 50% programmed velocity

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 24
3 Creating a program

Max. velocity

Programmed velocity
Override: 50%
Resulting velocity

Velocity
25% 50% 100%

If a travel command is defined at half the maximum possible velocity, the override
refers to this value. An override of 50% would therefore set the velocity of the robot
to a quarter of the maximum possible velocity.

3.4.3 Function blocks for robot movements

Now create the three function blocks "DensoControl", "PickPlace" and "Circle"
analog to "SiemensDenso".

Figure 3-18: Adding the function blocks


© Siemens AG 2019 All rights reserved

3.5 Block "DensoControl"


The function block "DensoControl" contains basic functions of the robot:

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 25
3 Creating a program

Table 3-1: Function overview "DensoControl"


Functionality Function block
Initialization MC_Initialize (FB2304)
Diagnostics data MC_ReadErrorID (FB2130)
MC_Reset (FB2134)
Switching on the robot drives MC_Power (FB2300)
Current Cartesian position and current axis MC_ReadActualPosition (FB2305)
position.

Move the robot in jog mode by axes or MC_MoveJogJoint (FB2013)


Cartesian MC_MoveJogWork (FB2014)
Teach position MC_TeachPosition (FB2306)

The function blocks are called as shown below:

Figure 3-19: Function calls "DensoControl".

Denso MC_
Control Initialize

MC_
© Siemens AG 2019 All rights reserved

Read
ErrorID

MC_Reset

MC_Power

MC_
ReadActual
Position

MC_
MoveJog
Joint

MC_
MoveJog
Work

MC_
Teach
Position

Create the input variable "axesGroup" of the data type INT. This variable
communicates the identity of the robot to be controlled to all subsequent function
blocks.

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 26
3 Creating a program

Figure 3-20: Creating the "axisGroup" input variable

3.5.1 MC_Initialize

Before data can be exchanged between the SIMATIC controller and the robot, the
interface of DENSO Command Slave must be initialized. To do this, call the block
"MC_Initialize" (FB2304).
The successful initialization of the interface is reported back to the user program
via the output "Done".
In addition, the block returns the following information:
• Interpreter version at the outputs:
– "RC_Major "
– "RC_Minor"
– "RC_Revision"

© Siemens AG 2019 All rights reserved

Version of the block library at the outputs:


– "PLC_Major"
– "PLC_Minor"
– "PLC_Revision"

Figure 3-21: Initialize command slave interface

3.5.2 MC_ReadErrorID

Now call the function block "MC_ReadErrorID" (FB2130) to read out the current
message buffer.
The robot controller contains a message buffer for several error messages. Up to
ten messages can be read from the message buffer simultaneously with a call of
the function block "MC_ReadErrorID".
In addition, the block also contains an offset input via which the remaining error
messages can be read out in groups of ten messages each.

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 27
3 Creating a program

Example
If there are 15 messages in the message buffer, the function block
"MC_ReadErrorID" must be called twice as follows:
• Call with offset 0 to read message 1 to 10
• Call with offset 6 to read message 6 to 15

Figure 3-22: Read out message buffer

3.5.3 MC_Reset

With the help of the function block "MC_Reset" (FB2134), the current error status
© Siemens AG 2019 All rights reserved

of a robot can be acknowledged.

Figure 3-23: Acknowledging error messages of the robot

3.5.4 MC_Power

Now call the function block "MC_Power" (FB2300) to switch on the drives of the
robot.

Figure 3-24: Switch on the drives of the robot

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 28
3 Creating a program

3.5.5 MC_ReadActualPosition

The function block "MC_ReadActualPosition" (FB2305) reads the Cartesian


position of the tool tip in relation to the currently selected coordinate system and
the positions of the individual axes.

Figure 3-25: Readout of the current robot position

The output "ActualPosition" outputs the current position in the defined structure
"eRC_PosDensoRobot". This contains all single values for the Cartesian position in
space including currently selected reference coordinate systems as well as the
positions of all axes.

Figure 3-26: "ActualPosition" output parameter


© Siemens AG 2019 All rights reserved

The cartesian position is described by the coordinates X, Y, Z, the rotation around


the corresponding coordinate axes RX, RY, RZ and the parameter "Figure".
If a cartesian value is specified, the axes of the robot can take different positions
for this position. The parameter "Figure" is used for the exact specification of the
robot alignment. The value thus describes the exact axis positions of the robot.
Further information can be found in the DENSO user manual under "Position
Data".

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 29
3 Creating a program

3.5.6 MC_MoveJogJoint

Using the function block "MC_MoveJogJoint" (FB2013), the individual axes of the
robot can be moved in jog mode.

Figure 3-27: Move robot axes individually in jog mode


© Siemens AG 2019 All rights reserved

Via the inputs "Axis1_Plus" to "Axis6_Minus" the robot axes can be rotated in the
corresponding direction. The inputs "Axis7_Plus" to "Axis8_Minus" are intended for
additional axes that can be influenced by the robot controller.

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 30
3 Creating a program

Figure 3-28: Robot axes

3.5.7 MC_MoveJogWork

Using the function block "MC_MoveJogWork" (FB2014), the Tool Center Point
(TCP), i.e. the tool tip, can be moved in the Cartesian coordinate system.
© Siemens AG 2019 All rights reserved

Figure 3-29: Move robot with cartesian jog mode

Via the inputs "X_Plus" to "RZ_Minus" the tool tip is moved along the
corresponding coordinate axes of the currently selected reference coordinate
system.

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 31
3 Creating a program

Figure 3-30: Cartesian robot position

The currently active coordinate systems are used as reference coordinate systems.
If a jog function is called during an active movement, the active and buffered
commands are aborted, the robot is braked and the drives are switched off with an
error message. The error message must then be acknowledged and the robot can
be switched on again.
© Siemens AG 2019 All rights reserved

Note Alternatively, the function block "MC_MoveJogTool" (FB 2015) can be used. This
block is used to move the tool tip in relation to its own coordinate system. Thus,
for example, movements in the direction of action of the tool are possible.

3.5.8 MC_TeachPosition

The function block "MC_TeachPosition" (FB2306) is used to teach in the current


position of the robot.

Figure 3-31: Teaching in a position

The position and the current coordinate system to which the Cartesian position
refers are stored in the data block "DB_DENSO_POSITIONS " (DB2999).

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 32
3 Creating a program

The storage location of the data in the position array of the data block is defined in
the "Index". The data block is located in the block library in the
CommandSlave/DN_DB directory.

Figure 3-32: Data block "DB_DENSO_POSITIONS"


© Siemens AG 2019 All rights reserved

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 33
3 Creating a program

3.6 Block "PickPlace"


The function block "PickPlace" contains a Example Program in the form of a simple
pick & place application. The robot goes through the following movement profile:
• Home position
• Pick position
• Place position
• Home position

Figure 3-33: Movement sequence of the simple pick & place application

The following table contains the functionalities used for this.

Table 3-2: "PickPlace" function overview


Functionality Function block
© Siemens AG 2019 All rights reserved

Cancel active and buffered commands MC_GroupStop (FB2201)


Interrupt active and buffered commands MC_GroupInterrupt (FB2200)
Continue active and buffered commands MC_GroupContinue (FB2203)
Move robot axes to a defined position

MC_MoveAxisAbsolute (FB2000)
Move the robot in a linear path to a MC_MoveLinearAbsolute (FB2004)
Cartesian position

The positions to be approached are located in the data block


"DB_DENSO_POSITIONS" in the following memory cells:
• DB_DENSO_POSITIONS.Position[1]
• …
• DB_DENSO_POSITIONS.Position[5]

The blocks are called as shown below.

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 34
3 Creating a program

Figure 3-34: "PickPlace" program sequence

PickPlace MC_Group
Stop

MC_Group
Interrupt

MC_Group
Continue

MC_Move
Axis
Absolute
MC_Move
Linear
Absolute
MC_Move
Linear
Absolute

MC_Move MC_Move
© Siemens AG 2019 All rights reserved

Linear Linear
Absolute Absolute

3.6.1 MC_GroupStop

First call up the function block "MC_GroupStop" (FB2201). This interrupts the
active as well as the buffered instruction or movement on a rising edge at the
"Execute" input.

Figure 3-35: Abort active and buffered commands

3.6.2 MC_GroupInterrupt

Using the function block "MC_GroupInterrupt" (FB2200), all commands are


interrupted.
As long as an interrupt is active, no further commands can be processed via the
command slave interface. The function block "MC_GroupStop" is also no longer
processed. If a GroupStop command is sent with an active interrupt, the drives of

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 35
3 Creating a program

the robot are deactivated and the last active and the buffered command are
aborted. Instructions are only accepted again if the program was continued with
"MC_GroupContinue".

Figure 3-36: Interrupting an active program

3.6.3 MC_GroupContinue

Call the function block "MC_GroupContinue" (FB2203) to continue a program


interrupted by the block "MC_GroupInterrupt".

Figure 3-37: Continuing an interrupted program


© Siemens AG 2019 All rights reserved

CAUTION If motion tasks are still active in the robot controller, they are continued
immediately by triggering the "MC_GroupContinue".

3.6.4 Define grinding procedure

The following parameters are used to define how successive motion commands
are to be processed:
• Buffermode
• TransitionMode
• Transition parameters

These parameters are specified at the inputs of each individual motion block. If the
behavior of a path is to be identical for all segments, variables can be created for
this purpose. These are assigned fixed values as shown below.

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 36
3 Creating a program

Figure 3-38: Define grinding procedure

When a block is called, these variables are linked at the corresponding inputs.

Table 3-3: Parameters for defining the grinding operation


Parameters Description
BufferMode Mode in which instructions are executed
• 0: Aborting OP0
– Robot brakes at 100%
– Robot comes to a standstill
– Next motion command is executed
• 1: Attaching
– Robot moves to current target
position
– Robot comes to a standstill
– Next motion command is executed
© Siemens AG 2019 All rights reserved

• 6: Overgrinding
– Robot is approaching the current
target position
– Robot terminates motion command
after "TransitionMode".
– Next motion command is executed
• 7: Aborting OP1
– Robot brakes at 100%
– Robot does not come to a standstill
– Next motion command is executed
• 8: Aborting OP2
– Robot decelerates with current
braking rate
– Robot comes to a standstill
– Next motion command is executed
• 9: Aborting OP3
– Robot decelerates with current
braking rate
– Robot does not come to a standstill
– Next motion command is executed

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 37
3 Creating a program

Parameters Description
TransitionMode Relevant when "BufferMode" = 6:
Specifies how the target point of a
movement is smoothed over.
• 0: Robot comes to a standstill (Encoder
value check Motion (axis coordinate
system))
• 3: Blending with distance parameters
• 10: Robot does not come to a standstill
• 11: Robot comes to a standstill
(Encoder value check Motion
(Cartesian coordinate system))
Transition parameters Relevant when "TransitionMode" = 3:
Distance to the target point in millimeters,
the earliest point from which the blending
should start.

Example
If distance-controlled grinding is required for two consecutive linear movements,
the parameters must be defined as shown below.

Figure 3-39: Grinding over with two consecutive operation commands


© Siemens AG 2019 All rights reserved

The variables "statBuffermode" "statTransitionMode" and "statTransitionParam"


now contain the information, for grinding over with a maximum distance of 10 mm
during successive movements.

Figure 3-40: Trajectory of the blended linear movements

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 38
3 Creating a program

3.6.5 Define coordinate system

Define which coordinate systems are to be used for Cartesian movement


commands. Create a variable of the type "eRC_CoordSys". This contains the index
of a tool coordinate system and a reference coordinate system.

Figure 3-41: Data type "eRC_CoordSys"

Figure 3-42: Define coordinate systems

Note This is not a library function.

3.6.6 MC_MoveAxisAbsolute
© Siemens AG 2019 All rights reserved

For the motion sequence of the robot, the function block "MC_MoveAxisAbsolute"
(FB2000) is first called to bring the robot arm into a basic position. This movement
block moves all axes of the robot to the axis values defined by the user. The
positions of each individual axis must be transferred to this block as the position.
The structure "eRC_Joint" collectively contains all single values.

Figure 3-43: Move axes to an axis-specific target position

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 39
3 Creating a program

Table 3-4: Parameters of the movement block "MC_MoveAxisAbsolute"


Interface Description
Inputs
AxesGroup Index of the axis group (as defined in
section 3.4.1)
Execute Starts / buffers movement at positive edge.
AxisPosition Axis-specific target position: " eRC_Joint".
Velocity Speed for path movement
In %
• 0.0 < Value < 100:
Specified value is used
• Value = 0.0:
Smallest possible value 0.001 is used
• Value = -1.0:
Defined default value is used (see
section 2.3.2)
• Value < 0.0 and ≠ -1.0:
Not allowed, leads to error message
and shutdown of robot drives
Acceleration Acceleration for path movement
In %
• 0.0 < Value < 100:
© Siemens AG 2019 All rights reserved

Specified value is used


• Value = 0.0:
Smallest possible value 0.001 is used
• Value = -1.0:
Defined default value is used (see
section 2.3.2)
• Value < 0.0 and ≠ -1.0:
Not allowed, leads to error message
and shutdown of robot drives
Deceleration Deceleration of the path movement in %.
• 0.0 < Value < 100:
Specified value is used

• Value = 0.0:
Smallest possible value 0.001 is used
• Value = -1.0:
Defined default value is used (see
section 2.3.2)
• Value < 0.0 and ≠ -1.0:
Not allowed, leads to error message
and shutdown of robot drives

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 40
3 Creating a program

Interface Description
BufferMode Mode in which instructions are executed
• 0: Aborting OP0
– Robot brakes at 100%
– Robot comes to a standstill
– Next motion command is executed
• 1: Attaching
– Robot moves to current target
position
– Robot comes to a standstill
– Next motion command is executed
• 6: Overgrinding
– Robot is approaching the current
target position
– Robot terminates motion command
after "TransitionMode".
– Next motion command is executed
• 7: Aborting OP1
– Robot brakes at 100%
– Robot does not come to a standstill
– Next motion command is executed
• 8: Aborting OP2
– Robot decelerates with current
© Siemens AG 2019 All rights reserved

braking rate
– Robot comes to a standstill
– Next motion command is executed
• 9: Aborting OP3
– Robot decelerates with current
braking rate
– Robot does not come to a standstill
– Next motion command is executed
TransitionMode Relevant when "BufferMode" = 6:
Specifies how the target point of a
movement is smoothed over.
• 0: Robot comes to a standstill (Encoder
value check Motion (axis coordinate
system))
• 3: Blending with distance parameters
• 10: Robot does not come to a standstill
• 11: Robot comes to a standstill
(Encoder value check Motion
(Cartesian coordinate system))
Transistion parameters Relevant when "TransitionMode" = 3:
Distance to the target point in millimeters,
the earliest point from which the blending
should start.
Outputs
Done Movement has been completed
successfully.
NextActionPermit Instruction has been completely transferred
and confirmed by the robot controller.
Busy Function block has not yet been completely
executed.
Active Movement is currently being executed.

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 41
3 Creating a program

Interface Description
CommandAborted Instruction / movement aborted.
Error Error during execution of the function block.
ErrorID Indicates the origin of the error.
• 2800: Error in PLC
• 2801: Error in robot control
ErrorIDEx Error number
The assignment to the corresponding error
message can be found in the DENSO user
manual under "Error Code List".

3.6.7 MC_MoveLinearAbsolute

The other positions of the robot are approached linearly using the function block
"MC_MoveLinearAbsolute" (FB2004). In a linear movement, the target position is
given in Cartesian form. The robot controller interpolates a straight path between
the current position and the target position. During such a movement, the robot
always moves its tool along the shortest (but not necessarily the fastest) path to the
target point.

Figure 3-44: Approach a Cartesian position in a linear path


© Siemens AG 2019 All rights reserved

Since the position is not specified by axis but by Cartesian, the input expects the
data type "eRC_Position". It contains all components of the Cartesian item (see
also section 3.7.1).

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 42
3 Creating a program

Table 3-5: Parameters of the movement block "MC_MoveLinearAbsolute"


Interface Description
Inputs
AxesGroup Index of the axis group (as defined in
section 3.4.1)
Execute Starts / buffers movement at positive edge.
Position Axis-specific target position:
"eRC_Position".
Velocity Speed for path movement
In %
• 0.0 < Value < 100:
Specified value is used
• Value = 0.0:
Smallest possible value 0.001 is used
• Value = -1.0:
Defined default value is used (see
section 2.3.2)
• Value < 0.0 and ≠ -1.0:
Not allowed, leads to error message
and shutdown of robot drives
Acceleration Acceleration for path movement
In %
• 0.0 < Value < 100:
© Siemens AG 2019 All rights reserved

Specified value is used


• Value = 0.0:
Smallest possible value 0.001 is used
• Value = -1.0:
Defined default value is used (see
section 2.3.2)
• Value < 0.0 and ≠ -1.0:
Not allowed, leads to error message
and shutdown of robot drives
Deceleration Deceleration of the path movement in %.
• 0.0 < Value < 100:
Specified value is used
• Value = 0.0:
Smallest possible value 0.001 is used
• Value = -1.0:
Defined default value is used (see
section 2.3.2)
• Value < 0.0 and ≠ -1.0:
Not allowed, leads to error message
and shutdown of robot drives
CoordSystem Tool and base coordinate systems to which
the Cartesian coordinates of the target
position refer.

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 43
3 Creating a program

Interface Description
BufferMode Mode in which instructions are executed
• 0: Aborting OP0
– Robot brakes at 100%
– Robot comes to a standstill
– Next motion command is executed
• 1: Attaching
– Robot moves to current target
position
– Robot comes to a standstill
– Next motion command is executed
• 6: Overgrinding
– Robot is approaching the current
target position
– Robot terminates motion command
after "TransitionMode".
– Next motion command is executed
• 7: Aborting OP1
– Robot brakes at 100%
– Robot does not come to a standstill
– Next motion command is executed
• 8: Aborting OP2
– Robot decelerates with current
© Siemens AG 2019 All rights reserved

braking rate
– Robot comes to a standstill
– Next motion command is executed
• 9: Aborting OP3
– Robot decelerates with current
braking rate
– Robot does not come to a standstill
– Next motion command is executed
TransitionMode Relevant when "BufferMode" = 6:
Specifies how the target point of a
movement is smoothed over.
• 0: Robot comes to a standstill (Encoder
value check Motion (axis coordinate
system))
• 3: Blending with distance parameters
• 10: Robot does not come to a standstill
11: Robot comes to a standstill (Encoder
value check Motion (Cartesian
coordinate system))
Transistion parameters Relevant when "TransitionMode" = 3:
Distance to the target point in millimeters,
the earliest point from which the blending
should start.
Outputs
Done Movement has been completed
successfully.
NextActionPermit Instruction has been completely transferred
and confirmed by the robot controller.
Busy Function block has not yet been completely
executed.
Active Movement is currently being executed.

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 44
3 Creating a program

Interface Description
CommandAborted Instruction / movement aborted.
Error Error during execution of the function block.
ErrorID Indicates the origin of the error.
• 2800: Error in PLC
• 2801: Error in robot control
ErrorIDEx Error number
The assignment to the corresponding error
message can be found in the DENSO user
manual under "Error Code List".

3.7 Block "Circle"


The function block "Circle" contains a Example Program in the form of a simple,
circular contour. The robot goes through the following movement profile:
• Start position of the circular path
• Circular path
• Home position of the robot

The following table contains the functionalities used for this.


© Siemens AG 2019 All rights reserved

Table 3-6: "Circle" function overview


Functionality Function block
Cancel active and buffered commands. MC_GroupStop (FB2201)
Interrupt active and buffered commands. MC_GroupInterrupt (FB2200)
Continue active and buffered commands. MC_GroupContinue (FB2203)
Write individual elements of the structure MC_DefinePositionVar (FC3)
APO.
Bring the robot into a Cartesian position. MC_MoveDirectAbsolute (FB2002)
Move robot on a defined circular path. MC_MoveCircularAbsolute (FB2006)

The basic status is located in the data block "DB_DENSO_POSITIONS" in the


following memory cell:
• DB_DENSO_POSITIONS.Position[1].

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 45
3 Creating a program

The blocks are called as shown below.

Figure 3-45: "Circle" program sequence

Circle MC_Group
Stop

MC_Group
Interrupt

MC_Group
Continue

MC_Define
PositionVar

MC_Define
PositionVar

MC_Define
PositionVar

MC_Move
© Siemens AG 2019 All rights reserved

Direct
Absolute
MC_Move
Circular
Absolute
MC_Move
Direct
Absolute

3.7.1 MC_DefinePositionVar

With the function "MC_DefinePositionVar" (FC3) individual elements are written


into the structure "eRC_Position". This feature can be used to define Cartesian
positions during the running program.

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 46
3 Creating a program

Figure 3-46: Defining Cartesian position in the current program

Table 3-7: Inputs of the "MC_DefinePositionVar" function


Inputs Description
X, Y, Z Position on the axes of the active
coordinate system
RX, RY, RZ Rotation around the axes X, Y, Z
Fig Additional parameters for unambiguous axis
positioning in case of card position
© Siemens AG 2019 All rights reserved

presetting (see section 3.5.5)


J5 to J8 Positions of the optional additional axes J5
to J8

3.7.2 MC_MoveDirectAbsolute

The motion block "MC_MoveDirectAbsolute" (FB2002) moves the robot on an


unknown path to a cartesian defined position. This movement block executes a so-
called point-to-point (PTP) movement. The robot controller is given a Cartesian
target position and the path is not defined further there. The robot controller then
calculates how the axes need to be moved in order to be in the specified target
position as quickly as possible. Slower axes are moved less and faster axes are
used more.

Figure 3-47: Moving the robot into the home position

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 47
3 Creating a program

Since the position is Cartesian, the input "Position" expects the data type
"eRC_Position".

Table 3-8: Parameters of movement block "MC_MoveDirectAbsolute"


Interface Description
Inputs
AxesGroup Index of the axis group (as defined in
section 3.4.1)
Execute Starts / buffers movement at positive edge.
Position Axis-specific target position:
"eRC_Position".
Velocity Speed for path movement
In %
• 0.0 < Value < 100:
Specified value is used
• Value = 0.0:
Smallest possible value 0.001 is used
• Value = -1.0:
Defined default value is used (see
section 2.3.2)
• Value < 0.0 and ≠ -1.0:
Not allowed, leads to error message
© Siemens AG 2019 All rights reserved

and shutdown of robot drives


Acceleration Acceleration for path movement
In %
• 0.0 < Value < 100:
Specified value is used
• Value = 0.0:
Smallest possible value 0.001 is used
• Value = -1.0:
Defined default value is used (see
section 2.3.2)
• Value < 0.0 and ≠ -1.0:
Not allowed, leads to error message
and shutdown of robot drives
Deceleration Deceleration of the path movement in %.
• 0.0 < Value < 100:
Specified value is used
• Value = 0.0:
Smallest possible value 0.001 is used
• Value = -1.0:
Defined default value is used (see
section 2.3.2)
• Value < 0.0 and ≠ -1.0:
Not allowed, leads to error message
and shutdown of robot drives
CoordSystem Tool and base coordinate systems to which
the Cartesian coordinates of the target
position refer.

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 48
3 Creating a program

Interface Description
BufferMode Mode in which instructions are executed
• 0: Aborting OP0
– Robot brakes at 100%
– Robot comes to a standstill
– Next motion command is executed
• 1: Attaching
– Robot moves to current target
position
– Robot comes to a standstill
– Next motion command is executed
• 6: Overgrinding
– Robot is approaching the current
target position
– Robot terminates motion command
after "TransitionMode".
– Next motion command is executed
• 7: Aborting OP1
– Robot brakes at 100%
– Robot does not come to a standstill
– Next motion command is executed
• 8: Aborting OP2
– Robot decelerates with current
© Siemens AG 2019 All rights reserved

braking rate
– Robot comes to a standstill
– Next motion command is executed
• 9: Aborting OP3
– Robot decelerates with current
braking rate
– Robot does not come to a standstill
– Next motion command is executed
TransitionMode Relevant when "BufferMode" = 6:
Specifies how the target point of a
movement is smoothed over.
• 0: Robot comes to a standstill (Encoder
value check Motion (axis coordinate
system))
• 3: Blending with distance parameters
• 10: Robot does not come to a standstill
• 11: Robot comes to a standstill
(Encoder value check Motion
(Cartesian coordinate system))
Transition parameters Relevant when "TransitionMode" = 3:
Distance to the target point in millimeters,
the earliest point from which the blending
should start.
Outputs
Done Movement has been completed
successfully.
NextActionPermit Instruction has been completely transferred
and confirmed by the robot controller.
Busy Function block has not yet been completely
executed.
Active Movement is currently being executed.

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 49
3 Creating a program

Interface Description
CommandAborted Instruction / movement aborted.
Error Error during execution of the function block.
ErrorID Indicates the origin of the error.
• 2800: Error in PLC
• 2801: Error in robot control
ErrorIDEx Error number
The assignment to the corresponding error
message can be found in the DENSO user
manual under "Error Code List".

Since the path of a PTP movement is not known, inadequate testing can
result in considerable personal injury and material damage.

WARNING

3.7.3 MC_MoveCircularAbsolute

The motion block "MC_MoveCircularAbsolute" (FB2006) moves the robot on a


circular path to a Cartesian target position. For the robot controller to calculate the
© Siemens AG 2019 All rights reserved

circular path, an auxiliary position must be specified next to the target position.

Figure 3-48: Circular movement of the robot

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 50
3 Creating a program

Table 3-9: Parameters of movement block "MC_MoveCircularAbsolute"


Interface Description
Inputs
AxesGroup Index of the axis group (as defined in
section 3.4.1)
Execute Starts / buffers movement at positive edge.
AuxPos Cartesian auxiliary position: "eRC_Position"
EndPos Cartesian target position: " eRC_Position "
Velocity Speed for path movement
In %
• 0.0 < Value < 100:
Specified value is used
• Value = 0.0:
Smallest possible value 0.001 is used
• Value = -1.0:
Defined default value is used (see
section 2.3.2)
• Value < 0.0 and ≠ -1.0:
Not allowed, leads to error message
and shutdown of robot drives
Acceleration Acceleration for path movement
In %
© Siemens AG 2019 All rights reserved

• 0.0 < Value < 100:


Specified value is used
• Value = 0.0:
Smallest possible value 0.001 is used
• Value = -1.0:
Defined default value is used (see
section 2.3.2)
• Value < 0.0 and ≠ -1.0:
Not allowed, leads to error message
and shutdown of robot drives
Deceleration Deceleration of the path movement in %.
• 0.0 < Value < 100:
Specified value is used
• Value = 0.0:
Smallest possible value 0.001 is used
• Value = -1.0:
Defined default value is used (see
section 2.3.2)
• Value < 0.0 and ≠ -1.0:
Not allowed, leads to error message
and shutdown of robot drives
CoordSystem Tool and base coordinate systems to which
the Cartesian coordinates of the target
position refer.

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 51
3 Creating a program

Interface Description
BufferMode Mode in which instructions are executed
• 0: Aborting OP0
– Robot brakes at 100%
– Robot comes to a standstill
– Next motion command is executed
• 1: Attaching
– Robot moves to current target
position
– Robot comes to a standstill
– Next motion command is executed
• 6: Overgrinding
– Robot is approaching the current
target position
– Robot terminates motion command
after "TransitionMode".
– Next motion command is executed
• 7: Aborting OP1
– Robot brakes at 100%
– Robot does not come to a standstill
– Next motion command is executed
• 8: Aborting OP2
– Robot decelerates with current
© Siemens AG 2019 All rights reserved

braking rate
– Robot comes to a standstill
– Next motion command is executed
• 9: Aborting OP3
– Robot decelerates with current
braking rate
– Robot does not come to a standstill
– Next motion command is executed
TransitionMode Relevant when "BufferMode" = 6:
Specifies how the target point of a
movement is smoothed over.
• 0: Robot comes to a standstill (Encoder
value check Motion (axis coordinate
system))
• 3: Blending with distance parameters
• 10: Robot does not come to a standstill
• 11: Robot comes to a standstill
(Encoder value check Motion
(Cartesian coordinate system))
Transition parameters Relevant when "TransitionMode" = 3:
Distance to the target point in millimeters,
the earliest point from which the blending
should start.
Outputs
Done Movement has been completed
successfully.
NextActionPermit Instruction has been completely transferred
and confirmed by the robot controller.
Busy Function block has not yet been completely
executed.
Active Movement is currently being executed.

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 52
3 Creating a program

Interface Description
CommandAborted Instruction / movement aborted.
Error Error during execution of the function block.
ErrorID Indicates the origin of the error.
• 2800: Error in PLC
• 2801: Error in robot control
ErrorIDEx Error number
The assignment to the corresponding error
message can be found in the DENSO user
manual under "Error Code List".
© Siemens AG 2019 All rights reserved

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 53
3 Creating a program

3.8 Operation
If the HMI is loaded or simulated via Runtime, the following interface opens.

Figure 3-49: Start screen of the user interface.


1

3 2
© Siemens AG 2019 All rights reserved

3.8.1 Status bar and Override

The status bar contains basic information about the status of the robot as well as
the control of the override.

Figure 3-50: Status bar

1 2 3 4

1. "State" collectively indicates whether there is an error at the robot or the


CommandSlave interface.
2. "Power" indicates if the robot is switched on.
3. "Interpreter" indicates whether the robot interpreter is active and waiting for
instructions.
4. "Override" shows the currently set value. The buttons on the left and right of
the display control the override.

3.8.2 Control functions

The control functions can be used to control administrative functions of the robot.

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 54
3 Creating a program

Figure 3-51: Control functions

1. "Power On" switches on the robot.


2. "Power Off" switches off the robot.
3. "Reset" acknowledges all pending error messages. If an error message is
pending, the robot switches off and cannot be switched on again until the error
has been acknowledged.
© Siemens AG 2019 All rights reserved

4. "Abort" aborts all active and buffered commands, such as the Example
Programs.

3.8.3 Jogging the robot

The robot can be moved in either an axial or Cartesian manner in jog mode. To do
this, the corresponding mode must be selected as shown below.

Figure 3-52: Axial robot jogging


1

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 55
3 Creating a program

1. Press one of the two buttons to switch to the corresponding jog mode. "Jog in
Axis" moves the robot axially. With "Jog in Base", the robot is moved along the
coordinate axes. The inactive mode is greyed out.
2. Use the plus and minus buttons to move the corresponding axis (here A2) in
the positive or negative direction. The displayed axis value describes the
current axis position.
3. The "TEACH" button saves the current position. The index is defined by "Point
No.". When the operation is completed successfully, "Done" lights up. In the
event of a fault, "Error" lights up.
4. "Axis Overview" shows the assignment of the axis numbers to the actual axes
of the robot arm.

The following illustration shows the view for Cartesian jogging.

Figure 3-53: Cartesian robot jogging


© Siemens AG 2019 All rights reserved

Operation is identical to that for axial jogging.


1. Use the plus and minus buttons to move in a positive or negative direction
along the corresponding axis. The parameters RZ, RY and RX control the
rotation around the respective axes.
2. "Axis Overview" shows the coordinate systems of the robot. Movement occurs
in line with the global coordinate system, which is stored in the root of the robot
arm.

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 56
3 Creating a program

3.8.4 Example Programs

The example programs described in sections 3.6 and 3.7 can be started using the
buttons shown below.

Figure 3-54: Start Example Programs

When one of the buttons is pressed, the entire Example Program is run.

3.9 Error handling


In the following section, you will find some typical error cases and solutions to
rectify them.
© Siemens AG 2019 All rights reserved

3.9.1 HMI only shows rhombuses

Problem
On the user interface, rhombuses are displayed instead of the robot data.

Solution
The rhombuses indicate that the HMI has no connection to the SIMATIC controller.
If you are using a real panel, check whether the PROFINET connection to the
panel exists. To do this, first check the cable connection to your SIMATIC
controller. If there is no error here, terminate the runtime on the panel and open the
system settings. Select "PROFINET" and make sure that the check mark
"PROFINET IO enabled" is set.
If you use a runtime on your local machine, check whether the PG/PC interface is
configured correctly. To do this, select the HMI in the project tree in the TIA Portal
and open "Connections".

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 57
3 Creating a program

Figure 3-55: HMI connection


© Siemens AG 2019 All rights reserved

Check the configured access point of the HMI. Now open the Windows Control
Panel and select "Configure PG/PC Interface". In the window that opens, select the
access point in the drop-down menu (here: S7ONLINE) and assign the interface
that is connected to the SIMATIC controller.

Figure 3-56: Configuring the PG/PC interface

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 58
3 Creating a program

3.9.2 No connection to the robot controller

Problem
There is no connection to the robot controller. The device is not found via
PROFINET.

Solution
Make sure that all cable connections are correctly seated. The DENSO RC8 has
two separate interfaces for connection via Profinet and Ethernet. By default, the
robot controller has an Ethernet interface marked "LAN". The Profinet interface is
located on an additional plug-in card marked "Profinet".

3.9.3 CommandSlave-interface is not initialized

Problem
The connection to the robot has been established, but the robot cannot be moved.
Initialization has not been completed successfully. The block "MC_Initialize" does
not send a Done signal.

Solution
Check whether the hardware IDs of the input and output modules configured in the
hardware configuration match the inputs "InAddress" and "OutAddress" of the
© Siemens AG 2019 All rights reserved

function blocks "MC_ReadAxesGroup" and "MC_WriteAxesGroup".

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 59
4 Additional function

4 Additional function
This section is intended to give you a brief overview of additional functions that go
beyond the basic control of a DENSO industrial robot using the DENSO Command
Slave library.

4.1 Safety Integrated


The standard RC8 and the RC8A controller are conform to the performance level
PLe / Cat 4, SIL 3. By using the RC8A controller it is possible to purchase the
optional MRK functionality “Safety Motion”. With Safety Motion DENSO provides a
by ISO 13849-1 certified interface with the performance level, PLd / Cat 3, SlL2.
When integrated into a PLC the safety functions of the robot controller remain in
the robot controller and are transmitted safely to an equally safe SPS assembly
group to ensure that all safety devices function perfectly. For further information on
this topic, please contact DENSO Robotics.

4.2 Diagnostic messages


The error outputs of the blocks of the DENSO Command Slave block library output
error codes that can be displayed in text form on the HMI operating device using a
text list.
This text list must be requested separately from DENSO Robotics as it is not
automatically supplied with the block library.
© Siemens AG 2019 All rights reserved

This text list is maintained in the more extensive application example.

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 60
5 Appendix

5 Appendix
5.1 Advanced example
In addition to the basic application example described here, there is also a more
extensive example. This can currently be requested from Siemens Support.
The Advanced Example is designed so that it can be used directly on a real
machine because of its functionality. The visualization on the SIMATIC panel
accordingly offers significantly more operating options. The following functions, in
addition to others, are included in addition to the functions described in the basic
example:

Table 5-1: Additional functions of the Advanced Example


Function Description
More detailed diagnostic data The status messages on the user interface
are more detailed.
Individual movements The robot can move to the desired position
via the user interface in either an axial or
Cartesian manner.
Online programming Robot programs can be programmed
directly via the user interface.
Configuration Tool or base coordinate systems as well as
© Siemens AG 2019 All rights reserved

load data and software limit switches can


be viewed and modified via the user
interface.
Error messages Error codes are output as text messages on
the user interface using a text list.

Figure 5-1: Start screen of the DENSO Advanced example

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 61
5 Appendix

5.2 Service and support


Industry Online Support
Do you have any questions or need assistance?
Siemens Industry Online Support offers round the clock access to our entire
service and support know-how and portfolio.
The Industry Online Support is the central address for information about our
products, solutions and services.
Product information, manuals, downloads, FAQs, application examples and videos
– all information is accessible with just a few mouse clicks:
support.industry.siemens.com

Technical Support
The Technical Support of Siemens Industry provides you fast and competent
support regarding all technical queries with numerous tailor-made offers
– ranging from basic support to individual support contracts. Please send queries
to Technical Support via Web form:
www.siemens.com/industry/supportrequest

SITRAIN – Training for Industry


© Siemens AG 2019 All rights reserved

We support you with our globally available training courses for industry with
practical experience, innovative learning methods and a concept that’s tailored to
the customer’s specific needs.
For more information on our offered trainings and courses, as well as their
locations and dates, refer to our web page:
www.siemens.com/sitrain

Service offer
Our range of services includes the following:
• Plant data services
• Spare parts services
• Repair services
• On-site and maintenance services
• Retrofitting and modernization services
• Service programs and contracts
You can find detailed information on our range of services in the service catalog
web page:
support.industry.siemens.com/cs/sc

Industry Online Support app


You will receive optimum support wherever you are with the "Siemens Industry
Online Support" app. The app is available for Apple iOS, Android and Windows
Phone:
support.industry.siemens.com/cs/ww/en/sc/2067

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 62
5 Appendix

5.3 Contact partner


For further questions about DENSO industrial robots or the DENSO Command
Slave block library, or to request the necessary DENSO documentation, you will
find the corresponding contact details here.

5.3.1 DENSO Robotics

DENSO Europe B.V.


Waldecker Straße 9
64546 Mörfelden-Walldorf
Mail: info@densorobotics-europe.com
Phone: +49 6105 2735 150
Fax: +49 6105 2735 180
Web: www.densorobotics-europe.com

5.4 Links and literature


Table 5-2
© Siemens AG 2019 All rights reserved

No. Topic
\1\ Siemens Industry Online Support
https://support.industry.siemens.com
\2\ Link to the article page of the application example with DENSO robot
https://support.industry.siemens.com/cs/ww/en/view/109761432
\3\ Link to the article page of the application example with KUKA robot
https://support.industry.siemens.com/cs/document/109482123
\4\ Link to the article page of the application example with STÄUBLI robot
https://support.industry.siemens.com/cs/document/109762450
Siemens SIMATIC S7
\5\ SIMATIC STEP 7 Professional V15
System manual
Output: 12/2017
Document ID: Printout of the online help
Order number: -
https://support.industry.siemens.com/cs/ww/en/view/109755202
\6\ SIMATIC PROFINET system description
System manual
Output: 03/2012
Document ID: A5E00298287-06
Order number: -
https://support.industry.siemens.com/cs/ww/en/view/19292127
DENSO Command Slave
\7\ DENSO Robotics
https://www.densorobotics-europe.com
\8\ DENSO ROBOT User Manuals
https://www.denso-wave.com/en/robot/download/manual
\9\ DENSO ROBOT User Manuals CommandSlave
https://www.denso-wave.com/en/robot/download/application

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 63
5 Appendix

5.5 Change documentation


Table 5-3
Version Date Change
V1.0 10/2018 First version
V1.1 11/2019 Revision and Updating
© Siemens AG 2019 All rights reserved

S7-1500 / DENSO Command Slave


Entry-ID: 109761432, V1.1, 11/2019 64

You might also like