Val3 Reference Manual
User Manual:
Open the PDF directly: View PDF .
Page Count: 160
Download | ![]() |
Open PDF In Browser | View PDF |
VAL3 REFERENCE MANUAL © Stäubli Faverges 2006 Version 5.3 D28062804A - 02/2006 Documentation addenda and errata can be found in the "readme.pdf" document delivered with the controller's CdRom. 2 / 160 D28062804A - 02/2006 TABLE OF CONTENTS 1 - INTRODUCTION................................................................................ 11 2 - VAL3 LANGUAGE ELEMENTS ........................................................ 15 2.1 2.2 2.3 2.4 2.5 2.6 APPLICATIONS..................................................................................................................... 17 2.1.1 Definition .................................................................................................................... 17 2.1.2 Default content ........................................................................................................... 17 2.1.3 Start/stop .................................................................................................................... 17 2.1.4 Application parameters............................................................................................... 17 2.1.4.1 Unit of length ............................................................................................... 18 2.1.4.2 Size of the execution memory..................................................................... 18 PROGRAMS .......................................................................................................................... 18 2.2.1 Definition .................................................................................................................... 18 2.2.2 Re-entry...................................................................................................................... 18 2.2.3 start() program............................................................................................................ 18 2.2.4 stop() program............................................................................................................ 18 DATA TYPES......................................................................................................................... 19 2.3.1 Definition .................................................................................................................... 19 2.3.2 Simple types............................................................................................................... 19 2.3.3 Structured types ......................................................................................................... 19 CONSTANTS ......................................................................................................................... 19 2.4.1 Definition .................................................................................................................... 19 2.4.2 Simple type constants ................................................................................................ 19 2.4.3 Structured type constants........................................................................................... 20 2.4.4 Constants table .......................................................................................................... 20 VARIABLES........................................................................................................................... 20 2.5.1 Definition .................................................................................................................... 20 2.5.2 Variable scope............................................................................................................ 20 2.5.3 Accessing a variable value......................................................................................... 20 2.5.4 Parameter passed "by value" ..................................................................................... 21 2.5.5 Parameter passed "by reference" .............................................................................. 21 SEQUENCE CONTROL INSTRUCTIONS............................................................................. 22 Comment // ...................................................................................................................................... 22 call program .................................................................................................................................... 22 return program ................................................................................................................................ 23 if control instruction ....................................................................................................................... 23 while control instruction ................................................................................................................... 24 do ... until control instruction ........................................................................................................... 24 for control instruction ....................................................................................................................... 25 switch control instruction ................................................................................................................ 26 D28062804A - 02/2006 3 / 160 3 - SIMPLE TYPES ................................................................................. 27 3.1 INSTRUCTIONS..................................................................................................................... 29 num size(variable) ........................................................................................................................... 29 3.2 3.3 BOOL TYPE ........................................................................................................................... 30 3.2.1 Definition .................................................................................................................... 30 3.2.2 Operators ................................................................................................................... 30 NUM TYPE ............................................................................................................................. 31 3.3.1 Definition .................................................................................................................... 31 3.3.2 Operators ................................................................................................................... 32 3.3.3 Instructions ................................................................................................................. 32 num sin(num angle) ........................................................................................................................ 32 num asin(num Value) ...................................................................................................................... 33 num cos(num angle) ....................................................................................................................... 33 num acos(num Value) ..................................................................................................................... 33 num tan(num angle) ........................................................................................................................ 34 num atan(num Value) ..................................................................................................................... 34 num abs(num Value) ....................................................................................................................... 34 num sqrt(num Value) ...................................................................................................................... 35 num exp(num Value) ....................................................................................................................... 35 num ln(num Value) .......................................................................................................................... 36 num log(num Value) ....................................................................................................................... 36 num roundUp(num Value) .............................................................................................................. 37 num roundDown(num Value) ......................................................................................................... 37 num round(num Value) ................................................................................................................... 37 num min(num x, num y) .................................................................................................................. 38 num max(num x, num y) ................................................................................................................. 38 num limit(num Value, num min, num max) ..................................................................................... 38 num sel(bool condition, num Value1, num Value2) ........................................................................ 39 3.4 STRING TYPE........................................................................................................................ 40 3.4.1 Definition .................................................................................................................... 40 3.4.2 Operators ................................................................................................................... 40 3.4.3 Instructions ................................................................................................................. 40 string toString(string format, num Value) ....................................................................................... 40 string toNum(string string, num& Value, bool& report) ................................................................... 41 string chr(num Ascii Code) ............................................................................................................. 42 num asc(string text, num position) .................................................................................................. 43 string left(string string, num size) .................................................................................................... 43 string right(string string, num size) ................................................................................................. 44 string mid(string string, num size, num position) ............................................................................ 44 string insert(string string, string insertion, num position) ................................................................ 45 string delete(string string, num size, num position) ........................................................................ 45 num replace(string string, string replacement, num size, num position) ........................................ 46 num find(string string1, string string2) ............................................................................................ 46 num len(string string) ...................................................................................................................... 47 3.5 DIO TYPE ............................................................................................................................... 48 3.5.1 Definition .................................................................................................................... 48 3.5.2 Operators ................................................................................................................... 48 3.5.3 Instructions ................................................................................................................. 49 void dioLink(dio& variable, dio source) .......................................................................................... 49 num dioGet(dio dTable) .................................................................................................................. 49 num dioSet(dio dTable, num Value) ............................................................................................... 50 4 / 160 D28062804A - 02/2006 3.6 AIO TYPE............................................................................................................................... 51 3.6.1 Definition .................................................................................................................... 51 3.6.2 Instructions ................................................................................................................. 51 void aioLink(aio& variable, aio source) ........................................................................................... 51 num aioGet(aio input) ...................................................................................................................... 51 num aioSet(aio output, num Value) ................................................................................................. 52 3.7 SIO TYPE ............................................................................................................................... 53 3.7.1 Definition .................................................................................................................... 53 3.7.2 Instructions ................................................................................................................. 54 void sioLink(sio& variable, sio source) ........................................................................................... 54 num clearBuffer(sio input) .............................................................................................................. 54 num sioGet(sio input, num& data) .................................................................................................. 54 num sioSet(sio output, num& data) ................................................................................................. 55 4 - USER INTERFACE ............................................................................ 57 4.1 USER PAGE .......................................................................................................................... 59 4.2 INSTRUCTIONS..................................................................................................................... 59 void userPage(), void userPage(bool fixed) ................................................................................... 59 void gotoxy(num x, num y) ............................................................................................................. 60 void cls() .......................................................................................................................................... 60 void put() void putln() ..................................................................................................................... 60 void title(string string) ...................................................................................................................... 61 num get() ......................................................................................................................................... 61 num getKey() .................................................................................................................................. 63 bool isKeyPressed(num code) ....................................................................................................... 63 void popUpMsg(string string) .......................................................................................................... 63 void logMsg(string string) ................................................................................................................ 64 string getProfile() ............................................................................................................................ 64 5 - TASKS ............................................................................................... 65 5.1 DEFINITION ........................................................................................................................... 67 5.2 RESUMING AFTER AN EXECUTION ERROR ..................................................................... 67 5.3 VISIBILITY ............................................................................................................................. 67 5.4 SEQUENCING ....................................................................................................................... 68 5.5 SYNCHRONOUS TASKS ...................................................................................................... 69 5.6 OVERRUN.............................................................................................................................. 69 5.7 INPUTS / OUTPUTS REFRESH ............................................................................................ 69 5.8 SYNCHRONIZATION............................................................................................................. 70 5.9 SHARING RESOURCES ....................................................................................................... 71 D28062804A - 02/2006 5 / 160 5.10 INSTRUCTIONS..................................................................................................................... 72 void taskSuspend(string name) ..................................................................................................... 72 void taskResume(string name, num skip) ...................................................................................... 72 void taskKill(string name) ............................................................................................................... 73 void setMutex(bool& mutex) ........................................................................................................... 73 num taskStatus(string name) ......................................................................................................... 74 void taskCreate string name, num priority, program(...) ................................................................. 75 void taskCreateSync string name, num period, bool& overrun, program(...) ................................. 76 void wait(bool condition) ................................................................................................................. 77 void delay(num seconds) ................................................................................................................ 77 num clock() ..................................................................................................................................... 78 bool watch(bool condition, num seconds) ...................................................................................... 78 6 - LIBRARIES........................................................................................ 79 6.1 DEFINITION ........................................................................................................................... 81 6.2 INTERFACE ........................................................................................................................... 81 6.3 INTERFACE IDENTIFIER ...................................................................................................... 81 6.4 CONTENT .............................................................................................................................. 81 6.5 LOADING AND UNLOADING................................................................................................ 82 6.6 INSTRUCTIONS..................................................................................................................... 83 num identifier:libLoad(string path) .................................................................................................. 83 num identifier:libSave(), num libSave() .......................................................................................... 83 num libDelete(string path) .............................................................................................................. 83 string identifier:libPath(), string libPath() ...................................................................................... 84 bool libList(string path, string& contents) .................................................................................... 84 7 - ROBOT CONTROL ........................................................................... 85 7.1 INSTRUCTIONS..................................................................................................................... 87 void disablePower() ....................................................................................................................... 87 void enablePower() ........................................................................................................................ 87 bool isPowered() ............................................................................................................................ 87 bool isCalibrated() .......................................................................................................................... 88 num workingMode(), num workingMode(num& status) ............................................................... 88 num speedScale() .......................................................................................................................... 89 num esStatus() ............................................................................................................................... 89 8 - ARM POSITIONS .............................................................................. 91 8.1 INTRODUCTION .................................................................................................................... 92 8.2 JOINT TYPE........................................................................................................................... 92 8.2.1 Definition .................................................................................................................... 92 8.2.2 Operators ................................................................................................................... 93 8.2.3 Instructions ................................................................................................................. 93 joint abs(joint jPosition) ................................................................................................................... 93 joint herej() ...................................................................................................................................... 94 bool isInRange(joint jPosition) ........................................................................................................ 94 void setLatch(dio input) (CS8C only) ............................................................................................. 95 bool getLatch(joint& jPosition) (CS8C only) ................................................................................... 96 6 / 160 D28062804A - 02/2006 8.3 TRSF TYPE............................................................................................................................ 97 8.3.1 Definition .................................................................................................................... 97 8.3.2 Orientation.................................................................................................................. 98 8.3.3 Operators ................................................................................................................. 100 8.3.4 Instructions ............................................................................................................... 100 num distance(trsf position1, trsf position2) ................................................................................... 100 8.4 FRAME TYPE ...................................................................................................................... 101 8.4.1 Definition .................................................................................................................. 101 8.4.2 Use ........................................................................................................................... 101 8.4.3 Operators ................................................................................................................. 102 8.4.4 Instructions ............................................................................................................... 102 num setFrame(point origin, point axisOx, point planeOxy, frame& reference) ............................. 102 8.5 TOOL TYPE ......................................................................................................................... 102 8.5.1 Definition .................................................................................................................. 102 8.5.2 Use ........................................................................................................................... 103 8.5.3 Operators ................................................................................................................. 103 8.5.4 Instructions ............................................................................................................... 104 void open(tool tool) ........................................................................................................................ 104 void close(tool tool) ....................................................................................................................... 104 8.6 POINT TYPE ........................................................................................................................ 105 8.6.1 Definition .................................................................................................................. 105 8.6.2 Operators ................................................................................................................. 105 8.6.3 Instructions ............................................................................................................... 106 num distance(point position1, point position2) ............................................................................. 106 point compose(point position, frame reference, trsf transformation) ............................................ 107 point appro(point position, trsf transformation) ............................................................................. 108 point here(tool tTool, frame fFrame) .............................................................................................. 108 point jointToPoint(tool tool, frame reference, joint position) ......................................................... 109 bool pointToJoint(tool tool, joint initial, point position,joint& coordinates) .................................... 109 trsf position(point position, frame reference) ................................................................................ 110 8.7 CONFIG TYPE ..................................................................................................................... 111 8.7.1 Introduction............................................................................................................... 112 8.7.2 Definition .................................................................................................................. 112 8.7.3 Operators ................................................................................................................. 113 8.7.4 Configuration (RX/TX arm)....................................................................................... 113 8.7.4.1 Shoulder configuration .............................................................................. 113 8.7.4.2 Elbow configuration................................................................................... 114 8.7.4.3 Wrist configuration .................................................................................... 114 8.7.5 Configuration (RS arm) ............................................................................................ 115 8.7.6 Instructions ............................................................................................................... 115 config config(joint position) ........................................................................................................... 115 D28062804A - 02/2006 7 / 160 9 - MOVEMENT CONTROL.................................................................. 117 9.1 9.2 9.3 TRAJECTORY CONTROL................................................................................................... 119 9.1.1 Types of movement: point-to-point, straight line, circle ............................................ 119 9.1.2 Movement sequencing ............................................................................................. 121 9.1.2.1 Blending .................................................................................................... 121 9.1.2.2 Cancel blending ........................................................................................ 122 9.1.3 Movement resumption .............................................................................................. 123 9.1.4 Particularities of Cartesian movements (straight line, circle).................................... 124 9.1.4.1 Interpolation of the orientation................................................................... 124 9.1.4.2 Configuration change (Arm RX/TX) .......................................................... 126 9.1.4.3 Singularities (Arm RX/TX) ......................................................................... 128 MOVEMENT ANTICIPATION .............................................................................................. 128 9.2.1 Principle.................................................................................................................... 128 9.2.2 Anticipation and blending ......................................................................................... 129 9.2.3 Synchronization ........................................................................................................ 129 SPEED MONITORING ......................................................................................................... 130 9.3.1 Principle.................................................................................................................... 130 9.3.2 Simple settings ......................................................................................................... 130 9.3.3 Advanced settings .................................................................................................... 130 9.3.4 Enveloppe error ........................................................................................................ 131 9.4 REAL-TIME MOVEMENT CONTROL.................................................................................. 131 9.5 MDESC TYPE ...................................................................................................................... 132 9.6 9.5.1 Definition .................................................................................................................. 132 9.5.2 Operators ................................................................................................................. 132 MOVEMENT INSTRUCTIONS ............................................................................................. 133 void movej(joint joint, tool tool, mdesc desc) ................................................................................ 133 void movel(point point, tool tool, mdesc desc) .............................................................................. 134 void movec(Point intermediate, Point target, tool tool, mdesc desc) ............................................ 135 void stopMove() ............................................................................................................................ 136 void resetMotion(), void resetMotion(joint startingPoint) ............................................................ 136 void restartMove() ........................................................................................................................ 137 void waitEndMove() ..................................................................................................................... 137 bool isEmpty() .............................................................................................................................. 138 bool isSettled() ............................................................................................................................. 138 void autoConnectMove(bool active), bool autoConnectMove() ................................................ 138 8 / 160 D28062804A - 02/2006 10 - OPTIONS ......................................................................................... 139 10.1 COMPLIANT MOVEMENTS WITH FORCE CONTROL...................................................... 141 10.1.1 Principle.................................................................................................................... 141 10.1.2 Programming............................................................................................................ 141 10.1.3 Force control ............................................................................................................ 141 10.1.4 Limitations ................................................................................................................ 142 10.1.5 Instructions ............................................................................................................... 142 void movejf(joint position, tool tool, mdesc desc, num force) ....................................................... 142 void movelf(point point, tool tool, mdesc desc, num force) ........................................................... 143 bool isCompliant() ........................................................................................................................ 144 10.2 ALTER: REAL TIME CONTROL ON A PATH .................................................................... 145 10.2.1 Principle.................................................................................................................... 145 10.2.2 Programming............................................................................................................ 145 10.2.3 Constraints ............................................................................................................... 145 10.2.4 Safety ....................................................................................................................... 146 10.2.5 Limitations ................................................................................................................ 146 10.2.6 Instructions ............................................................................................................... 146 void alterMovej(joint target, tool tcp, mdesc speed) ..................................................................... 146 void alterMovel(point target, tool tcp, mdesc speed) .................................................................... 147 void alterMovec (point intermediate, point target, tool tcp, mdesc speed) ................................... 147 num alterBegin(frame alterReference, mdesc velocity) num alterBegin(tool alterReference, mdesc velocity) ................................................................... 148 num alterEnd() .............................................................................................................................. 149 num alter(trsf alteration) ................................................................................................................ 149 num alterStopTime() .................................................................................................................... 150 11 - APPENDIX....................................................................................... 151 11.1 EXECUTION ERROR CODES............................................................................................. 153 11.2 CONTROL PANEL KEYBOARD KEY CODES ................................................................... 154 12 - ILLUSTRATION............................................................................... 155 13 - INDEX .............................................................................................. 157 D28062804A - 02/2006 9 / 160 10 / 160 D28062804A - 02/2006 Chapter 1 - Introduction CHAPTER 1 INTRODUCTION D28062804A - 02/2006 11 / 160 12 / 160 D28062804A - 02/2006 Chapter 1 - Introduction VAL3 is a high-level programming language designed to control Stäubli robots in industrial handling and assembly applications. VAL3 language combines the basic features of a standard real-time high-level computer language with functionalities that are specific to industrial cell robot control: • robot control tools • geometrical modelling tools • input/output control tools This reference manual explains the essential concepts of robot programming and describes the VAL3 instructions which fall into the following categories: • • • • • • • • Language elements Simple types User interface Tasks Libraries Robot control Arm position Movement control Each instruction,together with its syntax, is listed in the table of contents for quick reference purposes. D28062804A - 02/2006 13 / 160 14 / 160 D28062804A - 02/2006 Chapter 2 - VAL3 language elements CHAPTER 2 VAL3 LANGUAGE ELEMENTS D28062804A - 02/2006 15 / 160 * 16 / 160 D28062804A - 02/2006 Chapter 2 - VAL3 language elements VAL3 consists of the following elements: • applications • programs • libraries • data types • constants • variables (global and local datas, parameters) • tasks 2.1. 2.1.1. APPLICATIONS DEFINITION A VAL3 application is a self-contained software package designed for programming robots and inputs/ outputs associated with a CS8 controller. A VAL3 application comprises the following elements: - a set of programs: the VAL3 instructions to be executed - a set of global datas: the application data - a set of libraries: the outside instructions and data used by the application When an application is running, it also contains: - a set of tasks: the programs being executed 2.1.2. DEFAULT CONTENT A VAL3 application always contains the start() and stop() programs, a world frame (frame type) and a flange tool (tool type). When a VAL3 application is created, it also contains the instructions and data types that are specific to the arm model. Further details of these elements can be found in the chapters describing each element type. 2.1.3. START/STOP VAL3 instructions are not used to control applications: applications can only be loaded, unloaded, started and stopped via the CS8 user interface of the controller. When a VAL3 application is started up, its start() program is run. A VAL3 application stops automatically when its last task is completed: the stop() program is then executed. All the tasks created by libraries, if any remain, are deleted in the reverse order to that in which they were created. If a VAL3 application is stopped via the CS8 user interface, the start task, if it still exists, is immediately destroyed. The stop() program is run next, and then any remaining application tasks are deleted in the reverse order to that in which they were created. 2.1.4. APPLICATION PARAMETERS The following parameters can be used to configure a VAL3 application: - unit of length - size of the execution memory These parameters cannot be accessed via a VAL3 instruction and can only be changed via the CS8 user interface. D28062804A - 02/2006 17 / 160 2.1.4.1. UNIT OF LENGTH In VAL3 applications, the unit of length is either the millimetre or the inch. It is used by the VAL3 geometrical data types: frame, point, transformation, tool, and trajectory blending. The unit of length of an application is defined when an application is created, and it cannot be changed subsequently. 2.1.4.2. SIZE OF THE EXECUTION MEMORY The size of the execution memory of a VAL3 application is the amount of memory available for each of its tasks, to store data such as the local program variables. By default, it is 5000 bytes. This level may not be sufficient for applications containing large tables with local variables or recursive algorithms: in this case, it must be increased via the CS8 user interface. 2.2. PROGRAMS 2.2.1. DEFINITION A program is a sequence of VAL3 instructions to be executed. A program consists of the following elements: - sequence of instructions: the VAL3 instructions to be executed - A set of local variables: the internal program data - A set of parameters: the data supplied to the program when it is called Programs are used to group sequences of instructions that can be executed at various points in an application. In addition to saving program time, they also highlight the structure of the applications, facilitate programming and maintenance and improve readability. The number of instructions in a program is limited only by the amount of memory available in the system. The number of local variables and parameters is limited only by the size of the execution memory for the application. 2.2.2. RE-ENTRY The programs are re-entrant; this means that a program can call itself recursively (call instruction), or it can be called concurrently by several tasks. Each program call has its own specific variables and parameters. 2.2.3. START() PROGRAM The start() program is the program called when the VAL3 application is started up. It cannot have any parameters. Typically, this program includes all the operations required to run the application: initialization of the global datas and the inputs/outputs, starting up the application tasks, etc. The application does not necessarily terminate at the end of the start() program, if other application tasks are still running. The start() program can be called from within a program (call instruction) in the same way as any other program. 2.2.4. STOP() PROGRAM The stop() program is the program called when the VAL3 application stops. It cannot have any parameters. Typically, this program includes all the operations required to stop the application correctly: resetting the inputs/outputs and stopping the application tasks according to an appropriate sequence, etc. The stop() program can be called from within a program (call instruction) in the same way as any other program: calling the stop() program does not stop the application. 18 / 160 D28062804A - 02/2006 Chapter 2 - VAL3 language elements 2.3. 2.3.1. DATA TYPES DEFINITION A VAL3 variable or constant type is a characteristic that allows the system to control the applications and programs that can use it. All the VAL3 constants and variables have a type. This enables the system to run an initial check when editing a program and hence detect certain programming errors immediately. 2.3.2. SIMPLE TYPES The VAL3 language supports the following simple types: - bool type: for Boolean values (true/false) - num type: for numeric values - string type: for character strings - dio type: for on/off inputs/outputs - aio type: for numeric inputs/outputs (analogue or digital) - sio type: for serial ports inputs/outputs and ethernet sockets 2.3.3. STRUCTURED TYPES Structured types combine typed data, the fields of the structured type. Fields of the structured type can be accessed individually by their name. The VAL3 language supports the following structured types: - trsf type: for Cartesian geometrical transformations - frame type: for Cartesian geometrical frames - tool type: for robot mounted tools - point type: for the Cartesian positions of a tool - joint type: for robot revolute positions - config type: for robot configurations - mdesc type: for robot movement parameters 2.4. 2.4.1. CONSTANTS DEFINITION A constant is a data item that is defined directly in a VAL3 program without previously being declared. A constant has a type that is determined implicitly by the system. 2.4.2. SIMPLE TYPE CONSTANTS The precise syntax of a simple type constant is specified in the chapter describing each simple type. Example bool bBool num nPi string sString bBool = true nPi = 3.141592653 sString = "this is a string" D28062804A - 02/2006 19 / 160 2.4.3. STRUCTURED TYPE CONSTANTS The value of a structured type constant is defined by the sequence of values in its fields. The sequence order is specified in the chapter describing each structured type. Example procedure dummy(trsf t, dio d) point p p = {{100, -50, 200, 0, 0, 0}, {sfree, efree, wfree}} call dummy({a+b, 2* c, 120, limit(c, 0, 90), 0, 0}, io:valve1) 2.4.4. CONSTANTS TABLE A constants table must be initialized entry by entry. Example joint j[5] // For 6 axis arms j[0] = {0, 0, 0, 0, 0, 0} j[1] = {90, 0, 90, 0, 0, 0} j[2] = {-90, 0, 90, 0, 0, 0} j[3] = {90, 0, 0, -90, 0, 0} j[4] = {-90, 0, 0, -90, 0, 0} 2.5. VARIABLES 2.5.1. DEFINITION A variable is a data item referenced by its name in a program. A variable is identified by: - its name: a character string - its type: one of the VAL3 types described previously - its size: for a table, the number of elements it contains - its scope: the program or programs that can use the variable A variable name is a string of 1 to 15 characters selected from "a..zA..Z0..9_". All variables can be used as arrays. Simple variables are size 1. The size() instruction enables the size of a variable to be known. 2.5.2. VARIABLE SCOPE The scope of a variable can be: • global: all programs in the application can use the variable, or • local: the variable can only be accessed in the program in which it is declared When a global variable and a local variable have the same name, the program in which the local variable is declared will use the local variable and will be unable to access the global variable. Program parameters are local variables that can only be accessed in the program in which they are declared. 2.5.3. ACCESSING A VARIABLE VALUE The elements of an array can be accessed by using an index between square brackets ‘[‘ and ‘]’. The index must be between 0 and (size-1), otherwise an execution error is generated. If no index is specified, the index 0 is used: var[0] is equivalent to var. The fields of structured type variables can be accessed using a ‘.’ followed by the field name. 20 / 160 D28062804A - 02/2006 Chapter 2 - VAL3 language elements Example num a num b[10] trsf t point p // a is a size 1 num type variable // b is a size 10 num type variable a = 0 a[0] = 0 b[0] = 0 b = 0 b[5] = 5 b[5.13] = 7 // // // // // // b[-1] = 0 b[10] = 0 // error: index less than 0 // error: index too high t = p.trsf p.trsf.x = 100 // Initialization of t // Initialization of the x field of the trsf field of the p variable 2.5.4. Initialization of a simple type variable Correct: equivalent to a = 0 Initialization of the first element in table b Correct: equivalent to b[0] = 0 Initialization of the sixth element in table b Correct: equivalent to b[5] = 7 (only the integer part is used) PARAMETER PASSED "BY VALUE" When a parameter is passed "by value", the system creates a local variable and initializes it with the value of the variable or expression supplied by the calling program. The variables of the calling program used as "by value" parameters do not change, even if the called program changes the value of the parameter. A data array cannot be passed by value. Example: procedure dummy(num x) begin x=0 putln(x) end num a a=10 putln(a) call dummy(a) putln(a) 2.5.5. // x is passed by value // displays 0 // displays 10 // displays 0 // displays 10: a is not modified by dummy() PARAMETER PASSED "BY REFERENCE" When a parameter is passed "by reference", the program no longer works on a copy of the data item passed by the caller, but on the data item itself, which is simply renamed locally. The values of the variables of the calling program used as "by reference" parameters change when the called program changes the value of the parameter. All the components of a table passed by reference can be used or modified. If an array component is passed by reference, that component and all following components can be used and modified. In this case, the parameter is seen as a table that starts with the component passed by the call. The size() instruction can be used to determine the effective parameter size. When a constant or an expression are passed "by reference", the corresponding assigned parameter has no effect: the parameter retains the value of the constant or expression. D28062804A - 02/2006 21 / 160 Example: procedure dummy(num& x) begin x=0 putln(x) end // x is passed by reference // displays 0 procedure element(num& x) begin x[3] = 0 putln(size(x)) end num a num b[10] a=10 putln(a) call dummy(a) putln(a) b[2] = 2 b[5] = 5 call element(b[2]) putln(b[5]) 2.6. // displays 10 // displays 0 // displays 0: a is modified by dummy() // displays 8, elements 0 and 1 in b are not passed // displays 0: b[5] is modified by element() SEQUENCE CONTROL INSTRUCTIONS Comment // Syntax //Function A line starting with « // » is not evaluated and the evaluation resumes on the next line. Example // This is an example of a comment call program Syntax call program([parameter1][,parameter2]) Function Runs the specified program with the specified parameters. 22 / 160 D28062804A - 02/2006 Chapter 2 - VAL3 language elements Example // Calls the pick() and place() programs for i,j between 1 and 10 for i = 1 to 10 for j = 1 to 10 call pick (i, j) call place (i, j) endFor endFor return program Syntax return Function Exits the current program immediately. If this program was called by a call, execution resumes after the call in the calling program. Otherwise (if the program is the start() program or the starting point of a task), the current task is completed. if control instruction Syntax if [else ] endIf Function When the evaluation of the Boolean condition is (true), all the following instructions up to the else keyword, if present, or the next endIf are evaluated. When the expression is (false), the instructions evaluated are those between the else and endIf keywords, if the else keyword is present. In all cases, the program then resumes after the endIf keyword. Parameter bool condition Boolean expression to be evaluated Example string s num a // s = "a=0" if a=0, else "a = ? " s = "a = ? " if a==0 s = "a=0" endIf // s = "a=0" if a=0, else "a <> 0" s = "a = ? " if a==0 s = "a = 0" else s = "a <> 0" endIf D28062804A - 02/2006 23 / 160 while control instruction Syntax while endWhile Function The instructions between while and endWhile are executed when the Boolean condition expression is (true). If the Boolean condition expression is not true at the first evaluation, the instructions between while and endWhile are not executed. Parameter bool condition Boolean expression to be evaluated Example dio dLamp // Causes a signal to flash while the robot is working dLamp = false while (isSettled()==false) dLamp = ! dLamp //Inverses the value of the dLamp: true false delay(0.5) // Waits ½ s endWhile dLamp = false do ... until control instruction Syntax do until Function The instructions between do and until are executed until the Boolean condition expression is (true). The instructions between do and until are executed once if the Boolean condition expression is true during its first evaluation. Parameter bool condition Boolean expression to be evaluated Example num a // Waits until Enter is pressed do a = get() until (a == 270) 24 / 160 // Waits for a key to be pressed // Tests the Enter key code D28062804A - 02/2006 Chapter 2 - VAL3 language elements for control instruction Syntax for = to [step ] endFor Function The instructions between for and endFor are executed until the counter exceeds the specified end value. The counter is initialized by the beginning value. If beginning exceeds end, the instructions between for and endFor are not executed. At each iteration, the counter is incremented by the step value, and the instructions between for and endFor are repeated if the counter does not exceed end. If step is positive, the counter exceeds end if it is greater than end. If step is negative, the counter exceeds end if it is less than end. Parameter num counter num type variable used as a counter num beginning numerical expression used to initialize the counter num end numerical expression used for the loop end test [num step] numerical expression used to increment the counter Example num i joint jDest jDest = {0,0,0,0,0,0} // Rotates axis 1 from 90° to -90° in -10-degree steps for i = 90 to -90 step -10 jDest.j1 = i movej(jDest, flange, mNomSpeed) waitEndMove() endFor D28062804A - 02/2006 25 / 160 switch control instruction Syntax switch case [, ] break [case [, ] break ] [default break ] endSwitch Function Executes the instructions corresponding to the selection case specified. When a non integer value is specified for the selection or for a case, the nearest integer is used. If no case corresponds to the selection specified, the Default Instructions, if present, are executed. If the same case case value occurs several times, only its last occurrence is taken into account. Parameter num selection num selection type variable num case1 test case numerical constant num case2 test case numerical constant num case3 test case numerical constant num case4 test case numerical constant Example num nMenu string s // Tests the menu key pressed nMenu = get() switch nMenu case 271 s = "Menu 1" break case 272 s= "Menu 2" break case 273, 274, 275, 276, 277, 278 s = "Menu 3 to 8" break default s = "this key is not a menu key" break endSwitch 26 / 160 D28062804A - 02/2006 Chapter 3 - Simple types CHAPTER 3 SIMPLE TYPES D28062804A - 02/2006 27 / 160 28 / 160 D28062804A - 02/2006 Chapter 3 - Simple types 3.1. INSTRUCTIONS num size(variable) Syntax num size( ) Function Returns the size of the variable. If the variable is a program parameter passed by reference, the size depends on the index specified when calling up the program. Parameter variable variable of any type Example num nTable[10] program printSize(num& nParameter) begin putln(size(nParameter)) end call printSize(nTable) call printSize(nTable[6]) D28062804A - 02/2006 // displays 10 // displays 4 29 / 160 3.2. BOOL TYPE 3.2.1. DEFINITION bool type values or constants can be: - true: true value - false: false value When a bool type variable is initialized, its default value is false. 3.2.2. OPERATORS In ascending order of priority: bool = Assigns the value of condition to the variable variable and returns the value of condition bool or Returns the value of the logical OR between condition1 and condition2. condition2 is only assessed if condition1 is false. bool and Returns the value of the logical AND between condition1 and condition2. condition2 is only assessed if condition1 is true. bool xor bool Returns the value of the exclusive OR between condition1 and condition2 bool != Tests the equality of the values of condition1 and condition2. Returns true if the values are different, and otherwise returns false. bool == Tests the equality of the values of condition1 and condition2. Returns true if the values are identical, and otherwise returns false. bool ! Returns the negation of the value of the condition 30 / 160 D28062804A - 02/2006 Chapter 3 - Simple types 3.3. NUM TYPE 3.3.1. DEFINITION The num type modelizes a numerical value with about 14 significant digits. The accuracy of each numerical computation is therefore limited by these 14 significant digits. This must be taken into account when testing the equality of two numerical values: this must normally be done within a specific level. Example putln(sel(cos(90)==0,1,-1)) putln(sel(abs(cos(90))<0.000000000000001,1,-1)) // displays -1 // displays 1 The format of numerical type constants is as follows: [-] [. ] Example 1 0.2 -3.141592653 The default initialization value of num type variables is 0. D28062804A - 02/2006 31 / 160 3.3.2. OPERATORS In ascending order of priority: num = Assigns Value to the variable variable and returns Value. bool != Returns true if Value1 is not equal to Value2, otherwise returns false. bool == Returns true if Value1 is equal to Value2, otherwise returns false. bool >= Returns true if Value1 is greater than or equal to Value2, otherwise returns false. bool > Returns true if Value1 is definitely greater than Value2, otherwise returns false. bool <= Returns true if Value1 is less than or equal to Value2, otherwise returns false. bool < Returns true if Value1 is definitely less than Value2, otherwise returns false. num - Returns the difference between Value1 and Value2. num + Returns the sum of Value1 and Value2. num % Returns the remainder of the integer division of Value1 by Value2. An execution error is generated if Value2 is 0. The sign of the remainder is the same as that of Value1. num / Returns the quotient of Value1 by Value2. An execution error is generated if Value2 is 0. num * Returns the product of Value1 and Value2. num - Returns the inverse of Value. 3.3.3. INSTRUCTIONS num sin(num angle) Syntax num sin( ) Function Returns the sine of angle. Parameter num angle angle in degrees Example putln(sin(30)) 32 / 160 // displays 0.5 D28062804A - 02/2006 Chapter 3 - Simple types num asin(num Value) Syntax num asin( ) Function Returns the inverse sine of Value in degrees. The resulting angle is between -90 and +90 degrees. An execution error is generated if Value is greater than 1 or less than -1. Parameter num Value Numerical expression Example putln(asin(0.5)) // displays 30 num cos(num angle) Syntax num cos( ) Function Returns the cosine of angle. Parameter num angle angle in degrees Example putln(cos(60)) // displays 0.5 num acos(num Value) Syntax num acos( ) Function Returns the inverse cosine of Value, in degrees. The resulting angle is between 0 and 180 degrees. An execution error is generated if Value is greater than 1 or less than -1. Parameter num Value Numerical expression Example putln(acos(0.5)) D28062804A - 02/2006 // displays 60 33 / 160 num tan(num angle) Syntax num tan( ) Function Returns the tangent of angle. Parameter num angle angle in degrees Example putln(tan(45)) // displays 1.0 num atan(num Value) Syntax num atan( ) Function Returns the inverse tangent of Value, in degrees. The resulting angle is between -90 and +90 degrees. Parameter num Value Numerical expression Example putln(atan(1)) // displays 45 num abs(num Value) Syntax num abs( ) Function Returns the absolute value of Value. Parameter num Value Numerical expression Example putln(sel(abs(45)==abs(-45),1,-1)) 34 / 160 // displays 1 D28062804A - 02/2006 Chapter 3 - Simple types num sqrt(num Value) Syntax num sqrt( ) Function Returns the square root of Value. An execution error is generated if Value is negative. Parameter num Value Numerical expression Example putln(sqrt(9)) // displays 3 num exp(num Value) Syntax num exp( ) Function Returns the exponential function of Value. An execution error is generated if Value is too big. Parameter num Value Numerical expression Example putln(exp(1)) D28062804A - 02/2006 // displays 2.718282 35 / 160 num ln(num Value) Syntax num ln( ) Function Returns the natural logarithm of Value. An execution error is generated if Value is negative or zero. Parameter num Value Numerical expression Example putln(ln(2.718281828)) // displays 1 num log(num Value) Syntax num log( ) Function Returns the common logarithm of Value. An execution error is generated if Value is negative or zero. Parameter num Value Numerical expression Example putln(log(10)) 36 / 160 // displays 1 D28062804A - 02/2006 Chapter 3 - Simple types num roundUp(num Value) Syntax num roundUp( ) Function Returns Value rounded up to the nearest integer. Parameter num Value Numerical expression Example putln(roundUp(7.8)) putln(roundUp(-7.8)) // Displays 8 // Displays -7 num roundDown(num Value) Syntax num roundDown( ) Function Returns Value rounded down to the nearest integer. Parameter num Value Numerical expression Example putln(roundDown(7.8)) putln(roundDown(-7.8)) // Displays 7 // Displays -8 num round(num Value) Syntax num round( ) Function Returns Value rounded up or down to the nearest integer. Parameter num Value Numerical expression Example putln(round(7.8)) putln(round(-7.8)) D28062804A - 02/2006 // Displays 8 // Displays -8 37 / 160 num min(num x, num y) Syntax num min( , ) Function Returns the minimum values of x and y. Parameter num x Numerical expression num y Numerical expression Example putln(min(-1,10)) // Displays -1 num max(num x, num y) Syntax num max( , ) Function Returns the maximum values of x and y. Parameter num x Numerical expression num y Numerical expression Example putln(max(-1,10)) // Displays 10 num limit(num Value, num min, num max) Syntax num limit( , , ) Function Returns Value limited by min and max. Parameter num Value Numerical expression num min Numerical expression num max Numerical expression Example putln(limit(30,-90,90)) putln(limit(100,90,-90)) putln(limit(-100,-90,90)) 38 / 160 // displays 30 // displays 90 // displays -90 D28062804A - 02/2006 Chapter 3 - Simple types num sel(bool condition, num Value1, num Value2) Syntax num sel( , , ) Function Returns Value1 if condition is true, otherwise returns Value2. Parameter bool condition Boolean expression num Value1 Numerical expression num Value2 Numerical expression Example putln(sel(bFlag,a,b)) // is equivalent to if bFlag==true putln(a) else putln(b) endIf D28062804A - 02/2006 39 / 160 3.4. STRING TYPE 3.4.1. DEFINITION String type variables are used to store texts. The maximum length of a string is 128 characters. The characters supported by the string type are non-accented editable characters (ASCII code between 32 and 126) except for the character". string type variables are initialized by default at the value "" (zero length). 3.4.2. OPERATORS In ascending order of priority: string = Assigns string to the variable variable and returns string. bool != Returns true if string1 and string2 are not identical, otherwise returns false. bool == Returns true if string1 and string2 are identical, otherwise returns false. string + Returns the first 128 characters of string1 concatenated with string2. 3.4.3. INSTRUCTIONS string toString(string format, num Value) Syntax string toString( , ) Function Returns a character string representing Value according to the format display format. The format is "size.precision", where size is the minimum size of the result (spaces are added at the beginning of the string if necessary), and precision is the number of significant digits after the decimal point (the 0 at the end of the string are replaced by spaces). By default, size and precision equal 0. The value's integer portion is never shortened, even if its display length exceeds size. Parameter string format Character string type expression num Value Numerical expression Example num nPi nPi = 3.141592654 putln(toString(".4", nPi)) putln(toString("8", nPi)) putln(toString("8.4", nPi)) putln(toString("8.4", 2.70001)) putln(toString("", nPi)) putln(toString("1.2", 1234.1234)) // // // // // // displays «3.1416» displays « 3» displays « 3.1416» displays « 2.7 » displays «3» displays «1234.12» See also string chr(num Ascii Code) string toNum(string string, num& Value, bool& report) 40 / 160 D28062804A - 02/2006 Chapter 3 - Simple types string toNum(string string, num& Value, bool& report) Syntax string toNum( , , bool& report) Function Computes the numerical Value represented at the beginning of the string specified, and returns string in which all the characters have been deleted until the next representation of a numerical Value. If the beginning of the string does not represent a numerical value, report is set to false and Value is not modified, otherwise report is set to true. Parameter string string Character string type expression num& Value num type variable bool& report bool type variable Example num nVal bool bOk putln(toNum("10 20 30", nVal, bOk)) putln(toNum("a10 20 30", nVal, bOk)) putln(toNum("10 end", nVal, bOk)) buffer = "+90 0.0 -7.6 17.3" do buffer = toNum(buffer, nVal, bOk) putln(nVal) until (bOk != true) // displays «20 30», nVal equals 10, bOk equals true // displays «a10 20 30», nVal is unchanged, bOk equals false // displays «», nVal equals 10, bOk equals true // displays successively 90, 0, -7.6, 17.3 See also string toString(string format, num Value) D28062804A - 02/2006 41 / 160 string chr(num Ascii Code) Syntax string chr( ) Function Returns the string made up of the ASCII Value code character, if it is supported by the string type, otherwise returns an empty string. The following table gives the ASCII codes below 128. The characters in grey boxes are not supported by the string type: Parameter num Value Expression of num type Example putln(chr(65)) // displays «A» See also num asc(string text, num position) 42 / 160 D28062804A - 02/2006 Chapter 3 - Simple types num asc(string text, num position) Syntax num asc( , ) Function Returns the ASCII code of the index character position. Returns -1 if position is negative or greater than string. Parameter string string Character string type expression num position Numerical expression Example putln(asc("A",0)) // displays 65 See also string chr(num Ascii Code) string left(string string, num size) Syntax string left( , ) Function Returns the first size characters of string. If size is greater than the length of string, the instruction returns string. An execution error is generated if size is negative. Parameter string string Character string type expression num size Numerical expression Example putln(left("hello world",5)) D28062804A - 02/2006 // displays «hello» 43 / 160 string right(string string, num size) Syntax string right( , ) Function Returns the last size characters of string. If the number specified is greater than the length of string, the instruction returns string. An execution error is generated if size is negative. Parameter string string Character string type expression num size Numerical expression Example putln(right("hello world",5)) // displays «world» string mid(string string, num size, num position) Syntax string mid( , , ) Function Returns size characters of string from the position index character, stopping at the end of string. An execution error is generated if size or position are negative. Parameter string string Character string type expression num size Numerical expression num position Index in the string (from 0 to 127) Example putln(mid(«hello wild world»,4,6)) 44 / 160 // displays «wild» D28062804A - 02/2006 Chapter 3 - Simple types string insert(string string, string insertion, num position) Syntax string insert( , , ) Function Returns string in which insertion is inserted after the position index character. If position is greater than the size of string, insertion is inserted at the end of string. The result is truncated to 128 characters. An execution error is generated if position is negative. Parameter string string Character string type expression string insertion Character string type expression num position Index in the string (from 0 to 127) Example putln(insert("hello world","wild ",6)) // displays «hello wild world» string delete(string string, num size, num position) Syntax string delete( , , ) Function Returns string in which size have been deleted from the position index character. If position is greater than the length of string, the instruction returns string. An execution error is generated if size or position are negative. Parameter string string Character string type expression num size Numerical expression num position Index in the string (from 0 to 127) Example string source source = "hello wild world" putln(delete(source,5,6)) putln(source) D28062804A - 02/2006 // displays «hello world» // displays «hello wild world» 45 / 160 num replace(string string, string replacement, num size, num position) Syntax string replace( , , , ) Function Returns string in which size characters have been replaced from the position index character by replacement. If position is greater than the length of string, the instruction returns string. An execution error is generated if size or position are negative. Parameter string string Character string type expression string replacement Character string type expression num size Numerical expression num position Index in the string (from 0 to 127) Example putln(replace("hello ? world","wild",1,6)) // displays «hello wild world» num find(string string1, string string2) Syntax num find( , ) Function Returns the index (between 0 and 127) of the first character in the first occurrence of string2 in string1. If string2 does not appear in string1, the instruction returns -1. Parameter string string1 Character string type expression string string2 Character string type expression Example putln(find("hello wild world","wild")) 46 / 160 // displays 6 D28062804A - 02/2006 Chapter 3 - Simple types num len(string string) Syntax num len( ) Function Returns the size of string. Parameter string string Character string type expression Example putln(len("hello wild world")) D28062804A - 02/2006 // displays 16 47 / 160 3.5. DIO TYPE 3.5.1. DEFINITION The dio type is used to link a VAL3 variable to a system on/off input/output. The inputs/outputs declared in the system can be directly used in a VAL3 application, without having to be declared in the application as a global or local variable. The dio type is therefore used above all to configure a program using an input/output. All instructions using a dio type variable not linked to an input/output declared in the system generate an execution error. By default, a dio type variable is not linked to a system input/output and therefore generates an execution error if used as such in a program. 3.5.2. OPERATORS In ascending order of priority: bool = Assigns the input/output status to output, and returns the status. An execution error is generated if output is not linked to a system output. bool = Assigns condition to the output status and returns condition. An execution error is generated if output is not linked to a system output. bool != Returns true if input1 and input2 do not have the same status, otherwise returns false. bool != Returns true if the input status is not equal to condition, otherwise returns false. bool == Returns true if the input status is equal to condition, otherwise returns false. bool == Returns true if input1 and input2 have the same status, otherwise returns false. 48 / 160 D28062804A - 02/2006 Chapter 3 - Simple types 3.5.3. INSTRUCTIONS void dioLink(dio& variable, dio source) Syntax void dioLink( , ) Function Links variable to the input/output to which source is linked. An execution error is generated if source is an input/output declared in the system. Parameter dio& variable On/off input/output type variable dio source Expression of dio type Example dio dGripper1 dio dGripper2 dioLink(dGripper1, io:valve1) dioLink(dGripper2, dGripper1) dioLink(dGripper1, io:valve2) // links dGripper1 to valve1 system input/output // links dGripper2 to the dGripper1 input/output, and therefore to valve1 // dGripper2 is now linked to valve2, and dGripper1 is still linked to valve1 num dioGet(dio dTable) Syntax num dioGet( ) Function Returns the numerical value from dTable of dio read as an integer written in binary code, i.e.: dTable[0]+2 dTable[1]+4 dTable[2]+...+2 k dTable[k], where dTable[i] = 1 if dTable[i] is true, otherwise 0. An execution error is generated if a member of dTable is not linked to a system input/output. Parameter dio nTable Expression of dio type Example dio dCode[4] dCode[0] = false dCode[1] = true dCode[2] = false dCode[3] = true putln(dioGet(dCode)) // displays 10 = 0 + 2 1 + 4 0 + 8 1 See also num dioSet(dio dTable, num Value) D28062804A - 02/2006 49 / 160 num dioSet(dio dTable, num Value) Syntax num dioSet( , ) Function Assigns the whole part of Value in binary code to the outputs in the dTable, and returns the value actually assigned, i.e.: dTable[0]+2 otherwise 0. dTable[1]+4 dTable[2]+...+2 k dTable[k], where dTable[i] = 1 if dTable[i] is true, An execution error is generated if a member of dTable is not linked to a system output. Parameter dio dTable Expression of dio type num Value Expression of num type Example dio dCode[4] putln(dioSet(dCode, 10) putln(dioSet(dCode, 26) // displays 10 = 0 + 2 1 + 4 0 + 8 1 // displays 10, code is not big enough to encode 26 completely See also num dioGet(dio dTable) 50 / 160 D28062804A - 02/2006 Chapter 3 - Simple types 3.6. AIO TYPE 3.6.1. DEFINITION The aio type is used to link a VAL3 variable to a system numerical input/output (integer or floating point value). The inputs/outputs declared in the system can be directly used in a VAL3 application, without having to be declared in the application as a global or local variable. The aio type is therefore used above all to configure a program using an input/output. All instructions using a aio type variable not linked to an input/output declared in the system generate an execution error. By default, a aio type variable is not linked to a system input/output and therefore generates an execution error if used as such in a program. 3.6.2. INSTRUCTIONS void aioLink(aio& variable, aio source) Syntax void aioLink( , ) Function Links variable to the input/output to which source is linked. An execution error is generated if source is an input/output declared in the system. Parameter aio& variable aio type variable aio source Expression of aio type Example aio aSensor1 aio aSensor2 aioLink(aSensor1, io:system1) aioLink(aSensor2, aSensor1) aioLink(aSensor1, io:system2) // links aSensor1 to system1 system input/output // links aSensor2 to the aSensor1 input/output, and therefore to system1 // aSensor2 is now linked to system2, and aSensor1 is still linked to system1 num aioGet(aio input) Syntax num aioGet( ) Function Returns the numerical value of input. An execution error is generated if input is not linked to a system input/output. Parameter aio & table Expression of aio type Example aio aSensor putln(aioGet(aSensor)) // displays the current sensor value See also num aioSet(aio output, num Value) D28062804A - 02/2006 51 / 160 num aioSet(aio output, num Value) Syntax num aioSet( , ) Function Assigns Value to output and returns Value. An execution error is generated if output is not linked to a system output. Parameter aio& output Expression of aio type num Value Expression of num type Example aio aCommand putln(aioSet(aCommand, -12.3)) // displays -12.3 See also num aioGet(aio input) 52 / 160 D28062804A - 02/2006 Chapter 3 - Simple types 3.7. 3.7.1. SIO TYPE DEFINITION The sio type is used to link a VAL3 variable to a serial port or an Ethernet socket connection. A sio inputoutput is characterized by: • Parameters specific to the type of communication, defined in the system • An end of string character, to allow the use of the string type • A communication timeout delay The serial system inputs-outputs are active at all times. The Ethernet socket connections are activated at the time of the initial reading or writing access by a VAL3 program. The Ethernet socket connections are deactivated automatically when the VAL3 application is closed. The inputs/outputs declared in the system are directly usable in a VAL3 application, without having to be declared in the application as a global or local variable. The sio type is therefore used above all to configure a program using an input/output. All instructions using a sio type variable not linked to an input/output declared in the system generate an execution error. By default, a sio type variable is not linked to a system input/output and therefore generates an execution error if used as such in a program. Operators When the communication timeout delay is reached on reading or writing the serial input/output, an execution error is generated. string = Writes successively on output the data item characters, followed by the end of string character, and returns data item. num = Writes on output the closest integer to data item, modulo 256, and returns the value actually sent. num = Reads a character on input and assigns data item with the ASCII code for the character. string = Reads on input a string of characters and affects data item with this string. The characters that are not supported by the string type are ignored. The string is completed when the end of string character is read, or when data item reaches the maximum size of a string (128 characters). The end of string character is not copied into data item. D28062804A - 02/2006 53 / 160 3.7.2. INSTRUCTIONS void sioLink(sio& variable, sio source) Syntax void sioLink( , ) Function Links variable to the serial system input/output to which source is linked. An execution error is generated if source is an input/output declared in the system. Parameter sio& variable sio type variable sio source Expression of sio type Example sio sSensor1 sio sSensor2 sioLink(sSensor1, io: serial1) sioLink(sSensor2, sSensor1) sioLink(sSensor2, io: serial1) // links sSensor1 to serial1 system input/output // links sSensor2 to the sSensor1 input/output, and therefore to serial1 // links sSensor2 to serial1, sSensor1 is still linked to serial1 num clearBuffer(sio input) Syntax num clearBuffer( ) Function Empties the input reading buffer and returns the number of characters thus deleted. For an Ethernet socket connection, clearBuffer deactivates (closes) the socket, clearBuffer returns -1 if the socket has already been deactivated. An execution error is generated if input is not connected to a system serial link or Ethernet socket. num sioGet(sio input, num& data) Syntax num sioGet( , ) Function Reads a table of characters on input and returns the number of characters read. The reading sequence stops when the data item table is full or when the input reading buffer is empty. For an Ethernet socket connection, sioGet tries first of all to make a connection if there is no active connection. When the timeout for input communication has been reached, sioGet returns -1. If the connection is active, but there are no data in the input reader buffer, sioGet waits until data are received or until the end of the waiting period has been reached. An execution error is generated if input is not connected to a system serial link or Ethernet socket, or if data is not a VAL3 variable. 54 / 160 D28062804A - 02/2006 Chapter 3 - Simple types num sioSet(sio output, num& data) Syntax num sioSet( , ) Function Writes a table of characters on output and returns the number of characters written. Numerical values are converted before transmission into integers between 0 and 255, taking the nearest integer modulo 256. For an Ethernet socket connection, sioSet tries first of all to make a connection if there is no active connection. When the end of the output communication waiting time has been reached, sioSet returns -1. The number of characters written can be less than the size of data if a communication error is detected. An execution error is generated if output is not connected to a system serial link or Ethernet socket. D28062804A - 02/2006 55 / 160 56 / 160 D28062804A - 02/2006 Chapter 4 - User interface CHAPTER 4 USER INTERFACE D28062804A - 02/2006 57 / 160 58 / 160 D28062804A - 02/2006 Chapter 4 - User interface 4.1. USER PAGE In the VAL3 language, the user interface instructions are used to: - display messages on a page of the manual control pendant (MCP) reserved for the application - acquire keystrokes on the MCP keyboard User page The user page has fourteen (14) 40-column lines. The last line can be used to create menus with the associated key. An additional line is available for a title display. 4.2. INSTRUCTIONS void userPage(), void userPage(bool fixed) Syntax void userPage () void userPage ( ) Function Displays the user page on the MCP screen. If the parameter fixed is true, only the user page is accessible for the operator, except for the profile changing page that is accessible via the "Shift User" keyboard shortcut. When this page is displayed, it is possible to stop the application using the "Stop" key if the current user profile authorizes the action. If the parameter is false, the other CS8 pages become accessible again. D28062804A - 02/2006 59 / 160 void gotoxy(num x, num y) Syntax void gotoxy( , ) Function Positions the cursor at the (x, y) coordinates on the user page. The coordinates of the top left-hand corner are (0,0) and those of the bottom right-hand corner are (39, 13). The x abscissa is taken modulo 40. The y ordinate is taken modulo 14. Parameter num x Cursor abscissa (0 to 39) num y Cursor ordinate (0 to 13) See also void cls() void cls() Syntax void cls() Function Clears the user page and sets the cursor to (0,0). See also void gotoxy(num x, num y) void put() void putln() Syntax void put( ) void put( ) void putln( ) void putln( ) Function Displays the specified string or Value (to 3 decimal places) at the cursor position on the user page. The cursor is then positioned on the character after the last character of the message displayed (put instruction), or on the first character of the next line (putln instruction). At the end of a line, the display continues on the following line. At the end of a page, the user page display moves up one line. Parameter string string Character string type expression num Value Numerical expression See also void popUpMsg(string string) void logMsg(string string) void title(string string) 60 / 160 D28062804A - 02/2006 Chapter 4 - User interface void title(string string) Syntax void title( ) Function Changes the title of the user page. The title() instruction does not change the current cursor position. Parameter string string Character string type expression num get() Syntax num get( ) num get( ) num get() Function Acquires a string, a number or a control panel key. string or Value are displayed at the current cursor position and can be changed by the user. The entry is terminated by pressing a menu key or the Return or Esc keys. The instruction returns the code of the key used to end the entry. Pressing Return or a menu key updates the string or Value variable. Pressing Esc does not change the variable. If no parameter is passed, the get() instruction waits for the operator to press any key and returns the key code. The key that has been pressed is not displayed. In all cases, the current position of the cursor is unaffected by the get() instruction. Without Shift 3 Caps Space 283 - 32 2 282 Shift Esc With Shift 3 Caps Space 283 - 32 Run 2 Shift 282 Move Help Ret. Move - - 255 - 270 - Menu Tab Up Bksp Stop - Esc Help Ret. Run - 255 - 270 - Menu UnTab PgUp Bksp Stop - - 259 261 263 - 260 262 263 1 User Left Down Right 1 User Home PgDn End 281 - 264 266 268 281 - 265 267 269 Menus (with or without Shift): F1 271 F2 272 D28062804A - 02/2006 F3 273 F4 274 F5 275 F6 276 F7 277 F8 278 61 / 160 For standard keys, the code returned is the ASCII code of the corresponding character: Without Shift q 113 a 97 z 122 w 119 s 115 x 120 e 101 d 100 c 99 r 114 f 102 v 118 7 55 4 52 1 49 8 56 5 53 2 50 9 57 6 54 3 51 + 43 45 0 48 Q 81 A 65 Z 90 W 87 S 83 X 88 E 69 D 68 C 67 R 82 F 70 V 86 t 116 g 103 b 98 y 121 h 104 n 110 u 117 j 106 m 109 i 105 k 107 . 46 o 111 l 108 , 44 p 112 < 60 = 61 ( 40 : 58 95 ) 41 ! 33 . 46 [ 91 { 123 , 44 ] 93 } 125 > 62 U 85 J 74 M 77 I 73 K 75 $ 36 O 79 L 76 \ 92 P 80 } 125 = 61 With Shift * 42 / 47 " 34 ; 59 ? 63 % 37 With double Shift T 84 G 71 B 66 Y 89 H 72 N 78 Parameter string& string string type variable num& Value num type variable Example num nValue num nKey // Waits for Return to be pressed to confirm the entry do nKey = get (nValue) until (nKey == 270) See also num getKey() 62 / 160 D28062804A - 02/2006 Chapter 4 - User interface num getKey() Syntax num getKey() Function Acquires a key stroke from the control panel keyboard. Returns the code of the last key pressed since the last getKey() call, or -1 if no key has been pressed since then. Unlike the get() instruction, getKey() returns immediately. The key pressed is not displayed and the current cursor position stays unchanged. Example // Displays the system clock until any key is pressed getKey() // Resets the code of the last key pressed while (getKey()== -1) gotoxy(0,0) put(toString(«», clock()* 10)) endWhile See also num get() bool isKeyPressed(num code) bool isKeyPressed(num code) Syntax bool isKeyPressed( ) Function Returns the status of the key specified by its code (see get()), true if the key is pressed, otherwise false. See also num getKey() void popUpMsg(string string) Syntax void popUpMsg( ) Function Displays string in a "popup" window above the current MCP window. This window remains displayed until it is confirmed by clicking on Ok in the menu or pressing the Esc key. See also void userPage(), void userPage(bool fixed) void put() void putln() D28062804A - 02/2006 63 / 160 void logMsg(string string) Syntax void logMsg( ) Function Writes string in the system history. The message is saved with the current date and time. See also void popUpMsg(string string) string getProfile() Syntax string getProfile() Function Returns the name of the current user profile. 64 / 160 D28062804A - 02/2006 Chapter 5 - Tasks CHAPTER 5 TASKS D28062804A - 02/2006 65 / 160 66 / 160 D28062804A - 02/2006 Chapter 5 - Tasks 5.1. DEFINITION A task is a program that is running. An application typically contains an arm movement task, an automaton task, a user interface task, a safety signal monitoring task, communication tasks, etc.. A task is defined by the following elements: • • • • • 5.2. a name: a task identifier that is unique in the library or application a priority, or a period: a task sequencing parameter a program: a task entry (and exit) point a status: running or stopped the next instruction to be executed (and its context) RESUMING AFTER AN EXECUTION ERROR When an instruction causes an execution error, the task is stopped. The taskStatus() instruction is used to diagnose the execution error. The task can then be resumed via the taskResume() instruction. If the execution error can be corrected, the task can resume from the instruction line where it was stopped. Otherwise, it must be restarted from before or after that instruction line. Starting and stopping the application When an application starts, its start() program is executed in a task with the name of the application followed by ’~’, and with priority 10. When an application stops, its stop() program is executed in a task with the name of the application preceded by ’~’, priority 10. If a VAL3 application is stopped via the CS8 user interface, the start task, if it still exists, is immediately destroyed. The stop() program is run next, and then any remaining application tasks are deleted in the reverse order to that in which they were created. 5.3. VISIBILITY A task is visible only from within the program or library that created it. The instructions taskSuspend(), taskResume(), taskKill() and taskStatus() act on a task created by another library as if the task was not created. Two different libraries may therefore create tasks with the same name. D28062804A - 02/2006 67 / 160 5.4. SEQUENCING When several tasks of an application are running, they appear to run concurrently and independently. This is true if the whole application is observed over a sufficiently long period of time (about a second), but not true if its specific behaviour is examined over a short period of time. In fact, as the system has only one processor, it can only execute one task at a time. Simultaneous execution is simulated by very fast sequencing of the tasks that execute a few instructions in turn before the system moves on to the next task. Sequencing priority T1 execute delay() function waiting time T1 T1 T1 T2 T2 T3 T2 T3 T2 T3 T2 T3 T3 time VAL3 task sequencing obeys the following rules: S5.3 1. The tasks are sequenced in the order in which they were created 2. During each sequence, the system attempts to execute a number of VAL3 instruction lines corresponding to the priority of the task. 3. When an instruction line cannot be terminated (execution error, waiting for a signal, task stopped, etc.) the system moves on to the next VAL3 task. 4. When all VAL3 tasks have been completed, the system keeps some free time for lower priority system tasks (such as network communication, user screen refresh, file access), before a new cycle is started. The maximum delay between two sequential cycles is equal to the duration of the last sequencing cycle; but, most of the time, this delay is null because the system does not need it. The VAL3 instructions that can cause a task to be sequenced immediately are as follows: • watch() (condition wait timeout) • delay() (timeout) • wait() (condition waiting time) • waitEndMove() (arm stop waiting time) • open() and close() (arm stop waiting time followed by timeout) • get() (keystroke waiting time) • taskResume() (waits until the task is ready for restart) • taskKill() (waits for the task to be actually killed) • disablePower() (waits for power to be actually cut off) • The instructions accessing the contents of the disk (libLoad, libSave, libDelete, libList) • The sio reading/writing instructions (operator =, sioGet(), sioSet()) • setMutex() (waits for the Boolean mutex to be false) 68 / 160 D28062804A - 02/2006 Chapter 5 - Tasks S5.3 5.5. SYNCHRONOUS TASKS The sequence described above is the sequence of normal tasks, called asynchronous tasks, that are scheduled by the system so that they execute as fast as possible. It is sometimes necessary to schedule tasks at regular periods of time, for data acquisition or device control: such tasks are called synchronous tasks. They are executed in the sequencing cycle by interrupting the asynchronous task between two VAL3 lines. When the synchronous tasks have finished, the asynchronous task resumes. The sequencing of the VAL3 synchronous tasks obeys the following rules: 1. Each synchronous task is sequenced exactly once per period of time specified at the task creation (for instance, once every 4 ms). 2. At each sequence, the system executes up to 3000 VAL3 instruction lines. It shifts to the next task when an instruction line cannot be completed immediately (runtime error, waiting for a signal, task stopped, ...). In practice, a synchronous task is often explicitly ended by using the "delay(0)" instruction to force the sequencing of the next task. 3. The synchronous tasks with same period are sequenced in the order in which they were created. 5.6. OVERRUN If the execution of a VAL3 synchronous task takes longer than the specified period, the current cycle ends normally, but the next cycle is cancelled. This overrun error is signalled to the VAL3 application by setting the Boolean variable specified for this purpose at the task creation to "true". At the beginning of each cycle this Boolean variable thus shows whether the previous sequencing was carried out entirely or not. 5.7. INPUTS / OUTPUTS REFRESH Inputs are refreshed before both the synchronous tasks and the asynchronous tasks. In the same way, outputs are refreshed after both the synchronous tasks and the asynchronous tasks. WARNING: It is not possible to specify which inputs / outputs are used by one task. As a consequence, each refresh is performed on all inputs / outputs. The refresh of inputs / outputs on Modbus, BIO board, MIO board, CIO board or AS-i bus are not controlled by the VAL3 scheduler. They can be refreshed at any time during the sequencing of a VAL3 task. D28062804A - 02/2006 69 / 160 5.8. SYNCHRONIZATION It is sometimes necessary to synchronize several tasks before they are executed. If the amount of time required to execute each of the tasks is known beforehand, they can be synchronized by simply waiting for a signal generated by the slowest task. However, if it is not known which task is the slowest, it is necessary to use a more complex synchronizing mechanism for which an example of VAL3 programming is shown below. Example // synchronization of control for global variables num n bool bSynch n=0 bSynch=false program Task1() begin while(true) call synchro(n, bSynch, 2) endWhile end program Task2() begin while(true) call synchro(n, bSynch, 2) endWhile end // Synchronization program for N tasks program synchro(num& n, bool& bSynch, num N) begin n = n + 1 wait((n==N) or (bSynch==true)) bSynch = true n = n - 1 wait((n==0) or (bSynch == false)) bSynch = false end 70 / 160 // Initialization of the global datas // Synchronization with task 2 // Synchronization with task 1 // Task synchronization waiting time // Task release waiting time D28062804A - 02/2006 Chapter 5 - Tasks 5.9. SHARING RESOURCES When several tasks use the same system or cell resource (global datas, screen, keyboard, robot, etc.) it is importent to ensure that there is no conflict between them. A mutual exclusion (’mutex’) mechanism that protects a resource by allowing it to be accessed by only one task at a time can be used for this purpose. An example of mutex programming in VAL3 is shown below. Example bool bScreen bScreen= false program Task1() begin while(true) setMutex(bScreen) call fillScreen(1) bScreen = false delay(0) endWhile end program Task2() begin while(true) setMutex(bScreen) call fillScreen(2) bScreen = false delay(0) endWhile end // Initialization: screen resource is free // Screen resource requested // Screen resource released // Proceeds to the next task // Screen resource requested // Screen resource released // Proceeds to the next task // program to fill the screen with the digit i program fillScreen(num i) num x num y begin i = i % 10 for x = 0 to 39 for y = 0 to 13 gotoxy(x, y) put(i); endFor endFor end D28062804A - 02/2006 71 / 160 5.10. INSTRUCTIONS void taskSuspend(string name) Syntax void taskSuspend( ) Function Suspends execution of the name task. If the task is already STOPPED, the instruction has no effect. An execution error is generated if name does not correspond to any VAL3 task, or corresponds to a VAL3 task created by another library. Parameter string name Character string type expression See also void taskResume(string name, num skip) void taskKill(string name) void taskResume(string name, num skip) Syntax void taskResume ( , ) Function Resumes execution of the name task on the line located skip instruction lines before or after the current line. If skip is negative, the program resumes before the current line. If the task status is not STOPPED, the instruction has no effect. An execution error is generated if name does not correspond to a VAL3 task, corresponds to a VAL3 task created by another library, or if there is no instruction line at the specified skip. Parameter string name Character string type expression num skip Numerical expression See also void taskSuspend(string name) void taskKill(string name) 72 / 160 D28062804A - 02/2006 Chapter 5 - Tasks void taskKill(string name) Syntax void taskKill ( ) Function Suspends and then deletes the name task. When the instruction has been executed, the name task is no longer present in the system. If there is no name task, or if the name task was created by another library, the instruction has no effect. Parameter string name Character string type expression See also void taskSuspend(string name) void taskCreate string name, num priority, program(...) void setMutex(bool& mutex) Syntax void setMutex( ) Function Wait for the bMutex variable to be false, then set it to true. This function is required to use a Boolean variable as a mutual exclusion mechanism for protecting shared resources (see chapter 5.9). D28062804A - 02/2006 73 / 160 num taskStatus(string name) Syntax num taskStatus ( ) Function Returns the current status of the name task, or the task execution error code if the latter is in error condition: Code Description -1 0 1 10 11 20 21 29 30 31 32 40 41 60 61 70 80 81 90 100 101 102 103 104 105 106 122 123 124 125 There is no task name created by the current library or application No execution error A task is running Invalid numerical calculation (division by zero). Invalid numerical calculation (e.g.ln(-1)) Access to a table with an index that is larger than the table size. Access to a table with a negative index. Invalid task name. See taskCreate() instruction. The specified name does not correspond to any VAL3 task. A task with the same name already exists. See taskCreate instruction. Only 2 different periods for synchronous tasks are supported. Change scheduling period. Not enough memory space available. Not enough memory space to run the task. See the run memory size. Maximum instruction run time exceeded. Internal VAL3 interpreter error Invalid instruction parameter. See the corresponding instruction. Uses data or a program from a library not loaded in the memory. Incompatible kinematic: Use of a point/joint/config that is not compatible with the arm kinematic. The task cannot resume from the location specified. See taskResume() instruction. The speed specified in the motion descriptor is invalid (negative or too great). The acceleration specified in the motion descriptor is invalid (negative or too great). The deceleration specified in the motion descriptor is invalid (negative or too great). The sideways speed specified in the motion descriptor is invalid (negative or too great). The rotation speed specified in the motion descriptor is invalid (negative or too great). The reach parameter specified in the movement descriptor is invalid (negative). The leave parameter specified in the movement descriptor is invalid (negative). Attempt to write in a system input. Use of a dio, aio or sio input/output not connected to a system input/output. Attempt to access a protected system input/output Read or write error on a dio, aio or sio (field bus error) Cannot run this movement instruction: a previous movement request could not be completed (point out of reach, singularity, configuration problem, etc.) Movement command not supported Invalid movement instruction: check the movement descriptor. Invalid flange tool coordinates Invalid world tool coordinates Use of a point without a reference frame. See Definition. Use of a frame without a reference frame. See Definition. Use of a tool without reference tool. See Definition. Invalid frame or reference tool (global variable linked to a local variable) No runtime licence for this instruction, or demo licence is over. 150 153 154 160 161 162 163 164 165 250 74 / 160 D28062804A - 02/2006 Chapter 5 - Tasks Parameter string name Character string type expression See also void taskResume(string name, num skip) void taskKill(string name) void taskCreate string name, num priority, program(...) Syntax void taskCreate , , program([p1] [,p2]) Function Creates and starts up the name task. name must contain 1 to 15 characters selected from "a..zA..Z0..9_". There must not be another task with the same name created by the same library. Execution of name begins with a call to program using the parameters specified. It is not possible to use a local variable for a parameter passed by reference. The task ends by default with the last instruction line of program, or earlier, if it is deleted explicitly. priority must be between 1 and 100. When the task is sequenced, the system executes a number of instruction lines corresponding to the priority, or fewer if a blocking instruction is encountered (see the chapter entitled Sequencing). An execution error is generated if the system does not have enough memory to create the task, if name is not valid or already in use in the same library, or if priority is not valid. Parameter string name Character string type expression num priority Numerical expression program Name of an application program p1 Type of expression specified by the program Example program display(string& sText) begin putln(sText) sText = "stop" end string sMessage program start() begin sMessage = "start" taskCreate "t1", 10, display(sMessage) wait(taskStatus("t1") == -1) putln(sMessage) end // displays « start » // waits for the end of t1 // displays "stop" See also void taskSuspend(string name) void taskKill(string name) num taskStatus(string name) D28062804A - 02/2006 75 / 160 S5.3 void taskCreateSync string name, num period, bool& overrun, program(...) Syntax void taskCreateSync , , , program(...) Function Creates and starts a synchronous task. The execution of the task starts with the call of the specified program with the specified parameters. A runtime error is generated if the system does have not enough memory to create the task, or if one or more parameters are invalid. For a detailed description of synchronous tasks (see chapter 5.5). Parameter string name Name of the task to create. It must contain 1 to 15 characters selected from "_a..zA..Z0..9". There cannot be another task with the same name belonging to the same application or library. num priority Period of the task to create (s). The specified value is rounded down to a multiple of 4 ms. Any positive period is supported, but the system supports only two different periods of synchronous tasks at the same time. bool& overrun Boolean variable to signal overrun errors. Only global variables are supported, to make sure that the variable is not deleted before the task. program Name of the VAL3 program to call when the task is started, with its parameters between parenthesis. It is not possible to use a local variable as parameter if it is passed by reference, to make sure that the variable is not deleted before the task. Example // Create a supervisor task scheduled every 20 ms taskCreateSync "supervisor", 0.02, bSupervisor, supervisor() 76 / 160 D28062804A - 02/2006 Chapter 5 - Tasks void wait(bool condition) Syntax void wait( ) Function Puts the current task on hold until condition is true. The task remains RUNNING during the waiting time. If condition is true at the first evaluation, the task in question is executed immediately (the next task is not sequenced). Parameter bool condition Boolean expression See also void delay(num seconds) bool watch(bool condition, num seconds) void delay(num seconds) Syntax void delay( ) Function Puts the current task on hold for seconds. The task remains RUNNING during the waiting time. If seconds is negative or null, the system sequences the next VAL3 task immediately. Parameter num seconds Numerical expression See also num clock() bool watch(bool condition, num seconds) D28062804A - 02/2006 77 / 160 num clock() Syntax num clock() Function Returns the current value of the internal system clock expressed in seconds. The internal system clock is accurate to within one millisecond. It is initialized at 0 when the controller is started up and is thus unrelated to calendar time. Example num nStart nStart=clock() put("time required for the operation= " ) putln(clock()-nStart) See also void delay(num seconds) bool watch(bool condition, num seconds) bool watch(bool condition, num seconds) Syntax bool watch ( , ) Function Puts the current task on hold until condition is true or seconds seconds have elapsed. Returns true if the waiting time ends when condition is true, otherwise returns false when the waiting time ends because the time has expired. The task remains RUNNING during the waiting time. If condition is true at the first evaluation, the same task is evaluated immediately, otherwise the system sequences the other VAL3 tasks (even if seconds is up to and including 0). Parameter bool condition Boolean expression num seconds Numerical expression Example while (watch (dSensor, 20)) == false popUpMsg("Waiting for part") endWhile See also void delay(num seconds) void wait(bool condition) num clock() 78 / 160 D28062804A - 02/2006 Chapter 6 - Libraries CHAPTER 6 LIBRARIES D28062804A - 02/2006 79 / 160 80 / 160 D28062804A - 02/2006 Chapter 6 - Libraries 6.1. DEFINITION A VAL3 library is a software application that can be reused by an application or by other VAL3 libraries. Like an ordinary application, a VAL3 library comprises the following components: - a set of programs: the VAL3 instructions to be executed - a set of global datas: the library data - a set of libraries: the external instructions and data used by the library When a library is being run, it can also contain: - a set of tasks: The programs that are specific to the library being run The format used to save the library is the same as that of a VAL3 application. All applications can be used as a library and all libraries can be used as an application, if the start() and stop() programs are defined in them. 6.2. INTERFACE A library's global programs and datas are either public or private. Only global programs and datas that are public are accessible outside the library. Private programs and global datas can only be used by the library programs. All the public global programs and datas from a library form its interface: a number of different libraries can have the same interface, as long as their public programs and data take the same names. The tasks created by a library program are always private, i.e. they can only be accessed by that library. 6.3. INTERFACE IDENTIFIER To use a library, an application needs to first declare an identifier assigned to it, and then request, in a program, that the library be loaded into the memory under that identifier. The identifier is assigned to the library interface and not to the library itself. Any library presenting the same interface can then be loaded under that identifier. This mechanism can be used, for example, to define a library for every possible part of an application, and then load only the part processed by each cycle. 6.4. CONTENT A library does not have any required content: it can contain only programs, or only data, or both. Library content is accessed by writing the identifier's name followed by ’:’ in front of the name of the library program or data, for example: part:libLoad("part_7") title(part:name) call part:init() // Loads the "part_7" library identified as ’part’ // Displays as title the content of the name variable of the "part_7" library // Calls up the init() program for the current part Accessing the content of a library that has not yet been loaded into the memory causes an execution error. D28062804A - 02/2006 81 / 160 6.5. LOADING AND UNLOADING When a VAL3 application is open, all the libraries declared are analysed to build the corresponding interfaces. This step does not load the libraries into the memory. When a library is loaded, its global datas are initialized and its programs checked to detect any syntax errors. It is not necessary to unload a library, this is done automatically when the application ends, or when a new library is loaded to replace another one. When a VAL3 application is stopped via the CS8 user interface, the stop() program is run first, then all the application tasks, and its libraries, if any are left, are destroyed. Access path The libLoad(), libSave() and libDelete() instructions use a library access path, specified as a character string. An access path comprises an (optional) root, an (optional) path and a library name, in the following format: root://path/name The root specifies the file medium: "Floppy" for a diskette, "USB0" for a device on a USB port (stick, floppy driver), "Disk" for a version saved on the CS8, or the name of an Ftp connection defined on the CS8 for a network access. By default, the root is "Disk" and the path is blank. Example part:libLoad("part_1") part:libSave("Floppy://part") part:libSave("Disk://part_x/part_1") Error codes The VAL3 library handling functions never generate execution errors but they send back an error code used to check the instruction result and troubleshoot any problems that may arise. Code Description 0 No error 10 The library identifier has not been initialized by libLoad(). 11 Cannot load the library: its interface does not correspond to that of the identifier. 12 Cannot load the library: the library contains invalid data or programs. 13 Cannot unload the library: the library contains invalid data or programs. 20 File access error: invalid path root. 21 File access error: invalid path. 22 File access error: invalid name. 30 File reading/writing error. 31 During writing: the path specified already contains a library. During reading: another identifier is already using this library. 82 / 160 D28062804A - 02/2006 Chapter 6 - Libraries 6.6. INSTRUCTIONS num identifier:libLoad(string path) Syntax num identifier:libLoad(string path) Function Initializes the library identifier by loading the library program and data into the memory following the specified path. Returns a 0 after loading, a library loading error code if there are still tasks running that were created by the library, if the library access path is invalid, if the library contains syntax errors or if the library specified does not correspond to the interface declared for the identifier. See also num identifier:libSave(), num libSave() num identifier:libSave(), num libSave() Syntax num identifier:libSave() num identifier:libSave(string path) Function Saves the data and programs assigned to the library's identifier. If libSave() is called without an identifier, the application of the library calling is saved. If a parameter is specified, the content is saved via the specified path. Otherwise, the content is saved via the path specified on loading. Returns a 0 if the content has been saved, a library error code if the identifier has not been initialized, if the path is invalid, if a writing error occurs or if the path specified already contains a library. See also num libDelete(string path) num libDelete(string path) Syntax num libDelete(string path) Function Deletes the library located in the specified path. Returns 0 if the specified library does not exist or has been deleted, and a library error code if the identifier has not been initialized, if the path is invalid or if a writing error occurs. See also num identifier:libSave(), num libSave() string identifier:libPath(), string libPath() D28062804A - 02/2006 83 / 160 string identifier:libPath(), string libPath() Syntax string identifier:libPath() Function Sends the access path of the library associated with the identifier, or that of the application or library calling if no identifier is specified. See also bool libList(string path, string& contents) bool libList(string path, string& contents) Syntax bool libList(string path, string& contents) Function Lists the contents of the path specified in the contents table. Returns true if the contents table lists the full result, and false if the table is too small to hold the full list. All elements of the contents table are first initialized to "" (empty string). After libList() is executed, the end of the list is therefore found by searching the first empty string in the contents table. If contents is a global variable, it is automatically incremented as required to enable storage of the full result. See also string identifier:libPath(), string libPath() 84 / 160 D28062804A - 02/2006 Chapter 7 - Robot control CHAPTER 7 ROBOT CONTROL D28062804A - 02/2006 85 / 160 86 / 160 D28062804A - 02/2006 Chapter 7 - Robot control This chapter lists the instructions that allow access to the status of the various parts of the robot. 7.1. INSTRUCTIONS void disablePower() Syntax void disablePower() Function Cuts off the power supply to the arm and waits until the power supply has actually been cut off. If the arm is moving, it stops abruptly on its trajectory before the power is switched off. See also void enablePower() bool isPowered() void enablePower() Syntax void enablePower() Function In remote mode, switches the arm power on. This instruction does not have any effects in local, manual or test modes, or when the power supply is being switched off. Example // Switches on the power and waits for the arm power to be switched on enablePower() if(watch(isPowered(), 5) == false) putln("The power supply cannot be switched on") endIf See also void disablePower() bool isPowered() bool isPowered() Syntax bool isPowered() Function Returns the power status of the arm: true: the arm is under power false: the arm power is switched off, or is being switched on or off D28062804A - 02/2006 87 / 160 bool isCalibrated() Syntax bool isCalibrated() Function Returns the recovery system status of the robot: true: all the robot axis are calibrated false: at least one robot axis is not calibrated num workingMode(), num workingMode(num& status) Syntax num workingMode (num& status) num workingMode() Function Returns the current working mode of the robot: Mode Stat us Operating mode Status 0 0 Invalid or transitional - 1 2 3 4 0 1 2 3 4 5 6 0 1 2 3 0 1 2 0 1 2 Manual Test Local Remote Programmed movement Connection movement Revolute (Joint) Cartesian (Frame) (Tool) To point (Point) Hold Programmed movement (250 mm/s) Connection movement (250 mm/s) Fast programmed movement Hold Move (programmed movement) Move (connection movement) Hold Move (programmed movement) Move (connection movement) Hold Parameter num& status 88 / 160 Numerical type variable. D28062804A - 02/2006 Chapter 7 - Robot control num speedScale() Syntax num speedScale() Function Returns the current monitor speed. Example num nCycle taskCreate "checkSpeed", 5, checkSpeed() program checkSpeed() begin while true if(nCycle < 2) if (speedScale()> 10) stopMotion() putln("For the first cycle the monitor speed must remain at 10%") wait(speedScale()<= 10) restartMotion() endIf endIf endWhile end num esStatus() Syntax num esStatus() Function Returns the status of the E-Stop circuit: Code 0 1 2 Status All the E-Stops are inactive. Waiting for validation after an emergency stop. E-Stop open. See also num workingMode(), num workingMode(num& status) D28062804A - 02/2006 89 / 160 90 / 160 D28062804A - 02/2006 Chapter 8 - Arm positions CHAPTER 8 ARM POSITIONS D28062804A - 02/2006 91 / 160 8.1. INTRODUCTION This chapter describes the VAL3 data types used to program the arm positions used in a VAL3 application. Two position types are defined in VAL3: revolute positions (joint type) that give the angular position of each axis, and Cartesian points (point type) that give the Cartesian position of the tool at the end of the arm. The tool type describes a tool and its geometry used to position and control the speed of the arm; it describes also how to activate the tool (trigger, delay). The frame type describes a geometrical frame. The use of frames makes geometrical point manipulation much simpler and more intuitive. The trsf type describes a geometrical transformation. It is used implicitly by the tool, point and frame types. Finally, the config type describes the more advanced concept of arm configuration. The relationships between these various types can be summarized as follows: Organization chart: frame / point / tool / trsf tool t21 tool t22 Trsf Trsf point p21a point p21b Trsf Trsf tool t2 tool t1 point p1a Trsf Trsf Trsf frame f21 frame f21 Trsf Trsf point p2a Trsf frame f1 flange Trsf frame f2 Trsf robot world 8.2. JOINT TYPE 8.2.1. DEFINITION A revolute point (joint type) defines the angular position of each robot axis. The joint type is a structured type, with the following fields, in this order: num j1 num j2 num j3 num j... Revolute position of axis 1 Revolute position of axis 2 Revolute position of axis 3 Revolute position of axis ... (one field for each axis) These fields are expressed in degrees for the rotary axes, and in millimetres for the linear axes. The origin of each axis is defined by the type of arm used. By default, each field of a joint type variable is initialized at the value 0. 92 / 160 D28062804A - 02/2006 Chapter 8 - Arm positions 8.2.2. OPERATORS In ascending order of priority: joint = Assigns position2 to the position1 variable field by field and returns position2. bool != Returns true if a position1 field is not equal to the corresponding position2 field, to within the accuracy of the robot, otherwise it returns false. bool == Returns true if each position1 field is equal to the corresponding position2 field, to within the accuracy of the robot, otherwise it returns false. bool > Returns true if each position1 field is greater than the corresponding position2 field, otherwise it returns false. bool < Returns true if each position1 field is less than the corresponding position2 field, otherwise it returns false. Caution: position1 > position2 is not strictly identical to position2 < position1! joint - Returns the difference, field by field, between position1 and position2. joint + Returns the sum, field by field, of position1 and position2. 8.2.3. INSTRUCTIONS joint abs(joint jPosition) Syntax joint abs(joint jPosition) Function Returns the absolute value of a joint position, field by field. Parameter jPosition Joint expression Details The absolute value of a joint, with the ">" or "<" joint operators, is useful to compute easily a distance between a joint position and a reference position. Example jReference = {90, 45, 45, 0, 30, 0} jMaxDistance = {5, 5, 5, 5, 5, 5} j = herej() // Checks that all the axis are less than 5 degrees from the reference if(!(abs(j - jReference) < jMaxDistance)) popUpMsg("Move closer to the marks") endIf See also Operator < (joint) Operator > (joint) D28062804A - 02/2006 93 / 160 joint herej() Syntax joint herej() Function Return the current arm joint position. Details The returned value is the position sent to the amplifiers by the controller, and not the position read from the axis encoders. The controller joint position is refreshed every 4 ms. Example // Wait until the arm is near the reference position, with timeout bStart = watch(abs(herej() - jReference) < jMaxDistance, 60) if bStart==false popUpMsg("Move closer to the start position") endIf See also point here(tool tTool, frame fFrame) bool getLatch(joint& jPosition) (CS8C only) bool isInRange(joint jPosition) bool isInRange(joint jPosition) Syntax bool isInRange(joint jPosition) Function Test if a joint position is within the software joint limits of the arm. Parameter jPosition Joint expression to be tested Details When the arm is out of the software joint limits (after a maintenance operation), it is not possible to move the arm with a VAL3 application, only manual moves are possible (with limited move directions). Example // Check if the current position is within the joint limits if isInRange(herej())==false putln("Please place the arm within its workspace") endIf See also joint herej() 94 / 160 D28062804A - 02/2006 Chapter 8 - Arm positions void setLatch(dio input) (CS8C only) S5.3 Syntax void setLatch(dio input) Function Enable robot position latch on the next rising edge of the input signal. Parameter input Dio expression defining the digital input to be used for latching Details The robot position latching is a hardware feature that is supported only by the fast inputs of the CS8C controller (io:fIn0, io:fIn1). The detection on the rising edge of the input signal is guaranteed only if the signal remains low during at least 0.2 ms before the rising edge, and high during at least 0.2 ms after the rising edge. CAUTION: The latch is enabled only after some time (between 0 and 0.2 ms) after the setLatch instruction is executed. You may need to add a delay(0) instruction after setLatch to make sure the latch is effective before the next VAL3 instruction is executed. A runtime error is generated is the specified digital input does not support robot position latching. Example // enable latch on first fast input (CS8C) setLatch(io:fIn0) See also bool getLatch(joint& jPosition) (CS8C only) D28062804A - 02/2006 95 / 160 bool getLatch(joint& jPosition) (CS8C only) S5.3 Syntax bool getLatch(joint& jPosition) Function Read the last latched robot position. Parameter jPosition Joint expression defining the variable to update with the latched position Details The function returns true if there is a valid latched position to read. If a latch is pending, or if latching has never been enabled, the function returns false and the position is not updated. getLatch returns the same latched position until a new latch is enabled with the setLatch instruction. The arm position is refreshed in the CS8C controller every 0.2 ms; the latched position is the position of the arm between 0 and 0.2 ms after the rising edge of the fast input.l Example // Wait for a latched position during 5 seconds. bLatch = watch(getLatch(jPosition)==true, 5) if bLatch==true putln("Successful position latch") else putln("No latch signal was detected") endif See also void setLatch(dio input) (CS8C only) joint herej() 96 / 160 D28062804A - 02/2006 Chapter 8 - Arm positions 8.3. TRSF TYPE 8.3.1. DEFINITION A transformation (trsf type) defines the position and the orientation of a Cartesian frame relative to another frame. The rsf type is a structured type whose fields are, in this order: num x component translating along the x axis num y component translating along the y axis num z component translating along the z axis num rx component rotating about the x axis num ry component rotating about the y axis num rz component rotating about the z axis The x, y and z fields are expressed in the unit of length of the application (millimetre or inch, see the chapter entitled Unit of length). The rx, ry and rz fields are expressed in degrees. The x, y and z coordinates are the Cartesian coordinates of the origin of the frame relative to the reference frame. When rx, ry and rz are zero, the two frames have the same orientation. When a trsf type variable is initialized, its default value is {0,0,0,0,0,0}. D28062804A - 02/2006 97 / 160 8.3.2. ORIENTATION Orientation z1 z2 450 mm x2 250 mm y2 350 mm y1 x1 The position of frame R2 (grey) relative to R1 (black) is: x = 250mm, y = 350 mm, z = 450mm, rx = 0°, ry = 0°, rz = 0° Coordinates rx, ry and rz correspond to the angles of rotation that must be applied successively about the x, y and z axis to obtain the orientation of the frame. For example, orientation rx = 20°, ry = 10°, rz = 30° is obtained as follows. First, the frame (x,y,z) is rotated through 20° about the x axis. This gives a new frame (x’,y’,z’). The x and x’ axis coincide. Frame rotation about the axis: X z z’ y’ 20° x = x’ y Then the frame is rotated through 20° about the y’ axis of the frame obtained at the previous step. This gives a new frame (x’’,y’’,z’’). The y’ and y’’ axis coincide. 98 / 160 D28062804A - 02/2006 Chapter 8 - Arm positions Frame rotation about the axis: Y’ z’ z z’’ 10° y’ = y’’ x = x’ y x’’ Lastly, the frame is rotated through 20° about the z’’ axis of the frame obtained at the previous step. The orientation of the new frame obtained (x’’’,y’’’,z’’’) is defined by rx, ry, rz. The z’’ and z‘’’ axis coincide. Frame rotation about the axis: Z’’ z’ z z’’ 30° y’’’ y’ = y’’ x = x’ y x’’ x’’’ The position of frame R2 (grey) relative to R1 (black) is: x = 250mm, y = 350 mm, z = 450mm, rx = 20°, ry = 10°, rz = 30° The values of rx, ry and rz are defined modulo 360 degrees. When the system calculates rx, ry and rz, their values are always between -180 and +180 degrees. Several possible values of rx, ry, and rz still remain: The system ensures that at least two coordinates are between -90 and 90 degrees (unless rx is +180 and ry 0). When ry is 90 degrees (modulo 180), the selected value of rx is zero. D28062804A - 02/2006 99 / 160 8.3.3. OPERATORS In ascending order of priority: trsf = Assigns position2 to the position1 variable field by field and returns position2. bool != Returns true if a position1 field is not equal to the corresponding position2 field, otherwise it returns false. bool == Returns true if each position1 field is equal to the corresponding position2 field, otherwise it returns false. trsf Returns the geometrical composition of the position1 and position2 transformations. Caution! Usually, ! position1 position2 ! = position2 position1! trsf ! 8.3.4. Returns the inverse transformation of position. INSTRUCTIONS num distance(trsf position1, trsf position2) Syntax num distance( , ) Function Returns the distance between position1 and position2. CAUTION: To ensure that the distance is valid, position 1 and position 2 must be defined relative to the same reference frame. Parameter trsf position1 Transformation type expression trsf position2 Transformation type expression Example // Displays the distance between two points, whatever their reference frames putln(distance(position(point1, world), position(point2, world))) See also point appro(point position, trsf transformation) point compose(point position, frame reference, trsf transformation) trsf position(point position, frame reference) num distance(point position1, point position2) 100 / 160 D28062804A - 02/2006 Chapter 8 - Arm positions 8.4. FRAME TYPE 8.4.1. DEFINITION The frame type is used to define the position of reference frames in the cell. The frame type is a structured type with only one accessible field: trsf trsf position of the frame in its reference frame The reference frame of a frame type variable is defined when it is initialized (via the user interface, or via the = operator). The frame type world reference frame is always defined in a VAL3 application: a reference frame is linked to the world frame, either directly or via other frames. An execution error is generated during a geometrical calculation if the world frame coordinates have been modified. Links between reference frames point21a point1a point21b frame 21 frame 21 point2a frame1 frame2 world By default, a frame type variable uses world as its reference frame. 8.4.2. USE The use of reference frames in a robotic application is highly recommended for the following purposes: - To give a more intuitive view of the application points The cell taught point display is structured according to the hierarchical structure of the frames. - To update the position of a set of points quickly When an application point is linked to an object, it is advisable to define a frame for that object and link the VAL3 points to the frame. If the object is moved, simply reteach the frame to allow all linked points to be corrected at the same time. - To reproduce a trajectory in several places in the cell Define the trajectory points relative to a working frame and teach a frame for each position in which the trajectory is to be reproduced. By assigning the value of a taught frame to the working frame, the entire trajectory "moves" to the taught frame. - To make it easier to calculate geometrical movements The compose() instruction allows geometrical movements expressed in any reference frame to be performed on any point. The position() instruction is used to calculate the position of a point in any reference frame. D28062804A - 02/2006 101 / 160 8.4.3. OPERATORS In ascending order of priority: frame = Assigns the position and the reference frame of reference2 to the reference1 variable. bool != Returns true if reference1 and reference2 do not have the same reference frame or the same position in their reference frame. bool == Returns true if reference1 and reference2 have the same position in the same reference frame. 8.4.4. INSTRUCTIONS num setFrame(point origin, point axisOx, point planeOxy, frame& reference) Syntax num setFrame(point origin, point axisOx, point planeOxy, frame& reference) Function Calculates the coordinates of reference from its origin, from an axisOx point on the axis (Ox), and a planeOxy point on the plane (Oxy). The axisOx point must be on the side of the positive x values. The planeOxy point must be on the side of the positive y values. The function returns: 0 No error. -1 The axisOx point is too close to the origin. -2 The planeOxy point is too close to the axis (Ox). An execution error is generated if one of the points has no reference frame. 8.5. TOOL TYPE 8.5.1. DEFINITION The tool type is used to define the geometry and action of a tool. The tool type is a stuctured type with the following fields, in this order: trsf trsf position of the tool center point (TCP) in its basic tool dio gripper Output used to activate the tool num otime Time required to open the tool (seconds) num ctime Time required to close the tool (seconds) The basic tool of a tool type variable is defined when it is initialized (via the user interface, or via the = operator). The flange basic tool, of tool type, is always defined in a VAL3 application: all tools are linked to the flange tool, either directly or via other tools. An execution error is generated during a geometrical computation if the flange tool coordinates have been modified. 102 / 160 D28062804A - 02/2006 Chapter 8 - Arm positions Links between tools tool 21 tool 1 tool 22 tool 2 flange By default, the output of a tool is the system io:valve1 output, the opening and closing times are 0 and the basic tool is flange. 8.5.2. USE The use of tools in a robotic application is highly recommended for the following purposes: - To control the speed of movement During manual or programmed movements, the system controls the Cartesian speed at the end of the tool. - To reach the same points with different tools Simply select the VAL3 tool corresponding to the physical tool at the end of the arm. - To control tool wear or a tool change To update the arm position, simply update the geometrical coordinates of the tool. 8.5.3. OPERATORS In ascending order of priority: tool = Assigns the position and the basic tool of tool2 to the tool1 variable. bool != Returns true if tool1 and tool2 do not have the same basic tool, the same position in their basic tool, the same digital output or the same opening and closing times. bool == Returns true if tool1 and tool2 have the same position in the same basic tool, and use the same digital output with the same opening and closing times. D28062804A - 02/2006 103 / 160 8.5.4. INSTRUCTIONS void open(tool tool) Syntax void open (tool tool) Function Activates the tool (opening) by setting its digital output to true. Before activating the tool, open() waits for the robot to reach the required point by carrying out the equivalent of a waitEndMove(). After activation, the system waits for otime seconds before executing the next instruction. This instruction does not make sure that the robot is stabilized in its final position before the tool is activated. When it is necessary to wait for complete stabilization of the movement, the isSettled() instruction must be used. An execution error is generated if the tool dio is not defined or is not an output, or if a previously recorded motion command cannot be run. Parameter tool tool Tool type expression Example // the open() instruction is equivalent to: waitEndMove() tTool.gripper=true delay(tTool.otime) See also void close(tool tool) void waitEndMove() void close(tool tool) Syntax void close (tool tool) Function Activates the tool (closing) by setting its digital output to false. Before activating the tool, open() waits for the robot to stop at the point by carrying out the equivalent of a waitEndMove(). After activation, the system waits for ctime seconds before executing the next instruction. This instruction does not make sure that the robot is stabilized in its final position before the tool is activated. When it is necessary to wait for complete stabilization of the movement, the isSettled() instruction must be used. An execution error is generated if the tool dio is not defined or is not an output, or if a previously recorded motion command cannot be run. Parameter tool tool Tool type expression Example // the close instruction is equivalent to: waitEndMove() tTool.gripper = false delay(tTool.ctime) 104 / 160 D28062804A - 02/2006 Chapter 8 - Arm positions See also Type tool void open(tool tool) void waitEndMove() 8.6. POINT TYPE 8.6.1. DEFINITION The point type is used to define the position and orientation of the robot tool in the cell. The point type is a stuctured type with the following fields, in this order: trsf trsf position of the point in its reference frame config config arm configuration used to reach the position The reference frame of a point is a frame type variable defined when it is initialized (via the user interface, using the = operator and the here(), appro() and compose() instructions. Point definition Frame world Frame f1 Point p0 Frame f2 Point p1 Point p2 Point p3 An execution error is generated if a point type variable with no defined reference frame is used. CAUTION: By default, a local point type variable has no reference frame. Before it can be used, it must be initialized from another point, or via one of the here(), appro() and compose() instructions. 8.6.2. OPERATORS In ascending order of priority: point = Assigns the position, the configuration and the reference frame of point2 to the point1 variable. bool ! = Returns true if point1 and point2 do not have the same reference frame or the same position in their reference frame. bool == Returns true if point1 and point2 have the same position in the same reference frame. D28062804A - 02/2006 105 / 160 8.6.3. INSTRUCTIONS num distance(point position1, point position2) Syntax num distance(point position1, point position2) Function Returns the distance between position1 and position2. An execution error is generated if position1 or position2 do not have a defined reference frame. Parameter point position1 Point type expression point position2 Point type expression Example // Displays the distance between two points, whatever their reference frames putln(distance(point1, point2)) See also point appro(point position, trsf transformation) point compose(point position, frame reference, trsf transformation) trsf position(point position, frame reference) num distance(trsf position1, trsf position2) 106 / 160 D28062804A - 02/2006 Chapter 8 - Arm positions point compose(point position, frame reference, trsf transformation) Syntax point compose(point position, frame reference, trsf transformation) Function Returns the position to which the geometrical transformation transformation is applied relative to reference frame. CAUTION: The rotation component of transformation usually modifies not only the orientation of position, but also its Cartesian coordinates (unless position is located at the origin of reference frame). If we only want transformation to modify the orientation of position, it is necessary to update the result using the Cartesian coordinates of position (see example). The reference frame and the configuration of the point returned are those of position. An execution error is generated if position has no defined reference frame. Parameter point position Point type expression frame reference Reference frame type expression trsf transformation Transformation type expression Example point pResult // modification of the orientation without modification of position pResult = compose (position,reference,transformation) pResult.trsf.x = position.trsf.x pResult.trsf.y = position.trsf.y pResult.trsf.z = position.trsf.z // modification of position without modification of the orientation transformation.rx = transformation.ry =transformation.rz = 0 pResult = compose (pResult,reference,transformation) See also Operator trsf * point appro(point position, trsf transformation) D28062804A - 02/2006 107 / 160 point appro(point position, trsf transformation) Syntax point appro(point position, trsf transformation) Function Returns a point computed by a geometric transformation of an input position. The transformation coordinates are given in the same base as the input position (the base of the input position's reference frame). The reference frame and the configuration of the returned point are those of the input position. An execution error is generated if position has no defined reference frame. Parameter point position Point type expression trsf transformation Transformation type expression Example // move to 100 mm above the point (Z axis) point p movej(appro(p,{0,0,-100,0,0,0}), flange, mNomDesc) movel(p, flange, mNomDesc) // Approach // Go to point See also Operator trsf * point compose(point position, frame reference, trsf transformation) point here(tool tTool, frame fFrame) Syntax point here(tool tool, frame reference) Function Returns the current position of the tool tool in reference frame(the position commanded and not the position measured). The reference frame of the point returned is reference. The configuration of the point returned is the current configuration of the arm. See also joint herej() config config(joint position) point jointToPoint(tool tool, frame reference, joint position) 108 / 160 D28062804A - 02/2006 Chapter 8 - Arm positions point jointToPoint(tool tool, frame reference, joint position) Syntax point jointToPoint (tool tool, frame reference, joint position) Function Returns the position of the tool in the reference frame when the arm is in the revolute position position. The reference frame of the point returned is reference. The configuration of the point returned is the configuration of the arm in the revolute position position. Parameter tool tool Tool type expression frame reference Reference frame type expression joint position Revolute position type position See also point here(tool tTool, frame fFrame) bool pointToJoint(tool tool, joint initial, point position,joint& coordinates) bool pointToJoint(tool tool, joint initial, point position,joint& coordinates) Syntax bool pointToJoint(tool tool, joint initial, point position, joint& coordinates) Function Calculates the revolute coordinates corresponding to the specified position. Returns true if revolute coordinates have been found, and returns false if no solution has been found. The revolute position to be located corresponds to the configuration of the position. Fields with the value free do not determine the configuration. Fields with the value same specify the same configuration as initial. For axis that can rotate through more than one full turn, there are several revolute solutions with exactly the same configuration: the solution closest to initial is then taken. No solution is possible if position is out of reach (arm too short) or outside the software limits. If position specifies a configuration, it may be outside the limits for that configuration, but within the limits for a different configuration. An execution error is generated if position has no defined reference frame. Parameter tool tool Tool type expression joint initial Revolute position type position point position Point type expression joint& coordinates Revolute position type variable See also joint herej() point jointToPoint(tool tool, frame reference, joint position) D28062804A - 02/2006 109 / 160 trsf position(point position, frame reference) Syntax trsf position(point position, frame reference) Function Returns the coordinates of position in reference frame. An execution error is generated if position has no reference frame. Example // Displays the distance between two points, whatever their reference frames putln(distance(position(point1, world), position(point2, world))) See also num distance(point position1, point position2) 110 / 160 D28062804A - 02/2006 Chapter 8 - Arm positions 8.7. CONFIG TYPE The configuration concept of a Cartesian point is an "advanced" concept that can be skipped the first time you read this document. D28062804A - 02/2006 111 / 160 8.7.1. INTRODUCTION There are generally several ways in which a robot can reach a given Cartesian point. These possibilities are known as "configurations". The figure below illustrates two different configurations: Two configurations that can be used to reach a given point: P P P In some cases, among all the possible configurations, it is important to specify the ones that are valid and the ones that are to be prohibited. To deal with this problem, the point type is used to specify the configurations allowed for the robot, via its config type field as defined below. 8.7.2. DEFINITION The config type is used to define the configurations authorized for a given Cartesian position. It depends on the type of arm used. For a Stäubli RX/TX arm, the config type is a structured type whose fields are, in that order: shoulder shoulder configuration elbow elbow configuration wrist wrist configuration For a Stäubli RS arm, the config type is limited to the Shoulder field: shoulder shoulder configuration The shoulder, elbow and wrist fields can have the following values: righty shoulder lefty ssame sfree elbow lefty shoulder configuration imposed Shoulder configuration change not allowed Free shoulder configuration epositive epositive elbow configuration imposed enegative enegative elbow configuration imposed esame Elbow configuration change not allowed efree 112 / 160 righty shoulder configuration imposed Free elbow configuration D28062804A - 02/2006 Chapter 8 - Arm positions wrist wpositive wpositive wrist configuration imposed wnegative wnegative wrist configuration imposed wsame Wrist configuration change not allowed wfree 8.7.3. Free wrist configuration OPERATORS In ascending order of priority: config = Assigns the shoulder, elbow and wrist fields for configuration2 to the configuration1 variable. bool != Returns true if configuration1 and configuration2 do not have the same shoulder, elbow or wrist field values. bool == Returns true if configuration1 and configuration2 have the same shoulder, elbow or wrist field values. 8.7.4. CONFIGURATION (RX/TX ARM) 8.7.4.1. SHOULDER CONFIGURATION To reach a given Cartesian point, the arm of the robot may be to the right or the left of the point: these two configurations are called righty and lefty. Configuration: righty Configuration: lefty The righty configuration is defined by (d1.sin(j2) + d2.sin(j2+j3) + ) < 0, and the lefty configuration is defined by (d1.sin(j2) + d2.sin(j2+j3) + ) >= 0, where d1 is the length of the robot arm, d2 the length of the forearm, and the distance between axis 1 and axis 2, in the x direction. D28062804A - 02/2006 113 / 160 8.7.4.2. ELBOW CONFIGURATION In addition to the shoulder configuration, there are two robot elbow configurations: the elbow configurations are called epositive and enegative. Configuration: enegative Configuration: epositive The epositive configuration is defined by j3 >= 0. The enegative configuration is defined by j3 < 0. 8.7.4.3. WRIST CONFIGURATION In addition to the shoulder and elbow configurations, there are two robot wrist configurations. The two wrist configurations are called wpositive and wnegative. Configuration: wnegative Configuration: wpositive The wpositive configuration is defined by q5 >= 0. The wnegative configuration is defined by q5 < 0. 114 / 160 D28062804A - 02/2006 Chapter 8 - Arm positions 8.7.5. CONFIGURATION (RS ARM) To reach a given Cartesian point, the arm of the robot may be to the right or the left of the point: these two configurations are called righty and lefty. Configuration: righty Configuration: lefty The righty configuration is defined by sin(j2) > 0, and the lefty configuration is defined by sin(j2) < 0. 8.7.6. INSTRUCTIONS config config(joint position) Syntax config config(joint position) Function Returns the configuration of the robot for the revolute position position. Parameter joint position Revolute position type position See also point here(tool tTool, frame fFrame) joint herej() D28062804A - 02/2006 115 / 160 116 / 160 D28062804A - 02/2006 Chapter 9 - Movement control CHAPTER 9 MOVEMENT CONTROL D28062804A - 02/2006 117 / 160 118 / 160 D28062804A - 02/2006 Chapter 9 - Movement control 9.1. TRAJECTORY CONTROL A succession of points is not sufficient to define the trajectory of a robot. It is also necessary to indicate the type of trajectory used between the points (curve or straight line), specify how the trajectories are linked together and define the movement speed parameters. This section therefore presents the point-to-point movements and straight line movements (movej and movel instructions) and describes how to use the movement descriptor parameters (mdesc type). 9.1.1. TYPES OF MOVEMENT: POINT-TO-POINT, STRAIGHT LINE, CIRCLE The robot's movements are mainly programmed using the movej, movel and movec instructions. The movej instruction can be used to make point-to-point movements, movel is used for straight line movements, and movec for circular movements. A point-to-point movement is a movement in which only the final destination (Cartesian or revolute point) is important. Between the start point and the end point, the tool center point follows a curve defined by the system to optimize the speed of the movement. Initial and final positions Initial position Final position Conversely, in the case of a straight line movement, the tool center point moves along a straight line. The orientation is interpolated in a linear way between the initial and final orientation of the tool. Straight line movement Z Y Z X X D28062804A - 02/2006 Y 119 / 160 In a circular movement, the tool center point moves through an arc defined by 3 points, and the tool orientation is interpolated between the initial orientation, the intermediate orientation, and the final orientation. Circular movement Z Next movement Previous movement Trajectory followed by the tool during circular movement Example: A typical handling task involves picking up parts at one location and putting them down at another. Let us assume that the parts are to be picked up at the PICK point and put down at the PLACE point. To go from the PICK point to the PLACE point, the robot must pass through a disengagement point DEPART and an approach point APPRO. Cycle type: U DEPART X APPRO Z Z PICK X X Z PLACE X Z Let us assume that the robot is initially at the PICK point. The program required to execute the movement can be written as follows: movel(DEPART, tool, mDesc) movej(APPRO, tool, mDesc) movel(PLACE, tool, mDesc) 120 / 160 D28062804A - 02/2006 Chapter 9 - Movement control Straight line movements are used for disengagement and approach. However, the main movement is a point-to-point movement, as the geometry of this part of the trajectory does not need to be accurately controlled, because the aim is to move as quickly as possible. Note: The geometry of the trajectory does not depend on the speed at which both these types of movement are executed. The robot always passes through the same position. This is particularly important when developing applications. It is possible to start with slow movements and then progressively increase the speed without distorting the trajectory of the robot. 9.1.2. MOVEMENT SEQUENCING 9.1.2.1. BLENDING Let us now return to the example of the U cycle described in the previous chapter. In the absence of any specific movement sequencing control, the robot stops at the DEPART and APPRO points, as the trajectory is angled at these points. This unnecessarily increases the duration of the operation and there is no need to pass through these precise points. The duration of the movement can be significantly reduced by "blending" the trajectory in the vicinity of the DEPART and APPRO points. To do so, we use the blend field of the movement descriptor. When this field is set to off, the robot stops at each point along the trajectory. However, when the parameter is set to joint, the trajectory is blended in the vicinity of each point and the robot no longer stops at the fly-by points. When the blend field has the value joint, two other parameters must be specified: leave and reach. These parameters determine the distance from the arrival point at which the nominal trajectory is left (start of blending) and the distance from the arrival point at which it is rejoined (end of blending). Definition of the distances: ’leave’ / ’reach’ VE A E L R EA C H Example: Let us return to the program described in the section entitled "Types of movement: point-to-point or straight line". The previous movement program can be modified as follows: mDesc.blend = joint mDesc.leave = 50 mDesc.reach = 200 movel(DEPART, tool, mDesc) mDesc.leave = 200 mDesc.reach = 50 movej(APPRO, tool, mDesc) mDesc.blend = OFF movel(PLACE, tool, mDesc) D28062804A - 02/2006 121 / 160 The following trajectory is obtained: Blended cycle 200 200 APPRO DEPART 50 50 PLACE PICK The robot no longer stops at the DEPART and APPRO points. The movement is therefore faster. In fact, the larger the leave and reach distances, the faster the movement. 9.1.2.2. CANCEL BLENDING The waitEndMove() instruction is used to cancel the effect of blending. The robot then completes the last programmed movement as far as its arrival point, as if the movement descriptor blend field were set to off. For example, let us examine the following program: mDesc.blend = joint mDesc.leave = 10 mDesc.reach = 10 movej(A, tool, mDesc) movej(B, tool, mDesc) waitEndMove() movej(C, tool, mDesc) movej(D, tool, mDesc) etc. The trajectory followed by the robot is then as follows: Cycle without blending at a given point A 10 C 10 10 10 No smoothing at B (BREAK) 10 10 B 122 / 160 10 D 10 D28062804A - 02/2006 Chapter 9 - Movement control 9.1.3. MOVEMENT RESUMPTION When the arm power is cut off before the robot has finished its movement, following an emergency stop for example, movement resumption is required when power is restored to the system. If the arm has been moved manually during the stoppage, it may be in a position far from its normal trajectory. It is then necessary for movement resumption to take place without a collision occurring. The CS8's trajectory control function provides the possibility of managing movement resumption using a "connection movement". When movement resumes, the system ensures that the robot is indeed on its programmed trajectory: if there is any deviation, however slight, it automatically stores a point-to-point command to reach the exact position at which the robot left its trajectory: it is a "connection movement". This movement is made at low speed. It must be validated by the operator, except in automatic mode, in which it can be carried out without human intervention. The autoConnectMove() instruction is used to detail behaviour in automatic mode. The resetMotion() instruction is used to cancel the current movement, and possibly to program a connection movement in order to resume a position at low speed and under the operator's control. D28062804A - 02/2006 123 / 160 9.1.4. PARTICULARITIES OF CARTESIAN MOVEMENTS (STRAIGHT LINE, CIRCLE) 9.1.4.1. INTERPOLATION OF THE ORIENTATION The trajectory generator of the CS8 always minimizes the amplitude of tool rotations when moving from one orientation to another. This makes it possible, as a particular case, to program a constant orientation, in absolute terms, or as compared with the trajectory, on all straight-line or circular movements. • For a constant orientation, the initial and final positions, and the intermediate position for a circle, must have the same orientation. Constant orientation in absolute terms Trajectory followed by the tool during circular movement (Orientation stays the same) Next movement Previous movement • For a constant orientation as compared with the trajectory (e.g. direction Y for the tool marker tangent to the trajectory), the inital and final positions, and the intermediate position for a circle, must have the same orientation as compared with the trajectory. Constant orientation as compared with the trajectory Previous movement Trajectory followed by the tool during circular movement (Orientamento tangente) Next movement Y 124 / 160 D28062804A - 02/2006 Chapter 9 - Movement control This results in a limitation for circular movements: If the intermediate point forms an angle of 180° or more with the initial point or the final point, there are several interpolation solutions for the orientation, and an error is generated. It is then necessary to modify the position of the intermediate point to remove the ambiguity from the intermediate orientations. Ambiguity as to the intermediate orientation Error: circular movements OK ! • • A In particular, programming a full circle involves 2 movec instructions: movec (B, C, tool, mDesc) movec (D, A, tool, mDesc) Full circle Trajectory followed by the tool during circular movement Previous movement Next movement D28062804A - 02/2006 Y 125 / 160 9.1.4.2. CONFIGURATION CHANGE (ARM RX/TX) Configuration change: righty / lefty During a change of shoulder configuration, the centre of the robot's wrist has to pass vertically through axis 1 (but not exactly in the case of offset robots). Positive/negative elbow configuration change During a change of elbow configuration, the arm has to go through the straight arm position (q3 = 0°). 126 / 160 D28062804A - 02/2006 Chapter 9 - Movement control Positive/negative wrist configuration change During a change of wrist configuration, the arm has to go through the straight wrist position (q5 = 0°). The robot must therefore pass through specific positions during a configuration change. But we cannot require a straight-line or circular movement to pass through these positions if they are not on the desired trajectory! This means that we cannot impose a change of configuration during a straight-line or circular movement. Elbow configuration change impossible In other words, during a straight-line or circular movement, we can only impose a configuration if it is compatible with the initial position: it is therefore always possible to specify a free configuration, or one that is identical to the initial configuration. In certain exceptional cases, the straight line or arc does indeed pass through a position in which a change of configuration is possible. In this case,if the configuration has been left free, the system can decide to change the configuration during a straight-line or circular movement. For a circular movement, the configuration of the intermediate point is not taken into account. The only configurations that count are those of the initial and final positions. D28062804A - 02/2006 127 / 160 Shoulder configuration change possible 9.1.4.3. SINGULARITIES (ARM RX/TX) Singularities are an inherent characteristic of all 6-axis robots. Singularities can be defined as the points at which the robot changes configuration. Certain axis are then aligned: two aligned axes behave as a single axis and the 6-axis therefore behaves locally as a 5-axis robot. The end effector is then unable to carry out certain movements. This is not a problem in the case of a point-to-point movement: system-generated movements are still possible. On the other hand, during a straight-line or circular movement, we impose a movement geometry. If the movement is impossible, an error is generated when the robot attempts to move. 9.2. MOVEMENT ANTICIPATION 9.2.1. PRINCIPLE The system controls the movements of the robot in more or less the same way as a driver drives a car. It adapts the speed of the robot to the geometry of the trajectory. Thus the better the trajectory is known in advance, the better the system can optimize the speed of movement. This explains why the system does not wait for the current robot movement to be completed before taking the instructions for the next movement into account. Let us consider the following program lines: movej movej movej movej (A, (B, (C, (D, tool, tool, tool, tool, mDesc) mDesc) mDesc) mDesc) Let us suppose that the robot is stationary when the program reaches these lines. When the first instruction is executed, the robot starts to move towards point A. The program then immediately proceeds to the second line, well before the robot reaches point A. When the system executes the second line, the robot starts to move towards A and the system records the fact that after point A, the robot must go to point B. The program then continues with the next line: while the robot continues its movement towards A, the system records the instruction that after B, the robot must proceed to C. As the program is executed much faster than the robot actually moves, the robot is probably still moving towards A when the next line is executed. The system thus records the next successive points. When the robot starts to move towards A, it already "knows" that after A, it must go successively to B, C and D. If blending has been activated, the system knows that the robot will not stop before point D. It can then accelerate faster than if it had to prepare to stop at B or C. 128 / 160 D28062804A - 02/2006 Chapter 9 - Movement control The fact of executing the instruction lines only records the successive movement commands. The robot then performs them according to its capabilities. The memory in which the movements are stored is large, to allow the system to optimize the trajectory. Nevertheless, it is limited. When it is full, the program stops at the next movement instruction. It resumes when the robot has completed the current movement, thus creating space in the system memory. 9.2.2. ANTICIPATION AND BLENDING This section examines in detail what happens when the movements are sequenced. Let us look again at the previous example: movej movej movej movej (A, (B, (C, (D, tool, tool, tool, tool, mDesc) mDesc) mDesc) mDesc) Let us assume that blending is activated in the movement descriptor, mDesc. When the first line is executed, the system does not yet know what the next movement will be. Only the movement between the start point and the Aleave point is fully determined, as the Aleave point is defined by the system from the movement descriptor leave data (see the figure below). Blended cycle A A leave C C leave A reach B leave C reach B reach B D Until the second line is executed, the part of the blending trajectory in the vicinity of point A has not been fully determined, as the system has not yet taken the next movement into account. In single-step mode, the robot does not go further than the Aleave point. When the next instruction is executed, the blending trajectory in the vicinity of point A (between Aleave and Areach) can be defined, together with the movement as far as point Bleave. The robot can then proceed to Bleave. In single-step mode, it will not go beyond this point until the user executes the third instruction, and so on. The advantage of this operating mode is that the robot passes through exactly the same position in singlestep mode as in normal program execution mode. 9.2.3. SYNCHRONIZATION The anticipation mechanism causes desychronization between the VAL3 instruction lines and the corresponding robot movements: the VAL3 program is ahead of the robot. When it is necessary to carry out an action at a given robot position, the program has to wait for the robot to complete its movements: the waitEndMove() instruction is used for synchronization purposes. D28062804A - 02/2006 129 / 160 Thus in the following program: movej(A, tool, mDesc) movej(B, tool, mDesc) waitEndMove() movej(C, tool, mDesc) movej(D, tool, mDesc) etc. The first two lines are executed when the robot starts to move towards A. The program is then blocked at the third line until the robot is stabilized at point B. When the robot movement is stabilized at B, the program resumes. The open() and close() instructions also wait for the robot to comlete its movements before activating the tool. 9.3. SPEED MONITORING 9.3.1. PRINCIPLE The principle of monitoring the speed along a trajectory is as follows: The robot moves and accelerates at all times to its maximum capacity, in accordance with the speed and acceleration constraints imposed by the movement command. The movement commands contain two types of speed constraints defined in a mdesc type variable: 1. The revolute speed, acceleration and deceleration constraints 2. The Cartesian speed constraints for the tool center point Acceleration determines the rate at which the speed increases at the beginning of a trajectory. Conversely, deceleration determines the rate at which the speed decreases at the end of the trajectory. When high acceleration and deceleration values are used, the movements are faster, but jerkier. With low values, the movements take a little longer, but they are smoother. 9.3.2. SIMPLE SETTINGS When the tool and the object carried by the robot do not need to be handled with special care, Cartesian speed constraints are not necessary. The speed along the trajectory is normally adjusted as follows: 1. Set the Cartesian speed constraints very high, for example to the default values, to ensure that they do not affect the rest of the setting procedure. 2. Initialize the revolute speeds and accelerations using the nominal values (100%). 3. Then adjust the speed along the trajectory using the revolute speed parameter. 4. If the speed is not sufficient, increase the acceleration and deceleration parameters 9.3.3. ADVANCED SETTINGS To control the Cartesian speed of the tool, for example to execute a trajectory at a constant speed, proceed as follows: 1. Set the Cartesian speed constraints to the values required. 2. Initialize the revolute speeds and accelerations using the nominal values (100%). 3. Then adjust the speed along the trajectory using the Cartesian speed parameter only. 4. If the speed is not sufficient, increase the acceleration and deceleration parameters. If you want to brake automatically in sections with pronounced curves, reduce the acceleration and deceleration parameters. 130 / 160 D28062804A - 02/2006 Chapter 9 - Movement control 9.3.4. ENVELOPPE ERROR The nominal values for revolute speed and acceleration are the nominal load values supported by the robot, irrespective of trajectory. However, the robot can often operate faster: the maximum speeds that can be reached by the robot depend on its load and trajectory. In suitable cases (light load, positive gravitational effect) the robot can exceed its nominal values without any damage being caused. If the robot is carrying a load that is heavier than its nominal load, or if the revolute speed and acceleration values are too high, the robot cannot always obey its movement command and stops when an enveloppe error occurs. Such errors can be avoided by specifying lower revolute speed and acceleration parameters. CAUTION: In the case of straight line movements near a singularity, a small tool movement requires large revolute movements. If the revolute speed is set too high, the robot cannot obey the command and stops when an enveloppe error occurs. 9.4. REAL-TIME MOVEMENT CONTROL The movement commands previously described in this manual have no immediate effect: when each command is executed, a movement order is stored in the system. The robot then executes the stored movements. The robot's movements can be controlled instantly, as follows: S5.3 • The monitor speed modifies the speed of all the movements. It can only be adjusted via the robot's manual control teach pendant, and not in a VAL3 application. However, the speedScale() instruction allows an application to know the current monitor speed and hence, if necessary, ask the user to reduce it when the cycle resumes, or set it to 100% during production. • The stopMove() and restartMove() instructions are used to stop and restart movement along the trajectory. • The resetMotion() instruction is used to stop the movement in progress and cancel the stored movement commands. • The Alter instruction (option) applies to the path a geometrical transformation (translation, rotation, rotation at the tool centre point) that is immediately effective. D28062804A - 02/2006 131 / 160 9.5. MDESC TYPE 9.5.1. DEFINITION The mdesc type is used to define the movement parameters (speed, acceleration, blending). The mdesc type is a structured type, with the following fields, in this order: num accel Maximum permitted revolute acceleration as a % of the nominal acceleration of the robot. num vel Maximum permitted revolute speed as a % of the nominal speed of the robot. num decel Maximum permitted revolute deceleration as a % of the nominal deceleration of the robot. num tvel Maximum permitted translational speed of the tool center point, in mm/s or inches/s depending on the unit of length of the application. num rvel Maximum permitted rotational speed of the tool center point, in degrees per second. blend blend Blend mode: off (no blending), or joint (blending). num leave In joint blend mode, distance between the target point at which blending starts and the next point, in mm or inches, depending on the unit of length of the application. num reach In joint blend mode, distance between the target point at which blending stops and the next point, in mm or inches, depending on the unit of length of the application. A detailed explanation of these parameters is given at the beginning of the chapter entitled "Movement control". By default, an mdesc type variable is initialized at {100,100,100,9999,9999,off,50,50}. 9.5.2. OPERATORS In ascending order of priority: mdesc = Assigns each desc2 field to the field corresponding to the desc1 variable. bool != Returns true if the difference between desc1 and desc2 is at least one field. bool == Returns true if desc1 and desc2 have the same field values. 132 / 160 D28062804A - 02/2006 Chapter 9 - Movement control 9.6. MOVEMENT INSTRUCTIONS void movej(joint joint, tool tool, mdesc desc) Syntax void movej(joint joint, tool tool, mdesc desc) void movej(point point, tool tool, mdesc desc) Function Records a command for a revolute movement towards the point or joint positions, using the tool and the desc movement parameters. CAUTION: The system does not wait for the movement to be completed before proceeding to the next VAL3 instruction: several movement commands can be stored in advance. When the system has used up all its available memory and has no room for another command, the instruction waits until the new command can be stored. A detailed explanation of the movement parameters is given at the beginning of the chapter entitled "Movement control". An execution error is generated if desc contains invalid values, if position is outside the software limits, if point cannot be reached, or if a previously saved movement command cannot be run (destination out of reach). Parameter tool tool Tool type expression mdesc desc Movement descriptor type expression joint joint Joint type expression point point Point type expression See also void movel(point point, tool tool, mdesc desc) bool isInRange(joint jPosition) void waitEndMove() void movec(Point intermediate, Point target, tool tool, mdesc desc) D28062804A - 02/2006 133 / 160 void movel(point point, tool tool, mdesc desc) Syntax void movel(point point, tool tool, mdesc desc) Function Records a command for a linear movement towards a point position, using the tool tool and the desc movement parameters. CAUTION: The system does not wait for the movement to be completed before proceeding to the next VAL3 instruction: several movement commands can be stored in advance. When the system has used up all its available memory and has no room for another command, the instruction waits until the new command can be stored. A detailed explanation of the movement parameters is given at the beginning of the chapter entitled "Movement control". An execution error is generated if desc contains invalid values, if point cannot be reached, if a straight line movement towards point is not possible or if a previously saved movement command cannot be run (destination out of reach). Parameter point point Point type expression. tool tool Tool type expression. mdesc desc Movement descriptor type expression. See also void movej(joint joint, tool tool, mdesc desc) void waitEndMove() void movec(Point intermediate, Point target, tool tool, mdesc desc) 134 / 160 D28062804A - 02/2006 Chapter 9 - Movement control void movec(Point intermediate, Point target, tool tool, mdesc desc) Syntax void movec(Point intermediate, Point target, tool tool, mdesc desc) Function Records a command for a circular movement starting from the destination of the previous movement and finishing at Point target and passing through the Point intermediate. The tool orientation is interpolated in such a way that it is possible to program a constant orientation in absolute terms, or as compared with the trajectory. CAUTION: The system does not wait for the movement to be completed before proceeding to the next VAL3 instruction: several movement commands can be stored in advance. When the system has used up all its available memory and has no room for another command, the instruction waits until the new command can be stored. A detailed explanation of the various movement parameters and orientation interpolation can be found at the beginning of the "Movement Control" chapter. An execution error is generated if desc has invalid values, if Point intermediate (or Point target) cannot be reached, if the circular movement is not possible (see the "Movement control - interpolation of orientation" chapter), or if a movement command recorded beforehand cannot be executed (destination out of reach). Parameter Point intermediate Point type expression. Point target Point type expression. tool tool Tool type expression. mdesc desc Movement descriptor type expression. See also void movej(joint joint, tool tool, mdesc desc) void movel(point point, tool tool, mdesc desc) void waitEndMove() D28062804A - 02/2006 135 / 160 void stopMove() Syntax void stopMove() Function Stops the arm on the trajectory and suspends authorization of the programmed movement. CAUTION: This instruction returns immediately: the VAL3 task does not wait for the movement to be completed before proceeding to the next instruction. The kinematic parameters used to execute the stop are those used for the current movement. The movements can only be resumed after a restartMove() or resetMotion() instruction. Non-programmed movements ( jog interface) are still possible. Example wait (dSignal==true) stopMove() restartMove() // waits for a signal // stops movements along the trajectory // restarts movements along the trajectory See also void restartMove() void resetMotion(), void resetMotion(joint startingPoint) void resetMotion(), void resetMotion(joint startingPoint) Syntax void resetMotion() void resetMotion(joint startingPoint) Function Stops the arm on the trajectory and cancels all the stored movement commands. CAUTION: This instruction returns immediately: the VAL3 task does not wait for the movement to be completed before proceeding to the next instruction. The programmed movement authorization is restored if it was suspended by the stopMove() instruction. If the startingPoint revolute position is specified, the next movement command can only be run from this position: a connection movement must be performed beforehand to reach the startingPoint position. If no revolute position is specified, the next movement command is run from the arm's current position, wherever it is. See also bool isEmpty() void stopMove() void autoConnectMove(bool active), bool autoConnectMove() 136 / 160 D28062804A - 02/2006 Chapter 9 - Movement control void restartMove() Syntax void restartMove() Function Restores the programmed movement authorization, and restarts the trajectory interrupted by the stopMove() instruction. If the programmed movement authorization was not interrupted by the stopMove() instruction, this intruction has no effect. See also void stopMove() void resetMotion(), void resetMotion(joint startingPoint) void waitEndMove() Syntax void waitEndMove() Function Cancels the blending of the last movement commmand recorded and waits for the command to be executed. This instruction does not wait for the robot to be stabilized in its final position, it only waits until the position instructions sent to the variable speed drives correspond to the desired final position. When it is necessary to wait for complete stabilization of the movement, the isSettled() instruction must be used. An execution error is generated if a previously stored movement cannot be run (destination out of reach). Example waitEndMove() putln(sel(isEmpty(),1,-1)) putln(sel(isSettled(),1,-1)) watch(isSettled(), 1) // displays 1, no more commands in progress // May display -1, the robot is not necessarily already stabilized // Waits for the robot to stabilize for 1 s maximum See also bool isSettled() bool isEmpty() void stopMove() void resetMotion(), void resetMotion(joint startingPoint) D28062804A - 02/2006 137 / 160 bool isEmpty() Syntax bool isEmpty() Function Returns true if all the movement commands have been executed, returns false if at least one command is still being executed. Example // If commands are in progress if ! isEmpty() //Stop the robot and cancel the commands resetMotion() endIf See also void waitEndMove() void resetMotion(), void resetMotion(joint startingPoint) bool isSettled() Syntax bool isSettled() Function Returns true if the robot is stopped, and false if its position is not yet stabilized. The position is considered as stabilized if the position error for each joint remains less than 1% of the maximum authorized position, for 50 ms. See also bool isEmpty() void waitEndMove() void autoConnectMove(bool active), bool autoConnectMove() Syntax void autoConnectMove(bool active) bool autoConnectMove() Function In the remote mode, the connection movement is automatic if the arm is very close to its trajectory (distance less than the maximum authorized drift error). If the arm is too far away from its trajectory, the connection movement is automatic or under manual control depending on the mode defined by the autoConnectMove instruction: automatically if active is true, in manual control mode if active is false. When called without parameters, autoConnectMove returns the current connection movement mode. By default, the connection movement in remote mode is under manual control. CAUTION: Under normal conditions of use, the arm stops on its trajectory during an emergency stop. Hence in remote mode, the arm is able to restart automatically whatever the connection movement defined by the autoConnectMove instruction. See also void resetMotion(), void resetMotion(joint startingPoint) 138 / 160 D28062804A - 02/2006 Chapter 10 - Options CHAPTER 10 OPTIONS D28062804A - 02/2006 139 / 160 140 / 160 D28062804A - 02/2006 Chapter 10 - Options 10.1. COMPLIANT MOVEMENTS WITH FORCE CONTROL 10.1.1. PRINCIPLE In a standard movement command, the robot moves to reach a requested position at a programmed rate of acceleration and speed. If the arm cannot follow the command, additional force will be requested from the motors in order to attempt to reach the desired position. When the deviation between the position set by the command and the true position is too great, a system error is generated that cuts off power to the robot arm. The robot is said to be 'compliant' when it accepts certain deviation between the position set by command and the actual position. The CS8 can be programmed to be trajectory compliant, i.e. to accept a delay or advance in relation to the programmed trajectory, by controlling the force applied by the arm. On the other hand, no deviation in relation to the trajectory is allowed. In practice, the CS8's compliant movements can allow the arm to follow a trajectory while being pushed or pulled by an outside force, or come into contact with an object, with a check made on the force applied by the arm on the object. 10.1.2. PROGRAMMING Compliant movements are programmed like standard movements, using the movelf() and movejf() instructions, with an additional parameter used to control the force applied by the arm. During the compliant movement, speed and acceleration limits are applied, in the same way as for standard movements, via the movement descriptor. The movement can take place along the trajectory, in either direction. It is possible to combine compliant movements or combine compliant and standard movements: as soon as the destination position is reached, the robot moves on to the next movement. The waitEndMove() instruction is used to wait for the end of a compliant movement. The resetMotion() instruction cancels all programmed movements, whether compliant or not. After resetMotion(), the robot is no longer compliant. The stopMove() and restartMove() instructions also apply to compliant movements: The stopMove() forces the current movement speed to zero. If it is a compliant movement, it is hence stopped and the robot is no longer compliant until the restartMove() instruction is run. Lastly, the isCompliant() instruction is used to ensure that the robot is in compliant mode, for example before allowing any outside force to be applied to the arm. 10.1.3. FORCE CONTROL When the specified force parameter is null, the arm is passive, i.e. it only moves when actuated by outside forces. When the force parameter is positive, everything operates as though an outside force were pushing the arm to the position ordered: the arm moves on its own, but it can be held back or accelerated by outside action which is added to the force commanded. When the force parameter is negative, everything operates as though an outside force were pushing the arm towards its initial position: to move the arm towards the position commanded, it is thus necessary to apply an outside force that is greater than the force commanded. The force parameter is expressed as a percentage of the arm's nominal load. 100% means that the arm applies a force towards the position commanded, that is equivalent to the nominal load. In rotation, 100% corresponds to the nominal torque allowed on the arm. When the arm's speed or acceleration reach the values specified in the movement descriptor, the robot opposes its full power to resist any attempt to increase its speed or rate of acceleration. D28062804A - 02/2006 141 / 160 10.1.4. LIMITATIONS Compliant movements present the following limitations: - It is not possible to use blending at the start or the end of a compliant movement: the arm is bound to stop at the start and end of every compliant movement. - When a compliant movement is made, the arm may move back to its starting point, but it cannot move back any further: the arm then stops suddenly at its starting point. - The force parameter on the arm cannot exceed 1000%. The precision obtained concerning the force applied is limited by internal friction. It depends mainly on the arm position and the trajectory commanded. - Long compliant movements require a lot of internal memory capacity. An execution error is generated if the system does not have enough memory to fully process the movement. 10.1.5. INSTRUCTIONS void movejf(joint position, tool tool, mdesc desc, num force) Syntax void movejf(joint position, tool tool, mdesc desc, num force) Function Records a compliant revolute movement command towards the position position using the tool tool, the desc movement parameters, and a force force command. The force force command is expressed as a percentage of the maximum arm force and cannot exceed ±1000%. CAUTION: The system does not wait for the movement to be completed before proceeding to the next VAL3 instruction: several movement commands can be stored in advance. When the system has used up all its available memory and has no room for another command, the instruction waits until the new command can be stored. A detailed explanation of the various movement parameters is given at the beginning of the section. An execution error is generated if desc or force have invalid values, if position is outside the software limits, if the previous movement required blending or if a previously recorded movement command cannot be run (destination out of reach). Parameter tool tool Tool type expression. mdesc desc Movement descriptor type expression joint position Revolute position type position num force Numerical type expression See also void movelf(point point, tool tool, mdesc desc, num force) bool isCompliant() 142 / 160 D28062804A - 02/2006 Chapter 10 - Options void movelf(point point, tool tool, mdesc desc, num force) Syntax void movelf(point point, tool tool, mdesc desc, num force) Function Records a compliant linear movement command towards the point position using the tool tool, the desc movement parameters and the force force command. The force force command is expressed as a percentage of the maximum arm force and cannot exceed ±1000%. CAUTION: The system does not wait for the movement to be completed before proceeding to the next VAL3 instruction: several movement commands can be stored in advance. When the system has used up all its available memory and has no room for another command, the instruction waits until the new command can be stored. A detailed explanation of the various movement parameters is given at the beginning of the section. An execution error is generated if desc or force have invalid values, if point cannot be reached, if movement towards point is impossible in a straight line, if the previous movement required blending or if a previously recorded movement command cannot be run (destination out of reach). Parameter point point Point type expression. tool tool Tool type expression mdesc desc Movement descriptor type expression num force Numerical type expression See also void movejf(joint position, tool tool, mdesc desc, num force) bool isCompliant() D28062804A - 02/2006 143 / 160 bool isCompliant() Syntax bool isCompliant() Function Returns true if the robot is in compliant mode, otherwise returns false. Example movelf(position, Tool, mDesc, 0) wait(isCompliant()) dEjection = true waitEndMove() movej(jDepart, Tool, mDesc) // // // // Waits for the robot to actually be in compliant mode Commands press ejection Waits for the end of compliant movement Continues with a standard movement See also void movelf(point point, tool tool, mdesc desc, num force) void movejf(joint position, tool tool, mdesc desc, num force) 144 / 160 D28062804A - 02/2006 Chapter 10 - Options 10.2. ALTER: REAL TIME CONTROL ON A PATH Cartesian Alter 10.2.1. PRINCIPLE A Cartesian alteration of a path allows apply to the path a geometrical transformation (translation, rotation, rotation at the tool centre point) that is immediately effective. This feature makes it possible to modify a nominal path using an external sensor, for, for example, track accurately the shape of a part, or operate on a moving part. 10.2.2. PROGRAMMING The programming consists in defining first the nominal path, then, in real time, specifying a deviation to it. The nominal path is programmed as for standard moves, with the alterMovel(), alterMovej() and alterMovec() instructions. Several alterable moves may succeed, or some alterable moves may alternate with not alterable moves. We will define the alterable path as the successive alterable move commands between two not alterable move commands. The alteration itself is programmed with the alter() instruction. Different alter modes are possible depending on the geometrical transformation to apply; the mode is defined with the alterBegin() instruction. The alterEnd() instruction is finally needed to specify how to terminate the altering, either before the nominal move is completed, so that the next non alterable move can be sequenced without stop; either after, so that it remains possible to move the arm with alter while the nominal move is stopped. The other motion control instructions remains effective in alter mode. CAUTION: The waitEndMove, open and close instructions wait for the end of the nominal move, not for the end of altered move. VAL3 execution may therefore resume after a waitEndMove even if the arm is still moving because of a changing alter deviation. 10.2.3. CONSTRAINTS Synchronisation, desynchronisation: Because the alter command is applied immediately, the change in the alteration must be controlled so that the resulting arm path remains without discontinuity or noise: • A large change in the alteration can only be applied gradually with a specific approach control. • The end of the altering requires a null alteration speed, obtained gradually with a specific stop control. Synchronous command: The controller sends position and velocity commands every 4 ms to the amplifiers. As a consequence, the alter command must be synchronized with this communication period so that the alteration speed remains under control. This is done by using a synchronous VAL3 task (see Tasks chapter). In the same way, the sensor input may have to be filtered first if the data is noisy or if its sampling period is not synchronized with the controller period. Smooth sequencing: The first non alterable move following an alterable path can be computed only when alterEnd is executed. As a consequence, if alterEnd is executed too near the end of the alterable move, the arm may slow down or even stop near this point, until the next move is computed. Moreover, the ability to compute in advance the next move imposes some restrictions on the altered path after alterEnd is executed: It must then keep the same configuration, and make sure all joints remain in the same axis turn. It is then possible that an error is generated during the move that would not occur if alterEnd was not executed in advance. D28062804A - 02/2006 145 / 160 10.2.4. SAFETY At any time, the user alteration may be invalid: target out of reach, velocity or acceleration too high. When the system detects such situations, an error is generated and the arm is stopped suddenly at the last valid position. The motion needs to be reset to resume operation. When the arm motion is disabled during a move (hold mode, stop request or emergency stop), a stop is controlled on the nominal move as for standard moves. After a certain delay, the alter mode is also automatically disabled to guaranty a complete stop of the arm. When the stop condition disappears, the move may resume and the alter mode is automatically enabled again. 10.2.5. LIMITATIONS A null move (when the move target is on start position) is ignored by the system. As a consequence, you need a not null move to enter the alter mode. It is not possible to specify the desired configuration for the altered path; the system always uses the same configuration. It is therefore not possible to change the configuration of the arm within an altered path (even with the alterMovej instruction). 10.2.6. INSTRUCTIONS void alterMovej(joint target, tool tcp, mdesc speed) Syntax void alterMovej(joint target, tool tcp, mdesc speed) void alterMovej(point target, tool tcp, mdesc speed) Function Register an alterable joint move command (a line in the joint space) Parameter target Point or joint expression defining the end position of the move. tcp Tool expression defining the tool centre point used during the move for Cartesian speed control. speed mdesc expression defining the speed control and blending parameter for the move. Details This instruction behaves exactly as the movej instruction, except that it enables the alter mode for the move. See movej for more details. 146 / 160 D28062804A - 02/2006 Chapter 10 - Options void alterMovel(point target, tool tcp, mdesc speed) Syntax void alterMovel(point target, tool tcp, mdesc speed) Function Register an alterable linear move command (a line in the Cartesian space) Parameter target Point expression defining the end position of the move. tcp Tool expression defining the tool centre point used during the move for Cartesian speed control. At the end of the move, the tool centre point is at the specified target position. speed mdesc expression defining the speed control and blending parameter for the move. Details This instruction behaves exactly as the movel instruction, except that it enables the alter mode for the move. See movel for more details. void alterMovec (point intermediate, point target, tool tcp, mdesc speed) Syntax void alterMovec(point intermediate, point target, tool tcp, mdesc speed) Function Register an alterable circular move command. Parameter Intermediate Point expression defining an intermediate point on the circle target Point expression defining the end position of the move. tcp Tool expression defining the tool centre point used during the move for Cartesian speed control. At the end of the move, the tool centre point is at the specified target position. speed mdesc expression defining the speed control and blending parameter for the move. Details This instruction behaves exactly as the movec instruction, except that it enables the alter mode for the move. See movec for more details. D28062804A - 02/2006 147 / 160 num alterBegin(frame alterReference, mdesc velocity) num alterBegin(tool alterReference, mdesc velocity) Syntax num alterBegin(frame alterReference, mdesc velocity) num alterBegin(tool alterReference, mdesc velocity) Function Initialize the alter mode for the alterable path being executed. Parameter alterReference Frame or tool expression defining the reference for the alter deviation. velocity mdesc expression defining the safety check parameters for the alter deviation. Details The alter mode initiated with alterBegin terminates only with an alterEnd command, or a resetMotion. When the end of an alterable path is reached, the alter mode remains active until alterEnd is executed. The trsf expression of the alter command defines a transformation of the whole path around alterReference: • The path is rotated around the centre of the frame or tool using the rotation part of the trsf. • Then the path is translated by the translation part of the trsf. The trsf coordinates of the alter command are defined in alterReference base. When a frame is used as reference, the alterReference is fixed in space (World). This mode must be used when the deviation of the path is known or measured in the Cartesian space (moving part such as conveyor tracking). When a tool is used as reference, the alterReference is fixed relatively to the tool centre point. This mode must be used when the deviation of the path is known or measured relatively to the tool centre point (for example part shape sensor mounted on the tool). The motion descriptor is used to define the maximum joint and Cartesian velocity on the altered path (using the fields vel, tvel and rvel of the motion descriptor). An error is generated and the arm is stopped on path if the altered velocity exceeds the specified limits. The accel and decel fields of the motion descriptor control the stop time when a stop condition occurs (eStop, hold mode, VAL3 stopMove()): The path alteration must be stopped using these deceleration parameters (see alterStopTime). alterBegin returns a numerical value to indicate the result of the instruction: 1 alterBegin was successfully executed 0 alterBegin is waiting for the start of the alterable move -1 alterBegin was ignored because the alter mode has already started -2 alterBegin is refused (alter option is not enabled) -3 alterBegin was refused because the motion is in error. A resetMotion is required. See also num alterEnd() num alter(trsf alteration) num alterStopTime() 148 / 160 D28062804A - 02/2006 Chapter 10 - Options num alterEnd() Syntax num alterEnd() Function Exit the alter mode and make the current move not alterable any more. Details If alterEnd is executed when the end of the alterable path is reached, the next not alterable move (if any) is started immediately. If alterEnd is executed before the end of the alterable move, the current value of the alter deviation is applied to the rest of the alterable path, until the first next not alterable move. It is not possible to enter the alter mode again on the same alterable path. The next not alterable move, if any, is computed as soon as alterEnd is executed so that the transition between the alterable path and the next not alterable move is made without stop. alterEnd returns a numerical value to indicate the result of the instruction: 1 alterEnd was successfully executed -1 alterEnd was ignored because the alter mode has not yet started -3 alterEnd was refused because the motion is in error. A resetMotion is required. See also num alterBegin(frame alterReference, mdesc velocity) num alterBegin(tool alterReference, mdesc velocity) num alter(trsf alteration) Syntax num alter(trsf alteration) Function Specify a new alteration of the alterable path. Parameter alteration Trsf expression defining the alteration to apply until the next alter instruction. Details The transformation induced by the alteration trsf depends on the alter mode selected by the alterBegin instruction. The alteration coordinates are defined in the frame or tool specified with the alterBegin instruction. The alteration is applied by the system every 4 ms: When several alter instructions are executed in less that 4 ms, the last one applies. Most often the alter instruction needs to be executed in a synchronous task to force an alteration refresh every 4 ms. The alteration must be computed carefully so that the resulting arm position and speed commands remain continuous and without noise. A sensor input may need to be filtered adequately to reach the desired quality on the arm path and behaviour. When the motion is stopped (hold mode, emergency stop, stopMove() instruction), the alteration of the path is locked until all stop conditions are cleared. When the alteration of the path is invalid (unreachable position, out of speed limits), the arm will stop suddenly at the last valid position and the alter mode is locked in error. A resetMotion is required to resume operation. The velocity limits for the alter move are defined by the alterBegin instruction. D28062804A - 02/2006 149 / 160 Alter returns a numerical value to indicate the result of the instruction: 1 alter was successfully executed. 0 alter is waiting for the motion to restart (alterStopTime is null). -1 alter was ignored because the alter mode is not started or already ended. -2 alter is refused (alter option is not enabled). -3 alter was refused because the motion is in error. A resetMotion is required. See also num alterBegin(frame alterReference, mdesc velocity) num alterBegin(tool alterReference, mdesc velocity) void taskCreateSync string name, num period, bool& overrun, program(...) num alterStopTime() Syntax num alterStopTime() Function Return the remaining time before the alter deviation is locked, when a stop condition occurs. Details When a stop condition occurs, the system evaluates the time to stop the arm if the accel and decel parameters of the motion descriptor specified with alterBegin are used. The minimum of this time and the time imposed by the system (typically 0.5s when a eStop occurs) is returned by alterStopTime. When alterStopTime returns a negative value, there is no pending stop condition. When alterStopTime returns null, the alter command is locked until all stop conditions are reset. alterStopTime returns null when the alter mode is not enabled. See also num alterBegin(frame alterReference, mdesc velocity) num alterBegin(tool alterReference, mdesc velocity) num alter(trsf alteration) 150 / 160 D28062804A - 02/2006 Chapter 11 - Appendix CHAPTER 11 APPENDIX D28062804A - 02/2006 151 / 160 152 / 160 D28062804A - 02/2006 Chapter 11 - Appendix 11.1. EXECUTION ERROR CODES Code Description -1 0 1 10 11 20 21 29 30 31 32 40 41 60 61 70 80 81 90 100 101 102 103 104 105 106 122 123 124 125 There is no task with the specified name created by this library No execution error A task is running Invalid numerical calculation (division by zero). Invalid numerical calculation (e.g.ln(-1)) Access to a table with an index that is larger than the table size. Access to a table with a negative index. Invalid task name. See taskCreate() instruction. The specified name does not correspond to any VAL3 task. A task with the same name already exists. See taskCreate instruction. Only 2 different periods for synchronous tasks are supported. Change scheduling period. Not enough memory space available. Not enough memory space to run the task. See the run memory size. Maximum instruction run time exceeded. Internal VAL3 interpreter error Invalid instruction parameter. See the corresponding instruction. Uses data or a program from a library not loaded in the memory. Incompatible kinematic: Use of a point/joint/config that is not compatible with the arm kinematic. The task cannot resume from the location specified. See taskResume() instruction. The speed specified in the motion descriptor is invalid (negative or too great). The acceleration specified in the motion descriptor is invalid (negative or too great). The deceleration specified in the motion descriptor is invalid (negative or too great). The sideways speed specified in the motion descriptor is invalid (negative or too great). The rotation speed specified in the motion descriptor is invalid (negative or too great). The reach parameter specified in the movement descriptor is invalid (negative). The leave parameter specified in the movement descriptor is invalid (negative). Attempt to write in a system input. Use of a dio, aio or sio input/output not connected to a system input/output. Attempt to access a protected system input/output Read or write error on a dio, aio or sio (field bus error) Cannot run this movement instruction: a previous movement request could not be completed (point out of reach, singularity, configuration problem, etc.) Movement command not supported Invalid movement instruction: check the movement descriptor. Invalid flange tool coordinates Invalid world tool coordinates Use of a point without a reference frame. See Definition. Use of a frame without a reference frame. See Definition. Use of a tool without reference tool. See Definition. Invalid frame or reference tool (global variable linked to a local variable) No runtime licence for this instruction, or demo licence is over. 150 153 154 160 161 162 163 164 165 250 D28062804A - 02/2006 153 / 160 11.2. CONTROL PANEL KEYBOARD KEY CODES Without Shift 3 Caps Space 283 - 32 2 Shift 282 Esc With Shift 3 Caps Space 283 - 32 Run 2 Shift 282 Move Help Move - Ret. - 255 - 270 - Menu Tab Up Bksp Stop - Esc Help Ret. Run - 255 - 270 - Menu UnTab PgUp Bksp Stop - - 259 261 263 - 260 262 263 1 User Left Down Right 1 User Home PgDn End 281 - 264 266 268 281 - 265 267 269 Menus (with or without Shift): F1 271 F2 272 F3 273 F4 274 F5 275 F6 276 F7 277 F8 278 For standard keys, the code returned is the ASCII code of the corresponding character: 154 / 160 q 113 a 97 z 122 w 119 s 115 x 120 e 101 d 100 c 99 r 114 f 102 v 118 Without Shift t y 116 121 g h 103 104 b n 98 110 u 117 j 106 m 109 i 105 k 107 . 46 o 111 l 108 , 44 p 112 < 60 = 61 7 55 4 52 1 49 8 56 5 53 2 50 9 57 6 54 3 51 + 43 45 0 48 With Shift * ; 42 59 / ? 47 63 " % 34 37 ( 40 : 58 95 ) 41 ! 33 . 46 [ 91 { 123 , 44 ] 93 } 125 > 62 Q 81 A 65 Z 90 W 87 S 83 X 88 E 69 D 68 C 67 R 82 F 70 V 86 With double Shift T Y 84 89 G H 71 72 B N 66 78 U 85 J 74 M 77 I 73 K 75 $ 36 O 79 L 76 \ 92 P 80 } 125 = 61 D28062804A - 02/2006 VAL3 REFERENCE MANUAL - Version 5.3 ILLUSTRATION Ambiguity as to the intermediate orientation ................................. 125 Blended cycle ..................................................... 122 Blended cycle ..................................................... 129 Circular movement .................................................. 120 Configuration change: righty / lefty ....................................... 126 Configuration: enegative .............................................. 114 Configuration: epositive ............................................... 114 Configuration: lefty .................................................. 113 Configuration: lefty .................................................. 115 Configuration: righty ................................................. 113 Configuration: righty ................................................. 115 Configuration: wnegative .............................................. 114 Configuration: wpositive .............................................. 114 Constant orientation as compared with the trajectory ........................... 124 Constant orientation in absolute terms ..................................... 124 Cycle type: U ...................................................... 120 Cycle without blending at a given point ..................................... 122 Definition of the distances: ’leave’ / ’reach’ .................................. 121 Elbow configuration change impossible .................................... 127 Frame rotation about the axis: X .......................................... 98 Frame rotation about the axis: Y’ .......................................... 99 Frame rotation about the axis: Z’’ ......................................... 99 Full circle ........................................................ 125 Initial and final positions .............................................. 119 Links between reference frames ......................................... 101 Links between tools ................................................. 103 Organization chart: frame / point / tool / trsf ................................... 92 Orientation ........................................................ 98 Point definition ..................................................... 105 Positive/negative elbow configuration change ................................ 126 Positive/negative wrist configuration change ................................. 127 Sequencing ........................................................ 68 Shoulder configuration change possible .................................... 128 Straight line movement ............................................... 119 Two configurations that can be used to reach a given point: P ..................... 112 User page ......................................................... 59 D28062804A - 02/2006 155 / 160 156 / 160 D28062804A - 02/2006 VAL3 REFERENCE MANUAL - Version 5.3 INDEX A E abs (fonction) 34, 93 accel 132 acos (fonction) 33 aio 19, 51 aioGet (fonction) 51 aioLink (fonction) 51 aioSet (fonction) 52 appro (fonction) 108 asc (fonction) 43 asin (fonction) 33 atan (fonction) 34 autoConnectMove 123 autoConnectMove (fonction) elbow 112 else 23 enablePower (fonction) endFor 25 endIf 23 endWhile 24 enegative 114 epositive 114 esStatus (fonction) 89 exp (fonction) 35 F 138 blend 121, 132 bool 19 find (fonction) 46 flange 17 for 25 for (fonction) 25 frame 19, 92 C G call 18, 23 call (fonction) 22 chr (fonction) 42 clearBuffer (fonction) 54 clock (fonction) 78 close 68 close (fonction) 104 cls (fonction) 60 codeAscii 42 compose (fonction) 107 config 19, 92, 111 config (fonction) 115 cos (fonction) 33 get 68 get (fonction) 61 getKey (fonction) 63 getLatch (fonction) 96 globale 20 gotoxy (fonction) 60 B D decel 132 delay 68 delay (fonction) 77 delete (fonction) 45 dio 19, 48 dioGet (fonction) 49 dioLink (fonction) 49 dioSet (fonction) 50 disablePower (fonction) 87 distance (fonction) 100, 106 do 24 do ... until (fonction) 24 D28062804A - 02/2006 87 H here (fonction) 108 herej (fonction) 94 I if (fonction) 23 insert (fonction) 45 isCalibrated (fonction) 88 isCompliant 141 isCompliant (fonction) 144, 146, 147, 148, 149, 150 isEmpty (fonction) 138 isInRange (fonction) 94 isKeyPressed (fonction) 63 isPowered (fonction) 87 isSettled (fonction) 138 J joint 19 jointToPoint (fonction) 109 157 / 160 L R leave 121, 132 left (fonction) 43 lefty 113, 115 len (fonction) 47 libDelete (fonction) 83 libList (fonction) 84 libLoad 82 libLoad (fonction) 83 libPath (fonction) 84 libSave (fonction) 83 limit (fonction) 38 ln (fonction) 36 locale 20 log (fonction) 36 logMsg (fonction) 64 reach 121, 132 replace (fonction) 46 resetMotion 123, 136, 141 resetMotion (fonction) 136 restartMove 136, 141 restartMove (fonction) 137 return (fonction) 23 right (fonction) 44 righty 113, 115 round (fonction) 37 roundDown (fonction) 37 roundUp (fonction) 37 RUNNING 77, 78 rvel 132 M sel (fonction) 39 setFrame (fonction) 102 setLatch (fonction) 95 setMutex (fonction) 73 shoulder 112 sin (fonction) 32 sio 19, 53 sioGet (fonction) 54 sioLink (fonction) 54 sioSet (fonction) 55 size (fonction) 29 speedScale (fonction) 89 sqrt (fonction) 35 start 17 stop 17 stopMove 141 stopMove (fonction) 136 STOPPED 72 string 19 switch (fonction) 26 max (fonction) 38 mdesc 19, 119, 132 mid (fonction) 44 min (fonction) 38 movec (fonction) 135 movej 119 movej (fonction) 133 movejf 141 movejf (fonction) 142 movel 119 movel (fonction) 134 movelf 141 movelf (fonction) 143 N num 19, 43 O open 68 open (fonction) 104 P point 19 pointToJoint (fonction) 109 popUpMsg (fonction) 63 position (fonction) 110 put (fonction) 60 putln 60 158 / 160 S T tan (fonction) 34 taskCreate (fonction) 75, 76 taskKill (fonction) 73 taskResume 67 taskResume (fonction) 72 taskStatus 67 taskStatus (fonction) 74 taskSuspend (fonction) 72 title (fonction) 61 toNum (fonction) 41 tool 19, 92 toString (fonction) 40 trsf 19, 92 tvel 132 D28062804A - 02/2006 VAL3 REFERENCE MANUAL - Version 5.3 U until 24 userPage (fonction) 59 V vel 132 void setLatch(dio input) (CS8C only) void setMutex (bool& mutex) 73 95 W wait 68 wait (fonction) 77 waitEndMove 68, 122, 141 waitEndMove (fonction) 137 watch 68 watch (fonction) 78 while (fonction) 24 wnegative 114 workingMode (fonction) 88 world 17 wpositive 114 wrist 112 D28062804A - 02/2006 159 / 160 160 / 160 D28062804A - 02/2006
Source Exif Data:
File Type : PDF File Type Extension : pdf MIME Type : application/pdf PDF Version : 1.4 Linearized : Yes Encryption : Standard V2.3 (128-bit) User Access : Print, Annotate, Extract, Print high-res XMP Toolkit : Adobe XMP Core 5.6-c015 81.157285, 2014/12/12-00:43:15 Create Date : 2006:08:21 11:01:27+02:00 Modify Date : 2016:05:01 16:12:50+02:00 Metadata Date : 2016:05:01 16:12:50+02:00 Producer : iText 1.4 (by lowagie.com) Document ID : uuid:a91ac68f-b2a9-4396-a723-4bcae553552e Instance ID : uuid:2f80135c-c85e-4b85-8bd5-530ee6dd2091 Format : application/pdf Page Count : 160EXIF Metadata provided by EXIF.tools