Skip to content

Instantly share code, notes, and snippets.

@pral2a
Last active August 29, 2015 14:01
Show Gist options
  • Save pral2a/559b2bec97d9b9524091 to your computer and use it in GitHub Desktop.
Save pral2a/559b2bec97d9b9524091 to your computer and use it in GitHub Desktop.

#The KUKA Robot Programming Language ##Movement The KUKA robot can move from point A to point B in three main ways:

PTPPoint-to-Point – Motion along the quickest path to an end point. This motion requires the developer to set one point.

LIN - Linear – Motion at a defined velocity and acceleration along a straight line. This motion requires the developer to set one point. The robot uses the point defined in the previous move as the start point and the point defined in the current command as the end point and interpolates a straight line in between the two points.

CIRCCircular – Motion at a defined velocity and accerlation along a circular path or a portion of a circular path. This motion requires the developer to set two points, the mid-point and the end point. Using the start point of the robot (defined as the end point in the previous motion command) the robot interpolates a circular path through the mid-point and to the end point.

##Inputs and Outputs Inputs and Outputs (I/O) are the same concept as in PLCs.

INPUTS – An input is something (digital or analog) coming from another system and is read in and used to make decisions. Inputs cannot be changed by the robot is represent the state of something external to the robot such as whether a sensor is on or off. To refer to physical input the program syntax $IN[n]. An input could be $IN[14].

OUTPUTS – Outputs can be changed by the robot but can also be monitored. The numbering is the same as the inputs. The sytax is $OUT[n]. The syntax to change the state of the output is $OUT[10]=TRUE to cause physical output 10 to turn on and $OUT[10]=FALSE to cause physical output 10 to turn off.

