Introduction To RAPID: Operating Manual
Introduction To RAPID: Operating Manual
Introduction To RAPID: Operating Manual
Operating manual
Introduction to RAPID
Trace back information:
Workspace R13-2 version a2
Checked in 2013-09-30
Skribenta version 4.0.378
Operating manual
Introduction to RAPID
RobotWare 5.60
Table of contents
Overview of this manual ................................................................................................................... 7
Product documentation, IRC5 .......................................................................................................... 9
Safety ................................................................................................................................................ 11
Terminology ...................................................................................................................................... 12
1 RAPID basics 13
1.1 About RAPID .................................................................................................... 13
1.2 RAPID data ...................................................................................................... 14
1.2.1 Variables ............................................................................................... 14
1.2.2 Persistent variables ................................................................................. 16
1.2.3 Constants .............................................................................................. 17
1.2.4 Operators .............................................................................................. 18
1.3 Controlling the program flow ............................................................................... 19
1.3.1 IF THEN ................................................................................................ 19
1.3.2 Examples with logical conditions and IF statements ....................................... 21
1.3.3 FOR loop ............................................................................................... 22
1.3.4 WHILE loop ............................................................................................ 23
1.4 Rules and recommendations for RAPID syntax ....................................................... 24
1.4.1 General RAPID syntax rules ...................................................................... 24
1.4.2 Recommendations for RAPID code ............................................................. 25
3 Structure 39
3.1 RAPID procedure .............................................................................................. 39
3.2 Modules .......................................................................................................... 41
3.3 Structured design .............................................................................................. 42
Index 55
3HAC029364-001 Revision: B 5
© Copyright 2007, 2013 ABB. All rights reserved.
This page is intentionally left blank
Overview of this manual
Usage
This manual should be read before starting to program. It does not contain
everything you need to know, but you need to be familiar with most things in this
manual, before starting to write a RAPID program.
This manual does not replace the educational courses in RAPID, but can
complement it.
Prerequisites
There are no prerequisites for this manual.
Organization of chapters
The manual is organized in the following chapters:
Chapter Contents
1 RAPID basics The fundamentals of programming. This functionality is
similar in most high level programming languages.
2 RAPID robot functionality Describes the functionality that makes RAPID unique,
i.e. move instructions, I/O signals and communication
with a FlexPendant.
3 Structure Describes how to create procedures. Also contains a
brief introduction to how to apply a structured design of
a program.
4 Data with multiple values Describes arrays and complex data types.
5 RAPID instructions and func- A short explanation of what the RAPID instructions and
tions functions are.
6 What to read next Where to find more information if you want to continue
your studies of RAPID.
References
Reference Document Id
Technical reference manual - RAPID overview 3HAC16580-1
Technical reference manual - RAPID Instructions, Functions and 3HAC16581-1
Data types
Technical reference manual - RAPID kernel 3HAC16585-1
Continued
Reference Document Id
Operating manual - IRC5 with FlexPendant 3HAC16590-1
Revisions
Revision Description
- First edition
A The data type dnum added to Variables on page 14.
B Minor corrections.
Note
8 3HAC029364-001 Revision: B
© Copyright 2007, 2013 ABB. All rights reserved.
Product documentation, IRC5
Product manuals
Manipulators, controllers, DressPack/SpotPack, and most other hardware will be
delivered with a Product manual that generally contains:
• Safety information.
• Installation and commissioning (descriptions of mechanical installation or
electrical connections).
• Maintenance (descriptions of all required preventive maintenance procedures
including intervals and expected life time of parts).
• Repair (descriptions of all recommended repair procedures including spare
parts).
• Calibration.
• Decommissioning.
• Reference information (safety standards, unit conversions, screw joints, lists
of tools ).
• Spare parts list with exploded views (or references to separate spare parts
lists).
• Circuit diagrams (or references to circuit diagrams).
Application manuals
Specific applications (for example software or hardware options) are described in
Application manuals. An application manual can describe one or several
applications.
Continued
Operating manuals
The operating manuals describe hands-on handling of the products. The manuals
are aimed at those having first-hand operational contact with the product, that is
production cell operators, programmers, and trouble shooters.
The group of manuals includes (among others):
• Operating manual - Emergency safety information
• Operating manual - General safety information
• Operating manual - Getting started, IRC5 and RobotStudio
• Operating manual - Introduction to RAPID
• Operating manual - IRC5 with FlexPendant
• Operating manual - RobotStudio
• Operating manual - Trouble shooting IRC5, for the controller and manipulator.
10 3HAC029364-001 Revision: B
© Copyright 2007, 2013 ABB. All rights reserved.
Safety
Safety
Safety of personnel
A robot is heavy and extremely powerful regardless of its speed. A pause or long
stop in movement can be followed by a fast hazardous movement. Even if a pattern
of movement is predicted, a change in operation can be triggered by an external
signal resulting in an unexpected movement.
Therefore, it is important that all safety regulations are followed when entering
safeguarded space.
Safety regulations
Before beginning work with the robot, make sure you are familiar with the safety
regulations described in the manual Operating manual - General safety information.
3HAC029364-001 Revision: B 11
© Copyright 2007, 2013 ABB. All rights reserved.
Terminology
Terminology
About the terms
This manual is generally written for beginners, regarding both programming and
robots. However, some terms are used that may be familiar only to those with some
knowledge about programming and/or industrial robots. These terms are described
in this terminology.
Terms
Term Description
FlexPendant A hand held terminal for controlling a robot system.
Robot controller The robot controller is basically a computer that controls the robot.
Syntax Rules for how a language is allowed to be written. It can be seen as the
grammar of the programming language.
The syntax of a programming language is much more strict than in or-
dinary human language. Humans are intelligent and would understand
if I say "I fast run" instead of "I run fast". Computers, on the other hand,
are stupid and would not understand anything unless the syntax is ab-
solutely correct.
12 3HAC029364-001 Revision: B
© Copyright 2007, 2013 ABB. All rights reserved.
1 RAPID basics
1.1 About RAPID
1 RAPID basics
1.1 About RAPID
What is RAPID
If you want a computer to do something, a program is required. RAPID is a
programming language for writing such a program.
The native language of computers consists of only zeros and ones. This is virtually
impossible for humans to understand. Therefore computers are taught to understand
a language that is relatively easy to understand - a high level programming
language. RAPID is a high level programming language, it uses some English
words (like IF and FOR) to make it understandable for humans.
PROC main()
length := 10;
width := 5;
area := length * width;
TPWrite "The area of the rectangle is " \Num:=area;
ENDPROC
ENDMODULE
This program will calculate the area of a rectangle and write on the FlexPendant:
The area of the rectangle is 50
3HAC029364-001 Revision: B 13
© Copyright 2007, 2013 ABB. All rights reserved.
1 RAPID basics
1.2.1 Variables
1.2.1 Variables
Data types
There are many different data types in RAPID. For now, we will focus on the four
general data types:
Data type Description
num Numerical data, can be both integer and decimal number. For example
10 or 3.14159.
dnum Numerical data with higher resolution than num . Can be both integer (that
can handle large values) and decimal number (with more decimal places).
For example 4503599627370496 or 3.141592653589793.
string A text string. E.g. "This is a string". Maximum of 80 characters.
bool A boolean (logical) variable. Can only have the values TRUE or FALSE.
All other data types are based on these four. If you understand them, how to perform
operations on them and how they can be combined to more complex data types,
you can easily understand all data types.
Variable characteristics
A variable contains a data value. If the program is stopped and started the variable
keeps its value, but if the program pointer is moved to main the variable data value
is lost.
Declaring a variable
Declaring a variable is the way of defining a variable name and which data type it
should have. A variable is declared using the keyword VAR, according to the syntax:
VAR datatypeidentifier;
Example
VAR num length;
VAR dnum pi;
VAR string name;
VAR bool finished;
Assigning values
A value is assigned to a variable using the instruction :=
length := 10;
pi := 3.141592653589793;
name := "John"
finished := TRUE;
Note that := is not an equal sign. It means that the expression to the right is passed
to the variable on the left. There can only be a variable to the left of :=
For example, the following is a correct RAPID code resulting in reg1 having the
value 3:
reg1 := 2;
Continued
reg1 := reg1 + 1;
The assignment can be made at the same time as the variable declaration:
VAR num length := 10;
VAR dnum pi := 3.141592653589793;
VAR string name := "John";
VAR bool finished := TRUE;
3HAC029364-001 Revision: B 15
© Copyright 2007, 2013 ABB. All rights reserved.
1 RAPID basics
1.2.2 Persistent variables
Example
Consider the following code example:
PERS num nbr := 1;
PROC main()
nbr := 2;
ENDPROC
If this program is executed, the initial value is changed to 2. The next time the
program is executed the program code will look like this:
PERS num nbr := 2;
PROC main()
nbr := 2;
ENDPROC
16 3HAC029364-001 Revision: B
© Copyright 2007, 2013 ABB. All rights reserved.
1 RAPID basics
1.2.3 Constants
1.2.3 Constants
What is a constant?
A constant contains a value, just like a variable, but the value is always assigned
at declaration and after that the value can never be changed. The constant can be
used in the program in the same way as a variable, except that it is not allowed to
assign a new value to it.
Constant declaration
The constant is declared using the keyword CONST followed by data type, identifier
and assignment of a value.
CONST num gravity := 9.81;
CONST string greating := "Hello";
3HAC029364-001 Revision: B 17
© Copyright 2007, 2013 ABB. All rights reserved.
1 RAPID basics
1.2.4 Operators
1.2.4 Operators
Numerical operators
These operators operate on the data type num and return the data type num. I.e. in
the examples below, variables reg1, reg2 and reg3 are of data type num.
Relational operators
These operators return the data type bool.
In the examples, reg1 and reg2 are data type num while flag1 is bool.
Logical operators are often used together with the IF instruction. For code
examples, see Examples with logical conditions and IF statements on page 21.
String operator
18 3HAC029364-001 Revision: B
© Copyright 2007, 2013 ABB. All rights reserved.
1 RAPID basics
1.3.1 IF THEN
1.3.1 IF THEN
IF
The IF instruction can be used when a set of statements only should be executed
if a specified condition is met.
If the logical condition in the IF statement is true, then the program code between
the keywords THEN and ENDIF is executed. If the condition is false, that code is
not executed and the execution continues after ENDIF.
Example
In this example the string string1 is written on the FlexPendant if it is not an
empty string. If string1 is an empty string, i.e. contains no characters, then no
action is taken.
VAR string string1 := "Hello";
ELSE
An IF statement can also contain program code to be executed if the condition is
false.
If the logical condition in the IF statement is true, then the program code between
the keywords THEN and ELSE is executed. If the condition is false, then the code
between the keywords ELSE and ENDIF is executed.
Example
In this example the string string1 is written on the FlexPendant if it is not an
empty string. If string1 is an empty string, then the text "The string is empty" is
written.
VAR string string1 := "Hello";
Continued
ELSEIF
Sometimes you have more than two alternative program sequences. You can then
use ELSEIF to set up several alternatives.
Example
In this example different texts are written depending on the value on the variable
time.
VAR num time := 38.7;
20 3HAC029364-001 Revision: B
© Copyright 2007, 2013 ABB. All rights reserved.
1 RAPID basics
1.3.2 Examples with logical conditions and IF statements
Example
Use the IF statement to determine which text to write on the FlexPendant. Write
on the FlexPendant which part is fastest to produce.
VAR string part1 := "Shaft";
VAR num time1;
VAR string part2 := "Pipe";
VAR num time2;
PROC main()
time1 := 41.8;
time2 := 38.7;
IF time1 < time2 THEN
TPWrite part1 + " is fastest to produce";
ELSEIF time1 > time2 THEN
TPWrite part2 + " is fastest to produce";
ELSE
TPWrite part1 + " and " + part2 + " are equally fast to
produce";
ENDIF
ENDPROC
Example
If it takes more than 60 seconds to produce a part, write a message on the
FlexPendant. If the boolean variable full_speed is FALSE the message will tell
the operator to increase the robot speed. If full_speed is TRUE, the message will
ask the operator to examine the reason for the slow production.
VAR num time := 62.3;
VAR bool full_speed := TRUE;
PROC main()
IF time > 60 THEN
IF full_speed THEN
TPWrite "Examine why the production is slow";
ELSE
TPWrite "Increase robot speed for faster production";
ENDIF
ENDIF
ENDPROC
3HAC029364-001 Revision: B 21
© Copyright 2007, 2013 ABB. All rights reserved.
1 RAPID basics
1.3.3 FOR loop
FOR i FROM 1 TO 50 DO
sum := sum + i;
ENDFOR
It is not allowed to assign a value to the counter in the FOR loop.
22 3HAC029364-001 Revision: B
© Copyright 2007, 2013 ABB. All rights reserved.
1 RAPID basics
1.3.4 WHILE loop
WHILE syntax
The syntax for the WHILE loop is:
WHILE condition DO
program code to be repeated
ENDWHILE
If the condition is false to begin with, the code sequence will never be executed.
If the condition is true, the code sequence will be executed repeatedly until the
condition is no longer true.
Example
The following program code will add numbers (1+2+3+...) until the sum reaches
100.
VAR num sum := 0;
VAR num i := 0;
3HAC029364-001 Revision: B 23
© Copyright 2007, 2013 ABB. All rights reserved.
1 RAPID basics
1.4.1 General RAPID syntax rules
Semicolon
The general rule is that each statement ends with a semicolon.
Examples
Variable declaration:
VAR num length;
Assigning values:
area := length * width;
Most instruction calls:
MoveL p10,v1000,fine,tool0;
Exceptions
Some special instructions do not end with a semicolon. Instead there are special
keywords to indicate where they end.
Example of instructions that do not end with semicolon:
Instruction keyword Terminating keyword
IF ENDIF
FOR ENDFOR
WHILE ENDWHILE
PROC ENDPROC
These keywords are very important to create a good structure of a RAPID program.
They are thoroughly described later in this manual.
Comments
A line starting with ! will not be interpreted by the robot controller. Use this to write
comments about the code.
Example
! Calculate the area of the rectangle
area := length * width;
24 3HAC029364-001 Revision: B
© Copyright 2007, 2013 ABB. All rights reserved.
1 RAPID basics
1.4.2 Recommendations for RAPID code
Capitalized keywords
RAPID is not case sensitive, but it is recommended that all reserved words (e.g.
VAR, PROC) are written in capital letters. For a complete list of reserved words, see
Technical reference manual - RAPID overview.
Indentations
To make the programming code easy to grasp, use indentation. Everything inside
a PROC (between PROC and ENDPROC) should be indented. Everything inside an
IF-, FOR- or WHILE-statement should be further indented.
When programming with the FlexPendant, the indentation is done automatically.
Example
VAR bool repeat;
VAR num times;
PROC main()
repeat := TRUE;
times := 3;
IF repeat THEN
FOR i FROM 1 TO times DO
TPWrite "Hello!";
ENDFOR
ENDIF
END PROC
Note that it is easy to see where the IF statement starts and ends. If you would
have several IF statements and no indentations, it would be virtually impossible
to find which ENDIF corresponds to which IF.
3HAC029364-001 Revision: B 25
© Copyright 2007, 2013 ABB. All rights reserved.
This page is intentionally left blank
2 RAPID robot functionality
2.1.1 MoveL instruction
Overview
The advantage with RAPID is that, except for having most functionality found in
other high level programming languages, it is specially designed to control robots.
Most importantly, there are instructions for making the robot move.
MoveL
A simple move instruction can look like this:
MoveL p10, v1000, fine, tool0;
where:
• MoveL is an instruction that moves the robot linearly (in a strait line) from its
current position to the specified position.
• p10 specifies the position that the robot shall move to.
• v1000 specifies that the speed of the robot shall be 1000 mm/s.
• fine specifies that the robot shall go exactly to the specified position and
not cut any corners on its way to the next position.
• tool0 specifies that it is the mounting flange at the tip of the robot that should
move to the specified position.
MoveL syntax
MoveL ToPoint Speed Zone Tool;
ToPoint
The destination point defined by a constant of data type robtarget. When
programming with the FlexPendant you can assign a robtarget value by pointing
out a position with the robot. When programming offline, it can be complicated to
calculate the coordinates for a position.
robtarget will be explained further later, in section Composite data types on
page 48. For now, let us just accept that the position x=600, y=-100, z=800 can be
declared and assigned like this:
CONST robtarget p10 := [ [600, -100, 800], [1, 0, 0, 0], [0, 0, 0,
0], [ 9E9, 9E9, 9E9, 9E9, 9E9, 9E9] ];
Speed
The speed of the movement defined by a constant of data type speeddata. There
are plenty of predefined values, such as:
Predefined speeddata Value
v5 5 mm/s
v100 100 mm/s
v1000 1000 mm/s
Continued
Zone
Specifies a corner zone defined by a constant of data type zonedata. There are
many predefined values, such as:
Predefined zonedata Value
fine The robot will go to exactly the specified position
z10 The robot path can cut corners when it is less than
10 mm from ToPoint.
z50 The robot path can cut corners when it is less than
50 mm from ToPoint.
xx0700000358
Tool
Specifies the tool that the robot is using, defined by a persistent variable of data
type tooldata. If a welding gun, glue gun or a pen is attached to the robot, we
want to program the ToPoint for the tip of this tool. This is done automatically if a
tooldata is declared, assigned and used in the MoveL instruction.
tool0 is a predefined tool, representing the robot without any tool mounted on it,
and should not be declared or assigned. Any other tool should be declared and
assigned before being used.
28 3HAC029364-001 Revision: B
© Copyright 2007, 2013 ABB. All rights reserved.
2 RAPID robot functionality
2.1.2 Coordinate systems
xx0700000397
3HAC029364-001 Revision: B 29
© Copyright 2007, 2013 ABB. All rights reserved.
2 RAPID robot functionality
2.1.3 Examples with MoveL
Draw a square
A robot is holding a pen above a piece of paper on a table. We want the robot to
move the tip of the pen down to the paper and then draw a square.
xx0700000362
PROC main()
MoveL p10, v200, fine, tPen;
MoveL p20, v200, fine, tPen;
MoveL p30, v200, fine, tPen;
MoveL p40, v200, fine, tPen;
MoveL p10, v200, fine, tPen;
ENDPROC
Continued
xx0700000363
PROC main()
MoveL p10, v200, fine, tPen;
MoveL p20, v200, z20, tPen;
MoveL p30, v200, fine, tPen;
MoveL p40, v200, z50, tPen;
MoveL p10, v200, fine, tPen;
ENDPROC
3HAC029364-001 Revision: B 31
© Copyright 2007, 2013 ABB. All rights reserved.
2 RAPID robot functionality
2.1.4 Other move instructions
MoveJ
MoveJ is used to move the robot quickly from one point to another when that
movement does not have to be in a straight line.
Use MoveJ to move the robot to a point in the air close to where the robot will work.
A MoveL instruction does not work if, for example, the robot base is between the
current position and the programmed position, or if the tool reorientation is too
large. MoveJ can always be used in these cases.
The syntax of MoveJ is analog with MoveL.
Example
MoveJ p10, v1000, fine, tPen;
MoveC
MoveC is used to move the robot circularly in an arc.
Example
MoveL p10, v500, fine, tPen;
MoveC p20, p30, v500, fine, tPen;
MoveL p40, v500, fine, tPen;
xx0700000364
32 3HAC029364-001 Revision: B
© Copyright 2007, 2013 ABB. All rights reserved.
2 RAPID robot functionality
2.1.5 Execution behavior in corner zones
xx0700000387
Continued
Solution
If you want to set signals in corner zones, and not use fine, then there are special
instructions for solving this, e.g. MoveLDO, TriggL and DispL. For more information
about these instructions, see Technical reference manual - RAPID Instructions,
Functions and Data types.
34 3HAC029364-001 Revision: B
© Copyright 2007, 2013 ABB. All rights reserved.
2 RAPID robot functionality
2.2.1 I/O signals
About signals
Signals are used for communication with external equipment that the robot
cooperates with. Input signals are set by the external equipment and can be used
in the RAPID program to initiate when to perform something with the robot. Output
signals are set by the RAPID program and signals to the external equipment that
they should do something.
Setting up signals
Signals are configured in the system parameters for the robot system. It is possible
to set customized names for the signals. They should not be declared in the RAPID
program.
Digital input
A digital input signal can have the values 0 or 1. The RAPID program can read its
value but cannot set its value.
Example
If the digital input signal di1 is 1 then the robot will move.
IF di1 = 1 THEN
MoveL p10, v1000, fine, tPen;
ENDIF
Digital output
A digital output signal can have the values 0 or 1. The RAPID program can set the
value for a digital output signal, and thus affect external equipment. The value of
a digital output signal is set with the instruction SetDO.
Example
The robot has a grip tool that can be closed with the digital output signal do_grip.
The robot moves to the position where the pen is and closes the gripper. The robot
then moves to where it shall draw, now using the tool tPen.
MoveJ p0, vmax, fine, tGripper;
SetDO do_grip, 1;
MoveL p10, v1000, fine, tPen;
3HAC029364-001 Revision: B 35
© Copyright 2007, 2013 ABB. All rights reserved.
2 RAPID robot functionality
2.3.1 Communicate with the FlexPendant
TPWrite
Writing a message to the operator can be made with the instruction TPWrite.
TPWrite "Now producing exhaust pipes";
xx0700000374
Continued
TPReadFK
When writing a RAPID program that requires the operator to make a choice,
TPReadFK is a useful instruction. It allows up to five function keys to be displayed,
and the operator can choose which one to tap. The buttons will correspond to the
values 1 to 5.
VAR num answer;
TPReadFK answer, "Select which figure to draw", "Square",
"Triangle", stEmpty, stEmpty, stEmpty;
IF answer = 1 THEN
! code to draw square
ELSEIF answer = 2 THEN
! code to draw triangle
ELSE
! do nothing
ENDIF
xx0700000376
If the user selects "Square", the numeric variable answer gets the value 1. If the
user selects "Triangle", the numeric variable answer gets the value 2.
Five functions keys can be specified. If a key is not being used, write stEmpty
instead of the text on the button.
TPReadNum
TPReadNum allows the operator to write a number on the FlexPendant, rather than
just making a choice.
VAR num answer;
TPReadNum answer, "How many times shall I draw the figure?";
Continued
xx0700000378
The numeric variable answer gets the value that the operator types.
38 3HAC029364-001 Revision: B
© Copyright 2007, 2013 ABB. All rights reserved.
3 Structure
3.1 RAPID procedure
3 Structure
3.1 RAPID procedure
What is a procedure
So far, all the RAPID code examples we have looked at have only executed code
in the procedure main. The execution automatically starts in the procedure named
main, but there can be several procedures.
A procedure must be declared with the keyword PROC followed by the procedure
name, the procedure arguments and the program code that the procedure should
execute. A procedure is called from another procedure (except main, which is
automatically called when the program starts).
Example
If we want to draw four squares of different sizes, we could write almost the same
program code four times. This would result in a lot of code and make the program
difficult to understand. A much more efficient way to write this program is to make
a procedure that draws the square, and let the main procedure call this procedure
four times.
PERS tooldata tPen:= ...
CONST robtarget p10:= ...
PROC main()
! Call the procedure draw_square
draw_square 100;
draw_square 200;
draw_square 300;
draw_square 400;
ENDPROC
Continued
Procedure arguments
When declaring a procedure, all arguments are declared inside parenthesis after
the procedure name. This declaration contains data type and argument name for
each argument. The argument gets its value from the procedure call and the
argument acts as a variable inside the procedure (the argument cannot be used
outside its procedure).
PROC main()
my_procedure 14, "Hello", TRUE;
ENDPROC
40 3HAC029364-001 Revision: B
© Copyright 2007, 2013 ABB. All rights reserved.
3 Structure
3.2 Modules
3.2 Modules
About modules
A RAPID program can consist of one or several modules. Each module can contain
one or several procedures.
The small and simple programs that are shown in this manual only use one module.
In a more complex programming environment, some standard procedures, used
by many different programs, can be placed in a separate module.
Example
The module MainModule contains code that is specific for this program and
specifies what the robot should do in this particular program. The module
figures_module contains standard code that can be used by any program that
wants to draw a square, triangle or circle.
MODULE MainModule
...
draw_square;
...
ENDMODULE
MODULE figures_module
PROC draw_square()
...
ENDPROC
PROC draw_triangle()
...
ENDPROC
PROC draw_circle()
...
ENDPROC
ENDMODULE
Program modules
A program module is saved with the file ending .mod, e.g. figures_module.mod.
It makes no difference for the robot controller if the program is written in several
modules. The reason to use several program modules is only to make the program
easier to grasp and easier to reuse for the programmers.
There can only be one program active on the robot controller, i.e. only one of the
modules can contain a procedure named main.
System modules
A system module is saved with the file ending .sys, e.g. system_data_module.sys.
Data and procedures that should be kept in the system even if the program is
changed should be placed in a system module. For example, if a persistent variable
of type tooldata is declared in a system module, a recalibration of the tool is
preserved even if a new program is loaded.
3HAC029364-001 Revision: B 41
© Copyright 2007, 2013 ABB. All rights reserved.
3 Structure
3.3 Structured design
About structure
When first confronting a problem that you want to solve with a RAPID program, sit
down and analyze the problem and its components. If you start programming
without first thinking through the design, your program will be irrational. A well
designed program is less likely to contain errors and is easier for others to
understand. The time spent on design is paid back many times in testing and
maintenance of the program.
Example
Problem description
Create a RAPID program that can draw squares or triangles on a piece of paper.
Let the operator decide if it is a square or triangle that should be drawn next. When
the robot is finished drawing the figure the user shall be able to make the same
selection again until the operator taps on a Quit button.
When the robot has drawn 10 figures on the same paper, write a message that the
paper should be replaced and wait for the operator to tap an OK button.
Between drawings, check if di1 is 1. If it is, move to a pencil sharpener and set
do1 to 1 to start the sharpener and slowly move the pencil into the sharpener.
Normally we would need to redefine the tool since it gets shorter when it is
sharpened, but we will skip that step in this example.
Design structure
en0700000381
Continued
Program code
MODULE MainModule
PERS tooldata tPen := [ TRUE, [[200, 0, 30], [1, 0, 0 ,0]], [0.8,
[62, 0, 17], [1, 0, 0, 0], 0, 0, 0]];
CONST robtarget p10 := [ [600, -100, 800], [0.707170, 0, 0.707170,
0], [0, 0, 0, 0], [ 9E9, 9E9, 9E9, 9E9, 9E9, 9E9, 9E9] ];
CONST robtarget pSharp1 := [ [200, 500, 850], [1, 0, 0, 0], [0,
0, 0, 0], [ 9E9, 9E9, 9E9, 9E9, 9E9, 9E9, 9E9] ];
PERS num count := 0;
PROC main()
user_selection;
IF count >= 10 THEN
change_paper;
! Reset count
count := 0;
ENDIF
IF di=1 THEN
sharpen_pencil;
ENDIF
ENDPROC
PROC user_selection()
VAR num answer;
TPReadFK answer, "Select which figure to draw", "Square",
"Triangle", "Quit", stEmpty, stEmpty;
IF answer = 1 THEN
draw_square;
count := count + 1;
ELSEIF answer = 2 THEN
draw_triangle;
count := count + 1;
ELSE
quit;
ENDIF
ENDPROC
PROC draw_square()
VAR robtarget p20;
VAR robtarget p30;
VAR robtarget p40;
Continued
PROC draw_triangle()
VAR robtarget p20;
VAR robtarget p30;
PROC quit()
TPWrite "Good bye!"
! Terminate the program
EXIT;
ENDPROC
PROC change_paper()
VAR num answer;
TPReadFK answer, "Change the paper", "OK", stEmpty, stEmpty,
stEmpty, stEmpty;
ENDPROC
PROC sharpen_pencil()
VAR robtarget pSharp2;
VAR robtarget pSharp3;
Continued
3HAC029364-001 Revision: B 45
© Copyright 2007, 2013 ABB. All rights reserved.
This page is intentionally left blank
4 Data with multiple values
4.1 Arrays
What is an array
An array is a variable that contains more than one value. An index is used to indicate
one of the values.
Declaring an array
The declaration of an array looks like any other variable, except that the length of
the array is specified inside { }.
VAR num my_array{3};
Assigning values
An array can be assigned all its values at once. When assigning the whole array
the values are surrounded by [ ] and separated by commas.
my_array := [5, 10, 7];
It is also possible to assign a value to one of the elements in an array. Which
element to assign a value to is specified inside { }.
my_array{3} := 8;
Example
This example use a FOR loop and arrays to ask the operator for the estimated
production time for each part. It is a very efficient way to write code compared to
having one variable for each part and not be able to use the FOR loop.
VAR num time{3};
VAR string part{3} := ["Shaft", "Pipe", "Cylinder"];
VAR num answer;
PROC main()
FOR i FROM 1 TO 3 DO
TPReadNum answer, "Estimated time for " + part{i} + "?";
time{i} := answer;
ENDFOR
ENDPROC
3HAC029364-001 Revision: B 47
© Copyright 2007, 2013 ABB. All rights reserved.
4 Data with multiple values
4.2 Composite data types
pos
A simple example of a composite data type is the data type pos. It contains three
numerical values (x, y and z).
The declaration looks like a simple variable:
VAR pos pos1;
Assigning all values is done like with an array:
pos1 := [600, 100, 800];
The different components have names instead of numbers. The components in
pos are named x, y and z. The value in one component is identified with the variable
name, a point and the component name:
pos1.z := 850;
orient
The data type orient specifies the orientation of the tool. The orientation is
specified by four numerical values, named q1, q2, q3 and q4.
VAR orient orient1 := [1, 0, 0, 0];
TPWrite "The value of q1 is " \Num:=orient1.q1;
pose
A data type can be composed of other composite data types. An example of this
is the data type pose, which consists of one pos named trans and one orient
named rot.
VAR pose pose1 := [[600, 100, 800], [1, 0, 0, 0]];
VAR pos pos1 := [650, 100, 850];
VAR orient orient1;
pose1.pos := pos1;
orient1 := pose1.rot;
pose1.pos.z := 875;
robtarget
robtarget is too complex a data type to explain in detail here, so we will settle
for a brief explanation.
robtarget consists of four parts:
Continued
Detailed descriptions
Detailed descriptions of these data types and many more can be found in Technical
reference manual - RAPID Instructions, Functions and Data types, section Data
types.
3HAC029364-001 Revision: B 49
© Copyright 2007, 2013 ABB. All rights reserved.
This page is intentionally left blank
5 RAPID instructions and functions
5.1 Instructions
What is an instruction
A RAPID instruction acts as a pre-made procedure. An instruction call looks like
a procedure call with the instruction name followed by argument values.
Some RAPID instructions are simple and could easily have been written as a
procedure in RAPID. For example the instruction Add.
Add reg1, 3;
! The same functionality could be written:
reg1 := reg1 + 3;
Other RAPID instructions perform complicated processes that could not have been
programmed without these premade instructions. For example MoveL, which may
seem like a simple instruction but in the background there are calculations of how
much to move each robot axis and how much current each motor should have.
Because the program code for these calculations is already made, all you have to
do is write a simple instruction call.
MoveL p10, v1000, fine, tool0;
Detailed descriptions
Detailed descriptions of instructions can be found in Technical reference
manual - RAPID Instructions, Functions and Data types, section Instructions.
3HAC029364-001 Revision: B 51
© Copyright 2007, 2013 ABB. All rights reserved.
5 RAPID instructions and functions
5.2 Functions
5.2 Functions
What is a function
A RAPID function is similar to an instruction but returns a value.
! Calculate the cosine of reg2
reg1 : = Cos(reg2);
Since the function returns a value, the result of the function can be assigned to a
variable.
The arguments in a function call are written inside parenthesis and are separated
with commas.
! Convert the num time to string and concatenate with other strings
string1 := name + "’s time was " + NumToStr(time);
Detailed descriptions
Detailed descriptions of functions can be found in Technical reference
manual - RAPID Instructions, Functions and Data types, section Functions.
52 3HAC029364-001 Revision: B
© Copyright 2007, 2013 ABB. All rights reserved.
6 What to read next
6.1 Where to find more information
3HAC029364-001 Revision: B 53
© Copyright 2007, 2013 ABB. All rights reserved.
This page is intentionally left blank
Index
Index MoveC, 32
move instructions, 27
MoveJ, 32
A MoveL, 27, 30
arguments, 40
arrays, 47 N
assigning values, 14 num, 14
B O
base coordinate system, 29 operators, 18
base frame, 29 orient, 48
bool, 14 output signal, 35
C P
comments, 24 performance, 23
communication, 35–36 pos, 48
complex data types, 48 pose, 48
computer performance, 23 PROC, 39
conditional execution, 19, 23 procedure, 39
constants, 17
coordinate systems, 29 R
corner zones, 31, 33 RAPID functions, 52
RAPID instructions, 51
D RAPID procedure, 39
data types, 14, 48 repetition, 22–23
declaration of variables, 14 robot controller, 12
design, 42 robtarget, 27, 48
digital input, 35
digital output, 35 S
dnum, 14 safety, 11
semicolon, 24
E signals, 35
ELSE, 19 speeddata, 27
ELSEIF, 20 string, 14
eternal loops, 23 syntax, 12
F T
FlexPendant, 12, 36 terminology, 12
FOR, 22 tooldata, 28
functions, 52 TPReadFK, 37
TPReadNum, 37
I TPWrite, 36
I/O signals, 35
IF, 19, 21 V
indentations, 25 variable declaration, 14
input signal, 35 variables, 14
instructions, 51
W
L WHILE, 23
logical conditions, 18–19, 21 WObj, 29
loop, 22–23 work object, 29
M Z
main, 39 zonedata, 28
module, 41
3HAC029364-001 Revision: B 55
© Copyright 2007, 2013 ABB. All rights reserved.
Contact us
ABB AB
3HAC029364-001, Rev B, en
Discrete Automation and Motion
Robotics
S-721 68 VÄSTERÅS, Sweden
Telephone +46 (0) 21 344 400
www.abb.com/robotics