PULSED OUTPUTS – An output can be turned on for a short (or defined) period of time easier than just turning the output on, waiting for a time, and thenturning the output off. An input cannot be pulsed because it cannot be altered by the robot. The syntax to accomplish this is PULSE($OUT[#],state,time) where state can be TRUE or FALSE and time is the time to pulse the output in seconds. An example would be for example PULSE($OUT[10],TRUE,0.5). The above example would turn on physical output 10 for 0.5 seconds. This time can range from 0.012 seconds to 2^31 seconds in increments of 0.1 seconds.

##Execution Control

The following are different ways to control the execution of your program.

###IF statements

An if statements checks a condition and executes code if the condition is true and may execute code (if written) if the condition is false. The syntax is as follows.

IF conditional == TRUE THEN

Whatever code you want to execute when the conditional is TRUE

ELSE

Whatever code you want to execute when the conditional is FALSE

ENDIF

For example, if you had a switch connected to physical input 10 the following code might be used.

IF $IN[10]==TRUE THEN

The code written here would execute when the switch was on.

ELSE

The code written here would execute when the switch was off.

ENDIF

The ELSE statement is optional and if not used should not be entered in. In other words if in the example above nothing should happen if the switch was off the following code could be used.

IF $IN[33]==TRUE THEN

The code written here would execute when the switch was on.

ENDIF

For those of you who are familiar with programming, there is no “ELSEIF” option. However, you can nest the IF statements within each other. For example, if you had a switch connected to physical input 0 the following code might be used.

###SWITCH statements

A switch statement (in other languages it is called a case statement) is commonly used when a variable can have many values instead of just on and off. For example, if a variable had the name counter_variable and it could attain values of 10, 20, 30, 40, or 50 the following code could be used to execute different code base on the value of the variable.

SWITCH counter_variable

CASE 10

Code that should execute when counter_variable equals 10.

CASE 20

Code that should execute when counter_variable equals 20.

CASE 30

Code that should execute when counter_variable equals 30.

DEFAULT

Code that should execute when counter_variable doesn’t equal any of the above cases.

ENDSWITCH

###FOR loops

The For loop is a command that allows the developer to execute a piece of code a certain number of times while incrementing through a variable. For example if a developer wanted to execute a set of code 50 times while incrementing a variable in steps of 2 the following code could be used.

FOR Counter_Variable = 1 to 100 STEP 2

Code to execute every time through the loop

ENDFOR

The STEP is optional and without the command it defaults to 1.

###While loops

Instead of executing a set of code a set number of times, a While loop can be used to execute a piece of code while a condition remains true or false. For example if a robot should move back and forth while an input remains on the following code could be used.

WHILE $IN[14]==TRUE

Code to execute while the input remains on

ENDWHILE

###Repeats loops

A While loop does something while a condition remains true or false, but a repeat loop does something until a conditions becomes true or false. For example, a robot could be asked to move back and forth until a condition is met.

REPEAT

Code to be executed until input 40 turns off.

UNTIL $IN[40]==FALSE

###Endless loops

Many times, it is the desire of the developer that the robot does the same task over and over again endlessly. In order to accomplish that we use the LOOP command. This causes code between LOOP and ENDLOOP to execute without end.

LOOP

Code to execute endlessly

ENDLOOP

##Variables

In a basic program (MODUL PROGRAM) there is a INI line pre-written in a new program. Above this INI line is the area in which variables are declared or given name and definition. The following are allowable variable types.

Integer (numbers without a decimal point such as 1, 233, 143, 4365) –

INT variable_name

Real (numbers with a decimal point such as 1.2, 33.45, 3.14)

REAL variable_name

E6POS (variable representing a point in space and robot orientation)

E6POS variable_name

The E6POS variable consists of 6 variables representing the point in cartesian space and the orientation of the arm at that point. Because of this the developer can reference an E6POS variable in several ways.

variable_name.x would refer to the x value of the point in space

variable_name.y would refer to the y value of the point in space

variable_name.z would refer to the z value of the point in space

variable_name.a would refer to the rotation around the z axis in space

variable_name.b would refer to the rotation around the y axis in space

variable_name.c would refer to the rotation around the x axis in space

Oftentimes a developer will want to save the current position of the robot to an E6POS variable. This is done with the $POS_ACT command as follows.

If point_in_space is the variable name we will use it as:

point_in_space = $POS_ACT

The current position of the robot would be saved to the variable in real time.

###Operators

Additionally, when using variables, many operators are required and can be grouped into three categories.

####Relational Operators

  • Check to see if equal to: ==

  • Check to see if not equal to: <>

  • Check to see if less than: <

  • Check to see if less than or equal to: <=

  • Check to see if greater than: >

  • Check to see if greater than or equal to: >=

#####Logic Operators

  • NOT
  • AND
  • OR
  • EXOR (exclusive or)

#####Arithmetic Operators

  • Multiplication *
  • Additiona +
  • Subraction -
  • Division /

##Time

###Timers

Timers are also available to the developer for uses such as timing the amount of time that occurs between two inputs coming on. There are 16 timers (1-16) and there are three commands available for each timer. Shown here are the commands for timer 1. If any other timer is used just replace the 1 with the timer number.

$TIMER_STOP[1]=FALSE

This command starts the timer timing. Just like the button on your stopwatch that starts timing.

$TIMER_STOP[1]=TRUE

This command stops the timer timing. Just like the button on your stopwatch that stops timing.

$TIMER[1]

This is the place where the time is stored in milliseconds. A developer can set this value to zero by typing $TIMER[1]=0 or use conditional statements based on the value.

The value can also be used in a mathematical equation such as:

Distance = Rate * Time

This will determine the distance

###Velocity Command

The linear velocity of the robot can be set by using the $VEL.CP variable.

We will also use this in the lab to set the robot to move at the same speed as the conveyor. An example would be if we wanted the robot to move at 0.5m/s we would type:

$VEL.CP=0.5.

Note that this variable is always in units of m/s.

###Wait Commands

There are three different commands that the developer can use to cause the program to freeze.

WAIT FOR – This command causes the program to stop until a condition is met. An example would be:

WAIT FOR $IN[35]

This would cause the program to stop until $IN[14] was true.

WAIT SEC – This command causes the program to stop for a certain amount of time. An example would be:

WAIT SEC 3.2

This would cause the program to freeze for 3.2 seconds.

HALT

The HALT command causes the robot program to stop until restarted by an operator.

##Credits

@pral2a
Copy link
Author

pral2a commented May 20, 2014

Add the FRAME and POS structures:

STRUC AXIS REAL A1,A2,A3,A4,A5,A6
STRUC E6AXIS REAL A1,A2,A3,A4,A5,A6,E1,E2,E3,E4,E5,E6
STRUC FRAME REAL X,Y,Z,A,B,C
STRUC POS REAL X,Y,Z,A,B,C, INT S,T
STRUC E6POS REAL X,Y,Z,A,B,C,E1,E2,E3,E4,E5,E6, INT S,T

ProgExpertKRC KR C2 / KR C3

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment