PDL2 Language Programming Manual
PDL2 Language Programming Manual
PDL2 Language Programming Manual
PDL2
Programming Language Manual System Software Rel. 3.1x
Language Components, Program Structure, Data Representation, Motion Control, Execution Control, I/O Port Arrays, Statements List, Routines, Condition Handlers, Serial Input/Output, Built-in Routines, Predefined Variables, Customizations on the TP, E-mail functionality, Customizing PDL2 Statements in IDE
CR00757508_en-01/0208
The information contained in this manual is the property of COMAU S.p.A. Reproduction of text and illustrations is not permitted without prior written approval by COMAU S.p.A. COMAU S.p.A. reserves the right to alter product specifications at any time without notice or obligation.
SUMMARY
PREFACE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .XXVII
Symbols used in the manual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XXVII Reference documents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XXVIII Modification History . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XXIX
1.
2.
3.
lb-0-0-pdlTOC.fm
XTNDPOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.11 NODE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.11 PATH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.12 SEMAPHORE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.13 Declarations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.13 CONSTANT declarations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.13 TYPE declarations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.14 VARIABLE declarations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.16 Shared types, variables and routines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.18 EXPORTED FROM clause. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.18 GLOBAL attribute and IMPORT statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.19 Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.20 Arithmetic Operations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.21 Relational Operations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.22 Logical Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.22 Bitwise Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.23 VECTOR Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.24 POSITION Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.24 Data Type conversion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.25 Operator precedence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.25 Assignment Statement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.26 Typecasting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.26
4.
II
WITH Clause . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.18 Continuous Motion (MOVEFLY). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.20 Stopping and Restarting motions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.20 CANCEL MOTION Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.20 LOCK, UNLOCK, and RESUME Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.21 SIGNAL SEGMENT Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.22 HOLD Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.22 ATTACH and DETACH Statements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.22 HAND Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.23
5.
6.
lb-0-0-pdlTOC.fm
III
SELECT Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.4 FOR Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.5 WHILE Statement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.7 REPEAT Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.8 GOTO Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.8 Program Control. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.9 PROG_STATE Built-In Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.11 ACTIVATE Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.11 PAUSE Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.11 UNPAUSE Statement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.12 DEACTIVATE Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.12 CYCLE and EXIT CYCLE Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.13 DELAY Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.13 WAIT FOR Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.14 BYPASS Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.14 Program Synchronization. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.14 Program Scheduling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.16
7.
ROUTINES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7.1
Procedures and Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2 Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2 Declarations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.3 Declaring a Routine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.4 Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.4 Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.4 Parameter List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.4 Constant and Variable Declarations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.5 Stack Size. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.6 Function Return Type. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.6 Functions as procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.6 RETURN Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.6 Shared Routines. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.7 Passing Arguments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.8 Passing By Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.8 Passing By Value . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.8 Optional parameters. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.9 Variable arguments (Varargs) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.10 Argument identifier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.10
8.
IV
Variable References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.5 Conditions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.5 RELATIONAL States . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.6 BOOLEAN State . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.6 DIGITAL PORT States . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.7 DIGITAL PORT Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.7 SYSTEM Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.8 USER Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.11 ERROR Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.12 PROGRAM Events. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.13 Event on Cancellation of a Suspendable Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.13 MOTION Events. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.15 Actions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.17 ASSIGNMENT Action . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.17 INCREMENT and DECREMENT Action . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.17 BUILT-IN Actions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.18 SEMAPHORE Action . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.18 MOTION and ARM Actions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.18 ALARM Actions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.19 PROGRAM Actions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.19 CONDITION HANDLER Actions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.19 DETACH Action . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.20 PULSE Action . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.20 HOLD Action . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.20 SIGNAL EVENT Action . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.20 ROUTINE CALL Action . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.20 Execution Order . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.21
9.
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.1 ACTIVATE Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.2 ATTACH Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.3 BEGIN Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.5 BYPASS Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.5 CALLS Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.6 CANCEL Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.7 CLOSE FILE Statement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.8 CLOSE HAND Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.9 CONDITION Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.9 CONST Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.10 CYCLE Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.11 DEACTIVATE Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.12 DECODE Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.13 DELAY Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.14 DETACH Statement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.14 DISABLE CONDITION Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.15 DISABLE INTERRUPT Statement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.16 ENABLE CONDITION Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.17 ENCODE Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.18 END Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.18 EXIT CYCLE Statement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.19 FOR Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.20 GOTO Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.21 HOLD Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.21 IF Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.22 IMPORT Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.23 LOCK Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.23 MOVE Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.24 MOVE ALONG Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.26 OPEN FILE Statement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.27 OPEN HAND Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.28 PAUSE Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.29 PROGRAM Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.30 PULSE Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.31 PURGE CONDITION Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.32
lb-0-0-pdlTOC.fm
VI
READ Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.32 RELAX HAND Statement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.34 REPEAT Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.34 RESUME Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.35 RETURN Statement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.35 ROUTINE Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.36 SELECT Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.37 SIGNAL Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.38 TYPE Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.39 UNLOCK Statement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.40 UNPAUSE Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.41 VAR Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.41 WAIT Statement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.42 WAIT FOR Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.43 WHILE Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.43 WRITE Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.44
lb-0-0-pdlTOC.fm
VII
ARRAY_DIM2 Built-In Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.15 ASIN Built-In Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.16 ATAN2 Built-In Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.16 AUX_COOP Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.17 AUX_DRIVES Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.17 AUX_SET Built-In Procedure. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.18 BIT_ASSIGN Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.18 BIT_CLEAR Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.20 BIT_FLIP Built-In Function. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.20 BIT_SET Built-In Procedure. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.21 BIT_TEST Built-In Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.21 CHR Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.22 CLOCK Built-In Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.22 COND_ENABLED Built-In Function. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.23 COND_ENBL_ALL Built-In Procedure. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.23 CONV_SET_OFST Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.24 COS Built-In Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.25 DATE Built-In Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.25 DIR_GET Built-In Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.26 DIR_SET Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.26 DRIVEON_DSBL Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.27 DV4_CNTRL Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.27 DV4_STATE Built-In Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.32 EOF Built-In Function. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.33 ERR_POST Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.33 ERR_STR Built-In Function v3.11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.35 ERR_TRAP Built-In Function. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.36 ERR_TRAP_OFF Built-In Procedure. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.36 ERR_TRAP_ON Built-In Procedure. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.37 EXP Built-In Function. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.37 FL_BYTES_LEFT Built-In Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.38 FL_GET_POS Built-In Function. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.38 FL_SET_POS Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.39 FL_STATE Built-In Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.40 FLOW_MOD_ON Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.41 FLOW_MOD_OFF Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.41
lb-0-0-pdlTOC.fm
VIII
HDIN_READ Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.41 HDIN_SET Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.42 IP_TO_STR Built-in Function. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.43 IS_FLY Built-In Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.44 JNT Built-In Procedure. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.44 JNT_SET_TAR Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.45 JNTP_TO_POS Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.46 KEY_LOCK Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.46 LN Built-In Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.47 MEM_SPACE Built-In Procedure. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.47 NODE_APP Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.48 NODE_DEL Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.48 NODE_GET_NAME Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.49 NODE_INS Built-In Procedure. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.49 NODE_SET_NAME Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.49 ON_JNT_SET Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.50 ON_JNT_SET_DIG Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.52 ON_POS Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.53 ON_POS_SET Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.55 ON_POS_SET_DIG Built-In Procedure. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.55 ON_TRAJ_SET Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.56 ON_TRAJ_SET_DIG Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.56 ORD Built-In Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.56 PATH_GET_NODE Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.57 PATH_LEN Built-In Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.58 POS Built-In Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.58 POS_COMP_IDL Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.59 POS_CORRECTION Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.59 POS_FRAME Built-In Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.60 POS_GET_APPR Built-In Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.60 POS_GET_CNFG Built-In Function. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.60 POS_GET_LOC Built-In Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.61 POS_GET_NORM Built-In Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.61 POS_GET_ORNT Built-In Function. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.62 POS_GET_RPY Built-In Procedure. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.62 POS_IDL_COMP Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.62
lb-0-0-pdlTOC.fm
IX
POS_IN_RANGE Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.63 POS_INV Built-In Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.64 POS_MIR Built-In Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.64 POS_SET_APPR Built-In Procedure. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.65 POS_SET_CNFG Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.65 POS_SET_LOC Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.66 POS_SET_NORM Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.66 POS_SET_ORNT Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.67 POS_SET_RPY Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.67 POS_SHIFT Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.67 POS_TO_JNTP Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.68 POS_XTRT Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.68 PROG_OWNER Built-In Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.69 PROG_STATE Built-In Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.69 RANDOM Built-in Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.71 ROUND Built-In Function. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.71 RPLC_GET_IDX Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.71 SCRN_ADD Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.72 SCRN_CLEAR Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.72 SCRN_CREATE Built-In Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.73 SCRN_DEL Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.74 SCRN_GET Built-In Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.74 SCRN_REMOVE Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.75 SCRN_SET Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.75 SENSOR_GET_DATA Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.76 SENSOR_GET_OFST Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.76 SENSOR_SET_DATA Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.77 SENSOR_SET_OFST Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.77 SENSOR_TRK Built-In Procedure. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.77 SIN Built-In Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.78 SQRT Built-In Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.79 STANDBY Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.79 STR_CAT Built-In Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.79 STR_CODING Built-In Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.80 STR_CONVERT Built-In Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.80 STR_DEL Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.81
lb-0-0-pdlTOC.fm
STR_EDIT Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.81 STR_GET_INT Built-In Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.82 STR_GET_REAL Built-In Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.82 STR_INS Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.83 STR_LEN Built-In Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.83 STR_LOC Built-In Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.84 STR_OVS Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.84 STR_SET_INT Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.85 STR_SET_REAL Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.85 STR_TO_IP Built-In Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.86 STR_XTRT Built-In Procedure. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.86 SYS_ADJUST Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.87 SYS_CALL Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.87 SYS_SETUP Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.88 TABLE_ADD Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.88 TABLE_DEL Built-In Procedure. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.89 TAN Built-In Function. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.89 TRUNC Built-In Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.90 VAR_INFO Built-In Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.90 VAR_UNINIT Built-In Function. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.91 VEC Built-In Function. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.91 VOL_SPACE Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.92 WIN_ATTR Built-In Procedure. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.92 WIN_CLEAR Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.93 WIN_COLOR Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.94 WIN_CREATE Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.95 WIN_DEL Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.96 WIN_DISPLAY Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.97 WIN_GET_CRSR Built-In Procedure. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.97 WIN_LINE Built-In Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.98 WIN_LOAD Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.99 WIN_POPUP Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.100 WIN_REMOVE Built-In Procedure. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.101 WIN_SAVE Built-In Procedure. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.102 WIN_SEL Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.103 WIN_SET_CRSR Built-In Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.104
lb-0-0-pdlTOC.fm
XI
S/W Version . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.3 Unparsed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.3 Predefined Variables groups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.3 PLC System Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.4 PORT System Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.4 PROGRAM STACK System Variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.4 ARM_DATA System Variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.5 CRNT_DATA System Variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.9 DSA_DATA System Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.9 MCP_DATA System Variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.10 FBP_TBL System Variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.10 WEAVE_TBL System Variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.10 CONV_TBL System Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.10 ON_POS_TBL System Variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.11 WITH MOVE System Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.11 WITH MOVE ALONG System Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.12 WITH OPEN FILE System Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.13 PATH NODE FIELD System Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.14 MISCELLANEOUS System Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.14 Alphabetical Listing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.19 $AIN: Analog input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.30 $AOUT: Analog output. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.30 $APPL_ID: Application Identifier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.31 $APPL_NAME: Application Identifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.31 $APPL_OPTIONS: Application Options. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.31 $ARM_ACC_OVR: Arm acceleration override. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.32 $ARM_DATA: Robot arm data. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.32 $ARM_DEC_OVR: Arm deceleration override . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.32 $ARM_DISB: Arm disable flags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.33 $ARM_LINKED: Enable/disable arm coupling. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.33 $ARM_OVR: Arm override. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.33 $ARM_SENSITIVITY: Arm collision sensitivity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.34
lb-0-0-pdlTOC.fm
XII
$ARM_SIMU: Arm simulate flag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.34 $ARM_SPACE: current Arm Space. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.34 $ARM_SPD_OVR: Arm speed override . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.35 $ARM_USED: Program use of arms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.35 $ARM_VEL: Arm velocity. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.36 $AUX_BASE: Auxiliary base for a positioner of an arm. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.36 $AUX_KEY: TP4i/WiTP AUX-A and AUX-B keys mapping . . . . . . . . . . . . . . . . . . . . . . . . . . 12.36 $AUX_MASK: Auxiliary arm mask . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.37 $AUX_OFST: Auxiliary axes offsets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.37 $AUX_SIK_DRVON_ENBL: Auxiliary axes provided of SIK . . . . . . . . . . . . . . . . . . . . . . . . . 12.37 $AUX_SIK_MASK: Auxiliary axes provided of SIK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.38 $AUX_TYPE: Positioner type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.38 $AX_CNVRSN: Axes conversion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.38 $AX_INF: Axes inference. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.39 $AX_LEN: Axes lengths. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.40 $AX_OFST: Axes offsets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.40 $A_ALONG_1D: Internal arm data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.40 $A_ALONG_2D: Internal arm data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.40 $A_AREAL_1D: Internal arm data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.41 $A_AREAL_2D: Internal arm data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.41 $B_ASTR_1D_NS: Board string data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.41 $BACKUP_SET: Default devices. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.42 $BASE: Base of arm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.42 $BIT: PLC BIT data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.42 $BOARD_DATA: Board data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.43 $BOOTLINES: Bootline read-only . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.43 $BREG: Boolean registers - saved . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.43 $BREG_NS: Boolean registers - not saved . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.44 $B_ALONG_1D: Internal arm data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.44 $B_ALONG_1D_NS: Internal arm data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.44 $B_NVRAM: NVRAM data of the board . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.45 $C4GOPEN_JNT_MASK: C4G Open Joint arm mask . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.45 $C4GOPEN_MODE: C4G Open modality . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.45 $C4G_RULES: C4G Save & Load rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.46 $CAL_DATA: Calibration data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.46 $CAL_SYS: System calibration position . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.46
lb-0-0-pdlTOC.fm
XIII
$CAL_USER: User calibration position . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.47 $CAUX_POS: Cartesian positioner position . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.47 $CIO_AIN: Configuration for AIN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.48 $CIO_AOUT: Configuration for AOUT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.48 $CIO_CAN: Configuration for Can Bus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.48 $CIO_CROSS: Configuration for I/O cross copying . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.49 $CIO_DIN: Configuration for DIN. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.49 $CIO_DOUT: Configuration for DOUT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.50 $CIO_FMI: Configuration for $FMI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.50 $CIO_FMO: Configuration for $FMO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.50 $CIO_GIN: Configuration for GIN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.51 $CIO_GOUT: Configuration for GOUT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.51 $CIO_IN_APP: Configuration for IN. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.51 $CIO_OUT_APP: Configuration for OUT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.52 $CIO_SDIN: Configuration for the system digital inputs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.52 $CIO_SDOUT: Configuration for the system digital outputs . . . . . . . . . . . . . . . . . . . . . . . . . 12.52 $CIO_SYS_CAN: Configuration of the system modules on Can Bus . . . . . . . . . . . . . . . . . . 12.53 $CNFG_CARE: Configuration care . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.53 $CNTRL_CNFG: Controller configuration mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.53 $CNTRL_INIT: Controller initialization mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.54 $CNTRL_OPTIONS: Controller Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.55 $CNTRL_TZ: Controller Time Zone. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.56 $COLL_EFFECT: Collision Effect on the arm status . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.56 $COLL_ENBL: Collision enabling flag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.56 $COLL_SOFT_PER: Collision compliance percentage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.57 $COLL_TYPE: Type of collision . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.57 $COND_MASK: PATH segment condition mask . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.58 $COND_MASK_BACK: PATH segment condition mask in backwards . . . . . . . . . . . . . . . . . 12.59 $CONV_ACC_LIM: Conveyor acceleration limit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.59 $CONV_BASE: Conveyor base frame. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.60 $CONV_CNFG: Conveyor tracking configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.60 $CONV_DIST: Conveyor shift in micron (mm/1000) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.60 $CONV_SHIFT: Conveyor shift in mm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.61 $CONV_SPD: Conveyor speed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.61 $CONV_SPD_LIM: Conveyor speed limit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.61 $CONV_TBL: Conveyor tracking table data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.62
lb-0-0-pdlTOC.fm
XIV
$CONV_TYPE: Element in the Conveyor Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.62 $CONV_WIN: Conveyor Windows. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.62 $CONV_ZERO: Conveyor Position Transducer Zero . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.63 $CRNT_DATA: Current Arm data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.63 $CT_JNT_MASK: Conveyor Joint mask . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.63 $CT_RADIUS: Conveyor radius in mm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.64 $CT_RES: Conveyor position in motor turns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.64 $CT_SCC: Conveyor SCC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.64 $CT_TX_RATE: Transmission rate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.65 $CUSTOM_ARM_ID: Identificator for the arm. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.65 $CUSTOM_CNTRL_ID: Identificator for the Controller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.65 $CYCLE: Program cycle count . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.66 $C_ALONG_1D: Internal current arm data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.66 $C_AREAL_1D: Internal current arm data. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.66 $C_AREAL_2D: Internal current arm data. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.67 $DEPEND_DIRS: Dependancy path . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.67 $DFT_ARM: Default arm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.67 $DFT_DV: Default devices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.68 $DFT_LUN: Default LUN number . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.68 $DFT_SPD: Default devices speed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.69 $DIN: Digital input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.69 $DNS_DOMAIN: DNS Domain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.69 $DNS_ORDER: DNS Order. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.70 $DNS_SERVERS: DNS Servers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.70 $DOUT: Digital output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.70 $DSA_DATA: DSA data. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.71 $DV_STS: the status of DV4_CNTRL call . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.71 $DV_TOUT: Timeout for asynchronous DV4_CNTRL calls . . . . . . . . . . . . . . . . . . . . . . . . . 12.71 $DYN_COLL_FILTER: Dynamic Collision Filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.72 $DYN_DELAY: Dynamic model delay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.72 $DYN_FILTER: Dynamic Filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.72 $DYN_FILTER2: Dynamic Filter for dynamic model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.73 $DYN_GAIN: Dynamic gain in inertia and viscous friction. . . . . . . . . . . . . . . . . . . . . . . . . . . 12.73 $DYN_MODEL: Dynamic Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.73 $DYN_WRIST: Dynamic Wrist. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.74 $DYN_WRISTQS: Dynamic Theta carico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.74
lb-0-0-pdlTOC.fm
XV
$D_ALONG_1D: Internal DSA data. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.74 $D_AREAL_1D: Internal DSA data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.74 $D_AXES: Internal DSA data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.75 $D_CTRL: Internal DSA data. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.75 $D_HDIN_SUSP: DSA_DATA field for HDIN suspend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.75 $D_MTR: Internal DSA data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.76 $EMAIL_INT: Email integer configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.76 $EMAIL_STR: Email string configuration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.77 $ERROR: Last PDL2 Program Error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.77 $EXE_HELP: Help on Execute command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.77 $FBP_TBL: Field Bus Table data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.78 $FB_ADDR: Field Bus ADDR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.78 $FB_CNFG: Controller fieldbuses configuration mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.78 $FB_INIT: Controller fieldbuses initialization mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.79 $FB_MA_INIT: Field bus master init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.80 $FB_MA_SLVS: Field bus master slaves init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.80 $FB_SLOT: field bus slot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.81 $FB_SL_INIT: Field bus slave init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.82 $FB_TYPE: Field bus type. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.84 $FDIN: Functional digital input. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.84 $FDOUT: Functional digital output. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.84 $FL_ADLMT: Array of delimiters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.84 $FL_BINARY: Text or character mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.85 $FL_CNFG: Configuration file name . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.85 $FL_COMP: Compensation file name . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.85 $FL_DLMT: Delimiter specification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.86 $FL_ECHO: Echo characters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.86 $FL_NUM_CHARS: Number of chars to be read . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.86 $FL_PASSALL: Pass all characters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.87 $FL_RANDOM: Random file access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.87 $FL_RDFLUSH: Flush on reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.87 $FL_STS: Status of last file operation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.88 $FL_SWAP: Low or high byte first . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.88 $FLOW_TBL: Flow modulation algorithm table data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.88 $FLY_DBUG: Cartesian Fly Debug . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.89 $FLY_DIST: Distance in fly motion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.89
lb-0-0-pdlTOC.fm
XVI
$FLY_PER: Percentage of fly motion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.89 $FLY_TRAJ: Type of control on cartesian fly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.90 $FLY_TYPE: Type of fly motion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.90 $FMI: Flexible Multiple Analog/Digital Inputs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.90 $FMO: Flexible Multiple Analog/Digital Outputs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.91 $FOLL_ERR: Following error. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.91 $FUI_DIRS: Installation path . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.91 $FW_ARM: Arm under flow modulation algorithm. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.92 $FW_AXIS: Axis under flow modulation algorithm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.92 $FW_CNVRSN: Conversion factor in case of Flow modulation algorithm. . . . . . . . . . . . . . . 12.92 $FW_ENBL Flow modulation algorithm enabling indicator. . . . . . . . . . . . . . . . . . . . . . . . . . 12.93 $FW_FLOW_LIM Flow modulation algorithm flow limit . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.93 $FW_SPD_LIM Flow modulation algorithm speed limits . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.93 $FW_START Delay in flow modulation algorithm application after start . . . . . . . . . . . . . . . . 12.94 $FW_VAR: flag defining the variable to be considered when flow modulate is used . . . . . . 12.94 $GEN_OVR: General override. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.94 $GIN: Group input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.95 $GOUT: Group output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.95 $GUN: Electrical welding gun . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.95 $HAND_TYPE: Type of hand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.96 $HDIN: High speed digital input. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.96 $HDIN_SUSP: HDIN Suspend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.96 $HLD_DEC_PER: Hold deceleration percentage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.97 $HOME: Arm home position . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.97 $IN: IN digital . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.97 $IPERIOD: Interpolator period . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.98 $IREG: Integer register - saved . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.98 $IREG_NS: Integer registers - not saved . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.98 $JERK: Jerk control values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.98 $JNT_LIMIT_AREA: Joint limits of the work area . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.99 $JNT_MASK: Joint arm mask . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.99 $JNT_MTURN: Check joint Multi-turn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.99 $JNT_OVR: joint override . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.100 $JOG_INCR_DIST: Increment Jog distance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.100 $JOG_INCR_ENBL: Jog incremental motion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.100 $JOG_INCR_ROT: Rotational jog increment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.101
lb-0-0-pdlTOC.fm
XVII
$JOG_SPD_OVR: Jog speed override . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.101 $JPAD_DIST: Distance between user and Jpad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.101 $JPAD_ORNT:TP4i/WiTP Angle setting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.102 $JPAD_TYPE: TP4i/WiTP Jpad modality rotational or translational . . . . . . . . . . . . . . . . . . 12.102 $JREG: Jointpos registers - saved . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.102 $JREG_NS: Jointpos register - not saved . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.103 $LATCH_CNFG: Latched alarm configuration setting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.103 $LIN_ACC_LIM: Linear acceleration limit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.103 $LIN_DEC_LIM: Linear deceleration limit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.104 $LIN_SPD: Linear speed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.104 $LIN_SPD_LIM: Linear speed limit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.104 $LIN_SPD_RT_OVR: Run-time Linear speed override . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.104 $LOG_TO_DSA: Logical to physical DSA relationship . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.105 $LOG_TO_PHY: Logical to physical relationship . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.105 $MAIN_JNTP: PATH node main jointpos destination . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.105 $MAIN_POS: PATH node main position destination . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.106 $MAIN_XTND: PATH node main xtndpos destination. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.106 $MAN_SCALE: Manual scale factor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.106 $MCP_BOARD: Motion Control Process board. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.107 $MCP_DATA: Motion Control Process data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.107 $MDM_INT: Modem Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.107 $MDM_STR: Modem Configuration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.108 $MOD_ACC_DEC: Modulation of acceleration and deceleration . . . . . . . . . . . . . . . . . . . . 12.108 $MOD_MASK: Joint mod mask . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.108 $MOVE_STATE: Move state . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.108 $MOVE_TYPE: Type of motion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.109 $MTR_ACC_TIME: Motor acceleration time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.109 $MTR_CURR: Motor current . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.110 $MTR_DEC_TIME: Motor deceleration time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.110 $MTR_SPD_LIM: Motor speed limit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.110 $M_ALONG_1D: Internal motion control data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.110 $NET_B: Ethernet Boot Setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.111 $NET_B_DIR: Ethernet Boot Setup Directory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.111 $NET_C_CNFG: Ethernet Client Setting Modes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.111 $NET_C_DIR: Ethernet Client Setup Default Directory . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.112 $NET_C_HOST: Ethernet Client Setup Remote Host . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.112
lb-0-0-pdlTOC.fm
XVIII
$NET_C_PASS: Ethernet Client Setup Password. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.112 $NET_C_USER: Ethernet Client Setup Login Name. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.113 $NET_HOSTNAME: Ethernet network hostnames . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.113 $NET_I_INT: Ethernet Network Information (integers) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.113 $NET_I_STR: Ethernet Network Information (strings). . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.114 $NET_L: Ethernet Local Setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.114 $NET_MOUNT: Ethernet network mount . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.115 $NET_Q_STR: Ethernet Remote Interface Information. . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.115 $NET_R_STR: Ethernet Remote Interface Setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.116 $NET_S_INT: Ethernet Network Server Setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.116 $NET_T_HOST: Ethernet Network Time Protocol Host . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.117 $NET_T_INT: Ethernet Network Timer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.117 $NOLOG_ERROR: Exclude messages from logging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.117 $NUM_ALOG_FILES: Number of action log files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.118 $NUM_ARMS: Number of arms. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.118 $NUM_AUX_AXES: Number of auxiliary axes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.118 $NUM_DEVICES: Number of devices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.118 $NUM_DSAS: Number of DSAs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.119 $NUM_JNT_AXES: Number of joint axes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.119 $NUM_LUNS: Number of LUNs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.119 $NUM_MB: Number of motion buffers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.120 $NUM_MB_AHEAD: Number of motion buffers ahead . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.120 $NUM_MCPS: Number of Motion Control Process . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.120 $NUM_PROGS: Number of active programs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.121 $NUM_SCRNS: Number of screens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.121 $NUM_TIMERS: Number of timers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.121 $NUM_VP2_SCRNS: Number of Visual PDL2 screens . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.122 $NUM_WEAVES: Number of weaves (WEAVE_TBL) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.122 $ODO_METER: average TCP space . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.122 $ON_POS_TBL: ON POS table data. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.123 $OP_JNT: On Pos jointpos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.123 $OP_JNT_MASK: On Pos Joint Mask. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.123 $OP_POS: On Pos position. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.124 $OP_REACHED: On Posposition reached flag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.124 $OP_TOL_DIST: On Pos-Jnt Tolerance distance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.124 $OP_TOL_ORNT: On Pos-Jnt Tolerance Orientation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.125
lb-0-0-pdlTOC.fm
XIX
$OP_TOOL: The On Pos Tool. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.125 $OP_TOOL_DSBL: On Pos tool disable flag. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.125 $OP_TOOL_RMT: On Pos Remote tool flag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.126 $OP_UFRAME: The On Pos Uframe. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.126 $ORNT_TYPE: Type of orientation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.126 $OT_COARSE: On Trajectory indicator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.127 $OT_JNT: On Trajectory joint position. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.127 $OT_POS: On Trajectory position . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.127 $OT_TOL_DIST: On Trajectory Tolerance distance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.128 $OT_TOL_ORNT: On Trajectory Orientation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.128 $OT_TOOL: On Trajectory TOOL position . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.128 $OT_TOOL_RMT: On Trajectory remote tool flag. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.129 $OT_UFRAME: On Trajectory User frame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.129 $OT_UNINIT: On Trajectory position uninit flag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.129 $OUT: OUT digital . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.129 $PAR: Nodal motion variable. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.130 $PGOV_ACCURACY: required accuracy in cartesian motions . . . . . . . . . . . . . . . . . . . . . . 12.131 $PGOV_MAX_SPD_REDUCTION: Maximum speed scale factor . . . . . . . . . . . . . . . . . . . 12.132 $PGOV_ORNT_PER: percentage of orientation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.132 $POS_LIMIT_AREA: Cartesian limits of work area . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.132 $PPP_INT: PPP Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.133 $PREG: Position registers - saved . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.133 $PREG_NS: Position registers - not saved . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.133 $PROG_ACC_OVR: Program acceleration override. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.134 $PROG_ARG: Program's activation argument . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.134 $PROG_ARM: Arm of program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.134 $PROG_CNFG: Program configuration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.135 $PROG_CONDS: Defined conditions of a program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.135 $PROG_DEC_OVR: Program deceleration override. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.136 $PROG_NAME: Executing program name . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.136 $PROG_SPD_OVR: Program speed override. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.136 $PROG_UADDR: Address of program user-defined memory access variables . . . . . . . . . 12.137 $PROG_UBIT: Program user-defined bit memory. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.137 $PROG_UBYTE: Program user-defined byte memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.138 $PROG_ULEN: Length of program memory access user-defined variables . . . . . . . . . . . . 12.138 $PROG_ULONG: Program user-defined long word memory . . . . . . . . . . . . . . . . . . . . . . . 12.138
lb-0-0-pdlTOC.fm
XX
$PROG_UWORD: Program user-defined word memory. . . . . . . . . . . . . . . . . . . . . . . . . . . 12.139 $PWR_RCVR: Power failure recovery mode. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.139 $RAD_IDL_QUO: Radiant ideal quote. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.139 $RAD_TARG: Radiant target. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.140 $RAD_VEL: Radiant velocity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.140 $RBT_CNFG: Robot board configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.140 $RB_FAMILY: Family of the robot arm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.141 $RB_MODEL: Model of the robot arm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.141 $RB_NAME: Name of the robot arm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.142 $RB_STATE: State of the robot arm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.142 $RB_VARIANT: Variant of the robot arm. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.142 $RCVR_DIST: Distance from the recovery position . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.143 $RCVR_LOCK: Change arm state after recovery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.143 $RCVR_TYPE: Type of motion recovery. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.143 $READ_TOUT: Timeout on a READ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.144 $REC_SETUP: RECord key setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.144 $REF_ARMS: Reference arms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.145 $REMOTE: Functionality of the key in remote. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.145 $REM_I_STR: Remote connections Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.145 $REM_TUNE: Internal remote connection tuning parameters. . . . . . . . . . . . . . . . . . . . . . . 12.146 $RESTART: Restart Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.146 $RESTART_MODE: Restart mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.146 $RESTORE_SET: Default devices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.147 $ROT_ACC_LIM: Rotational acceleration limit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.147 $ROT_DEC_LIM: Rotational deceleration limit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.147 $ROT_SPD: Rotational speed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.148 $ROT_SPD_LIM: Rotational speed limit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.148 $RPLC_DATA: Data of PLC resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.148 $RPLC_STS: Status of PLC resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.149 $RREG: Real registers - saved . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.149 $RREG_NS: Real registers - not saved. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.150 $SAFE_ENBL: Safe speed enabled . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.150 $SDIN: System digital input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.150 $SDOUT: System digital output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.151 $SEG_DATA: PATH segment data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.151 $SEG_FLY: PATH segment fly or not . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.151
lb-0-0-pdlTOC.fm
XXI
$SEG_FLY_DIST: Parameter in segment fly motion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.152 $SEG_FLY_PER: PATH segment fly percentage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.152 $SEG_FLY_TRAJ: Type of fly control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.152 $SEG_FLY_TYPE: PATH segment fly type. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.153 $SEG_OVR: PATH segment override . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.153 $SEG_REF_IDX: PATH segment reference index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.153 $SEG_STRESS_PER: Percentage of stress required in fly . . . . . . . . . . . . . . . . . . . . . . . . 12.154 $SEG_TERM_TYPE: PATH segment termination type. . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.154 $SEG_TOL: PATH segment tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.155 $SEG_TOOL_IDX: PATH segment tool index. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.155 $SEG_WAIT: PATH segment WAIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.156 $SENSOR_CNVRSN: Sensor Conversion Factors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.157 $SENSOR_ENBL: Sensor Enable. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.157 $SENSOR_GAIN: Sensor Gains . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.157 $SENSOR_OFST_LIM: Sensor Offset Limits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.158 $SENSOR_TIME: Sensor Time. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.158 $SENSOR_TYPE: Sensor Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.158 $SERIAL_NUM: Serial Number . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.159 $SFRAME: Sensor frame of an arm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.159 $SING_CARE: Singularity care . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.160 $SM4C_STRESS_PER: Maximum Stress allowed in Cartesian SmartMove4 . . . . . . . . . . 12.160 $SM4_SAT_SCALE: SmartMove4 saturation thresholds . . . . . . . . . . . . . . . . . . . . . . . . . . 12.160 $SPD_OPT: Type of speed control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.161 $SREG: String registers - saved . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.161 $SREG_NS: String registers - not saved. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.161 $STARTUP: Startup program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.162 $STARTUP_USER: Startup user. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.162 $STRESS_PER: Stress percentage in cartesian fly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.162 $STRK_END_N: User negative stroke end . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.163 $STRK_END_P: User positive stroke end. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.163 $STRK_END_SYS_N: System stroke ends . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.163 $STRK_END_SYS_P: System stroke ends. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.163 $SWIM_ADDR: SWIM address . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.164 $SWIM_CNFG: SWIM configuration mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.164 $SWIM_INIT: SWIM Board initialization parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.164 $SYNC_ARM: Synchronized arm of program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.165
lb-0-0-pdlTOC.fm
XXII
$SYS_CALL_OUT: Output lun for SYS_CALL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.165 $SYS_CALL_STS: Status of last SYS_CALL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.166 $SYS_CALL_TOUT: Timeout for SYS_CALL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.166 $SYS_ERROR: Last system error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.166 $SYS_ID: Robot System identifier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.167 $SYS_INP_MAP: Configuration for system bits in Input on fieldbuses . . . . . . . . . . . . . . . . 12.167 $SYS_OUT_MAP: Configuration for system bits in Output on fieldbuses . . . . . . . . . . . . . . 12.167 $SYS_PARAMS: Robot system identifier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.168 $SYS_STATE: State of the system . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.168 $TERM_TYPE: Type of motion termination. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.169 $THRD_CEXP: Thread Condition Expression. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.170 $THRD_ERROR: Error of each thread of execution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.170 $THRD_PARAM: Thread Parameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.171 $TIMER: Clock timer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.171 $TOL_ABT: Tolerance anti-bouce time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.171 $TOL_COARSE: Tolerance coarse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.172 $TOL_FINE: Tolerance fine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.172 $TOL_JNT_COARSE: Tolerance for joints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.172 $TOL_JNT_FINE: Tolerance for joints. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.173 $TOL_TOUT: Tolerance timeout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.173 $TOOL: Tool of arm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.173 $TOOL_CNTR: Tool center of mass of the tool. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.174 $TOOL_FRICTION: Tool Friction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.174 $TOOL_INERTIA: Tool Inertia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.174 $TOOL_MASS: Mass of the tool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.175 $TOOL_RMT: Fixed Tool. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.175 $TOOL_XTREME: Extreme Tool of the Arm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.175 $TP_ARM: Teach Pendant current arm. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.175 $TP_GEN_INCR: Incremental value for general override . . . . . . . . . . . . . . . . . . . . . . . . . . 12.176 $TP_MJOG: Type of TP jog motion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.176 $TP_ORNT: Orientation for jog motion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.176 $TP_SYNC_ARM: Teach Pendants synchronized arms . . . . . . . . . . . . . . . . . . . . . . . . . . 12.177 $TUNE: Internal tuning parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.177 $TURN_CARE: Turn care . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.178 $TX_RATE: Transmission rate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.179 $UFRAME: User frame of an arm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.179
lb-0-0-pdlTOC.fm
XXIII
$USER_ADDR: Address of user-defined variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.179 $USER_BIT: User-defined bit memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.180 $USER_BYTE: User-defined byte memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.180 $USER_LEN: Length of User-defined variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.180 $USER_LONG: User-defined long word memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.181 $USER_WORD: User-defined word memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.181 $VERSION: Software version . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.181 $VP2_SCRN_ID: Executing program VP2 Screen Identifier . . . . . . . . . . . . . . . . . . . . . . . . 12.182 $VP2_TOUT: Timeout value for asynchronous VP2 requests. . . . . . . . . . . . . . . . . . . . . . . 12.182 $VP2_TUNE: Visual PDL2 tuning parameters. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.182 $WEAVE_MODALITY: Weave modality . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.183 $WEAVE_MODALITY_NOMOT: Weave modality (only for no arm motion) . . . . . . . . . . . . 12.183 $WEAVE_NUM: Weave table number. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.183 $WEAVE_NUM_NOMOT: Weave table number (only for no arm motion) . . . . . . . . . . . . . 12.184 $WEAVE_PHASE: Index of the Weaving Phase. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.184 $WEAVE_TBL: Weave table data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.184 $WEAVE_TYPE: Weave type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.185 $WEAVE_TYPE_NOMOT: Weave type (only for no arm motion) . . . . . . . . . . . . . . . . . . . . 12.185 $WFR_IOTOUT: Timeout on a WAIT FOR when IO simulated . . . . . . . . . . . . . . . . . . . . . . 12.185 $WFR_TOUT: Timeout on a WAIT FOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.186 $WORD: PLC WORD data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.186 $WRITE_TOUT: Timeout on a WRITE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.186 $WV_AMP_PER: Weave amplitude percentage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.187 $WV_CNTR_DWL: Weave center dwell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.187 $WV_END_DWL Weave end dwell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.187 $WV_LEFT_AMP: Weave left amplitude . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.188 $WV_LEFT_DWL: Weave left dwell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.188 $WV_LENGTH_WAVE: Wave length . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.188 $WV_ONE_CYCLE: Weave one cycle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.189 $WV_PLANE: Weave plane angle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.189 $WV_RIGHT_AMP: Weave right amplitude . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.189 $WV_RIGHT_DWL: Weave right dwell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.190 $WV_SMOOTH: Weave smooth enabled . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.190 $WV_SPD_PROFILE: Weave speed profile enabled . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.190 $WV_TRV_SPD: Weave transverse speed. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.191 $WV_TRV_SPD_PHASE: Weave transverse speed phase . . . . . . . . . . . . . . . . . . . . . . . . 12.191
lb-0-0-pdlTOC.fm
XXIV
$XREG: Xtndpos registers - saved . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.191 $XREG_NS: Xtndpos registers - not saved . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.192
lb-0-0-pdlTOC.fm
XXV
lb-0-0-pdlTOC.fm
XXVI
Preface
PREFACE
Symbols used in the manual Reference documents Modification History
This symbol indicates operating procedures, technical information and precautions that if ignored and/or are not performed correctly could cause damage to the equipment.
This symbol indicates operating procedures, technical information and precautions that it are important to highlight.
pr-0-0-0_01.fm
00/1207
XXVII
Preface
Reference documents
This document refers to the C4G Control Unit. The complete set of manuals for the C4G consists of: Comau C4G Control Unit Technical Specifications Transport and installation Guide to integration, safeties, I/O and communications Use of Control Unit.
These manuals are to be integrated with the following documents: Comau Robot Technical Specifications Transport and installation Maintenance PDL2 Programming Language Manual VP2 - Visual PDL2 Motion programming EZ PDL2 - Programming environment According to the required type of application. ISaGRAF Workbench
Programming
pr-0-0-0_01.fm
XXVIII
00/1207
Preface
Modification History
The VP2 chapter has been removed from the current Manual, and a new VP2 - Visual PDL2 Manual has been created. The following Built-ins have been added: POS_COMP_IDL POS_IDL_COMP. In System Software version 3.12, the following paragraphs have been added: User table creation from DATA environment Customizing the PDL2 Statements insertion, in IDE environment.
pr-0-0-0_01.fm
00/1207
XXIX
Preface
pr-0-0-0_01.fm
XXX
00/1207
1.
1.1 Responsibilities
The system integrator is responsible for ensuring that the Robot and Control System are installed and handled in accordance with the Safety Standards in force in the country where the installation takes place. The application and use of the protection and safety devices necessary, the issuing of declarations of conformity and any CE markings of the system are the responsibility of the Integrator. COMAU Robotics & Service shall in no way be held liable for any accidents caused by incorrect or improper use of the Robot and Control System, by tampering with circuits, components or software, or the use of spare parts that are not originals or that have not been defined as equivalent by COMAU Robotics & Service The application of these Safety Precautions is the responsibility of the persons assigned to direct / supervise the activities indicated in the Applicability section,They are to make sure that the Authorised Personnel is aware of and scrupulously follow the precautions contained in this document as well as the Safety Standards in addition to the Safety Standards in force in the country in which it is installed. The non-observance of the Safety Standards could cause injuries to the operators and damage the Robot and Control System.
The installation shall be made by qualified installation Personnel and should conform to all national and local codes.
ge-0-0-0_01.FM
07/1007
1-1
1.2.2
Definitions
Robot and Control System The Robot and Control System consists of all the functions that cover: Control Unit, robot, hand held programming unit and any options. Protected Area The protected area is the zone confined by the safety barriers and to be used for the installation and operation of the robot Authorised Personnel Authorised personnel defines the group of persons who have been trained and assigned to carry out the activities listed in the Applicability section. Assigned Personnel The persons assigned to direct or supervise the activities of the workers referred to in the paragraph above. Installation and Putting into Service The installation is intended as the mechanical, electrical and software integration of the Robot and Control System in any environment that requires controlled movement of robot axes, in compliance with the safety requirements of the country where the system is installed. Programming Mode Operating mode under the control of the operator, that excludes automatic operation and allows the following activities: manual handling of robot axes and programming of work cycles at low speed, programmed cycle testing at low speed and, when allowed, at the working speed. Auto / Remote Automatic Mode Operating mode in which the robot autonomously executes the programmed cycle at the work speed, with the operators outside the protected area, with the safety barriers closed and the safety circuit activated, with local (located outside the protected area) or remote start/stop. Maintenance and Repairs Maintenance and repairs are activities that involve periodical checking and / or replacement (mechanical, electrical, software) of Robot and Control System parts or components, and trouble shooting, that terminates when the Robot and Control System has been reset to its original project functional condition.
ge-0-0-0_01.FM
1-2
07/1007
General Safety Precautions Putting Out of Service and Dismantling Putting out of service defines the activities involved in the mechanical and electrical removal of the Robot and Control System from a production unit or from an environment in which it was under study. Dismantling consists of the demolition and dismantling of the components that make up the Robot and Control System. Integrator The integrator is the professional expert responsible for the installation and putting into service of the Robot and Control System. Incorrect Use Incorrect use is when the system is used in a manner other than that specified in the Technical Documentation. Range of Action The robot range of action is the enveloping volume of the area occupied by the robot and its fixtures during movement in space.
1.2.3
Applicability
These Specifications are to be applied when executing the following activities: Installation and Putting into Service; Programming Mode; Auto / Remote Automatic Mode; Robot axes release; Stop distances (threshold values) Maintenance and Repairs; Putting Out of Service and Dismantling
ge-0-0-0_01.FM
07/1007
1-3
1.2.4
Operating Modes
Installation and Putting into Service Putting into service is only possible when the Robot and Control System has been correctly and completely installed. The system installation and putting into service is exclusively the task of the authorised personnel. The system installation and putting into service is only permitted inside a protected area of an adequate size to house the robot and the fixtures it is outfitted with, without passing beyond the safety barriers. It is also necessary to check that under normal robot movement conditions there is no collision with parts inside the protected area (structural columns, power supply lines, etc.) or with the barriers. If necessary, limit the robot working areas with mechanical hard stop (see optional assemblies). Any fixed robot control protections are to be located outside the protected area and in a point where there is a full view of the robot movements. The robot installation area is to be as free as possible from materials that could impede or limit visibility. During installation the robot and the Control Unit are to be handled as described in the product Technical Documentation; if lifting is necessary, check that the eyebolts are fixed securely and use only adequate slings and equipment. Secure the robot to the support, with all the bolts and pins foreseen, tightened to the torque indicated in the product Technical Documentation. If present, remove the fastening brackets from the axes and check that the fixing of the robot fixture is secured correctly. Check that the robot guards are correctly secured and that there are no moving or loose parts. Check that the Control Unit components are intact. If applicable, connect the robot pneumatic system to the air distribution line paying attention to set the system to the specified pressure value: a wrong setting of the pressure system influences correct robot movement. Install filters on the pneumatic system to collect any condensation. Install the Control Unit outside the protected area: the Control Unit is not to be used to form part of the fencing. Check that the voltage value of the mains is consistent with that indicated on the plate of the Control Unit. Before electrically connecting the Control Unit, check that the circuit breaker on the mains is locked in open position. Connection between the Control Unit and the three-phase supply mains at the works, is to be with a four-pole (3 phases + earth) armoured cable dimensioned appropriately for the power installed on the Control Unit. See the product Technical Documentation. The power supply cable is to enter the Control Unit through the specific fairlead and be properly clamped. Connect the earth conductor (PE) then connect the power conductors to the main switch.
ge-0-0-0_01.FM
1-4
07/1007
General Safety Precautions Connect the power supply cable, first connecting the earth conductor to the circuit breaker on the mains line, after checking with a tester that the circuit breaker terminals are not powered. Connect the cable armouring to the earth. Connect the signals and power cables between the Control Unit and the robot. Connect the robot to earth or to the Control Unit or to a nearby earth socket. Check that the Control Unit door (or doors) is/are locked with the key. A wrong connection of the connectors could cause permanent damage to the Control Unit components. The C4G Control Unit manages internally the main safety interlocks (gates, enabling pushbuttons, etc.). Connect the C4G Control Unit safety interlocks to the line safety circuits, taking care to connect them as required by the Safety standards. The safety of the interlock signals coming from the transfer line (emrgency stop, gates safey devices etc) i.e. the realisation of correct and safe circuits, is the responsibility of the Robot and Control System integrator.
In the cell/line emergency stop circuit the contacts must be included of the control unit emergency stop buttons, which are on X30. The push buttons are not interlocked in the emergency stop circuit of the Control Unit. The safety of the system cannot be guaranteed if these interlocks are wrongly executed, incomplete or missing. The safety circuit executes a controlled stop (IEC 60204-1 , class 1 stop) for the safety inputs Auto Stop/ General Stop and Emergency Stop. The controlled stop is only active in Automatic states; in Programming the power is cut out (power contactors open) immediately. The procedure for the selection of the controlled stop time (that can be set on ESK board) is contained in the Installation manual . When preparing protection barriers, especially light barriers and access doors, bear in mind that the robot stop times and distances are according to the stop category (0 or 1) and the weight of the robot..
Check that the controlled stop time is consistent with the type of Robot connected to the Control Unit. The stop time is selected using selector switches SW1 and SW2 on the ESK board. Check that the environment and working conditions are within the range specified in the specific product Technical Documentation. The calibration operations are to be carried out with great care, as indicated in the Technical Documentation of the specific product, and are to be concluded checking the correct position of the machine. To load or update the system software (for example after replacing boards), use only the original software handed over by COMAU Robotics & Service. Scrupulously follow the system software uploading procedure described in the Technical Documentation supplied with the specific product. After uploading, always make some tests moving the robot at slow speed and remaining outside the protected area. Check that the barriers of the protected area are correctly positioned.
ge-0-0-0_01.FM
07/1007
1-5
General Safety Precautions Programming Mode The robot is only to be programmed by the authorised personnel. Before starting to program, the operator must check the Robot and Control System to make sure that there are no potentially hazardous irregular conditions, and that there is nobody inside the protected area. When possible the programming should be controlled from outside the protected area. Before operating inside the Protected Area, the operator must make sure from outside that all the necessary protections and safety devices are present and in working order, and especially that the hand-held programming unit functions correctly (slow speed, emergency stop, enabling device, etc.). During the programming session, only the operator with the hand-held terminal is allowed inside the Protected Area. If the presence of a second operator in the working area is necessary when checking the program, this person must have an enabling device interlocked with the safety devices. Activation of the motors (Drive On) is always to be controlled from a position outside the range of the robot, after checking that there is nobody in the area involved. The Drive On operation is concluded when the relevant machine status indication is shown. When programming, the operator is to keep at a distance from the robot to be able to avoid any irregular machine movements, and in any case in a position to avoid the risk of being trapped between the robot and structural parts (columns, barriers, etc.), or between movable parts of the actual robot. When programming, the operator is to avoid remaining in a position where parts of the robot, pulled by gravity, could execute downward movements, or move upwards or sideways (when installed on a sloped plane). Testing a programmed cycle at working speed with the operator inside the protected area, in some situations where a close visual check is necessary, is only to be carried out after a complete test cycle at slow speed has been executed. The test is to be controlled from a safe distance. Special attention is to be paid when programming using the hand-held terminal: in this situation, although all the hardware and software safety devices are active, the robot movement depends on the operator. During the first running of a new program, the robot may move along a path that is not the one expected. The modification of program steps (such as moving by a step from one point to another of the flow, wrong recording of a step, modification of the robot position out of the path that links two steps of the program), could give rise to movements not envisaged by the operator when testing the program. In both cases operate cautiously, always remaining out of the robots range of action and test the cycle at slow speed.
ge-0-0-0_01.FM
1-6
07/1007
General Safety Precautions Auto / Remote Automatic Mode The activation of the automatic operation (AUTO and REMOTE states) is only to be executed with the Robot and Control System integrated inside an area with safety barriers properly interlocked, as specified by Safety Standards currently in force in the Country where the installation takes place. Before starting the automatic mode the operator is to check the Robot and Control System and the protected area to make sure there are no potentially hazardous irregular conditions. The operator can only activate automatic operation after having checked: that the Robot and Control System is not in maintenance or being repaired; the safety barriers are correctly positioned; that there is nobody inside the protected area; that the Control Unit doors are closed and locked; that the safety devices (emergency stop, safety barrier devices) are functioning; Special attention is to be paid when selecting the automatic-remote mode, where the line PLC can perform automatic operations to switch on motors and start the program.
Robot axes release In the absence of motive power, the robot axes movement is possible by means of optional release devices and suitable lifting devices. Such devices only enable the brake deactivation of each axis. In this case, all the system safety devices (including the emergency stop and the enable button) are cut out; also the robot axes can move upwards or downwards because of the force generated by the balancing system, or the force of gravity.
Before using the manual release devices, it is strongly recommended to sling the robot, or hook to an overhead travelling crane. Stop distances (threshold values) As for the stop distance threshold values for each robot type, please turn to the COMAU Robotics & Service Dept. Example: Considering the robot in automatic mode, in conditions of maximum extension, maximum load and maximum speed, when the stop pushbutton is pressed (red mushroom head pushbutton on WiTP) an NJ 370-2.7 Robot will stop completely in approx. 85 of motion, equivalent to approx. 3000 mm displacement measured on the TCP flange. Under these conditions indicated, the stoppage time of the NJ 370-2.7 Robot is 1.5 seconds. Considering the robot in programming mode (T1), when the stop pushbutton is pressed (red mushroom head pushbutton on WiTP) an NJ 370-2.7 Robot will stop completely in approx. 0.5 seconds.
Maintenance and Repairs When assembled in COMAU Robotics & Service, the robot is supplied with lubricant that does not contain substances harmful to health, however, in some cases, repeated and prolonged exposure to the product could cause skin irritation, or if swallowed, indisposition. First Aid. Contact with the eyes or the skin: wash the contaminated zones with abundant water; if the irritation persists, consult a doctor.
ge-0-0-0_01.FM
07/1007
1-7
General Safety Precautions If swallowed, do not provoke vomiting or take anything by mouth, see a doctor as soon as possible. Maintenance, trouble-shooting and repairs are only to be carried out by authorised personnel. When carrying out maintenance and repairs, the specific warning sign is to be placed on the control panel of the Control Unit, stating that maintenance is in progress and it is only to be removed after the operation has been completely finished - even if it should be temporarily suspended. Maintenance operations and replacement of components or the Control Unit are to be carried out with the main switch in open position and locked with a padlock. Even if the Control Unit is not powered (main switch open), there may be interconnected voltages coming from connections to peripheral units or external power sources (e.g. 24 Vdc inputs/outputs). Cut out external sources when operating on parts of the system that are involved. Removal of panels, protection shields, grids, etc. is only allowed with the main switch open and padlocked. Faulty components are to be replaced with others having the same code, or equivalent components defined by COMAU Robotics & Service.
After replacement of the ESK module, check on the new module that the setting of the stop time on selector switches SW1 and SW2 is consistent with the type of Robot connected to the Control Unit. Trouble-shooting and maintenance activities are to be executed, when possible, outside the protected area. Trouble-shooting executed on the control is to be carried out, when possible without power supply. Should it be necessary, during trouble-shooting, to intervene with the Control Unit powered, all the precautions specified by Safety Standards are to be observed when operating with hazardous voltages present. Trouble-shooting on the robot is to be carried out with the power supply cut out (Drive off). At the end of the maintenance and trouble-shooting operations, all deactivated safety devices are to be reset (panels, protection shields, interlocks, etc.). Maintenance, repairs and trouble-shooting operations are to be concluded checking the correct operation of the Robot and Control System and all the safety devices, executed from outside the protected area. When loading the software (for example after replacing electronic boards) the original software handed over by COMAU Robotics & Service is to be used. Scrupulously follow the system software loading procedure described in the specific product Technical Documentation; after loading always run a test cycle to make sure, remaining outside the protected area Disassembly of robot components (motors, balancing cylinders, etc.) may cause uncontrolled movements of the axes in any direction: before starting a disassembly procedure, consult the warning plates applied to the robot and the Technical Documentation supplied. It is strictly forbidden to remove the protective covering of the robot springs.
ge-0-0-0_01.FM
1-8
07/1007
General Safety Precautions Putting Out of Service and Dismantling Putting out of service and dismantling the Robot and Control System is only to be carried out by Authorised Personnel. Bring the robot to transport position and fit the axis clamping brackets (where applicable) consulting the plate applied on the robot and the robot Technical Documentation. Before stating to put out of service, the mains voltage to the Control Unit must be cut out (switch off the circuit breaker on the mains distribution line and lock it in open position). After using the specific instrument to check there is no voltage on the terminals, disconnect the power supply cable from the circuit breaker on the distribution line, first disconnecting the power conductors, then the earth. Disconnect the power supply cable from the Control Unit and remove it. First disconnect the connection cables between the robot and the Control Unit, then the earth cable. If present, disconnect the robot pneumatic system from the air distribution line. Check that the robot is properly balanced and if necessary sling it correctly, then remove the robot securing bolts from the support. Remove the robot and the Control Unit from the work area, applying the rules indicated in the products Technical Documentation; if lifting is necessary, check the correct fastening of the eye-bolts and use appropriate slings and equipment only. Before starting dismantling operations (disassembly, demolition and disposal) of the Robot and Control System components, contact COMAU Robotics & Service, or one of its branches, who will indicate, according to the type of robot and Control Unit, the operating methods in accordance with safety principles and safeguarding the environment. The waste disposal operations are to be carried out complying with the legislation of the country where the Robot and Control System is installed.
ge-0-0-0_01.FM
07/1007
1-9
ge-0-0-0_01.FM
1-10
07/1007
Introduction to PDL2
2.
INTRODUCTION TO PDL2
The current chapter contains information about the following topics: Syntax notation Language components Statements Program structure Units of measure
PDL2 is a Pascal-like language with special features for programming robotic applications. Programming means developing a list of instructions that the controller executes to perform a particular application. Programs can include instructions to do the following: move robotic arms; send and receive information; control the order in which instructions are executed; check for errors or other special conditions.
PDL2 is used to program the Comau C4G controller. PDL2 offers more structure than the original PDL, making it possible to program more complex applications with greater control and fewer errors. A complete PDL2 programming environment is included with the language. The C4G controller can execute multiple programs simultaneously to handle all aspects of an application. A single controller can also direct multiple robotic arms and related equipment. PDL2 programs are divided holdable/non-holdable attribute. into two categories, depending on the
holdable programs (indicated by the HOLD attribute) are controlled by START and HOLD. Generally, holdable programs include motion, but that is not a requirement; non-holdable programs (indicated by the NOHOLD attribute) are not controlled by START and HOLD. Generally, they are used as process control programs. Non-holdable programs cannot contain motion statements, however, they can use positional variables for other purposes. The motion statements which are not allowed in non-holdable programs are RESUME, CANCEL, LOCK, UNLOCK, and MOVE.
pr-0-0-pdl_01.fm
00/0607
2-1
Introduction to PDL2
item1 item3 item1 item2 item3 items that occur one or more times are followed by three dots. For example, the description:
item1 item2... has the following possible results: item1 item2 item1 item2 item2 item1 item2 item2 item2 etc. vertical bars separate choices. If at least one item must be chosen, the whole set of choices is enclosed in double vertical bars. For example, the description:
|| item1 | item2 || has the following possible results: item1 item2 Combinations of these notations provide powerful, but sometimes tricky, syntax descriptions. They are extremely helpful in understanding what can be done in the PDL2 language. A few examples follow Description item1 <item2 | item3> item1 item1 item2 item1 item3 item1 <item2 | item3>... item1 item1 item2 item1 item3 item1 item3 item3 item2 etc. || itm1 | itm2 | itm3 ||... itm1 itm2 itm3 itm2 itm2 itm1 itm3 itm1 itm3 itm2 etc. Note that when the repeating dots come right after the optional brackets, the items inside the brackets can be repeated zero or more times. However, when they come after double vertical bars, the items inside the bars can be repeated one or more times. Possible Results
pr-0-0-pdl_01.fm
2-2
00/0607
Introduction to PDL2
2.2.1
Character set
PDL2 recognizes the characters shown in Tab. 2.1.
2.2.2
ABOUT AFTER AND ARRAY AWAY BREAK CALLS CLASS CONST CYCLES
00/0607
2-3
Introduction to PDL2
pr-0-0-pdl_01.fm
2-4
00/0607
Introduction to PDL2
2.2.3
Predefined Identifiers
Predefined identifiers make up the remainder of words that are part of the PDL2 language. They name constants, variables, fields, and routines that PDL2 already understands. Predefined identifiers differ from reserved words in that the programmer can redefine the meaning of a predefined identifier that is not used in the program. Predefined constants are identifiers that have preassigned values associated with them. A predefined constant identifier can be used in a program instead of the value. Tab. 2.3 - Predefined Constants lists the predefined constants.
AC_CALL_CRT COARSE COLL_MANUAL COM_BD300 COM_BD9600 COM_BD115200 COM_CHARNO COM_PASAL COM_STOP1_5 CONV_READ CONV_1ON EC_BYPASS EC_FILE EC_PROG EC_TRAP FALSE FLY_FROM JNT_COARSE JPAD_ROT LANG_IT LANG_ZH LUN_TP OFF PDV_TP SCRN_ALARM SCRN_IDE SCRN_PROG SCRN_CLR_CHR SCRN_SYS SPD_AUX2 SPD_CONST SPD_LIN SPD_SECOND STR_COLL
AC_CALL_TP COLL_LOW COLL_USER1..10 COM_BD1200 COM_BD19200 COM_BIT7 COM_PAR_EVEN COM_RDAHD COM_STOP2 CONV_2READ CONV_1ON_2READ EC_COND EC_MATH EC_RLL EC_USR1 FINE FLY_NORM JNT_FINE LANG_EN LANG_PO LINEAR MAXINT ON RPY_WORLD SCRN_APPL SCRN_IO SCRN_SERVICE SCRN_CLR_DEL SCRN_USER SPD_AUX3 SPD_ELV SPD_PGOV SPD_SM4C STR_COMP
BASE COLL_MEDIUM COM_ASCII COM_BD2400 COM_BD38400 COM_BIT8 COM_PAR_NO COM_RDAHD_NO COM_XSYNC CONV_1READ CONV_2ON EC_DISP EC_PIO EC_SYS EC_USR2 FLY_AUTO FLY_PASS JOINT LANG_FR LANG_SP LUN_CRT MININT ON_MV RS_TRAJ SCRN_DATA SCRN_LOGIN SCRN_SETUP SCRN_CLR_REM SEG_VIA SPD_AUX4 SPD_FIRST SPD_ROLL SPD_SPN STR_LWR
00/0607
2-5
Introduction to PDL2
Predefined variables have preassigned data types and uses All predefined variables begin with a dollar sign ($). Predefined Variables List chapter is an alphabetical reference of predefined variables. Predefined fields provide access to individual components of structured data types. Each field is explained in Data Representation chapter under the data type to which it relates. Predefined routines, also called built-in routines, are provided to handle commonly required programming tasks. BUILT-IN Routines list chapter is an alphabetical reference of built-in routines.
2.2.4
User-defined Identifiers
User-defined identifiers are the names a programmer chooses to identify the following: programs; variables; constants; routines; labels; types; fields.
A user-defined identifier must start with a letter. It can contain any number of letters, digits, and underscore (_) characters. A user-defined identifier can have only one meaning within a given scope. The scope of an identifier indicates the section of a program that can reference the identifier. Program identifiers, which are also used to name the file in which the program is stored, cannot exceed eight characters. Program identifiers are contained in a separate scope which means the user can define a variable having the same name as a program. Program identifiers, which are also used to name the file in which the program is stored, cannot exceed eight characters.
A user-defined variable is a name that can represent any value of a particular type. The programmer declares a variable by associating a name with a data type. That name can then be used in the program to represent any value of that type. A user-defined constant is a name that represents a specific value. The programmer
pr-0-0-pdl_01.fm
2-6
00/0607
Introduction to PDL2 declares a constant by equating a name to a value. That name can then be used in the program to represent the value. Data Representation chapter explains variable and constant declarations. A user-defined routine is a set of instructions represented by a single name. The programmer can define routines that handle specific parts of the overall job. The routine name can be used in a program to represent the actual instructions. Routines chapter describes user-defined routines. User-defined labels are used to mark the destination of a GOTO statement. Execution Control chapter describes the use of labels and GOTO statements. A user-defined type is a set of field definitions represented by a single name. The programmer declares a type in order to define a new data type which is a sequence of existing data types. The type name can then be used in the declaration of a variable or routine. Data Representation chapter explains type and field declarations.
2.3 Statements
PDL2 programs are composed of statements. Statements are a combination of the following: reserved words, symbols, and operators; predefined identifiers; user-defined identifiers.
Statements must be syntactically correct; that is, they must be constructed according to the syntax rules of PDL2. The program editor helps provide the correct syntax as statements are entered. Statements List chapter contains an alphabetical reference of PDL2 statements.
2.3.1
Blank space
Blank spaces separate reserved words and identifiers. Blanks can be used, but are not required, between operators and their operands (a + b or a+b). Blanks can also be used to indent statements. However, the editor automatically produces standard spacing and indentation, regardless of what the programmer uses.
2.3.2
Comments
A comment is text in a program that is not part of the program instructions. Comments have no effect on how the controller executes statements. A comment begins with two hyphens (). The controller will ignore any text that follows the two hyphens, up to a maximum length of 255 characters. Typically, comments are used by a programmer to explain something about the program.
00/0607
2-7
Introduction to PDL2
<constant, variable, and type declarations> <routine declarations> BEGIN <CYCLE> <executable statements> END name A program starts with the PROGRAM statement. This statement identifies the program with a user-defined name. The same name identifies the file in which the program is stored. Optional program attributes, explained with the PROGRAM statement in Statements List chapter, can also be included. Programs are divided into a declaration section and an executable section. The declaration section is a list of all the user-defined data items and routines the program will use. The executable section is a list of statements the controller will execute to perform a task. The BEGIN statement separates the declaration section from the executable section. The programmer can include the CYCLE option with the BEGIN statement to create a continuous cycle. The END statement marks the end of the program and also includes the program name. In this manual, reserved words and predefined identifiers are capitalized, user-defined identifiers are italicized, and optional items are enclosed in angle brackets <>. A complete description of syntax notation is provided at the end of this chapter.
pr-0-0-pdl_01.fm
2-8
00/0607
Introduction to PDL2
Fig. 2.1
1. 2. 3. 4.
pr-0-0-pdl_01.fm
00/0607
2-9
Introduction to PDL2
pr-0-0-pdl_01.fm
2-10
00/0607
Data Representation
3.
DATA REPRESENTATION
This chapter explains each PDL2 data type, how data is declared, and how it can be manipulated within a program. Data Types determine the following: the kinds of values associated with a data item; the operations that can be performed on the data.
PDL2 programs can include the following kinds of data items: variables, representing values that can change; constants, representing values that cannot change; literals, actual values.
The following information are supplied: Data Types Declarations Expressions Assignment Statement Typecasting
Variables and constants are defined by an identifier and a data type. Declaring a variable associates an identifier with a data type. Different values of that type can be assigned to the identifier throughout the program (unless they have been declared with the CONST attribute - see par. CONST attribute on page 3-17). Variables can be declared to be of any data type. Declaring a constant associates a value with an identifier. That value cannot be changed within the program. The data type of the identifier is determined by the value. INTEGER, REAL, BOOLEAN, and STRING values can be associated with constant identifiers. Literal values are actual values used in the program. They can be INTEGER, REAL, or STRING values. PDL2 uses expressions to manipulate data in a program. Expressions are composed of operands and operators. Operands are the data items being manipulated. Operators indicate what kind of manipulation is performed.
00/0607
3-1
Data Representation ARRAY RECORD VECTOR POSITION JOINTPOS XTNDPOS NODE PATH SEMAPHORE
3.1.1
INTEGER
The INTEGER data type represents whole number values in the range -2147483647 through +2147483647. The following predefined constants represent the maximum and minimum INTEGER values: MAXINT; MININT.
An INTEGER can be represented as decimal (base 10), octal (base 8), hexadecimal (base 16) or binary (base 2). The default base for INTEGERs is decimal. To represent a based INTEGER literal, precede the number with 0o to specify octal (0o72), Ox to specify hexadecimal (0xFF), or Ob to specify binary (0b11011). PDL2 can perform the following operations on INTEGER data: arithmetic (+, -, *, /, DIV, MOD, **, +=, -=); relational (<, >, =, <>, <=, >=); bitwise (AND, OR, XOR, NOT, SHR, SHL, ROR, ROL).
The += and -= operators are used for incrementing and decrementing integer program variables. They are not permitted to be used on system variables. The amount of increment can be espressed by a constant or by another integer variable. For example: VAR i, j: INTEGER i += 5 -- It is equivalent to i:=i+5 i -= j -- It is equivalent to i:=i-j This operator can also be used in condition actions. At run time, an INTEGER PDL2 variable will assume the value of uninitialized if it becomes greater than MAXINT. In addition, PDL2 provides built-in routines to access individual bits of an INTEGER value and to perform other common INTEGER functions (refer to BUILT-IN Routines list chapter).
3.1.2
REAL
The REAL data type represents numeric values that include a decimal point and a fractional part or numbers expressed in scientific notation. Fig. 3.1 - Range of REAL Data shows the range for REAL data.
pr-0-0-pdl_02.fm
3-2
00/0607
Data Representation
Fig. 3.1
PDL2 can perform the following operations on REAL data: arithmetic (+, -, *, /, **); relational (<, >, =, <>, <=, >=).
In addition, PDL2 provides built-in routines to perform other common REAL functions (refer to the BUILT-IN Routines list chapter). REAL values used in a PDL2 program are always displayed using eight significant digits.
3.1.3
BOOLEAN
The BOOLEAN data type represents the Boolean predefined constants TRUE (ON) and FALSE (OFF). PDL2 can perform the following operations on BOOLEAN data: relational (=, <>); Boolean (AND, OR, XOR, NOT).
3.1.4
STRING
The STRING data type represents a series of ASCII characters, treated as a single unit of data. Single quotes mark the beginning and the end of a string value. For example: this is an ASCII string value In addition to printable characters, strings can contain control sequences. A control sequence consists of a backslash (\) followed by any three digit ASCII code. For example: ASCII Literal: ASCII Value: ASCII code 126 is a tilde: \126 ASCII code 126 is a tilde: ~
All nonprintable characters in a STRING value not represented in the above format, are replaced with blanks. Note that, when working in PROGRAM EDIT or in MEMORY DEBUG, control sequences for printable characters are viewed in the corresponding printable character itself. To produce either the backslash (\) or the single quotes () characters in a STRING literal, use two in a row. For example: Literal: Single quote Value: Single quote The actual length of a string value can be from 0 to 2048 characters. An actual length of 0 represents an empty STRING value. PDL2 can perform the following operations on STRING data: relational (<, >, =, <>, <=, >=)
00/0607
3-3
Data Representation (refer to par. String Built-In Routines on page 11-3). In the case of using strings of UNICODE characters, double quotes mark the beginning and the end of the string value. Examples: this is a UNICODE string value
In addition to printable characters, strings can contain control sequences. The control sequence for UNICODE consists of \u followed by the requested UNICODE code. For example: UNICODE Literal: UNICODE value: UNICODE 8A89 is \u0x8A89 UNICODE 8A89 is
All nonprintable characters in a STRING value, not represented in the above format, are replaced with blanks. To produce either the backslash (\) or the double quotes () characters in a STRING literal, use two in a row. For example: Literal: Value: Double quote Double quote
The actual length of a string value can be from 0 to 2048 characters. Note that for UNICODE strings, the required length is double + 2, compared with ASCII strings. UNICODE characters are internally represented by means of 2 bytes, whereas ASCII characters are represented by means of 1 byte only. An actual length of 0 represents an empty STRING value. PDL2 can perform the following operations on STRING data: relational (<, >, =, <>, <=, >=)
In addition, PDL2 provides built-in routines to perform common STRING manipulations (refer to par. String Built-In Routines on page 11-3).
3.1.5
ARRAY
The ARRAY data type represents an ordered collection of data items, all of the same type. The programmer can declare that type to be one of the following: INTEGER REAL BOOLEAN STRING RECORD VECTOR POSITION JOINTPOS XTNDPOS SEMAPHORE
pr-0-0-pdl_02.fm
3-4
00/0607
Data Representation The programmer can declare an ARRAY to have one or two dimensions. The programmer also declares the maximum number of items for each dimension, up to 65535 for each. (Note: The actual size might be limited by the amount of available system memory.)
Fig. 3.2
- Representing Arrays
Individual items in an ARRAY are referenced by index numbers. For one dimensional arrays, a single INTEGER expression represents the row position of the item in the ARRAY. For two dimensional arrays, two INTEGER expressions, separated by a comma, represent the row and column position. Index numbers follow the ARRAY name and are enclosed in square brackets. In Fig. 3.2 - Representing Arrays, the third item in the one dimensional ARRAY is referenced as parts[3]. The item in the second row, third column in the two dimensional array is referenced as bin[2,3]. All of the operations that are available for a particular data type can be performed on individual ARRAY items of that type. An entire ARRAY can be used as an argument in a routine call or in an assignment statement. When using arrays in assignment statements, both arrays must be of the same data type, size, and dimension. SEMAPHORE arrays cannot be used in an assignment statement.
3.1.6
RECORD
The RECORD data type represents a collection of one or more data items grouped together using a single name. Each item of a record is called a field and can be of any PDL2 data type except SEMAPHORE, RECORD, NODE, or PATH. The predefined data types VECTOR, POSITION, and XTNDPOS are examples of record types. The user can define new record data types in the TYPE section of a program. A RECORD type definition creates a user-defined data type that is available to the entire system. This means that it is possible to have conflicts between RECORD definitions that have the same name but different fields. Such conflicts are detected when the programs are loaded. It is recommended that the programmer use a unique naming convention for RECORD definitions. A RECORD type definition can be referred to in other programs if it is defined with the GLOBAL attribute and if it is IMPORTed in such programs by means of the IMPORT statement (for further details see par. 3.2.2 TYPE declarations on page 3-14 and par. 3.2.4.2 GLOBAL attribute and IMPORT statement on page 3-19)
pr-0-0-pdl_02.fm
00/0607
3-5
Data Representation The programmer can define a RECORD to have as many fields as needed, however, the maximum size for a record value is 65535 bytes. Individual fields in a RECORD are referenced by separating the record variable name and the field name by a period. This is called field notation. For example: rec_var.field_name := exp All of the operations that are available for a particular data type can be performed on individual fields of that type. An entire RECORD can be used as an argument in a routine call or used in an assignment statement. When using records in assignment statements, both records must be of the same RECORD definition.
3.1.7
VECTOR
The VECTOR data type represents a quantity having both direction and magnitude. It consists of three REAL components. Vectors usually represent a location or direction in Cartesian space, with the components corresponding to x, y, z coordinates. Fig. 3.3 - Representing Vectors shows an example of a vector. PDL2 can perform the following operations on VECTOR data: arithmetic (+, -); arithmetic (*, /) VECTOR-INTEGER, VECTOR-REAL, and vice-versa; relational (=, <>); vector (#, @).
Individual components of a VECTOR are referenced using field notation with the predefined fields X, Y, and Z. For example: vec_var.X := 0.65
Fig. 3.3
- Representing Vectors
pr-0-0-pdl_02.fm
3-6
00/0607
Data Representation
3.1.8
POSITION
The POSITION data type is used to describe the position of a Cartesian frame of reference with respect to another (called starting frame). Generally a position is used to specify the final point for a MOVE statement that is the position to be reached by the end-of-arm tooling with respect to the user frame. POSITIONs also define the system frames of reference: for example the position of the base of the robot ($BASE), the dimensions of the end-of-arm tooling ($TOOL) and the user frame linked to the workpiece ($UFRAME) (see par. 3.1.8.1 Frames of reference on page 3-10 for a general definition of frames). Note that the POSITION defines not only the location but also the orientation and, only for the final points, the configuration of the robot. Therefore POSITION data type consists of three REAL location components, three REAL orientation components, and a STRING that contains the configuration components. The location components represents distances, measured in millimeters, along the x, y, z axes of the starting frame of reference. As with vectors, the x, y, z components can be referenced using the predefined fields x, y and z. The orientation components represent three rotation angles, measured in degrees, called Euler angles. They allow to univocally define the final orientation of a frame of reference by applying to the starting frame three consecutive rotations. The first rotation (first Euler angle E1) is around the Z axis of the starting frame, the second is around the Y axis of the resulting frame (angle E2), the third is around the Z axis of the final frame (angle E3). The limits for the first and third Euler angle are from -180 to 180; the limits for the second are from 0 to 180 (always positive value). Euler angles can be referenced using the predefined constants A, E and R Fig. 3.4 - Euler Angles of Rotation shows an example of a POSITION used to describe a final point for a MOVE statement. When the POSITION is used to define a final point for a MOVE statement the configuration component is necessary to represent a unique set of the robot joint angles that bring the TCP on that position. The set of possible components is related to the family of robots. Note that the configuration string is automatically assigned by the system when teaching a final point so that generally they are not to be written explicitly in a program. The configuration string can contain two type of information: the attitude flags and the turn flags. The letters used as attitude flags in the configuration string are S, E, W, A and B. Some of these flags may be invalid on some robot arms. The entire set of components only apply to the SMART family of robots. The arm shoulder, elbow and wrist configuration are represented by the characters S, E and W. Here follows for example the description of the attitude flags for the SMART robots: S, if present in the configuration string, indicates that the robot must reach the final point with the WCP (Wrist Center Point) in the hinder space with respect to the plane defined by the first and second axes; E, if present, indicates that the WCP must be in the zone lying behind the extension of the second axis;
W, if present, indicates that the robot must reach the final point with a negative value for the fifth axis. The characters A and B represent the configuration flags for the wrist-joint motions (that are cartesian trajectories with $ORNT_TYPE=WRIST_JNT). These flags are ignored
pr-0-0-pdl_02.fm
00/0607
3-7
Data Representation when performing non-wrist-joint motions, just like the S, E and W flags are ignored during wrist-joint motions. The meaning of the attitude flags for a SMART robot follows: the character A, if present, indicates that the robot must reach the final point with the TCP (Tool Center Point) in the hinder space with respect to the plane defined by the second and third axes; the character B, if present, indicates that the robot must reach the final point with the TCP in the hinder space with respect to the plane defined by the first and second axes.
The turn flags are useful for robot axes that can rotate for more than one turn (multi-turn axes). For this type of robots the same position can be reached in different axis configurations that differ for one or more turns (360 degrees). There are four turn flags called: T1, T2, T3, T4. The syntax inside the configuration string is Ta:b, where a represents the flag code (1 to 4) and b represents the number of turns (-8 to +7). The link between the flag name and the axis is shown in the following table:
Tab. 3.1 - Link between flags and axes for different robots
NORMAL CONFIGURATION Turn Flags T1 T2 T3 T4 Robot Axis ax 4 ax 6 ax 3 ax 5
Any combination of S, E, W, A, B and Ta:b can be used in the configuration string and in any order. An example of valid configuration string follows. S E W A T1:1 T2:-1 T3:2
pr-0-0-pdl_02.fm
3-8
00/0607
Data Representation
Fig. 3.4
PDL2 can perform the following operations on POSITION data: relative position (:) POSITION-POSITION, POSITION-VECTOR The following example program shows how to declare and use a POSITION variable:
pr-0-0-pdl_02.fm
00/0607
3-9
Data Representation
PROGRAM postest VAR pos_var : POSITION BEGIN pos_var := POS(294, 507, 1492, 13, 29, 16, ) END pos PDL2 provides built-in routines to perform common POSITION manipulations, including accessing individual components of a position (refer to BUILT-IN Routines list chapter).
3.1.8.1
Frames of reference
Positions can be used to represent Cartesian frames of reference or the positions of objects relative to Cartesian frames of reference. In PDL2, positions are defined relative to a Cartesian frame of reference, as shown in the following Fig. 3.5 - System Frames of Reference and Coordinate Transformation.
Fig. 3.5
The world frame is predefined for each arm. The programmer can define the base frame ($BASE) as a position, relative to the world frame. The programmer also can define the end-of-arm tooling ($TOOL) as a position, relative to the faceplate of the arm. $UFRAME is a transformation used to describe the position of the workpiece with respect to the world. Relative frames can be used to compensate for changes in the workcell, without having to reteach positional data. For example, $BASE can be changed if the arm is relocated in the workcell or $TOOL can be changed if the end-of-arm tooling changes. Relative frames can also be assigned to parts, such as a car body. Positional data can then be taught relative to that part, for example, particular weld spots. If the position of the car body changes, only the frame needs to be retaught to correct all of the weld spots.
3.1.9
JOINTPOS
The JOINTPOS data type represents actual arm joint positions, in degrees. One real component corresponds to each joint of the arm. JOINTPOS data is used to position the end-of-arm tooling using a particular set of joint movements. Each real value is the actual distance a joint must move from its predefined zero position. Each JOINTPOS
pr-0-0-pdl_02.fm
3-10
00/0607
Data Representation variable is associated with a particular arm and cannot be used with a different arm. Individual components of a JOINTPOS, like ARRAY components, are referenced by index numbers. For example: PROGRAM jnttest VAR real_var : REAL jointpos_var : JOINTPOS BEGIN real_var := jointpos_var[5] jointpos_var[3] := real_exp END jnttest There are no operations for the entire JOINTPOS data type. PDL2 provides built-in routines to perform JOINTPOS manipulations (refer to BUILT-IN Routines list chapter).
3.1.10
XTNDPOS
The XTNDPOS data type represents an arm position that involves a greater number of axes than is included in the basic configuration of the robot. It is used for integrated motion of a group of axes, made up of a robot arm and some additional auxiliary axes, treated as a single unit in the system. For example, an XTNDPOS could be used to represent a robot mounted on a rail. The robot and rail would be treated as a single arm by the system. Each XTNDPOS variable is associated with a particular arm and cannot be used with a different arm. The XTNDPOS data type is composed of a Cartesian position for the robot and an ARRAY of joint values for the remaining axes. Individual components of an XTNDPOS are referenced using field notation with the predefined fields POS, a POSITION, and AUX, an ARRAY of REAL. For example: PROGRAM auxaxis VAR plxtn : XTNDPOS BEGIN plxtn.POS := POS(294, 507, 1492, 13, 29, 16, ) plxtn.AUX[1] := 100 plxtn.AUX[2] := 150 END auxaxis There are no operations for the entire XTNDPOS data type.
3.1.11
NODE
The NODE data type is similar to a RECORD in that it represents a collection of one or more data items grouped together using a single name. Each item of a node is called a field and can be of any PDL2 data type except SEMAPHORE, RECORD, NODE, or PATH. The difference between a NODE and a RECORD is that a NODE can include a group of predefined node fields in addition to user-defined fields. The predefined node fields begin with a $ and have a meaning known to the system identical to the corresponding predefined variable. The collection of predefined node fields contains a destination and description of a single motion segment (motion segments are described in Chap.4. -
pr-0-0-pdl_02.fm
00/0607
3-11
Data Representation Motion Control). Node data types are defined in the TYPE section of a program. A node type definition creates a user-defined data type that is available to the entire system. This means that it is possible to have conflicts between RECORD and NODE definitions that have the same name but different fields. Such conflicts are detected when the programs are loaded. It is recommended that the programmer use a unique naming convention for RECORD and NODE definitions. Like for RECORD data types, a NODE type definition can be referred to in other programs if it is defined with the GLOBAL attribute and if it is IMPORTed in such programs by means of the IMPORT statement (for further details see par. 3.2.2 TYPE declarations on page 3-14 and par. 3.2.4.2 GLOBAL attribute and IMPORT statement on page 3-19) The programmer can define a node to have as many fields as needed, however, the maximum size for a node value is 65535 bytes. Individual fields in a node are referenced by separating the node variable name and the field name by a period. This is called field notation. For example: node_var.$PRED_FIELD_NAME := exp -- ref. predefined node field node_var.field_name := exp -- ref. user-defined node field All of the operations that are available for a particular data type can be performed on individual fields of that type. An entire node can be used as an argument in a routine call, used in an assignment statement, or used as the destination in a MOVE statement. When using nodes in assignment statements, both nodes must be of the same node definition.
3.1.12
PATH
The PATH data type represents a sequence of nodes to be interpreted in a single motion. The PATH data type is a predefined record containing the fields NODE, FRM_TBL, and COND_TBL. The NODE field is an ARRAY of nodes representing the sequence of nodes. It is dynamic in length which means nodes can be added and deleted from the table during execution. The maximum number of nodes in a path is 65535 but the amount of memory on the system may not permit this many nodes. The structure of the nodes in the NODE array is determined by the user-defined node definition declared in the TYPE section of the program. Each node contains a destination and description for a single motion segment (motion is described in Motion Control chapter). This provides the programmer with the ability to customize the node definitions for different applications. Please note that it is possible to have different paths use different node definitions, however, all nodes within the same path will have the same node definition. The node type is available to the entire system. This means that it is possible to have conflicts between node types that have the same name but different field definitions. It is recommended that the programmer use a unique naming convention for node definitions in order to avoid such conflicts. Individual nodes of a path are referenced by indexing the NODE field of the path variable.
pr-0-0-pdl_02.fm
3-12
00/0607
Data Representation For example: path_var.NODE[3] := path_var.NODE[5] path_var.NODE[4] := node_var Individual fields in a path node are referenced using field notation. For example: path_var.NODE[3].field_name := exp All of the operations that are available for a particular data type can be performed on individual fields of that type. The FRM_TBL field is an ARRAY of POSITIONs representing reference and/or tool frames to be used during the processing of the path nodes. The FRM_TBL array contains 7 elements. The usage of the FRM_TBL field is described in the PATH Motion section of Chap.4. - Motion Control. The COND_TBL field is an ARRAY of INTEGERs representing condition handler numbers to be used during the processing of the path nodes. The COND_TBL array contains 32 elements. The usage of the COND_TBL field is described in the PATH Motion section of Chap.4. - Motion Control. There are no operations for the entire PATH type. An entire path can be used in the MOVE ALONG statement or as an argument in a routine call. PDL2 provides built-in routines to insert, delete, and append nodes to a path. Additional built-ins are provided to obtain the number of nodes in a path and assign/obtain a node identifier (refer to Chap.4. - Motion Control).
3.1.13
SEMAPHORE
The SEMAPHORE data type represents an aid for synchronization when there are multiple programs running that share the same resources. The SEMAPHORE, or an array of SEMAPHOREs is used to provide mutual exclusion of a resource so that separate programs cannot act on that resource at the same time. There are no operations for the SEMAPHORE data type, but the following statements use SEMAPHORE variables: WAIT Statement; SIGNAL Statement.
3.2 Declarations
This section describes CONSTANT declarations, VARIABLE declarations, TYPE declarations. Shared types, variables and routines
3.2.1
CONSTANT declarations
Constants are declared in the CONST section of a program (see par. 10.11 CONST Statement on page 10-10). A constant declaration establishes a constant identifier with
pr-0-0-pdl_02.fm
00/0607
3-13
Data Representation two attributes; a name and an unchanging value. A constants data type is understood by its assigned value, which can be an INTEGER, a REAL, a BOOLEAN, or a STRING. Within the program, the identifier can be used in place of the value. The syntax for declaring a constant is as follows: name = || literal | predef_const_id || Constant declarations appear in a constant declaration section, following the reserved word CONST. For example: CONST num_parts = max_angle = part_mask = test_flag = error = An
PDL2 provides predefined constants for representing commonly used values. These predefined constants are listed in Tab. 2.3 - Predefined Constants of Introduction to PDL2 chapter.
3.2.2
TYPE declarations
RECORD and NODE definitions are declared in the TYPE declaration section of a program (see par. 10.45 TYPE Statement on page 10-39). A type declaration establishes a type identifier with two attributes; a name and a RECORD or NODE definition. The syntax for declaring a RECORD definition is as follows: type_name = RECORD <GLOBAL> <fld_name <, fld_name>... : data_type>... ENDRECORD The syntax for declaring a node definition is as follows: type_name = NODEDEF <GLOBAL> <predefined_name <, predefined_name>... <NOTEACH> >... <fld_name <, fld_name>... : data_type <NOTEACH> >... ENDNODEDEF The type_name is the identifier for the user-defined type. This is used in variable and parameter declarations to indicate a RECORD or NODE type. GLOBAL attribute means that current user-defined type is declared to be public for use by other programs. See par. 3.2.4 Shared types, variables and routines on page 3-18 for full details. The fld_name identifiers indicate the user-defined fields of the RECORD or NODE type. The predefined_name identifiers in a node definition indicate the set of motion segment characteristics contained in each node. As indicated above, the predefined node fields must be specified before the user-defined node fields. Each predefined_name can be one of the following:
pr-0-0-pdl_02.fm
3-14
00/0607
Data Representation
$CNFG_CARE $JNT_MTURN $MAIN_POS $ORNT_TYPE $SEG_FLY $SEG_FLY_TYPE $SEG_REF_IDX $SEG_TOL $SING_CARE $WEAVE_NUM
$SEG_STRESS_PER $SEG_TERM_TYPE
The meaning of each predefined node field is identical to the predefined variable having the same name. These are described in the Motion Control chapter and Predefined Variables List chapter. The $MAIN_POS, $MAIN_JNTP, and $MAIN_XTND fields indicate the main destination of a motion segment. A node definition can include only one of the $MAIN_ predefined fields. The particular one chosen indicates the data type of the main destination. If a predefined node field is used in the program and not included in the node definition, the program editor will automatically insert that field in the declaration. This is called an implicit declaration. The NOTEACH clause is used to indicate that the fields declared in that declaration should not be permitted to be changed while a path is being modified in the teaching environment (MEMORY TEACH Command). (Refer to the Use of C4G Controller Unit manual for more information on the teaching environment.) Type declarations appear in a type declaration section, following the reserved word TYPE. For example: TYPE ddd_part = RECORD GLOBAL -- declared to be IMPORTable by -- other programs name : STRING[15] count : INTEGER params : ARRAY[5] OF REAL ENDRECORD lapm_pth1 = NODEDEF $MAIN_POS, $SEG_TERM_TYPE $MOVE_TYPE $SEG_WAIT NOTEACH weld_sch : ARRAY[8] OF REAL gun_on : BOOLEAN ENDNODEDEF The type declaration is just a definition for a new data type. This new data type can be used for variable and parameter declarations.
pr-0-0-pdl_02.fm
00/0607
3-15
Data Representation
3.2.3
VARIABLE declarations
Variables are declared in the variable declaration section of a program (see par. 10.48 VAR Statement on page 10-41). A variable declaration establishes a variable identifier with two attributes; a name and a data type. Within the program, the variable can be assigned any value of the declared data type. The syntax for declaring a variable is as follows: name <, name>... : data_type <var_options> The valid data types (data_type) and their syntax are as follows: INTEGER REAL BOOLEAN STRING [length] ARRAY [rows <, columns>] OF item_type (see par. 3.1.5 ARRAY on page 3-4) record_type node_type VECTOR POSITION JOINTPOS <FOR ARM[number]> XTNDPOS <FOR ARM[number]> PATH OF node_type SEMAPHORE The possible values and ranges for length, rows, columns, and item_type are explained in par. 3.1 Data Types on page 3-1 of current chapter. The length of a STRING or the size(s) of an ARRAY can be specified with an * instead of an actual value. If the * notation is used with a two-dimensional ARRAY, then two * must be used (*, *). The * notation is used when importing STRING or ARRAY variables from another program. The program owning the variable should specify the actual size of the variable while the importing program(s) use the * notation (refer to the example in the Shared Variables and Routines section of this chapter). If the variable is accessed before an actual size for it has been determined, an error will occur. The actual size is determined when a program or variable file specifying the actual size is loaded. The importing programs can obtain the actual size using built-in routines (refer to BUILT-IN Routines list chapter). The * notation is not allowed in local routine variables or field definitions. Arm designations are set up at the system level by associating an arm number with a group of axes. They are not required for single arm systems (refer to the Use of C4G Controller Unit manual). If an arm designation is not specified in the declaration of a JOINTPOS or XTNDPOS, the program attribute PROG_ARM is used. If PROG_ARM is not specified in the program, the default arm ($DFT_ARM) is used. The valid var_options are as follows: EXPORTED FROM clause and GLOBAL attribute See par. 3.2.4 Shared types, variables and routines on page 3-18 for full details. initial_value The initial_value clause is permitted on both program and routine variable
pr-0-0-pdl_02.fm
3-16
00/0607
Data Representation declarations. However, it is only valid when the data type is INTEGER, REAL, BOOLEAN, or STRING. This option specifies an initial value for all variables declared in that declaration statement. For program variables, the initial value is given to the variables at the beginning of each program activation and for routine variables at the beginning of each routine call (refer to Routines chapter for more information on routine variables.) The initial value can be a literal, a predefined constant identifier, or a user-defined constant identifier. The data type of the initial value must match the data type of the variable declaration with the exception that an INTEGER literal may be used as the initial value in a REAL variable declaration. NOSAVE attribute The values of program variables may be saved in a variable file so that they can be used the next time the program is activated. (Refer to the Use of C4G Controller Unit manual for more information on variable files) The NOSAVE clause is used to indicate that the variables declared in that declaration should not be saved to or loaded from the variable file. This option is only permitted on program variable declarations and applies to all variables declared in the declaration. The NOSAVE clause is automatically added to all SEMAPHORE variable declarations since they are never permitted in a variable file. The NOSAVE option should be used on all program variable declarations that include the initial value clause. If not specified, the program editor will give the user a warning. The reason is that initialized variables will be given the initial value each time the program is activated which, in effect, overrides any value loaded from the variable file. CONST attribute The CONST attribute can be applied to a variable to mean that it has privileged write access and any read access: non-privileged users can neither set a value to such a variable, nor pass it by reference to a routine. The only way to set a value to it is to load it from a file by means of the ML/V Command (Memory Load / Variables - for further details see System Commands chapter in C4G Control Unit Use manual). Variable declarations appear in a variable declaration section, following the reserved word VAR. For example: VAR count, total : INTEGER (0) NOSAVE timing : INTEGER (4500) angle, distance : REAL job_complete, flag_check, flag_1, flag_2 : BOOLEAN error_msg : STRING[30] GLOBAL menu_choices : ARRAY[4] OF STRING[30] matrix : ARRAY[2, 10] OF INTEGER offset : VECTOR part_rec : ddd_part pickup, perch : POSITION safety_pos : JOINTPOS FOR ARM[2] door_frame : XTNDPOS FOR ARM[3] weld_node : lapm_pth1 weld_pth : PATH OF lapm_pth1 work_area : SEMAPHORE NOSAVE default_part : INTEGER (OxFF) NOSAVE
pr-0-0-pdl_02.fm
00/0607
3-17
Data Representation If a programmer uses an undeclared variable identifier in the executable section of a program, the program editor automatically adds a declaration for that variable. This is called an implicit declaration. The variable must be used in a way that implies its data type or an error will occur. The new variable is added to an existing variable declaration of the same data type if one exists containing less than 5 variables. If one does not exist, a new declaration statement is added. Undeclared variables cannot be used in the executable section of a routine or an error will occur. PDL2 provides predefined variables for data related to motion, input/output devices, and other system data. Predefined Variables List chapter describes these variables.
3.2.4
3.2.4.1
PROGRAM a VAR x : INTEGER EXPORTED FROM a y : REAL EXPORTED FROM b ary: ARRAY[5] OF REAL EXPORTED FROM a BEGIN . . . END a -- x and ary are open for other programs to use -- y is owned by program b
PROGRAM b VAR y : REAL EXPORTED FROM b x : INTEGER EXPORTED FROM a ary: ARRAY[*] OF REAL EXPORTED FROM a BEGIN . . . END b -- y is open for other programs to use -- x and ary are owned by program a
pr-0-0-pdl_02.fm
3-18
00/0607
Data Representation
The EXPORTED FROM clause does not apply to routine local variables. In addition, the initial value clause cannot be included when the EXPORTED FROM clause specifies a program name different from the name of the program in which the statement resides. PROGRAM a ROUTINE rout_a(x : INTEGER) EXPORTED FROM a ROUTINE rout_b(x, y : INTEGER) EXPORTED FROM b ROUTINE rout_a(x:INTEGER) BEGIN . . . END rout_a BEGIN . . . END a -- rout_a is open for other programs to use -- rout_b is owned by program b
3.2.4.2
pr-0-0-pdl_02.fm
00/0607
3-19
Data Representation The IMPORT statement must be used to import ANY GLOBAL types, variables and/or routines from another program (see par. 10.27 IMPORT Statement on page 10-23). The syntax for importing them is as follows: IMPORT prog_name prog_name is the name of the program which owns the types, variables and routines to be imported. They all are imported in the current program without explicitly declaring them. The following example shows how to use the IMPORT clause and the GLOBAL attribute, for shared variables. PROGRAM a IMPORT b -- causes just y to be imported from program b VAR x : INTEGER GLOBAL -- declared to be public ary : ARRAY [5] OF REAL GLOBAL -- declared to be public ROUTINE rout(x:REAL) EXPORTED FROM a GLOBAL -- declared to be -- public BEGIN . . . END rout BEGIN . . . END a
PROGRAM b IMPORT a -- causes x, ary and rout to be imported from program a VAR y : REAL GLOBAL -- declared to be public i : INTEGER -- declared to be local to program b (not public) BEGIN . . . END b
3.3 Expressions
Expressions are combinations of any number of constants, variables, function routines, and literals joined with operators to represent a value. For example: count + 1 VEC(a, b, c) * 2 count >= total flag_1 AND flag_2 ----arithmetic arithmetic relational BOOLEAN
An expression has both a type and a value. The type is determined by the operators and operands used to form it. Tab. 3.2 - Operation Result Types shows which operand data types are allowed for which operators and what data types result. The resulting value can be assigned to a variable of the same type using an assignment statement. In Tab. 3.2 - Operation Result Types, the following abbreviations are used:
pr-0-0-pdl_02.fm
3-20
00/0607
Operators:
+,-
**
+= -= I += -= I
I R
R I
R R DIV, MOD
Operators:
+,-
**
REAL INTEGER-REAL REAL-INTEGER BOOLEAN STRING INTEGER-VECTOR REAL-VECTOR VECTOR POSITION POSITION-VECTOR
(1)
R R V I
R R R R V V V V I R I
R I
Only the operators = and <> may be used to compare VECTOR values.
The following operation types are available: Arithmetic Operations Relational Operations Logical Operations Bitwise Operations VECTOR Operations POSITION Operations
3.3.1
Arithmetic Operations
Arithmetic operators perform standard arithmetic operations on INTEGER, REAL, or VECTOR operands. The arithmetic operators are as follows: + * DIV INTEGER, REAL or VECTOR addition INTEGER, REAL or VECTOR subctration INTEGER, REAL or VECTOR multiplication INTEGER division (fractional results truncated)
pr-0-0-pdl_02.fm
00/0607
3-21
Data Representation
/ MOD ** += -=
REAL or VECTOR division INTEGER modulus (remainder) INTEGER or REAL exponentiation INTEGER increment INTEGER decrement
VECTOR addition and subtraction require VECTOR operands and produce a VECTOR result whose components are the sum or difference of the corresponding elements of the operands. VECTOR scaler multiplication and division require a VECTOR operand and an INTEGER or REAL operand and produce results obtained by performing the operation on each element in the vector (an INTEGER operand is treated as a REAL). If an INTEGER or REAL number is divided by the VECTOR, that value is multiplied by the reciprocal of each element of the VECTOR. PDL2 provides built-in routines to perform common mathematical manipulations, including rounding and truncating, trigonometric functions, and square roots (refer to BUILT-IN Routines list chapter).
3.3.2
Relational Operations
Relational operators compare two operands and determine a BOOLEAN value based on whether the relational expression is TRUE or FALSE. The relational operators are as follows: < > = <= >= <> less than greater than equal less than or equal greater than or equal not equal
Relational operations can be performed on INTEGER, REAL, BOOLEAN (= or <> only), STRING, and VECTOR (= or <> only) values.
3.3.3
Logical Operations
When used with BOOLEAN values, the BOOLEAN operators work as logical operators to generate a BOOLEAN result. All of the BOOLEAN operators require two operands except NOT, which only requires one operand. AND OR XOR NOT TRUE if both operands are TRUE TRUE if at least one of the operands is TRUE TRUE if only one operand is TRUE inverse of the BOOLEAN operand
pr-0-0-pdl_02.fm
3-22
00/0607
Data Representation
3.3.4
Bitwise Operations
Bitwise operations perform a specific operation on the bits of an INTEGER value. There are three different ways that bitwise operations can be performed: by using BOOLEAN operators, rotate or shift operators, and built-in procedures (BIT_TEST, BIT_SET, and BIT_CLEAR). The rotate and shift operators require INTEGER operands and produce an INTEGER result. The left operand is the value to be shifted or rotated and the right operand specifies the number of bits to shift or rotate. The shift operators perform an arithmetic shift which causes the shifted bits to be discarded, zeros to be shifted into the vacated slots on a shift left, and a copy of the signed bit (bit 32) from the original value to be shifted into the vacated positions on a shift right. The rotate operators cause the shifted bit(s) to be wrapped around to the opposite end of the value. Fig. 3.6 and Fig. 3.7 show an example of the shift left and rotate left operations. Fig. 3.8 shows an example of a shift right instruction. Fig. 3.6 shows the result of the following PDL2 statement: x := -122704229 SHL 1
Fig. 3.6
Fig. 3.7 shows the result of the following rotate operation: x := -122704229 ROL 1 NOTE that the Shift Left operation might cause the variable to become UNINIT: at run time, an INTEGER PDL2 variable will assume the value of UNINIT (uninitialized) if it becomes greater than MAXINT.
Fig. 3.7
Fig. 3.8 shows the result of the shift right operation: x := -122704229 SHR 1
pr-0-0-pdl_02.fm
00/0607
3-23
Data Representation
Fig. 3.8
The operations performed by BOOLEAN, rotation, and shift operators are listed below. Refer to BUILT-IN Routines list chapter for explanations of BIT_TEST, BIT_SET, and BIT_CLEAR.
ith bit is 1 if ith bit of both operands is also 1 ith bit is 1 if ith bit of either, or both, operands is 1 ith bit is 1 if ith bit of only one operand is 1 ith bit is the reverse of ith bit of the operand INTEGER rotate right INTEGER rotate left INTEGER shift right INTEGER shift left
3.3.5
VECTOR Operations
Special VECTOR operations include cross product and inner product operations. The cross product operator (#) results in a VECTOR normal to the VECTOR operands. The magnitude is equivalent to the product of the magnitude of the operands and the sine of the angle between the operands. The direction is determined by the right hand rule. For example: VEC(2, 5, 7) # VEC(3, 9, 1) = VEC(-58, 19, 3) The inner product operator (@) results in a REAL value that is the sum of the products of the corresponding elements of the two VECTOR operands. For example: VEC(7.0, 6.5, 13.4) @ VEC(1.3, 5.2, 0.0) = 42.9
3.3.6
POSITION Operations
The relative position operator (:) performs a special position operation. It can be used with two POSITION operands or a POSITION operand and a VECTOR operand. This is implemented by converting the position operand into a matrix, performing the operation, and converting the resulting matrix back into standard position format. In the case of a POSITION and VECTOR operation, the result is a vector.
pr-0-0-pdl_02.fm
3-24
00/0607
Data Representation Two POSITION operands result in a POSITION equivalent to the right hand operand, but relative to the coordinate frame of the left hand operand. For example: POS(10, 20, 30, 0, 30, 0, ) : POS(10, 20, 30, 45, 0, 0, ) = POS(33.66, 40, 50.981, 0, 30, 65, ) A POSITION and a VECTOR operand result in a VECTOR equivalent to the VECTOR operand, but relative to the POSITION operand. For example: POS(10, 20, 30, 0, 30, 0, ) : VEC(10, 0, 0) = VEC(18.660, 20, 25)
3.3.7
3.3.8
Operator precedence
Operators are evaluated in the order shown in Tab. 3.3 - Operator Precedence. Precedence works left to right in a statement for operators that are at the same precedence level.
If parentheses are not used in an expression, the user should be aware of the exact order in which the operators are performed. In addition, those parentheses that are not required in the expression will automatically be removed by the system. For example, the first IF statement below will actually produce the following IF statement because the parentheses do not override normal operator precedence IF ($DIN[5] AND $DIN[6]) = FALSE THEN . . . ENDIF IF $DIN[5] AND $DIN[6] = FALSE THEN . . .
pr-0-0-pdl_02.fm
00/0607
3-25
Data Representation
ENDIF If the FALSE test of $DIN[6] is to be ANDed with $DIN[5], parentheses must be used to override operator precedence: IF $DIN[5] AND ($DIN[6] = FALSE) THEN . . . ENDIF
3.5 Typecasting
This PDL2 feature involves INTEGER, BOOLEAN and REAL variables and values. It is a very specific feature and it is used in very particular applications. The case in which only INTEGER and REAL data types are involved differs from the one in which also BOOLEAN data type is used. In both cases typecasting is expressed by specifying in round brackets the data type to apply to the casting operation. In case of typecasting between INTEGER and REAL data types, the variable or value associated to the casting operation is read in the Controller memory and the bit pattern that forms this value is considered; this bit pattern is then assigned to the destination of the assignement or compared with the other operator of the expression.
pr-0-0-pdl_02.fm
3-26
00/0607
Data Representation Then used in assignements, casting can only be specified on the right hand side. When used in relational expressions, it can be specified in any side. This feature is allowed in program statements, condition actions and condition expressions. INTEGER variables, ports or values, and REAL variables or values are used. Consider for example the numbers 0x40600000 and 0x3f99999A that are the hexadecimal representation of the bit pattern of 3.5 and 1.2 numbers in the C3G memory. -- assign 0x40600000 to int_var int_var := (INTEGER)3.5 -- assing 1.2 to real_var real_var := (REAL)0x3f99999A int_var := (INTEGER)(real_var + 3.4) CONDITION[5] : -- if real_var values 5.5 and int_var 0x3f99999A -- the condition will trigger WHEN (INTEGER)real_var> int_var DO real_var := (REAL)3 WHEN $AOUT[13] < (INTEGER) real_var DO int_var := (INTEGER)5.6 WHEN real_var > (REAL)int_var DO $AOUT[7] := (INTEGER)5.6 WHEN real_var > (REAL)$AOUT[4] DO int_var := (INTEGER)real_var ENDCONDITION In case of typecasting between INTEGER and BOOLEAN or REAL and BOOLEAN data types, the typecasting consists in assigning the value of 1 or 1.0 to the destination INTEGER or REAL variable respectively if the BOOLEAN variable (or port or value) is TRUE, 0 otherwise. This aspect of typecasting is not allowed in conditions handlers. For example: int_var := (INTEGER)bool_var int_var := (INTEGER)$DOUT[5] real_var := (REAL)bool_var real_var := (REAL)$FDOUT[6]
pr-0-0-pdl_02.fm
00/0607
3-27
Data Representation
pr-0-0-pdl_02.fm
3-28
00/0607
Motion Control
4.
MOTION CONTROL
This chapter describes the PDL2 statements that control arm motion and direct hand operations. Information are supplied about the following topics: MOVE Statement Motion along a PATH Stopping and Restarting motions ATTACH and DETACH Statements HAND Statements
The syntax of the MOVE statement is as follows: MOVE <arm_clause> traj_clause dest_clause <opt_clauses> <sync_clause> If a statement needs more than a single line, commas can be used to end a line after the destination clause or after each optional clause. The reserved word ENDMOVE must then be used to indicate the end of the statement. Examples appear in the sections that follow.
pr-0-0-pdl_03.fm
00/0607
4-1
Motion Control
4.1.1
ARM Clause
Multiple arms can be controlled by a single PDL2 program. Arms are set up at the system level by associating an arm number with a group of axes. The optional arm clause designates which arm is to be moved as part of a MOVE statement. For programs that control only a single arm, no designation is necessary. If specified, the optional arm clause is used as follows: MOVE ARM[1] TO perch The designated arm is used for the entire MOVE statement. Any temporary values assigned in a WITH clause of the move are also applied to the designated arm. If an arm clause is not included, the default arm is used. The programmer can designate a default arm as a program attribute in the PROGRAM statement, as follows: PROGRAM armtest PROG_ARM=1 . . . BEGIN MOVE TO perch MOVE ARM[2] TO normal END armtest
If an arm clause is not included and a default arm has not been set up for the program, the value of the predefined variable $DFT_ARM is used.
4.1.2
TRAJECTORY Clause
The trajectory can be specified either associating the predefined constants JOINT, LINEAR, CIRCULAR to the move statement (for example MOVE LINEAR TO p1") or assigning them to the $MOVE_TYPE predefined variable. The optional trajectory clause designates a trajectory for the motion as part of the MOVE statement syntax, as follows: MOVE trajectory TO perch PDL2 provides the following predefined constants to designate trajectory: LINEAR CIRCULAR JOINT The trajectory when specified with the MOVE statement, only affects the motion for which it is designated. If a trajectory clause is not included in the MOVE statement, the value of the predefined variable $MOVE_TYPE is used. The programmer can change the value of $MOVE_TYPE (JOINT by default) by assigning one of the trajectory predefined constants, as follows: $MOVE_TYPE := JOINT MOVE TO perch MOVE LINEAR TO slot MOVE TO perch -- assigns modal value -- joint move -- linear move -- joint move
The motions performed by the robot arm can move thru several different trajectories to
pr-0-0-pdl_03.fm
4-2
00/0607
Motion Control reach the final position. The trajectory of each motion can be specified as either JOINT, LINEAR or CIRCULAR. A motion that is specified as having a JOINT trajectory will cause all axis of the robot arm to start and stop moving at the same time. A motion with a LINEAR trajectory will move the Tool Center Point of the robot arm in a straight line from the start position to the end position. A motion that has a CIRCULAR trajectory will move the Tool Center Point of the robot arm in an arc. The described below MOVE TO, MOVE NEAR, MOVE AWAY, MOVE RELATIVE, MOVE ABOUT, MOVE BY, and MOVE FOR statements all require a LINEAR or JOINT trajectory type, and cannot be used with the CIRCULAR trajectory. For more information on the trajectories and motion characteristics, refer to the Motion Programming manual.
4.1.3
DESTINATION Clause
The destination clause specifies the kind of move and the destination of the move. It takes one of the following forms: MOVE TO TO || destination | joint_list || <VIA_clause> MOVE NEAR NEAR destination BY distance MOVE AWAY AWAY distance MOVE RELATIVE RELATIVE vector IN frame MOVE ABOUT ABOUT vector BY distance IN frame MOVE BY BY relative_joint_list MOVE FOR FOR distance TO destination
4.1.3.1
MOVE TO
MOVE TO moves the designated arm to a specified destination. The destination can be any expression resulting in one of the following types: POSITION JOINTPOS XTNDPOS For example: MOVE LINEAR TO POS(x, y, z, e1, e2, e3, config) MOVE TO perch MOVE TO home The destination can also be a joint list. A joint list is a list of real expressions, with each item corresponding to the joint angle of the arm being moved. For example: MOVE TO {alpha, beta, gamma, delta, omega}
pr-0-0-pdl_03.fm
00/0607
4-3
Motion Control
-- where alpha corresponds to joint 1, beta to joint 2, etc. Only the joints for which items are listed are moved. For example: MOVE TO { , , gamma, delta} -- only joints 3 and 4 are moved
4.1.3.2
VIA Clause
The optional VIA clause can be used with the MOVE TO destination clause to specify a position through which the arm passes between the initial position and the destination. The VIA clause is used most commonly to define an arc for circular moves as shown in Fig. 4.1 - VIA Position for Circular Move. For example: MOVE TO initial MOVE CIRCULAR TO destination VIA arc
Fig. 4.1
4.1.3.3
MOVE NEAR
MOVE NEAR allows the programmer to specify a destination along the tool approach vector that is within a specified distance from a position. The distance, specified as a real expression, is measured in millimeters along the negative tool approach vector. The destination can be any expression resulting in one of the following types: POSITION JOINTPOS XTNDPOS For example: MOVE NEAR destination BY 250.0
4.1.3.4
MOVE AWAY
MOVE AWAY allows the programmer to specify a destination along the tool approach vector that is a specified distance away from the current position. The distance, specified as a real expression, is measured in millimeters along the negative tool approach vector. For example: MOVE AWAY 250.0
pr-0-0-pdl_03.fm
4-4
00/0607
Motion Control Fig. 4.2 - MOVE NEAR, TO, and AWAY shows an example of moving near, to, and away from a position.
Fig. 4.2
4.1.3.5
MOVE RELATIVE
MOVE RELATIVE allows the programmer to specify a destination relative to the current location of the arm. The destination is indicated by a vector expression, measured in millimeters, using the specified coordinate frame. For example: MOVE RELATIVE VEC(100, 0, 100) IN TOOL The item following the reserved word IN is a frame specification which must be one of the predefined constants TOOL, BASE, or UFRAME. Fig. 4.3 - MOVE RELATIVE shows an example of MOVE RELATIVE.
Fig. 4.3
- MOVE RELATIVE
pr-0-0-pdl_03.fm
00/0607
4-5
Motion Control
4.1.3.6
MOVE ABOUT
MOVE ABOUT allows the programmer to specify a destination that is reached by rotating the tool an angular distance about a specified vector from the current position. The angle, a real expression, represents the rotation in degrees about the vector, using the specified coordinate frame. For example: MOVE ABOUT VEC(0, 100, 0) BY 90 IN TOOL The item following the reserved word IN is a frame specification which must be one of the predefined constants TOOL, BASE, or UFRAME. Fig. 4.4 - MOVE ABOUT shows an example of MOVE ABOUT.
Fig. 4.4
- MOVE ABOUT
4.1.3.7
MOVE BY
MOVE BY allows the programmer to specify a destination as a list of REAL expressions, with each item corresponding to an incremental move for the joint of an arm. For rotational axes, the units are degrees, and for transitional, they are millimeters. For example: MOVE BY {alpha, beta, gamma, delta, omega} -- where alpha corresponds to joint 1, beta to joint 2, etc. Only the joints for which items are listed are moved. For example: MOVE BY { , , gamma, , delta} -- only joints 3 and 5 are moved
4.1.3.8
MOVE FOR
MOVE FOR allows the programmer to specify a partial move along the trajectory toward
pr-0-0-pdl_03.fm
4-6
00/0607
Motion Control a theoretical destination. The orientation of the tool changes in proportion to the distance. For example: MOVE FOR distance TO destination The distance is represented by a real expression. If the value is positive, the move is measured toward the destination. If the value is negative, the move is measured in the opposite direction. The distance is measured in millimeters. The destination can be any expression resulting in one of the following types: POSITION JOINTPOS XTNDPOS Fig. 4.5 - MOVE FOR and MOVE TO shows an example of a MOVE FOR followed by a MOVE TO.
Fig. 4.5
4.1.4
Optional Clauses
Optional clauses can be used to provide more detailed instructions for the motion. They include the following: ADVANCE Clause TIL Clause WITH Clause
4.1.4.1
ADVANCE Clause
The optional ADVANCE clause takes advantage of the fact that the motion interpolator and the program interpreter run in parallel. The interpreter continues to run the program, even if current motion is still in progress. When ADVANCE is specified, the interpreter continues program execution as soon as
pr-0-0-pdl_03.fm
00/0607
4-7
Motion Control the motion starts. When ADVANCE is not specified, the interpreter waits for the motion to be completed before continuing execution. Program execution can continue up to the next programmed motion for the same arm. For example: MOVE OPEN MOVE OPEN MOVE NEAR slot BY 250 HAND 1 -- executed after move near motion is completed NEAR slot BY 250 ADVANCE HAND 1 -- executed while move near motion is in progress TO slot -- executed after move near motion is completed
4.1.4.2
TIL Clause
The optional TIL clause can specify a list of conditions that will cause the motion to be canceled. (Refer to CANCEL MOTION Statements for more information on canceled motions, and Chap. Condition Handlers for a description of conditions). For example: MOVE TO slot TIL $DIN[1]+ If the digital signal $DIN[1] changes to a positive signal during the move, the motion will be canceled. Conditions are monitored only when the arm is actually in motion. Therefore, the contents of the condition expression are restricted. The conditions cannot be combined using the AND operator and only the following conditions are permitted in a TIL clause (refer to Chap. Condition Handlers for a complete description of these conditions): AT VIA TIME n AFTER START -- n is a time in milliseconds TIME n BEFORE END DISTANCE n AFTER START -- in cartesian movement only DISTANCE n BEFORE END -- n is a distance in millimiters DISTANCE n AFTER VIA DISTANCE n BEFORE VIA PERCENT n AFTER START -- in joint movement only PERCENT n BEFORE END -- n is a number expressing a percentage -- digital port events digital port states
4.1.4.3
WITH Clause
The optional WITH clause can designate temporary values for predefined motion variables or enable condition handlers for the duration of the motion. The WITH clause affects only the motion caused by the MOVE statement. Previous motions or those that follow are not affected. The syntax of the WITH clause is as follows: WITH designation <, designation>... where the designation is one of the following: || motion_variable = value | CONDITION[n] || The following predefined motion variables can be used in a WITH clause of a MOVE
pr-0-0-pdl_03.fm
4-8
00/0607
Motion Control statement (refer to Chap. Predefined Variables List for their meanings): $ARM_ACC_OVR $BASE $COLL_TYPE $FLY_TRAJ $JNT_OVR $ORNT_TYPE $PROG_DEC_OVR $SENSOR_ENBL $SFRAME $STRESS_PER $TOL_FINE $TOOL_FRICTION $TOOL_RMT $WEAVE_NUM $ARM_DEC_OVR $CNFG_CARE $FLY_DIST $FLY_TYPE $LIN_SPD $PAR $PROG_SPD_OVR $SENSOR_TIME $SING_CARE $TERM_TYPE $TOOL $TOOL_INERTIA $TURN_CARE $WEAVE_TYPE $ARM_LINKED $AUX_OFST $COLL_SOFT_PER $FLY_PER $JNT_MTURN $MOVE_TYPE $PROG_ACC_OVR $ROT_SPD $SENSOR_TYPE $SPD_OPT TOL_COARSE $TOOL_CNTR $TOOL_MASS $UFRAME $WV_AMP_PER
ARM_SENSITIVITY $ARM_SPD_OVR
Any condition handler that has been defined can be included in a WITH clause. The condition handler is enabled when the motion starts or restarts and disabled when the motion is suspended, canceled, or completed. For further information on condition handlers, refer to Chap. Condition Handlers. For example: MOVE TO p1 WITH $PROG_SPD_OVR = 50 MOVE TO p1 WITH CONDITION[1] MOVE TO p1 WITH $PROG_SPD_OVR = 50, CONDITION[1] If a statement needs more than a single line, commas can be used to end a line after a WITH designation. Each new line containing a WITH clause begins with the reserved word WITH and the reserved word ENDMOVE must be used to indicate the end of the statement. For example: MOVE TO p1 WITH $PROG_SPD_OVR = 50, $MOVE_TYPE = LINEAR, WITH CONDITION[1], CONDITION[2], CONDITION[3], WITH $TOOL = drive_tool, ENDMOVE The WITH clause associated to the $PAR predefined variable implements a particular way of writing MOVE statements, called move with $PAR. Refer to the $PAR description present in Chap. Predefined Variables List for further details.
4.1.5
SYNCMOVE Clause
PDL2 allows two arms to be moved simultaneously using the SYNCMOVE clause. This is called a time synchronized move since the arms start and stop together. For example:
pr-0-0-pdl_03.fm
00/0607
4-9
Motion Control
MOVE ARM[1] TO part SYNCMOVE ARM[2] TO front The SYNCMOVE clause cannot be used with a Motion along a PATH statement. The optional WITH clause can be included as part of the SYNCMOVE clause. The condition handlers included in the WITH clauses will apply to the arm specified in the MOVE or SYNCMOVE clause. For example: MOVE ARM[1] TO part, TIL $DIN[1]+, TIL DISTANCE 100 BEFORE END, WITH CONDITION[1] SYNCMOVE ARM[2] TO front, WITH CONDITION[2], ENDMOVE
When the ADVANCE clause is used, it must be placed in the MOVE section and not the SYNCMOVE section. If an arm is not specified in the SYNCMOVE clause, $SYNC_ARM is used. Refer to the Motion Programming manual (chapter 6 - Synchronous Motion (optional feature)) for further information on synchronized motion.
4.1.6
For example: MOVE TO a MOVEFLY TO b ADVANCE MOVE TO c Fig. 4.6 - MOVEFLY Between two Cartesian Motions shows the MOVEFLY example.
pr-0-0-pdl_03.fm
4-10
00/0607
Motion Control
Fig. 4.6
The predefined variable $FLY_TYPE is used to control the speed of the arm during the fly motion. If the predefined variable $FLY_TYPE is set to FLY_NORM (normal fly), the speed of the arm will vary during fly. The FLY_CART modality provides a method of achieving constant speed with an optimal trajectory between two cartesian motions. This option is explained in detail in the Motion Programming manual. The predefined variable, $FLY_PER, can be used to reduce the time in fly and to bring the trajectory closer to the taught position. The predefine variable $FLY_PER only effects the arm speed if the predefine variable $FLY_TYPE is set to FLY_NORM. When $FLY_PER is in effect, the fly motion will begin at the start of normal deceleration for the motion plus a time equal to 100% minus the percentage specified in $FLY_PER. For example, if the value of $FLY_PER is 100%, the fly begins at the start of deceleration of the fly motion. If $FLY_PER is 75%, then fly will begin after 25% of the decleration is finished (75% will be combined with the next motion.) For more information refer to the Motion Programming manual. When normal non-fly motions are used (MOVE), the stopping characteristics of the motion are determined by the predefined variable, $TERM_TYPE. The FLY option must be specified using MOVEFLY. It cannot be specified in the SYNCMOVE section. The program editor will replace SYNCMOVEFLY with SYNCMOVE in the event of a mismatch.
4.1.7
pr-0-0-pdl_03.fm
00/0607
4-11
Motion Control up the next motion. For correct synchronization between the MOVE statements and other statements, use the optional WITH clause to activate condition handlers. Two examples follow. To set an output when the fly finishes, use a WITH clause on the MOVEFLY statement to activate a condition handler that sets the output at the end of a fly motion. PROGRAM flycond1 VAR p1, p2, p3 : POSITION BEGIN $DOUT[17] := FALSE CONDITION[1] : WHEN AT END DO $DOUT[17] := TRUE ENDCONDITION p1 := POS(400, -400, 1900, -93, 78, -62, ) p2 := POS(400, 400, 1900, -92, 79, -64, ) p3 := POS(800, 400, 1900, -92, 79, -64, ) MOVE LINEAR TO p1 MOVEFLY LINEAR TO p2 ADVANCE WITH CONDITION[1] MOVE LINEAR TO p3 END flycond1 The output will not be set at p2 because the MOVEFLY does not reach this position. Instead, the output will be set where the fly movement ends. To set an output when the fly starts, use a WITH clause on the next MOVE statement to activate a condition handler that sets the output at the start of a fly motion. For example: PROGRAM flycond2 VAR p1, p2, p3 : POSITION BEGIN $DOUT[17] := FALSE CONDITION[1] : WHEN AT START DO $DOUT[17] := TRUE ENDCONDITION p1 := POS(400, -400, 1900, -93, 78, -62, ) p2 := POS(400, 400, 1900, -92, 79, -64, ) p3 := POS(800, 400, 1900, -92, 79, -64, ) MOVE LINEAR TO p1 MOVEFLY LINEAR TO p2 ADVANCE MOVE LINEAR TO p3 WITH CONDITION[1] END flycond2 The output will not be set at p2, but at the beginning of the fly motion.
4.1.7.1
4-12
00/0607
Motion Control
$SEG_STRESS_PER $SEG_TERM_TYPE
If the node definition does not include a predefined node field, the value specified in a WITH clause is used at each node. If a value is also not specified in a WITH clause, the current value of the corresponding predefined motion variable is used. For example: PROGRAM pth_motn TYPE lapm_pth = NODEDEF $MAIN_POS $SEG_OVR . . . ENDNODEDEF VAR pth1 : PATH OF lapm_pth
pr-0-0-pdl_03.fm
00/0607
4-13
Motion Control
BEGIN . . . $TERM_TYPE := COARSE $MOVE_TYPE := LINEAR MOVE ALONG pth1 WITH $SEG_TERM_TYPE = FINE . . . END pth_motn In the above example, the segment override ($SEG_OVR) used in each path segment will be obtained from each path node since this field is included in the node definition. The termination type used in each path segment will be FINE due to the WITH clause. However, the termination type of the last node segment will be COARSE since the value of $TERM_TYPE applies to the last path node. The motion type ($MOVE_TYPE) will be LINEAR for the entire path since $MOVE_TYPE is not a field in the node definition and it is not specified in the WITH clause. The $MAIN_POS, $MAIN_JNTP, and $MAIN_XTND fields indicate the main destination of a path segment. A node definition can include only one of the $MAIN_ predefined fields. The particular one chosen indicates the data type of the main destination. In order to use a path in the MOVE ALONG statement, the node definition must include a main destination predefined field. The $CNFG_CARE, $LIN_SPD, $MOVE_TYPE, $ORNT_TYPE, $ROT_SPD, $SING_CARE, $SPD_OPT, $TURN_CARE, and $WEAVE_NUM fields have the same meaning as the predefined motion variables with the same name. Including them in a node definition permits these motion parameters to be changed for each path segment. The $SEG_TERM_TYPE, $SEG_FLY_TYPE, and $SEG_FLY_PER fields have meanings corresponding to the non-segment predefined motion variables. The difference is that they apply to each path segment. The corresponding non-segment predefined motion variables apply to the last node only. If these fields are not included in the node definition and the WITH clause, the corresponding non-segment predefined motion variable is used. For example: PROGRAM pth_motn TYPE lapm_pth = NODEDEF $MAIN_POS $SEG_OVR . . . ENDNODEDEF VAR pth1 : PATH OF lapm_pth BEGIN . . . $TERM_TYPE := FINE MOVE ALONG pth1 . . . END pth_motn In the above shown example, since $SEG_TERM_TYPE is not a field of lapm_pth and it is not included in a WITH clause, the value of $TERM_TYPE (FINE) is used at each segment of the path motion. The $SEG_FLY field has the same meaning as the FLY option on the MOVE keyword. It is a boolean and if the value is TRUE, motion to the next node will FLY. This field does not apply to the last node since the FLY option on the MOVE ALONG statement is used.
pr-0-0-pdl_03.fm
4-14
00/0607
Motion Control The $SEG_REF_IDX and $SEG_TOOL_IDX fields are integers representing indices into the FRM_TBL field of the path. $SEG_REF_IDX is the index of a frame that can be used to apply an offset to the target position ($MAIN_POS). This frame is added to the target of the node before being executed. If $UFRAME is set, it is also added to the result as it happens in every move statement see Fig. 4.7 - Effects of $SEG_REF_IDX definition.
Fig. 4.7
If $SEG_REF_IDX is not included in the node definition or if the value of $SEG_REF_IDX is zero, no reference frame is applied to the path segment. $SEG_TOOL_IDX is the index of the frame to be used as the tool frame of the path segment. If $SEG_TOOL_IDX is not included in the node definition or if the value of $SEG_TOOL_IDX is zero, the value of $TOOL is used. A PATH variable contains an array field of 32 INTEGER values called COND_TBL. This table is used for spcifying which condition handler will be used during the path motion. For associating a certain condition to a PATH node, the predefined fields $COND_MASK or $COND_MASK_BACK must be present in the PATH node definition. $COND_MASK is used for forward motion to the node and $COND_MASK_BACK is used for backward motion in the node. These INTEGER fields are bit masks where the individual bits of the $COND_MASK and $COND_MASK_BACK value correspond to indices into the COND_TBL array. If a bit is turned on, the condition handler indicated by the corresponding element in the COND_TBL will be enabled for the path segment and automatically disabled when the path segment terminates. For example: PROGRAM pth TYPE nd = NODEDEF $MAIN_POS $MOVE_TYPE
pr-0-0-pdl_03.fm
00/0607
4-15
Motion Control
$COND_MASK $COND_MASK_BACK i : INTEGER b : BOOLEAN ENDNODEDEF -- The nodes of this path should either be taught or NODE_APPended VAR p : PATH OF nd BEGIN CONDITION[10]: WHEN TIME 10 AFTER START DO ...... ENDCONDITION CONDITION[30] : WHEN TIME 20 BEFORE END DO ...... ENDCONDITION CONDITION[20] : WHEN AT START DO ...... ENDCONDITION ...... p.COND_TBL[1] := 10 -- Initialization of COND_TBL p.COND_TBL[2] := 15 p.COND_TBL[3] := 20 p.NODE[1].$COND_MASK := 5 p.NODE[4].$COND_MASK_BACK := 2 CYCLE .... MOVE ALONG p -- move forward MOVE ALONG p[5..1] -- move backward .... END pth In the example above, node 1 has the $COND_MASK set to 5. Bit 1 and 3 form the value of 5. Therefore, for node 1, the conditions specified in element 1 and 3 of COND_TBL (condition 10 and 20) will be used when moving forward from node 1 to node 2. Node 4 has the $COND_MASK_BACK set to 2. This means that the condition 15 specified in COND_TBL element 2 will be used when moving backward from node 5 to node 4. Note that the condition handler that are enabled are those corresponding to the program executing the MOVE ALONG statement and not the program containing the MOVE ALONG statement. Refer also to Chap. Condition Handlers. The $SEG_WAIT field is a boolean indicating whether or not processing of the path should be suspended until the path is signalled. This field is used to obtain synchronization between path segment processing and other aspects of the application such as sensor detection, mutual exclusion, etc. If the value of the $SEG_WAIT field is FALSE, path processing is not suspended at that node. If the value is TRUE, motion for that node will complete but processing of following nodes will be suspended until the path is signalled. The $SEG_OVR field indicates the acceleration, deceleration, and speed override for the path segment in a similar way as the $PROG_ACC_OVR, $PROG_DEC_OVR and $PROG_SPD_OVR variables. If $SEG_OVR is not included in the node definition and the WITH clause of the MOVE ALONG statement, the values of $PROG_ACC_OVR,
pr-0-0-pdl_03.fm
4-16
00/0607
Motion Control $PROG_DEC_OVR, and $PROG_SPD_OVR are used for each segment of the path motion. The $SEG_TOL field indicates the tolerance for the path segment. This has the same meaning as $TOL_FINE or $TOL_COARSE depending on whether the termination type of the path segment is FINE or COARSE. This field does not apply to the last node since the $TOL_FINE or $TOL_COARSE will be used based on the value of $TERM_TYPE which is also applied to the last node. The $SEG_DATA field indicates whether the data of the node should be used for the last node segment. If the value is TRUE, the values of the $SEG_TERM_TYPE, $SEG_FLY_TYPE, $SEG_FLY_PER, $SEG_FLY, and $SEG_TOL fields are used for the last node segment instead of the values of the corresponding predefined variables.
4.2.1
ARM Clause
The optional arm clause designates which arm is to be moved in the path motion. The arm applies to the main destination field of the nodes. For programs that control only a single arm, no designation is necessary. The optional arm clause is used as follows: MOVE ARM[1] ALONG pth The designated arm is used for the entire MOVE ALONG statement. Any temporary values assigned in a WITH clause of the statement are also applied to the designated arm. If an arm clause is not included in the MOVE ALONG statement, the default arm is used for the main destination. The programmer can designate a default arm as a program attribute in the PROGRAM statement, as follows: PROGRAM armtest PROG_ARM=1 . . . BEGIN MOVE ALONG pth MOVE ARM[2] ALONG pth END armtest
If an arm clause is not included and a default arm has not been set up for the program, the value of the predefined variable $DFT_ARM is used.
4.2.2
pr-0-0-pdl_03.fm
00/0607
4-17
Motion Control
[n..m]
Motion proceeds to node n of the path, then to each successive node until node m of the path is reached. Backwards motion is allowed by specifying node n greater than node m. Motion proceeds to node n of the path, then to each successive node until the end of the path is reached.
[n..]
This format allows a path to be executed in any order desired. For example, MOVE ALONG pth[3..10] -- moves along pth from node 3 to 10 MOVE ALONG pth[5..] -- moves along pth starting at node 5 MOVE ALONG pth[15..8] -- moves backwards along pth from node 15 to 8
4.2.3
Optional Clauses
Optional clauses can be used to provide more detailed instructions for the path motion. They include the following: ADVANCE Clause WITH Clause
4.2.3.1
ADVANCE Clause
The optional ADVANCE clause takes advantage of the fact that the motion interpolator and the program interpreter run in parallel. The interpreter continues to run the program, even if current motion is still in progress. When ADVANCE is specified, the interpreter continues program execution as soon as the motion starts. When ADVANCE is not specified, the interpreter waits for the motion to be completed before continuing execution. For path motion this means execution will not continue until the last node has been processed. When ADVANCE is specified, program execution can continue up to the next programmed motion for the same arm or the next suspendable statement. For example: MOVE ALONG pth_1 OPEN HAND 1 -- executed after pth_1 motion is completed MOVE ALONG pth_1 ADVANCE OPEN HAND 1 -- executed while pth_1 motion is in progress MOVE ALONG pth_2 -- executed after pth_1 motion is completed
4.2.3.2
WITH Clause
The optional WITH clause can designate temporary values for predefined motion variables for the duration of the motion. The WITH clause affects only the motion caused by the MOVE ALONG statement. Previous motions or those that follow are not affected. The syntax of the WITH clause is as follows:
pr-0-0-pdl_03.fm
4-18
00/0607
Motion Control
WITH designation <, designation>... where designation is: motion_variable = value The following predefined motion variables can be used in a WITH clause of a MOVE ALONG statement (refer to the Chap. Predefined Variables List for their meanings): $ARM_ACC_OVR $AUX_OFST $COLL_TYPE $COND_MASK $FLY_PER $JNT_MTURN $MOVE_TYPE $SEG_DATA $SEG_FLY_PER $SEG_OVR $SEG_TERM_TYPE $SEG_WAIT $STRESS_PER $TOL_FINE $TOOL_MASS $WEAVE_TYPE The WITH clause affects only the motion caused by the MOVE ALONG statement. The results of setting the segment related predefined variables will be seen at each path segment only if the corresponding predefined node field is not included in the path node definition. For example: MOVE ALONG pth WITH $SEG_TERM_TYPE = FINE only effects the termination type for each path segment if $SEG_TERM_TYPE is NOT a field of pth nodes. The non-segment related motion variables included in the WITH clause of a MOVE ALONG statement will only be seen at the last path segment. For example: MOVE ALONG pth WITH $TERM_TYPE = FINE only affects the termination type for the move to the last node in the path. To change any of the motion parameters within a path, the appropriate predefined node field should be used. If a statement needs more than a single line, commas can be used to end a line after a WITH designation. Each new line containing a WITH clause begins with the reserved word WITH and the reserved word ENDMOVE must be used to indicate the end of the statement. For example: MOVE ALONG pth WITH $SEG_OVR = 50,
pr-0-0-pdl_03.fm
$ARM_DEC_OVR $BASE $COND_MASK $FLY_TRAJ $JNT_OVR $ORNT_TYPE $SEG_FLY $SEG_FLY_TRAJ $SEG_REF_IDX $SEG_TOL $SING_CARE $TERM_TYPE $TOOL $TURN_CARE
$ARM_SPD_OVR $CNFG_CARE $COND_MASK_BACK $FLY_TYPE $LIN_SPD $ROT_SPD $SEG_FLY_DIST $SEG_FLY_TYPE $SEG_STRESS_PER $SEG_TOOL_IDX $SPD_OPT $TOL_COARSE $TOOL_CNTR $WEAVE_NUM
$COND_MASK_BACK $FLY_DIST
00/0607
4-19
Motion Control
4.2.4
4.3.1
4-20
00/0607
Motion Control
CANCEL CURRENT SEGMENT FOR ALL CANCEL ALL and CANCEL ALL SEGMENT cause both the current motion/segment and any pending motions/segments to be canceled. Optionally, the programmer can specify that all motion/segment is to be canceled for the default arm, a list of arms, or for all arms. CANCEL CANCEL CANCEL CANCEL CANCEL CANCEL ALL ALL ALL ALL ALL ALL
SEGMENT FOR ARM[1], ARM[2] SEGMENT FOR ARM[3] FOR ALL SEGMENT FOR ALL
4.3.2
pr-0-0-pdl_03.fm
00/0607
4-21
Motion Control
4.3.3
4.3.4
HOLD Statement
The HOLD statement places running holdable programs in the ready state and causes motion to decelerate to a stop. The HOLD statement works exactly like the HOLD button on the TP and operation panel.
4-22
00/0607
Motion Control The DETACH statement terminates exclusive motion control of the default arm, a list of arms, or all arms currently attached by the program. DETACH ARM DETACH ARM[1], ARM[2] DETACH ARM ALL CANCEL motion statements can be issued by any program while the arm is attached.
The following types of hands can be controlled: Single Line OPEN sets the output line to the active value; CLOSE sets the output line to the inactive value; RELAX is the same as CLOSE.
Dual Line OPEN sets line 1 to the active value and line 2 to the inactive value; CLOSE sets line 2 to the active value and line 1 to the inactive value; RELAX sets lines 1 and 2 to the inactive value.
Pulse
pr-0-0-pdl_03.fm
00/0607
4-23
Motion Control OPEN sets line 1 to the active value, waits a delay time, and sets line 1 to the inactive value; CLOSE sets line 2 to the active value, waits a delay time, and sets line 2 to the inactive value; RELAX is the same as CLOSE.
Step OPEN sets line 1 to the active value, waits a delay time, and sets line 2 to the active value; CLOSE sets line 2 to the inactive value, waits a delay time, and sets line 1 to the inactive value; RELAX is the same as CLOSE.
pr-0-0-pdl_03.fm
4-24
00/0607
5.
5.1 General
Current chapter explains the following types of port arrays used in PDL2: digital, group, flexible, and analog port arrays, configured by the user to accommodate specific application I/O (par. 5.2 User-defined and Appl-defined Port I/O on page 5-4); system-defined port arrays, internally mapped for system devices such as operator devices, arms, and timers (par. 5.3 System-defined Port Arrays on page 5-5); shared memory port arrays used by PDL2 programs to communicate one another (par. 5.4 Shared Memory Port Arrays on page 5-16); user-defined port arrays used for user-defined device access (par. 5.6 User-defined Device Access on page 5-18).
Tab. 5.1 - Port Arrays lists the I/O-related port arrays used by PDL2.
pr-0-0-pdl_05.fm
00/0607
5-1
Depending on the type of array, each item in a port array represents a particular input or output signal or group of signals, or a shared memory location. For user-defined port arrays, the signal that corresponds to a particular item depends on how the I/O is configured. Also refer to Predefined Variables List chapter for further details about these variables. As with any array, individual items are accessed using an index, as shown in the following examples: FOR n := top TO bottom DO $DOUT[n] := OFF ENDFOR REPEAT check_routine UNTIL $AIN[34] > max body_type := $GIN[3] SELECT body_type OF CASE(1): $GOUT[1] := four_door CASE(2): $GOUT[2] := two_door CASE(3): $GOUT[3] := hatch_back ELSE: type_error ENDSELECT IF $FDIN[21] = ON THEN -- U1 button on programming terminal $FDOUT[21] := ON -- U1 LED on programming terminal ENDIF A program can always obtain the value of a port array. The value received from reading an output port corresponds to the last value that was written to that port. A program can assign values to user-defined output port arrays and the system-defined $FDOUT port array. When the Controller is in PROGR state, additional checks are performed before allowing an output to be set. The additional rules for setting the outputs of a digital, analog or group port are listed below. If any of these conditions are met, the output cannot be set: by an active program;
pr-0-0-pdl_05.fm
5-2
00/0607
INPUT/OUTPUT Port Arrays when executing a statement that sets an output from the PC keyboard (WinC4G Program is active) while the Teach Pendant is out of the cabinet. An exception to this rule exists if a PDL2 program has bit 3 of $PROG_CNFG set to 0; in this case all output settings are allowed. ($PROG_CNFG is a program system variable that defaults to the current value of $CNTRL_CNFG when the program is activated); when executing under the PROGRAM EDIT or the MEMORY DEBUG Commands from the PC video/keyboard (WinC4G Program) and the Teach Pendant is out of the cabinet.
In addition, these outputs cannot be set in AUTO mode with the Teach Pendant out of the cabinet.
Tab. 5.2 - Protection on I/O shows the cases in which the setting of these outputs is allowed or disallowed when operating in PROGR state. Here follow some notes useful for understanding Tab. 5.2 - Protection on I/O: A indicates the operation is allowed, D means disallowed. The position of A or D depends on the variable whose value allows or disallows the setting of the I/O. For example, if A is below $CNTRL_CNFG, this means that the operation described at that line is based on the value of that variable. If only a A or D is present, the operation is always allowed/disallowed independent of the value of the variable. It remains in the column to indicate that the variable can determine the permission of the operation in other circumstances. When A or D is in the middle of the box, it means that the operation is independent from the value of $PROG_CNFG and $CNTRL_CNFG. When the space is blank, it means that the protection is not related to the corresponding variable ($PROG_CNFG or $CTRL_CNFG); (1): Case of Operations Panel switch turned to T1, TP out of cabinet. Operations performed from the PC keyboard (WinC4G tool active); (2): Case of Operations Panel switch turned to T1, TP out of cabinet. Operations performed from TP; (3): Case of Operations Panel switch turned to T1, TP on cabinet. Operations performed from the PC keyboard (WinC4G tool active); (*): This situation occurs when, starting with the TP out of the cabinet in PROGR state, the Operations Panel switch is turned to REMOTE without putting the TP on the cabinet. This situation is reported in bit 7 of the $SYS_STATE system variable;
pr-0-0-pdl_05.fm
00/0607
5-3
INPUT/OUTPUT Port Arrays Execute is the command available at the system menu for executing a PDL2 statement at the command level; SetOutputF is an abbreviation of the SetOutputForce/Unforce commands and identifies an example of all the commands that act on outputs in the system; PDL2 Prog refers to the state when the action on an output is performed from a PDL2 program; PE/MD indicates PROGRAM EDIT and MEMORY DEBUG. This column illustrates what happens when a PDL2 statement that acts on an output is executed when operating in the environments shown; $DOUT indicates a PDL2 statement acting on an output (i.e. $DOUT(XX) := ON); Sys_call indicates a SYS_CALL of a command that acts on an output, for example SYS_CALL(SOFD, 17, T), and not another SYS_CALL such as SYS_CALL(E,$DOUT(17) := T).
5.2.1
5.2.2
5.2.3
5-4
00/0607
INPUT/OUTPUT Port Arrays PDL2 treats them as INTEGER values. For example: IF $GIN[n] > 8 . . . $GOUT[n] := 4 The group of signals can have a size of 1 to 16 bits, where each bit corresponds to an input or output line. Unused bits are treated as zero. For example, where x is ON and o is OFF in an 8-bit group: Group of 8 Signals ooooooox ooooooxo oooooxox ooooxoxx Integer Value 1 2 5 11
Any association between digital and group I/O is done at the system level as part of the user-defined I/O configuration. An input or output port that is associated with a group input or output can be accessed using the $DIN or $DOUT or $IN or $OUT port array. Each $GIN/$GOUT can be composed by a maximum of two groups of the same port type. For example, $GOUT[3] can include $DOUT[3..7] and $DOUT[12..14].
5.2.4
5.2.5
pr-0-0-pdl_05.fm
00/0607
5-5
5.3.1
$SDIN
reserved TP inserted () reserved AUTO selector position T1 selector position reserved T2 selector position DRIVE ON from remote Not DRIVE OFF from remote Start from remote Not Hold from remote U1 from remote U2 from remote U3 from remote U4 from remote reserved REMOTE selector position reserved (*) System CAN signals
33 34 35 36 37 38 39 40 41 42 43 44 45 46
Emergency Stop channel 1 Emergency Stop channel 2 Enabling Device channel 1 Enabling Device channel 2 Safety Gates channel 1 Safety Gates channel 2 General Stop channel 1 General Stop channel 2 State T1 State T2 State AUTO State REMOTE T1 & T2 state relay AUTO & REMOTE state relay
pr-0-0-pdl_05.fm
5-6
00/0607
47 48 49 50 51 52 53 54 55 56 57-96
Contactors are low Power contactors channel 1 Power contactors channel 2 Series of safety contactors channel 1 Series of safety contactors channel 2 Power contactors command channel 1 Power contactors command channel 2 Application contactors are low Monitoring Emergency Stop button TP inserted () reserved (*) Signals for optional IEAK feature Available on any Fieldbus
97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113-144
MOTOR ON 1st rotating table MOTOR ON 2nd rotating table MOTOR ON 3rd rotating table MOTOR ON 4th rotating table No MOTOR OFF 1st rotating table No MOTOR OFF 2nd rotating table No MOTOR OFF 3rd rotating table No MOTOR OFF 4th rotating table Available on user module CAN only No TIMER MOTOR OFF 1st rotating table No TIMER MOTOR OFF 2nd rotating table No TIMER MOTOR OFF 3rd rotating table No TIMER MOTOR OFF 4th rotating table SIK ON 1st rotating table SIK ON 2nd rotating table SIK ON 3rd rotating table SIK ON 4th rotating table reserved Remote Control Fieldbus signals
pr-0-0-pdl_05.fm
00/0607
5-7
154 155..160 161-162 163-164 165 166 167-168 169 170 171 172 173 174 175 176 177-180 181-200 201 202 203 204 205 206 207 208 209-216 217 218-222 223 224 225-226 227-228 229-230 231 232 233-234 235 236 237 238 239 240 241-244
Safety speed Application dependent Output permission channel 1 and 2 RPU electronics OK channel 1 and 2 Output of internal relay Pairing Switch Expansion 1 and 2 presence Expansion Relay Output Expansion Relay Emergency Stop Relay Stop tp wireless Expansion Relay Stop Emergency Stop enable delay Auto Stop enable delay General Stop enable delay Docking Station presence Pairing state code Reserved Last telegram crc ok Timestamp checks ok ESM TX telegram requests TP is paired Reserved Command received from PDO1 Pair switch state Safe block output checked Reserved Signal latch output latched Reserved Automatic state Programming state Wireless Enbl device channel 1 and 2 Wireless Stop TP channel 1 and 2 Wireless Power Enbl channel 1 and 2 EnDev AND AutoSt signals Delayed signals Reserved Wireless stop relay cmd Power cutting relay cmd Emcy stop Ext dup relay cmd Stop exp output relay Power contactor K101 relay cmd Output timesetting mode not 0 State of pairing
pr-0-0-pdl_05.fm
5-8
00/0607
Output ok diagnostic signal Hardware ok diagnostic signal Software ok diagnostic signal All ok diagnostic signal Raw data received from RXPDO2
Note: Application dependent bits are only used after a call, by a PDL2 program, to ON_POS_SET_DIG (followed by ON_POS) or ON_TRAJ_SET_DIG built-in. (*) When Sik devices are present in the System, in order to handle the SIK feature, these signals are reserved by the System for I/O configuration of the Sik device. For further details about Sik device and how to use it, refer to AUX_DRIVES Built-In Procedure in current manual, Use of C4G Controller manual - IO_TOOL Program - IO_INST Program - SETUP Page chapters, Integration guidelines Safeties, I/O, Communications manual. () Note that if the ESM safety module is present, the information related to $SDIN[56] is Wired TP (1 = TP4i, 0 = WiTP)
$SDOUT
1 2 3 4 5..8 9 10 11 12 13 14 15 16 17 18 19 20 21 22-32
Internal DRIVE ON command WiTP pairing available (if ESM safety module is present) reserved Not Alarm to remote reserved DRIVE ON / Not OFF to remote Start / Not Hold in running to remote Not AUTO / REMOTE to remote Teach Enable (DRIVE ON + T1 or T2) / Not Disable to remote U1 to remote (LED) U2 to remote (LED) U3 to remote (LED) U4 to remote (LED) T2 Panel Start Panel reset Local emergency stop System I/O simulated reserved (*) Signals for optional IEAK feature Available on any Fieldbus
33 34
MOTOR ON/OFF STS 1st rotating table MOTOR ON/OFF STS 2nd rotating table
pr-0-0-pdl_05.fm
00/0607
5-9
MOTOR ON/OFF STS 3rd rotating table MOTOR ON/OFF STS 4th rotating table reserved Available on user module CAN only RESTORE 1st rotating table RESTORE 2nd rotating table RESTORE 3rd rotating table RESTORE 4th rotating table reserved reserved (*) System State information
97 98 99 100 101 102 103 104 105 106 107 108 - 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
Standby Jog active Holdable programs running Em/Auto/Gen stop alarm active winC4G on PC connected reserved TP disconnected in PROGR state State selector on T2 Power Failure recovery in progress Teach Pendant on cabinet Enabling device activated reserved State selector on REMOTE State selector on AUTO State selector on T1 Hold request to remote Hold button latched on TP reserved DRIVE OFF to remote DRIVE OFF button latched on reserved TP connected Alarm due to high severity error System in REMOTE Start button pressed System in alarm System in PROGR / AUTO-T System in AUTO / REMOTE System in Hold Drives status reserved
pr-0-0-pdl_05.fm
5-10
00/0607
Remote Status Fieldbus signals 129 130 131 132 133 134 135 136 137 138 139 140 141..144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 Reference position 1 Reference position 2 Reference position 3 Reference position 4 Reference position 5 Reference position 6 Reference position 7 Reference position 8 Collision alarm DSA1 Collision enabled DSA1 Collision alarm DSA2 Collision enabled DSA2 reserved Not alarm DRIVE ON / Not DRIVE OFF Start / Not hold in running REMOTE Teach Enable (DRIVE ON + PROGR or AUTO-T) / Not Disable U1 U2 U3 U4 reserved reserved PROGR mode AUTO-T mode Robot in AUTO / REMOTE Ready for work Heart bit
(*) When Sik devices are present in the System, in order to handle the SIK feature, these signals are reserved by the System for I/O configuration of the Sik device. For further details about Sik device and how to use it, refer to AUX_DRIVES Built-In Procedure in current manual, Use of C4G Controller manual - IO_INST Program - IO_TOOL Program - SETUP Page chapters, Integration guidelines Safeties, I/O, Communications manual - Axes expansion chapter.
5.3.2
pr-0-0-pdl_05.fm
00/0607
5-11
INPUT/OUTPUT Port Arrays REC key that can also be selected using either the Setup Page on TP4i/WiTP or the menus of IDE, PROGRAM EDIT and MEMORY DEBUG environments. The FDOUTs related to the TP cannot be assigned at the PDL2 program level. Some leds are handled ONLY when working in the IDE, I/O Page, PROGRAM EDIT, MEMORY DEBUG, and EZ environments. These are marked with an asterisk in the Element column.
Associated Input
5-12
00/0607
ENTER (**) CUT softkey (**) COPY softkey (**) / softkey (**) S.NXT softkey (**) SRCH softkey (**) PASTE softkey (**) MODE softkey (**) UNDEL softkey (**) DEL softkey (**) PAGE softkey (**) MARK softkey (**) HELP (**) reserved COORD button reserved %+ %reserved +1X +2Y +3Z +4 +5 +6 AUX A+ AUX B+ -1X -2Y -3Z -4 -5 -6 AUX AAUX BEXCL (**) T1 T2 REC MOD softkey (**) BACK RUN softkey (**)
00/0607
5-13
(**) In case of TP4i/WiTP Teach Pendant, these $FDIN/$FDOUT detect variations only if TPINT Page or Virtual Keyboard are active.
Associated Input
5-14
00/0607
$FDOUT[32]*
$FDOUT[33]*
$FDOUT[34]*
$FDOUT[35]*
$FDOUT[36]*
$FDOUT[37]*
(**) In case of TP4i/WiTP Teach Pendant, these $FDIN/$FDOUT detect variations only if TPINT Page or Virtual Keyboard are active.
5.3.3
$HDIN
The $HDIN port array allows a program read-only access to a motion event port. Items in the array correspond to high speed digital input signals. $HDIN is a special port monitored by the motion environment. Any input on one of these lines triggers a hardware interrupt signal. The motion environment reacts according to how the port is set up. For example, it could cause an arm to stop and/or record its current position. The array index for the $HDIN port array corresponds to the DSA board number. The user is responsible for installing the connection from the $HDIN port to detection devices to use with this port. The HDIN_SET and HDIN_READ built-in routines are used for handing the $HDIN from a PDL2 program. Also the $HDIN_SUSP (field of $DSA_DATA) system variable must be considered.
pr-0-0-pdl_05.fm
00/0607
5-15
INPUT/OUTPUT Port Arrays Refer to the BUILT-IN Routines list and Predefined Variables List chapters for further details.
5.3.4
$TIMER
The $TIMER port ARRAY allows a program read and write access to a system timer. The array index corresponds to individual timers. Their values are expressed as INTEGER values measured in milliseconds. The system timers run continuously. $TIMER is accessible by all running programs. The ATTACH statement can be used to disallow read and write access to a timer by other program code. When a timer is attached, only code belonging to the same program containing the ATTACH statement can access the timer. The DETACH statement is used to release exclusive control of a timer. The value of the timer is not changed when it is attached or detached. For more information, refer to the description of the ATTACH & DETACH statements in Statements List chapter. $TIMER values are preserved during Power Failure Recovery: no $TIMER value is lost. A timer overflow generates trappable error 40077.
5.4.1
$BIT
The $BIT port array allows a program access to a bit array, PDL2 treats this as BOOLEAN data. The maximum index value for $BIT port array is 200.
5.4.2
$WORD
The $WORD port array allows a program to access to a word. PDL2 treats this as an INTEGER data, where only the 16th significative bits of each word are meaningful. The first 20 elements of $WORD have predefined meanings of usage and The first 20 elements of $WORD are mapped to specific system inputs and outputs. Note that these $WORDs can be used by PDL2 programs as temporary integer storage locations in read and write access, but some of them are continuously updated by the system. The elements starting at $WORD[21] are available to the user.
pr-0-0-pdl_05.fm
5-16
00/0607
Fig. 5.1
The maximum index value for $WORD port array is 512. As option it is possible to map $WORDs to I/O signals related to fieldbus (Profibus, Interbus, DeviceNet), master ad slaves.
pr-0-0-pdl_05.fm
00/0607
5-17
5.5.0.1
Cold Start
When a cold start is issued from the controller, using CONFIGURE CNTRLER RESTART COLD command (CCRC), the system will come back up as indicated below. $DIN/$DOUT/$IN/$OUT/$FMI/$FMO $BIT $AIN/$AOUT $GIN/$GOUT $WORD PDL2 program cleared cleared cleared cleared cleared deactivated and erased from memory
Note that forced $DIN, $DOUT, $IN, $OUT, $GIN, $GOUT, $AIN, $AOUT, $FMI, $FMO are cleared also if they were previously forced.
5.5.0.2
Power Failure
When a power failure occurs, the system will return as indicated below. $DIN/$DOUT/$IN/$OUT/$FMI/$FMO $BIT $AIN/$AOUT $GIN/$GOUT $WORD PDL2 program cleared retentive bits (1-512) frozen, non-retentive bits cleared frozen frozen frozen saved (a non-holdable program continues where it left off; for an holdable program, you must also turn the drives ON and press the START key to resume motion) frozen
$TIMER
Forced $DIN, $DOUT, $IN, $OUT, $AIN, $AOUT, $GIN, $GOUT, $FMI, $FMO are frozen upon a power failure.
pr-0-0-pdl_05.fm
5-18
00/0607
INPUT/OUTPUT Port Arrays $USER_LEN $PROG_UBIT $PROG_UBYTE $PROG_UWORD $PROG_ULONG $PROG_UADDR $PROG_ULEN
5.6.1
$USER_BIT
The $USER_BIT port array allows a program to access bits in memory at an address defined by the user. PDL2 treats this variable as an array of BOOLEAN data. The starting address from which bits are counted is specified in $USER_ADDR [1]. Note that the bits numbering considers the byte in memory to which each bit belongs. For example, $USER_BIT[4] is the 4th bit, starting from the right, inside the first byte respect to the address specified in $USER_ADDR[1]; $USER_BIT[10] is the 2nd bit, starting from the right, of the second byte respect to the address specified in $USER_ADDR[1].
5.6.2
$USER_BYTE
The $USER_BYTE port array allows a program to access bytes in memory at an address defined by the user. PDL2 treats this variable as an array of INTEGER data.
5.6.3
$USER_WORD
The $USER_WORD port array allows a program to access words (2 bytes) in memory at an address defined by the user. PDL2 treats this variable as an array of INTEGER data.
5.6.4
$USER_LONG
The $USER_LONG port array allows a program to access longwords (4 bytes) in memory at an address defined by the user. PDL2 treats this variable as an array of INTEGER data. A precise sequence of operations need to be followed for correctly using these variables. Two other predefined variables must be considered: $USER_ADDR and $USER_LEN. Before using $USER_BIT, $USER_BYTE, $USER_WORD, $USER_LONG, the corresponding $USER_ADDR and $USER_LEN element must be properly initialized in order to determine the range of memory that user programs are allowed to access.
5.6.5
$USER_ADDR
It is an array of four elements where each one defines the starting memory address for: $USER_ADDR[1] : starting memory address for $USER_BIT $USER_ADDR[2] : starting memory address for $USER_BYTE $USER_ADDR[3] : starting memory address for $USER_WORD
pr-0-0-pdl_05.fm
00/0607
5-19
5.6.6
$USER_LEN
It is an array of four elements where each one defines the length of memory for each: $USER_LEN[1] : length of memory for $USER_BIT $USER_LEN[2] : length of memory for $USER_BYTE $USER_LEN[3] : length of memory for $USER_WORD $USER_LEN[4] : length of memory for $USER_LONG Depending on the user-defined port array, the index defines a different offset respect to the first array element. For example, $USER_BYTE[5] will access the fifth byte starting from $USER_ADDR[2]; $USER_LONG[5] will access to the fifth longword starting from $USER_ADDR[4]. If, for example, a portion of 100 bytes of memory need to be accessed starting from the address defined in variable adr_var, the PDL2 program should be structured like: PROGRAM example NOHOLD VAR int_var, adr_var : INTEGER VAR bool_var : BOOLEAN BEGIN -- assign the memory address to adr_var adr_var := ..... -- set the starting address and length of memory for BYTE -- memory access $USER_LEN[2] := 100 $USER_ADDR[2] := adr_var .... -- read the first byte from address adr_var int_var := $USER_BYTE[1] -- read the fifth byte at address adr_var int_var := $USER_BYTE[5] -- write a value in the third byte respect to adr_var $USER_BYTE[3] :=25 -- set the starting address and length of memory for BIT -- memory access $USER_ADDR[1] := adr_var $USER_LEN[1] := 100 -- access to the fifth bit starting from adr_var address bool_var := $USER_BIT[5] END example The previously described user-defined port arrays are available to the entire system and any PDL2 program can use them. This means that multiple programs can contemporarely access these variables and it is therefore important to avoid interferences in memory access. If for example one program assigns a certain value to $USER_ADDR[2] and then another program defines it again with another value, the first program will access to a different memory location when using $USER_BYTE. For solving this kind of problems, another set of user-defined port array variables can be used:
pr-0-0-pdl_05.fm
5-20
00/0607
5.6.7
$PROG_UBIT
The $PROG_UBIT port array allows a program to access bits in memory at an address defined by the user. PDL2 treats this variable as an array of BOOLEAN data. The starting address from which bits are counted is specified in $PROG_UADDR[1]. Note that the bits numbering considers the byte in memory to which each bit belongs to. For example, $PROG_UBIT[4] is the 4th bit, starting from the right, inside the first byte respect to the address specified in $PROG_UADDR[1]; $PROG_UBIT[10] is the 2nd bit, starting from the right, of the second byte respect to the address specified in $PROG_UADDR[1].
5.6.8
$PROG_UBYTE
It is used for accessing bytes in memory at an address defined by the user. PDL2 treats this variable as an array of INTEGER data.
5.6.9
$PROG_UWORD
It is used for accessing words (2 bytes) in memory at an address defined by the user. PDL2 treats this variable as an array of INTEGER data.
5.6.10
$PROG_ULONG
It is used for accessing longwords (4 bytes) in memory at an address defined by the user. PDL2 treats this variable as an array of INTEGER data. The difference respect to $USER_xxx predefined set of variables is that the starting address and the length of memory that can be accessed with $PROG_Uxxx variables is local to programs. Each PDL2 program has its own $PROG_UADDR and $PROG_ULEN and programs cannot interfere each other in the definition of these variables:
5.6.11
$PROG_UADDR
It is an array of four elements where each one defines the starting memory address for: $PROG_UADDR[1] : starting memory address for $PROG_UBIT $PROG_UADDR[2] : starting memory address for $PROG_UBYTE $PROG_UADDR[3] : starting memory address for $PROG_UWORD $PROG_UADDR[4] : starting memory address for $PROG_ULONG
5.6.12
$PROG_ULEN
It is an array of four elements where each one defines the length of memory for: $PROG_ULEN[1] : length of memory for $PROG_UBIT $PROG_ULEN[2] : length of memory for $PROG_UBYTE $PROG_ULEN[3] : length of memory for $PROG_UWORD $PROG_ULEN[4] : length of memory for $PROG_ULONG Also for this set of variables it is necessary to first define the starting address and length before using $PROG_UBIT, $PROG_UBYTE, $PROG_UWORD, $PROG_ULONG. Also refer to Predefined Variables List chapter.
pr-0-0-pdl_05.fm
00/0607
5-21
pr-0-0-pdl_05.fm
5-22
00/0607
Execution Control
6.
EXECUTION CONTROL
Current chapter describes PDL2 statements that control the order in which statements are executed within a program and the order in which multiple programs are executed. Statements that control execution within a program are called Flow Control Statements. The following Flow Control Statements are available: IF Statement SELECT Statement FOR Statement WHILE Statement REPEAT Statement GOTO Statement
It is strongly recommended to avoid using cycles in the program which stress too much the CPU. For example, REPEAT..UNTIL cycle with the UNTIL condition which is always FALSE (so that the cycle is always releated) and WAIT FORs inside which condition is always true. A simplified representation of such situation is : vb_flag := TRUE vb_flag2 := FALSE REPEAT WAIT FOR vb_flag -- condition always true UNTIL vb_flag2 -- infinite loop Cycles like this can cause a nested activity of the processes in the system software making it difficult to get the CPU by low priority tasks. If this situation lasts for a long period, the error 65002-10 : system error Par 2573 can occur. It is recommended, in this case, to change the logic of the program. Statements that control execution of entire programs are called Program Control Statements. The following Program Control Statements are available: ACTIVATE Statement PAUSE Statement UNPAUSE Statement DEACTIVATE Statement CYCLE and EXIT CYCLE Statements DELAY Statement WAIT FOR Statement
pr-0-0-pdl_06.fm
00/0607
6-1
6.1.1
IF Statement
The IFstatement allows a program to choose between two possible courses of action, based on the result of a BOOLEAN expression. If the expression is TRUE, the statements following the IF clause are executed. Program control is then transferred to the statement following the ENDIF. If the expression is FALSE, the statements following the IF clause are skipped and program control is transferred to the statement following the ENDIF. Fig. 6.1 - IF Statement Execution shows the execution of an IF statement. An optional ELSE clause, placed between the last statement of the IF clause and the ENDIF, can be used to execute a series of statements if the BOOLEAN expression is FALSE. Fig. 6.2 - ELSE Clause Execution shows the execution of an IF statement with the optional ELSE clause. The syntax for an IF statement is as follows: IF bool_exp THEN <statement>... <ELSE <statement>...> ENDIF
pr-0-0-pdl_06.fm
6-2
00/0607
Execution Control
Fig. 6.1
- IF Statement Execution
Fig. 6.2
Any executable PDL2 statements can be nested inside of IF or ELSE clauses, including other IF statements. Examples of the IF statement: IF car_num =3 THEN num_wheels :=4 ENDIF
pr-0-0-pdl_06.fm
00/0607
6-3
Execution Control
6.1.2
SELECT Statement
The SELECT statement allows a program to choose between several alternatives, based on the result of an INTEGER expression. Each of these alternatives is referred to as a case. When the INTEGER expression is evaluated, it is compared to the INTEGER value of each case, looking for a match. When a match is found, the statements corresponding to that case are executed and program control transfers to the statement following the ENDSELECT statement. Any remaining cases are skipped. Fig. 6.3 - SELECT Statement Execution shows the execution of a SELECT statement.
Fig. 6.3
pr-0-0-pdl_06.fm
6-4
00/0607
Execution Control An optional ELSE clause, placed between the last case and the ENDSELECT statement, can be used to execute a series of statements if the INTEGER expression does not match any of the case values. Without this ELSE clause, a failure to match a case value results in an error. The syntax for a SELECT statement is as follows: SELECT int_exp OF CASE (int_val <, int_val>...): <statement>... <CASE (int_val <, int_val>...): <statement>... >... <ELSE: <statement>...> ENDSELECT The INTEGER values in each case can be predefined or user-defined constants or literals. Expressions are not allowed. In addition, the same INTEGER value cannot be used in more than one case. Example of a SELECT statement: SELECT tool_type OF CASE (1): $TOOL := utool_weld style_weld CASE (2): $TOOL := utool_grip style_grip CASE (3): $TOOL := utool_paint style_paint ELSE: tool_error ENDSELECT
6.1.3
FOR Statement
The FOR statement is used when a sequence of statements is to be repeated a known number of times. It is based on an INTEGER variable that is initially assigned a starting value and is then incremented or decremented each time through the loop until an ending value is reached or exceeded. The starting, ending and step values are specified as INTEGER expressions. Fig. 6.4 - FOR Statement Execution shows the execution of a FOR statement.
Before each loop iteration, the value of the INTEGER variable is compared to the ending value. If the loop is written to count up, from the starting value TO the ending value, then a test of less than or equal is used. If this test initially fails, the loop is skipped. If the STEP value is one, the loop is executed the absolute value of (the ending value - the starting value + 1) times.
pr-0-0-pdl_06.fm
00/0607
6-5
Execution Control If the loop is written to count down, from the starting value DOWNTO the ending value, a test of greater than or equal is used. If this test initially fails, the loop is skipped. If the STEP value is one, the loop is executed the absolute value of (the ending value - the starting value - 1) times.
Even if the starting and ending values are equal, the loop is still executed one time
An optional STEP clause can be used to change the stepping value from one to a different value. If specified, the INTEGER variable is incremented or decremented by this value instead of by one each time through the loop. The STEP value, when using either the TO or DOWNTO clause, should be a positive INTEGER expression to ensure that the loop is interpreted correctly.
Fig. 6.4
The syntax of a FOR statement is as follows: FOR int_var := start_val || TO | DOWNTO || end_val <STEP step_val> DO <statement>... ENDFOR Example of a FOR statement:
pr-0-0-pdl_06.fm
6-6
00/0607
Execution Control
FOR test := 1 TO num_hoses DO IF pressure[test] < 170 THEN WRITE(Low pres. in hose #, test, ENDIF ENDFOR
6.1.4
WHILE Statement
The WHILE statement causes a sequence of statements to be executed as long as a BOOLEAN expression is true. If the BOOLEAN expression is FALSE when the loop is initially reached, the sequence of statements is never executed (the loop is skipped). Fig. 6.5 - WHILE Statement Execution shows the execution of a WHILE statement.
Fig. 6.5
The syntax for a WHILE statement is as follows: WHILE bool_exp DO <statement>... ENDWHILE Example of a WHILE statement: WHILE num < num_errors DO IF priority_index[num] < 2 THEN WRITE (err_text[num], (non critical) , NL) ELSE WRITE (err_text[num], ***CRITICAL***, NL) ENDIF num := num + 1 ENDWHILE
pr-0-0-pdl_06.fm
00/0607
6-7
Execution Control
6.1.5
REPEAT Statement
The REPEAT statement causes a sequence of statements to be executed until a BOOLEAN expression becomes TRUE. This loop is always executed at least once, even if the BOOLEAN expression is TRUE when the loop is initially encountered. Fig. 6.6 - REPEAT Statement Execution shows the execution of a REPEAT statement.
Fig. 6.6
The syntax for a REPEAT statement is as follows: REPEAT <statement>... UNTIL bool_exp Example of a REPEAT statement: REPEAT WRITE (Exiting program, NL) WRITE (Are you sure? (Y/N) : ) READ (ans) UNTIL (ans = Y) OR (ans = N) IF ans = Y THEN DEACTIVATE prog_1 ENDIF
-- statement list 1
-- statement list 2
6.1.6
GOTO Statement
The GOTO statement causes an unconditional branch. Unconditional branching permits direct transfer of control from one part of the program to another without having to meet any conditions. In most cases where looping or non-sequential program flow is needed in a program, it can be done with other flow control statements discussed in this chapter. Unconditional branch statements should be used only when no other control structure will work. Fig. 6.7 - GOTO Statement Execution shows the execution of a GOTO statement. The GOTO statement transfers program control to the place in the program specified by a statement label, a constant identifier at the left margin. The statement label is followed by two consecutive colons (::). Executable statements may follow on the same line, or any line after, the label. The syntax for a GOTO statement is as follows: GOTO statement_label
pr-0-0-pdl_06.fm
6-8
00/0607
Execution Control GOTO statements should be used with caution. The label must be within the same routine or program body as the GOTO statement. Do not use a GOTO statement to jump into or out of a structured statement, especially a FOR loop, because this will cause a run-time error.
Fig. 6.7
Example of a GOTO statement: PROGRAM prog_1 VAR jump : BOOLEAN BEGIN . . . IF jump THEN GOTO ex ENDIF . . . ex:: WRITE (This is where the GOTO transfers to.) . . . END prog_1
pr-0-0-pdl_06.fm
00/0607
6-9
Execution Control holdable programs are controlled by START and HOLD. Usually, holdable programs include motion, but that is not a requirement; non-holdable programs are not controlled by START and HOLD. Generally, they are used as process control programs. Non-holdable programs cannot contain motion statements, however, they can use positional variables for other purposes. The motion statements that are not allowed are RESUME, CANCEL, LOCK, UNLOCK, and MOVE.
The HOLD or NOHOLD attribute can be specified in the PROGRAM statement to indicate a holdable or non-holdable program. The default program attribute is HOLD. States for activated programs include running, ready, paused, and paused-ready with the following meaning: running is the state of a program that is currently executing; paused is the state entered by a program when its execution is interrupted by a PROGRAM STATE PAUSE command or by the PAUSE statement; ready is the state entered by an holdable program when it is ready to run but needs the pressure of the START button for being executed; paused - ready is the state entered by a program when the described before conditions related to the paused and ready states are true. For running the program from this state, it is needed to issue either the PROGRAM STATE UNPAUSE command or the UNPAUSE statement and then press the START button.
Fig. 6.8 - Program States shows the program states and the actions that cause programs to change from one state to another.
Fig. 6.8
- Program States
1. 2. 3. 4. 5.
State selector on REMOTE position State selector on T1 position + HOLD button released HOLD or DRIVES OFF or state selector position changing HOLD or DRIVES OFF or state selector position changing State selector on AUTO or REMOTE or T2 position + HOLD button released
NOTE that for T2 position Enabling Device must be pressed PROGR = programming AUTO = AUTO-T, AUTO, REMOTE
pr-0-0-pdl_06.fm
6-10
00/0607
Execution Control
6.2.1
6.2.2
ACTIVATE Statement
Programs that are loaded into memory can be concurrently activated by the ACTIVATE statement. Only one activation of a given program is allowed at a given time. The effect of activating a program depends on the holdable/non-holdable attribute of the program issuing the statement and the program being activated. If the statement is issued from a non-holdable program, holdable programs are placed in the ready state and non-holdable programs are placed in the running state. If the statement is issued from a holdable program, the programs are placed in the running state. The ACTIVATE statement syntax is as follows: ACTIVATE prog_name <, prog_name>... For example: ACTIVATE weld_main, weld_util, weld_ctrl When a program is activated, the following occurs for that program: initialized variables are given their initial values if it is a holdable program without the DETACH attribute, the arm is attached and if it is a non-holdable program with the ATTACH attribute the arm is attached.
6.2.3
PAUSE Statement
The PAUSE statement causes a program to be paused until an UNPAUSE operation is executed for that program. Pausing a program that is running puts that program in a paused state. Pausing a program that is in a ready state puts that program in a paused-ready state. The following events continue even while a program is paused: current and pending motions; condition handler scanning; current output pulses; current and pending system calls; asynchronous statements (DELAY, PULSE, WAIT, etc.).
The PAUSE statement syntax is as follows: PAUSE < || prog_name <, prog_name... | ALL ||> If a prog_name or list of names is specified, those programs are paused. If no name is included, the program issuing the statement is paused. If ALL is specified, all running
pr-0-0-pdl_06.fm
00/0607
6-11
Execution Control and ready programs are paused. The statement has no effect on programs that are not executing. For example: PAUSE PAUSE weld_main, weld_util, weld_cntrl PAUSE ALL
6.2.4
UNPAUSE Statement
The UNPAUSE statement unpauses paused programs. The effect of unpausing a program depends on the holdable/non-holdable program attribute. If the statement is issued from a non-holdable program, holdable programs are placed in the ready state and non-holdable programs are placed in the running state. If the statement is issued from a holdable program, the programs are placed in the running state. The UNPAUSE statement syntax is as follows: UNPAUSE || prog_name <, prog_name>... | ALL || If a prog_name or list of names is specified, those programs are unpaused. If ALL is specified, all paused programs are unpaused. The statement has no effect on programs that are not paused. For example: UNPAUSE weld_main, weld_util, weld_cntrl UNPAUSE ALL
6.2.5
DEACTIVATE Statement
The DEACTIVATE statement deactivates programs that are in running, ready, paused, or paused-ready states. Deactivated programs remain loaded, but do not continue to cycle and cannot be resumed. They can be reactivated with the ACTIVATE statement. When a program is deactivated, the following occurs for that program: current and pending motions are canceled; condition handlers are purged; the program is removed from any lists (semaphores); reads, pulses, and delays are canceled; current and pending system calls are aborted; opened files are closed; attached devices, timers, and condition handlers are detached; locked arms are unlocked but the motion still needs to be resumed.
The DEACTIVATE statement syntax is as follows: DEACTIVATE < || prog_name <, prog_name>... | ALL || If a prog_name or list of names is specified, those programs are deactivated. If the program name list is empty, the program issuing the statement is deactivated. If ALL is
pr-0-0-pdl_06.fm
6-12
00/0607
Execution Control specified, all executing programs are deactivated. For example: DEACTIVATE DEACTIVATE weld_main, weld_util, weld_cntrl DEACTIVATE ALL
6.2.6
6.2.7
DELAY Statement
The DELAY statement causes execution of the program issuing it to be suspended for a specified period of time, expressed in milliseconds. The following events continue even while a program is delayed: current and pending motions; condition handler scanning; current pulses; current and pending system calls.
pr-0-0-pdl_06.fm
00/0607
6-13
Execution Control The DELAY statement syntax is as follows: DELAY int_expr The int_expr indicates the time to delay in milliseconds.
6.2.8
6.2.9
BYPASS Statement
If a certain program is executing a suspendable statement, BYPASS can be used for skipping that statement and continuing the execution from the next line. A suspendable statement is one of the following: READ, WAIT FOR, WAIT on a SEMAPHORE, SYS_CALL, DELAY, PULSE, MOVE. The BYPASS statement syntax is: BYPASS < || prog_name <, <prog_name>... | ALL ||><flags> If a prog_name or a list of names is specified, the execution of those programs will continue on the line following the suspendable statement that is currently being executed. If ALL is specified, the BYPASS will apply to all executing programs. If no program is specified, the program issuing the statement will bypass itself, this last case has only meaning when the BYPASS is issued from a condition handler action or in an interrupt service routine (refer to Condition handlers chapter for further details). flags is an optional mask that can be used for specifying which suspendable statement shuld be bypassed. For example, 64 is the value for bypassing the READ statement. Refer to the Built-in Routine List chapter for the list of the values to be used for the flags field. For determining if a program is suspended on a certain statement, the PROG_STATE built-in function can be called and then, the integer value returned by this function can be passed to the BYPASS statement in correspondence to the field flags. For example: state:= PROG_STATE (weld_main) IF state = 64 THEN BYPASS weld_main 64 ENDIF
6-14
00/0607
Execution Control exclusion of the destination is required to avoid a crash. SEMAPHORE is a PDL2 data type consisting of an integer counter that is incremented each time a signal occurs and decremented each time a wait occurs and a queue including all the programs waiting on that semaphore. Synchronization is done using the WAIT (not to be confused with WAIT FOR) and SIGNAL statements. The syntax is as follows: WAIT semaphore_var SIGNAL semaphore_var When a program wants a resource, it uses the WAIT statement. When the program finishes with the resource it uses the SIGNAL statement. If another program is waiting for that resource, that program can resume executing. Synchronization is done on a first in first out basis. Since PDL2 semaphores count, it is important to have a matching number of SIGNALs and WAITs. Too many signals will violate mutual exclusion of the resource (unless multiple instances of the resource exist). For example, when programs badsem1 and badsem2 outlined below are activated, the mutual exclusion will function properly for the first cycle. However, upon the second cycle of the programs, we lose mutual exclusion because there is one too many SIGNALs in badsem1. If the first SIGNAL statement of badsem1 were above the CYCLE statement, all would be ok for the following cycles. PROGRAM badsem1 VAR resource : SEMAPHORE EXPORTED FROM badsem1 BEGIN CYCLE SIGNAL resource --to initialize semaphore . . . WAIT resource -- mutual exclusive area SIGNAL resource . . . END badsem1 PROGRAM badsem2 VAR resource : SEMAPHORE EXPORTED FROM badsem1 BEGIN CYCLE . . . WAIT resource -- mutual exclusive area SIGNAL resource . . . END badsem2 Another situation to avoid is called a deadlock. A deadlock occurs when all of the programs are waiting for the resource at the same time. This means none of them can signal to let a program go. For example, if there is only one program and it starts out waiting for a resource, it will be deadlocked.
pr-0-0-pdl_06.fm
00/0607
6-15
Execution Control It is also important to reset semaphores when execution begins. This is done with the CANCEL semaphore statement. The syntax is as follows: CANCEL semaphore_var The CANCEL semaphore statement resets the signal counter to 0. It results in an error if programs are currently waiting on the SEMAPHORE variable. This statement is useful for clearing out unused signals from a previous execution.
pr-0-0-pdl_06.fm
6-16
00/0607
Routines
7.
ROUTINES
The following information are available about routines: Procedures and Functions Parameters Declarations Passing Arguments
A routine is structured like a program, although it usually performs a single task. Routines serve to shorten and simplify the main program. Tasks that are repeated throughout a program or are common to different programs can be isolated in individual routines. A program can call more than one routine and can call the same routine more than once. When a program calls a routine, program control is transferred to the routine and the statements in the routine are executed. After the routine has been executed, control is returned to the point from where the routine was called. Routines can be called from anywhere within the executable section of a program or routine. The programmer writes routines in the declaration section of a program. As shown in the following example, the structure of a routine is similar to the structure of a program. PROGRAM arm_check -- checks three arm positions and digital outputs VAR perch, checkpt1, checkpt2, checkpt3 : POSITION ROUTINE reset_all -- routine declaration -- resets outputs to off and returns arm to perch VAR n : INTEGER BEGIN FOR n := 21 TO 23 DO $DOUT[n] := OFF ENDFOR MOVE TO perch END reset_all BEGIN -- main program reset_all -- routine call MOVE TO checkpt1 $DOUT[21] := ON reset_all MOVE TO checkpt2 $DOUT[22] := ON reset_all MOVE TO checkpt3 $DOUT[23] := ON reset_all END arm_check
pr-0-0-pdl_07.fm
00/0707
7-1
Routines PDL2 also includes built-in routines. These are predefined routines that perform commonly needed tasks. They are listed and described in Chap.11. - BUILT-IN Routines list.
7.2 Parameters
To make routines more general for use in different circumstances, the programmer can use routine parameters rather than using constants or program variables directly. Parameters are declared as part of the routine declaration. When the routine is called, data is passed to the routine parameters from a list of arguments in the routine call. The number of arguments passed into a routine must equal the number of parameters
pr-0-0-pdl_07.fm
7-2
00/0707
Routines declared for the routine. Arguments also must match the declared data type of the parameters. The following example shows how the time_out routine can be made more general by including a parameter for the input signal index. The modified routine can be used for checking any input signal. PROGRAM input_check ROUTINE time_out (input : INTEGER) : BOOLEAN -- checks to see if input is received within time limit CONST time_limit = 3000 VAR time_slice : INTEGER BEGIN $TIMER[1] := 0 REPEAT time_slice := $TIMER[1] UNTIL ($DIN[input] = ON) OR (time_slice > time_limit) IF time_slice > time_limit THEN RETURN (TRUE) ELSE RETURN (FALSE) ENDIF END time_out BEGIN -- main program . . . IF time_out(6) THEN WRITE (Timeout Occurred) ENDIF . . . END input_check
7.3 Declarations
PDL2 uses two different methods of declaring a routine, depending on whether the routine is a procedure or function. It is also allowed to implement Shared Routines. The following topics are fully described in current paragraph: Declaring a Routine Parameter List Constant and Variable Declarations Function Return Type RETURN Statement Shared Routines
pr-0-0-pdl_07.fm
00/0707
7-3
Routines
7.3.1
Declaring a Routine
Procedure Function
7.3.1.1
Procedure
The syntax of a procedure declaration is as follows: ROUTINE proc_name <parameter_list> <constant and variable declarations> BEGIN <statement...> END proc_name
7.3.1.2
Function
The syntax of a function declaration includes a return data type and must include at least one RETURN statement that will be executed, as follows: ROUTINE func_name <parameter_list> : return_type <constant and variable declarations> BEGIN <statement...> must include RETURN statement END func_name
7.3.2
Parameter List
The optional parameter_list allows the programmer to specify which data items are to be passed to the routine from the calling program or routine. The syntax of the parameter list is as follows: <(id<, id>... : id_type<; id<, id>... : id_type>...)> The id_type can be any PDL2 data type with the following restrictions: for a STRING, a size cannot be specified. This is so that a STRING of any size can be used; for a JOINTPOS or XTNDPOS, an arm number cannot be specified. This is so that a value for any arm can be used; for an ARRAY, a size cannot be specified. This is so that an ARRAY of any size can be used. An asterisk (*) may be used to indicate a one-dimension ARRAY but it is not required. For example: part_dim : ARRAY OF INTEGER part_dim : ARRAY[*] OF INTEGER For a two-dimension ARRAY, asterisks (*,*) must be included as follows: part_grid : ARRAY[*,*] OF INTEGER
pr-0-0-pdl_07.fm
7-4
00/0707
Routines
7.3.3
Variables and constants declared in the VAR and CONST section of a routine are called local to the routine. This means they have meaning only within the routine itself. They cannot be used in other parts of the program. In addition, identifiers declared local to a routine cannot have the same name as the routine. Variables and constants declared in the VAR and CONST section of the main program can be used anywhere in the program, including within routines. They belong to the main program context. NOTE that if a variable declared inside a routine has the same name as a variable declared at the main program level, the routine will access the locally declared variable. For example: PROGRAM example VAR x : INTEGER ROUTINE test_a VAR x : INTEGER BEGIN x := 4 WRITE(Inside test_a x = , x, NL) END test_a ROUTINE test_b BEGIN WRITE(Inside test_b x = , x, NL) END test_b BEGIN x := 10 WRITE(The initial value of x is , x, NL) test_a WRITE(After test_a is called x = , x, NL) test_b WRITE(After test_b is called x = , x, NL) END example Results of the output: The initial value of x is 10 Inside test_a x = 4 After test_a is called x = 10 Inside test_b x = 10 After test_b is called x = 10
pr-0-0-pdl_07.fm
00/0707
7-5
Routines The distinction of belonging to the main program context versus local to a routine, is referred to as the scope of a data item.
7.3.3.1
Stack Size
The only limit to routine calls is the size of the program stack, since each call (including an interrupt service routine call) takes up a portion of this stack. The amount of stack used for each routine call is proportional to the number of local variables declared in the routine. The stack size can be specified by the STACK attribute on the PROGRAM statement.
7.3.4
for a two-dimension ARRAY, asterisks (*,*) must be included as follows: part_grid : ARRAY[*,*] OF INTEGER
7.3.4.1
Functions as procedures
Since system software version 3.1x, it is allowed to call a function without assigning its relut to a variable. This means that a function can be used in all contexts and when it is called in the context of a procedure, it does not need to return any value.
7.3.5
RETURN Statement
The RETURN statement is used to return program control from the routine currently being executed to the place where it was called. For function routines, it also returns a value to the calling program or routine. The syntax for a RETURN statement is as follows: RETURN <(value)>
pr-0-0-pdl_07.fm
7-6
00/0707
Routines The RETURN statement, with a return value, is required for functions. The value must be an expression that matches the return data type of the function. If the program interpreter does not find a RETURN while executing a function, an error will occur when the interpreter reaches the END statement. The RETURN statement can also be used in procedures. RETURN statements used in procedures cannot return a value. If a RETURN is not used in a procedure, the END statement transfers control back to the calling point.
7.3.6
Shared Routines
Routines can be declared as owned by another program (by using the optional EXPORTED FROM clause) or as public to be used by other programs (by using the optional EXPORTED FROM clause together with or without the attribute). The syntax for declaring a routine owned by another program, is as follows: EXPORTED FROM prog_name Prog_name indicates the name of the external program owning the specified routine. For example: PROGRAM pippo . . . ROUTINE error_check EXPORTED FROM utilities There are two different syntaxes for declaring a routine to be public for use by other programs: EXPORTED FROM prog_name prog_name indicates the name of the current program, which owns the specified routine. For example: PROGRAM utilities ROUTINE error_check EXPORTED FROM utilities PROGRAM prog_1 ROUTINE error_check EXPORTED FROM utilities -- error_check routine -- is imported from program utilities EXPORTED FROM prog_name prog_name indicates the name of the current program, which owns the specified routine. This routine can be imported by another program, by means of the IMPORT Statement. For example: PROGRAM utilities . . . ROUTINE error_check EXPORTED FROM utilities PROGRAM prog_1 IMPORT utilities -- any variables and routines -- are imported from program utilities, -- including error_check routine
pr-0-0-pdl_07.fm
00/0707
7-7
Routines
The declaration and executable sections of the routine appear only in the program that owns the routine. Refer to par. 3.2.4 Shared types, variables and routines on page 3-18 for more information.
7.4.1
Passing By Reference
When an argument is passed by reference, the corresponding parameter has direct access to the contents of that argument. Any changes made to the parameter inside of the routine will also change the value of the argument. To pass by reference, the argument must refer to a user-defined variable. Note that a variable which has been declared with the CONST attribute cannot be passed by reference to a routine!
7.4.2
Passing By Value
When an argument is passed by value, only a copy of that value is sent to the routine. This means that any changes made to the parameter inside of the routine do not affect the value of the argument. To pass a user-defined variable by value, enclose the argument in parentheses. Arguments that are constants, expressions, or literals automatically will be passed by value, as will any predefined variable (including port arrays), or any INTEGER variable that is passed to a REAL parameter. Other variables, however, are passed by reference unless enclosed in parentheses. Example of a variable being passed: check_status (status) check_status ( (status) ) -- passed by reference -- passed by value
The routine itself is executed in the same manner regardless of how the arguments were passed to it
pr-0-0-pdl_07.fm
7-8
00/0707
Routines The following is an example of routines that use pass by reference and pass by value: PROGRAM example VAR x : INTEGER ROUTINE test_a(param1 : INTEGER) BEGIN param1 := param1 + 4 WRITE(Inside test_a param1 = , param1, NL) END test_a BEGIN x := 10 WRITE(The initial value of x is , x, NL) test_a((x)) -- pass by value WRITE(After pass by value x = , x, NL) test_a(x) -- pass by reference WRITE(After pass by reference x = , x, NL) END example Results of the output: The initial value of x is 10 Inside test_a param1 = 14 After pass by value x = 10 Inside test_a param1 = 14 After pass by reference x = 14
7.4.3
Optional parameters
Since system software version 3.1x, it is allowed to declare routines with optional arguments: they can be optionally set when the routine is called. Example of specifying optional variables when declaring a routine: ROUTINE aa (i1:INTEGER; r2:REAL(); s3:STRING(hello)) In the shown above example, i1 is reuired; r2 and s3 are optional arguments: this is indicated by the brackets which follow the datatype specification. When a value is declared whithin the brackets, it means that such a value will be the default value when the routine is called. If no values are declared, the default value at calling time will be UNINIT. NOTEs: the values for optional parameters, when not passed as an argument, are uninitialized except for arrays in which the dimensions are 0. For jointpos and xtndpos the programs executing Arm is used to initialize the value; the optional values in all declarations of the routines must be the same unless the optional value is not defined in the EXPORTED FROM Clause; optional arguments can be used with CALLS Statement; optional arguments can be specified in Interrupt Service Routines (ISR); note that value is setup when the routine is called.
pr-0-0-pdl_07.fm
00/0707
7-9
Routines
7.4.4
NOTEs: Optional parameters can be passed in Varargs routines; in this case the returned datatype from ARG_INFO is 0; the ergument can be an ARRAY; Varargs routines can be used in Interrupt Service Routines and in CALLS Statement, but only the defined arguments; Argument identifiers cannot be used as argument switch (because there is no identifiers!) in Varargs routines.
7.4.5
Argument identifier
Since the system software version 3.1x, when calling a routine, it is allowed to use argument identifiers which have been specified at declaration time. Provided that the user is now allowed to use Optional parameters, when calling a routine it is needed to be able to specify which is the argument the passed value is referred to.
pr-0-0-pdl_07.fm
7-10
00/0707
Routines This is possible by means of using the argument identifier. It must be preceded by / (slash) and followed by =, as shown in the below examples. Examples: ROUTINE r1(par1:INTEGER; par2, timeout:INTEGER(); rr:REAL()) ... ... r1(1, /timeout=5, 5.2) --par2 is not passed; timeout is assigned --a value of 5; rr is assigned 5.2 r1(1, , 1, 5.2) --par1 gets a value of 1; par2 gets no values; --timeout gets a value of 1; rr gets 5.2 r1(2, 10, /rr=3.7) --par1 gets a value of 2; par2 gets 10; --timeout is not passed; rr gets 3.7 NOTEs: all parameters preceding this argument must have been provided or must be optional; argument identifiers cannot be used in Interrupt Service Routines.
pr-0-0-pdl_07.fm
00/0707
7-11
Routines
pr-0-0-pdl_07.fm
7-12
00/0707
Condition Handlers
8.
CONDITION HANDLERS
Condition handlers allow a program to monitor specified conditions in parallel with normal execution and, if the conditions occur, take corresponding actions in response. Typical uses include monitoring and controlling peripheral equipment and handling errors. For example, the following condition handler checks for a PAUSE condition. When the program is paused, the digital output $DOUT[21] is turned off. This example might be used to signal a tool to turn off if a program is paused unexpectedly. CONDITION[1]: WHEN PAUSE DO $DOUT[21] := OFF ENDCONDITION ENABLE CONDITION[1] The following information are available: Defining Condition Handlers Enabling, Disabling, and Purging Variable References Conditions Actions -- defines condition handler
8.1 Operations
As shown in the previous example, using condition handlers is a two-step process. First the condition handler is defined, and then it can be enabled. Condition handlers can also be disabled and purged. Defining Condition Handlers Enabling, Disabling, and Purging
8.1.1
pr-0-0-pdl_08.fm
00/0607
8-1
Condition Handlers The Programmer identifies each condition handler by a number, an INTEGER expression that can range from 1 to 255. Conditions that are to be monitored are specified in the condition expression (cond_expr). Multiple conditions can be combined into a single condition expression using the BOOLEAN operators AND and OR. Conditions that can be monitored are explained later in this chapter. When the expression becomes TRUE, the condition handler is said to be triggered. The action list (action_list) specifies the actions that are to be taken when the condition handler is triggered. The Actions that can be included in an action list are explained later in this chapter. Multiple WHEN clauses can be included in a single condition handler definition. The effect is to cause the individual WHEN clauses to be enabled together and disabled together. This also makes the clauses mutually exclusive, meaning only one clause will be triggered from the set. FOR ARM Clause NODISABLE Clause ATTACH Clause SCAN Clause
8.1.1.1
pr-0-0-pdl_08.fm
8-2
00/0607
8.1.1.2
NODISABLE Clause
The optional NODISABLE clause indicates the condition handler will not automatically be disabled when the condition handler is triggered. The NODISABLE clause is not allowed on condition handlers that contain state conditions.
8.1.1.3
ATTACH Clause
The optional ATTACH clause causes the condition handler to be attached immediately after it is defined. If not specified, the condition handler can be attached elsewhere in the program using the ATTACH CONDITION statement. The syntax for the ATTACH CONDITION statement is as follows: ATTACH CONDITION [number] <, CONDITION [number]> ... When a condition handler is attached, only code belonging (in terms of context program) to the same program containing the ATTACH can enable, disable, purge, detach, or redefine the condition handler. The syntax is as follows: DETACH CONDITION || ALL | [number] <, CONDITION [number]> ... || All attached condition handlers are detached when the ALL option is used. Otherwise, only those specified are detached. For more information, refer to the description of the ATTACH & DETACH statements in Condition Handlers chapter.
8.1.1.4
SCAN Clause
The optional SCAN clause can be used for indicating a different rate for the scanning of the condition handler. If this attribute is not specified, the condition handler is monitored accordingly to the scan time defined in the system ($TUNE[1] value). If the SCAN clause is present in the condition definition, the expressions that are states in such condition handler will be scanned less frequently. A positive INTEGER variable or expression must be specified in round brackets near the SCAN clause; this number indicates the multiplicator factor to apply to the regular scan rate during the condition handler monitoring. For example: VAR a, b: INTEGER CONDITION[55] SCAN(2): WHEN a = b DO ENABLE CONDITION[4] ENDCONDITION If the regular scan time of condition handlers in 20 milliseconds (default value for $TUNE[1]), the above defined condition is monitored every 40 milliseconds.
pr-0-0-pdl_08.fm
00/0607
8-3
Condition Handlers The SCAN clause is only useful if applied to conditions that are states and that do not require to be scanned very frequently. The SCAN clause acts as a filter for reducing the system overhead during the monitoring. Note that, when the condition triggers, it is automatically disabled. Either use the NODISABLE clause (trapping on the error 40016) or the ENABLE CONDITION statement for mantaining the condition always enabled. Events are not influenced by the SCAN clause. Refer to other sections of this chapter for the definitions of states and events.
8.1.2
pr-0-0-pdl_08.fm
8-4
00/0607
Condition Handlers COND_ENABLED and COND_ENBL_ALL built-ins can be used for testing if a certain condition is enabled (ly or locally). Refer to BUILT-IN Routines list chapter for further details. Condition handler definitions are automatically purged when the program is deactivated. Condition handler definitions can also be purged using the PURGE CONDITION statement or action. Purged condition handlers cannot be re-enabled. The syntax is as follows: PURGE CONDITION || ALL | [number] <, CONDITION [number]> ... || All defined condition handlers are purged when the ALL option is used. Otherwise, only those specified are purged. If a condition handler is currently enabled as part of a WITH clause, it cannot be purged.
8.3 Conditions
A condition can be a state or an event. States remain satisfied as long as the state exists. They are monitored at fixed intervals by a process called scanning. Events are satisfied only at the instant the event occurs. Consequently, event conditions cannot be joined by the AND operator in a condition expression. The user should take care of the way in which his conditions are structured. Events must be preferred to states; if a state, a condition should remain enabled only when needed, because it is polled each scan time (10 or 20 ms); in case of events, the NODISABLE clause is preferred to an ENABLE CONDITION action. Multiple conditions can be combined into a single condition expression using the BOOLEAN operators AND and OR The AND operator has a higher precedence which means the condition expression $DIN[1] OR $DIN[2] AND $DIN[3] is triggered when $DIN[1] is ON or when $DIN[2] and $DIN[3] are both ON. An error occurs if BOOLEAN state conditions are combined with the AND or OR operators grouped in parentheses. For example, ($DIN[1] OR $DIN[2]) AND $DIN[3] will produce an error. See Chap.12. - Predefined Variables List for the description of $THRD_CEXP and $THRD_PARAM variables that can be helpful when programming with conditions. The following conditions can be included in a condition expression:
pr-0-0-pdl_08.fm
00/0607
8-5
Condition Handlers RELATIONAL States BOOLEAN State DIGITAL PORT States DIGITAL PORT Events SYSTEM Events USER Events ERROR Events PROGRAM Events Event on Cancellation of a Suspendable Statement MOTION Events
8.3.1
RELATIONAL States
A relational state condition tests the relationship between two operands during every scan. The condition is satisfied when the relationship is TRUE. Any relational operator can be used. The operands can be user-defined variables, predefined variables, port arrays, literal values, or constants. At least one operand must be a variable. When used in a TIL or WHEN clause, the operands cannot be local variables or parameters. Using REAL operands in a condition expression can un-necessarily slow down the system, which can cause errors to be generated. This becomes a bigger problem when the system does not contain a floating point processor, or multiple condition expressions use REAL operands. To avoid this problem, use INTEGER operands wherever possible. If a REAL operand must be used, simplify the expression as much as possible. The variables used in relational state conditions do not have to be initialized when the condition handler is defined. In addition, tests for uninitialized variables are not performed when the condition handler is scanned. For example: WHEN WHEN WHEN WHEN WHEN bool_var = TRUE DO int_var <= 10 DO real_var > 10.0 DO $TIMER[1] > max_time DO $GIN[2] <> $GIN[3] DO
8.3.2
BOOLEAN State
A BOOLEAN state condition tests a BOOLEAN variable during every scan. The condition is satisfied when the variable is TRUE. When used in a TIL or WHEN clause, the BOOLEAN variable cannot be a local variable or parameter. For example: WHEN bool_var DO The BOOLEAN operator NOT can be used to specify the condition is satisfied when the variable is FALSE. For example: WHEN NOT bool_var DO
pr-0-0-pdl_08.fm
8-6
00/0607
Condition Handlers bool_var can also be the result of the BIT_TEST built-in function. This function tests whether a specified bit of an INTEGER is ON or OFF. The first argument is the variable to be tested, the second argument indicates the bit to be tested, and the third argument indicates whether the bit is to be tested for ON or OFF. When used in a condition expression, the third argument of BIT_TEST must be specified. In addition, variables used as arguments must not be local or parameters. (Refer to the BIT_TEST section of Chap.11. - BUILT-IN Routines list for additional information on BIT_TEST.) The following is an example using BIT_TEST in a condition expression: WHEN BIT_TEST (int_var, bit_num, TRUE) DO
When combining two BOOLEAN variable state conditions with the AND or OR operator, do not use parentheses around the expression. If parentheses are used, the editor treats the expression operator as an equal (=) instead of AND or OR. The following is an example of the proper syntax to use: WHEN a AND b DO
8.3.3
8.3.4
For example: WHEN $DIN[1]+ DO WHEN $DOUT[22]- DO The BIT_FLIP built-in function can be used for monitoring the event of positive or negative transition of a bit inside one of the following analogue port arrays : $AIN, $AOUT, $GIN, $GOUT, $WORD, $USER_BYTE, $USER_WORD, $USER_LONG, $PROG_UBYTE, $PROG_UWORD, $PROG_ULONG. For further details about this
pr-0-0-pdl_08.fm
00/0607
8-7
8.3.5
SYSTEM Events
A system event condition monitors a system generated event. The condition is satisfied when the specified event occurs while the condition handler is enabled. The condition expression is scanned only when a system event occurs. System events include the following: POWERUP: resumption of program execution after a power fail recovery; HOLD: each press of the HOLD button or execution of the PDL2 statement; START: each press of the START button; EVENT code: occurrence of a system event, identified by code; SEGMENT WAIT path_var: $SEG_WAIT field of the executed node is TRUE; WINDOW SELECT scrn_num: selection of a different input window on the screen.
The POWERUP condition is triggered at the start of power failure recovery. A small delay may be necessary before procedures such as DRIVE ON can be performed. It is not sufficient to test the POWERUP condition for understanding that the system has completely recovered from power failure. Please refer to Chap.13. - Power Failure Recovery which contains several sample program demonstrating power failure recovery techniques. The HOLD condition is triggered by either pressing the HOLD button or by executing the PDL2 HOLD statement. The HOLD condition is also triggered when a power failure occurs. The START button must be pressed at least once before the event can be triggered by pressing the HOLD button. The HOLD button that is pressed must be on the currently enabled device. In AUTO mode, it must be the HOLD button on the TP. When in REMOTE mode, the HOLD signal must be used to trigger this event. In either mode, execution of the HOLD statement will cause the event to trigger. This event should not be used in PROGR mode. The START condition is triggered when START button is pressed. This event can only be used in AUTO or REMOTE mode. The pressed START button must be on the current enabled device. In AUTO mode, it must be the TP START button; in REMOTE mode, the START signal must be used to trigger such an event. Predefined constants are available for some of the event codes. The following is a list of valid codes for use with the EVENT condition. EVENT Code AC_ABORT Meaning Triggered when the ^C key is pressed and the application aid environment is active. Note that the ^C is not felt if the application aid is not active. Triggered when the UTILITY APPLICATION command is issued from the Terminal Window (WinC4G) for activating the application aid environment. Triggered when the UTILITY APPLICATION command is issued from the TP for activating the application aid environment. Triggered when WinC4G Program connects to the Control Unit.
pr-0-0-pdl_08.fm
AC_CALL_CR T AC_CALL_TP
80
8-8
00/0607
Condition Handlers
EVENT Code 81 82 83 84 85
Meaning Triggered when WinC4G Program disconnects from the Controller Unit or an error occurs. Triggered when the EZ softkey on the TP Virtual Keyboard is pressed. Triggered when the A1 softkey on the TP Virtual Keyboard is pressed. Triggered when the A2 softkey on the TP Virtual Keyboard is pressed. Triggered when the general override is changed by pressing the TP % key or by issuing the SET ARM GEN_OVR command U1 softkey is pressed (TP right menu) U2 softkey is pressed (TP right menu) U3 softkey is pressed (TP right menu) U4 softkey is pressed (TP right menu) Triggered when the DRIVEs are turned ON Triggered when the DRIVEs are turned OFF Operations Panel key switch turned to T1 Operations Panel key switch turned to AUTO Operations Panel key switch turned to REMOTE Transition of the system into PROGR state Transition of the system into AUTO state Transition of the system into REMOTE state Transition of the system into ALARM state Transition of the system into HOLD state TP enabling device switch pressed TP enabling device switch released reserved reserved TP is disconnected TP is connected Operations Panel key switch turned to T2 AUTO-T state is entered Triggered when the default arm for jogging is selected issuing the SET ARM TP_MAIN commands ARM button pressed on TP Virtual Keyboard Transition from high to low of HDIN of DSA1 Transition from high to low of HDIN of DSA2 Transition from high to low of HDIN of DSA3 Transition from high to low of HDIN of DSA4 Arm 1 is ready to receive offsets from an external sensor Arm 2 is ready to receive offsets from an external sensor
91 92 93 94 99 100 101 102 103 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
pr-0-0-pdl_08.fm
00/0607
8-9
Condition Handlers
EVENT Code 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 154 155 156 157 158 159 160 161
Meaning Arm 3 is ready to receive offsets from an external sensor Arm 4 is ready to receive offsets from an external sensor ^C Key pressure from TP or video/keyboard of PC (with WinC4G active) Triggers when Arm 1 enters in the automatic locked state (enabled setting $RCVR_LOCK to TRUE) Triggers when Arm 2 enters in the automatic locked state (enabled setting $RCVR_LOCK to TRUE Triggers when Arm 3 enters in the automatic locked state (enabled setting $RCVR_LOCK to TRUE) Triggers when Arm 4 enters in the automatic locked state (enabled setting $RCVR_LOCK to TRUE) Input to the sphere defined in $ON_POS_TBL[1] Input to the sphere defined in $ON_POS_TBL[2] Input to the sphere defined in $ON_POS_TBL[3] Input to the sphere defined in $ON_POS_TBL[4] Input to the sphere defined in $ON_POS_TBL[5] Input to the sphere defined in $ON_POS_TBL[6] Input to the sphere defined in $ON_POS_TBL[7] Input to the sphere defined in $ON_POS_TBL[8] Output from the sphere defined in $ON_POS_TBL[1] Output from the sphere defined in $ON_POS_TBL[2] Output from the sphere defined in $ON_POS_TBL[3] Output from the sphere defined in $ON_POS_TBL[4] Output from the sphere defined in $ON_POS_TBL[5] Output from the sphere defined in $ON_POS_TBL[6] Output from the sphere defined in $ON_POS_TBL[7] Output from the sphere defined in $ON_POS_TBL[8] Foreign Language change A device is connected on USB port on TP4i/WiTP. I.e. the Disk on Key A device is disconnected on USB port on TP4i/WiTP A forward movement in progress A bacward motion in progress A jog motion in progress A manual motion just stopped Either an alarm has occurred requesting a confirmation (latch) or a confirmation has been given to an alarm requesting it A device is connected on USB port on TP4i/WiTP A device is disconnected from USB port on TP4i/WiTP An I/O port has been forced
pr-0-0-pdl_08.fm
8-10
00/0607
Condition Handlers
Meaning An I/O port has been unforced An I/O port has been simulated An I/O port has been unsimulated
The use of events related to HDIN (121..124) should be preceed by HDIN_SET Built-In Procedure call so that the monitoring of HDIN transition is enabled. The SEGMENT WAIT condition is triggered before the motion to a path node whose $SEG_WAIT field is TRUE. At this time the processing of the path is suspended until a SIGNAL SEGMENT statement or action is executed for that path. The WINDOW SELECT condition is triggered when a different window is selected for input on the specified screen. A window is selected for input either by the SEL key on the keyboard or TP or by the WIN_SEL built-in routine. After the condition triggers, the SCRN_GET built-in should be used to determine which window has been selected. Refer to Chap.11. - BUILT-IN Routines list for more information about WIN_SEL and SCRN_GET. For example: WHEN WHEN WHEN WHEN WHEN WHEN POWERUP DO HOLD DO START DO EVENT AE_CALL DO SEGMENT WAIT weld_path DO WINDOW SELECT SCRN_USER DO
The AC_CALL_TP, AC_CALL_CRT, AC_ABORT events are used for the application aid environment, that is a mechanism that can be used for activating and deactivating an application session by issuing the UTILITY APPLICATION command from the system command menu. This implies the existence of an active PDL2 program with enabled conditions containing the following events: WHEN EVENT AC_CALL_TP WHEN EVENT AC_CALL_CRT DO WHEN EVENT AC_ABORT DO When one of those events trigger, the associated actions are executed and this is a means offered to program developers to activate their own application programs from the system command menu. When the application environment is active, the system command menu is temporarely disabled until the ^C key is pressed from the device where the UTILITY APPLICATION command was issued. The pressure of the ^C key triggers the AC_ABORT event, so that the requested actions foreseen when the application environment is exited are undertaken. Note that the AC_ABORT event only triggers if the application environment has been activated using the described above mechanism and does not trigger a normal ^C key pressure outside this environment (see EVENT 129).
8.3.6
USER Events
This class of events can be used as a means of programs synchronization. The user can define his own event by specifying a number included in the range from 49152 and 50175 with the EVENT condition. The condition is satisfied when the SIGNAL EVENT statement occurs on the specified event
pr-0-0-pdl_08.fm
00/0607
8-11
Condition Handlers number. For example: CONDITION[90]: WHEN EVENT 50100 DO $DOUT[25] := OFF ENDCONDITION <statements..> SIGNAL EVENT 50100 -- this triggers condition[90] The programmer can specify a program name or use the reserved word ANY to specify which program the event must be caused by to trigger the user events. The syntax is as follows: ||By prog_name | BY ANY || If nothing is specified, the program in which the condition handler is defined is used. For example: WHEN EVENT 49300 DO WHEN EVENT 49300 BY ANY DO WHEN EVENT 49300 BY weld_prog DO
8.3.7
ERROR Events
An error event condition monitors the occurrence of an error. The condition is satisfied when the specified error event occurs while the condition handler is enabled. The condition expression is scanned only when an error occurs. Error events include the following: ANYERROR: occurrence of any error; ERRORNUM n: occurrence of an error, identified by number n; ERRORCLASS n: occurrence of an error belonging to the class identified by one of the following predefined constants: Cancellation of suspendable statement (52224-52233) Condition Related Errors (25600-25607) Continuous Display Errors (29696-29715) Error Logger Errors (27648-27660) File System Errors (768-788) Math Conversion Errors (21505-21516) File Input/Output Errors (514-583) Program Execution Errors (36864-37191) System State Errors (28672-28803) Startup and SYS_CALL Errors (24576-24587) PDL2 Trappable Errors (39937-40108) User-Defined Errors (43008-43519) User-Defined Errors (43520-44031)
EC_BYPASS EC_COND EC_DISP EC_ELOG EC_FILE EC_MATH EC_PIO EC_PROG EC_SYS EC_SYS_C EC_TRAP EC_USR1 EC_USR2
WinC4G Program that runs on PC can be used for getting the documentation related to C4G errors.
pr-0-0-pdl_08.fm
8-12
00/0607
Condition Handlers The programmer can specify a program name or use the reserved word ANY to specify which program the error must be caused by to trigger the error events. The syntax is as follows: ||BY prog_name | BY ANY || If nothing is specified, the program in which the condition handler is defined is used. For example: WHEN ANYERROR DO WHEN ERRORCLASS EC_FILE BY ANY DO WHEN ERRORNUM 36939 BY weld_prog DO The value of $THRD_ERROR for interrupt service routines initiated as actions of error events will be set to the error number that triggered the event.
8.3.8
PROGRAM Events
A program event condition monitors a program generated event. The condition is satisfied when the specified program event occurs while the condition handler is enabled. The condition expression is scanned only when a program event occurs. Program events include the following: ACTIVATE: activation of program execution; DEACTIVATE: deactivation of program execution; PAUSE: pause of program execution; UNPAUSE: unpause of paused program; EXIT CYCLE: exit of current cycle and start of next cycle.
The programmer can specify a program name or use the reserved word ANY to specify any program. For example: WHEN WHEN WHEN WHEN WHEN ACTIVATE DO DEACTIVATE weld_prog DO PAUSE ANY DO UNPAUSE DO EXIT CYCLE DO
8.3.9
The same mechanism used for error events is adopted. There is a new class of errors,
pr-0-0-pdl_08.fm
00/0607
8-13
Condition Handlers included between 52224 and 52233, with the following meaning: 52224 - ^C or BYPASS of motion on ARM [1] 52225 - ^C or BYPASS of motion on ARM [2] 52226 - ^C or BYPASS of motion on ARM [3] 52227 - ^C or BYPASS of motion on ARM [4] 52228 - ^C or BYPASS of SYS_CALL 52229 - ^C or BYPASS of PULSE 52230 - ^C or BYPASS of READ 52231 - ^C or BYPASS of DELAY 52232 - ^C or BYPASS of WAIT 52233 - ^C or BYPASS of WAIT FOR
For monitoring the event, the user should write an error event (WHEN ERRORNUM) specifying one of the listed above errors and eventually associate this event, using the BY clause, to the desired program. The BY clause can be followed by one or more programs or by the reserved word ANY. It is also possible to use the WHEN ERROR CLASS EC_BYPASS condition, for monitoring the entire class of events. The program associated to the BY clause represents: the program that is being executed in the PROGRAM EDIT or MEMORY DEBUG environment when the ^C key is pressed meanwhile the cursor is positioned on the suspendable statement; the program that is being executed in the EZ environment when the arrow up/down key is pressed meanwhile the cursor is positioned on the suspendable statement; the program that was executing the suspendable statement which has been by passed by a BYPASS Statement or a SYS_CALL of the PROGRAM STATE BYPASS command.
The BY clause can also not be specified if the monitoring of the suspendable statement deletion concerns the program that defines the CONDITION. Examples: CONDITION [1]: WHEN ERRORNUM 52230 BY pippo DO -- ^C or Bypass on READ executed from pippo PAUSE pluto -- pause program pluto WHEN ERRORNUM 52225 BY ANY DO -- ^C or Bypass on MOVE on ARM 2 executed by any PAUSE -- pause this program ENDCONDITION ENABLE CONDITION [1] Obviously, it is possible to use this events in a WAIT FOR statement too. For example: WAIT FOR ERRORNUM 52228 BY pluto
pr-0-0-pdl_08.fm
8-14
00/0607
Condition Handlers
8.3.10
MOTION Events
A motion event condition monitors an event related to a motion segment. The condition is satisfied when the specified motion event occurs while the condition handler is enabled. The condition expression is scanned only when a motion event occurs. Motion events include the following: TIME int_expr AFTER START: time after the start of motion. int_expr represents a time in milliseconds. TIME int_expr BEFORE END: time before the end of motion. int_expr represents a time in milliseconds. DISTANCE real_expr AFTER START: distance after the start of motion. real_expr representsa distance in millimiters. DISTANCE real_expr BEFORE VIA: distance before VIA position. real_expr represents a distance in millimiters. DISTANCE real_expr AFTER VIA: distance after VIA position. real_expr represents a distance in millimiters. DISTANCE real_expr BEFORE END: distance before the end of motion. real_expr represents a distance in millimiters. PERCENT int_expr AFTER START: % of distance traveled after start of motion; PERCENT int_expr BEFORE END: % of distance traveled before end of motion; AT START: start of motion; AT VIA: VIA position is reached; AT END: end of motion; RESUME: motion resumed; STOP: motion stopped.
The reserved words START and END refer to the start and end of a motion. The reserved word VIA refers to the intermediate position of the motion specified in the VIA clause of the MOVE statement. (VIA is most commonly used for circular motion.) PERCENT refers to the percentage of the distance traveled. For example: WHEN WHEN WHEN WHEN WHEN TIME 200 AFTER START DO DISTANCE 500 BEFORE END DO PERCENT 30 AFTER START DO AT END DO AT VIA DO
Motion events cannot apply to different arms in the same condition handler. The WHEN PERCENT motion event is only allowed on joint motions. The condition will never trigger if any of the expression values are outside of the range of the motion segment, for example, if the time before end is greater than the total motion segment time. Note that, when executing circular motion between PATH nodes, conditions must not be associated to the VIA node as them will not trigger. For this reason the AT VIA condition must be enabled with the destination node of the circular move and not with the via node.
pr-0-0-pdl_08.fm
00/0607
8-15
Condition Handlers For example: PROGRAM example TYPE ndef = NODEDEF $MAIN_POS $MOVE_TYPE $COND_MASK ENDNODEDEF VAR path_var : PATH OF ndef int_var: INTEGER BEGIN CONDITION[5] : -- define the AT VIA condition WHEN AT VIA DO $FDOUT[5] := ON ENDCONDITION NODE_APP(path_var, 10) -- append 10 nodes to the PATH path_var path_var.COND TBL[2] := 5 -- fill a condition table element FOR int var := 1 TO 10 DO -- assign values to path nodes using the POS built-in function path_var.NODE[int_var].$MAIN_POS := POS(...) path_var.NODE[int_var].$MOVE_TYPE := LINEAR path_var.NODE[int_var].$COND_MASK := 0 ENDFOR -- associate the AT VIA condition to node 5 path_var.NODE[5].$COND_MASK := 2 -- define node 4 as the VIA point path_var.NODE[4].$MOVE_TYPE := SEG_VIA -- define the circolar motion between node 3 and 5 path_var.NODE[5].$MOVE_TYPE := CIRCULAR CYCLE -- execute the move along the path. -- The interpolation through nodes will be LINEAR except -- between nodes 3.. 5 that will be CIRCULAR. MOVE ALONG path_var[1..9] END example Also refer to Chap.4. - Motion Control for further detail about conditions in PATH. STOP, RESUME, AT START, and AT END motion event conditions can be used in condition handlers which are ly enabled. An error is detected if the ENABLE statement or action includes a condition handler containing other motion events. ly enabled motion events apply to all motion segments. This means they apply to each MOVE statement and to each node segment of a path motion. Note that STOP, RESUME, and AT END, if used locally in a MOVE statement, will not trigger upon recovery of an interrupted trajectory if the recovery operation is done on the final point. To detect when the robot stops after a motion statement deactivation (^C or Bypass), it is necessary that the WHEN STOP condition be ly enabled. If it is locally used with the MOVE statement, the condition would not trigger. When the motion event triggers, the predefined variable $THRD_PARAM is set to the node number associated to the triggered motion event.
pr-0-0-pdl_08.fm
8-16
00/0607
Condition Handlers
8.4 Actions
The following actions can be included in an action_list: ASSIGNMENT Action INCREMENT and DECREMENT Action BUILT-IN Actions SEMAPHORE Action MOTION and ARM Actions ALARM Actions PROGRAM Actions CONDITION HANDLER Actions DETACH Action PULSE Action HOLD Action SIGNAL EVENT Action ROUTINE CALL Action
8.4.1
ASSIGNMENT Action
The assignment action assigns a value to a static user-defined variable, system variable, or output port. The value can be a static user-defined variable, predefined variable, port array item, constant, or literal. A local variable or parameter cannot be used as the value or the assigned variable. If a variable is used as the right operand of the := operator, it does not have to be initialized when the condition handler is defined or when the action takes place. For example: int_var := 4 $DOUT[22] := ON int_var := other_int_var In the example above, if other_int_var is uninitialized when the action takes place, int_var will be set to uninitialized. If an uninitialized boolean variable is assigned to an output port ($DOUT, $FDOUT, etc.) the port is automatically set to TRUE. The example below is valid only inside condition actions an error would be returned in a normal program statement. $DOUT[25] := b -- b is an uninitialized boolean variable -- $dout[25] will be set to on
8.4.2
pr-0-0-pdl_08.fm
00/0607
8-17
Condition Handlers If a variable is used as the right operand of the += or -= operator, it does not have to be initialized when the condition handler is defined or when the action takes place. For example: int_var int_var int_var int_var += -= += -= 4 4 other_int_var other_int_var
8.4.3
BUILT-IN Actions
Built-in actions are built-in procedures which can be used as actions of a condition handler. Currently, only the BIT_SET, BIT_CLEAR and BIT_ASSIGN built-in procedures are allowed. When calling a built-in procedure as an action, local variables cannot be used as parameters that are passed by reference. Refer to Chap.11. BUILT-IN Routines list for more information on these built-in routines. For example: BIT_SET(int_var, 1) BIT_CLEAR($WORD[12], int_var) BIT_ASSIGN(int_var, 4, bool_var, TRUE, FALSE)
8.4.4
SEMAPHORE Action
Semaphore actions clear and signal semaphores. The SIGNAL action releases the specified semaphore. If programs were waiting, the first one is resumed. The CANCEL semaphore action sets the signal counter of the specified semaphore to zero. It is an error if programs are currently waiting on the semaphore. These actions have the same effect as the corresponding statements, as explained in the Execution Control chapter. For example: SIGNAL semaphore_var CANCEL semaphore_var The semaphore_var cannot be a local variable or parameter.
8.4.5
8-18
00/0607
Condition Handlers RESUME: resumes suspended motion which resulted from a LOCK statement; UNLOCK: unlocks a locked arm(s).
For example: CANCEL CURRENT CANCEL CURRENT SEGMENT SIGNAL SEGMENT weld_path DETACH ARM[1] LOCK ARM[1], ARM[2] RESUME ARM[1], ARM[2] UNLOCK ALL
8.4.6
ALARM Actions
The CANCEL ALARM action clears the system alarm state. This action has the same effect as the corresponding statement, as explained in Chap.10. - Statements List. For example: CANCEL ALARM
8.4.7
PROGRAM Actions
Program actions start and stop program execution. These actions have the same effect as their corresponding statements, as explained in Chap.6. - Execution Control. PAUSE: pauses program execution; UNPAUSE: unpauses a paused program; DEACTIVATE: deactivates program execution; ACTIVATE: activates program execution; EXIT CYCLE: exits current cycle and starts next cycle; BYPASS: skips the suspendable statement (READ, WAIT on a semaphore, WAIT FOR, SYS_CALL, DELAY, PULSE, MOVE) currently in execution.
The programmer can specify a program or list of programs. A program must be specified for the ACTIVATE action. For example: PAUSE UNPAUSE DEACTIVATE weld_prog ACTIVATE util_prog EXIT CYCLE prog_1, prog_2, prog_3
8.4.8
pr-0-0-pdl_08.fm
00/0607
8-19
Condition Handlers PURGE CONDITION: purges specified condition handler(s); DETACH CONDITION: detaches specified condition handler(s).
These actions have the same effect as their corresponding statements, as explained earlier in this chapter. The programmer can specify a single condition or list of conditions.
8.4.9
DETACH Action
The DETACH action is used to detach an attached resource. The resource can be an arm (described above with other arm related actions), a device, a condition handler (described above with other condition handler related actions), or a timer. The DETACH action has the same meaning as the corresponding DETACH statement described in Chap.10. - Statements List. For example: DETACH $TIMER[2] -- detaches a timer DETACH CRT2: -- detaches a window device
8.4.10
PULSE Action
The PULSE action reverses the current state of a digital output signal for a specified number of milliseconds. This action has the same effect as the corresponding PULSE statement, as explained in Chap.10. - Statements List. The ADVANCE clause must be used when PULSE is used as an action. For example: PULSE $DOUT[21] FOR 200 ADVANCE
8.4.11
HOLD Action
The HOLD action causes the system to enter the HOLD state. This means all running holdable programs are placed in a ready state and all motion stops.
8.4.12
8.4.13
8-20
00/0607
Condition Handlers the routine cannot have more than 16 parameters and must be a procedure; all arguments must be passed by reference except INTEGER, REAL, and BOOLEAN arguments; all arguments passed by reference must have a main program context scope (not local to a routine); the calling program is suspended while the interrupt routine is executed; interrupt routines can be interrupted by other interrupt routines.
Arguments passed by value to an interrupt routine use the value at the time the condition handler is defined (not when it triggers). Each interrupt routine gets a new copy of the $THRD_ERROR predefined variable. It is initialized to 0 unless the interrupt routine is activated as an action of an error event. If the interrupt is caused by an error event, $THRD_ERROR is initialized to the error number causing the event to trigger. Interrupt service routines use the same arm, priority, stack, program-specific predefined variable values, and trapped errors as the program which they are interrupting. Interrupt service routines should be written as short as possible and should not use suspendable statements (WAIT FOR, DELAY, etc). Interrupt service routines are executed by the interpreter and are multi-tasked with all other programs running in the system. If another running program has a higher priority than the program being interrupted the routine will not execute until the higher priority program is suspended. An interrupt service routine can also be interrupted by other condition handlers being activated. Interrupt service routines that are suspendable or require a long time to execute can cause the program stack to become full or drain the system of vital resources. A way to disallow the interruption of execution by another interrupt service routine is given by the DISABLE INTERRUPT statement. Refer to Chap.10. - Statements List.
8.4.14
Execution Order
Actions are performed in the order in which they are listed. PDL2 syntax requires that all actions that are interrupt routines be listed last, meaning they are executed last. The only exception to this rule is the RESUME action. In the following example the order of execution for the actions is not what would be expected CONDITION[1] : WHEN $DIN[1] DO UNLOCK ARM[1] -- Unlock arm to allow restart of motion RESUME ARM[1] -- Resume motion on the arm $DOUT[1] := ON -- Signal the outside world we started motion user_isr -- User defined routine ENDCONDITION The shown above example, if executed outside of a condition handler, would produce the results expected by unlocking the arm, resuming the motion, setting the signal, and then calling the routine. When such a code segment is executed inside the condition statement, the digital output will be set before the RESUME action is executed. This is because the RESUME action is always executed after all other actions except the routine call.
pr-0-0-pdl_08.fm
00/0607
8-21
Condition Handlers
pr-0-0-pdl_08.fm
8-22
00/0607
Serial INPUT/OUTPUT
9.
SERIAL INPUT/OUTPUT
This chapter explains the PDL2 facilities for handling stream input and output. Stream I/O includes reading input from and writing output to operator devices, data files, and communication ports. Depending on the device, the input and output can be in the form of ASCII text or binary data. A tool, called WinC4G, is provided by COMAU to be run on a PC (for further information see Chapter WinC4G Program in the Use of C4G Control Unit Manual). One of the features of such a Program is the possibility of opening a Terminal that allows to issue commands and view information about the Robot Controller Unit.
Devices are specified in a PDL2 program as a string value. Each device name consists of one to four characters followed by a colon. For example, CRT: which specifies the scrolling window on the system screen of the Teach Pendant.
9.1.1
WINDOW Devices
Window devices are areas on the TP4i/WiTP (scrolling area of TP-INT Page) and WinC4G (Terminal Window) screens to which a program can write data and from which a program can read data that is entered with the PC keyboard or Teach Pendant keypad. Window devices use ASCII format. Windows allow a program to prompt the operator to take specific actions or enter information and to read operator requests or responses. PDL2 recognizes the following window device names: CRT(WinC4G Terminal Window ) CRT: (default) CRT1: CRT2: CRT3: Teach Pendant ( scroll area in TP-INT Page) TP: (default) TP0: TP1: TP2: TP3:
pr-0-0-pdl_04.fm
00/0607
9-1
Serial INPUT/OUTPUT CRT: and TP: indicate the scrolling window on the system screen. TP0: indicates the Teach Pendant character menu window which can be popped up on windows of the user screen. (Refer to BUILT-IN Routines list chapter for a description of the window related predefined routines.) The other windows, CRT1-3 and TP1-3, indicate windows on WinC4G and TP4i/WiTP user screen. The user screen is divided into three areas, numbered 1 through 3 from top to bottom. The Screen key switches between the system and user screens. Screen built-in routines can be used to determine which screen is currently displayed and force a particular screen to be displayed (refer to BUILT-IN Routines list chapter). PDL2 provides built-in routines to perform window operations, including creating and displaying user-defined windows, positioning the cursor, clearing windows, and setting window attributes (refer to BUILT-IN Routines list chapter). The first element of the predefined array variable $DFT_DV indicates the default window used in the window related built-in routines. When the selected window is TP: on the system screen, and there is a read active on that window, the user is sent the message Input directed to other window. Press SEL key. This indicates that the input is directed to a window other than the command menu. The user must press the SEL key to get back to the command menu. WINDOW SELECT condition can be used in a condition handler or WAIT FOR Statement to determine when a specific window has been selected for input. Refer to Chap.8. - Condition Handlers for more information on conditions and condition handlers. Some tests can be performed on the CRT device since it is a disconnectable device, and the CRT could be absent when accessing it. A problem can develop when the CRT connection is disconnected when a read is pending on it. To prevent this, the PDL2 programmer can determine the presence of the CRT emulator by testing the value of the $SYS_STATE predefined variable. It is also possible to define a condition handler to trigger when the CRT emulator protocol is connected and disconnected. Please refer to Chap.8. - Condition Handlers for more information on using condition handlers in this way.
9.1.2
FILE Devices
File devices are secondary storage devices. Programs can read data from or write data to files stored on these devices. A file is a collection of related information that is stored as a unit. File devices allow a program to store and retrieve data in ASCII or binary format. PDL2 recognizes the following file device names: UD: TD: TX: XD: (User disk) (Temporary Device) (TP4i/WiTP External Device) (External Device)
UD: is a User Disk. This is the main storage device. The user is allowed to store herein program and data files, organized in directories if needed. TD: is a Temporary device which can be used for temporary storing files. Upon power failure this device is cleared and inside stored data are lost. TX: is an external device which is recognized by the system when the disk on key is inserted in the USB port of TP4i/WiTP Teach Pendant
pr-0-0-pdl_04.fm
9-2
00/0607
Serial INPUT/OUTPUT XD: is an eXternal device which is recognized by the system when the disk on key is inserted in the USB port.
The TD: file device refers to the Controller RAM disk. PDL2 provides built-in routines to perform file operations such as positioning a file pointer or determining the number of remaining bytes in a file (refer to Chap.11. BUILT-IN Routines list).
9.1.3
PIPE Devices
The PIPE devices provide a mechanism that lets programs communicate with each other through the standard Serial I/O interface. Programs can read data from or write data to PIPEs with normal READ Statements and WRITE Statements. A PIPE is created using the DV4_CNTRL(1) and can be deleted with DV4_CNTRL (2). For further details see par. 11.40 DV4_CNTRL Built-In Procedure on page 11-27. It can be opened using the OPEN FILE Statement providing the device identifier as pipe and then the name of the pipe. eg. 'pipe:example'. When creating a pipe it is possible to specify that the pipe is deleted when no more LUNs are opened on it or when the program which created it is deactivated. This is useful for automatic cleanup of resources. The format of the data in the pipe is not defined by the system but is upto the user. What is written - is read.
9.1.4
COMMUNICATION Devices
Communication devices are ports through which programs can communicate with other devices connected to the Controller. PDL2 recognizes the following communication device names: COM1: DGM1: NET1: MDM: PPP1: PPP2: PPP3: PPPM: COM2: DGM2: NET2: COM3: DGM3: NETP: COMP: USBC: NETT: NETU:
COMP: is the channel for WinC4G Program interfacing. COM1:..COM3: are serial ports that are available for the user. NETn: are the channels of communication for various local area networking configurations: NET0: is the default device upon which WinC4G communicates when mounted with TCP/IP NET1: and NET2: are FTP client devices NETP: is the channel when PPP protocol is used NETT: is the channel when TCP protocol is used NETU: is the channel when UDP protocol is used USBC: is the indicator of the USB port
pr-0-0-pdl_04.fm
00/0607
9-3
Serial INPUT/OUTPUT MDM: is the mounted modem device PPP1:..PPP3: are the PPP mounted devices PPPM: is the device when PPP is mounted on the Modem device. Communication devices can have communication protocols mounted on them. If 3964R is mounted on a device, it is referenced using the appropriate DGMn: name. Otherwise, it is referenced using the corresponding COMn: name. Data can be transmitted in ASCII or binary format by first opening a LUN on the device and then reading or writing the data. Refer to later sections of this chapter for information on opening a LUN and transmitting data. When the modem is mounted on a port (UCMM), then it is named device MDM:. Such a name can be used for accepting/connecting over the modem and also for streamed input/output. DV4_CNTRL Built-In Procedure can be used for getting and setting the communication device characteristics. These are identified by the following predefined constants: COM_BD110 : 100 baud transmission rate COM_BD300 : 300 baud transmission rate COM_BD1200 : 1200 baud transmission rate COM_BD2400 : 2400 baud transmission rate COM_BD4800 : 4800 baud transmission rate COM_BD9600 : 9600 baud transmission rate COM_BD19200 : 19200 baud transmission rate COM_BD38400 : 38400 baud transmission rate COM_BD57600 : 57600 baud transmission rate COM_BD115200 : 115200 baud transmission rate COM_PAR_ODD : odd parity COM_PAR_EVEN : even parity COM_PAR_NO : no parity COM_STOP1 : 1 stop bit COM_STOP2 : 2 stop bits COM_STOP1_5 : 1.5 stop bits COM_BIT7 COM_BIT8 : 7 bits per character are transferred : 8 bits per character are transferred
COM_XSYNC : XON/XOFF flow control used COM_XSYNC_NO : no XON/XOFF flow control COM_RDAHD : use a large (384 bytes)readahead buffer that guarantees faster Read operations and no characters are lost COM_RDAHD_NO : no readahead buffer used COM_CHAR : use 7-bit ASCII code (only characters between 32 and 126 of the ASCII table are read through the communication port). COM_PASAL : all received characters are passed through the communication port. COM_CHARNO : of each received character, the 7th bit is cleared
pr-0-0-pdl_04.fm
9-4
00/0607
Serial INPUT/OUTPUT
and, if the resulting value stays in the range 32-126, the whole character, 8th bit included, is read. COM_CHAR and COM_PASAL are not mutually exclusive; if they are put in OR together, the characters read are included in the range 0-127 of ASCII characters table. The following table gives a clearer representation of the effect of these attributes (yes means that the character is read; no that the character is ignored):
COM_CHARNO no
COM_CHAR no yes no no
9.1.5
NULL Device
The null device is used to redirect output to a non-existent device. It is typically used in error handling, or as an aid in debugging programs that are not yet complete. Data that is written to the null device is thrown away. The null device can use ASCII or binary format. The pre-defined constant LUN_NULL may be used to reference the null device. PDL2 recognizes the string NULL: as the null device.
9.1.6
pr-0-0-pdl_04.fm
00/0607
9-5
Serial INPUT/OUTPUT
Window Devices:
For example: ATTACH COM1:, DGM4: DETACH TP2: DETACH abcd: -- release the user-defined window An error occurs if a program attempts to attach a device on which LUNs are already opened or to which another program is already attached.
The predefined variable $DFT_LUN indicates the default LUN for I/O operations. The default LUN is the Teach Pendant, and remains the Teach Pendant even if the Terminal of WinC4G is active. CRT emulator protocol is mounted on a port. If the PDL2 programmer wants to redirect the output to the CRT: device on the Terminal, the $DFT_LUN predefined variable can be set to LUN_CRT value.
9.2.1
pr-0-0-pdl_04.fm
9-6
00/0607
Serial INPUT/OUTPUT communication, or file device). File devices also include a file name and file extension. The default file device is UD:. The access_str can be any string expression representing the access with which the device is to be opened. The following types of access are allowed: R W RW WA RWA -- read only -- write only -- read and write -- write append -- read and write append
If a file is opened with write access (W or RW), other programs will be denied access to that file. If a file is opened with read only access (R), other programs will also be allowed to open that file with read only access. Write operations will be denied. If a file already exists on the device and an OPEN FILE on that file is done, the same file is opened and its contents can be added to if RWA was specified. If opened with the RW attributes, the file must be present on the device upon which the file is being opened. Examples of the OPEN FILE statement follow: OPEN FILE and write OPEN FILE read only OPEN FILE only OPEN FILE ABCD: crt1_lun (CRT1:, RW) -- opens window CRT1:, read -- opens file stats.dat,
9.2.2
WITH Clause
The optional WITH clause can designate temporary values for predefined variables related to LUNs. The WITH clause affects only the LUN currently being opened. The syntax of the WITH clause is as follows: WITH predef_lun_var = value <, predef_lun_var = value>... The following predefined variables can be used in a WITH clause: $FL_ADLMT $FL_BINARY $FL_DLMT $FL_ECHO $FL_SWAP $FL_NUM_CHARS $FL_PASSALL $FL_RANDOM $FL_RDFLUSH
For example: OPEN FILE file_lun (stats.log, R) WITH $FL_BINARY = TRUE If a statement needs more than a single line, a comma is used to end the OPEN FILE line. Each new line begins with the reserved word WITH and ends with a comma. The reserved word ENDOPEN must be used to indicate the end of the OPEN FILE statement
pr-0-0-pdl_04.fm
00/0607
9-7
Serial INPUT/OUTPUT if it spans more than one line. For example: OPEN FILE file_lun (stats.log, R), WITH $FL_SWAP = TRUE, $FL_BINARY = TRUE, ENDOPEN OPEN FILE comm_lun (COM1:, RW) WITH $FL_SWAP = TRUE, WITH $FL_BINARY = TRUE, -- Delimiters of ctrlc, down, up, enter, prev keys WITH $FL_ADLMT = \010\013\011\027\003, ENDOPEN
9.2.3
9.2.4
READ Statement
The READ statement reads input data into program variables from the specified LUN. The syntax of the READ statement is as follows: READ <lun_var> (var_id <, var_id>...) The lun_var can be a variable representing any open LUN or either of the predefined LUNs, LUN_TP or LUN_CRT. If a lun_var is not specified, the default LUN indicated by the predefined variable $DFT_LUN is used. The var_id can be any variable identifier of the following data types: INTEGER REAL BOOLEAN STRING VECTOR POSITION JOINTPOS XTNDPOS
However, the var_id cannot be a predefined variable which requires limit checking. Chap.12. - Predefined Variables List describes each predefined variable including whether or not it requires limit checking. The reserved word NL (new line) can also be used in the list of identifiers to force the
pr-0-0-pdl_04.fm
9-8
00/0607
Serial INPUT/OUTPUT next item to be read from a new line. Each data item that is read is assigned to the corresponding variable from the list of identifiers. Data items can be read in ASCII or binary format, depending on how the LUN has been opened. Examples of the READ statement follow: READ (body_type, total_units, operator_id) -- reads three values from the default lun In this case, if the operator entered the values 4, 50, and JOE, the READ statement would make the following assignments: body_type := 4 total_units := 50 operator_id := JOE The following examples indicate how to read data from a window and a file: OPEN FILE crt2_lun (CRT2:, RW) -- opens window CRT2: READ crt2_lun (menu_choice) -- reads a value from the CRT2: window ... CLOSE FILE crt2_lun OPEN FILE file_lun (specs.dat, R) READ file_lun (body_type, NL, total_units, NL, operator_id, NL) -- reads three values from the file UD:specs.dat -- expects each value to be at the beginning of a new line ... CLOSE FILE file_lun
9.2.4.1
Format Specifiers
Optional format specifiers can be used to format input. For binary data, a single format specifier can be used to indicate the number of bytes a value occupies. The effect of a format specifier on ASCII data depends on the data type being read. The syntax of a format specifier is as follows: :: int_specifier -- integer expression
On some data types, a second specifier also is allowed. It follows the first format specifier using the same syntax. The effects of format specifiers for each data type for ASCII data are as follows: INTEGER: The first specifier is the maximum number of characters to be read. The second specifier indicates the base of the number. Valid base values are as follows:
pr-0-0-pdl_04.fm
1 for octal; 2 for hexadecimal; 3 for character; 4 for binary (NOTE: not supported for READ Statement); 5 for decimal.
00/0607
9-9
Serial INPUT/OUTPUT REAL: The format specifier indicates the maximum number of characters to be read. Only one specifier is allowed. BOOLEAN: The data must be one of the Boolean predefined constants (TRUE, ON, FALSE, OFF). The format specifier indicates the maximum number of characters to be read. Only one specifier is allowed. STRING: The format specifier indicates the maximum number of characters to be read. Only one specifier is allowed. VECTOR, POSITION, JOINTPOS, and XTNDPOS: The formats in which data must be entered for each data type are as follows: in all cases, the left angle bracket (<) starts the value and the right angle bracket (>) ends the value. The commas in each value are required; for vectors and positions, x, y, and z represent Cartesian location components. VECTOR: <x, y, z> For positions, e1, e2, and e3 represent Euler angle components and cnfg_str represents a configuration string. The configuration string is not enclosed in quotes. POSITION: <x, y, z, e1, e2, e3, cnfg_str> For jointpos, components that have no meaning with the current arm are left blank, but commas must be used to mark the place. The arm number n for jointpos and xtndpos is preceded by the character A. JOINTPOS: <j1, j2, j3, j4, j5, j6, An> XTNDPOS: <<x, y, z, e1, e2, e3, cnfg_str> <x1, ...> An> The format specifier indicates the maximum number of characters to be read for each component of the item. Only one specifier is allowed.
9.2.4.2
9.2.5
WRITE Statement
The WRITE statement writes output data from a program to the specified LUN. The syntax of the WRITE statement is as follows: WRITE <lun_var> (expr <, expr>...) The lun_var can be a variable representing any open LUN or either of the predefined LUNs, LUN_TP, LUN_CRT or LUN_NULL. If a lun_var is not specified, the default LUN indicated by the predefined variable $DFT_LUN is used. The expr can be any expression of the following data types: INTEGER REAL BOOLEAN STRING VECTOR POSITION JOINTPOS XTNDPOS
pr-0-0-pdl_04.fm
9-10
00/0607
Serial INPUT/OUTPUT The reserved word NL (new line) can also be used as a data item. NL causes a new line to be output. Each data item is written out in the order that it is listed. Data items can be written in ASCII or binary format, depending on how the LUN has been opened. For example, the following statement writes out a string literal followed by a new line to the default output device: WRITE (Enter body style, units to process, and operator id., NL) Notice the string literal is enclosed in single quotes (), which are not written as part of the output. The WRITE statement is executed asynchronously when writing to certain types of devices such as communication devices. This is done so other programs can execute simultaneously without having to wait for the statement to be completed. The predefined variable $WRITE_TOUT indicates a timeout period for asynchronous writes.
9.2.5.1
9.2.5.2
Format Specifiers
As with the READ statement, optional format specifiers can be used in formatting output. For binary data, a single format specifier can be used to indicate the number of bytes a value occupies. The effect of a format specifier on ASCII data depends on the data type being written. The syntax of a format specifier is as follows: :: int_specifier -- integer expression
On some data types, a second specifier also is allowed. It follows the first format specifier using the same syntax. The effects of format specifiers for each data type for ASCII data are as follows: INTEGER: The first specifier is the minimum number of characters to be written. If the value requires more characters, as many as are needed will be used. The specifier can be a positive or negative value. A positive value means right-justify the number and is the default if no sign is used. A negative value means left-justify the number. The second specifier indicates the base of the number. Valid base values are as follows: 1 for octal; 2 for hexadecimal; 3 for character; 4 for binary; 5 for decimal.
If the second write format specifier is negative then the value is preceded by zeros instead of blanks. For example:
pr-0-0-pdl_04.fm
00/0607
9-11
Serial INPUT/OUTPUT
(Hex)
REAL: The first specifier is the minimum number of characters to be written. If the value requires more characters, as many as are needed will be used. The specifier can be a positive or negative value. A positive value means right-justify the number and is the default if no sign is used. A negative value means left-justify the number. The second specifier, if positive, is the number of decimal places to use. A negative number specifies scientific notation is to be used. BOOLEAN: The value written will be one of the Boolean predefined constants (TRUE or FALSE). The format specifier indicates the number of characters to be written. The specifier can be a positive or negative value. A positive value means right-justify the item and is the default if no sign is used. A negative value means left-justify the item. Only one specifier is allowed. STRING: The format specifier indicates the number of characters to be written. The specifier can be a positive or negative value. A positive value means right-justify the string and is the default if no sign is used. A negative value means left-justify the string. Only one specifier is allowed. Note that the quotes are not written. If a format specifier greater than 143 characters is specified, the write operation will fail. To avoid this, do not use a format specifier for large output strings. VECTOR, POSITION, JOINTPOS, and XTNDPOS: The formats in which data is output for each data type are as follows: in all cases, the left angle bracket (<) starts the value, the right angle bracket (>) ends the value, and commas separate each component; for vectors and positions, x, y, and z represent Cartesian location components. VECTOR: <x, y, z> For positions, e1, e2, and e3 represent Euler angle components and cnfg_str represents a configuration string. The configuration string is not enclosed in quotes. POSITION: <x, y, z, e1, e2, e3, cnfg_str> For jointpos, components that have no meaning with the current arm are left blank, but commas are used to mark the place. The arm number n for jointpos and xtndpos is preceded by the character A. JOINTPOS: <j1, j2, j3, j4, j5, j6, An> XTNDPOS: <<x, y, z, e1, e2, e3, cnfg_str> <x1, ...> An> The format specifier indicates the maximum number of characters to be written for each component of the item. The second specifier, if positive, is the number of decimal places to use. A negative number specifies scientific notation is to be used.
9.2.5.3
pr-0-0-pdl_04.fm
9-12
00/0607
Statements List
10.
STATEMENTS LIST
10.1 Introduction
This chapter is an alphabetical reference of PDL2 statements. The following information is provided for each statement: short description; syntax; comments concerning usage; example; list of related statements.
This chapter uses the syntax notation explained in the Introduction to PDL2" chapter to represent PDL2 statements. The available PDL2 statements are:
pr-0-0-pdl_10.fm
ACTIVATE Statement ATTACH Statement BEGIN Statement BYPASS Statement CALLS Statement CANCEL Statement CLOSE FILE Statement CLOSE HAND Statement CONDITION Statement CYCLE Statement CONST Statement DEACTIVATE Statement DECODE Statement DELAY Statement DETACH Statement DISABLE CONDITION Statement DISABLE INTERRUPT Statement ENABLE CONDITION Statement ENCODE Statement END Statement EXIT CYCLE Statement FOR Statement
00/0607
10-1
Statements List GOTO Statement HOLD Statement IF Statement IMPORT Statement LOCK Statement MOVE Statement MOVE ALONG Statement OPEN FILE Statement OPEN HAND Statement PAUSE Statement PROGRAM Statement PULSE Statement PURGE CONDITION Statement READ Statement RELAX HAND Statement REPEAT Statement RESUME Statement RETURN Statement ROUTINE Statement SELECT Statement SIGNAL Statement TYPE Statement UNLOCK Statement UNPAUSE Statement VAR Statement WAIT Statement WAIT FOR Statement WHILE Statement WRITE Statement
10-2
00/0607
Statements List placed in the ready state and non-holdable programs are placed in the running state. If the statement is issued from a holdable program, the programs are placed in the running state. The programs must be loaded in memory or an error results.Only one activation of a given program is allowed at a given time. When a program is activated, the following occurs for that program: initialized variables are set to their initial values. if prog_name is holdable and does not have the DETACH attribute, the arm will be attached. If prog_name is non-holdable and has the ATTACH attribute then the arm will be attached. The ACTIVATE statement is permitted as a condition handler action. Refer to the Condition Handlers chapter for further information. Examples: ACTIVATE weld_prog, weld_util, weld_cntrl See also: DEACTIVATE Statement
Comments: When an arm is attached, it is attached to the program executing the ATTACH statement. Other programs cannot cause motion on that arm. The programmer can specify an arm, a list of arms, or all arms. If nothing is specified, the default arm is attached. It is only a warning if a program attempts to attach an arm that it already has attached. An error occurs if a program attempts to attach an arm that is currently moving or to which another program is already attached. An error occurs if a program attempts a MOVE or RESUME statement of an arm that is currently attached to another program. When a device is attached, it is attached to the program executing the ATTACH statement. device_str can be any of the following system device name strings or a user-defined window device: Communication Devices COM1: COM2: COMP: Window Devices CRT1: CRT2: CRT3: TP0: TP1: TP2:
pr-0-0-pdl_10.fm
00/0607
10-3
Statements List
Communication Devices
When an I/O device is attached, other programs cannot open a LUN on that device. In addition, if the attached device is a window, other programs cannot use that window in the window related built-in routines. When a condition handler is attached, only code belonging to the same program containing the ATTACH can enable, disable, purge, detach, or redefine the condition handler. An error occurs if a program attempts to attach a condition handler that does not exist. When a timer is attached, it is attached to the program owning the ATTACH statement. Only code belonging to the same program containing the ATTACH statement can access the timer. The value of the timer is not changed when it is attached. To release an arm, device, condition handler, or timer for use by other programs, the DETACH statement must be issued from the same program that issued the ATTACH. This means the DETACH statement must be executed by the attaching program for arms and devices and the DETACH statement must be owned by the attaching program for condition handlers and timers. When a program terminates or is deactivated, all attached resources are detached. The following example and table illustrate the program considered to have the attached resource: PROGRAM p1 ROUTINE r2 EXPORTED FROM p2 ROUTINE r1 BEGIN r2 END r1 BEGIN r1 END p1 PROGRAM p2 ROUTINE r2 EXPORTED FROM p2 ROUTINE r2 BEGIN -- ATTACH statement END r2 BEGIN END p2
Examples: ATTACH COM1: -- attach a communication device ATTACH CRT2: -- attach a window device ATTACH ARM -- attach the default arm ATTACH ARM[1], ARM[3] ATTACH CONDITION[5], handlers ATTACH $TIMER[6] CONDITION[8] -attach condition
-- attach a timer
See also: DETACH Statement PROGRAM Statement (ATTACH attributes) PROGRAM Statement (DETACH attributes)
pr-0-0-pdl_10.fm
10-4
00/0607
Statements List
00/0607
10-5
Statements List flags is an integer mask used for indicating which kind of suspendable statement should be bypassed. Possible mask values are: 0: 64: 128: 256: 512: 1024: 2048: 4096: for bypassing the current statement (if suspendable) for bypassing a READ for bypassing a WAIT FOR for bypassing a MOVE for bypassing a SYS_CALL for bypassing a DELAY for bypassing a WAIT on a semaphore for bypassing a PULSE
These integer values are the same as those returned by the PROG_STATE built-in function. After having bypassed a MOVE statement, the START button need to be pressed for continuing the execution of the bypassed program. If prog_name or a list of names is specified, those programs are paused. If no name is included, the suspendable statement of the program issuing the BYPASS is bypassed. In this case, the BYPASS should be issued from a condition handler action when the main of the program is stopped on a suspendable statement. The BYPASS statement is permitted as a condition handler action. Refer to the Condition Handlers chapter for further details. Examples: BYPASS 0 ALL -- bypassed all programs that are executing a -- suspendable statement
state:=PROG_STATE (pippo) IF state = 2048 THEN BYPASS state pippo -- bypasses pippo if it is waiting on a semaphore ENDIF See also: PROG_STATE Built-In Function Condition Handlers chapter
10-6
00/0607
Statements List rout_name is the being called routine; arg_val are the argument passed to the being called routine, if there are any. Examples: CALLS (pippo) -- Execution jumps to the BEGIN of the MAIN -- part of pippo program CALLS (pippo,f1) -- Execution jumps to the BEGIN of f1 -- routine, owned by pippo program CALLS (pippo,f1)(1,5.2) -- Execution jumps to the BEGIN -- of f1 routine, owned by pippo -- program, and there are two -- routine parameters. See also: par. 7.4 Passing Arguments on page 7-8.
Comments: Canceling a motion causes the arm to decelerate smoothly until the motion ceases. A canceled motion cannot be resumed. CANCEL CURRENT cancels only the current motion. If there is a pending motion when the statement is issued, it is executed immediately. If the current motion is a path motion, all path segments are canceled. CANCEL ALL cancels both the current motion and any pending motions. CANCEL CURRENT SEGMENT cancels only the current path segment. If additional nodes remain in the path when the CANCEL CURRENT SEGMENT statement is executed, they are processed immediately. If there are no remaining nodes in the path or the CANCEL ALL SEGMENT statement was used, pending motions (if any) are executed immediately. CANCEL ALL SEGMENT is equivalent to canceling the current motion using CANCEL CURRENT. The programmer can specify an arm, a list of arms, or all arms in a CANCEL motion statement. If nothing is specified, motion for the default arm is canceled. CANCEL ALARM clears the alarm state of the controller. It has the same effect as the SHIFT SCRN key on the keyboard. This statement will not execute properly if the controller is in a fatal state. CANCEL semaphore_var clears all unused signals. The signal counter is set to zero. This statement should be executed at the beginning of the program to clear out any outstanding signals from a previous execution. If programs are currently waiting on a SEMAPHORE, the CANCEL semaphore_var statement will result in an error.
pr-0-0-pdl_10.fm
00/0607
10-7
Statements List The CANCEL statement is permitted as a condition handler action. Refer to the Condition Handlers chapter for further information. Examples: CANCEL CANCEL CANCEL CANCEL CANCEL CANCEL CANCEL CANCEL CANCEL CANCEL ALL ALL ALL ALL ALL
CANCEL ALARM CANCEL resource See also: LOCK Statement HOLD Statement SIGNAL Statement WAIT Statement Motion Control Chapter
pr-0-0-pdl_10.fm
10-8
00/0607
Statements List
Comments: The programmer identifies each condition handler by int_expr, an INTEGER expression that can range from 1 to 255. Conditions to be monitored are specified in the condition expression, cond_expr, as explained in the Condition Handlers chapter. The action_list specifies the actions to be taken when the condition handler is triggered (condition expression becomes TRUE), as explained in the Condition Handlers chapter. Condition handlers must be enabled to begin monitoring. The optional FOR ARM clause can be used to designate a particular arm for the condition handler. Globally enabled motion events will apply to any moving arm while local events will apply to the arm of the MOVE statement they are associated with (via the WITH option). If the FOR ARM clause is not included, the arm specified by the PROG_ARM attribute on the PROGRAM statement is used. If
pr-0-0-pdl_10.fm
00/0607
10-9
Statements List PROG_ARM is not specified, the value of the predefined variable $DFT_ARM is used. The arm is used for arm related conditions and actions. The optional NODISABLE clause indicates the condition handler will not automatically be disabled when the condition handler is triggered. The NODISABLE clause is not allowed on condition handlers that contain state conditions. The optional ATTACH clause causes the condition handler to be attached immediately after it is defined. If not specified, the condition handler can be attached elsewhere in the program using the ATTACH statement. When a condition handler is attached, only code belonging to the same program containing the ATTACH can enable, disable, purge, detach, or redefine the condition handler. The DETACH statement is used to release exclusive control of a condition handler. The optional SCAN clause can be used to indicate a larger monitoring period, respect to the scan rate defined in the system ($TUNE[1]), for conditions that are states. Examples: CONDITION[14] NODISABLE ATTACH: WHEN PAUSE DO $DOUT[21] := OFF ENDCONDITION CONDITION[23] FOR ARM[2]: WHEN DISTANCE 60 BEFORE END DO -- applies to arm 2 LOCK -- applies to arm 2 WHEN $ARM_DATA[4].PROG_SPD_OVR > 50 DO LOCK ARM[4] ENDCONDITION -- This CONDITION is scanned every $TUNE[1]*2 milliseconds CONDITION[55] SCAN(2): WHEN $DOUT[20]=TRUE DO PAUSE ENDCONDITION See also: ENABLE CONDITION Statement DISABLE CONDITION Statement PURGE CONDITION Statement ATTACH Statement DETACH Statement Condition Handlers Chapter
10-10
00/0607
Statements List Comments: A constant declaration establishes a constant identifier with a name and an unchanging value. name can be any user-defined identifier. The data type of the constant is determined by its value, as follows: INTEGER (whole number) REAL (decimal point or scientific notation) BOOLEAN (TRUE, FALSE, ON, or OFF) STRING (enclosed in single quotes)
The value can be specified as a literal or predefined constant. The translator checks to make sure the values are legal. Expressions are not allowed. The constant declaration section is located between the PROGRAM or ROUTINE statement and the corresponding BEGIN statement. Examples: PROGRAM example CONST temp = 179.04 -- REAL time = 300 -- INTEGER flag = ON -- BOOLEAN movement = LINEAR -- INTEGER part_mask = 0xF3 -- INTEGER BEGIN . . . END example See also: TYPE Statement VAR Statement Data Representation Chapter
00/0607
10-11
Statements List When the program END statement is encountered, execution continues back at the CYCLE statement. This continues until the program is deactivated or an EXIT CYCLE statement is executed. When an EXIT CYCLE statement is executed, the current cycle is terminated and execution immediately continues back at the CYCLE statement. Examples: PROGRAM example1 -- declaration section BEGIN -- initial executable -section CYCLE -- cycled executable -section END example1 See also: BEGIN Statement EXIT CYCLE Statement PROGRAM example2 -- declaration section BEGIN CYCLE -- executable section END example2
Deactivated programs remain loaded, but do not continue to cycle and cannot be resumed. They can be reactivated with the ACTIVATE statement. The DEACTIVATE statement is permitted as a condition handler action. Refer to Condition Handlers chapter for further information. Examples: DEACTIVATE DEACTIVATE weld_main, weld_util
pr-0-0-pdl_10.fm
10-12
00/0607
Statements List
var_id can also be a predefined variable reference as long as the predefined variable does not have value limits. Refer to Predefined Variables List chapter to determine if a predefined variable has limits. Optional Format Specifiers can be used with var_id as they are used in a READ statement (refer to Serial INPUT/OUTPUT chapter). Examples: PROGRAM sample VAR s, str : STRING[10] i, x, y, z : INTEGER BEGIN READ(str) -- assume 4 6 8 is entered DECODE(str, x, y, z) -- x = 4, y = 6, z = 8 DECODE(1234abcd, i, s) -- generates i = 1234, s = abcd DECODE(-1234abcd, i) -- generates i = -1234 DECODE(+, i) -- trappable error READ(str) -- assume 101214 is entered DECODE(str, x::3, y::1, z::2) -- x = 101, y = 2, z = 14 END sample See also: ENCODE Statement READ Statement Serial INPUT/OUTPUT Chapter
pr-0-0-pdl_10.fm
00/0607
10-13
Statements List
DELAY is an asynchronous statement which means it continues while the program is paused and interrupt service routines can begin before the statement completes.
Examples: MOVE TO pickup DELAY 200 CLOSE HAND 1 See also: WAIT FOR Statement
Comments: When an arm is detached, other programs will be permitted to cause motion on the arm. When the ARM ALL option is used, all arms currently attached to the program executing the DETACH statement are detached. It is only a warning if a program attempts to detach an arm that is currently not attached to any program. An error occurs if a program attempts to detach an arm that is currently attached by another program. device_str can be any of the following system devices or a user-defined window device:
pr-0-0-pdl_10.fm
10-14
00/0607
Statements List
When an I/O device is detached, other programs can open a LUN on that device and if it is a window device, the window related built-ins can be applied to that device. An error occurs if a program attempts to detach a device that is currently attached by another program. When a condition handler is detached, other programs can enable, disable, purge, or redefine the condition handler. When a timer is detached, other programs will be permitted read and write access to that timer. The DETACH statement used to detach a condition handler or timer must be contained in the same program owning the corresponding ATTACH statement. An error occurs if the program attempts to execute a DETACH statement contained in a different program. It is also an error if a program attempts to detach a condition handler that does not exist. When a program terminates or is deactivated, all attached resources are automatically detached. The DETACH statement is permitted as a condition handler action. Refer to Condition Handlers chapter for further information. Examples: DETACH COM1: DETACH CRT2: -- detach a communication device -- detach a window device
DETACH ARM -- detach the default arm DETACH ARM[1], ARM[3] DETACH CONDITION[6] -- must be in same program owning the ATTACH DETACH CONDITION ALL DETACH $TIMER[1] -- must be in same program owning the ATTACH DETACH $TIMER[8], $TIMER[9] See also: ATTACH Statement PROGRAM Statement (DETACH Attribute) PROGRAM Statement (ATTACH Attribute)
00/0607
10-15
Statements List
||
ALL
[int_exp]
<,
CONDITION
Comments: int_exp is the number of the condition handler to be disabled. Disabled condition handlers can be re-enabled. Condition handlers are disabled automatically when the condition expression is triggered unless the NODISABLE clause is included in the definition. If the ALL option is used, all of the programs globally enabled condition handlers are disabled. If a condition handler is also currently enabled as part of a WITH clause, it will be disabled when the MOVE finishes, not when the DISABLE CONDITION statement is executed. It is an error if the program attempts to disable a condition handler that is currently attached in another program. The DISABLE CONDITION statement is permitted as a condition handler action. Refer to Condition Handlers chapter for further information. Examples: DISABLE CONDITION[2] DISABLE CONDITION[error_chk], CONDITION[signal_chk] DISABLE CONDITION ALL See also: CONDITION Statement ENABLE CONDITION Statement MOVE Statement PURGE CONDITION Statement Condition Handlers Chapter
10-16
00/0607
Statements List This statement should only be used when really necessary so to avoid the nesting of thread levels in the program call chain. It is important to specify a minimum amount of statements for not compromissing a correct program interpretation. PROGRAM example ROUTINE user_isr BEGIN -- Interrupt Service routine statements <statements....> DISABLE INTERRUPT ENABLE CONDITION[13] $BIT[100] := ON RETURN ENABLE INTERRUPT END user_isr BEGIN -- main CONDITION[13] : WHEN $DIN[18] DO user_isr ENDCONDITION ENABLE CONDITION[13] -- Main statements <statements..> END example See also: Condition Handlers chapter.
pr-0-0-pdl_10.fm
00/0607
10-17
Optional Format Specifiers can be used with expr as they are used in a WRITE statement (refer to Serial INPUT/OUTPUT chapter). Note that, if expr is not left justified, the first character in string_id is a blank one. The maximum length of the STRING is determined by the declared length of string_id. If the new STRING is longer then the declared length, then the new STRING is truncated to fit into string_id. Examples: PROGRAM sample VAR str : STRING[20] x,y : INTEGER z : REAL BEGIN x := 23 y := 1234567 z := 32.86 ENCODE (str, x, y, z) WRITE (str) -- outputs 23 1234567 32.860 ENCODE (str, x::4, y::8, z::4::1) WRITE (str) -- outputs 23 123456732.9 END sample See also: DECODE Statement WRITE Statement Serial INPUT/OUTPUT Chapter
10-18
00/0607
Statements List
END name Comments: name is the user-defined identifier used to name the program or routine. If the END is in a procedure routine, it returns program control to the calling program or routine. It is an error if the END of a function routine is executed. A function routine must execute a RETURN statement to return program control to the calling program or routine. If the CYCLE option was used with the BEGIN statement or the CYCLE statement is used in the program, the END statement transfers control to the CYCLE and the statements between CYCLE and END execute again. This keeps a program running until it is deactivated. Examples: PROGRAM example -- declaration section BEGIN -- executable section END example See also: BEGIN Statement CYCLE Statement EXIT CYCLE Statement RETURN Statement ROUTINE r1 -- local decalration section BEGIN --routine executable section END r1
pr-0-0-pdl_10.fm
00/0607
10-19
Statements List The EXIT CYCLE statement is permitted as a condition handler action. Refer to Condition Handlers chapter for further information. Examples: EXIT CYCLE EXIT CYCLE weld_prog, weld_util EXIT CYCLE ALL See also: BEGIN Statement CYCLE Statement
Comments: intvar is initially assigned the value of startval. It is then incremented or decremented by a stepping value each time through the loop until endval is either reached or exceeded. The loop consists of executable statements between the FOR and ENDFOR. startval, endval, and step_val can be any INTEGER expression. intvar must be an INTEGER variable. If TO is used intvar is incremented. startval must be less than or equal to endval or the loop will be skipped. If DOWNTO is used intvar is decremented. startval must be greater than or equal to endval or the loop will be skipped. If the STEP option is specified, the stepping value is indicated by step_val. The stepping value used should be a positive INTEGER value to ensure that the loop is interpreted correctly. If no STEP value is specified, a value of one is used. When the stepping value is one, the statements are executed the absolute value of (endval - startval + 1) times. If startval equals endval, the loop is executed one time. A GOTO statement should not be used to jump into, or out of, a FOR loop. If the ENDFOR is reached without having executed the corresponding FOR statement, an error will occur. If a GOTO is used to jump out of a FOR loop after the FOR statement has been executed, information pertaining to the FOR statement execution will be left on the stack. Examples: FOR i := 21 TO signal_total DO $DOUT[i] := OFF ENDFOR See also:
pr-0-0-pdl_10.fm
10-20
00/0607
pr-0-0-pdl_10.fm
00/0607
10-21
Statements List Comments: The HOLD statement works exactly like the HOLD button on the TP and control panel. A HOLD causes the arm to decelerate smoothly until the motion ceases. The predefined variable $HLD_DEC_PER indicates the rate of deceleration. START must be pressed to place holdable programs back into a running state. The HOLD statement can be used in both holdable and non-holdable programs. HOLD is an asynchronous statement which means it continues while the program is paused and condition handlers continue to be scanned. However, if a condition handler triggers while a program is held, the actions are not performed until the program is unheld. The HOLD statement is permitted as a condition handler action. Refer to Condition Handlers chapter for further information. Examples: HOLD See also: CANCEL Statement LOCK Statement PAUSE Statement
10.26 IF Statement
The IF statement is used to choose between two possible courses of action, based on the result of a Boolean expression. Syntax: IF bool_expr THEN <statement>... <ELSE <statement>... > ENDIF Comments: bool_expr is any expression that yields a Boolean result. If bool_expr is TRUE, the statement(s) following the IF clause are executed. If bool_expr is FALSE, program control is transferred to the first statement after the ENDIF. If the ELSE clause is specified and bool_expr is FALSE, the statement(s) between the ELSE and ENDIF are executed. Examples: IF (file_error) THEN WRITE (***ERROR*** data file not found.) ELSE WRITE (Loading data. . .) ENDIF See also: SELECT Statement
pr-0-0-pdl_10.fm
10-22
00/0607
Statements List
Local variables of a global routine cannot be declared with the GLOBAL attribute.
Examples: IMPORT tv_move IMPORT sys\util\tv_move See also: par. 3.2.4 Shared types, variables and routines on page 3-18
00/0607
10-23
Statements List nothing is specified, the default arm is locked. To unlock an arm, an UNLOCK statement must be issued from the same program that issued the LOCK. After an UNLOCK statement has been issued, motion can be resumed by issuing a RESUME statement. Motion can be canceled using CANCEL motion statement while the arm is locked. The LOCK statement is permitted as a condition handler action. Refer to Condition Handlers chapter for further information. Examples: LOCK LOCK ALL LOCK ARM[2], ARM[5] CONDITION[3]: WHEN $DIN[3]+ DO LOCK ARM[3] ENDCONDITION See also: UNLOCK Statement RESUME Statement CANCEL Statement
Comments: The dest_clause specifies the kind of move and its destination. It can be any of the following: TO || destination | joint_list || <VIA_clause> NEAR destination BY distance AWAY distance RELATIVE vector IN frame ABOUT vector BY distance IN frame BY relative_joint_list FOR distance TO destination destination in the above clauses can be a POSITION, JOINTPOS, XTNDPOS, or node expression. If it is a node, the standard node fields of that node are used in the motion. joint_list is a list of real expressions, with each item corresponding to the joint angle of the arm being movedframe in the above clauses must be one of the predefined constants BASE, TOOL, or UFRAME The optional arm clause (ARM[n]) designates the arm to be moved. The designated arm is used for the entire MOVE statement. If the ARM clause is not
pr-0-0-pdl_10.fm
10-24
00/0607
Statements List included, the default arm is moved. The optional trajectory clause designates a trajectory for the move. It can be any of the following predefined constants: JOINT LINEAR CIRCULAR If the trajectory clause is not included, the value of $MOVE_TYPE is used. opt_clauses provide more detailed instructions for the motion. Optional clauses include the following: ADVANCE TIL cond_expr <, TIL cond_expr>... WITH designations <, designations>... If both the TIL and WITH clauses are specified, all TIL clauses must be specified before the WITH clauses. The sync_clause allows two arms to be moved simultaneously using SYNCMOVE. The arms start and stop together. The optional WITH and TIL clauses can be included as part of a SYNCMOVE clause. The TIL clause can only be specified on the MOVE side. MOVEFLY can be used in place of the reserved word MOVE to specify continuous motion. To execute the FLY, the ADVANCE clause must also be included in the MOVEFLY statement. If a sync_clause is specified, it must be SYNCMOVEFLY, and the ADVANCE clause must be part of the MOVEFLY. If a MOVE statement needs more than a single line, commas must be used to end a line after the dest_clause or after each optional clause. The reserved word ENDMOVE must then be used to indicate the end of the statement. Refer to the examples below. MOVE is an asynchronous statement which means it continues while the program is paused and interrupt service routines can begin before the statement completes. Examples: MOVE MOVE MOVE MOVE MOVE MOVE MOVE NEAR pick_up BY 200.0 TO pick_up AWAY 400.0 RELATIVE VEC(100, 0, 100) IN TOOL ABOUT VEC(0, 100, 0) BY 90 IN BASE BY {alpha, beta, gamma, delta, omega} FOR dist TO destination
MOVE ARM[1] TO destination MOVE JOINT TO pick_up MOVE CIRCULAR TO destination VIA arc MOVE ARM[1] TO part SYNCMOVE ARM[2] TO front MOVEFLY TO middle ADVANCE MOVE TO end_part MOVE NEAR slot BY 250 ADVANCE OPEN HAND 1
pr-0-0-pdl_10.fm
00/0607
10-25
Statements List
MOVE TO slot MOVE TO flange WITH CONDITION[2], CONDITION[3], WITH $PROG_SPD_OVR = 50, CONDITION[4], ENDMOVE MOVE TO pickup TIL $DIN[part_sensor]+, WITH CONDITION[1], WITH $PROG_SPD_OVR = 50, ENDMOVE MOVE ARM[1] TO slot WITH $PROG_SPD_OVR = 100, SYNCMOVE ARM[2] TO front WITH $LIN_SPD = 200, ENDMOVE MOVE TO slot TIL $DIN[1]+ MOVEFLY ARM[1] TO slot ADVANCE SYNCMOVEFLY ARM[2] TO front MOVE ARM[1] TO part, TIL $DIN[1]+, WITH CONDITION[1], -- applies to arm 1 SYNCMOVE ARM[2] TO front, WITH CONDITION[2], -- applies to arm 2 ENDMOVE
pr-0-0-pdl_10.fm
10-26
00/0607
Statements List
[n..m]
Motion proceeds to node n of path_var, then to each successive node until node m of path_var is reached. Backwards motion is allowed by specifying node n greater than node m. Motion proceeds to node n of path_var, then to each successive node until the end of path_var is reached.
[n..]
Opt_clauses provide more detailed instructions for the motion. Optional clauses include the following: ADVANCE WITH designations <, designations>... MOVEFLY can be used in place of the reserved word MOVE to specify continuous motion. To execute the fly, the ADVANCE clause must also be included with the MOVEFLY statement. Specifying MOVEFLY applies to the end of the path, not for each node. In addition, $TERM_TYPE applies to the end of the path and not for each node. If a MOVE ALONG statement needs more than a single line, commas must be used to end a line after the path_var or after each optional clause. The reserved word ENDMOVE must then be used to indicate the end of the statement. Refer to the examples below. MOVE ALONG is an asynchronous statement which means it continues while the program is paused and interrupt service routines can begin before the statement completes. Examples: MOVE ALONG pth MOVE ALONG pth.NODE[1..5] MOVE ARM[2] ALONG pth MOVE ALONG pth, WITH $PROG_SPD_OVR = 50, ENDMOVE See Also: MOVE Statement Chap.4. - Motion Control
00/0607
10-27
Statements List device_str can be any STRING expression representing a device. File devices also include a file name and extension. The default file device is UD:. access_str can be any STRING expression representing the access with which the device is to be opened. Valid access designations are as follows: R W RW WA RWA -- read only -- write only -- read and write -- write append -- read and write append
Note that in case of RW, the file must already exist, otherwise an error is returned.
A LUN remains opened until it is closed with a CLOSE FILE statement, program execution is completed, or the program is deactivated. The optional WITH clause can designate temporary values for predefined variables related to LUNs (listed in Chap.9. - Serial INPUT/OUTPUT). WITH predef_lun_var = value <, predef_lun_var = value>... If an OPEN FILE statement needs more than a single line, commas must be used to end a line after the closing parenthesis or after each WITH clause. The reserved word ENDOPEN must then be used to indicate the end of the statement. Refer to the examples below. Examples: OPEN FILE crt1_lun (CRT1:, RW) OPEN FILE com_port (COM1:, RW) OPEN FILE file_lun (stats.log, R), WITH $FL_SWAP = TRUE, WITH $FL_BINARY = TRUE, ENDOPEN See also: CLOSE FILE Statement READ Statement WRITE Statement Chap.9. - Serial INPUT/OUTPUT
pr-0-0-pdl_10.fm
10-28
00/0607
Statements List to Chap.4. - Motion Control) configured using the HAND configuration tool delivered with the system software. The effect of the open operation depends on the type of hand being operated (refer to Chap.4. - Motion Control). The optional FOR ARM clause can be used to indicate a particular arm, a list of arms, or all arms. If not specified, the default arm is used. Examples: OPEN HAND 1 OPEN HAND 2 FOR ARM[2] See also: CLOSE HAND Statement RELAX HAND Statement Chap.4. - Motion Control
Even though condition handlers continue to be scanned while the program is paused, the actions are not performed until the program is unpaused. The PAUSE statement is permitted as a condition handler action. Refer to Condition Handlers chapter for further information. Examples: PAUSE PAUSE weld_main, weld_util, weld_cntrl PAUSE ALL See also: UNPAUSE Statement
pr-0-0-pdl_10.fm
00/0607
10-29
Statements List
10-30
00/0607
Statements List
EZ
Syntax: EZ The use of this attribute on the program header causes several changes in the way the program is handled by the system. First, a program with this attribute is always loaded with the /FULL option. Second, multiple statements are not allowed on the same line. Third, a routine is implicitly defined when the call statement is inserted. Fourth, the EZ attribute is required when the EZ environment is used. Finally, the EXPORTED FROM clause is automatically added to the routine declaration.
Examples: PROGRAM example1 PROG_ARM = 2, HOLD -- VAR and CONST section BEGIN . . . END example1 PROGRAM example2 PRIORITY = 3, NOHOLD PROGRAM example3 PLC See also: BEGIN Statement END Statement
00/0607
10-31
Statements List information. Examples: PULSE $DOUT[i] FOR 300 PULSE $DOUT[24] FOR 700 ADVANCE PULSE $BIT[4] FOR 200 See also: Chap.5. - INPUT/OUTPUT Port Arrays
10-32
00/0607
Statements List LUNs, LUN_CRT, LUN_TP or LUN_NULL. If a lun_var is not specified, the default LUN indicated by $DFT_LUN is used. var_id can be any variable identifier of the following data types: INTEGER REAL BOOLEAN STRING VECTOR POSITION JOINTPOS XTNDPOS
var_id can also be a predefined variable reference as long as the predefined variable does not have value limits. Refer to Chap.12. - Predefined Variables List to determine if a predefined variable has limits. The reserved word NL can also be used for var_id. When NL is used, the remainder of the current input line is ignored. Each data item that is read is assigned to the corresponding variable from the list of identifiers. The data item that is read must be of the same type as the corresponding identifier passed to the READ. An incompatible type will cause an error to be returned. Optional Format Specifiers can be used with each var_id to format input as explained in Chap.9. - Serial INPUT/OUTPUT. READ is an asynchronous statement which means it continues while the program is paused and interrupt service routines can begin before the statement completes. The predefined variable $READ_TOUT indicates the timeout period for asynchronous reads. When reading from a communication port, if the READ delimiter consists of multiple characters, the DV4_CNTRL buil-in procedure should be called for assigning the COM_RDAHD attribute to the port. Examples: READ (x, y, z) -- lun_var defaults to $DFT_LUN
READ LUN_TP (length, height, weight) OPEN FILE crt1_lun (CRT1:, RW) READ crt1_lun (menu_selection) DV4_CNTRL (COM1:, COM_RDAHD) -- Set ASCII delimiter to carriage return followed by line -- feed OPEN FILE com1_lun(COM1:,r) WITH $FL_ADLMT = \013\010 READ com1_lun (str::8) See also: DV4_CNTRL Built-In Procedure DECODE Statement OPEN FILE Statement WRITE Statement Chap.9. - Serial INPUT/OUTPUT
pr-0-0-pdl_10.fm
00/0607
10-33
Statements List
pr-0-0-pdl_10.fm
10-34
00/0607
Statements List
00/0607
10-35
Statements List
IF time_slice > time_limit THEN RETURN (TRUE) ELSE RETURN (FALSE) ENDIF END time_out See also: ROUTINE Statement Chap.7. - Routines
pr-0-0-pdl_10.fm
10-36
00/0607
Statements List
ROUTINE positive (x : INTEGER) : BOOLEAN BEGIN RETURN (x >= 0) END positive ROUTINE push (stack : stack_type; item : POSITION) BEGIN stack.top := stack.top + 1 stack.data[stack.top] := item END push See also: RETURN Statement Chap.7. - Routines
pr-0-0-pdl_10.fm
00/0607
10-37
pr-0-0-pdl_10.fm
10-38
00/0607
Statements List
pr-0-0-pdl_10.fm
00/0607
10-39
Statements List
lapm_pth1 = NODEDEF $MAIN_POS $MOVE_TYPE $ORNT_TYPE $SPD_OPT $SEG_TERM_TYPE $SING_CARE weld_sch : ARRAY[8] OF REAL gun_on : BOOLEAN ENDNODEDEF VAR count, index : INTEGER part_rec : ddd_part weld_pth : PATH OF lapm_pth1 BEGIN -- Executable section END main See also: VAR Statement Chap.3. - Data Representation
pr-0-0-pdl_10.fm
10-40
00/0607
Statements List
prog_name
Comments: A variable declaration establishes a variable identifier with a name and a data type. name can be any user-defined identifier not previously used in the same scope. This means a program cannot have two variables of the same name. Valid data types are explained in Chap.3. - Data Representation. The variable declaration section is located between the PROGRAM or ROUTINE statement and the BEGIN statement. Variables can be declared to be owned by another program or to be public for use by other programs using the optional EXPORTED FROM clause. For shared
pr-0-0-pdl_10.fm
00/0607
10-41
Statements List variables, prog_name indicates the name of the program owning the variable. If the NOSAVE clause is specified, the variables included in that declaration are not saved to the variable file (.VAR file). The NOSAVE and EXPORTED FROM clauses are not permitted on routine VAR declarations. The initial_value option is permitted on REAL, INTEGER, BOOLEAN, and STRING declarations. It is used to indicate a value to be assigned to the variable before the BEGIN of the program or routine is executed. Examples: PROGRAM main VAR count, index : INTEGER (0) NOSAVE angle, dist : REAL job_complete : BOOLEAN EXPORTED FROM main error_msg : STRING[30] EXPORTED FROM error_chk menu_choices : ARRAY[4] OF STRING[30] matrix : ARRAY[2,10] OF INTEGER offset : VECTOR pickup, perch : POSITION EXPORTED FROM data1 option : STRING[10] (backup) NOSAVE safety_pos : JOINTPOS FOR ARM[2] door_frame : XTNDPOS FOR ARM[3] work_area : SEMAPHORE NOSAVE default_part : INTEGER (0xFF) NOSAVE BEGIN -- Executable section END main See also: CONST Statement TYPE Statement Chap.3. - Data Representation
10-42
00/0607
00/0607
10-43
Statements List
WHILE num < num_errors DO IF priority_index[num] < 2 THEN WRITE(err_text[num], (non critical), NL) ELSE WRITE(err_text[num], ***CRITICAL***, NL) ENDIF num := num + 1 ENDWHILE See also: FOR Statement REPEAT Statement
The reserved word NL can also be used. When specified, a carriage return is written so the following items begin on the next line of output. Each expr is written out in the order that it is listed. Optional Format Specifiers can be used with each expr to format output as explained in Chap.9. - Serial INPUT/OUTPUT. Writing to certain types of devices (i.e. communication port) is done asynchronously so other programs can execute simultaneously. The predefined variable $WRITE_TOUT specifies the time out period for asynchronous writes. Examples: WRITE (x, y, z) -- lun_var defaults to $DFT_LUN WRITE LUN_TP (The value of x is , x) WRITE LUN_NULL (This string will disappear) OPEN FILE crt1_lun (CRT1:, RW) WRITE crt1_lun (num, NL, error_msg) See also: OPEN FILE Statement READ Statement Chap.9. - Serial INPUT/OUTPUT
pr-0-0-pdl_10.fm
10-44
00/0607
11.
This chapter uses the syntax notation explained in Introduction to PDL2 chapter to represent PDL2 built-in routines. In the comments area of each built-in function description, references to parameters are italicized to indicate the argument name. The following groups of built-in routines are listed below: Math Built-In Routines Arm Built-In Routines Serial Input/Output Built-In Routines Path Built-In Routines Position Built-In Routines Screen Built-In Routines Window Built-In Routines String Built-In Routines Bit Manipulation Built-In Routines System Data Built-In Routines Error Handling Built-In Routines Misc Built-In Routines
Following is a list of all built-in routines and procedures belonging to the listed above groups. As far as concerns VP2 built-in routines, please refer to VP2 - Visual PDL2 Manual, chapter 6.
ABS Built-In Function ACOS Built-In Function ASIN Built-In Function ATAN2 Built-In Function COS Built-In Function EXP Built-In Function LN Built-In Function
pr-0-0-pdl_11.fm
00/1207
11-1
RANDOM Built-in Function ROUND Built-In Function SIN Built-In Function SQRT Built-In Function TAN Built-In Function TRUNC Built-In Function Arm Built-In Routines ARM_COLL_THRS Built-In Procedure ARM_COOP Built-In Procedure ARM_GET_NODE Built-In Function ARM_JNTP Built-In Function ARM_MOVE_ATVEL Built-in Procedure ARM_NUM Built-In Function ARM_POS Built-In Function ARM_SET_NODE Built-In Procedure ARM_SOFT Built-In Procedure ARM_XTND Built-In Function AUX_COOP Built-In Procedure AUX_DRIVES Built-In Procedure AUX_SET Built-In Procedure CONV_SET_OFST Built-In Procedure HDIN_READ Built-In Procedure HDIN_SET Built-In Procedure JNT_SET_TAR Built-In Procedure ON_JNT_SET Built-In Procedure ON_JNT_SET_DIG Built-In Procedure ON_POS Built-In Procedure ON_POS_SET Built-In Procedure ON_POS_SET_DIG Built-In Procedure ON_TRAJ_SET Built-In Procedure ON_TRAJ_SET_DIG Built-In Procedure SENSOR_GET_DATA Built-In Procedure SENSOR_GET_OFST Built-In Procedure SENSOR_SET_DATA Built-In Procedure SENSOR_SET_OFST Built-In Procedure SENSOR_TRK Built-In Procedure STANDBY Built-In Procedure DIR_GET Built-In Function DIR_SET Built-In Procedure DV4_CNTRL Built-In Procedure DV4_STATE Built-In Function EOF Built-In Function FL_BYTES_LEFT Built-In Function FL_GET_POS Built-In Function FL_SET_POS Built-In Procedure FL_STATE Built-In Function VOL_SPACE Built-In Procedure NODE_APP Built-In Procedure NODE_DEL Built-In Procedure NODE_GET_NAME Built-In Procedure NODE_INS Built-In Procedure NODE_SET_NAME Built-In Procedure PATH_GET_NODE Built-In Procedure PATH_LEN Built-In Function JNT Built-In Procedure JNTP_TO_POS Built-In Procedure POS Built-In Function
pr-0-0-pdl_11.fm
11-2
00/1207
POS_COMP_IDL Built-In Procedure POS_CORRECTION Built-In Procedure POS_FRAME Built-In Function POS_GET_APPR Built-In Function POS_GET_CNFG Built-In Function POS_GET_LOC Built-In Function POS_GET_NORM Built-In Function POS_GET_ORNT Built-In Function POS_GET_RPY Built-In Procedure POS_IDL_COMP Built-In Procedure POS_IN_RANGE Built-In Procedure POS_INV Built-In Function POS_MIR Built-In Function POS_SET_APPR Built-In Procedure POS_SET_CNFG Built-In Procedure POS_SET_LOC Built-In Procedure POS_SET_NORM Built-In Procedure POS_SET_ORNT Built-In Procedure POS_SET_RPY Built-In Procedure POS_SHIFT Built-In Procedure POS_TO_JNTP Built-In Procedure POS_XTRT Built-In Procedure VEC Built-In Function Screen Built-In Routines SCRN_ADD Built-In Procedure SCRN_CLEAR Built-In Procedure SCRN_CREATE Built-In Function SCRN_DEL Built-In Procedure SCRN_GET Built-In Function SCRN_REMOVE Built-In Procedure SCRN_SET Built-In Procedure WIN_ATTR Built-In Procedure WIN_CLEAR Built-In Procedure WIN_COLOR Built-In Procedure WIN_CREATE Built-In Procedure WIN_DEL Built-In Procedure WIN_DISPLAY Built-In Procedure WIN_GET_CRSR Built-In Procedure WIN_LINE Built-In Function WIN_LOAD Built-In Procedure WIN_POPUP Built-In Procedure WIN_REMOVE Built-In Procedure WIN_SAVE Built-In Procedure WIN_SEL Built-In Procedure WIN_SET_CRSR Built-In Procedure WIN_SIZE Built-In Procedure WIN_STATE Built-In Function CHR Built-In Procedure ORD Built-In Function STR_CAT Built-In Function STR_CODING Built-In Function STR_CONVERT Built-In Function STR_DEL Built-In Procedure STR_EDIT Built-In Procedure STR_GET_INT Built-In Function STR_GET_REAL Built-In Function STR_INS Built-In Procedure
pr-0-0-pdl_11.fm
00/1207
11-3
STR_LEN Built-In Function STR_LOC Built-In Function STR_SET_INT Built-In Procedure STR_SET_REAL Built-In Procedure STR_XTRT Built-In Procedure Bit Manipulation Built-In Routines BIT_ASSIGN Built-In Procedure BIT_CLEAR Built-In Procedure BIT_FLIP Built-In Function BIT_SET Built-In Procedure BIT_TEST Built-In Function CLOCK Built-In Function DATE Built-In Function KEY_LOCK Built-In Procedure MEM_SPACE Built-In Procedure SYS_CALL Built-In Procedure ACT_POST Built-in Procedure ERR_POST Built-In Procedure ERR_STR Built-In Function v3.11 ERR_TRAP Built-In Function ERR_TRAP_OFF Built-In Procedure ERR_TRAP_ON Built-In Procedure ARG_COUNT Built-In Function ARG_GET_VALUE Built-in Procedure ARG_INFO Built-In Function ARG_SET_VALUE Built-in Procedure ARRAY_DIM1 Built-In Function ARRAY_DIM2 Built-In Function COND_ENABLED Built-In Function COND_ENBL_ALL Built-In Procedure DRIVEON_DSBL Built-In Procedure FLOW_MOD_ON Built-In Procedure FLOW_MOD_OFF Built-In Procedure IP_TO_STR Built-in Function IS_FLY Built-In Function PROG_OWNER Built-In Function PROG_STATE Built-In Function RPLC_GET_IDX Built-In Procedure STR_GET_INT Built-In Function STR_GET_REAL Built-In Function STR_SET_INT Built-In Procedure STR_SET_REAL Built-In Procedure STR_TO_IP Built-In Function TABLE_ADD Built-In Procedure TABLE_DEL Built-In Procedure VAR_INFO Built-In Function VAR_UNINIT Built-In Function
pr-0-0-pdl_11.fm
11-4
00/1207
Examples:
Examples:
errornum_int is the number of the rror to be posted error_string is the message to be posted, associated to errornumber_int ACT_POST (43009,CEDP action)
pr-0-0-pdl_11.fm
00/1207
11-5
Comments:
index specifies the argument index in the optional list. variable indicates the variable in which the required value is copied into. array_index1 specifies the array row (if the argument is an array) array_index2 specifies the array column (if the argument is a bidimensional array) PROGRAM varargs NOHOLD, STACK = 5000 TYPE aRec = RECORD fi : INTEGER ENDRECORD TYPE aNode = NODEDEF fi : INTEGER ENDNODEDEF VAR vi : INTEGER vr : REAL (3.1415901) NOSAVE vs : STRING[10] ('variable') NOSAVE vb : BOOLEAN (TRUE) NOSAVE vp : POSITION vx : XTNDPOS vj : JOINTPOS vm : SEMAPHORE NOSAVE ve : aRec wi : ARRAY[5] OF INTEGER wr : ARRAY[5] OF REAL ws : ARRAY[5] OF STRING[10] wb : ARRAY[5] OF BOOLEAN wp : ARRAY[5] OF POSITION wx : ARRAY[5] OF XTNDPOS wj : ARRAY[5] OF JOINTPOS wm : ARRAY[5] OF SEMAPHORE we : PATH OF aNode vi_value : INTEGER
pr-0-0-pdl_11.fm
Examples:
11-6
00/1207
ROUTINE r2(ai_value : INTEGER; ...) : INTEGER EXPORTED FROM varargs global ROUTINE r2(ai_value : INTEGER; ...) : INTEGER VAR li_dtype, li_array_dim1, li_array_dim2 : INTEGER li, lj, lk : INTEGER li_value : INTEGER lr_value : REAL ls_value : STRING[20] lb_value : BOOLEAN lv_value : VECTOR lp_value : POSITION lx_value : XTNDPOS lj_value : JOINTPOS mi_value : ARRAY[5] OF INTEGER mr_value : ARRAY[5] OF REAL ms_value : ARRAY[5] OF STRING[10] mb_value : ARRAY[5] OF BOOLEAN mv_value : ARRAY[5] OF VECTOR mp_value : ARRAY[5] OF POSITION mx_value : ARRAY[5] OF XTNDPOS mj_value : ARRAY[5] OF JOINTPOS lb_byref : BOOLEAN BEGIN WRITE LUN_CRT ('In r2. Number of arguments', ARG_COUNT, NL) FOR li := 1 TO ARG_COUNT DO li_dtype := ARG_INFO(li,lb_byref, li_array_dim1, li_array_dim2) WRITE LUN_CRT ('Index:', li, ' Datatype = ', li_dtype, '[', li_array_dim1, ',', li_array_dim2, ']. By ref:', lb_byref, NL) SELECT ARG_INFO(li) OF CASE (1): ARG_GET_VALUE(li, li_value) WRITE LUN_CRT ('Int Value = ', li_value, NL) ARG_GET_VALUE(li, ai_value) WRITE LUN_CRT ('Int Value = ', ai_value, NL) ARG_GET_VALUE(li, vi_value) WRITE LUN_CRT ('Int Value = ', vi_value, NL) li_value += 10 ARG_SET_VALUE(li, li_value) CASE (2): -- Real ARG_GET_VALUE(li, lr_value) WRITE LUN_CRT ('Rea Value = ', lr_value, NL) CASE (3): -- Boolean ARG_GET_VALUE(li, lb_value) WRITE LUN_CRT ('Boo Value = ', lb_value, NL) CASE (4): -- String ARG_GET_VALUE(li, ls_value) WRITE LUN_CRT ('Str Value = ', ls_value, NL) CASE (5): -- Vector ARG_GET_VALUE(li, lv_value) WRITE LUN_CRT ('Vec Value = ', lv_value, NL) CASE (6): -- Position ARG_GET_VALUE(li, lp_value) WRITE LUN_CRT ('Pos Value = ', lp_value, NL) lp_value := POS(0) ARG_SET_VALUE(li, lp_value)
pr-0-0-pdl_11.fm
00/1207
11-7
CASE (7): -- Jointpos ARG_GET_VALUE(li, lj_value) WRITE LUN_CRT ('Jnt Value = ', lj_value, NL) CASE (8): -- Xtndpos ARG_GET_VALUE(li, lx_value) WRITE LUN_CRT ('Xtn Value = ', lx_value, NL) CASE (31): -- Array of integer ARG_GET_VALUE(li, mi_value) WRITE LUN_CRT ('Array Int Value = ', mi_value[5], NL) IF li_array_dim2 = 0 THEN FOR lj := 1 TO li_array_dim1 DO ARG_GET_VALUE(li, li_value, lj, 0) WRITE LUN_CRT ('Array Int Value[', lj::-1, ']=', li_value, NL) ENDFOR ENDIF CASE (32): -- Array of real ARG_GET_VALUE(li, mr_value) WRITE LUN_CRT ('Array Rea Value = ', mr_value[5], NL) CASE (33): -- Array of boolean ARG_GET_VALUE(li, mb_value) WRITE LUN_CRT ('Array Boo Value = ', mb_value[5], NL) CASE (34): -- Array of string ARG_GET_VALUE(li, ms_value) WRITE LUN_CRT ('Array Str Value = ', ms_value[5], NL) ENCODE (ls_value, DATE) ARG_SET_VALUE(li, ls_value, 2) CASE (35): -- Array of vector ARG_GET_VALUE(li, mv_value) WRITE LUN_CRT ('Array Vec Value = ', mv_value[5], NL) CASE (36): -- Array of position ARG_GET_VALUE(li, mp_value) WRITE LUN_CRT ('Array Vec Value = ', mp_value[5], NL) CASE (37): -- Array of jointpos ARG_GET_VALUE(li, mj_value) WRITE LUN_CRT ('Array Vec Value = ', mj_value[5], NL) CASE (38): -- Array of xtndpos ARG_GET_VALUE(li, mx_value) WRITE LUN_CRT ('Array Vec Value = ', mx_value[5], NL) CASE (0): -- Optional parameters WRITE LUN_CRT ('Optional parameter', NL) ENDSELECT ENDFOR RETURN(ARG_COUNT) END r2 See also: ARG_COUNT Built-In Function ARG_INFO Built-In Function ARG_SET_VALUE Built-in Procedure
11-8
00/1207
INTEGER index : by_reference: size_array1 : size_array2 : INTEGER BOOLEAN INTEGER INTEGER [IN] [IN] [IN] [IN]
Comments:
index specifies the argument index in the parameters list. by_reference indicates whether the argument is passed by reference or not. size_array1 specifies the array 1st dimension (if the argument is an array). size_array2 specifies the array 2nd dimension (if the argument is a bidimensional array).
Comments:
index specifies the argument index in the optional list . variable indicates the variable containing the value to be set to the specified argument. array_index1 specifies the array row (if the argument is an array) array_index2 specifies the array column (if the argument is a bidimensional array) see examples in ARG_GET_VALUE Built-in Procedure section. ARG_COUNT Built-In Function ARG_INFO Built-In Function ARG_GET_VALUE Built-in Procedure
Comments:
arm_num is the arm on which the acquisition should be applied to. coll_type is the type of sensitivity to be acquired. This routine directly reads $ARM_SENSITIVITY variable in relation to the specified coll_type. The aloowed values are COLL_LOW to COLL_USER10. time is the duration in seconds of the acquisition and should correspond, at least, to the direction of the path of which the thresholds are valid (a working
pr-0-0-pdl_11.fm
00/1207
11-9
cycle or a single motion). The range is 1..300 seconds. NOTE THAT, for time parameter, starting from system software 2.42 and subsequent versions, values 1 and 0 have a special meaning: 1 - is used to start the data acquisition to calculate the Collision Detection sensitivity thresholds 0 - is used to stop the data acquisition and assign the Collision Detection sensitivity thresholds. safety_gap is an optional flag which defines if the thresholds should be calculated under a variability margin (TRUE (default value)) or exactly on an assigned path (FALSE). $A_ALONG_2D[10, ax] predefined variable contains the variability margin value which is initialized in the configuration file. Example: ARM_COLL_THRS(1,COLL_USER7,1) MOVE ... .... MOVE ... ARM_COLL_THRS(1,COLL_USER7,0) Motion Programming Manual - chapter COLLISION DETECTION for a sample program (Program soglia)
See also:
Comments:
flag is set to ON or OFF in order to switch the cooperative motion on or off. positioner_arm, if present, specifies the number of the positioner arm. If not present, $SYNC_ARM is assumed. working_arm, if present, represents the number of the working arm. If not specified, $PROG_ARM is used. PROGRAM coop PROG_ARM=1 VAR p: POSITION BEGIN -- program to enable cooperation between arm -- 1 and arm 2 -- arm 2 is the positioner and arm 1 is the -- worker ARM_COOP(ON,2,1) MOVE LINEAR TO p -- arm 1 will move and arm 2 -- will follow ARM_COOP(OFF,2,1) ARM_COOP(ON) -- error as $SYNC_ARM is not initialized $SYNC_ARM := 2 -- enable cooperation between arm 2 ($SYNC_ARM) -- and arm 1 ($PROG_ARM) ARM_COOP(ON) ... END coop
Examples:
pr-0-0-pdl_11.fm
11-10
00/1207
If arm_num is not specified, the default program arm is used. The value returned indicates the next path node to be processed for the arm. Path processing is ahead of the motion so this does not necessarily indicate the next path node motion. A value of 0 will be returned if a PATH is not being processed on the arm and a value of -1 will be returned if the PATH processing has been completed. The PATH motion may not be finished when the processing is completed since PATH processing is ahead of the motion. ROUTINE skip_node(arm_num,skip_num: INTEGER) VAR node_num : INTEGER BEGIN node_num := ARM_GET_NODE(arm_num) WHILE(node_num<>skip_num)AND node_num>0) DO node_num := ARM_GET_NODE(arm_num) ENDWHILE IF node_num > 0 THEN ARM_SET_NODE(skip_num + 1, arm_num) ELSE WRITE(ERROR: Can not skip the node, NL) ENDIF END skip_node
Examples:
pr-0-0-pdl_11.fm
00/1207
11-11
Comments:
pr-0-0-pdl_11.fm
11-12
00/1207
Comments: Examples:
arm_value is the JOINTPOS or XTNDPOS for which the arm number is to be returned ROUTINE loader (dest:JOINTPOS) BEGIN ... MOVE ARM[ARM_NUM(dest)] TO dest ... END loader
The returned value is relative to the current value of $BASE, $TOOL, $UFRAME. If arm_num is not specified, the default arm is used. PROGRAM main VAR source : POSITION EXPORTED FROM supply dest : POSITION ROUTINE get_part EXPORTED FROM part_util ROUTINE paint_part EXPORTED FROM part_util ROUTINE release_part EXPORTED FROM part_util BEGIN dest := ARM_POS(3) MOVE NEAR source get_part paint_part MOVE TO dest release_part END main
Examples:
If arm_num is not specified, the default program arm is used. ARM_SET_NODE sets the next arm to be processed. This is not necessarily the next PATH node motion because the processing of the PATH is ahead of the actual motion.
pr-0-0-pdl_11.fm
00/1207
11-13
Examples:
ROUTINE skip_node (arm_num, skip_num : INTEGER) VAR node_num : INTEGER BEGIN node_num := ARM_GET_NODE(arm_num) WHILE (node_num <> skip_num) AND (node_num > 0) DO node_num := ARM_GET_NODE(arm_num) ENDWHILE IF node_num > 0 THEN ARM_SET_NODE(skip_num + 1, arm_num) ELSE WRITE(ERROR: Can not skip the node, NL) ENDIF END skip_node
Comments:
Flag is used for enabling (ON) and disabling (OFF) the Soft Servo modality. ax1, ax2, ax3, ax4, ax5, ax6 are the compliance degree of each axis. These parameters should only be specified when enabling the Soft Servo modality. arm_num is an optional parameter containing the arm number. If not specified, the default program arm is used. MOVE LINEAR TO pnt0001p ARM_SOFT (ON, 100, 100, 20, 1, 0, 1) -- in this section the arm is enabled to move under the -- effect of external strengths ARM_SOFT (OFF)
Examples:
pr-0-0-pdl_11.fm
11-14
00/1207
$TOOL_MASS: Mass of the tool and $TOOL_CNTR: Tool center of mass of the tool of the related arm must be properly initialized before enabling the Soft Servo modality otherwise the correctness of robot movements are not guaranteed.
00/1207
11-15
array_val : ARRAY
[IN]
array_val must be a two dimensional array. If a one dimensional array is used an error occurs. ROUTINE print_2dim_ary(matrix : ARRAY[*, *] OF INTEGER) VAR i, j, size1, size2 : INTEGER BEGIN size1 := ARRAY_DIM1(matrix) size2 := ARRAY_DIM2(matrix) FOR i := 1 TO size1 DO FOR j := 1 TO size2 DO WRITE(Element , i, , j, --> , matrix[i, j], NL) ENDFOR END print_2dim_ary
Examples:
Examples:
pr-0-0-pdl_11.fm
11-16
00/1207
Comments:
flag is set to ON or OFF in order to switch the auxiliary cooperative motion on or off. aux_joint is the number of the auxiliary axis. It can be omitted if flag is set to OFF; on the contrary, when flag is ON, aux_joint is needed. arm_num, if present, represents the number of the arm on which the auxiliary cooperative motion should be executed. If not specified, $PROG_ARM is used. PROGRAM aux VAR x: XTNDPOS -- Assume that this program is in a system with a 5 axes -- robot, a table positioner with 2 axes (axis 6 and 7) -- and an additional 1-axis positioner (axis 8). BEGIN -- enable the cooperative motion between the robot -- and the first positioner AUX_COOP(ON,7) MOVE LINEAR TO x -- the robot will move cooperatively -- enable the cooperative motion between the robot -- and the second positioner AUX_COOP(ON,8,1) -- disable the cooperative motion between the robot and -- all the positioners AUX_COOP(OFF) END aux
Examples:
pr-0-0-pdl_11.fm
00/1207
11-17
BUILT-IN Routines list Note that the program which switches to DRIVE ON must be the same which switches to DRIVE OFF. The AUX_DRIVES built-in Procedure can be used only if the Sik Device associated to the involved axes/arms has been properly configured. For further details refer to the Use of C4G Controller Unit manual (IO_TOOL Program, IO_INST Program, Setup Page chapters), Integration guidelines Safeties, I/O, Communications manual, and par. 5.3.1 $SDIN and $SDOUT on page 5-6 in current manual.
AUX_DRIVES (enable_flag, axis_num <,arm_num>) enable_flag axis_num arm_num : BOOLEAN : INTEGER : INTEGER [IN] [IN] [IN]
Comments:
enable_flag enables and disables the selective DRIVE ON on the specified axis. If ON, the DRIVE ON is enabled axis_num is one of the axes defining the positioner. If 0 it means ALL robot axes which are NOT specified as AUXILIARY axes. AUX_DRIVES (ON, 7, 1) -- enables the first positioner, linked to axes 7 and 8 AUX_DRIVES (OFF, 9, 1) -- disables the second positioner, linked to axes 9 and 10 MOVE TO pnt0001j -- the robot (axes 1..6) and the first positioner (axes 7..8) are moved
Examples:
Comments:
flag can assume the value ON or OFF. aux_axis is used for indicating the axis of which the motor and the resolver must be disconnected (case of flag set to OFF) or connected (case of flag set to ON). If not specified, the first axis declared as electrical welding gun is referred. arm_num indicates the arm number to which the electrical welding gun belongs. If not specified, the $PROG_ARM is used. AUX_SET(OFF, 8, 1) AUX_SET(ON, 8)
Examples:
pr-0-0-pdl_11.fm
11-18
00/1207
BUILT-IN Routines list variable or port. The value to be assigned to the bit is the result of a comparison between BOOLEAN parameters passed to this built-in. Calling Sequence: Parameters: BIT_ASSIGN (var_def, bit_num, bool_test <, op_set_clear <, bool_value >>) var_ref: bit_num: bool_test: op_set_clear: bool_value: INTEGER INTEGER BOOLEAN BOOLEAN BOOLEAN [IN, OUT] [IN] [IN] [IN] [IN]
Comments:
var_ref is an INTEGER variable or port reference. A bit of this variable will be set by this built-in. bit_num is an INTEGER expression indicating the bit to be set. The value must be in the range from 1 to 32, where 1 corresponds to the least significant bit of the INTEGER. The BIT_ASSIGN built-in procedure sets the bit specified by bit_num in the variable var_ref to a value that is the result of the comparison between the bool_test BOOLEAN variable (or port) and the bool_value BOOLEAN value. If bool_test is equal to bool_value, bit_num in var_ref will assume the value specified in op_set_clear; on the contrary, bit_num will be set to the negated value of op_set_clear. op_set_clear and bool_value are optional parameters. If not specified, their default value is TRUE. The following figure shows the execution of the BIT_ASSIGN built-in procedure.
The BIT_ASSIGN built-in procedure can be used as an action in a condition handler. In this case, the values of op_set_clear and bool_test are evaluated in the moment in which the condition is defined and not when the action is executed. Examples: -- if $DOUT[20] is TRUE, bit 3 of value is set to FALSE -- else to TRUE BIT_ASSIGN(value, 3, $DOUT[20], FALSE, TRUE) -- if bool_var is TRUE, bit 2 in $AOUT[4] is set to TRUE -- else to FALSE BIT_ASSIGN($AOUT[4], 2, bool_var) BIT_ASSIGN(int_var, 7, bool_var, bool2_var, bool3_var)
pr-0-0-pdl_11.fm
00/1207
11-19
var_ref is an INTEGER variable or port reference. bit_num is an INTEGER expression indicating the bit to be cleared. The value must be in the range 1 to 32 where 1 corresponds to the least significant bit of the INTEGER. The BIT_CLEAR Built-In procedure clears the bit specified by bit_num in the variable var_ref. The BIT_CLEAR built-in procedure can be used as an action in a condition handler. The values of the parameters are evaluated at the condition definition time and not at action execution time. For more information, refer to Condition Handlers chapter. BIT_CLEAR(value, 1) BIT_CLEAR(value, bit_num) BIT_CLEAR($WORD[2], bit_num)
Examples:
Comments:
port is the INTEGER analogue port reference whose bit is to be tested. bit_num is an INTEGER value specifying the bit to be tested. The value must be in the range 1 to 32 where 1 corresponds to the least significant bit of the INTEGER. To be noted that the bit value is evaluated at CONDITION definition time and not during the scanning of the expression. bit_state is a BOOLEAN value indicating if a positive (TRUE, ON) or negative (FALSE, OFF) transition should be tested. CONDITION[1]: WHEN BIT_FLIP ($WORD[100], 4, ON) DO HOLD ENDCONDITION ENABLE CONDITION[1] ...... WAIT FOR ($USER_BYTE[3], 5, FALSE)
pr-0-0-pdl_11.fm
Examples:
11-20
00/1207
var_ref is an INTEGER variable or port reference. bit_num is an INTEGER expression indicating the bit to be set. The value must be in the range 1 to 32 where 1 corresponds to the least significant bit of the INTEGER. The BIT_SET Built-In procedure sets the bit specified by bit_num in the variable var_ref. The BIT_SET built-in procedure can be used as an action in a condition handler. The values of the parameters are evaluated at the condition definition time and not at action execution time. For more information, refer to Condition Handlers chapter. BIT_SET(value, 1) BIT_SET(value, bit_num) BIT_SET($WORD[2], bit_num)
Examples:
Comments:
test_val is the INTEGER value whose bit is to be tested. test_val can be an expression, a user defined variable reference, or a system port reference. bit_num is an INTEGER value specifying the bit to be tested. The value must be in the range 1 to 32 where 1 corresponds to the least significant bit of the INTEGER. bit_state is a BOOLEAN value indicating the desired bit state to test for. If not specified, ON is assumed. If the BIT_TEST Built-In function is used in a condition handler, the bit_state parameter must be specified. This is also true when using BIT_TEST in a WAIT FOR statement. The BIT_TEST Built-In function returns TRUE if the bit in test_val which is specified by bit_num is currently set to the value specified by bit_state. bool_var:= BIT_TEST($WORD[index], bit_num) bool_var:= BIT_TEST(test_val, bit_num) bool_var:= BIT_TEST(test_val, bit_num, FALSE)
Examples:
pr-0-0-pdl_11.fm
00/1207
11-21
Comments:
str is the STRING variable to receive the character. index is the position in str where the character is assigned. char_code is the numeric code used to specify the character. If str is uninitialized and index is one, then str is initialized to a length of one having a value equal to the character. If it is initialized, any position in str can be indexed. str can also be extended by one character if the new length is still in the range of the declared physical length of the STRING. If extending str would exceed the declared length, then str is not modified. PROGRAM chr_test VAR dest_string : STRING[5] indx, code : INTEGER BEGIN dest_string := ACCD code := 66 -- ASCII code for B indx := 2 CHR(dest_string, indx, code)-- dest_string equals ABCD code := 69 -- ASCII code for E indx := 5 CHR(dest_string, indx, code)--dest_string equals ABCDE code := 70 -- ASCII code for F indx := 6 CHR(dest_string, indx, code) -- dest_string still equals -- ABCDE (no error) END chr_test
Examples:
Examples:
pr-0-0-pdl_11.fm
11-22
00/1207
cond_num is the number of the condition to be tested. prog_name is the name of the program to which the condition cond_num belongs. If not specified, the program calling this built-in is used. The returned value will be TRUE if the condition cond_num is enabled (locally or ly) and FALSE if the condition is disabled. An error occurs if the condition is not defined -- condition 3 of program pippo is tested bool_var := COND_ENABLED(3, pippo) -- condition 5 of the executing program is tested bool_var := COND_ENABLED(5) -- check if condition 1 is enabled for disabling it IF COND_ENABLED(1) THEN DISABLE CONDITION[1] ENDIF
Examples:
cond_map is an array of at least 9 elements that, after this built-in procedure has been executed, will contain the bit mapping of the enabled condition handlers associated to the program. For each array element, only bits from 1 to 30 are used. If the bit is set to 1, it means that the corresponding condition is enabled. If the bit has the value of 0, this means that the condition is not defined or not enabled. A similar kind of mapping is used in $PROG_CONDS program stack variable, but this contains the information of which condition handlers are defined by the program. Using this built-in it is possible to check which condition handlers are enabled. prog_name is the name of the program that owns the conditions. If not specified, the program calling this built-in is used. This built-in allows to get from PDL2 the same information that the user can have by issuing the system command PROGRAM VIEW /FULL, where the enable conditions are marked with a wildcard
pr-0-0-pdl_11.fm
00/1207
11-23
Examples:
PROGRAM enball NOHOLD VAR al_enbl_chh : ARRAY[15] OF INTEGER i, j, mask : INTEGER s : SEMAPHORE NOSAVE BEGIN -- get information about enabled conditions of enball program COND_ENBL_ALL(al_enbl_chh, enball) WRITE (NL) -- only the first 9 elements of $PROG_CONDS and al_enbl_chh ar FOR i := 1 TO 9 DO mask := j := 1 WHILE mask AND 0x3FFFFFFF <> 0 DO -- see if cond is defined IF $PROG_CONDS[i] AND mask <> 0 THEN WRITE ( Condition , (i - 1) * 30 + j::3, is defined) -- see if it is enabled IF al_enbl_chh[i] AND mask <> 0 THEN WRITE ( and enabled, NL) ELSE WRITE (NL) ENDIF ENDIF mask := mask SHL 1 j := j + 1 ENDWHILE ENDFOR WAIT s END enball
See also:
Comments:
distance is the distance between the workpiece and the sensor which detected its passage on the conveyor. In case of circular conveyor, the distance must be calculated along the circumference. conv_tbl_idx is the index of the conveyor table. arm_num is the arm number. If not specified, the default arm is used. Refer to the Motion Control chapter in the Motion Programming manual for further details. -- set the shift for conveyor 1 of arm 2 to 1000.5 CONV_SET_OFST (1000.5, 1, 2)
Examples:
pr-0-0-pdl_11.fm
11-24
00/1207
angle is specified in degrees. The returned value will be in the range of -1.0 to 1.0. x := COS(87.4) -- x = 0.04536
x := SIN(angle1) * COS(angle2)
The date is returned in the format day-month-year. Where day is 2 characters, month is 3 characters and year is 2 characters. Each group of characters are separated by a hyphen (-). The minimum string size is 9 characters, needed for storing the day, the month and the year. For getting also hour, or minutes and seconds, the string must be declared of 20 characters. If the return value is assigned to a variable whose maximum length is less than 9, the result will be truncated. date_in must be passed in integer format according to the table shown below. See the example to better understand how to set up an input date value
7 bits YEAR
4 bits MONTH
5 bits DAY
5 bits HOUR
6 bits MINS
5 bits SECS
The following conditions apply to the fields above: YEAR: The passed value represents the desired year minus 1980. (To pass 1994 for example, the year field woud be 1994-1980, or 14. To pass 1980, the year field should be zero.) A value from 1 to 12 A value from 1 to 31 A value from 0 to 23 A value from 0 to 59 A value from 0 to 29, the effective numbers of seconds divided by 2
pr-0-0-pdl_11.fm
00/1207
11-25
If date_in is not specified, the current date is returned. Otherwise, the date corresponding to date_in is returned Examples: PROGRAM pr_date VAR date_str : STRING[20] old_time : INTEGER BEGIN old_time := 0b00011100111111000101110011001010 . . . date_str := DATE WRITE(Current DATE (dd-mmm-yy) = , date_str, NL) WRITE(Old DATE = , DATE(old_time), NL) -- should be 28-JUL-94 END pr_date
mode is an optional parameter that indicates the modality of usage for this built-in function. Possible values are: 0, the active executing directory is returned; 1, the directory from which the program code has been loaded is returned; 2, the directory from which the variables have been loaded is returned. prog_name is the name of the program the directory of which is to be searched. If not specified, the program that executes the routine is used. ac_dir := DIR_GET -- gets the current executing directory -of the calling program ac_dir_cod := DIR_GET(1, pippo) -- gets the directory from -- where the code of pippo has been loaded
Examples:
new_dev_dir indicates the directory to be assigned as the working directory. PLEASE NOTE THAT, for positioning at the root of a device, it is needed to insert the \ character after the device name, otherwise the device will be accessed at the current working directory. For example, if the current working directory is UD:\appl\arc, the following statements:
pr-0-0-pdl_11.fm
11-26
00/1207
DIR_SET(UD:) SYS_CALL(FUDM,prova) will create UD:\appl\arc\prova. For creating a directory at the root of UD:, the user will have to write DIR_SET(UD:\\) In the example, a statement SYS_CALL(FUDM,prova) will create the directory UD:\prova.
arm_num is the arm of interest. disable_axis1..10 are optional BOOLEAN parameters. If passed as TRUE, the axis is disabled to the DRIVE ON effect. If one or more parameters are not specified, it is treated as FALSE. This function must be called when the state of the DRIVEs is OFF. DRIVEON_DSBL (1, FALSE, TRUE) -axis 2 is disabled upon DRIVE ON
Examples:
code is an integer expression that specifies the desired command to be performed. param is the list of parameters required for the command specified by code. The following outlines the valid values for code and their expected parameters: 1 Create a PIPE Parameters: a STRING for the pipe name an INTEGER for the buffer size (default = 512) an INTEGER for the number of senders (default = 1) an INTEGER for the number of readers (default = 1) an INTEGER for flags (0x1 means deleting the pipe when no longer opened) Delete a PIPE Parameters: a STRING for the pipe name
pr-0-0-pdl_11.fm
00/1207
11-27
Get the port characteristics Parameters: a STRING for the port name an INTEGER for the port characteristics an INTEGER for the size of the read-ahead buffer Set the port characteristics Parameters: a STRING for the port name an INTEGER for the port characteristics an INTEGER for the size of the read-ahead buffer Add a router to the network Parameters: a STRING for the destination. Can be a name or an IP address (dotted notation like 177.22.100.201). If this parameter is 0 it defines the default Gateway a STRING for the Gateway Delete a router in the network Parameters: a STRING for the destination. Can be a name or an IP address (dotted notation like 177.22.100.201). If this parameter is 0 it defines the default Gateway a STRING for the Gateway Add a host to the network Parameters: a STRING for the host name a STRING for the host address Delete a host in the network Parameters: a STRING for the host name a STRING for the host address Get the IP address of the host from the name Parameters: a STRING for the host name a STRING (by reference) for storing the host address Get the host name given the IP address Parameters: a STRING for the host address a STRING (by reference) for storing the host address Get the current IP address and the subnet mask Parametrs: a STRING (by reference) for for the IP address a STRING (by reference) for the subnet mask a STRING (by reference) for the host name Set the current IP address and the subnet mask Parameters: a STRING for the IP address a STRING for the subnet mask a STRING for the host name reserved
10
11
12
14..17
pr-0-0-pdl_11.fm
11-28
00/1207
20
Configure e-mail functionality. Parameters: An INTEGER which is the given back configuration ID An ARRAY[6] of STRINGs[63] containing the configuration strings: [1] incoming mail server [2] outgoing mail server [3] receiver ID [4] login [5] password [6] name of the subdirectory of UD:\sys\email containing the attached files An ARRAY[5] of INTEGERs containing the configuration integers: [1] flags: 1 - enable, 32 - do not delete the attachment directory at startup time [2] maximum allowed e-mail size [3] polling interval for POP3 server (not used)
21
Send e-mail. Parameters: An INTEGER which is the configuration ID An ARRAY[2,8] of STRINGs[63] which includes "To:" and "CC:" fields contents: [1] array of "To:" contents [2] array of "CC:" contents A STRING[1023] containing the e-mail title A STRING[1023] containing the e-mail body An ARRAY[10] of STRINGs[63] containing the attached files list An INTEGER containing the e-mail priority Read the number of e-mails currently waiting on POP3 server. Parameters: An INTEGER containing the configuration ID An INTEGER containing the given back number of e-mails on the server Receive e-mails.Note that when an e-mail is read, it is not deleted on POP3 server. Parameters: An INTEGER containing the configuration ID An INTEGER containing the index of the e-mail to be received (1=the least recent) A STRING[63] containing the "From:" field address A STRING[1023] containing the e-mail title A STRING[1023] containing the e-mail body An INTEGER containing the receipt date (ANSI TIME) An ARRAY[2,8] of STRINGs[63] which include "To:" and "CC:" fields contents: [1] array of "To:" contents [2] array of "CC:" contents An ARRAY[10] of STRINGs[63] containing the attached files list Delete e-mails from the server. The message index must be between 1 and the number of e-mails currently on the POP3 server (such a value is given back by DV4_CNTRL 22
22
23
24
pr-0-0-pdl_11.fm
00/1207
11-29
built-in routine). Such indices are consistent until the messages are not deleted from the server Parameters: An INTEGER containing the configuration ID An INTEGER containing the index of the message to be deleted 25 Get an e-mail header. This command reads the e-mail header without downloading the message from the server. Parameters: An INTEGER containing the configuration ID An INTEGER containing the index of the e-mail whose header is to be read A STRING[63] containing the "From:" field address A STRING[1023] containing the e-mail title An INTEGER containing the server receipt date (ANSI TIME) An ARRAY[2,8] of STRINGs[63] which include "To:" and "CC:" fields contents: [1] array of "To:" contents [2] array of "CC:" contents
26
Close the e-mail channel (e-mail ID). Parameters: An INTEGER containing the configuration ID Get information about a network connection. Parameters: An INTEGER which is the LUN (see OPEN FILE Statement) associated to the channel of interest A STRING (by reference) for the session peer A STRING (by reference) for the accept peer A STRING (by reference) for the connect address An INTEGER (by reference) for the remote port An INTEGER (by reference) for the local port An INTEGER (by reference) for options An INTEGER (by reference) for the linger time This code can be used for configuring different aspects of a TCP/IP channel. The parameters to the routine are used for specifying which feature is to be enabled or cleared or in fact not touched at all. Parameters: An INTEGER which is the LUN (see OPEN FILE Statement) associated to the channel of interest An INTEGER which is the value (either 0 or 1) to be assigned to the current bit. See the Examples below. An INTEGER which indicates the features involved in the required modification (-1 means restore to default values); see the Examples below. The following bits are available: 1 - NO_DELAY 2 - NOT_KEEPALIVE - do NOT send challenge packets to peer, if idle 4 - LINGER 8 - UDP_BROADCAST - permit sending of broadcast messages 16 - OOB - send out-of-band data 32 -DONT_ROUT - send without using routing tables
27
28
pr-0-0-pdl_11.fm
11-30
00/1207
64 - NOT_REUSEADDR - do not reuse address 128 - SIZE_SENDBUF - specify the maximum size of the socket-level send buffer 256 - SIZE_RCVBUF - specify the maximum size of the socket-level receive buffer 512 - OOB_INLINE - place urgent data within the normal receive data stream.
29
The listed above features are the standard ones for TCP/IP networks; for further information, please refer to the descriptions provided on the Internet. An INTEGER for the linger time An INTEGER for the size of the send buffer An INTEGER for the size of the receive buffer
Accept on a port for a connection. Parameters: An INTEGER which is the LUN (see OPEN FILE Statement) associated to the channel of interest An INTEGER for the local port number A STRING Subnet mask of clients that will accept (optional 0.0.0.0 means any) Establish a TCP/IP connection. Parameters: An INTEGER which is the LUN (see OPEN FILE Statement) associated to the channel of interest A STRING name of the remote host An INTEGER for the remote port number (0xFFFFFFFF). Disconnect a TCP/IP connection. Parameters: An INTEGER which is the LUN (see OPEN FILE Statement) associated to the channel of interest Obtain statistics about the network LAN. Parameters: An INTEGER which is the LUN (see OPEN FILE Statement) associated to the channel of interest An ARRAY[8] of INTEGERs containing the statistics Clear the statistics about the network LAN. Parameters: An INTEGER which is the LUN (see OPEN FILE Statement) associated to the channel of interest
30
31
32
33
Examples
Use of code 28: if the user would like both to enable the NO_DELAY functionality and disable the NOT_KEEPALIVE functionality, the DV4_CNTRL built-in routine is to be called as follows: DV4_CNTRL (28, dev_lun, 0x1, 0x3) where: 0x3 means that the features which are involved in the modification are: NO_DELAY (1) and NOT_KEEPALIVE (2); note that the other bits are ignored. 0x1 means bit 1 is to be set and bit 2 is to be cleared.
pr-0-0-pdl_11.fm
00/1207
11-31
dev_name_str is the device name for which information is to be retrieved. The dev_name_str must be the logical name used for the protocol which is mounted on the device. Each bit or group of bits, in the returned value, indicates some information about the device. A returned value of 0, indicates that the device does not exist. Here follows the meaning of the returned INTEGER: Bits 1 2 3-5 0: 1: 2: 3: 6-8 9-15 0 1 2 3 4 5 6 7 8 9 10 11 16-32 -Value 1 1 Meaning the device is attached a file is opened on the device for the protocol mounted on the device Default protocol reserved Winc4g on PC protocol (serial or network) 3964r reserved for the type of device for NULL device for a Window device a file device a serial line device with no protocol mounted on it reserved a serial line under a protocol reserved a pipe device Winc4g on serial connection 3964r protocol FTP Network protocol Winc4g on Ethernet connection reserved
Examples:
inform_int := DV4_STATE(dev_name_str)
pr-0-0-pdl_11.fm
11-32
00/1207
lun_id can be any user-defined variable that represents an open logical unit number (LUN). TRUE will be returned if the last operation on lun_id was a READ and the end of file was reached before all specified variables were read. If the end of file is reached before the READ statement completed, all variables not yet read are set to uninitialized. If lun_id is associated to a communication port, the end-of-file is not recognized, and in this case it is necessary to define in the program which character is assumed as file terminator and check when this character is encountered. OPEN FILE lun_id (data.txt, R) READ lun_id (str) WHILE NOT EOF(lun_id) WRITE (str, NL) READ lun_id (str) ENDWHILE OPEN FILE lun_id2 (COM0:, r) WITH $FL_NUM_CHARS = 1 bool_var := FALSE WHILE NOT bool_var DO READ lun_id2 (str::1) IF str = \033 THEN -- assume ! as end of file WRITE (Found EOF, NL) CLOSE FILE lun_id2 ENDIF ENDWHILE
Examples:
pr-0-0-pdl_11.fm
00/1207
11-33
Comments:
error_num can be any INTEGER expression whose value is in the range of 43008 to 44031. Such errors correspond to EC_USR1 and EC_USR2 class. error_str is a STRING expression that contains an error message to be displayed. error_sev is an INTEGER expression whose value is in the range of 2 to 12. These values represent the following error severities: 2 : Warning 4 : Pause, hold if holdable 6 : Pause all, hold if holdable 8 : Hold 10 : DRIVE OFF, pause all, deactivate 12 : DRIVE OFF, deactivate all When ERR_POST is executed, the error is treated like any system error. The error is posted to the error log and any error-specific condition handlers are scanned. The $ERROR variable is not set for the program that calls the ERR_POST built-in. For testing if the error specified in the ERR_POST occurred, the $SYS_ERROR predefined variable can be used. post_flags is an INTEGER expression whose value consists of the following masks: Bit 1: Do not post in the ERROR.LOG file Bit 2: Do not post on the status window of the system screen Bit 3: Do not post to condition handler scanning process Bit 4: Do not post on the scrolling window of the TP system screen Bit 5: Do not post on the scrolling window of the PC screen Bit 6: Do not post to the system state machine Bit 7: Cause program state transition based on error severity (if bit 7 isnt set the transition wont take place) Bit 10: Automatic return from current routine (Bit 7 must also be set) Bit 12: Do not post to error logger task Bit 13: Add to binary log even if severity 2 Bit 15: A latched ALARM Bit 16: A latched ALARM with disabled DRIVE ON Bit 17: A latched ALARM with disabled AUTO state trasition resp_flags : An array of integers with a min. size of 4 elements: [1] : A mask with the available responses that the user can select (see constant ERR_OK etc) [2] : Default response [3] : Action to be performed when the user has acknowledged the alarm eg. Signal event or set a variable 0 = Cancel the active alarm 1 = Post an event with data the event to be raised 2 = Set a variable. When the active alarm is acknowledged the variable is with the low word the alarm id, high word the response [4] : The data associated with the action eg. variable to be set or event id to be raised alarm_id : Optional variable (by reference) that will contain the alarm identifier after the alarm has become active resp_data : optional variable (by reference) that will contain the response made by the user with low word the alarm_id and high word the response.
pr-0-0-pdl_11.fm
11-34
00/1207
Examples:
PROGRAM actalarm NOHOLD VAR vi_id, vi_data : INTEGER wi_conf : ARRAY[4] OF INTEGER BEGIN CYCLE --First of all configure how the alarm is to be displayed --Options to be displayed on menu wi_conf[1] := (1 SHL ERR_OK - 1) OR (1 SHL ERR_CANCEL 1) OR (1 SHL ERR_RETRY - 1) OR (1 SHL ERR_ABORT - 1) OR (1 SHL ERR_SKIP - 1) wi_conf[2] := ERR_OK -- Default wi_conf[3] := 1 -- Post an event wi_conf[4] := 49152 -- Event code vi_data := 0 --Raise the error ERR_POST(43009 + $CYCLE, 'Sample error', 4, 0, wi_conf, vi_id, vi_data) --Wait for the user response WAIT FOR EVENT 49152 WRITE LUN_CRT ('User responded. Id=', vi_data AND 0xFFFF::8::2, 'Response=', vi_data SHR 8::8::2, NL) --Now cancel the alarm CANCEL ALARM vi_id END actalarm
Comments:
err_num is the error number whose message is looked for err_sev is the error severity err_flags are the flags for the returned string. If not specified, the string is returned as %s and no newline. 0x0002 no first letter capitalization 0x0004 no newline at the end. language_int is the specified language: 0 = default 1 = English 2 = French 3 = German 4 = Italian 5 = Portuguese 6= Spanish 7 = Turkish
pr-0-0-pdl_11.fm
00/1207
11-35
8 = Chinese.
error_num1..error_num8 indicate the numbers of the errors to be trapped off. While error trapping is turned off, error checking is performed by the system. This is the normal case. The maximum number is 8; negative numbers are allowed to invert the ON/OFF. PROGRAM flib NOHOLD VAR s : STRING[30] ROUTINE filefound(as_name : STRING) : BOOLEAN EXPORTED FROM flib ROUTINE filefound(as_name : STRING) : BOOLEAN BEGIN ERR_TRAP_ON(39960) -- trap SYS_CALL errors SYS_CALL(fv, as_name) ERR_TRAP_OFF(39960) IF $SYS_CALL_STS > 0 THEN -- check status of SYS_CALL RETURN(FALSE) ELSE RETURN(TRUE) ENDIF END filefound BEGIN CYCLE WRITE (Enter file name: ) READ (s) IF filefound(s) = TRUE THEN WRITE (*** file found ***, NL) ELSE WRITE (*** file NOT found ***, NL) ENDIF END flib ERR_TRAP_ON Built-In Procedure
Examples:
See also:
pr-0-0-pdl_11.fm
11-36
00/1207
error_num1..error_num8 indicate the numbers of the errors to be trapped on. Only those errors in the EC_TRAP group (from 39937 to 40075) can be used. The maximum number is 8; negative numbers are allowed to invert the ON/OFF. While error trapping is turned on, the program is expected to handle the specified errors. $ERROR or other status predefined variables ($SYS_CALL_STS, etc.) will indicate the error that occurred even if the error is currently being trapped PROGRAM flib NOHOLD VAR s : STRING[30] ROUTINE filefound(as_name : STRING) : BOOLEAN EXPORTED FROM flib ROUTINE filefound(as_name : STRING) : BOOLEAN BEGIN ERR_TRAP_ON(39960) -- trap SYS_CALL errors SYS_CALL(fv, as_name) ERR_TRAP_OFF(39960) IF $SYS_CALL_STS > 0 THEN -- check status of SYS_CALL RETURN(FALSE) ELSE RETURN(TRUE) ENDIF END filefound BEGIN CYCLE WRITE (Enter file name: ) READ (s) IF filefound(s) = TRUE THEN WRITE (*** file found ***, NL) ELSE WRITE (*** file not found ***, NL) ENDIF END flib
Examples:
The maximum value for power is 88.7. e is the base of a natural logarithm, approximately 2.71828
pr-0-0-pdl_11.fm
00/1207
11-37
Examples:
lun_id can be any user-defined variable that represents an open logical unit number (LUN). lun_id must have been opened for random access and read or an error occurs. End of line markers are counted in the returned value OPEN FILE file_lun (data.txt, RWA), WITH $FL_RANDOM = TRUE, ENDOPEN FL_SET_POS(file_lun, 0) -- beginning of the file ... IF FL_BYTES_LEFT(file_lun) > 0 THEN get_next_value ELSE write_error ENDIF
Examples:
lun_id can be any user-defined variable that represents an open logical unit number (LUN). lun_id must have been opened for random access and read or an error results. End of line markers are counted in the returned value PROGRAM test NOHOLD VAR i, lun : INTEGER arr : ARRAY[20] OF REAL ROUTINE write_values(values : ARRAY[*] OF REAL; lun : INTEGER) VAR i : INTEGER back_patch : INTEGER total : INTEGER (0) -- initialize to 0 BEGIN
Examples:
pr-0-0-pdl_11.fm
11-38
00/1207
back_patch := FL_GET_POS(lun) WRITE lun (0, NL) FOR i := 1 TO ARRAY_DIM1(values) DO IF values[i] <> 0 THEN total := total + 1 WRITE lun (values[i], NL) -- fill the array FOR i := 1 TO 20 DO arr[i] := i ENDFOR OPEN FILE lun (temp.txt, rw), WITH $FL_RANDOM = TRUE, ENDOPEN write_values(arr, lun) CLOSE FILE lun END test ELSE ENDIF ENDFOR -- backup and output number of values written to the file FL_SET_POS(lun, back_patch) WRITE lun (total) FL_SET_POS(lun, 1) -- return to end of file END write_values
file_pos must be between -1 and the number of bytes in the file: -1 means the file position is to be set to the end of the file 0 means the file position is to be set to the beginning of the file. Any other number represents an offset from the start of the file, in bytes, to which the file position is to be set. End of line markers should be counted in the file_pos value. lun_id can be any user-defined INTEGER variable that represents an open logical unit number (LUN). lun_id must be opened for random access and read or an error results. PROGRAM test NOHOLD VAR i, lun : INTEGER arr : ARRAY[20] OF REAL ROUTINE write_values(values : ARRAY[*] OF REAL; lun : INTEGER) VAR i : INTEGER back_patch : INTEGER total : INTEGER (0) initialize to 0 BEGIN back_patch := FL_GET_POS(lun) WRITE lun (0, NL)
Examples:
pr-0-0-pdl_11.fm
00/1207
11-39
FOR i := 1 TO ARRAY_DIM1(values) DO IF values[i] <> 0 THEN total := total + 1 WRITE lun (values[i], NL) ELSE ENDIF ENDFOR -- backup and output number of values written to the file FL_SET_POS(lun, back_patch) WRITE lun (total) FL_SET_POS(lun, 1) -- return to end of file END write_values BEGIN -- fill the array FOR i := 1 TO 20 DO arr[i] := i ENDFOR OPEN FILE lun (temp.txt, rw), WITH $FL_RANDOM = TRUE, ENDOPEN write_values(arr, lun) CLOSE FILE lun END test
Comments:
The return value indicates whether the file exists or not. file_name_string identifies the file whose information is to be obtained. size_int will be set to the size of the file in bytes. time_int will be set to the time of the file creation. attr_int will be set to the attributes of the file, such as hidden, read_only, or system. The following table outlines the meaning of the bits of attr_int: Bit 1 : read_only file Bit 2 : hidden file Bit 3 : system file Bit 5: directory Bit 6: folder (.ZIP) As an example, if a file is hidden and read_only, the value of attr_int will be 3 (bits 1 and 2 are set). exist_bool := FL_STATE(file_name_str) exist_bool := FL_STATE(file_name_str, size_int, time_int)
Examples:
pr-0-0-pdl_11.fm
11-40
00/1207
port is an INTEGER port reference (e.g. $WORD[]). flow_tbl_idx: is the index of the $FLOW_TBL that contains all the settings to be used during the algorithm application. For disabling the algorithm FLOW_MOD_OFF built-in procedure must be called. Please note that, if the program which called FLOW_MOD_ON is deactivated, the algorithm is automatically disabled. Reference to Motion Programming Manual for further details about this algorithm.
See also:
flow_tbl_idx: is the index of the $FLOW_TBL that contains all the settings to be used during the algorithm application. Reference to Motion Programming Manual for further details about this algorithm.
See also:
pr-0-0-pdl_11.fm
00/1207
11-41
Comments:
pos_class indicates a POSITION, JOINTPOS, or XTNDPOS variable. pos_class is set to the saved positional value. arm_num is an optional arm number. If not specified, the default arm is used. An HDIN_READ built-in call is an asynchronous statement which means it continues while the program is paused and interrupt service routines can begin before the built-in completes. See the example program described in HDIN_SET Built-In Procedure.
Examples:
Comments:
When a high speed digital input is set, the arm can be stopped and its current position recorded. servo indicates the number of the associated DSA module. enbl is a flag indicating whether the HDIN interrupt is enabled or disabled. cont is a flag indicating whether the HDIN is continuously enabled or disabled after the first transition. record_flag is a flag indicating whether the position is recorded upon HDIN. If it is recorded, HDIN_READ can be used to obtain the recorded value. arm_num indicates which arms, if any, are to be stopped. Up to four arm numbers can be specified as separate parameters. The arms must be on the specified servo board. The HDIN interrupt is triggered by a falling edge (positive to negative). For detecting the negative transition of the HDIN, events from 121 to 124 can be used in a CONDITION statement. Refer to Condition Handlers chapter for further details. The HDIN interrupt is not triggered, also if enabled, if the predefined variable $HDIN_SUSP has the value of 1. It is important to underline however that when HDIN_SET enables the HDIN interrupt, this predefined variable is zeroed, indipendently from its current value. Refer also to Predefined Variables List chapter. Program for HDIN handling; The workpiece has been previously taught and the points have been stored in wp_siding; The HDIN is used for a path search of the workpiece and, if triggered, all movements on that piece are shifted. PROGRAM hdin_ex DETACH CONST ki_siding = 6 VAR pnt0001j, pnt0002j, pnt0003j, pnt0004j: JOINTPOS FOR ARM[1] wp_siding: ARRAY[ki_siding] OF POSITION -- array of points -- that determine the workpiece area ROUTINE isr_siding VAR lp_shift: POSITION lp_hdin_pos: POSITION -- position read upon HDIN -- triggering lv_diff: VECTOR lv_i: INTEGER BEGIN -- read the position of the robot upon a $HDIN transition
Examples:
pr-0-0-pdl_11.fm
11-42
00/1207
HDIN_READ(lp_hdin_pos, 1) -- get the offset between the first location of the workpiece -- and the position where the HDIN triggered lv_diff := POS_GET_LOC(lp_hdin_pos) - POS_GET_LOC (wp_siding[1]) -- disable the HDIN reading HDIN_SET (1, FALSE, FALSE, FALSE) FOR lv_i :=1 TO ki_siding DO -- shift all motions on the workpiece by the difference -- previously calculated offsets lp_shift := wp_siding[lv_i] POS_SHIFT(lp_shift, lv_diff) MOVE LINEAR TO lp_shift ENDFOR END isr_siding BEGIN CONDITION[1] NODISABLE: WHEN HOLD DO -- temporarely disable the HDIN triggering -- when the system goes in HOLD state $DSA_DATA[1].HDIN_SUSP:=1 WHEN START DO -- reenable the HDIN triggering when motion -- restarts (START button) $DSA_DATA[1].HDIN_SUSP:= 0 ENDCONDITION CONDITION[2]: WHEN EVENT 121 DO -- triggering of HDIN (negative transition) CANCEL ALL UNLOCK RESUME DISABLE CONDITION[1] isr_siding ENDCONDITION CONDITION[3]: -- enable the HDIN when the motion starts WHEN AT START DO $DSA_DATA[1].HDIN_SUSP :=0 ENABLE CONDITION[1], CONDITION[2] ENDCONDITION MOVE TO pnt0001j CYCLE RESUME -- in case the arm is locked MOVE TO pnt0002j -- setup the HDIN to lock the arm and record the position HDIN_SET(1, TRUE, FALSE, TRUE) $DSA_DATA[1].HDIN_SUSP := 1 -- pnt0004j is the first point of research of the workpiece MOVE LINEAR TO pnt0004j WITH CONDITION[3] .... END hdin_ex
00/1207
11-43
prog_name is the name of the program that is interpreting the MOVE to be checked. PROGRAM prg_1 ROUTINE f1 (VAR spd: INTEGER) VAR b: BOOLEAN BEGIN b := IS_FLY(prg_1) IF B = TRUE THEN -- case of MOVEFLY -- undertakes the foreseen statements in case of FLY ELSE -- undertakes the foreseen statements in case of no fly ENDIF END f1 BEGIN MOVEFLY TO p1 WITH $PAR = f1(10) ... END prg_1
pr-0-0-pdl_11.fm
11-44
00/1207
ax5: REAL ax6: REAL ax7: REAL ax8: REAL ax9: REAL ax10: REAL Comments: Examples:
jnt_var is the destination var which the single axis will be assigned to. ax1 to ax10 are optional parameters containing the value of the joint to be assigned to the JOINTPOS JNT (pnt0002j,10.2,0,0,5.7)
Comments:
axis indicates the axis to be modified. value is the position value in degrees to assign to the axis. arm_num is an optional parameter specifying the desired arm to modify. If the specified axis is not present, or the axis is not enabled for this operation, or the value is not valid, an error will be detected. In order to correctly execute the JNT_SET_TAR built-in, it is mandatory to have an integer number (for exammple 124) for the transmission rate ($TX_RATE). This means that, for each axis turn (360 of the axis), the motor (resolver) undertakes an integer number of turns. This transmission rate cannot be an approximation of a real value because this could cause an unrecoverable error of axis positioning. During the built-in execution, it is needed that all axes linked to the machine (Servo CPU board) are steady, that there are no pending or active movements and that there are not positioning transient. It is suggested to use a well defined positioning range of tolerance ($TERM_TYPE : = FINE or $TERM_TYPE : = JNT_FINE) for the motion that precedes the JNT_SET_TAR call. It is a good rule, after having executed the built-in, to wait about one second before executing new movements in order to complete the process of position update. PROGRAM rotate CONST axis = 7 arm_num = 1 VAR pnt0001x, pnt0002x, pnt0003x, pnt0004x : XTNDPOS ROUTINE weld(sch : INTEGER) EXPORTED FROM weldrout BEGIN MOVE JOINT TO pnt0001x -- Move rotating table to 30 Degree CYCLE WAIT FOR $DIN[10] -- Wait for workpiece to be mounted MOVE JOINT TO pnt0002x -- Rotate table 180 degrees weld(1) MOVE JOINT TO pnt0003x -- Rotate table 120 degrees weld(2)
Examples:
pr-0-0-pdl_11.fm
00/1207
11-45
MOVE JOINT TO pnt0004x -- Rotate table 60 degrees weld(3) -- Set the position of axis 7 to 30 degrees JNT_SET_TAR(axis, 30, arm_num) END rotate
Comments:
jnt_expr is the JOINTPOS expression to be converted. pos_var is the POSITION variable that gets set to the result of the conversion. base_ref is the $BASE to be used while converting to POSITION tool_ref is the $TOOL to be used while converting to POSITION ufr_ref is the $UFRAME to be used while converting to POSITION dyn_flg is a flag to indicate whether or not dynamic references (such as conveyors, active cooperative axes/arms, etc.) should be used while converting to POSITION. A JNTP_TO_POS built-in call is an asynchronous statement which means it continues while the program is paused and interrupt service routines can begin before the built-in completes.
Examples:
-- converts from jointpos to position -- creates vector -- shifts position by vector -- converts shifted position to
See also:
pr-0-0-pdl_11.fm
11-46
00/1207
Parameters:
Comments:
physical_device is the device(s) to be locked out. The valid devices are PDV_TP and PDV_CRT. These should be ORed together when locking out both the PC keyboard and the Teach Pendant keypad. enabl_disabl specifies whether the device(s) are to be enabled (TRUE) or disabled (FALSE). flags is an optional parameter specifying when the device is to be automatically unlocked. The bits of the value indicate which system states should cause the automatic unlocking. Refer to the description of $SYS_STATE in Predefined Variables List chapter for the possible values. An error occurs if the EXECUTE, EDIT, or TEACH environments are active or the state selector is set to REMOTE or AUTO. The device is automatically unlocked when the system enters the PROGR state, power failure recovery is initiated, or a fatal error is detected.
Examples:
KEY_LOCK(PDV_TP, FALSE) -- disables the TP keyboard KEY_LOCK(PDV_CRT, FALSE) -- disables the PC keyboard KEY_LOCK(PDV_TP, TRUE) -- enables the TP keyboard
Comments:
pr-0-0-pdl_11.fm
00/1207
11-47
Examples:
MEM_SPACE(total, num_blocks, largest) WRITE(Total free bytes: , total, NL) WRITE(Number of free blocks: , num_blocks, NL) WRITE(Largest available block: , largest, NL)
path_var is the PATH variable to be modified. num_nodes is the number of nodes to be appended to the path. If not specified, one node is appended. The user-defined fields and the destination standard node fields ($MAIN_ and/or $AUX_) of the appended nodes will be uninitialized. The non-destination standard node fields will be set to the same values as the last node in the path. A NODE_APP built-in call is an asynchronous statement which means it continues while the program is paused and interrupt service routines can begin before the built-in completes. NODE_APP(weld_pth) NODE_APP(weld_pth, 4) -- appends one node -- appends four nodes
Examples:
Comments:
path_var is the PATH variable to be modified. node_indx is the index number of the first node to be deleted. It must be in the range from 1 to the total number of nodes in the path. num_nodes is the number of nodes to delete from the path, starting with node_indx. If not specified, one node is deleted. If this built-in is called on a path having no nodes, an error will be detected. After a node is deleted, all following nodes are renumbered. If a deleted node had a symbolic name, that symbolic name can be reused for a different node. A NODE_DEL built-in call is an asynchronous statement which means it continues while the program is paused and interrupt service routines can begin before the built-in completes. ROUTINE clear_path (name : PATH OF weld_node) BEGIN NODE_DEL(name, 1, PATHLEN(name)) END clear_path
Examples:
pr-0-0-pdl_11.fm
11-48
00/1207
Comments:
path_var is the PATH variable for the node. The node name node_num is obtained. name will be set to the symbolic name of node_num node of path_var path. If the symbolic name is longer than the maximum length of name, it will be truncated. An error occurs if node node_num does not have a symbolic name. An error occurs if node_num is less than 1 or greater than the current length of path_var. A NODE_GET_NAME built-in call is an asynchronous statement which means it continues while the program is paused and interrupt service routines can begin before the built-in completes. NODE_GET_NAME(weld_pth, 3, str_var)
Examples:
Comments:
path_var is the PATH variable to be modified. The new nodes will be inserted after node node_indx. node_indx must be in the range from 0 to the total number of nodes in the path. num_nodes is the number of nodes to insert into the path. If not specified, one node is inserted. All nodes from node_indx+1 to the end of the path are renumbered. The user-defined fields and the destination standard node fields ($MAIN_ and/or $AUX_) will be uninitialized. The non-destination standard node fields will be set to the same values as node_indx node. A NODE_INS built-in call is an asynchronous statement which means it continues while the program is paused and interrupt service routines can begin before the built-in completes. NODE_INS(weld_pth, 3) -- inserts one node after node 3 NODE_INS(weld_pth, 3, 4) -- inserts four nodes after node 3
Examples:
pr-0-0-pdl_11.fm
00/1207
11-49
NODE_SET_NAME (path_var, node_num <, name>) path_var node_num name : PATH : INTEGER : STRING [IN] [IN] [IN]
Comments:
path_var is the PATH variable for the node. node_num is the node whose symbolic name is either being set or cleared. name is the new symbolic name for node. It is an error if the name is already used for a different node in path_var or if it is an empty string (). If name is not specified, the symbolic name of the node is cleared. An error occurs if node_num is less than 1 or greater than the current length of path_var. A NODE_SET_NAME built-in call is an asynchronous statement which means it continues while the program is paused and interrupt service routines can begin before the built-in completes. NODE_SET_NAME(weld_pth, 3, start_welding)
Examples:
Comments:
port is an INTEGER port reference (e.g. $WORD). bit is an INTEGER expression indicating the bit representing the $ON_POS_TBL[on_pos_idx].OP_REACHED value. on_pos_idx is the $ON_POS_TBL index of the element associated to the port bit. jnt_pos is assigned to the $ON_POS_TBL[on_pos_idx].OP_JNT field, which is a PDL2 read-only variable. The arm of jnt_pos shall be the same as the arm passed to the ON_POS(ON, on_pos_idx<,arm_num>) that has to be called next. jnt_mask is the mask of the joints that are checked during the robot motion for determining if the
pr-0-0-pdl_11.fm
11-50
00/1207
$ON_POS_TBL[on_pos_idx].OP_JNT has been reached. If some joints or auxiliary axes have to be excluded from this checking, it is sufficient to pass the corresponding bit of this mask with the 0 value. jnt_mask is an optional parameter and, if not specified, it assumes the default value of $ARM_DATA[arm_num].JNT_MASK. Examples: -- program for NH4 robot and integrated rail PROGRAM op45 VAR p1, p2, p3, : POSITION VAR j1, j2 : JOINTPOS VAR i : INTEGER BEGIN -- disable On Pos feature for the first 5 $ON_POS_TBL -- elements FOR i := 1 TO 5 DO ON_POS(FALSE, i) ENDFOR CONDITION[1] NODISABLE: WHEN EVENT 134 DO $FDOUT[21] := TRUE WHEN EVENT 135 DO $FDOUT[22] := TRUE WHEN EVENT 136 DO $FDOUT[23] := TRUE ENCONDITION CONDITION[2] NODISABLE : WHEN EVENT 142 DO $FDOUT[21] := FALSE WHEN EVENT 143 DO $FDOUT[22]:= FALSE WHEN EVENT 144 DO $FDOUT [23] := FALSE ENDCONDITION ENABLE CONDITION[1], CONDITION[2] $TOOL_RMT := TRUE $BASE := POS(0, 0, 0, 0, 0, 0, ) $TOOL := POS(1000, 3000, -1000, 180, 0, 0, ) $UFRAME := POS(0, 0, 50, 0, 90, 0, ) -- On Pos definition on POSITIONs for the first 3 elements -- of $ON_POS_TBL ON_POS_SET($WORD[20], 1, 1) -- element 1 uses bit 1 of -- $WORD[20] ON_POS_SET($WORD[20], 2, 2) -- element 2 uses bit 3 of -- $WORD[20] ON_POS_SET($WORD[20], 3, 3) -- element 3 uses bit 3 of -- $WORD[20] -- On Pos definition on JOINTPOS ON_JNT_SET($WORD[20], 4, 4, j1, $JNT_MASK) -element 4 -- uses bit 4 of $WORD[20]
pr-0-0-pdl_11.fm
00/1207
11-51
ON_JNT_SET($WORD[20], 5, 5, j2, 0x40) -- element 4 uses -- bit 4 of $WORD[20] FOR i := TO 5 DO $ON_POS_TBL[i].OP_TOOL := $TOOL $ON_POS_TBL[i].OP_UFRAME := $UFRAME $ON_POS_TBL[i].OP_TOOL_DISBL := FALSE $ON_POS_TBL[i].OP_TOOL_RMT := TRUE ENDFOR $ON_POS_TBL[1].OP_POS := p1 $ON_POS_TBL[2].OP_POS := p2 $ON_POS_TBL[3].OP_POS := p3 -- Enable On Pos feature for the first 5 $ON_POS_TBL -- elements FOR i := 1 TO 5 DO ON_POS(TRUE, i, 1) ENDFOR -- Associate bit 8 of $WORD [20] to the On -- Trajectory feature ON_TRAJ_SET($WORD[20], 8, 1) -- Start of Cycle loop CYCLE MOVE TO p1 DELAY 1000 MOVE TO p2 DELAY 1000 MOVE LINEAR TO p3 DELAY 1000 MOVE TO j1 DELAY 1000 MOVE LINEAR TO j2 DELAY 1000 END op45 See also: ON_POS Built-In Procedure, ON_POS_SET Built-In Procedure, On Position Feature in Motion Programming Manual and $ON_POS_TBL: ON POS table data.
11-52
00/1207
BUILT-IN Routines list the calling. Its use is very similar to ON_JNT_SET. The difference is only related to the port data type: ON_JNT_SET refers to an INTEGER port while the ON_JNT_SET_DIG refers to a digital (BOOLEAN) port. Calling Sequence: Parameters: ON_JNT_SET_DIG (port, on_pos_idx, jnt_pos <, jnt_mask>) port on_pos_idx jnt_pos jnt_mask : : : : BOOLEAN INTEGER JOINTPOS INTEGER [IN] [IN] [IN] [IN]
Comments:
port is a BOOLEAN port reference (e.g. $DOUT). on_pos_idx is the $ON_POS_TBL index of the element associated to the digital port. jnt_pos is assigned to the $ON_POS_TBL[on_pos_idx].OP_JNT field. The arm of this position must match with the arm to the ON_POS built-in that has to be called next. jnt_mask is the mask of the joints that are checked during the robot motion for determining if the $ON_POS_TBL[on_pos_idx].OP_JNT has been reached. To exclude some axis from being checked, it is sufficient to pass the corresponding bit of this mask with the 0 value. jnt_mask is an optional parameter and, if not specified, it assumes the default value of $ARM_DATA[arm_num].JNT_MASK. See the example of ON_JNT_SET. ON_POS Built-In Procedure, ON_JNT_SET Built-In Procedure and $ON_POS_TBL: ON POS table data.
Comments:
flag is a BOOLEAN value indicating if the algorithm should be enabled (ON) or disabled (OFF). on_pos_idx is the $ON_POS_TBL index of the element to which the ON POS feature should apply. arm_num is an optional parameter containing the arm number. If not specified, the default arm is used. This parameter is only consider upon ON_POS(ON). Since the ON_POS (ON, ..) execution, the predefined variables $ON_POS_TBL[on_pos_idx]. OP_REACHED and the port bit defined with the ON_POS_SET are respectively assigned to TRUE and 1 when the $ON_POS_TBL[on_pos_idx].OP_POS or $ON_POS_TBL[on_pos_idx].OP_JNT are reached. Any condition event (WHEN EVENT 134..149) enabled for this table element could trigger. Note that the ON_POS call should be preceeded by the setting of all fields of the $ON_POS_TBL element and by the calling to the ON_POS_SET or ON_JNT_SET built-in procedure.
pr-0-0-pdl_11.fm
00/1207
11-53
After the ON_POS (ON, ), the On Pos feature remains enabled until the next ON_POS (OFF, ) on the same $ON_POS_TBL element or the next controller restart. Note that, upon ON_POS (OFF, ...) the related bit assumes the value of 0). Examples: PROGRAM op44 VAR p1, p2, p3, p4 : POSITION VAR i : INTEGER BEGIN -- definition of condition that monitor the entering and -- the exiting from the sphere defined in the $ON_POS_TBL. CONDITION[1] NODISABLE: WHEN EVENT 134 DO $FDOUT[21] := TRUE WHEN EVENT 135 DO $FDOUT[22] := TRUE WHEN EVENT 136 DO $FDOUT[23] := TRUE ENDCONDITION CONDITION[2] NODISABLE : WHEN EVENT 142 DO $FDOUT[21] := FALSE WHEN EVENT 143 DO $FDOUT[22] := FALSE WHEN EVENT 144 DO $FDOUT[23] := FALSE ENDCONDITION ENABLE CONDITION[1], CONDITION[2] -- definition of bits 1, 2, 3 of $WORD[5] -- associated to element 1,2,3 of the $ON_POS_TBL ON_POS_SET($WORD[5], 1, 1); ON_POS_SET($WORD[5], 2, 2) ON_POS_SET($WORD[5], 3, 3) FOR i := 1 TO 3 DO $ON_POS_TBL[i].OP_TOOL := $TOOL $ON_POS_TBL[i].OP_UFRAME := $UFRAME $ON_POS_TBL[i].OP_TOOL_DSBL:= FALSE $ON_POS_TBL[i].OP_TOOL_RMT := FALSE ENDFOR -- Home Position $ON_POS_TBL[1].OP_POS := p1 -- Enabling of ON POS feature on element 1 of the -- $ON_POS_TBL ON_POS(TRUE, 1, 1) -- Tip dress position $ON_POS_TBL[2].OP_POS := p2 ON_POS(TRUE, 2, 1) -- Service position $ON_POS_TBL[3].OP_POS := p3 ON_POS(TRUE, 3, 1) CYCLE MOVE ARM[1] TO p1; MOVE ARM[1] TO p2; END op44 See also:
MOVE ARM[1] TO p3
ON_POS_SET Built-In Procedure, $ON_POS_TBL: ON POS table data and On Position Feature in Motion Programming Manual.
pr-0-0-pdl_11.fm
11-54
00/1207
Comments:
port is an INTEGER port reference (e.g. $WORD). bit is an INTEGER expression indicating the bit representing the $ON_POS_TBL[on_pos_idx].OP_REACHED value. on_pos_idx is the $ON_POS_TBL index of the element associated to the port bit. See example associated to ON_POS Built-In Procedure ON_POS Built-In Procedure, $ON_POS_TBL: ON POS table data and On Position Feature in Motion Programming Manual
port is aBOOLEAN port reference (e.g. $DOUT). on_pos_idx is the $ON_POS_TBL index of the element associated to the port bit. ON_POS_SET_DIG ($DOUT[5],3) ON_POS_SET Built-In Procedure, ON_POS Built-In Procedure, $ON_POS_TBL: ON POS table data and On Position Feature in Motion Programming Manual
pr-0-0-pdl_11.fm
00/1207
11-55
Comments:
port is an INTEGER port reference (e.g. $WORD). bit is an INTEGER expression indicating the bit associated to the $CRNT_DATA[arm_num].OT_COARSE value. arm_num is the number of the arm. If not specified, the default arm is used. The following example associates bit 3 of $WORD[5] to the state of $CRNT_DATA[2].OT_COARSE. When this variable value is TRUE, the bit has the value of 1. ON_TRAJ_SET($WORD[5], 3, 2) Class of predefined variables having $OT_ prefix in Predefined Variables List chapter, $CRNT_DATA: Current Arm data fields and On Trajectory Feature in Motion Programming Manual
Examples:
See also:
port is a BOOLEAN port reference (e.g. $DOUT). arm_num is the number of the arm. If not specified, the default arm is used. ON_TRAJ_SET_DIG($DOUT[7], 1) Class of predefined variables having $OT_ prefix in Predefined Variables List chapter, ON_TRAJ_SET Built-In Procedure and On Trajectory Feature in Motion Programming Manual
pr-0-0-pdl_11.fm
11-56
00/1207
src_string is the STRING containing the character. index is the position in str of the character whose ASCII value is to be returned. If index is less than one or greater than the current length of src_string, an error occurs. PROGRAM ordinal VAR src_string : STRING[10] x : INTEGER BEGIN src_string := ABCDEF x := 0 x := ORD(src_string, 7) x := ORD(src_string, -1) x := ORD(src_string, 2) END ordinal
Examples:
-- ERROR: index out of range -- ERROR: index out of range -- x now equals 66 (ASCII for B)
PROGRAM e NOHOLD VAR s : STRING[20] NOSAVE VAR vi_value, vi_j, vi_len : INTEGER NOSAVE BEGIN s := '\199A\127\129\000N' vi_len := STR_LEN(s) FOR vi_j := 1 TO vi_len DO vi_value := ORD(s, vi_j) IF vi_value < 0 THEN vi_value += 256 -- Correct the value ENDIF WRITE LUN_CRT ('Index ', vi_j, ' Value: ', vi_value::3::-5, NL) ENDFOR END e
Comments:
path_var is the PATH variable for the node. name is the symbolic name to be searched for. node_num will be set to the node number corresponding to the symbolic name. It is an error if name is not a symbolic name of any nodes in path_var. A PATH_GET_NODE built-in call is an asynchronous statement which means it continues while the program is paused and interrupt service routines can begin before the built-in completes.
pr-0-0-pdl_11.fm
00/1207
11-57
Examples:
NODE_SET_NAME(weld_pth, 3, start_welding) NODE_INS(weld_pth, 1, 2) -- insert two nodes after node 1 PATH_GET_NODE(weld_pth, start_welding, i) -- i = 5
The returned value is the number of nodes currently in path_var. Zero is returned if path_var is uninitialized. ROUTINE clear_path (name : PATH OF weld_node) BEGIN NODE_DEL(name, 1, PATHLEN(name)) END clear_path
x, y, and z specify the Cartesian coordinates of a position. e1, e2, and e3 specify the Euler angles of a position. cnfg specifies the configuration string of a position. Refer to Data Representation chapter for a description of the configuration string. ROUTINE shift_x (curpos : POSITION; shift_val : REAL) VAR x, y, z, e1, e2, e3 : REAL cnfg : STRING[15] BEGIN POS_XTRT(curpos, x, y, z, e1, e2, e3, cnfg) x := x + shift_val curpos := POS(x, y, z, e1, e2, e3, cnfg) END shift_x
Examples:
pr-0-0-pdl_11.fm
11-58
00/1207
pos_comp is the compensated position. pos_idl is the ideal position that is returned in output after the procedure call. PROGRAM test VAR p1, p2: POSITION j1, j2: JOINTPOS FOR ARM[1] x1, x2: XTNDPOS FOR ARM[1] x3, x4: XTNDPOS FOR ARM[2] BEGIN POS_COMP_IDL (p1, p2) POS_COMP_IDL (j1, j2) POS_COMP_IDL (x1, X2) POS_COMP_IDL (x1, x3) -- error because the arm numbers -- do not match POS_COMP_IDL (p1, j2) -- error because the data types do -- not match END test POS_IDL_COMP Built-In Procedure
See also:
Comments:
initial pos is the initial position final_pos is the calculated final position angleX is the angular variation around X angleY is the angular variation around Y angleZ is the angular variation around Z frame is the frame specification (BASE, TOOL, UFRAME) arm is the optional arm number.
pr-0-0-pdl_11.fm
00/1207
11-59
Comments:
orig is the origin of the new frame. If orig is not specified, then corner is used as the origin. The x-axis of the new frame is parallel to a line defined by the points corner and x. The xy-plane is parallel to a plane defined by the points corner, x, and xy. xy is on the positive half of the xy-plane. The y-axis is on the xy-plane and is perpendicular to the x-axis. The z-axis is perpendicular to the xy-plane and intersects both the x- and yaxes. The positive direction on the z-axis is found using the right hand rule. This function is mainly useful for the definition of the user frame transformation $UFRAME. $UFRAME := POS_FRAME(origin, xaxis, xyplane)
Examples:
The approach vector represents the positive z direction of the frame of reference defined by source_pos. ROUTINE rotate_orient (posn : POSITION) VAR temp : VECTOR BEGIN temp := POS_GET_APPR(posn) POS_SET_APPR(posn, POS_GET_NORM(posn)) POS_SET_NORM(posn, temp) END rotate_orient
11-60
00/1207
BUILT-IN Routines list POSITION variable. Calling Sequence: Return Type: Parameters: Comments: POS_GET_CNFG (source_pos) STRING source_pos : POSITION [IN]
The maximum length of a configuration string is 33. Therefore, if the return value of POS_GET_CNFG is assigned to a string variable, that variable should have a maximum length of at least 33 characters to avoid truncation. Refer to Data Representation chapter for a description of the configuration string. cnfg_str := POS_GET_CNFG(cur_pos)
Examples:
The returned location vector represents the x, y, z components of source_pos. ROUTINE shift_loc (posn:POSITION; x_delta, y_delta, z_delta:REAL) VAR alter, old, new : VECTOR BEGIN alter := VEC(x_delta, y_delta, z_delta) old := POS_GET_LOC(posn) new := old # alter POS_SET_LOC(posn, new) END shift_loc
The normal vector represents the positive x axis of the frame of reference specified by a source_pos.
pr-0-0-pdl_11.fm
00/1207
11-61
Examples:
ROUTINE rotate_approach (posn : POSITION) VAR temp : VECTOR BEGIN temp := POS_GET_NORM(posn) POS_SET_NORM(posn, POS_GET_ORNT(posn)) POS_SET_ORNT(posn, temp) END rotate_approach
The orientation vector represents the positive y axis of the frame of reference defined by source_pos. ROUTINE rotate_approach (posn : POSITION) VAR temp : VECTOR BEGIN temp := POS_GET_NORM(posn) POS_SET_NORM(posn, POS_GET_ORNT(posn)) POS_SET_ORNT(posn, temp) END rotate_approach
Comments:
source_pos are the coordinates of the source position roll is the rotation around Z axis pitch is the rotation around Y axis yaw is the rotation around X axis.
11-62
00/1207
POS_IDL_COMP (pos_idl, pos_comp) pos_idl : ||POSITION|JOINTPOS|XTNDPOS|| pos_comp : ||POSITION|JOINTPOS|XTNDPOS|| pos_idl is the ideal position pos_comp is the compensated position that is returned in output after the procedure call. PROGRAM test VAR p1, p2: POSITION j1, j2: JOINTPOS FOR ARM[1] x1, x2: XTNDPOS FOR ARM[1] x3, x4: XTNDPOS FOR ARM[2] BEGIN POS_IDL_COMP (p1, p2) POS_IDL_COMP (j1, j2) POS_IDL_COMP (x1, x2) POS_IDL_COMP (x1, x3) -- error because the arm numbers -- do not match POS_IDL_COMP (p1, j2) -- error because the data types do -- not match END test POS_COMP_IDL Built-In Procedure [IN] [OUT]
Examples:
See also:
Comments:
test_pos is the position to be tested, to know whether it is in the range of the specified Arm. bool_ans is set to TRUE if the arm can reach test_pos without stroke-end errors or cartesian position out of range error; otherwise, it is set to FALSE. If no optional parameters are passed, the current $BASE and $TOOL are applied to test_pos. If arm_num is not specified, the default arm is used. base_ref is the $BASE to be used while testing tool_ref is the $TOOL to be used while testing ufr_ref is the $UFRAME to be used while testing dyn_flg is a flag to indicate whether or not dynamic references (such as
pr-0-0-pdl_11.fm
00/1207
11-63
conveyors, active cooperative axes/arms, etc.) should be used while testing. A POS_IN_RANGE built-in call is an asynchronous statement which means it continues while the program is paused and interrupt service routines can begin before the built-in completes. This built-in is implemented by converting a POSITION or XTNDPOS variable to JOINTPOS format. In the case of a controller that does not have this capability,the POS_IN_RANGE does not return an error, but sets bool_ans to FALSE. The user should therefore test $ERROR and $THRD_ERROR as shown in the second example below to fully understand the meaning of a FALSE outcome (i.e. whether the position is truly out of range, or that the built-in could not be properly executed). Examples: POS_IN_RANGE(posn, bool) IF bool THEN MOVE TO posn ELSE out_of_range(posn) ENDIF $ERROR:=0 POS_IN_RANGE(p, boo) IF boo THEN MOVE TO p ELSE IF $ERROR = 40028 THEN -- inverse kinematic not available -- cannot determine if the position was in range ELSE -- position not in range ENDIF
The returned value is the inverse of source_pos. The configuration of the returned value is that of source_pos. ROUTINE get_flange_frame (posn, flange_pos : POSITION) BEGIN flange_pos := posn : POS_INV ($TOOL) -- flange_pos represent the -- position of the flange frame when the TCP is in posn. END get_flange_frame
11-64
00/1207
POS_MIR (source, mplane, orient) POSITION source mplane orient : POSITION : POSITION : BOOLEAN [IN] [IN] [IN]
Comments:
The configuration string is mirrored by negating the turn number values. The shoulder, elbow, and wrist configuration flags are unchanged. The turn configuration flags are negated. The orientation is related to the Eulerian angles. If orient is TRUE, the Euler angles (and therefore the orientation) are mirrored. If orient is FALSE, the angles and the orientation are unchanged. A suggested technique in utilizing this built-in function is to teach the position mplane in the tool frame after aligning the xz tool plane to the plane that will be considered as the source. new_pos := POS_MIR(old_pos, mplane, orntatn)
Examples:
posn is the POSITION variable. An error will occur if it is uninitialized. The positive z direction of the frame of reference defined by posn will be set to the vector specified by appr_vec. ROUTINE rotate_orient (posn : POSITION) VAR temp : VECTOR BEGIN temp := POS_GET_APPR(posn) POS_SET_APPR(posn, POS_GET_NORM(posn)) POS_SET_NORM(posn, temp) END rotate_orient
Examples:
pr-0-0-pdl_11.fm
00/1207
11-65
Comments:
posn is the POSITION variable. An error will occur if it is uninitialized. The configuration string of posn will be set to the value specified by new_cnfg. Refer to Data Representation chapter for a description of the configuration string. POS_SET_CNFG(posn, SW)
Examples:
posn is the POSITION variable. An error will occur if it is uninitialized. The location component (x, y, z) of posn will be set to the location vector specified by new_loc. ROUTINE shift_loc (posn:POSITION; x_delta, y_delta, z_delta:REAL) VAR alter, old, new : VECTOR BEGIN alter := VEC(x_delta, y_delta, z_delta) old := POS_GET_LOC(posn) new := old # alter POS_SET_LOC(posn, new) END shift_loc
Examples:
posn is the POSITION variable. An error will occur if it is uninitialized. The positive x axis of the frame of reference defined by posn will be set to the vector specified by new_norm. ROUTINE rotate_approach (posn : POSITION) VAR temp : VECTOR BEGIN temp := POS_GET_NORM(posn) POS_SET_NORM(posn, POS_GET_ORNT(posn)) POS_SET_ORNT(posn, temp) END rotate_approach
Examples:
pr-0-0-pdl_11.fm
11-66
00/1207
posn is the POSITION variable. An error will occur if it is uninitialized. The positive y direction of the frame of reference defined by posn will be set to the vector specified by new_orient. ROUTINE rotate_approach (posn : POSITION) VAR temp : VECTOR BEGIN temp : = POS_GET_NORM(posn) POS_SET_NORM(posn, POS_GET_ORNT(posn)) POS_SET_ORNT(posn, temp) END rotate_approach
Examples:
Comments:
pos_var is position to be converted to the Z, Y, Z angular coordinates roll is the rotation around Z axis pitch is the rotation around Y axis yaw is the rotation around X axis.
posn is the POSITION variable to be shifted. If it is uninitialized, an error will occur. shf_vec is the vector by which to shift posn. Its components are added to the location components of posn.
pr-0-0-pdl_11.fm
00/1207
11-67
NOTE that POS_SHIFT Built-in Procedure shifts a Cartesian position using the CURRENT tool and frame references; the tool and frame references written in the WITH clause are not used at all. Examples: JNTP_TO_POS(jp1, p1) v1 := VEC(0, 100, 0) POS_SHIFT(p1, v1) POS_TO_JNTP(p1, jp1) jointpos -- converts from jointpos to position -- creates vector -- shifts position by vector -- converts shifted position to
Comments:
pos_expr is the POSITION expression to be converted. jnt_var is the JOINTPOS variable that results from the conversion. base_ref is the $BASE to be used while converting to JOINTPOS tool_ref is the $TOOL to be used while converting to JOINTPOS ufr_ref is the $UFRAME to be used while converting to JOINTPOS dyn_flg is a flag to indicate whether or not dynamic references (such as conveyors, active cooperative axes/arms, etc.) should be used while converting to JOINTPOS. A POS_TO_JNTP built-in call is an asynchronous statement which means it continues while the program is paused and interrupt service routines can begin before the built-in completes.
Examples:
JNTP_TO_POS(jp1, p1) -- converts from jointpos to position v1 := VEC(0, 100, 0) -- creates vector POS_SHIFT(p1, v1) -- shifts position by vector POS_TO_JNTP(p1, jp1) -- converts shifted position to jointpos JNTP_TO_POS Built-In Procedure
See also:
pr-0-0-pdl_11.fm
11-68
00/1207
Parameters:
posn x y z e1 e2 e3 cnfg
: : : : : : : :
Comments:
posn is the POSITION from which the components are to be extracted.The Cartesian coordinates of posn are assigned to x, y, and z. The Euler angles of posn are assigned to e1, e2, and e3. The configuration string of posn is assigned to cnfg.
Examples:
ROUTINE shift_x (curpos : POSITION; shift_val : REAL) VAR x, y, z, e1, e2, e3 : REAL cnfg : STRING[15] BEGIN POS_XTRT(curpos, x, y, z, e1, e2, e3, cnfg) x := x + shift_val CURPOS := POS(x, y, z, e1, e2, e3, cnfg) END shift_x
Examples:
00/1207
11-69
BUILT-IN Routines list routine and the owning program. Calling Sequence: Return Type: Parameters: status := PROG_STATE (prog_name<, line_num> <,rout_name> <, ext_prog_name>) INTEGER prog_name : STRING line_num : INTEGER rout_name : STRING ext_prog_name : STRING [IN] [IN] [IN] [IN]
Comments:
prog_name is the name of the program for which the current state is to be returned. An error will occur if the program does not exist. The returned value is an INTEGER mask indicating the program state. Only some of the bits in the mask will have meaning for the user, other bits have internal uses and are reserved. The user should filter the returned value from PROG_STATE, ANDing it with 0x7FFF. If the program is not active, all bits are set to 1. Other common values include the following: 0 : active and running <0 : not active -1 : unknown program -2 : loaded, but not active >0 : suspended for some reason; please NOTE THAT more than one bit could be set, in the mask, at the same time. 2 : paused 4 : ready state (i.e. held) 6 : ready-paused 64 : waiting for a READ completion 128 : waiting on a WAIT FOR statement 256 : motion currently in progress 512 : SYS_CALL currently in progress 1024 : DELAY currently in progress 2048 : waiting on a WAIT statement 4096 : PULSE currently in progress line_num is the number of the being executed line rout_name is the name of the being executed routine ext_prog_name is the name of the program which owns the being executed routine. PROGRAM psex VAR vi_state, vi_line : INTEGER NOSAVE vs_rout, vs_owner : STRING[32] NOSAVE ROUTINE r1 BEGIN vi_state := PROG_STATE($PROG_NAME, vi_line, vs_rout, vs_owner) WRITE LUN_CRT ('State = ', vi_state, ' Line =', vi_line, ' Rout =', vs_owner, '->', vs_rout, NL) END r1 BEGIN vi_state := PROG_STATE($PROG_NAME, vi_line, vs_rout, vs_owner) WRITE LUN_CRT ('State = ', vi_state, ' Line =', vi_line, ' Rout =', vs_owner, '->', vs_rout, NL) r1 END psex
Examples:
pr-0-0-pdl_11.fm
11-70
00/1207
max_num is an optional parameter that indicates the maximum limit for the generated number. If not specified, the limit range is between 0 and 99.
The returned value is rounded down if num has a decimal value greater than 0.0 and less than 0.5. If the value is greater than or equal to 0.5 it will be rounded up (see diagram). This function can be used to convert a REAL expression into an INTEGER value.
Examples:
-----
is is is is
17 97 -17 -97
pr-0-0-pdl_11.fm
00/1207
11-71
Parameters:
idx : INTEGER [OUT] resource_name: STRING [IN] configuration_name : STRING project_name : STRING [IN]
[IN]
Comments:
idx is the index of the resource resource_name is the name of the resource configuration_name is the name of the configuration project_name is the name of the project If configuration_name and/or project_name are not specified, they will be looked for in UD:\RESPLC directory. Note that configuration_name and project_name are referred to the PLC software environment. Such information can be read by means of ProgramResplcUtilityView command.
Examples:
The screen will be added to the screen cycle of the SCRN key on the device indicated by dev_num. The following predefined constants represent devices which are valid for dev_num: PDV_TP -- Teach Pendant PDV_CRT -- PC screen, when using WinC4G Program scrn_num indicates the screen to be added. For user-created screens, this is the value obtained by the SCRN_CREATE built-in. A screen is added to the cycle list of the SCRN key for a device only once no matter how many times the SCRN_ADD built-in is called. An error occurs if scrn_num does not correspond to a valid screen. appl_screen := SCRN_CREATE(weld_disp, PDV_TP) SCRN_ADD(PDV_TP, appl_screen) IF SCRN_GET(PDV_TP) <> appl_screen THEN SCRN_SET(PDV_TP, appl_screen) -- want appl PC screen ENDIF
Examples:
pr-0-0-pdl_11.fm
11-72
00/1207
Parameters:
Comments:
dev_num indicates the device containing the screen that is to be cleared. The following predefined constants represent devices that can be used for dev_num: PDV_TP -- Teach Pendant PDV_CRT -- PC screen (Terminal Window), when using WinC4G Program code is an INTEGER expression indicating what to clear from the user screen. The following predefined constants can be used: SCRN_CLR_CHR -- clear all characters on the specified screen SCRN_CLR_REM -- remove all windows from the specified screen SCRN_CLR_DEL -- remove and delete all user created windows from the specified screen If code is not specified, SCRN_CLR_REM is used as the default. scrn_num indicates the user-created screen to be cleared. If not specified, the system created user screen (SCRN_USER) is cleared. The SCRN_CREATE built-in function can be used to create new user screens. SCRN_CLEAR(PDV_CRT) -- Clears predefined user screen -- on the PC -- clear a user-created screen SCRN_CLEAR(PDV_CRT, SCRN_CLR_CHR, appl_screen) SCRN_CLEAR(PDV_TP) -- Clears predefined user screen -- on the TP SCRN_CLEAR(PDV_CRT, SCRN_CLR_DEL) -- windows are deleted
Examples:
scrn_name is the name given to the new screen. dev_num indicates the device for which the screen is being created. The following predefined constants represent devices that can be used for dev_num: PDV_TP -- Teach Pendant PDV_CRT -- PC screen (Terminal Window), when using WinC4G Program The above devices can be combined using the OR operator in order to create a screen for both devices. The value returned will be a screen number which can be used in other built-in routines to indicate the newly created user screen. The new screen is not automatically added to the SCRN key cycle. Use the SCRN_ADD routine if the new screen should be cycled with the other screens. An error occurs if a screen called scrn_name already exists. appl_screen := SCRN_CREATE(weld_disp, PDV_TP) SCRN_ADD(PDV_TP, appl_screen) IF SCRN_GET(PDV_TP) <> appl_screen THEN SCRN_SET(PDV_TP, appl_screen) -- want appl screen on TP ENDIF
Examples:
pr-0-0-pdl_11.fm
00/1207
11-73
scrn_name indicates the screen to be deleted. The screen must be removed from any SCRN key cycles before deletion. Use the SCRN_REMOVE built-in for this purpose. An error occurs if scrn_name is not a defined screen or is currently in the cycle of a device SCRN key. appl_screen := SCRN_CREATE(weld_disp, PDV_TP) SCRN_ADD(PDV_TP, appl_screen) IF SCRN_GET(PDV_TP) <> appl_screen THEN SCRN_SET(PDV_TP, appl_screen) -- want appl screen on TP ENDIF . . . SCRN_REMOVE(PDV_TP, appl_screen) SCRN_DEL(weld_disp);
Examples:
dev_num indicates the device for which the currently displayed screen is to be returned. The following predefined constants represent devices: PDV_TP -- Teach Pendant PDV_CRT -- PC screen (Terminal Window), when using WinC4G Program SCRN_USER -- user screen SCRN_SYS -- system screen SCRN_EDIT -- editor screenThe value returned will indicate a system created screen or a user-created screen. System created screens are represented by the following predefined constants: If the win_name parameter is specified, it will be set to the name of the window that is currently selected on the screen. IF SCRN_GET(PDV_TP) <> SCRN_SYS THEN SCRN_SET(PDV_TP, SCRN_SYS) -- want sys screen on TP ENDIF IF SCRN_GET(PDV_CRT) <> appl_screen THEN SCRN_SET(PDV_CRT, appl_screen) -- want appl screen on PC ENDIF
Examples:
pr-0-0-pdl_11.fm
11-74
00/1207
dev_num indicates the device to be used. The screen will be removed from the screen cycle of the SCRN key on that device. The following predef.constants represent devices: PDV_TP -- Teach Pendant PDV_CRT -- PC screen (Terminal Window), when running WinC4G Program scrn_num indicates the user-created screen to be removed. This is the value obtained by the SCRN_CREATE built-in. An error occurs if scrn_num does not exist or is not currently in the cycle for the specified device. appl_screen := SCRN_CREATE(weld_disp, PDV_TP) SCRN_ADD(PDV_TP, appl_screen) IF SCRN_GET(PDV_TP) <> appl_screen THEN SCRN_SET(PDV_TP, appl_screen) -- want appl screen on TP ENDIF . . . SCRN_REMOVE(PDV_TP, appl_screen) SCRN_DEL(weld_disp);
Examples:
dev_num indicates the device on which the specified screen is to be displayed. The following predefined constants represent devices: PDV_TP -- Teach Pendant PDV_CRT -- PC screen (Terminal Window), when running WinC4G Program scrn_num indicates the screen to be displayed. User-created screens or system created screens can be specified. System created screens are represented by the following predefined constants: SCRN_USER -- user screen SCRN_SYS -- system screen SCRN_EDIT -- editor screen If SCRN_EDIT is used for scrn_num and the editor is not active, an error will occur. An error occurs if scrn_num does not exist. IF SCRN_GET(PDV_TP) <> SCRN_SYS THEN SCRN_SET(PDV_TP, SCRN_SYS) -- system screen on TP ENDIF IF SCRN_GET(PDV_CRT) <> appl_screen THEN SCRN_SET(PDV_CRT, appl_screen) -- application screen on PC ENDIF
Examples:
pr-0-0-pdl_11.fm
00/1207
11-75
Comments:
sens_read receives the six elements coming from the sensor. The first three represent the translation in the X, Y and Z direction. The last three elements represent the rotations about the X, Y and Z axes. flag is assigned the value 1 if the data have never been previously read by a SENSOR_GET_DATA statement, 0 otherwise. This parameter is optional. arm is optional and, if present, indicates an arm other than the default arm on which getting the sensor data. $SENSOR_ENBL := TRUE ... SENSOR_GET_DATA(sens_read, flag) -- sensor data provides corrections in X,Y and Z directions IF flag=1 THEN WRITE(New data read: ) WRITE([, sens_read[1], ,sens_read[2], ) WRITE(sens_read[3],],NL) ENDIF
Examples:
Examples:
pr-0-0-pdl_11.fm
11-76
00/1207
Examples:
Examples:
pr-0-0-pdl_11.fm
00/1207
11-77
SENSOR_TRK (bool <,arm_num>) bool : BOOLEAN [IN] arm_num : INTEGER [IN] bool is either TRUE or FALSE and indicates which state should be enabled for the sensor tracking. arm_num is optional and if present indicates an arm other than the default arm on which to get the sensor data. The effective enabling of this type of tracking depends on the value of $SENSOR_ENBL. Note that it is not necessary to re-execute SENSOR_TRK(TRUE) after having set $SENSOR_ENBL to FALSE and then TRUE again. This tracking can be disabled only by the same program that previously enabled it. SENSOR_TRK cannot be executed if this feature has already been enabled by a second HOLDABLE program that is active at the same time. SENSOR_TRK mode is automatically disabled when the program that enabled it is deactivated.
Examples:
ROUTINE send_corr BEGIN $TIMER[1] := 0 --routine that reads the 2 offsets returned by the sensor get_corr(err_track[2], err_track[3]) SENSOR_SET_DATA(err_track) ENABLE CONDITION[1] END send_corr BEGIN CONDITION[1] : WHEN $TIMER[1] > 500 DO N send_corr --Send offset every 500 ms ENDCONDITION $SENSOR_TIME := 500 --time between each sensor scanning MOVE TO p_start -- Select the sensor tracking mode to put the arm under -- sensor control without programmed movement SENSOR_TRK(TRUE) --Enable sensor tracking $SENSOR_ENBL := TRUE ENABLE CONDITION[1] --This semaphore will be signalled by another program --or condition. WAIT sem $SENSOR_ENBL := FALSE MOVE TO p_end ....
11-78
00/1207
angle : REAL
[IN]
angle is measured in degrees. The returned value will always be in the range of -1.0 to 1.0. value := radius * SIN(angle) x := SIN(angle1) * COS(angle2) x := SIN(60) -- x = 0.866025
If num is less than zero, an error will occur. legal := SQRT(answer) > 100.0 x := SQRT(276.971) -- obtains a boolean value
-- x = 16.6424
If flag is set to ON, the arm immediatly enters stand-by state and remains in that state until the next motion is executed or the next calling to the STANDBY procedure with flag set to OFF. If flag is set to OFF, the stand-by status of the arm is exited. arm_num, if present, represents the arm number. If not specified, $PROG_ARM is used. STANDBY(OFF,2)-- request to exit from stand-by status for ARM 2 STANDBY (ON) -- request to enter stand-by status for$PROG_ARM
Examples:
pr-0-0-pdl_11.fm
00/1207
11-79
destination_string := STR_CAT (source_string1, source_string2) STRING source_string1 : STRING source_string2 : STRING destination_string : STRING [IN] [IN] [OUT]
Comments:
source_string1 is the string which source_string2 is to be appended to source_string2 is the string to be appended to source_string1 The return value is the result of appending the value of source_string2 to the value of source_string1. If the resulting string is too long to fit into the destination_string variable, the rest of the string is truncated (just like any other string assignment). Note that UNICODE strings are double + 2 bytes, compared with ASCII strings. PROGRAM conct VAR str : STRING[8] s1, s2, s3 : STRING[5] BEGIN s1 := Hi s2 := Hello s3 := There str := STR_CAT(s1, s3) str := STR_CAT(s2, s3) END conct
Examples:
source_string is the string to be processed by the built-in. int_coding is the current coding of the source_string: 0 - ASCII string 1 - UNICODE string
pr-0-0-pdl_11.fm
11-80
00/1207
Parameters:
Comments:
source_string is the string to be converted flag indicates which convertion is to be performed: 0 - convert to ASCII 1 - convert to UNICODE -1 - convert to the opposite coding (to UNICODE if ASCII, to ASCII if UNICODE) The return value (destination_string) is the converted string.
Comments:
source_string is the string in which one or more characters are to be deleted. If it is uninitialized, an error occurs. start_index is the index indicating where in source_string the deletion will start. If it is greater than the maximum size of source_string, the built-in has no effect. If it is less than one, an error occurs. chars_number is the total number of characters to be deleted. If it is greater than the number of characters from start_index to the end of source_string, then all of the characters past start_index are deleted. If it is less than one, an error occurs. PROGRAM str VAR letters : STRING[10] BEGIN letters := abcdefghij STR_DEL(letters, 0, 3) -- ERROR: start_idx < 1 STR_DEL(letters, 1, -1) -- ERROR: length<1 STR_DEL(letters, 30, 5) -- Nothing happens: 30>max length STR_DEL(letters, 4, 2) -- letters = abcfghij letters := abcdefghij -- restore for next example STR_DEL(letters, 8, 5) -- letters = abcdefg END str
Examples:
pr-0-0-pdl_11.fm
00/1207
11-81
Comments:
source_string is the STRING to be modified. operator is an INTEGER value which indicates the operation to be performed on the source_string. Several string operators can be combined using the OR operator. The following predefined constants represent the different operations to be performed on the STRING: STR_LWR Converts all upper case characters to lower case. STR_UPR Converts all lower case characters to upper case. STR_TRIM Removes leading and trailing blanks, tabs and new line characters. STR_COMP Converts multiple whitespace characters to a single character. STR_COLL Removes all whitespace characters from the source string. STR_EDIT(source_string, STR_UPR) STR_EDIT(source_string, STR_TRIM) STR_EDIT(source_string, STR_LWR OR STR_COLL)
Examples:
Comments:
source_string is the STRING from where the INTEGER value is extracted. start_index if not specified, the INTEGER is read from the first byte. bytes_number is the total amount of bytes to be read starting from start_index; if not specified, 4 bytes are read. Significant values for this parameter are between 1 and 4. int_val := STR_GET_INT(pippo,2,1) -- read the 2nd byte in -- pippo string. int_val is set to 105.
Examples:
Comments:
source_string is the STRING from where the REAL value is extracted. start_index if not specified, the REAL is read from the first byte. bytes_number is the total amount of bytes to be read starting from start_index; if not specified, 4 bytes are read. Significant values for this parameter are between 1 and 4.
pr-0-0-pdl_11.fm
11-82
00/1207
Examples:
Comments:
source_string is the STRING to be modified. If it is uninitialized, then start_index must be zero or an error occurs. start_index is an index indicating where, in source_string, the new sequence of characters is to be inserted. start_index must be between one and the current length of the string. A value out of this range will cause an error even if the string has a maximum length greater than the length of its current value. insert_string is the new sequence of characters. If the result is greater than the declared length of source_string, then it is truncated. insert_string is inserted into source_string, not written over it. PROGRAM instr VAR str : STRING[20] BEGIN STR_INS(str, 3, Specify number) -- ERROR: start_idx > 0 STR_INS(str, 1, Specify number) -- str=Specify number STR_INS(str, 15, arm ) -- str=Specify numberarm STR_INS(str, -2, arm ) -- ERROR: start is out of range STR_INS(str, 9, arm ) -- str=Specify arm numberarm END instr
Examples:
source_string is the source string expression. The returned value is not the declared length of source_string: it is the length of the current value. PROGRAM strlen VAR str : STRING[10] length : INTEGER BEGIN str := abcdef -- initialize str length := STR_LEN(str) -- length now equals 6
pr-0-0-pdl_11.fm
00/1207
11-83
str := ab -- change str value length := STR_LEN(str) -- length now equals 2 END strlen
Comments:
source_string is the string in which find_string is to be searched for. find_string is the string to be searched for; if find_string is not found, zero is returned. integer_search_par is an optional integer parameter which indicates the direction of searching and the index where to start searching. PROGRAM str VAR start_idx : INTEGER letters : STRING[10] BEGIN letters := abcdefghij start_idx := STR_LOC(letters, d) -- start_idx = 4 STR_DEL(letters, start_idx, 2) -- letters = abcfghij END str
Examples:
Comments:
source_string is the STRING to be modified. If this is uninitialized, an error occurs. start_index is an index indicating where, in source_string, the new sequence is to start. start_index must be between zero and the current length of the STRING. A value out of this range will cause an error even if the STRING has a maximum length greater than the length of its current value. replace_string is the new sequence of characters. If the result is greater than the declared length of source_string, then it is truncated.
pr-0-0-pdl_11.fm
11-84
00/1207
Examples:
PROGRAM over_str VAR source : STRING[10] BEGIN source := The Cat STR_OVS(source, 5, Dog) -- source = The Dog STR_OVS(source, 1, BIG) -- source = BIG Dog STR_OVS(source, 5, Chicken) -- source = BIG Chicke END over_str
Parameters:
Comments:
source_integer is the integer value to be assigned to the destination_string variable. destination_string is the string which the integer value is to be assigned to. start_index is the starting index, in destination_string, where the value is written. If not specified, the integer value is written starting from the first byte. bytes_number is the total amount of bytes in which the source_integer value is to be inserted in the destination_string (starting from start_index); if not specified, 4 bytes are written starting from start_index. Valid values for this parameter are included in the range 1..4. p := pippo STR_SET_INT (105,p,3,1) -- set the third byte in string p. -- p becomes piipo.
Examples:
Comments:
source_real is the real value to be assigned to the destination_string variable. destination_string is the string which the real value is to be assigned to. start_index is the starting index in destination_string where the value is written. If not specified, the real value is written starting from the first byte.
pr-0-0-pdl_11.fm
00/1207
11-85
bytes_number is the total amount of bytes in which the source_real value is to be inserted in the destination_string (starting from start_index);if not specified, 4 bytes are written starting from start_index. Valid values for this parameter are included in the range 1..4. Examples: p := pippo STR_SET_REAL (105,p,3,1) -- set the third byte in string p.
This is useful when configuring some of the system parameters that represent IP addresses but take integer values. Calling Sequence: Return Type: Parameters: Comments: Examples: int_val:=STR_TO_IP(90.0.0.2) -- int_val is set to -- 0x200005A value destination_integer := STR_TO_IP(source_string) INTEGER source_string : STRING destination_integer : INTEGER [IN] [OUT]
Comments:
source_string is the source STRING which the substring is to be extracted from. It will remain unchanged. start_index is an index indicating where to start copying. start_index must be between zero and the current length of the source_str. A value out of this range will cause an error even if the source_str has a maximum length greater than the length of its current value. substring_length is the number of characters to be copied. If it is less than zero, an error will occur. If it is greater than the number of characters from start_index to the end of source_string, then all of the characters are copied into destination_string. destination_string is the STRING that will hold the copied substring. If the length of the result is greater than the declared length of destination_string, then the result is truncated.
pr-0-0-pdl_11.fm
11-86
00/1207
Examples:
PROGRAM strg VAR str, target : STRING[10] BEGIN str := The Cat STR_XTRT(str, 5, 3, target) -- target =Cat END strg
cmnd_str is a STRING expression whose value is a list of the single characters that would be required to enter the command from the Teach Pendant or from the PC keyboard (when Winc4g program is active). For example, if the FILER VIEW command is being requested, FV would be used. Refer to Use of C4G Controller Manual for further details. cmnd_str can include any options that can be specified with the command. Some options are only available when the command is issued from SYS_CALL: /4 is useful in viewing commands (like MVP, PV, etc..), for indicating that the data displayed on a window or on a file ($SYS_CALL_OUT) should stay in 40 characters. /T, in DISPLAY commands, allows to direct the output of the SYS_CALL command to the Teach Pendant; by default, DISPLAY commands are directed to the PC video (if Winc4g program is active)./N, in MEMORY LOAD, is used for disabling the saving of the .VAR file when a MEMORY SAVE command will be issued on that program. This option is useful when the variables should only be handled from the .COD program. /P in MEMORY LOAD, used for loading in a Permanent way application programs. param is a STRING expression whose value is a parameter that can be specified with the command. If param contains a directory path specification, a double backslash should be used instead of a single one. For example, file UD:\usr1\pippo.cod , when inside a SYS_CALL, should be written as follows: SYS_CALL (FD, UD:\\usr1\\pippo.cod) Multiple param parameters, separated by commas, are allowed, as necessary for the command. It is also possible to specify more parameter than those required by the command, but only the significative ones will be considered. By default, commands issued by SYS_CALL are performed without operator interaction, such as confirmation. The predefined variable $SYS_CALL_OUT indicates the LUN on which command output will be written. It can be set only to a system-wide LUN or a LUN opened by the program issuing the SYS_CALL.
pr-0-0-pdl_11.fm
00/1207
11-87
The predefined variable $SYS_CALL_TOUT indicates a timeout for the SYS_CALL. A value of 0 indicates no timeout. If the SYS_CALL built-in does not complete within the specified timeout period, it is canceled. The predefined variable $SYS_CALL_STS indicates the status of the last SYS_CALL built-in. There is a $SYS_CALL_STS for each running program. The following commands cannot be used with the SYS_CALL built-in: PE -- PROGRAM EDIT FE -- FILER EDIT MT -- MEMORY TEACH MD -- MEMORY DEBUG UA -- UTILITY APPLICATN CCRR -- CONFIGURE CNTRLER RESTART RELOAD CI -- CONFIGURE IO_CONF DCS -- DISPLAY CLOSE SELECT FUAH -- FILER UTILITY ATTRIBUTE HIDDEN FUAR -- FILER UTILITY ATTRIBUTE READONLY FUAS -- FILER UTILITY ATTRIBUTE SYSTEM FUDC -- FILER UTILITY DIRECTORY CHANGE SCK -- SET CNTRLER KEY-LOCK SL -- SET LOGIN UCP -- UTILITY COMMUNICN PORT_CHAR The program does not continue execution until the SYS_CALL built-in completes. However, a SYS_CALL built-in is an asynchronous statement which means it continues while the program is paused and interrupt service routines can begin before the built-in completes. If an error occurs during SYS_CALL execution, the program is paused. For avoiding the suspension of program execution due to SYS_CALL errors the ERR_TRAP_ON (39960) built-in procedure can be used or bit 6 of $PROG_CNFG can be set to 1. Examples: SYS_CALL(FC, temp, data) OPEN FILE lun_id (dir.dat, RW) $SYS_CALL_OUT := lun_id -- directs sys_call output to dir.dat SYS_CALL(FV) -- filer view output to dir.dat SYS_CALL(ML/V, prog3) -- loads only prog3.var -- copies temp to data
pr-0-0-pdl_11.fm
11-88
00/1207
Parameters:
Comments:
The parameter table_name is the name of the TYPEDEF which defines the table elements. The TYPEDEF identifies the table, the fields in the TYPEDEF identify the columns of the table. The rows are represented by the variables declared with such TYPEDEF. The owning_program parameter is the name of the program that owns the table TYPEDEF declaration. The optional parameter file_for_saving can be specified if the table should be saved in a .VAR file different than the owning program. PROGRAM exampletable NOHOLD TYPE usertable = RECORD col1 : INTEGER col2 : BOOLEAN col3 : POSITION ENDRECORD VAR line1, line2 : usertable line3_6 : ARRAY[4] OF usertable BEGIN TABLE_ADD('userTable', $PROG_NAME, 'TabUser') END exampletable
Examples:
See also:
TABLE_DEL Built-In Procedure. Use of C4G manual, DATA page section par. 16.2 User table creation from DATA environment on page 16-1.
The parameter table_name is the name of the TYPEDEF which defines the table elements. TABLE_DEL('userTable') TABLE_ADD Built-In Procedure. Use of C4G manual, DATA page section par. 16.2 User table creation from DATA environment on page 16-1.
pr-0-0-pdl_11.fm
00/1207
11-89
TAN (angle) REAL angle : REAL angle is specified in degrees. x := TAN(1) x := TAN(18.9) -- x = 0.01745 -- x = 0.34237 [IN]
value is a REAL expression to be truncated to produce an INTEGER result. This function can be used to convert a REAL expression into an INTEGER value. x := TRUNC(16.35) -- x is assigned 16 ROUTINE real_to_int (value : REAL) : INTEGER BEGIN RETURN(TRUNC(value)) END real_to_int
Examples:
Comments:
any_var is the variable (of any type) about which information can be obtained (such as name and owning program) flags specifies how the information should be obtained. A value of 0x1 is to obtain the actual local parameter as opposed to finding the program variable being referenced by the local parameter var_name is the ascii name of the variable owning_prog is the ascii name of the owning program. The return value can be: 0: no variable found (the variable is a parameter to a routine but the actual
pr-0-0-pdl_11.fm
11-90
00/1207
variable could not be determined; this can happen, for example, if the parameter to the routine is an expression) 1: program variable found 2: local variable found 3: parameter variable found.
var_ref is the variable to be tested. It can be a single variable reference (my_var), an array element reference (ary_var[43]), or a field reference (fld_var.fld_name). If var_ref has not been given a value, TRUE is returned. Otherwise, FALSE is returned. If an ARRAY variable is used, it must be subscripted. If a RECORD or NODE variable is used, it must have a field specification. If a PATH variable is specified, the whole path is tested. A PATH is considered uninitialized if it has zero nodes. If a PATH node is tested, a specific field must be specified. PROGRAM testinit VAR ok : BOOLEAN count : INTEGER (0) pallet : ARRAY[4,2] OF BOOLEAN spray_pth : PATH BEGIN -- ok will be set FALSE since count is initialized ok := VAR_UNINIT(count) -- test an array element ok := VAR_UNINIT(pallet[1, 2]) -- test an entire path ok := VAR_UNINIT(spray_pth) END testinit
Examples:
pr-0-0-pdl_11.fm
00/1207
11-91
Parameters:
Comments: Examples:
x, y, and z represent the Cartesian components from which the returned VECTOR is composed. v1 := VEC(0, 100, 0) -- creates vector
device specifies the name of the device containing the volume to be checked. The following device names can be used: UD:, TD: A volume is the media on a device. For example a particular disk in a disk drive device. total is set to the total number of bytes used on the volume. free is set to the total number of unused bytes on the volume. volume is set to the volume label. An empty STRING indicates the volume is not labeled. VOL_SPACE(UD:, total, free, volume)
Examples:
attributes is an INTEGER mask indicating the attributes to be set for the specified window. The following predefined constants represent these attributes: WIN_REVERSE -- reverse video WIN_BLINK_ON -- turns blinking on WIN_BLINK_OFF -- turns blinking off WIN_BOLD_ON -- turns bolding on WIN_BOLD_OFF -- turns bolding off WIN_CRSR_OFF -- turns off display of the cursor WIN_CRSR_ON -- turns on display of the cursor A sequence of attributes can be joined together using the OR operator. The optional parameter win_name can be used to specify the window for which the
pr-0-0-pdl_11.fm
11-92
00/1207
attributes are to be set. If it is not specified, the default window indicated by $DFT_DV[1] is used. win_name can be one of the following system defined window names or any user-defined window name: TP: -- scrolling window on system screen TP1: -- window 1 on user screen on Teach Pendant TP2: -- window 2 on user screen on Teach Pendant TP3: -- window 3 on user screen on Teach Pendant CRT: -- scrolling window on system screen of the PC video -- (when Winc4g program is active) CRT1: -- window 1 on user screen on PC video CRT2: -- window 2 on user screen on PC video CRT3: -- window 3 on user screen on PC video Examples: PROGRAM wattr NOHOLD VAR lun : INTEGER BEGIN OPEN FILE lun (crt2:, rw) Window 2 on user screen of the PC WRITE lun (This is ) WIN_ATTR(WIN_BLINK_ON, crt2:) Turn blink on WRITE lun (BLINK, NL) WIN_ATTR(WIN_BLINK_OFF, crt2:) Turn blink off Reverse video and bold WIN_ATTR(WIN_REVERSE OR WIN_BOLD_ON, crt2:) WRITE lun (This is REVERSE and BOLD, ) WIN_ATTR(WIN_REVERSE, crt2:) Reverse video back to normal WRITE lun (this is only BOLD., NL) WIN_ATTR(WIN_BOLD_OFF, crt2:) Turn bold off CLOSE FILE lun END wattr The output from the example program is show below:
clear_spec is an INTEGER indicating the portion of the window to be cleared. The following predefined constants can be used: WIN_CLR_ALL -- clears entire window WIN_CLR_LINE -- clears line cursor is on WIN_CLR_BOLN -- clears from cursor to beginning of line WIN_CLR_BOW -- clears from cursor to beginning of window WIN_CLR_EOLN -- clears from cursor to end of line WIN_CLR_EOW -- clears from cursor to end of window
pr-0-0-pdl_11.fm
00/1207
11-93
The optional parameter win_name can be used to specify the window to be cleared. If it is not specified, the default window indicated by $DFT_DV[1] is used. win_name can be one of the following system defined window names or any user-defined window name: TP: -- scrolling window on system screen TP1: -- window 1 on user screen on Teach Pendant TP2: -- window 2 on user screen on Teach Pendant TP3: -- window 3 on user screen on Teach Pendant CRT: -- scrolling window on system screen of the PC -- (whenWinc4g program is active) CRT1: -- window 1 on user screen on PC video CRT2: -- window 2 on user screen on PC video CRT3: -- window 3 on user screen on PC video Examples: WIN_CLEAR (WIN_CLR_ALL, TP1:)
Comments:
fore_spec and back_spec are INTEGERs indicating the foreground and background colors to be set for the specified window. The following predefined constants can be used: WIN_BLACK WIN_RED WIN_BLUE WIN_MAGENTA WIN_GREEN WIN_YELLOW WIN_CYAN WIN_WHITE When only one of the two colours needs to be changed, -1 should be used for the colour that remains unchanged. If all_flag is TRUE, the color change affects all characters on the screen. If it is FALSE, only new characters that appear on the screen are affected. The optional parameter win_name can be used to specify the window for which the colors are to be set. If it is not specified, the default window indicated by $DFT_DV[1] is used. win_name can be one of the following system defined window names or any user-defined window name: TP: -- scrolling window on system screen TP1: -- window 1 on user screen on Teach Pendant TP2: -- window 2 on user screen on Teach Pendant TP3: -- window 3 on user screen on Teach Pendant CRT: -- scrolling window on system screen of the PC video
pr-0-0-pdl_11.fm
11-94
00/1207
Examples:
-- (when Winc4g program is active) CRT1: -- window 1 on user screen on PC video CRT2:-- window 2 on user screen on PC video CRT3: -- window 3 on user screen on PC video
PROGRAM wcolor NOHOLD VAR i : INTEGER lun : INTEGER BEGIN OPEN FILE lun (CRT2:, rw) -- Window 2 on PC screen WRITE lun (This is ) WIN_COLOR(WIN_WHITE, WIN_BLUE, FALSE, CRT2:) WRITE lun (WHITE on BLUE, NL) WIN_COLOR(WIN_WHITE, WIN_BLACK, FALSE, CRT2:) WRITE lun (This is ) WIN_COLOR(WIN_BLACK, WIN_RED, FALSE, CRT2:) WRITE lun (BLACK on RED, NL) FOR i := 1 TO 3 DO WRITE lun (This is still BLACK on RED, NL) ENDFOR DELAY 5000 -- then change color of the entire window WRITE lun (Now change entire window to WHITE on BLACK, NL) WIN_COLOR(WIN_WHITE, WIN_BLACK, TRUE, CRT2:) CLOSE FILE lun END wcolor
Comments:
num_rows indicates the number of rows the window will occupy. Windows created for the PDV_CRT cannot have more than 25 rows and windows created for the PDV_TP cannot have more than 16 rows. Created windows are not automatically displayed. WIN_DISPLAY Built-In Procedure and WIN_POPUP Built-In Procedure can be used to display created windows. The programmer is responsible for managing user-defined windows, including cleaning up windows when a program terminates. A LUN must be opened on a user-defined window before any reads or writes can take place. win_name is a STRING used to identify the window. It follows the naming convention of system defined windows (xxxx:). win_name can be used in other built-in routines requiring a window name parameter. dev_num indicates the device on which the specified window can be displayed. The following predefined constants represent devices: PDV_TP -- Teach Pendant PDV_CRT -- PC screen, when using WinC4G Program attributes is an INTEGER mask indicating the fixed attributes to be set for the specified window.
pr-0-0-pdl_11.fm
00/1207
11-95
The following predefined constants represent these fixed attributes: WIN_SCROLL -- output to the window will scroll WIN_WRAP -- lines longer than the screen width will wrap to the next line Examples: WIN_WHITE -- foreground color WIN_BLACK -- background color WIN_BOLD_OFF -- no bolding WIN_BLINK_OFF -- no blinking WIN_CRSR_ON -- cursor is displayed-- Create new user defined windows for user screen WIN_CREATE(USR1:, PDV_CRT, WIN_SCROLL OR WIN_WRAP, 25) WIN_CREATE(POP1:, PDV_CRT, WIN_SCROLL OR WIN_WRAP, 10) -- Set color and attributes for user windows WIN_COLOR(WIN_WHITE, WIN_BLUE, TRUE, USR1:) WIN_ATTR(WIN_BOLD_ON, USR1:) WIN_COLOR(WIN_BLACK, WIN_RED, TRUE, POP1:) -- Remove system defined windows from user screen WIN_REMOVE(CRT1:) WIN_REMOVE(CRT2:) WIN_REMOVE(CRT3:) WIN_DISPLAY(USR1:, SCRN_USER, 0)
win_name can be any user-defined window name (created using the WIN_CREATE built-in routine). A window can be deleted only after it has been removed from the screen. Deleting a window means the window name can no longer be used in window-related built-in routines. An error occurs if a window is deleted before all LUNs opened on the window are closed. In addition, it must also be detached. System defined windows cannot be deleted.win_name is not permitted to be deleted if the alphabetical menu window (TP0:) is currently a popup window on win_name. WIN_DEL (menu:) -- popup window over window USR1 WIN_POPUP(POP1:, USR1:) -- open a lun on window POP1 OPEN FILE lun (POP1:, rw) FOR i := 1 TO 10 DO WRITE lun (i, : This is an example of a popup window, NL) ENDFOR CLOSE FILE lun -- let user read the message DELAY 5000 Remove and delete window POP1 from user screen WIN_REMOVE(POP1:) WIN_DEL(POP1:)
Examples:
pr-0-0-pdl_11.fm
11-96
00/1207
Comments:
win_name can be one of the following system defined window names or any user-defined window name: TP: -- scrolling window on system screen TP1: -- window 1 on user screen on Teach Pendant TP2: -- window 2 on user screen on Teach Pendant TP3: -- window 3 on user screen on Teach Pendant CRT: -- scrolling window on system screen of PC video -- (when Winc4g program is active) CRT1: -- window 1 on user screen on PC video CRT2: -- window 2 on user screen on PC video CRT3: -- window 3 on user screen on PC video scrn_num indicates the screen (user-created or system created) on which the window is to be displayed. System created screens are represented by the following predefined constants: SCRN_USER user screen SCRN_SYS system screen The window is displayed on the device for which it was created, either PDV_TP or PDV_CRT. row_num indicates the number of the row at which the window is to start. If row_num causes an overlap of windows or there isnt enough room on the screen for the window, an error occurs. A window can be displayed only once on the same screen. It can be displayed on more than one screen at a time. WIN_DISPLAY (menu:, SCRN_USER, 1) -- Create new user defined windows for user screen WIN_CREATE(USR1:, PDV_CRT, WIN_SCROLL OR WIN_WRAP, 25) WIN_CREATE(POP1:, PDV_CRT, WIN_SCROLL OR WIN_WRAP, 10) -- Set color and attributes for user windows WIN_COLOR(WIN_WHITE, WIN_BLUE, TRUE, USR1:) WIN_ATTR(WIN_BOLD_ON, USR1:) WIN_COLOR(WIN_BLACK, WIN_RED, TRUE, POP1:) -- Remove system defined windows from user screen WIN_REMOVE(CRT1:) WIN_REMOVE(CRT2:) WIN_REMOVE(CRT3:) -- display the newly created window WIN_DISPLAY(USR1:, SCRN_USER, 0)
Examples:
00/1207
11-97
WIN_GET_CRSR (row, col <, win_name>) row : INTEGER col : INTEGER win_name : STRING [OUT] [OUT] [IN]
Comments:
row and col are assigned the current now and column position of the cursor on the specified window. The home position (top, left corner) on a window is (0,0). The optional parameter win_name can be used to specify the window. If it is not specified, the default window indicated by $DFT_DV[1] is used. win_name can be one of the following system defined window names or any user-defined window name: TP: -- scrolling window on system screen TP1: -- window 1 on user screen on Teach Pendant TP2: -- window 2 on user screen on Teach Pendant TP3: -- window 3 on user screen on Teach Pendant CRT: -- scrolling window on system screen of the PC video (when Winc4g program is active) CRT1: -- window 1 on user screen on PC video CRT2: -- window 2 on user screen on PC video CRT3: -- window 3 on user screen on PC video OPEN FILE crt1_lun (CRT1:, RW) row := 0 col := 5 WIN_SET_CRSR (row, col, CRT1:) -- sets to 0,5 WHILE row <= max_row DO WRITE (msg_str) row := row + 1 col := 5 WIN_SET_CRSR (row, col, CRT1:) WIN_GET_CRSR (row, col, CRT1:) ENDWHILE
Examples:
Comments:
row is the row position inside win_name. If row is not specified or it has a negative value, the current row will be used. col is the column position inside win_name. If col is not specified or it has a negative value, the current column will be used. num_chars indicates the number of characters to be obtained. If num_chars is not specified or it has a negative value, the entire row is obtained.
pr-0-0-pdl_11.fm
11-98
00/1207
win_name is the name of the window from which the characters are to be obtained. If not specified, the default window is used. Examples: PROGRAM winline NOHOLD VAR gs_line : ARRAY[20] OF STRING[80] vi_lun : INTEGER BEGIN OPEN FILE vi_lun (CRT:, w) . . . -- get row 4 gs_line := WIN_LINE(4, 0, -1, CRT:) . . . END winline
Comments:
file_name is the name of a saved window file that has been created by the WIN_SAVE built-in. The entire contents of this file will be loaded upon the window indicated by win_name. win_name is the name of the window upon which the contents of the saved window file will be loaded. start_row is the starting row position inside win_name. If start_row is not specified, row 0 will be used. If start_row is -1, the starting row position is obtained from file_name which means the contents will be loaded into the same rows from which they were saved. If start_row is less than -1 or greater than the number of rows on win_name-1 (the first row is 0), an error occurs. The entire contents of file_name are loaded, the number of rows to be loaded is obtained from the file. However, if this is greater than the number of rows on win_name - start_row, an error occurs. start_col is the starting column position inside win_name. If start_col is not specified, column 0 will be used. If start_col is -1, the starting column position is obtained from file_name which means the contents will be loaded into the same columns from which they were saved. If start_col is less than -1 or greater than the number of columns on win_name 1 (the first column is 0) an error occurs. Since the entire contents of file_name are loaded, the number of columns to be loaded is obtained from the file. However, if this is greater than the number of columns on win_name - start_col, an error occurs.
pr-0-0-pdl_11.fm
00/1207
11-99
Examples:
PROGRAM winsl NOHOLD BEGIN -- Saves 5 rows and 50 cols, starting at row 1 and col 5 WIN_SAVE(win1.win, CRT:, 1, 5, 5, 50) WIN_CLEAR(WIN_CLR_ALL, CRT2:) -- Display the saved window on CRT2:, at row 1 and col 5 WIN_LOAD(win1.win, CRT2:, -1, -1) WIN_CLEAR(WIN_CLR_ALL, CRT2:) -- Display the saved window on CRT2:, at row 0 and col 5 WIN_LOAD(win1.win, CRT2:, 0, -1) WIN_CLEAR(WIN_CLR_ALL, CRT2) -- Display the saved window on CRT2:, at row 10 and col 0 WIN_LOAD(win1.win, CRT2:, 10, 0) WIN_CLEAR(WIN_CLR_ALL, CRT2:) -- Display the saved window on CRT2:, at row 0 and col 0 WIN_LOAD(win1.win, CRT2:) END winsl
Comments:
pop_win_name is popped (overlayed) on top of fix_win_name. pop_win_name can be one of the following system defined window names or any user-defined window name: TP: -- scrolling window on system screen TP1: -- window 1 on user screen on Teach Pendant TP2: -- window 2 on user screen on Teach Pendant TP3: -- window 3 on user screen on Teach Pendant CRT: -- scrolling window on system screen of PC video (when Winc4g program is active) CRT1: -- window 1 on user screen on PC video CRT2: -- window 2 on user screen on PC video CRT3: -- window 3 on user screen on PC video fix_win_name can be the name of any window that has been displayed as a fixed window. If more than one window is popped on top of a single fixed window, the popup windows are tiled vertically. For example, the first one starts at row 0 of fix_win_name and the next one starts with the first available row after the first popup window. An error occurs if pop_win_name wont fit on the remaining space of fix_win_name. The optional parameter scrn_num can be used to indicate the screen on which the window is to be popped up. scrn_num can indicate a system created screen or a user-created screen. System created screens are represented by the following predefined constants: SCRN_USER user screen SCRN_SYS system screen
pr-0-0-pdl_11.fm
11-100
00/1207
Examples:
A scrn_num parameter is only needed if fix_win_name is displayed on more than one screen.
WIN_POPUP (emsg:, menu:) -- popup window over window USR1 WIN_POPUP(POP1:, USR1:) -- open a lun on window POP1 OPEN FILE lun (POP1:, rw) FOR i := 1 TO 10 DO WRITE lun (i, : This is an example of a popup window, NL) ENDFOR CLOSE FILE lun -- let user read the message DELAY 5000 -- Remove and delete window POP1 from user screen WIN_REMOVE(POP1:) WIN_DEL(POP1:)
win_name can be one of the following system defined window names or any user-defined window name representing a window that is currently displayed or popped up: TP: -- scrolling window on system screen TP1: -- window 1 on user screen on Teach Pendant TP2: -- window 2 on user screen on Teach Pendant TP3: -- window 3 on user screen on Teach Pendant CRT: -- scrolling window on system screen of PC video (when Winc4g program is active) CRT1: -- window 1 on user screen on PC video CRT2: -- window 2 on user screen on PC video CRT3: -- window 3 on user screen on PC video Removing a fixed window causes the portion of the screen occupied by that window to be set to black. Any windows that have been popped up on that window are also removed. Removing a popped up window causes the underlying fixed window to become visible. The optional parameter scrn_num can be used to indicate the screen from which the window is to be removed. Either a system created or user-created screen can be specified. System created screens are represented by the following predefined constants: SCRN_USER -- user screen SCRN_SYS -- system screen A scrn_num parameter is only needed if win_name is displayed on more than one screen.
pr-0-0-pdl_11.fm
00/1207
11-101
Examples:
WIN_REMOVE (menu:) -- popup window over window USR1 WIN_POPUP(POP1:, USR1:) -- open a lun on window POP1 OPEN FILE lun (POP1:, rw) FOR i := 1 TO 10 DO WRITE lun (i, : This is an example of a popup window, NL) ENDFOR CLOSE FILE lun -- let user read the message DELAY 5000 -- Remove and delete window POP1 from user screen WIN_REMOVE(POP1:) WIN_DEL(POP1:)
Parameters:
Comments:
file_name is the name of the saved window file that will be used to save the contents of the window. win_name is the name of the window to be saved to the saved window file. start_row is the starting row position inside the window. If this parameter is not specified, the first row of the window will be used (row 0). An error occurs if start_row is less than 0 or greater than the last row of win_name. start_col is the starting column position inside the window. If this parameter is not specified, column 0 will be used. An error occurs if start_col is less than 0 or greater than the last column of win_name. num_rows is the number of rows from the window to save in the saved window file. If this parameter is not specified, all rows from the window will be saved. An error occurs if num_rows is less than 1 or greater than the number of rows on win_name - start_row. num_cols is the number of columns from the window to save in the saved window file. If this parameter is not specified, all columns from the window will be saved. An error occurs if num_cols is less than 1 or greater than the number of columns on win_name - start_col. output_row is the starting row on the output screen when the output device is a window. output_col is the starting column on the output screen when the output device is a window.
pr-0-0-pdl_11.fm
11-102
00/1207
Examples:
PROGRAM wins1 NOHOLD CONST ks_dev = CRT2: -- Window for the demo. VAR vi_i, vi_lun : INTEGER BEGIN -- Start off with a clean window WIN_CLEAR(WIN_CLR_ALL, ks_dev) WIN_COLOR(WIN_RED, WIN_BLACK, FALSE, ks_dev) OPEN FILE vi_lun (CRT2:, w) -- Start in the corner to draw a box WIN_SET_CRSR(0, 0, ks_dev) WRITE vi_lun (\201) FOR vi_i := 1 TO 10 DO WRITE vi_lun (\205) ENDFOR WRITE vi_lun (\187) -- Middle lines of box FOR vi_i := 1 TO 5 DO WIN_COLOR(WIN_RED, WIN_BLACK, FALSE, ks_dev) WIN_SET_CRSR(vi_i, 0, ks_dev) WRITE vi_lun (\186) WIN_COLOR(1, WIN_GREEN, FALSE, ks_dev) WRITE vi_lun ( ::10) WIN_COLOR(WIN_RED, WIN_BLACK, FALSE, ks_dev) WRITE vi_lun (\186) ENDFOR -- Bottom line of box WIN_SET_CRSR(5, 0, ks_dev) WRITE vi_lun (\200) FOR vi_i := 1 TO 10 DO WRITE vi_lun (\205) ENDFOR WRITE vi_lun (\188) -- Save the pattern into two files WIN_SAVE(winex.win, ks_dev, 0, 0, 6, 12) CYCLE WIN_LOAD(winex.win, ks_dev, $CYCLE MOD 15, $CYCLE MOD 69) DELAY 150 IF $CYCLE MOD 69 = 0 THEN WIN_COLOR($CYCLE MOD 8, $CYCLE MOD 8 + 1, TRUE, ks_dev) ENDIF END wins1
win_name can be any user-defined window name (created using the WIN_CREATE built-in routine). scrn_num indicates the screen which displays the window. It can be a user-created or system created screen. If not specified, SCRN_USER is used.
pr-0-0-pdl_11.fm
00/1207
11-103
Examples:
WIN_SEL (menu:) OPEN FILE lun (CRT2:, RW) WRITE lun (Enter value: ) WIN_SEL(CRT2:) -- on SCRN_USER READ lun (val)
Comments:
row and col specify the row and column position to which the cursor is to be set. The home position (top, left corner) on a window is (0,0). The optional parameter win_name can be used to specify the window. If it is not specified, the default window indicated by $DFT_DV[1] is used. win_name can be one of the following system defined window names or any user-defined window name: TP: -- scrolling window on system screen TP1: -- window 1 on user screen on Teach Pendant TP2: -- window 2 on user screen on Teach Pendant TP3: -- window 3 on user screen on Teach Pendant CRT: -- scrolling window on PC video system screen ( Winc4g program is active) CRT1: -- window 1 on user screen on PC video CRT2: -- window 2 on user screen on PC video CRT3: -- window 3 on user screen on PC video OPEN FILE crt1_lun (CRT1:, RW) row := 0 col := 5 WIN_SET_CRSR (row, col, CRT1:) -- sets to 0,5 WHILE row <= max_row DO WRITE (msg_str) row := row + 1 col := 5 WIN_SET_CRSR (row, col, CRT1:) WIN_GET_CRSR (row, col, CRT1:) ENDWHILE
Examples:
pr-0-0-pdl_11.fm
11-104
00/1207
window_name can be one of the following system defined window names or any user-defined window name: TP: -- scrolling window on system screen TP1: -- window 1 on user screen on Teach Pendant TP2: -- window 2 on user screen on Teach Pendant TP3: -- window 3 on user screen on Teach Pendant CRT: -- scrolling window on system screen of the PC video (when Winc4g program is active) CRT1: -- window 1 on user screen on PC video CRT2: -- window 2 on user screen on PC video CRT3: -- window 3 on user screen on PC video number_of_rows is the number of rows that the specified window must occupy. WIN_CREATE(win_name, PDV_TP, WIN_SCROLL, win_original_size) IF screen_size <win_original_size THEN WIN_SIZE(win_name, win_reduced_size) ENDIF WIN_POPUP(win_name, TP2:)
Examples:
Comments:
win_name can be one of the following system defined window names or any user-defined window name: TP: -- scrolling window on system screen TP1: -- window 1 on user screen on Teach Pendant TP2: -- window 2 on user screen on Teach Pendant TP3: -- window 3 on user screen on Teach Pendant CRT: -- scrolling window on PC video system screen (when Winc4g program active) CRT1: -- window 1 on user screen on PC video CRT2: -- window 2 on user screen on PC video CRT3: -- window 3 on user screen on PC video The returned value is an INTEGER mask indicating the current window state. The meaning of the INTEGER is as follows: Bit 1 : is window displayed on SCRN_SYS Bit 2 : is window a popup on SCRN_SYS Bit 3 : is window displayed on SCRN_USER Bit 4 : is window a popup on SCRN_USER Bit 5 : are LUNs opened on window
pr-0-0-pdl_11.fm
00/1207
11-105
Bit 6 : is window attached to a program Bit 7 : is window defined for CRT Bits 8-10 : the foreground color Bits 11-13 : the background color Bit 14 : is window displayed on screen indicated by the scrn_num argument Bit 15 : is window a popup on screen indicated by the scrn_num argument Bit 16 : unused Bit 17 : is window saved Bit 18 : is input allowed on window Bit 19 : does output on window scroll Bits 20-21 : unused Bit 22 : is cursor turned off Bit 23 : unused Bit 24 : does output on window wrap Bits 25-32 : unused scrn_num indicates the screen on which the window is to be displayed. It can be a user-created screen or a system created screen. System created screens are represented by the following predefined constants: SCRN_USER -- user screen SCRN_SYS -- system screen parent will be set to the name of the window upon which win_name is popped up (if it isnt a fixed window). num_rows will be set to the number of rows contained on win_name. Examples: -- Routine to write the state of the window ROUTINE write_state(win : STRING; scrn : INTEGER) VAR state : INTEGER parent : STRING[6] nrows : INTEGER BEGIN state := WIN_STATE(win, scrn, parent, nrows) -- Write window name and state value WRITE (win::5, state::9::2) -- Device IF state AND ws_crt = ws_crt THEN WRITE ( CRT) ELSE WRITE ( TP) ENDIF ... -- Is there a parent ? IF NOT VAR_UNINIT(parent) THEN WRITE (parent::6) ELSE WRITE ( ::6) ENDIF -- Number of rows WRITE (nrows::3) -- File opened ? IF state AND ws_fopen = ws_fopen THEN WRITE (X::3) ELSE WRITE ( ::3) ENDIF ... IF state AND ws_nocrsr = ws_nocrsr THEN
pr-0-0-pdl_11.fm
11-106
00/1207
WRITE (X::3) ELSE WRITE ( ::3) ENDIF WRITE (NL) END write_state
pr-0-0-pdl_11.fm
00/1207
11-107
pr-0-0-pdl_11.fm
11-108
00/1207
12.
The following information is provided for each predefined variable: Memory Category Load Category Data Type Limits (none indicates no limits); Attributes (none indicates no special attributes); S/W Version Unparsed Description.
Predefined variables begin with a dollar sign ($) to easily distinguish them from user defined variables.
Arm: these are arm dependent variables. Controller: these are controller related variables.
00/0607
12-1
Predefined Variables List DSA: these are variables related to the DSA configuration. Input/Output: there are Input/output dependent variables. Retentive: these variables are saved in NVRAM / FLASH memory and, upon restart, they are loaded with a higher precedence in respect with the .C4G file. Upon a Configure Save or Load they are also copied to the Retentive Memory, in order to align the content of the execution memory with the content of the Retentive Memory. Not saved: these variables are not saved in a .C4G file but are initialised by the system.Static and field predefined variable values can be saved and loaded using the ConfigureSave and ConfigureLoad commands as described in the C4G Use and Maintenance Manuals.
Note that complex structures such as $ARM_DATA, $MCP_DATA, $DSA_DATA are classified as Not Saved Load Category, even if some fields of theirs are always saved and loaded from .C4G file.
12.2.1
Minor Category
It is the sub-category which a predefined variable belongs to. It indicates which option can be applied during a ConfigureSaveCategory or a ConfigureLoadCategory command. For further information see also Control Unit Use Manual - Chap. SYSTEM COMMANDS.
12.4 Attributes
The attributes section lists access information. Read-only. Usually, PDL2 programs can assign (write ) a value to a predefined variable and can examine (read) the current value of a variable. The read-only attribute indicates that a predefined variable can only be read . WITH MOVE, WITH MOVE ALONG, WITH OPEN FILE: some predefined variables can assume a specific value that is assigned during a statement execution using the WITH clause. Limited Access. Some predefined variables can only be accessed using the WITH clause. Field node: the predefined variable can be used as a predefined field of a path node (NODEDEF data type definition). Pulse usable : the predefined variable can be used in a PULSE statement.
pr-0-0-pdl_12.fm
12-2
00/0607
Predefined Variables List Priviledged read-write: only COMAU technicians or COMAU programs can set this variables by means of a special mechanism.
12.5 Limits
This indication is present if the value of a predefined variable should be included in a specific range of values.
12.7 Unparsed
If this information is present, it specifies the format (e.g. hexadecimal) in which the value of the predefined variable is shown when the configuration file (.C4G) is converted in an ASCII format (.PDL).
pr-0-0-pdl_12.fm
00/0607
12-3
12.8.1
12.8.2
12.8.3
pr-0-0-pdl_12.fm
12-4
00/0607
Predefined Variables List $FLY_TYPE: Type of fly motion $FL_STS: Status of last file operation $MOVE_TYPE: Type of motion $ORNT_TYPE: Type of orientation $PROG_ACC_OVR: Program acceleration override $PROG_ARG: Program's activation argument $PROG_ARM: Arm of program $PROG_CNFG: Program configuration $PROG_CONDS: Defined conditions of a program $PROG_DEC_OVR: Program deceleration override $PROG_NAME: Executing program name $PROG_SPD_OVR: Program speed override $PROG_UADDR: Address of program user-defined memory access variables $PROG_ULEN: Length of program memory access user-defined variables $READ_TOUT: Timeout on a READ $SPD_OPT: Type of speed control $STRESS_PER: Stress percentage in cartesian fly $SYNC_ARM: Synchronized arm of program $SYS_CALL_OUT: Output lun for SYS_CALL $SYS_CALL_STS: Status of last SYS_CALL $SYS_CALL_TOUT: Timeout for SYS_CALL $TERM_TYPE: Type of motion termination $THRD_CEXP: Thread Condition Expression $THRD_ERROR: Error of each thread of execution $THRD_PARAM: Thread Parameter $WEAVE_NUM: Weave table number $WEAVE_TYPE: Weave type $WFR_IOTOUT: Timeout on a WAIT FOR when IO simulated $WFR_TOUT: Timeout on a WAIT FOR $WRITE_TOUT: Timeout on a WRITE
12.8.4
pr-0-0-pdl_12.fm
00/0607
12-5
Predefined Variables List $ARM_SPD_OVR: Arm speed override $AUX_BASE: Auxiliary base for a positioner of an arm $AUX_KEY: TP4i/WiTP AUX-A and AUX-B keys mapping $AUX_MASK: Auxiliary arm mask $AUX_OFST: Auxiliary axes offsets $AUX_SIK_DRVON_ENBL: Auxiliary axes provided of SIK $AUX_SIK_MASK: Auxiliary axes provided of SIK $AUX_TYPE: Positioner type $AX_CNVRSN: Axes conversion $AX_INF: Axes inference $AX_LEN: Axes lengths $AX_OFST: Axes offsets $A_ALONG_1D: Internal arm data $A_ALONG_2D: Internal arm data $A_AREAL_1D: Internal arm data $A_AREAL_2D: Internal arm data $BASE: Base of arm $C4GOPEN_JNT_MASK: C4G Open Joint arm mask $C4GOPEN_MODE: C4G Open modality $CAL_DATA: Calibration data $CAL_SYS: System calibration position $CAL_USER: User calibration position $CNFG_CARE: Configuration care $COLL_EFFECT: Collision Effect on the arm status $COLL_SOFT_PER: Collision compliance percentage $COLL_TYPE: Type of collision $CONV_ACC_LIM: Conveyor acceleration limit $CONV_BASE: Conveyor base frame $CONV_CNFG: Conveyor tracking configuration $CONV_SPD_LIM: Conveyor speed limit $CONV_TYPE: Element in the Conveyor Table $CONV_WIN: Conveyor Windows $CONV_ZERO: Conveyor Position Transducer Zero $DYN_COLL_FILTER: Dynamic Collision Filter $DYN_DELAY: Dynamic model delay $DYN_FILTER: Dynamic Filter $DYN_FILTER2: Dynamic Filter for dynamic model $DYN_GAIN: Dynamic gain in inertia and viscous friction $DYN_MODEL: Dynamic Model
pr-0-0-pdl_12.fm
12-6
00/0607
$DYN_WRIST: Dynamic Wrist $DYN_WRISTQS: Dynamic Theta carico $FLY_DIST: Distance in fly motion $FL_COMP: Compensation file name $GUN: Electrical welding gun $HAND_TYPE: Type of hand $HLD_DEC_PER: Hold deceleration percentage $HOME: Arm home position $JERK: Jerk control values $JNT_LIMIT_AREA: Joint limits of the work area $JNT_MASK: Joint arm mask $JNT_MTURN: Check joint Multi-turn $JNT_OVR: joint override $JOG_INCR_DIST: Increment Jog distance $JOG_INCR_ENBL: Jog incremental motion $JOG_INCR_ROT: Rotational jog increment $JOG_SPD_OVR: Jog speed override $LIN_ACC_LIM: Linear acceleration limit $LIN_DEC_LIM: Linear deceleration limit $LIN_SPD: Linear speed $LIN_SPD_LIM: Linear speed limit $LIN_SPD_RT_OVR: Run-time Linear speed override $LOG_TO_DSA: Logical to physical DSA relationship $LOG_TO_PHY: Logical to physical relationship $MAN_SCALE: Manual scale factor $MCP_BOARD: Motion Control Process board $MOD_ACC_DEC: Modulation of acceleration and deceleration $MOD_MASK: Joint mod mask $MTR_ACC_TIME: Motor acceleration time $MTR_DEC_TIME: Motor deceleration time $MTR_SPD_LIM: Motor speed limit $NUM_AUX_AXES: Number of auxiliary axes $NUM_JNT_AXES: Number of joint axes $OP_TOL_DIST: On Pos-Jnt Tolerance distance $OP_TOL_ORNT: On Pos-Jnt Tolerance Orientation $OT_TOL_DIST: On Trajectory Tolerance distance $OT_TOL_ORNT: On Trajectory Orientation $PAR: Nodal motion variable $PGOV_ACCURACY: required accuracy in cartesian motions
00/0607
12-7
Predefined Variables List $PGOV_MAX_SPD_REDUCTION: Maximum speed scale factor $PGOV_ORNT_PER: percentage of orientation $POS_LIMIT_AREA: Cartesian limits of work area $RB_FAMILY: Family of the robot arm $RB_MODEL: Model of the robot arm $RB_NAME: Name of the robot arm $RB_STATE: State of the robot arm $RB_VARIANT: Variant of the robot arm $RCVR_DIST: Distance from the recovery position $RCVR_TYPE: Type of motion recovery $ROT_ACC_LIM: Rotational acceleration limit $ROT_DEC_LIM: Rotational deceleration limit $ROT_SPD: Rotational speed $ROT_SPD_LIM: Rotational speed limit $SFRAME: Sensor frame of an arm $SING_CARE: Singularity care $SM4C_STRESS_PER: Maximum Stress allowed in Cartesian SmartMove4 $SM4_SAT_SCALE: SmartMove4 saturation thresholds $STRK_END_N: User negative stroke end $STRK_END_P: User positive stroke end $STRK_END_SYS_N: System stroke ends $STRK_END_SYS_P: System stroke ends $TOL_ABT: Tolerance anti-bouce time $TOL_COARSE: Tolerance coarse $TOL_FINE: Tolerance fine $TOL_JNT_COARSE: Tolerance for joints $TOL_JNT_FINE: Tolerance for joints $TOL_TOUT: Tolerance timeout $TOOL: Tool of arm $TOOL_CNTR: Tool center of mass of the tool $TOOL_FRICTION: Tool Friction $TOOL_INERTIA: Tool Inertia $TOOL_MASS: Mass of the tool $TOOL_XTREME: Extreme Tool of the Arm $TOOL_RMT: Fixed Tool $TP_ORNT: Orientation for jog motion $TURN_CARE: Turn care $TX_RATE: Transmission rate $UFRAME: User frame of an arm
pr-0-0-pdl_12.fm
12-8
00/0607
12.8.5
12.8.6
pr-0-0-pdl_12.fm
00/0607
12-9
Predefined Variables List $D_AXES: Internal DSA data $D_CTRL: Internal DSA data $D_HDIN_SUSP: DSA_DATA field for HDIN suspend $D_MTR: Internal DSA data
12.8.7
12.8.8
12.8.9
12.8.10
pr-0-0-pdl_12.fm
12-10
00/0607
Predefined Variables List $CT_RES: Conveyor position in motor turns $CT_SCC: Conveyor SCC $CT_TX_RATE: Transmission rate
12.8.11
12.8.12
pr-0-0-pdl_12.fm
00/0607
12-11
Predefined Variables List $ROT_SPD: Rotational speed $SFRAME: Sensor frame of an arm $SING_CARE: Singularity care $SPD_OPT: Type of speed control $STRESS_PER: Stress percentage in cartesian fly $TERM_TYPE: Type of motion termination $TOL_COARSE: Tolerance coarse $TOL_FINE: Tolerance fine $TOOL: Tool of arm $TOOL_CNTR: Tool center of mass of the tool $TOOL_FRICTION: Tool Friction $TOOL_INERTIA: Tool Inertia $TOOL_MASS: Mass of the tool $TOOL_RMT: Fixed Tool $TURN_CARE: Turn care $UFRAME: User frame of an arm $WEAVE_NUM: Weave table number $WEAVE_TYPE: Weave type $WV_AMP_PER: Weave amplitude percentage
12.8.13
pr-0-0-pdl_12.fm
12-12
00/0607
Predefined Variables List $ROT_SPD: Rotational speed $SEG_DATA: PATH segment data $SEG_FLY: PATH segment fly or not $SEG_FLY_DIST: Parameter in segment fly motion $SEG_FLY_PER: PATH segment fly percentage $SEG_FLY_TRAJ: Type of fly control $SEG_FLY_TYPE: PATH segment fly type $SEG_OVR: PATH segment override $SEG_REF_IDX: PATH segment reference index $SEG_STRESS_PER: Percentage of stress required in fly $SEG_TERM_TYPE: PATH segment termination type $SEG_TOL: PATH segment tolerance $SEG_TOOL_IDX: PATH segment tool index $SEG_WAIT: PATH segment WAIT $SING_CARE: Singularity care $SPD_OPT: Type of speed control $STRESS_PER: Stress percentage in cartesian fly $TERM_TYPE: Type of motion termination $TOL_COARSE: Tolerance coarse $TOL_FINE: Tolerance fine $TOOL: Tool of arm $TOOL_CNTR: Tool center of mass of the tool $TOOL_MASS: Mass of the tool $TURN_CARE: Turn care $WEAVE_NUM: Weave table number $WEAVE_TYPE: Weave type
12.8.14
pr-0-0-pdl_12.fm
00/0607
12-13
12.8.15
12.8.16
12-14
00/0607
$BOARD_DATA: Board data $BOOTLINES: Bootline read-only $BREG: Boolean registers - saved $BREG_NS: Boolean registers - not saved $B_ASTR_1D_NS: Board string data $B_ALONG_1D: Internal arm data $B_ALONG_1D_NS: Internal arm data $B_NVRAM: NVRAM data of the board $CIO_AIN: Configuration for AIN $CIO_AOUT: Configuration for AOUT $CIO_CAN: Configuration for Can Bus $CIO_CROSS: Configuration for I/O cross copying $CIO_DIN: Configuration for DIN $CIO_DOUT: Configuration for DOUT $CIO_FMI: Configuration for $FMI $CIO_FMO: Configuration for $FMO $CIO_GIN: Configuration for GIN $CIO_GOUT: Configuration for GOUT $CIO_IN_APP: Configuration for IN $CIO_OUT_APP: Configuration for OUT $CIO_SDIN: Configuration for the system digital inputs $CIO_SDOUT: Configuration for the system digital outputs $CIO_SYS_CAN: Configuration of the system modules on Can Bus $CNTRL_CNFG: Controller configuration mode $CNTRL_INIT: Controller initialization mode $CNTRL_OPTIONS: Controller Options $CNTRL_TZ: Controller Time Zone $CONV_TBL: Conveyor tracking table data $CRNT_DATA: Current Arm data $DEPEND_DIRS: Dependancy path $DFT_ARM: Default arm $DFT_DV: Default devices $DFT_LUN: Default LUN number $DFT_SPD: Default devices speed $DNS_DOMAIN: DNS Domain $DNS_ORDER: DNS Order $DNS_SERVERS: DNS Servers $DSA_DATA: DSA data $DV_STS: the status of DV4_CNTRL call
00/0607
12-15
Predefined Variables List $DV_TOUT: Timeout for asynchronous DV4_CNTRL calls $D_ALONG_1D: Internal DSA data $D_AREAL_1D: Internal DSA data $D_AXES: Internal DSA data $D_CTRL: Internal DSA data $D_MTR: Internal DSA data $EMAIL_INT: Email integer configuration: $EMAIL_STR: Email string configuration: $EXE_HELP: Help on Execute command $FBP_TBL: Field Bus Table data $FB_CNFG: Controller fieldbuses configuration mode $FB_INIT: Controller fieldbuses initialization mode $FLOW_TBL: Flow modulation algorithm table data $FL_ADLMT: Array of delimiters $FL_BINARY: Text or character mode $FL_CNFG: Configuration file name $FL_DLMT: Delimiter specification $FL_ECHO: Echo characters $FL_NUM_CHARS: Number of chars to be read $FL_PASSALL: Pass all characters $FL_RANDOM: Random file access $FL_RDFLUSH: Flush on reading $FL_SWAP: Low or high byte first $FUI_DIRS: Installation path $FW_ARM: Arm under flow modulation algorithm $FW_AXIS: Axis under flow modulation algorithm $FW_CNVRSN: Conversion factor in case of Flow modulation algorithm $FW_ENBL Flow modulation algorithm enabling indicator $FW_FLOW_LIM Flow modulation algorithm flow limit $FW_SPD_LIM Flow modulation algorithm speed limits $FW_START Delay in flow modulation algorithm application after start $FW_VAR: flag defining the variable to be considered when flow modulate is used $GEN_OVR: General override $IREG: Integer register - saved $IREG_NS: Integer registers - not saved $JREG: Jointpos registers - saved $JREG_NS: Jointpos register - not saved $LATCH_CNFG: Latched alarm configuration setting $MCP_DATA: Motion Control Process data
pr-0-0-pdl_12.fm
12-16
00/0607
$MDM_INT: Modem Configuration $MDM_STR: Modem Configuration: $NET_B: Ethernet Boot Setup $NET_B_DIR: Ethernet Boot Setup Directory $NET_C_CNFG: Ethernet Client Setting Modes $NET_C_DIR: Ethernet Client Setup Default Directory $NET_C_HOST: Ethernet Client Setup Remote Host $NET_C_PASS: Ethernet Client Setup Password $NET_C_USER: Ethernet Client Setup Login Name $NET_HOSTNAME: Ethernet network hostnames $NET_I_INT: Ethernet Network Information (integers) $NET_I_STR: Ethernet Network Information (strings) $NET_L: Ethernet Local Setup $NET_MOUNT: Ethernet network mount $NET_R_STR: Ethernet Remote Interface Setup $NET_Q_STR: Ethernet Remote Interface Information: $NET_S_INT: Ethernet Network Server Setup $NET_T_INT: Ethernet Network Timer $NET_T_HOST: Ethernet Network Time Protocol Host $NOLOG_ERROR: Exclude messages from logging $NUM_ALOG_FILES: Number of action log files $NUM_ARMS: Number of arms $NUM_DEVICES: Number of devices $NUM_DSAS: Number of DSAs $NUM_LUNS: Number of LUNs $NUM_MB: Number of motion buffers $NUM_MB_AHEAD: Number of motion buffers ahead $NUM_MCPS: Number of Motion Control Process $NUM_PROGS: Number of active programs $NUM_SCRNS: Number of screens $NUM_TIMERS: Number of timers $NUM_VP2_SCRNS: Number of Visual PDL2 screens $NUM_WEAVES: Number of weaves (WEAVE_TBL) $ON_POS_TBL: ON POS table data $PPP_INT: PPP Configuration $PREG: Position registers - saved $PREG_NS: Position registers - not saved $PWR_RCVR: Power failure recovery mode $RBT_CNFG: Robot board configuration
00/0607
12-17
Predefined Variables List $REC_SETUP: RECord key setup $REMOTE: Functionality of the key in remote $REM_I_STR: Remote connections Information $REM_TUNE: Internal remote connection tuning parameters $RESTART: Restart Program $RESTART_MODE: Restart mode $RESTORE_SET: Default devices $RREG: Real registers - saved $RREG_NS: Real registers - not saved $SERIAL_NUM: Serial Number $SREG: String registers - saved $SREG_NS: String registers - not saved $STARTUP: Startup program $STARTUP_USER: Startup user $SWIM_ADDR: SWIM address $SWIM_CNFG: SWIM configuration mode $SWIM_INIT: SWIM Board initialization parameters $SYS_INP_MAP: Configuration for system bits in Input on fieldbuses $SYS_ERROR: Last system error $SYS_ID: Robot System identifier $SYS_OUT_MAP: Configuration for system bits in Output on fieldbuses $SYS_PARAMS: Robot system identifier $SYS_STATE: State of the system $TP_ARM: Teach Pendant current arm $TP_GEN_INCR: Incremental value for general override $TP_MJOG: Type of TP jog motion $TP_SYNC_ARM: Teach Pendants synchronized arms $TUNE: Internal tuning parameters $USER_ADDR: Address of user-defined variables $USER_LEN: Length of User-defined variables $VERSION: Software version $VP2_SCRN_ID: Executing program VP2 Screen Identifier $VP2_TOUT: Timeout value for asynchronous VP2 requests $VP2_TUNE: Visual PDL2 tuning parameters $WEAVE_TBL: Weave table data $XREG: Xtndpos registers - saved $XREG_NS: Xtndpos registers - not saved
pr-0-0-pdl_12.fm
12-18
00/0607
$AIN: Analog input $AOUT: Analog output $APPL_ID: Application Identifier $APPL_NAME: Application Identifiers $APPL_OPTIONS: Application Options $ARM_ACC_OVR: Arm acceleration override $ARM_DATA: Robot arm data $ARM_DEC_OVR: Arm deceleration override $ARM_DISB: Arm disable flags $ARM_LINKED: Enable/disable arm coupling $ARM_OVR: Arm override $ARM_SENSITIVITY: Arm collision sensitivity $ARM_SIMU: Arm simulate flag $ARM_SPACE: current Arm Space $ARM_SPD_OVR: Arm speed override $ARM_USED: Program use of arms $ARM_VEL: Arm velocity $AUX_BASE: Auxiliary base for a positioner of an arm $AUX_KEY: TP4i/WiTP AUX-A and AUX-B keys mapping $AUX_MASK: Auxiliary arm mask $AUX_OFST: Auxiliary axes offsets $AUX_SIK_DRVON_ENBL: Auxiliary axes provided of SIK $AUX_SIK_MASK: Auxiliary axes provided of SIK $AUX_TYPE: Positioner type $AX_CNVRSN: Axes conversion $AX_INF: Axes inference $AX_LEN: Axes lengths $AX_OFST: Axes offsets $A_ALONG_1D: Internal arm data $A_ALONG_2D: Internal arm data $A_AREAL_1D: Internal arm data $A_AREAL_2D: Internal arm data $B_ASTR_1D_NS: Board string data $BACKUP_SET: Default devices $BASE: Base of arm $BIT: PLC BIT data $BOARD_DATA: Board data
00/0607
12-19
Predefined Variables List $BOOTLINES: Bootline read-only $BREG: Boolean registers - saved $BREG_NS: Boolean registers - not saved $B_ALONG_1D: Internal arm data $B_ALONG_1D_NS: Internal arm data $B_NVRAM: NVRAM data of the board $C4GOPEN_JNT_MASK: C4G Open Joint arm mask $C4GOPEN_MODE: C4G Open modality $C4G_RULES: C4G Save & Load rules $CAL_DATA: Calibration data $CAL_SYS: System calibration position $CAL_USER: User calibration position $CAUX_POS: Cartesian positioner position $CIO_AIN: Configuration for AIN $CIO_AOUT: Configuration for AOUT $CIO_CAN: Configuration for Can Bus $CIO_CROSS: Configuration for I/O cross copying $CIO_DIN: Configuration for DIN $CIO_DOUT: Configuration for DOUT $CIO_FMI: Configuration for $FMI $CIO_FMO: Configuration for $FMO $CIO_GIN: Configuration for GIN $CIO_GOUT: Configuration for GOUT $CIO_IN_APP: Configuration for IN $CIO_OUT_APP: Configuration for OUT $CIO_SDIN: Configuration for the system digital inputs $CIO_SDOUT: Configuration for the system digital outputs $CIO_SYS_CAN: Configuration of the system modules on Can Bus $CNFG_CARE: Configuration care $CNTRL_CNFG: Controller configuration mode $CNTRL_INIT: Controller initialization mode $CNTRL_OPTIONS: Controller Options $CNTRL_TZ: Controller Time Zone $COLL_EFFECT: Collision Effect on the arm status $COLL_ENBL: Collision enabling flag $COLL_SOFT_PER: Collision compliance percentage $COLL_TYPE: Type of collision $COND_MASK: PATH segment condition mask $COND_MASK_BACK: PATH segment condition mask in backwards
pr-0-0-pdl_12.fm
12-20
00/0607
$CONV_ACC_LIM: Conveyor acceleration limit $CONV_BASE: Conveyor base frame $CONV_CNFG: Conveyor tracking configuration $CONV_DIST: Conveyor shift in micron (mm/1000) $CONV_SHIFT: Conveyor shift in mm $CONV_SPD: Conveyor speed $CONV_SPD_LIM: Conveyor speed limit $CONV_TBL: Conveyor tracking table data $CONV_TYPE: Element in the Conveyor Table $CONV_WIN: Conveyor Windows $CONV_ZERO: Conveyor Position Transducer Zero $CRNT_DATA: Current Arm data $CT_JNT_MASK: Conveyor Joint mask $CT_RADIUS: Conveyor radius in mm $CT_RES: Conveyor position in motor turns $CT_SCC: Conveyor SCC $CT_TX_RATE: Transmission rate $CUSTOM_ARM_ID: Identificator for the arm $CUSTOM_CNTRL_ID: Identificator for the Controller $CYCLE: Program cycle count $C_ALONG_1D: Internal current arm data $C_AREAL_1D: Internal current arm data $C_AREAL_2D: Internal current arm data $DEPEND_DIRS: Dependancy path $DFT_ARM: Default arm $DFT_DV: Default devices $DFT_LUN: Default LUN number $DFT_SPD: Default devices speed $DIN: Digital input $DNS_DOMAIN: DNS Domain $DNS_ORDER: DNS Order $DNS_SERVERS: DNS Servers $DOUT: Digital output $DSA_DATA: DSA data $DV_STS: the status of DV4_CNTRL call $DV_TOUT: Timeout for asynchronous DV4_CNTRL calls $DYN_COLL_FILTER: Dynamic Collision Filter $DYN_DELAY: Dynamic model delay $DYN_FILTER: Dynamic Filter
00/0607
12-21
Predefined Variables List $DYN_FILTER2: Dynamic Filter for dynamic model $DYN_GAIN: Dynamic gain in inertia and viscous friction $DYN_MODEL: Dynamic Model $DYN_WRIST: Dynamic Wrist $DYN_WRISTQS: Dynamic Theta carico $D_ALONG_1D: Internal DSA data $D_AREAL_1D: Internal DSA data $D_AXES: Internal DSA data $D_CTRL: Internal DSA data $D_HDIN_SUSP: DSA_DATA field for HDIN suspend $D_MTR: Internal DSA data $EMAIL_INT: Email integer configuration $EMAIL_STR: Email string configuration $ERROR: Last PDL2 Program Error $EXE_HELP: Help on Execute command $FBP_TBL: Field Bus Table data $FB_ADDR: Field Bus ADDR $FB_CNFG: Controller fieldbuses configuration mode $FB_INIT: Controller fieldbuses initialization mode $FB_MA_INIT: Field bus master init $FB_MA_SLVS: Field bus master slaves init $FB_SLOT: field bus slot $FB_SL_INIT: Field bus slave init $FB_TYPE: Field bus type $FDIN: Functional digital input $FDOUT: Functional digital output $FL_ADLMT: Array of delimiters $FL_BINARY: Text or character mode $FL_CNFG: Configuration file name $FL_COMP: Compensation file name $FL_DLMT: Delimiter specification $FL_ECHO: Echo characters $FL_NUM_CHARS: Number of chars to be read $FL_PASSALL: Pass all characters $FL_RANDOM: Random file access $FL_RDFLUSH: Flush on reading $FL_STS: Status of last file operation $FL_SWAP: Low or high byte first $FLOW_TBL: Flow modulation algorithm table data
pr-0-0-pdl_12.fm
12-22
00/0607
$FLY_DBUG: Cartesian Fly Debug $FLY_DIST: Distance in fly motion $FLY_PER: Percentage of fly motion $FLY_TRAJ: Type of control on cartesian fly $FLY_TYPE: Type of fly motion $FMI: Flexible Multiple Analog/Digital Inputs $FMO: Flexible Multiple Analog/Digital Outputs $FOLL_ERR: Following error $FUI_DIRS: Installation path $FW_ARM: Arm under flow modulation algorithm $FW_AXIS: Axis under flow modulation algorithm $FW_CNVRSN: Conversion factor in case of Flow modulation algorithm $FW_ENBL Flow modulation algorithm enabling indicator $FW_FLOW_LIM Flow modulation algorithm flow limit $FW_SPD_LIM Flow modulation algorithm speed limits $FW_START Delay in flow modulation algorithm application after start $FW_VAR: flag defining the variable to be considered when flow modulate is used $GEN_OVR: General override $GIN: Group input $GOUT: Group output $GUN: Electrical welding gun $HAND_TYPE: Type of hand $HDIN: High speed digital input $HDIN_SUSP: HDIN Suspend $HLD_DEC_PER: Hold deceleration percentage $HOME: Arm home position $IN: IN digital $IPERIOD: Interpolator period $IREG: Integer register - saved $IREG_NS: Integer registers - not saved $JERK: Jerk control values $JNT_LIMIT_AREA: Joint limits of the work area $JNT_MASK: Joint arm mask $JNT_MTURN: Check joint Multi-turn $JNT_OVR: joint override $JOG_INCR_DIST: Increment Jog distance $JOG_INCR_ENBL: Jog incremental motion $JOG_INCR_ROT: Rotational jog increment $JOG_SPD_OVR: Jog speed override
00/0607
12-23
Predefined Variables List $JPAD_DIST: Distance between user and Jpad $JPAD_ORNT:TP4i/WiTP Angle setting $JPAD_TYPE: TP4i/WiTP Jpad modality rotational or translational $JREG: Jointpos registers - saved $JREG_NS: Jointpos register - not saved $LATCH_CNFG: Latched alarm configuration setting $LIN_ACC_LIM: Linear acceleration limit $LIN_DEC_LIM: Linear deceleration limit $LIN_SPD: Linear speed $LIN_SPD_LIM: Linear speed limit $LIN_SPD_RT_OVR: Run-time Linear speed override $LOG_TO_DSA: Logical to physical DSA relationship $LOG_TO_PHY: Logical to physical relationship $MAIN_JNTP: PATH node main jointpos destination $MAIN_POS: PATH node main position destination $MAIN_XTND: PATH node main xtndpos destination $MAN_SCALE: Manual scale factor $MCP_BOARD: Motion Control Process board $MCP_DATA: Motion Control Process data $MDM_INT: Modem Configuration $MDM_STR: Modem Configuration $MOD_ACC_DEC: Modulation of acceleration and deceleration $MOD_MASK: Joint mod mask $MOVE_STATE: Move state $MOVE_TYPE: Type of motion $MTR_ACC_TIME: Motor acceleration time $MTR_CURR: Motor current $MTR_DEC_TIME: Motor deceleration time $MTR_SPD_LIM: Motor speed limit $M_ALONG_1D: Internal motion control data $NET_B: Ethernet Boot Setup $NET_B_DIR: Ethernet Boot Setup Directory $NET_C_CNFG: Ethernet Client Setting Modes $NET_C_DIR: Ethernet Client Setup Default Directory $NET_C_HOST: Ethernet Client Setup Remote Host $NET_C_PASS: Ethernet Client Setup Password $NET_C_USER: Ethernet Client Setup Login Name $NET_HOSTNAME: Ethernet network hostnames $NET_I_INT: Ethernet Network Information (integers)
pr-0-0-pdl_12.fm
12-24
00/0607
$NET_I_STR: Ethernet Network Information (strings) $NET_L: Ethernet Local Setup $NET_MOUNT: Ethernet network mount $NET_Q_STR: Ethernet Remote Interface Information $NET_R_STR: Ethernet Remote Interface Setup $NET_S_INT: Ethernet Network Server Setup $NET_T_HOST: Ethernet Network Time Protocol Host $NET_T_INT: Ethernet Network Timer $NOLOG_ERROR: Exclude messages from logging $NUM_ALOG_FILES: Number of action log files $NUM_ARMS: Number of arms $NUM_AUX_AXES: Number of auxiliary axes $NUM_DEVICES: Number of devices $NUM_DSAS: Number of DSAs $NUM_JNT_AXES: Number of joint axes $NUM_LUNS: Number of LUNs $NUM_MB: Number of motion buffers $NUM_MB_AHEAD: Number of motion buffers ahead $NUM_MCPS: Number of Motion Control Process $NUM_PROGS: Number of active programs $NUM_SCRNS: Number of screens $NUM_TIMERS: Number of timers $NUM_VP2_SCRNS: Number of Visual PDL2 screens $NUM_WEAVES: Number of weaves (WEAVE_TBL) $ODO_METER: average TCP space $ON_POS_TBL: ON POS table data $OP_JNT: On Pos jointpos $OP_JNT_MASK: On Pos Joint Mask $OP_POS: On Pos position $OP_REACHED: On Posposition reached flag $OP_TOL_DIST: On Pos-Jnt Tolerance distance $OP_TOL_ORNT: On Pos-Jnt Tolerance Orientation $OP_TOOL: The On Pos Tool $OP_TOOL_DSBL: On Pos tool disable flag $OP_TOOL_RMT: On Pos Remote tool flag $OP_UFRAME: The On Pos Uframe $ORNT_TYPE: Type of orientation $OT_COARSE: On Trajectory indicator $OT_JNT: On Trajectory joint position
00/0607
12-25
Predefined Variables List $OT_POS: On Trajectory position $OT_TOL_DIST: On Trajectory Tolerance distance $OT_TOL_ORNT: On Trajectory Orientation $OT_TOOL: On Trajectory TOOL position $OT_TOOL_RMT: On Trajectory remote tool flag $OT_UFRAME: On Trajectory User frame $OT_UNINIT: On Trajectory position uninit flag $OUT: OUT digital $PAR: Nodal motion variable $PGOV_ACCURACY: required accuracy in cartesian motions $PGOV_MAX_SPD_REDUCTION: Maximum speed scale factor $PGOV_ORNT_PER: percentage of orientation $POS_LIMIT_AREA: Cartesian limits of work area $PPP_INT: PPP Configuration $PREG: Position registers - saved $PREG_NS: Position registers - not saved $PROG_ACC_OVR: Program acceleration override $PROG_ARG: Program's activation argument $PROG_ARM: Arm of program $PROG_CNFG: Program configuration $PROG_CONDS: Defined conditions of a program $PROG_DEC_OVR: Program deceleration override $PROG_NAME: Executing program name $PROG_SPD_OVR: Program speed override $PROG_UADDR: Address of program user-defined memory access variables $PROG_UBIT: Program user-defined bit memory $PROG_UBYTE: Program user-defined byte memory $PROG_ULEN: Length of program memory access user-defined variables $PROG_ULONG: Program user-defined long word memory $PROG_UWORD: Program user-defined word memory $PWR_RCVR: Power failure recovery mode $RAD_IDL_QUO: Radiant ideal quote $RAD_TARG: Radiant target $RAD_VEL: Radiant velocity $RBT_CNFG: Robot board configuration $RB_FAMILY: Family of the robot arm $RB_MODEL: Model of the robot arm $RB_NAME: Name of the robot arm $RB_STATE: State of the robot arm
pr-0-0-pdl_12.fm
12-26
00/0607
$RB_VARIANT: Variant of the robot arm $RCVR_DIST: Distance from the recovery position $RCVR_LOCK: Change arm state after recovery $RCVR_TYPE: Type of motion recovery $READ_TOUT: Timeout on a READ $REC_SETUP: RECord key setup $REF_ARMS: Reference arms $REMOTE: Functionality of the key in remote $REM_I_STR: Remote connections Information $REM_TUNE: Internal remote connection tuning parameters $RESTART: Restart Program $RESTART_MODE: Restart mode $RESTORE_SET: Default devices $ROT_ACC_LIM: Rotational acceleration limit $ROT_DEC_LIM: Rotational deceleration limit $ROT_SPD: Rotational speed $ROT_SPD_LIM: Rotational speed limit $RPLC_DATA: Data of PLC resources $RPLC_STS: Status of PLC resources $RREG: Real registers - saved $RREG_NS: Real registers - not saved $SAFE_ENBL: Safe speed enabled $SDIN: System digital input $SDOUT: System digital output $SEG_DATA: PATH segment data $SEG_FLY: PATH segment fly or not $SEG_FLY_DIST: Parameter in segment fly motion $SEG_FLY_PER: PATH segment fly percentage $SEG_FLY_TRAJ: Type of fly control $SEG_FLY_TYPE: PATH segment fly type $SEG_OVR: PATH segment override $SEG_REF_IDX: PATH segment reference index $SEG_STRESS_PER: Percentage of stress required in fly $SEG_TERM_TYPE: PATH segment termination type $SEG_TOL: PATH segment tolerance $SEG_TOOL_IDX: PATH segment tool index $SEG_WAIT: PATH segment WAIT $SENSOR_CNVRSN: Sensor Conversion Factors $SENSOR_ENBL: Sensor Enable
00/0607
12-27
Predefined Variables List $SENSOR_GAIN: Sensor Gains $SENSOR_OFST_LIM: Sensor Offset Limits $SENSOR_TIME: Sensor Time $SENSOR_TYPE: Sensor Type $SERIAL_NUM: Serial Number $SFRAME: Sensor frame of an arm $SING_CARE: Singularity care $SM4C_STRESS_PER: Maximum Stress allowed in Cartesian SmartMove4 $SM4_SAT_SCALE: SmartMove4 saturation thresholds $SPD_OPT: Type of speed control $SREG: String registers - saved $SREG_NS: String registers - not saved $STARTUP: Startup program $STARTUP_USER: Startup user $STRESS_PER: Stress percentage in cartesian fly $STRK_END_N: User negative stroke end $STRK_END_P: User positive stroke end $STRK_END_SYS_N: System stroke ends $STRK_END_SYS_P: System stroke ends $SWIM_ADDR: SWIM address $SWIM_CNFG: SWIM configuration mode $SWIM_INIT: SWIM Board initialization parameters $SYNC_ARM: Synchronized arm of program $SYS_CALL_OUT: Output lun for SYS_CALL $SYS_CALL_STS: Status of last SYS_CALL $SYS_CALL_TOUT: Timeout for SYS_CALL $SYS_ERROR: Last system error $SYS_ID: Robot System identifier $SYS_INP_MAP: Configuration for system bits in Input on fieldbuses $SYS_OUT_MAP: Configuration for system bits in Output on fieldbuses $SYS_PARAMS: Robot system identifier $SYS_STATE: State of the system $TERM_TYPE: Type of motion termination $THRD_CEXP: Thread Condition Expression $THRD_ERROR: Error of each thread of execution $THRD_PARAM: Thread Parameter $TIMER: Clock timer $TOL_ABT: Tolerance anti-bouce time $TOL_COARSE: Tolerance coarse
pr-0-0-pdl_12.fm
12-28
00/0607
$TOL_FINE: Tolerance fine $TOL_JNT_COARSE: Tolerance for joints $TOL_JNT_FINE: Tolerance for joints $TOL_TOUT: Tolerance timeout $TOOL: Tool of arm $TOOL_CNTR: Tool center of mass of the tool $TOOL_FRICTION: Tool Friction $TOOL_INERTIA: Tool Inertia $TOOL_MASS: Mass of the tool $TOOL_RMT: Fixed Tool $TOOL_XTREME: Extreme Tool of the Arm $TP_ARM: Teach Pendant current arm $TP_GEN_INCR: Incremental value for general override $TP_MJOG: Type of TP jog motion $TP_ORNT: Orientation for jog motion $TP_SYNC_ARM: Teach Pendants synchronized arms $TUNE: Internal tuning parameters $TURN_CARE: Turn care $TX_RATE: Transmission rate $UFRAME: User frame of an arm $USER_ADDR: Address of user-defined variables $USER_BIT: User-defined bit memory $USER_BYTE: User-defined byte memory $USER_LEN: Length of User-defined variables $USER_LONG: User-defined long word memory $USER_WORD: User-defined word memory $VERSION: Software version $VP2_SCRN_ID: Executing program VP2 Screen Identifier $VP2_TUNE: Visual PDL2 tuning parameters $VP2_TOUT: Timeout value for asynchronous VP2 requests $WEAVE_MODALITY: Weave modality $WEAVE_MODALITY_NOMOT: Weave modality (only for no arm motion) $WEAVE_NUM: Weave table number $WEAVE_NUM_NOMOT: Weave table number (only for no arm motion) $WEAVE_PHASE: Index of the Weaving Phase $WEAVE_TBL: Weave table data $WEAVE_TYPE: Weave type $WEAVE_TYPE_NOMOT: Weave type (only for no arm motion) $WFR_IOTOUT: Timeout on a WAIT FOR when IO simulated
00/0607
12-29
Predefined Variables List $WFR_TOUT: Timeout on a WAIT FOR $WORD: PLC WORD data $WRITE_TOUT: Timeout on a WRITE $WV_AMP_PER: Weave amplitude percentage $WV_CNTR_DWL: Weave center dwell $WV_LEFT_AMP: Weave left amplitude $WV_LEFT_DWL: Weave left dwell $WV_LENGTH_WAVE: Wave length $WV_ONE_CYCLE: Weave one cycle $WV_PLANE: Weave plane angle $WV_RIGHT_AMP: Weave right amplitude $WV_RIGHT_DWL: Weave right dwell $WV_SMOOTH: Weave smooth enabled $WV_SPD_PROFILE: Weave speed profile enabled $WV_TRV_SPD: Weave transverse speed $WV_TRV_SPD_PHASE: Weave transverse speed phase $XREG: Xtndpos registers - saved $XREG_NS: Xtndpos registers - not saved
pr-0-0-pdl_12.fm
12-30
00/0607
1.00 It represents the analog output points. For further information see also par. 5.2.4 $AIN and $AOUT on page 5-5 and Control Unit Use Manual - Chapters IO_INST Program and IO_TOOL Program.
pr-0-0-pdl_12.fm
00/0607
12-31
pr-0-0-pdl_12.fm
12-32
00/0607
Description:
It represents the deceleration override percentage for motions issued to a particular arm. There is one value per arm. Acceleration and maximum speed are not affected by changes in its value. Changes in $ARM_DEC_OVR take effect on the next motion and for the entire motion
00/0607
12-33
none 1..100 1.00 $ARM_OVR is similar to $GEN_OVR but is accessible from a PDL2 program, whereas $GEN_OVR is accessible from the Teach Pendant. The variable scales speed, acceleration and deceleration, so that the trajectory remains constant with changes in its value. A change to $ARM_OVR immediately effects the shape of the velocity profile.
pr-0-0-pdl_12.fm
12-34
00/0607
real PDL2 read-only 1..100 2.4x It represents the current arm space. It is only used in cartesian motions for indicating the average TCP space expressed in millimeters. This variable is updated every tick (default 2 milliseconds) in case of linear or circular motions and every 5 ticks in case of joint movements. PROGRAM curspace NOHOLD BEGIN CYCLE WRITE ($CRNT_DATA[1].ARM_SPACE, NL) DELAY 500 END curspace
pr-0-0-pdl_12.fm
00/0607
12-35
pr-0-0-pdl_12.fm
12-36
00/0607
Description:
This variable contains the indication of the auxiliary axis that is associated to thte corresponding key on the Teach Pendant. On TP4i/WiTP, element 1 is related to the AUX-A key and element 2 is related to AUX-B key.
pr-0-0-pdl_12.fm
00/0607
12-37
Each bit in the INTEGER represents whether the corresponding auxiliary axis, supplied with a Safety Interlock Kit module, is enabled to DRIVE ON
12-38
00/0607
none 1.00 It represents the conversion factor between radians and degrees for each rotational axis and between millimeters and millimeters for each linear axis. There is an array element for each axis. PROGRAM quo NOHOLD VAR i : INTEGER gr_quo : ARRAY [6] OF REAL BEGIN FOR i := 1 TO 6 DO -- Conversion of the quote -- measured with axes -- radiant in axes degrees gr_quo[i] := $CRNT_DATA[1].RAD_IDL_QUO[i] * $ARM_DATA[1].AX_CNVRSN[i] ENDFOR END quo
pr-0-0-pdl_12.fm
00/0607
12-39
pr-0-0-pdl_12.fm
12-40
00/0607
array of integer of two dimension read-only none 1.00 There are certain fields of $ARM_DATA which do not have corresponding predefined variables, but instead can be referenced using these general arrays. The format and meaning of the data within these fields are reserved.
pr-0-0-pdl_12.fm
00/0607
12-41
2.00 Element 1 contains the BSP version. Element 2 contains the date of the BSP generation.
pr-0-0-pdl_12.fm
12-42
00/0607
Description:
This structure is a boolean port array; the size of each element is 1 bit. For further information see also par. 5.4.1 $BIT on page 5-16 and Control Unit Use Manual Chapters IO_INST Program and IO_TOOL Program.
pr-0-0-pdl_12.fm
00/0607
12-43
pr-0-0-pdl_12.fm
12-44
00/0607
pr-0-0-pdl_12.fm
00/0607
12-45
12-46
00/0607
Description:
It represents the system calibration position. For each new machine the user must jog the robot to the calibration position, based on calipers or stamps, and then follow the calibration procedure before using the robot in AUTO mode. PROGRAM calpos PROG_ARM=4 VAR pnt0001j : JOINTPOS BEGIN WRITE($ARM_DATA[4].CAL_SYS, NL) pnt0001j := $CAL_SYS MOVE JOINT TO $CAL_SYS END calpos
pr-0-0-pdl_12.fm
00/0607
12-47
pr-0-0-pdl_12.fm
12-48
00/0607
[3] Device Type [4] Vendor Id [5] Product Code [6] Mask of the possible inputs [7] Reserved [8] mask of the possible outputs [9] Reserved [10] Voltage ranges. Used only for the analog modules [11] Reserved [12] Reserved [13] Reserved
pr-0-0-pdl_12.fm
00/0607
12-49
pr-0-0-pdl_12.fm
12-50
00/0607
pr-0-0-pdl_12.fm
00/0607
12-51
pr-0-0-pdl_12.fm
12-52
00/0607
Description:
This table contains information about the configuration of the system digital outputs: [1] - description of the fieldbus type [2] - Index [3] - details about where this outputs is physically going to
pr-0-0-pdl_12.fm
00/0607
12-53
none none 1.00 Different bits of this predefined variable are used for setting the configuration and startup of the controller: Bit 1: If set, the pop-up window containing informations on the system configuration is not displayed at system restart. Bit 2: reserved Bit 3: If set, all the programs activated in the system will have bit 3 in $PROG_CNFG set, which disables the setting of an output in these circumstances: a: if in PROGR state from an active program. b: if in PROGR state executing the statement from the WINC4G program running on the PC when the Teach Pendant is recognised to be out of cabinet. c: if in PROGR state under MEMORY DEBUG or PROGRAM EDIT from the WINC4G program running on the PC when the Teach Pendant is recognised to be out of cabinet. d: if the state selector was turned out of the T1 position when the Teach Pendant is recognised to be out of cabinet. Bit 4: reserved Bit 5: If set, the WAIT FOR does not trigger if the program is in the held state (due to HOLD or to an error) Bit 6: reserved Bit 7: If set, the communication protocol for WINC4G program is automatically mounted on COMP: port after a restart. Bit 8: reserved Bit 9: If set, the EZ emulator does not automatically start when EZ is activated. Bit 10: If set, EZ does not wait for the UTILITY APPLICATION command or the EZ key to be pressed. Bit 11: If set, EZ does not load in memory the programs that are referenced in the main program. Bit 12: If set, EZ does not make any checks about the applications during the installation phase Bit 13: Set to 1 for handling MOVE WITH $PAR. Bit 14-15: reserved to EZ Bit 16-22 Bit 23: set to 1 to enable Autosave in IDE Bit 24: Set to 1 if the system is configured to handle the Customized Nodal Move Bit 25: Set to 1 if the UNICODE characters coding is handled by the system Bit 26-32: reserved
pr-0-0-pdl_12.fm
12-54
00/0607
Description:
Each bit represents how different aspects of the controller behave upon initialization: Bit 1..6: reserved Bit 7: If set, remote signals are ignored in AUTO, PROGR and AUTO-T state. Bit 8..10: reserved Bit 11: This bit configures the remote output as a copy of the state selector in REMOTE position. Bit 12: reserved Bit 13: This bit configures the enabling device switch as the DRIVE OFF button, when released in PROGR instead of HOLD. Bit 14: This bit enables warnings generated when a command is received from a REMOTE device (Remote CAN I/O, FieldBus) Bit 15..16: reserved Bit 17: Enables software timer (1.4 sec.) that activate motors brake after remote DRIVE OFF command (used as CONTROLLED EMERGENCY). Bit 18: If set, it disables multiarm command forcing. Bit 19..20: reserved Bit 21: If set, it means the loading system software is running. Bit 22: If set, CAC and CAT commands are disabled. Bit 23: If set, the precision (via the : operator), in small orientation variations, around X and Y axes, is of 0.2 degrees (instead of the default of 0.02 degrees). The precision obtained is lower in this case.
pr-0-0-pdl_12.fm
00/0607
12-55
Bit 17 for Modbus TCP Slave Bit 18 for Modbus TCP Master Bit 19 for SmartMove4 Bit 20 for Path Governor Bit 22 for VP2Frames Bit 23 reserved Bit 24 for Profinet I/O master Bit 25 for Multibus Bit 26 for C4G Open
pr-0-0-pdl_12.fm
12-56
00/0607
not saved boolean none none 1.00 When set to TRUE, this flag enables the "Collision detection" feature and has an immediate effect on any movement.
pr-0-0-pdl_12.fm
00/0607
12-57
... COLL_USER10. In the PROGR state, the COLL_MANUAL sensitivity is always used (no informational is prompted to the user), no matter what is the current value of $COLL_TYPE. If one of the values COLL_USER1 .. COLL_USER10 is assigned to $COLL_TYPE, it is responsability of the user to initialise the corresponding table of $ARM_SENSITIVITY
12-58
00/0607
p.COND_TBL[2] := 20 p.COND_TBL[3] := 30 -- on node 1, condition 10 and 30 will trigger, as 5 is equal -- to bit 1 and 3, and elements 1 and 3 of COND_TBL -- contain number 10 and 30. p.NODE[1].$COND_MASK := 5 -- on node 4, condition 20 will trigger p.NODE[4].$COND_MASK := 2 CYCLE .... MOVE ALONG p .... END p
pr-0-0-pdl_12.fm
00/0607
12-59
pr-0-0-pdl_12.fm
12-60
00/0607
1.00 The $CRNT_DATA[n].CONV_DIST represents the shift of the conveyor truck frame with respect to the zero position (conveyor base frame). It is expressed in micron. It can be read when the conveyor is active either in tracking mode or in reading mode ($CONV_TYPE different from zero). As it is an INTEGER variable, $CRNT_DATA[n].CONV_DIST is mainly useful inside the CONDITIONs
pr-0-0-pdl_12.fm
00/0607
12-61
Description:
It represents the maximum speed used by the arm to track the conveyor
pr-0-0-pdl_12.fm
12-62
00/0607
Description:
It defines the tracking window that is a region where conveyor tracking can be performed. $CONV_WIN[1] contains the distance of the inbound boundary from the conveyor base frame and $CONV_WIN[2] contains the distance of the outbound boundary. If the robot attempts to move a position when the part has not yet come within the window, the Controller Unit waits until the part enters the window. If the robot attempts to move to a position when the part has moved out of the window then the Controller Unit generates an error.
pr-0-0-pdl_12.fm
00/0607
12-63
0..1023 1.00 It is used in conveyor tracking applications where an external resolver is connected to the conveyor motor. The variable is a bit mask specifying the physical axis where the resolver is connected
pr-0-0-pdl_12.fm
12-64
00/0607
Description:
It is used in conveyor tracking applications where an external resolver is connected to the conveyor motor. The variable indicates the number of the servo control card to which the resolver is connected
pr-0-0-pdl_12.fm
00/0607
12-65
12-66
00/0607
none 1.00 There are certain fields of $CRNT_DATA which do not have corresponding predefined variables, but instead can be referenced using these general arrays. The format and meaning of the data within these fields is reserved
00/0607
12-67
1.00 It represents the default arm of the system. It is used in a multi-arm system when the PROG_ARM attribute has not been specified in the PROGRAM header statement. The range of values is from 1 up to 32
pr-0-0-pdl_12.fm
12-68
00/0607
pr-0-0-pdl_12.fm
00/0607
12-69
pr-0-0-pdl_12.fm
12-70
00/0607
pr-0-0-pdl_12.fm
00/0607
12-71
pr-0-0-pdl_12.fm
12-72
00/0607
pr-0-0-pdl_12.fm
00/0607
12-73
12-74
00/0607
DSA array of real of one dimension priviledged read-write none 1.00 There are certain fields of $DSA_DATA which do not have corresponding predefined variables, but instead can be referenced using these general arrays. The format and meaning of the data within these fields is unspecified
pr-0-0-pdl_12.fm
00/0607
12-75
priviledged read-write 0, 1 2.4x there is one of this variable for each DSA board. This variable is used for temporarerly disabling, when set to 1, what defined for $HDIN by means of a previous call to the HDIN_SET function. For re-enabling the $HDIN monitoring (if it was previously enabled), $HDIN_SUSP should be set to 0. Note that, when the HDIN_SET built-in is called, the $HDIN_SUSP is automatically set to 0. It is therefore suggested to use the $HDIN_SUSP only after the call to HDIN_SET
[2]: Maximum size in bytes for incoming messages (if 0, the default is 300K, that is 300 * 1024 bytes) [3]: Polling interval for POP3 server (if 0, the default and minimum used value is 60000 ms) [4]: Size to reserve to the body of the email (if 0 the default value is 5K, that is 5 * 1024 bytes) [5]: timeout (if 0 the default value is 10000 ms)
pr-0-0-pdl_12.fm
12-76
00/0607
pr-0-0-pdl_12.fm
00/0607
12-77
pr-0-0-pdl_12.fm
12-78
00/0607
Bit 7: Fieldbus primary interface configured correctly Bit 8..22: reserved Bit 23: Slave interface configured Bit 24: Master interface configured Bit 25..29: reserved Bit 30: Fieldbus processor board plugged in Bit 31..32: reserved For further information see also Control Unit Use Manual - Chap. IO_INST Program-I/O Configuration.
Note that for making operative any setting of $FB_INIT, it is needed to restart the Controller. For further information see also Control Unit Use Manual - Chap. IO_INST Program-I/O Configuration.
pr-0-0-pdl_12.fm
00/0607
12-79
12-80
00/0607
none 1.00 the variable contains initialization and setup information for the slaves on a fieldbus when the C4G is a master. The following table shows the meaning of each element: [1]: configuration flags Bit 1..3: reserved Bit 4: if 0 there is the digital copy in the $DIN, $DOUT. If 1 the copy is on $WORD. Bit 5: if 0 the node is active as default; if 1 the node is active Bit 6: for Profibus only. If 0 the node inputs and outputs are handled as single bytes; if 1 they are treated as words (2 bytes) Bit 7: for Profibus only. If 0 the word consistency is disabled; if 1 it is enabled Bit 8: for profibus only. If 0 the blocks consistency is disabled if 1 it is enabled Bit 9..32: reserved [2]: number of input bytes [3]: Network address [4]: node identifier for Profibus and Interbus; Vendor ID for DeviceNet [5]: product code for DeviceNet only [6..7]: reserved [8]: start index of user $WORDs [9]: number of output bytes [10]: for Profibus only. First set of configuration parameters. The least significant byte indicates the number of parameters (possible value from 0 to 7). The remaining bytes hold the parameters [11]: for Profibus only. Second set of configuration parameters [12]: for Profibus only. First set of user parameters The least significant byte indicates the number of parameters (possible value from 0 to 7). The remaining bytes hold the parameters [13]: for Profibus only. Second set of user parameters [14..16]: reserved
pr-0-0-pdl_12.fm
00/0607
12-81
pr-0-0-pdl_12.fm
12-82
00/0607
For DeviceNet: [1]: this is a bit mask where : Bit 1: if set to 1, it indicates that the protocol is enabled. Otherwise the Controller assumes that the board is not present. For making operative the changes on this bit, it is needed to restart the Controller. Bit 2: if set to 1, it allows to logically unlink the remote PLC from the Controller, although the communication is still active. System outputs only are updated, no updating on inputs. This bit is dinamically active. Bit 3: reserved Bit 4: if 0 the copy is done on $DIN and $DOUT; if 1 the copy is done on $WORDs. Bit 5..9: reserved Bit 10: if set to 1, the Controller sends the input and output data to the remote PLC without swapping the bytes. If set to 0, the swap operation is done. Bit 11..32: reserved [2]: baud rate. 1: 125 Kbit, 2: 250 Kbit; 3: 500 Kbit [3]: net address (MAC ID) [4]: vendor ID [5]: Product Code [6]: number of input and output bytes exchanged [7]: reserved [8]: $WORD start index (if used) [9]: Serial Number [10]:reserved For INTERBUS: [1]: this is a bit mask where : Bit 1: if set to 1, it indicates that the protocol is enabled. Otherwise the Controller assumes that the board is not present. For making operative the changes on this bit, it is needed to restart the Controller. Bit 2: if set to 1, it allows to logically unlink the remote PLC from the Controller, although the communication is still active. System outputs only are updated, no updating on inputs. This bit is dinamically active. Bit 3: reserved Bit 4: if 0 the copy is done on $DIN and $DOUT; if 1 the copy is done of $WORDs. Bit 5..9: reserved Bit 10: if set to 1, the Controller sends the input and output data to the remote PLC without swapping the bytes. If set to 0, the swap operation is done. Bit 11..32: reserved
[2]: reserved [3]: net position [4]: device code [5]: reserved [6]: number of input and output bytes exchanged [7]: reserved [8]: $WORD start index (if used) [9..10]:reserved
pr-0-0-pdl_12.fm
00/0607
12-83
12-84
00/0607
not saved string limited access, WITH OPEN FILE none 1.00 It represents an array of ASCII delimiting characters for asynchronous READs. This can be changed by setting this variable in the WITH clause of the OPEN FILE Statement. The delimiter character received is placed in the read buffer. A maximum of 16 characters can be specified as delimiters and if $FL_PASSALL is not TRUE, then the ENTER and down arrow keys are differentiated.
00/0607
12-85
none 1.00 It represents the compensation file name used by the compensation algorithm. There is one of this variable for each arm. The user can assign to this variable the name of the compensation file to be used for that arm. The name should NOT include the file extension and the device specification. If this variable is not initialized or is set to the null string (''), the algorithm looks in UD: for a file with extension .ROB and with the arm number as last character of the file name. Note that, if more than one file are present in UD: with this characteristic, the first one (non necessarily in alphabetical order) is taken. For disabling the algorithm, it is needed to set this variable to the null string and to remove the .ROB file from the UD:. The system returns an error only in case $FL_COMP is set to a certain value (different from NULL string) and the corresponding file is not present in UD:
12-86
00/0607
not saved integer limited access, WITH OPEN FILE 1..512 1.00 It represents the number of characters to be read. This can be changed by setting this variable in the WITH clause of the OPEN FILE Statement
pr-0-0-pdl_12.fm
00/0607
12-87
none 1.00 It represents whether the input buffer is flushed before a READ is issued. This can be changed by setting this variable in the WITH clause of the OPEN FILE Statement. This is useful when reading from a serial device or from a window when there is to be no type-ahead.
12-88
00/0607
pr-0-0-pdl_12.fm
00/0607
12-89
pr-0-0-pdl_12.fm
12-90
00/0607
pr-0-0-pdl_12.fm
00/0607
12-91
pr-0-0-pdl_12.fm
12-92
00/0607
pr-0-0-pdl_12.fm
00/0607
12-93
12.180 $FW_VAR: flag defining the variable to be considered when flow modulate is used
Memory category Load category: Data type: Attributes: Limits S/W Version: Description: field of $flow_tbl controller integer none none 1.00 integer flag that identifies the variable considered by the flow modulation alghorithm: 1 for $ARM_VEL (cosmetic sealing), 2 for $RAD_VEL (glueing).
pr-0-0-pdl_12.fm
12-94
00/0607
pr-0-0-pdl_12.fm
00/0607
12-95
pr-0-0-pdl_12.fm
12-96
00/0607
pr-0-0-pdl_12.fm
00/0607
12-97
12-98
00/0607
array of integer of one dimension priviledged read-write 0..100 1.00 It represents the percentage of acceleration time and deceleration time used in the constant jerk phase. This is a variation of acceleration $JERK[1]: Determines percentage of acceleration time in the jerk phase $JERK[2]: reserved $JERK[3]: reserved $JERK[4]: Determines percentage of deceleration time in the jerk phase
pr-0-0-pdl_12.fm
00/0607
12-99
field node, WITH MOVE; MOVE ALONG none 1.00 This variable has effect only on the axes with a range greater than 360 degrees ($STRK_END_P[axis] - $STRK_END_N[axis] > 360). If set to FALSE, these axes will be forced to move less than 180 degrees. This variable has effect during joint moves to POSITION and Cartesian moves with $ORNT_TYPE=WRIST_JNT. The default value is TRUE meaning that the multiturn is allowed
pr-0-0-pdl_12.fm
12-100
00/0607
none 1.0 When the value is TRUE, the jog motion starts to be executed in an incremental way. This means that, upon each pressure of one of the jog keys, a motion similar to what specified in $JOG_INCR_ROT (in case of rotational movements) and $JOG_INCR_DIST (in case of translational movements) is executed.
pr-0-0-pdl_12.fm
00/0607
12-101
1.00 It is the distance between the user and the robot base. It is used for defining the Jog Pad system of reference.
pr-0-0-pdl_12.fm
12-102
00/0607
pr-0-0-pdl_12.fm
00/0607
12-103
pr-0-0-pdl_12.fm
12-104
00/0607
the maximum value is ($LIN_SPD_LIM / $LIN_SPD) * 100 3.1 This predefined variable is used for changing the linear speed override during the execution of linear and circular motions. It immediately takes effect, also on the running motion. For further information about run-time changing the Linear Speed Override, refer to the Motion Programming manual - par. Run-Time Speed Override.
pr-0-0-pdl_12.fm
00/0607
12-105
not saved jointpos limited access, field node none 1.00 See the description of $MAIN_POS: PATH node main position destination
12-106
00/0607
pr-0-0-pdl_12.fm
00/0607
12-107
12-108
00/0607
not saved integer read-only none 1.00 It represents the current state of the motion environment. Possible values are: 0 : no move has been issued 1 : there are pending moves waiting to be executed 2 : there are moves that have been interrupted and that can be resumed 16 : there are active moves 32 : there is a recovery movement in progress 64 : there are active moves issued in Jog mode The value of this system variable is dynamically updated. Its value must be read as a bit mask because it is possible that more than one of the listed above situations is active at the same time
pr-0-0-pdl_12.fm
00/0607
12-109
12-110
00/0607
1.00 There are certain fields of $MCP_DATA which do not have corresponding predefined variables, but instead can be referenced using this general array. The format and meaning of the data within these fields is reserved.
pr-0-0-pdl_12.fm
00/0607
12-111
Description:
It is an array of two elements: the first one is mapped on NET1:, the second one on NET2: . The bits of each element assume the following meaning: Bit 1: if set, the transfer is done in Binary mode otherwise in ASCII mode Bit 2: if set, some additional information are sent to the user (Verbose) Bit 3: if set, the overwrite modality is activated Bit 4-8: reserved
pr-0-0-pdl_12.fm
12-112
00/0607
It is an array of two elements: the first one is mapped on NET1:, the second one on NET2: . Each element contains the name of the password (e.g. Smidth).
static
00/0607
12-113
not saved array of integer of one dimension priviledged read-write none 1.00 It is an array of 2 elements with the following meaning: [1]: Number of active servers [2]: reserved
pr-0-0-pdl_12.fm
12-114
00/0607
pr-0-0-pdl_12.fm
00/0607
12-115
pr-0-0-pdl_12.fm
12-116
00/0607
pr-0-0-pdl_12.fm
00/0607
12-117
pr-0-0-pdl_12.fm
12-118
00/0607
none 4..30 1.00 It represents the number of devices which can be defined at any one time. The default value is 20
pr-0-0-pdl_12.fm
00/0607
12-119
pr-0-0-pdl_12.fm
12-120
00/0607
pr-0-0-pdl_12.fm
00/0607
12-121
pr-0-0-pdl_12.fm
12-122
00/0607
Description:
it represents the total arm space. It is only in used in cartesian motions for indicating the average TCP space expressed in millimeters. This variable is updated every tick (default 2 milliseconds) in case of linear or circular motions and every 5 ticks in case of joint movements. It is zeroed in the following situations: restart, reset from pdl2 , when the variable overflows its numerical value
pr-0-0-pdl_12.fm
00/0607
12-123
Description:
This is the mask of joints that are checked when the On Pos feature uses the $ON_POS_TBL[on_pos_idx].OP_JNT variable. If this mask is 0, $ON_POS_TBL[on_pos_idx].OP_POS will be used. This mask assumes the value that is passed as parameter to the ON_JNT_SET built-in routine
pr-0-0-pdl_12.fm
12-124
00/0607
Description:
This variable contains a tolerance in millimeters. The value is related to: X,Y,Z coordinates of the actual Cartesian robot POSITION in respect with the $ON_POS_TBL[on_pos_idx].OP_POS; linear joints of the actual JOINTPOS in respect with the $ON_POS_TBL[on_pos_idx].OP_JNT. The ON POS feature must be enabled (ON_POS(ON,..)) after having been defined on the position (ON_POS_SET) or on the jointpos (ON_JNT_SET)
pr-0-0-pdl_12.fm
00/0607
12-125
none none 1.00 If this variable is TRUE, the tool is not considered for validating the reaching of the $ON_POS_TBL[on_pos_idx].OP_POS position
pr-0-0-pdl_12.fm
12-126
00/0607
Description:
It represents the type of evolution to be used for motion orientation. Valid values are represented by the predefined constants EUL_WORLD (3 angle), RS_WORLD (2 angle relative to world), RS_TRAJ (2 angle relative to trajectory) and WRIST_JNT (wrist). The default value is RS_WORLD
pr-0-0-pdl_12.fm
00/0607
12-127
pr-0-0-pdl_12.fm
12-128
00/0607
pr-0-0-pdl_12.fm
00/0607
12-129
not saved array of boolean of one dimension priviledged read-write, pulse usable none 1.00 It represents the set of digital output points reserved for applications. For further information see also par. 5.2.2 $IN and $OUT on page 5-4 and Control Unit Use Manual - Chap. IO_INST Program-I/O Configuration.
Memory category Load category: Data type: Attributes: Limits S/W Version: Description:
field of arm_data arm. integer WITH MOVE none 1.00 This variable can be used in the WITH clause of a MOVE Statement for implementing one nodal modality for MOVE. It consists in assigning the INTEGER result of a user-written function call to the $PAR variable. The parameters to this function should be the values to assign to those predefined motion variables to be applied to the move. If the parameters are function calls themselves, they should be as short as possible for avoiding slowing down the execution of each move. Example: routine that calculates the tool and the frame, exported from pex5 program ROUTINE tl_fr(ai_tool_idx,ai_frame_idx: INTEGER): INTEGER EXPORTED FROM pex5 ROUTINE velo(ai_spd: INTEGER): INTEGER BEGIN $ARM_SPD_OVR := ai_spd RETURN(0) END velo ROUTINE ter(ai_term: INTEGER): INTEGER BEGIN $TERM_TYPE := ai_term RETURN(0) END ter Minor category - configuration
pr-0-0-pdl_12.fm
12-130
00/0607
ROUTINE func(par1,par2,par3: INTEGER):INTEGER BEGIN RETURN(0) END func MOVE JOINT TO jnt0001p WITH $PAR = func(tl_fr (1,3), velo(20), ter(NOSETTLE)) MOVE JOINT TO jnt0002p WITH $PAR = func(tl_fr (1,3), velo(20), ter(NOSETTLE)) MOVE LINEAR TO pnt0001p WITH $PAR = func(tl_fr (1,2), velo(40), ter(COARSE)) Here follow some suggestions to be followed when using $PAR: With the $PAR it is suggested not to use the following names as they are reserved for a specific application: tf, rtf, v, vl, zone, gp, mp, ap, orn. The function WITHed with the $PAR (function func in the above example) should always return zero. If the $PAR is adopted for the MOVE Statements, it is a good rule of programming to use it in each move. A mixed way of programming (nodal and modal) is not recommended. If the MOVE Statement includes multiple WITH clauses (not recommended way of programming), the WITH $PAR should be the first one, otherwise the other WITH clauses would have no effect. The MOVE Statement should always have the trajectory specified (LINEAR, JOINT, CIRCULAR)
pr-0-0-pdl_12.fm
00/0607
12-131
pr-0-0-pdl_12.fm
12-132
00/0607
pr-0-0-pdl_12.fm
00/0607
12-133
pr-0-0-pdl_12.fm
12-134
00/0607
pr-0-0-pdl_12.fm
00/0607
12-135
1.00 It represents the condition handlers currently defined in the program. Each element of this variable should be read as a mask of bits, in which each bit corresponds to a condition handler number. For each element of this variable, only bits 1-30 are significative (bits 31 and 32 should be ignored). Here follows an example of how this variable should be read for understanding which condition is defined for a certain program. Assume that the program has condition handlers 1, 30, 31, and 32 defined: $PROG_CONDS[1] will be 0x20000001 (bits 1 and 30 set to 1), $PROG_CONDS[2] will be 0x3 (bits 1 and 2 set), and the remaining elements will be 0
12-136
00/0607
integer WITH MOVE 1..100 1.00 It represents the speed override in percent for motions issued from this program. Changing this value does not affect acceleration or deceleration
pr-0-0-pdl_12.fm
00/0607
12-137
pr-0-0-pdl_12.fm
12-138
00/0607
Description:
This variable has the same meaning as $USER_LONG and is used for accessing one long word (4 bytes) of a memory location. The difference between $USER_LONG and $PROG_ULONG is the fact that there is one $PROG_ULONG per-program while there is only one $USER_LONG in the whole system
pr-0-0-pdl_12.fm
00/0607
12-139
Description:
It represents the ideal position in radians or millimeters. It does not take into consideration the coupling effect between axes
pr-0-0-pdl_12.fm
12-140
00/0607
Description:
It represents the different robot configuration and options present in the system: Bit 1..8: reserved Bit 9..12: Loaded language: 0: English 1: Italian 2: French 3: German 4: Spanish 5: Portoguese 6: Turkish 7: Chinese Bit 13..16: reserved Bit 17: System variables initialized Bit 18: XD: device connected Bit 19: TX: device connected Bit 20..21: reserved Bit 22: PROFIBUS DP Slave interface present Bit 23: InterBus-s Slave interface present Bit 24: InterBus-S Master interface present Bit 25..26: reserved Bit 27: Device Net Slave board present Bit 28..30: reserved Bit 31: system in minimal configuration Bit 32: reserved
pr-0-0-pdl_12.fm
00/0607
12-141
integer priviledged read-write none 1.00 It represents the model of the robot arm. A different number is used to represent each different model of robot
pr-0-0-pdl_12.fm
12-142
00/0607
1.00 It is a bit mask used to configure specific features of some robot models. The meaning of the bits is internal
pr-0-0-pdl_12.fm
00/0607
12-143
0..10 1.00 It represents the type of motion recovery after a motion has been interrupted. The possible values and their recovery types actions are listed below. 0: Recovery to the interrupted trajectory with a joint interpolation. 1: Recovery to the initial position of the interrupted move with a joint interpolation. 2: Recovery to the final position of the interrupted move with a joint interpolation. 3: Do not recover; an error message is returned to the user. 4: Recovery on the interrupted trajectory, with the same move type of the interrupted trajectory. The orientation type is WRIST_JNT if implemented, else RS_WORLD. 5: Recovery on the initial position of the interrupted trajectory, with the same move type of the interrupted trajectory. The orientation type is WRIST_JNT if implemented, else RS_WORLD. 6: Recovery on the final position of the interrupted trajectory, with the same move type of the interrupted trajectory. The orientation type is WRIST_JNT if implemented, else RS_WORLD. 7: Reserved. 8: Reserved. 9: automatic recovery of the process. The functionality is the same as modality 4 but the distance undertaken in the movement of return is the result of the sum of $RCVR_DIST value and the covered distance in manual motion after the robot stopping on the planned movement
pr-0-0-pdl_12.fm
12-144
00/0607
Description:
It contains information on the current setup of the REC key. This information can only be changed via the IDE Page, Select (F4) menu, REC setup function. For forther information see Control Unit Use manual - IDE Page paragraph
pr-0-0-pdl_12.fm
00/0607
12-145
Description:
It is a 2 dimensional array with each element containing the information of who is connected to the controller. The first dimension can assume: value 1 for the host, value 2 for the user. The second dimension identifies the program used for connecting to the controller: value 1 is for WinC4G, value 3 is for TP4i/WiTP and other values are used for external connections. Example: $REM_I_STR[1,1] shows the computer that is connected via WINC4G to the controller. $REM_I_STR[2,1] shows the user that is connected via WinC4G to the controller
pr-0-0-pdl_12.fm
12-146
00/0607
Description:
during the Restart operation (cold, reload or shutdown) this value is set to the type of restart. A program can abort the restart by setting the flag to -1.
pr-0-0-pdl_12.fm
00/0607
12-147
1.00 It represents the maximum rotational deceleration expressed in radians per second squared.
pr-0-0-pdl_12.fm
12-148
00/0607
Description:
This array contains data related to the PLC resource environment. The first array dimension identifies the resource; the index associated to a resource can either be viewed by the proper View command under the Resplc menu or can be read via PDL2 by means of the RPLC_GET_IDX Built-In Procedure. The second array dimension identifies the information of the selected resource: [1]: cycle time in kernel real-time modality (default 300 microseconds) [2]: cycle time in kernel cycle-to-cycle modality (default 100 microseconds) [3]: cycle time in resource stopped modality (default 300 microseconds) [4]: percentage of cycle time for activating external communications (default 70%) [5..16]: reserved At the moment, only the elements related to the first resource are used
static controller. none none 1.00 Minor category - vars array of real of one dimension
00/0607
12-149
Description:
Real registers are "" variables that can be used by users instead of having to define variables. For the different datatypes of Integer, Real, String, Boolean, Jointpos, Position & Xtndpos there are saved and non-saved registers
pr-0-0-pdl_12.fm
12-150
00/0607
pr-0-0-pdl_12.fm
00/0607
12-151
pr-0-0-pdl_12.fm
12-152
00/0607
pr-0-0-pdl_12.fm
00/0607
12-153
Description:
Each PATH contains a frame table (FRM_TBL) of 7 positional elements that can be used either as a tool or a reference frame in a node which contains the MAIN_POS standard field. $SEG_REF_IDX represents the FRM_TBL index of the reference frame to be used by a particular node; if $SEG_REF_IDX is not included in the node definition or has value of zero (default value), no reference frame is applied to the path segment. As there is just one FRM_TBL in each path, it is suggested to use elements 1 to 3 inclusive for reference frames and elements 4 to 7 for tools. TYPE frm = NODEDEF $MOVE_TYPE $MAIN_POS $SEG_REF_IDX $SEG_TOOL_IDX ENDNODEDEF -- The nodes of this path should either be taught or NODE_APPended VAR frmpth: PATH OF frm ..... BEGIN frmpth.FRM_TBL[1] := POS(1000, 200, 1000, 0, 180, 0, '') frmpth.FRM_TBL[4] := POS(100, -200, 0, 0, -90, 0, '') frmpth.NODE[5].$MOVE_TYPE := LINEAR frmpth.NODE[5].$MAIN_POS := POS(100, -200, 300, 0, 180, 0, '') frmpth.NODE[5].$SEG_REF_IDX := 1 frmpth.NODE[6].$MOVE_TYPE := LINEAR frmpth.NODE[6].$MAIN_POS := POS(-1000, -1000, 1000, 0, 180, 0, '') frmpth.NODE[6].$SEG_TOOL_IDX := 4
pr-0-0-pdl_12.fm
12-154
00/0607
not saved integer limited access, field node, WITH MOVE ALONG FINE..JNT_COARSE 1.00 It represents the termination type for a PATH segment. The variable has the same meaning as $TERM_TYPE. This variable does not apply to the last node, in which case $TERM_TYPE is used. If the standard field is not specified in the node declaration or in a WITH clause, the current program value is used
pr-0-0-pdl_12.fm
00/0607
12-155
pr-0-0-pdl_12.fm
12-156
00/0607
pr-0-0-pdl_12.fm
00/0607
12-157
pr-0-0-pdl_12.fm
12-158
00/0607
Description:
It is a coded value used for configuring Sensor Tracking. It defines three characteristics: where the information of the sensor can be read and what is the format of the data; in what frame of reference the corrections must be applied; if the corrections must be applied in a relative or absolute way. A list of valid values follows: 0: Sensor suspended; 1..4: Reserved 5: External sensor in TOOL frame, relative mode; 6: External sensor in UFRAME frame, relative mode; 7: External sensor in WORLD frame, relative mode; 8: External sensor in WEAVE frame, relative mode; 9: External sensor in TOOL frame, absolute mode; 10: External sensor in UFRAME frame, absolute mode; 11: External sensor in WORLD frame, absolute mode; 12: External sensor in WEAVE frame, absolute mode; 13..30: Reserved. External sensors are not integrated in the controller and can be managed by a PDL2 user program
pr-0-0-pdl_12.fm
00/0607
12-159
pr-0-0-pdl_12.fm
12-160
00/0607
pr-0-0-pdl_12.fm
00/0607
12-161
pr-0-0-pdl_12.fm
12-162
00/0607
field of arm_data
00/0607
12-163
arm.
array of real of one dimension priviledged read-write none 1.00 It represents the system positive stroke ends of the arm. This value cannot be changed by the user
pr-0-0-pdl_12.fm
12-164
00/0607
The variable contains initialization and setup information for the SWIM Board. It must be properly initialized before using the board in the controller. The first index is the SWIM board number. The meaning of the second index is: [1]: this is a bit mask where : Bit 1: if set to 1, it indicates that the board can be recognized by the controller. Otherwise the controller assumes that the SWIM board is not present. For making operative the changes on this bit, it is needed to issue a restart of the controller. Bit 2: SWIM board disabled via software. This means that data from the SWIM board are not copied in the $WORD array. Viceversa, the controller output $WORDs are copied in the SWIM board. Bit 12: If the SWIM board is disabled via software, the first $WORD of Input data is not updated
[2]: index, in the $WORD array, starting from which data are copied. [3]: number of $WORDS to be copied [4]: application profile [5..8]: reserved
pr-0-0-pdl_12.fm
00/0607
12-165
Description:
It represents the LUN (logical unit number) where the output of a SYS_CALL request is directed. This variable assumes by default the current value of $DFT_LUN
pr-0-0-pdl_12.fm
12-166
00/0607
pr-0-0-pdl_12.fm
00/0607
12-167
12-168
00/0607
Bit 23: TP connected Bit 24: This bit is set to 1 if the system is in a ALARM state due to a fatal error (severity 13-15) Bit 25: Indicates that the state of the system is REMOTE (see also bits 29). Bit 26: START button pressed: in AUTO: is set to 1 upon the first START button pressure when the system is in DRIVE ON. Returns to 0 when a HOLD or DRIVE OFF command is issued. in PROG: this bit maintains the value of 1 as long as the START button remains pressed for the FORWARD function. Bit 27: Indicates that the state of the system is ALARM. Bit 28: Indicates that the state of the system is PROGR. Bit 29: Indicates that the state of the system is AUTO (Auto-Teach or Local or Remote) (see also bit 25). Bit 30: Indicates that the state of the system is HOLD. Bit 31: DRIVEs status: 1 for DRIVE OFF, 0 for DRIVE ON Bit 32: Reserved
pr-0-0-pdl_12.fm
00/0607
12-169
pr-0-0-pdl_12.fm
12-170
00/0607
Description:
It represents the number of the last error in this thread of execution. There is a $THRD_ERROR for every thread of execution. A new thread is started when an Interrupt Service Routine (routine that is an action of a condition) is activated. If the Interrupt Service Routine is an action of an error event condition, this variable is initialized to the error number causing the condition to trigger. Otherwise, it is initialized to zero
pr-0-0-pdl_12.fm
00/0607
12-171
none 0..2000 1.00 It represents the time, in milliseconds, in which the motion is defined to be completed after the tool center point (TCP) has first entered the tolerance sphere. Due to the effects of inertia, the TCP may enter the sphere of tolerance and immediately leave the sphere. The time is measured from the first time the tolerance sphere is entered. The default value is 0 milliseconds
pr-0-0-pdl_12.fm
12-172
00/0607
Description:
It represents the tolerance in degrees for each rotating joint and in millimeters for each traslating joint. This parameter is used when $TERM_TYPE is JNT_COARSE. There are no limit checks performed on these values. Any change to the value of this variable immediately takes effect on the next movement.
pr-0-0-pdl_12.fm
00/0607
12-173
pr-0-0-pdl_12.fm
12-174
00/0607
pr-0-0-pdl_12.fm
00/0607
12-175
integer read-only 1..4 1.00 It represents the arm currently selected on the teach pendant and displayed on the status line of the system screen
12-176
00/0607
WRIST_JNT..RPY_WORLD 1.00 It represents the type of orientation used when jog keys 4, 5, and 6 are pressed and the type of motion selected on the teach pendant is not JOINT. If $TP_ORNT is set to RPY_WORLD, these keys determine the rotation along axes X, Y, Z respectively in the selected frame of reference (BAS, TOL or USR). If $TP_ORNT is set to WRIST_JNT, these keys determine the movement of axes 4, 5 and 6 in joint mode, regardless of the active frame of reference. Note that $TP_ORNT can be changed either from PDL2 or from the teach pendant
pr-0-0-pdl_12.fm
00/0607
12-177
[8]: reserved [9]: Drives enable delay in msecs. The default value is 400 [10]: Slow speed, brake, DSA on/off delay in msecs. The default value is 2000 (2 seconds) [11]: teach pendant connection delay in msecs. The default value is 3000 (3 seconds) [12]: reserved [13]: Alarm exclusion delay in msecs. The default value is 60000 (60 seconds) [14]: Startup delay time for REMOTE command in msecs. The default value is 5000 (5 seconds) [15]: DISPLAY command refresh time in msecs. The default value is 1000 (1 second) [16]: Maximum number of lines available to the DISPLAY group of commands when issued on the Terminal window of WinC4G program that runs on the PC. The default value is 16 lines [17]: Maximum number of lines available to the DISPLAY group of commands when issued on the programming terminal. The default value is 10 lines [18]: reserved [19]: Timeout for TP4i/WiTP backlight. The default value is 180 seconds (3 minutes). Allowed values: -1 - the TP4i/WiTP will never switch; 0 - it is automatically set by the system to 180. [20]: Refresh time, in msecs, for the FOLLOW command of the PROGRAM EDIT and MEMORY DEBUG environments. The default value is every half second [21]: Status line refresh time in msecs. The default value is 500 [22..23]: reserved [24]: During PowerFailureRecovery, this is the lag in some error logging. The default is 800 msecs. [25]: reserved [26]: Software timer that activates the motors brake when time expires after the controlled emergency. The default value is 1400 msecs [27]: Energy saving timeout expressed in seconds. The default is 120 [28]: reserved [29]: size, in bytes, of the stack to be allocated for PDL2 programs. The default is 1000 [30]: Maximum size, in bytes, for read-ahead buffer. The default is 4096 [31]: Maximum execution time, in msecs, for the calibration program. The default is 10000 [32..41]: reserved [42]: Default stack size, in bytes, for EXECUTE command. The default is 300 [43..50]: reserved [54]: Number of default characters read. Default 256
pr-0-0-pdl_12.fm
12-178
00/0607
none 1.00 The Cartesian trajectory usually follows the shortest path for the joints, so the configuration string of the final position reached can be different from the one present in the move statement. $TURN_CARE represents a flag to determine whether the system must check the configuration turn numbers. If the flag is FALSE no check is done. If the flag is TRUE the system sends an error message if the Cartesian trajectory tries to move the robot to a final position having a configuration number of turns different from the number of turns present in the move statement
pr-0-0-pdl_12.fm
00/0607
12-179
1.00 Used to set the starting address in memory of $USER_BIT, $USER_BYTE, $USER_WORD and $USER_LONG
pr-0-0-pdl_12.fm
12-180
00/0607
Description:
It represents the length of the memory which can be accessed using $USER_BIT, $USER_BYTE, $USER_WORD, $USER_LONG starting from the address contained in $USER_ADDR
pr-0-0-pdl_12.fm
00/0607
12-181
pr-0-0-pdl_12.fm
12-182
00/0607
pr-0-0-pdl_12.fm
00/0607
12-183
pr-0-0-pdl_12.fm
12-184
00/0607
pr-0-0-pdl_12.fm
00/0607
12-185
pr-0-0-pdl_12.fm
12-186
00/0607
pr-0-0-pdl_12.fm
00/0607
12-187
pr-0-0-pdl_12.fm
12-188
00/0607
pr-0-0-pdl_12.fm
00/0607
12-189
pr-0-0-pdl_12.fm
12-190
00/0607
pr-0-0-pdl_12.fm
00/0607
12-191
pr-0-0-pdl_12.fm
12-192
00/0607
13.
pr-0-0-pdl_16.fm
00/0607
13-1
Power Failure Recovery removing boards from the rack when the Controller is switched off can cause problems during recovery from power failure at the system restart. The system cannot support all deriving problems;
if a certain board must be extracted from the rack for changing the system configuration, it is recommended to issue a CONFIGURE CONTROLLER RESTART COLD command and then, without waiting the restart of the controller, the power should be switched off using the electronics power switch on the Operator Panel. At this point the specific board can be removed and the system can be restarted using the electronic switch; in this way, the power failure recovery is not performed by the controller that accepts the new configuration, eventually signalling the absence of the previously configured board(s);
It is also suggested to check that the TP4i/WiTP Teach Pendant is connected after the power failure recovery. Please use the proper event (EVENT 116) inside a CONDITION or a WAIT FOR statement. The following PDL2 program demonstrate how to recover from a power failure during a READ or WRITE statement. PROGRAM pf_read NOHOLD VAR rs232 : INTEGER NOSAVE s : STRING[10] NOSAVE BEGIN OPEN FILE rs232 (COM1:, RW) ERR_TRAP_ON(39990) -- "READ/Filer error 11294" (11294 --> "power failure") CYCLE READ rs232 (s) -- input character. IF $FL_STS = 0 THEN WRITE (s) -- Data is valid. ENDIF END pf_read PROGRAM pf_write NOHOLD VAR rs232 : INTEGER NOSAVE BEGIN OPEN FILE rs232 (COM1:, RW) ERR_TRAP_ON(40033) -- "WRITE error 11294" (11294 --> "power failure") ERR_TRAP_ON(39990) -- "READ/Filer error 11294" CYCLE WRITE rs232 ($CYCLE) END pf_write Waiting until the power failure recovery is complete is shown in the next example program.
pr-0-0-pdl_16.fm
13-2
00/0607
PROGRAM pf_sync NOHOLD VAR a : POSITION NOSAVE ROUTINE pf_wait_until_complete BEGIN $FDOUT[5] := ON -- turn on U1 lamp WAIT FOR BIT_TEST($SYS_STATE, 9, OFF) -- wait for PF to complete $FDOUT[5] := OFF -- turn off U1 lamp END pf_wait_until_complete BEGIN CONDITION[1] NODISABLE : wait for POWERUP after PF. WHEN POWERUP DO pf_wait_until_complete -- wait until power fail recover is complete ENDCONDITION ENABLE CONDITION[1] -- Enable PF monitoring. CYCLE WAIT FOR $FDIN[5] -- Just wait... (press U1 to print position) a := ARM_POS -- Get ARM position; if done before the end of WRITE (a) -- recovery system show "arm not cal." warning. END pf_sync
pr-0-0-pdl_16.fm
00/0607
13-3
pr-0-0-pdl_16.fm
13-4
00/0607
14.
14.1 Introduction
This chapter reports a list of the main differences in PDL2 language (and not only in the language) that should be considered before running on C4G Control Unit a PDL2 program written in the past for C3G Control Unit. Detailed information is supplied about the following topics: System parameters values Terminology Old programs compatibility with the new Controller Unit Devices and Directories System Variables Predefined constants Built-in routines and functions Open File Statement Conditions Swapping to a foreign language System menu Commands Compressed files Error and action Logging PC interface Fieldbuses configuration MMUX (motor multiplexer)
pr-0-0-pdl_17.fm
00/0607
14-1
14.3 Terminology
SCC board is now identified by the Motion Control Process. RBC board is now identified with SMP board. The main storage device is now UD: it corresponds to RD: of C3G Controller. FD: is no more handled. If using the disk on key, it should be changed with XD:
Device and directories follow the MSDOS model: <device>:<directory>\<filename> (e.g. UD:\weld1\prog1.cod). The maximum level for a directory is 8. Some examples follow, assuming that the current directory is UD:\dir1:
pr-0-0-pdl_17.fm
14-2
00/0607
OPEN FILE vi_lun (progone) --will open UD:\dir1\progone. OPEN FILE vi_lun (\dir2\prog2) --will open UD:\dir2\prog2 OPEN FILE vi_lun (TD:\dir3\prog3) -- will look for -- TD:\dir3\prog3 OPEN FILE vi_lun (..\prog4) -- if the default selected directory -- is TD:\dir3, the -- TD:\prog4 file will be opened.
14.6.1
File <$SYS_ID>.C4G
System variables are stored in a file called <SYS_ID>.C4G that are stored in the system directory UD:\sys. This file was C3G.SYS, on C3G Controller. A C3G.SYS file cannot be loaded on a C4G Controller.
14.6.2
pr-0-0-pdl_17.fm
00/0607
14-3
Transition from C3G to C4G Controller $MASTER_INIT $MTR_RES $NET_S_STR $NIO_INIT, $OFF_AREA $OFF_LIM_MAX $OFF_LIM_MIN $RIO_INIT $PROFDP_INIT $NUM_ELOG $NUM_MB( see $NUM_DSAS) $PIO_ GINTBL, $PIO_GOUTTBL, $PIO_LOGTBL, $PLCSTW $PWR_ADDR $RPT_ADDR $RESOLVER $RB_MARK $S_ALONG1 $SYS_PROT $SYS_PROT_STATE $SWIM_INIT $WORK_AREA
14.6.3
$NUM_SC_BOARD has been renamed to $NUM_MCPS. $A_ALONG1 has been renamed in $A_ALONG_1D $A_ALONG2 has been renamed in $A_ALONG_2D $C_ALONG1 has been renamed in $C_ALONG_1D $C_ALONG2 has been renamed in $C_ALONG_2D $D_ALONG1 has been renamed in $D_ALONG_2D $D_ALONG2 has been renamed in $D_ALONG_2D $S_ALONG1 has been renamed in $M_ALONG_1D
pr-0-0-pdl_17.fm
14-4
00/0607
Transition from C3G to C4G Controller $S_ALONG2 has been renamed in $M_ALONG_2D $A_AREAL1 has been renamed in $A_AREAL_1D $A_AREAL2 has been renamed in $A_AREAL_2D $C_AREAL1 has been renamed in $C_REAL_1D $C_AREAL2 has been renamed in $C_AREAL_2D $D_AREAL1 has been renamed in $D_AREAL_2D $D_AREAL2 has been renamed in $D_AREAL_2D $S_AREAL1 has been renamed in $M_AREAL_1D $S_AREAL2 has been renamed in $M_AREAL_2D
14.6.4
14.6.5
14.6.6
14.6.7
Miscellaneous
$RB_FAMILY Only the robots supported by C4G Controller are handled. Please refer to Chap. Predefined Variables List for further details.
pr-0-0-pdl_17.fm
00/0607
14-5
Transition from C3G to C4G Controller $CAL_DATA has been changed from an ARRAY of INTEGER to an ARRAY of REAL. $FOLL_ERR has been changed to an ARRAY of REAL. $NUM_TIMERS The number of elements has been changed from 50 to 100.
The predefined constant EC_USER has been replaced by EC_USR1 and EC_USR2.
14.8.1
14.8.2
SYS_CALL
The syntax of such a built-in procedure is still the same of C3G Controller. However, passing on C4G Controller, some commands have been removed, some other have been added and some more have been moved from a command branch to another. It is recommended to check all sys_calls that are written in the programs in oder to determine: if the command sigla is still supported; if it has the same meaning.
Also a check on parameters and options is recommended. Please refer to the Use of C4G Control Unit Manual, System Commands section, and to SYS_CALL Built-In Procedure description.
pr-0-0-pdl_17.fm
14-6
00/0607
Transition from C3G to C4G Controller For file related commands, the directory specification and setting of the default directory should be considered.
14.8.3
WIN_LOAD
Binary files containing windows previously created on C3G Controller by means of WIN_CREATE and WIN_SAVE procedures, cannot be directly loaded on C4G Controller. It is needed to re-create the windows on C4G Controller and issue WIN_SAVE built-in procedure directly on C4G Controller.
14.8.4
14.10 Conditions
Handling of conditions is the same as for C3G Controller. Some events have been added in the list of system events. As far as concerns the class of user error events, the predefined constant EC_USER has been replaces by EC_USR1 and EC_USR2. They identify the range of errors from 43008 to 43519 (EC_USR1) and from 43520 to 44031 (EC_USR2). Please refer to ERROR Events section for further details. Due to the fact that the value of some predefined constants changed, it is strongly recommended never to use the predefined value, but the identifier. For example , do not write WHEN ERROR CLASS 78, but WHEN ERROR CLASS EC_TRAP.
pr-0-0-pdl_17.fm
00/0607
14-7
Transition from C3G to C4G Controller Page of TP4i/WiTP Teach Pendant, and choosing the required language. It is not needed to restart the system. The effect is immediate. At the PDL2 level, changing of a language is detected by the system event WHEN EVENT 154.
14.12.1
14.12.2
Configure commands
Configure Controller Password and Set Controller Protect The protection level is now determined by the way the user logs in. ConfigureControllerRestartWarm On the C4G there is only one Restart modality. ConfigureControllerRestartBootmon. On the C4G the corresponding command is ConfigureControllerRestartMonitor Configure IO-Config The I/O configuration is done by the I/O configuration tool that runs on the PC. DisplayArmResolver /Hex This command originally was DisplayArmResolver. The hexadecimal visualization has been removed.
pr-0-0-pdl_17.fm
14-8
00/0607
14.12.3
Filer commands
Filer Utility Fd_formatHigh / Low FilerUtilityVerify
14.12.4
Input/Output commands
Set View_io Set Update_io Set TotalUnforce
14.12.5
14.12.6
PLC commands
Display Rll Memory Rll Load e Save Program Rll Activate, Clear_Plc, Go, Restart, Single_Scan, View
14.12.7
Replaced Commands
Configure Load has now a submenu. Configure Load All and Configure Load Categories. Configure Save has now a submenu. Configure Save All and Configure Save Categories. Configure Controller Restart Reboot It is now replaced by Configure Controller Restart Reload with the submenu for indicating the kind of load requested. Configure Controller Restart Bootmon It is now replaces by Configure Controller Restart Monitor which activates the Cmon instead of the Dmon. Utility Communication Mount CrtEmu It is now replaced by the Utility Communication Mount C4G_Int which activates the communication protocol with the Winc4g via serial line, USB or network.
pr-0-0-pdl_17.fm
00/0607
14-9
14.15 PC interface
The PC interface to the C4G controller is the WINC4G program. It is the correspondent to the WINPCINT/PCINT of C3G Controller Unit but with much more features. Please refer to Use of C4G Control Unit Manual, for further details.
pr-0-0-pdl_17.fm
14-10
00/0607
15.
pr-0-0-pdl_13.fm
00/0607
15-1
pr-0-0-pdl_13.fm
15-2
00/0607
pr-0-0-pdl_13.fm
00/0607
15-3
pr-0-0-pdl_13.fm
15-4
00/0607
pr-0-0-pdl_13.fm
00/0607
15-5
pr-0-0-pdl_13.fm
15-6
00/0607
16.
16.1 Introduction
Current chapter contains information about the following topics: User table creation from DATA environment Handling TP4i/WiTP right menu Customizing the PDL2 Statements insertion, in IDE environment.
The PDL2 language allows the user to create a table and add it to the TP4i/WiTP interface in the DATA page. The operation to be done are as follows: a. Table type definition: a RECORD must be defined which fields are the columns of the table. Table elements definition: the rows of the table are variables declared of the above type. Table viewing: the TABLE_ADD Built-In Procedure must be called.
b.
c.
Here follows a sample program. PROGRAM exampletable NOHOLD TYPE usertable = RECORD col1 : INTEGER col2 : BOOLEAN col3 : REAL ENDRECORD VAR line1, line2 : usertable line3_6 : ARRAY[4] OF usertable BEGIN line1.col1:=10 line1.col2:=TRUE line1.col3 :=4.5
pr-0-0-pdl_14.fm
00/0208
16-1
TABLE_ADD('userTable', $PROG_NAME, 'TabUser') END exampletable The table contents are stored in a .VAR file specified in the TABLE_ADD Built-In Procedure. The table is removed from the DATA Page issuing the TABLE_DEL Built-In Procedure.
In the following paragraphs detailed information is given about: Properties Variable <type>_signal Example program for a table creation.
16.2.1
Properties
It is possible to associate some properties to the whole table or to fields of it. Detailed information is provided in the following paragraphs. For doing it, some variables have to be defined in the program header, according to the following syntax: <type_name>_<operation> : when the operation is applied to the table. <type_name>_<field_name>_<operation> : when the operation is applied to a field of the table. <type_name>_<field_name>_<field_of_a_position>_<operation> : when operation is applied to a field of a positional variable belonging to the table. <type_name> is the table; <field_name> is the field of the table; <field_of_a_position> is a field of a positional variable belonging to the table; <operation> is one of the predefined functions listed here below. They are grouped as follows: Table (global) Properties Field Properties Field of a POSITION Properties. the
16.2.1.1
16-2
00/0208
Appendix B - Customizations on the TP _get_can_auto_apply _get_max_entries _get_msg_on_save _get_title _get_var_path _integer_get_max _integer_get_min _integer_get_step _real_get_max _real_get_min _real_get_step.
16.2.1.1.1
Name Description Data type Read upon Default value
_get_active_element
_get_active_element Get the active element in the table STRING modifying the value of the variable (it is used for monitoring a variable) none
16.2.1.1.2
Name Description Data type Read upon Default value
_get_auto_editable
_get_auto_editable Enabling flag for the table modification when the state of the controller is LOCAL. It is checked before enabling the modification of a field. BOOLEAN table modification (of a field) modifying is not enabled in LOCAL state
16.2.1.1.3
Name Description Data type Read upon Default value
_get_can_auto_apply
_get_can_auto_apply Enabling flag for the automatic apply function, which consists in the copy of the data viewed, in the table, directly in variables loaded in execution memory. BOOLEAN table opening Auto apply is enabled by default
pr-0-0-pdl_14.fm
00/0208
16-3
16.2.1.1.4
Name Description Data type Read upon Default value
_get_max_entries
_get_max_entries Maximum number of rows in the table INTEGER adding a new row to the table none
16.2.1.1.5
Name Description Data type Read upon Default value
_get_msg_on_save
_get_msg_on_save Generation of a message upon the event of table saving STRING table saving none
16.2.1.1.6
Name Description Data type Read upon Default value _get_title
_get_title
16.2.1.1.7
Name Description Data type Read upon Default value
_get_var_path
_get_var_path Path (directory and file name) in which saving the .VAR file containing the table data. The \ character used in the directory path specification must be replaced by \\' STRING table saving the same path used upon table load
16.2.1.1.8
Name Description Data type Read upon
_integer_get_max
16-4
00/0208
Default value
none
16.2.1.1.9
Name Description Data type Read upon Default value
_integer_get_min
_integer_get_min Minimum value for INTEGER fields INTEGER table opening none
16.2.1.1.10
Name Description Data type Read upon Default value
_integer_get_step
_integer_get_step Incremental and decremental step for INTEGER fields INTEGER table opening 1
16.2.1.1.11
Name Description Data type Read upon Default value
_real_get_max
_real_get_max Maximum value for REAL fields REAL table opening none
16.2.1.1.12
Name Description Data type Read upon Default value
_real_get_min
_real_get_min Minimum value for REAL fields REAL table opening none
16.2.1.1.13
Name Description
_real_get_step
pr-0-0-pdl_14.fm
00/0208
16-5
16.2.1.2
Field Properties
The listed below properties apply to the fields of the table. NOTE that the Field Property Name must always be preceeded by both <type_name> and <field_name> (i.e. the table name and name of the field which it applies to), separated by the _ character. Example: if the table name is table, and the field name is curr, the _get_title field property must be written as table_curr_get_title _get_editable _get_item_list _get_item_values _get_max _get_min _get_msg_on_change _get_step _get_tip _get_title _get_visible.
16.2.1.2.1
Name Description Data type Read upon Default value
_get_editable
_get_editable Read-only flag for the field BOOLEAN enabling the field modification FALSE, which means that the field is enabled to the modification
16.2.1.2.2
Name Description Data type Read upon Default value
_get_item_list
_get_item_list List of possibile items associated to a field of the table ARRAY OF STRING table opening none
pr-0-0-pdl_14.fm
16-6
00/0208
16.2.1.2.3
Name Description Data type Read upon Default value
_get_item_values
_get_item_values List of values related to each item listed with the _get_item_list property ARRAY OF INTEGER table opening 0 .. [max_items-1]
16.2.1.2.4
Name Description Data type Read upon Default value
_get_max
_get_max Maximum value for the field INTEGER or REAL selecting the field for being modified maximum limit of the PDL2 data type
16.2.1.2.5
Name Description Data type Read upon Default value
_get_min
_get_min Minimum value for the field INTEGER or REAL selecting the field for being modified minimum limit of the PDL2 data type
16.2.1.2.6
Name Description Data type Read upon Default value
_get_msg_on_change
_get_msg_on_change Prompt a message after a field modification STRING Apply command is issued on the field none
16.2.1.2.7
Name Description Data type Read upon
_get_step
_get_step Incremental/decremental step for the field INTEGER or REAL selecting the field for being modified
pr-0-0-pdl_14.fm
00/0208
16-7
Default value
16.2.1.2.8
Name Description Data type Read upon Default value _get_tip
_get_tip
16.2.1.2.9
Name Description Data type Read upon Default value _get_title
_get_title
16.2.1.2.10
Name Description Data type Read upon Default value
_get_visible
_get_visible Flag for enabling the viewing of a field of the table BOOLEAN table opening TRUE, which means that the field is always viewed
16.2.1.3
16-8
00/0208
16.2.1.3.1
Name Description Data type Read upon Default value
_get_max
_get_max Maximum value for a field of a POSITION INTEGER or REAL selecting a field for being modified max limit of the PDL2 data type
16.2.1.3.2
Name Description Data type Read upon Default value
_get_step
_get_step Increment of a POSITION field INTEGER or REAL selecting a field for being modified 1 for INTEGERs and 0.1 for REALs
16.2.1.3.3
Name Description Data type Read upon Default value
_get_min
_get_min Minimum value for a field of a POSITION INTEGER or REAL selecting a field for being modified minimum limit of the PDL2 data type
16.2.2
Variable <type>_signal
Such a variable is used by the user interface to signal an event to the PDL2 program which handles the tables. The PDL2 program has to check the variable value, in order to know whether the event occurred or not. The predefined value (0) indicates that none happened. In case of special events (for example table saving), for which a notification to the PDL2 program is needed, the user interface modifies its value as follows:
Variable value 1 2
When is it modified? At the end of saving operations, if successfully completed At the end of reloading operations, if successfully completed
It is up to the PDL2 program to reset the variable (to the default value of 0) at the end of the event service routine, otherwise a further event of the same type could be not detected (since the value of the variable wouldnt change!). If such a variable is not in the table, the user interface doesnt handle it at all.
pr-0-0-pdl_14.fm
00/0208
16-9
16.2.3
BEGIN TABLE_ADD('tab_def', $PROG_NAME) tab_def_spd_get_item_list[1] := 'low' tab_def_spd_get_item_list[2] := 'medium' tab_def_spd_get_item_list[3] := 'high' END test_tab
pr-0-0-pdl_14.fm
16-10
00/0208
There are 6 keys on the TP4i/WiTP that can be programmed by the user basing on the application to be developed. Each page of the application could need more than 6 keys; pressing MORE key (on the right of the right menu) the remaining softkeys of the current page are displayed. The changing from one page to another is circularly handled via the MORE key and the swapping occurs when the last softkey of the page has been displayed. It is possibile to disable a softkey but it is not allowed to disable a page of softkeys. Each softkey can be in the following status: Enabled or disabled. The pressure of a disabled softkey does not have any effect. Please note that the key aspect remains unchanged in respect to when it is enabled: the PDL2 softkey handler program has to modify the key in terms of color, icon, text so to underline the disabled key status. Pressed or Released When the softkey is in the pressed state, the softkey is represented like if it were embedded.
A configuration file in XML format has to be written containing the definition of the softkeys; this file must be stored in a predefined location of the file system. Please contact COMAU at service.robotics@comau.com for further details. The user should have the access rights for accessing to the LD: device. Upon the Controller restart, all the files contained in the above directory are automatically loaded, in alphabetical order, on the TP4i/WiTP. Each page corresponds to the definition of a group of softkeys, which can be more than 6. The syntax is as follows: <?xml version="1.0"?> <NewMenu> <group> <progName>GroupName</progName> <numItems>Number</numItems> <arName>Names</arName> <arIconName>Icons</arIconName> <arStatus>Colours</arStatus> <arEnabled>Enabled</arEnabled> <evPressed>NumberOfEvent</evPressed> <evLongPressed> NumberOfEvent </evLongPressed> <evReleased> NumberOfEvent </evReleased> </group> </NewMenu>
pr-0-0-pdl_14.fm
00/0208
16-11
Appendix B - Customizations on the TP The words included between < > should always be present. The words specified in bold have to be replaced by a true parameter. Example: 2 XML files are defined. In the first file, one group with 8 softkeys is defined; in the second one, 2 groups with 3 softkeys each are defined. TP4i/WiTP will create the following pages: One page with the first 6 softkeys of the group of the first file One page with the remaining 2 softkeys of the group of the first file One page with the 3 softkeys of the first group of the second file One page with the 3 softkeys of the second group of the second file.
A detailed description follows about the following topics: XML Tag Parameters Softkey Pressure and Release events Example of XML configuration file Example of right menu configuration
16.3.1
16-12
00/0208
Appendix B - Customizations on the TP The TP4i/WiTP continuously monitors the content of the array, and if it changes, the effect on the softkey is immediate. < arEnabled >...</ arEnabled > Softkey Enabling / disabling flag This is the name of a PDL2 variable, defined in the <progName> program, which contains the enabling/disabling flag for the softkeys of the group. This variable should be defined as an ARRAY OF BOOLEAN. The value FALSE disallowes the pressure of the corresponding softkey. Please note that the look and feel of the softkey is not changed at all by the TP4i/WiTP; the softkey handler program <progName> should eventually handle a change of aspect of the key. The TP4i/WiTP continuously monitors the content of the array, allowing the content to be changed anytime and the effect on the softkey is immediate. < arStatus>...</ arStatus > Softkey colour This is the name of a PDL2 variable, defined in the <progName> program, which contains the colour for the softkeys of the group. This variable should be defined as an ARRAY OF INTEGER. The possible values are the predefined constants related to the colours : WIN_BLUE, WIN_RED, WIN_... (please refer to the PDL2 manual for the list of predefined variables). The TP4i/WiTP continuously monitors the content of the array, and if it changes the effect on the softkey is immediate.
16.3.2
They are described here below. < evPressed >...</ evPressed > An event of key pressure can be associated to each softkey. A user event CONDITION (WHEN EVENT ... ) statement should monitor the triggering of these kind of events. The class of user events is identified in the range of errors included between 49152 and 50175. This XML tag should contain the event number associated to the first softkey of the group. The TP4i/WiTP will automatically assign the events for the other softkeys of the group in a sequential order. For example, defining <evPressed >50100</ evPressed> in a group of 6 softkeys, the event 50100 will be generated upon the key pressure of the first softkey of the group, the event 50105 will be generated upon the key pressure of the 6th softkey of this group. < evReleased >...</ evReleased> An event of key release can be associated to each softkey. The way for using it is the same as for the key pressure described above. The only difference is in the XML tag definition. < evLongPressed>...</ evLongPressed > This event triggers when the softkey of the TP4i/WiTP is maintained pressed for more than 2 seconds. The way for using it is the same as for the key pressure described above. The only difference is in the XML tag definition.
pr-0-0-pdl_14.fm
00/0208
16-13
< evShow>...</ evShow > Force the viewing of a softkey group It is possibile to force the viewing of a group of softkeys. For doing this a user event must be defined (WHEN EVENT..) which will trigger upon a SIGNAL EVENT of the same number. The TP4i/WiTP shows the group when the event triggers.
16.3.3
16-14
00/0208
CONDITION[1] NODISABLE : WHEN EVENT 50100 DO -- press. of the 1st softkey of the group colori[1] := WIN_RED -- make RED the first softkey en[2] := FALSE -- disable the second softkey WHEN EVENT 50101 DO -- press. of the 2nd softkey of the group colori[2] := WIN_GREEN -- make GREEN the first softkey en[1] := FALSE -- disable the first softkey ENDCONDITION ENABLE CONDITION[1] CYCLE --DELAY 1000 --END group1
16.3.4
<?xml version="1.0"?> <RightMenu> <group> <progName>rightmenu</progName> <numItems>5</numItems> <arName>nomi</arName> <arIconName>icone</arIconName> <arStatus>colori</arStatus> <arEnabled>en</arEnabled> <evPressed>50100</evPressed> <evLongPressed>50120</evLongPressed> <evReleased>50130</evReleased> <evShow>50000</evShow> </group> </RightMenu> This program initializes the first four softkeys of the right menu. PROGRAM rightmenu NOHOLD VAR nomi : ARRAY[5] OF STRING[10] icone : ARRAY[5] OF STRING[10] en : ARRAY[5] OF BOOLEAN colori : ARRAY[5] OF INTEGER BEGIN
pr-0-0-pdl_14.fm
00/0208
16-15
-- first softkey initialization nomi[1] := 'S1' icone[1] := 'i1' en[1] := TRUE colori[1] := WIN_BLUE -- second softkey initialization nomi[2] := 'S2' icone[2] := 'i1' en[2] := TRUE colori[2] := WIN_RED nomi[3] := 'S3' icone[3] := 'i1' en[3] := TRUE colori[3] := WIN_YELLOW nomi[4] := 'S4' icone[4] := 'i1' en[4] := TRUE colori[4] := WIN_GREEN CONDITION[1] NODISABLE : WHEN EVENT 50100 DO colori[1] := WIN_RED colori[2] := WIN_GREEN WHEN EVENT 50101 DO colori[1] := WIN_PINK colori[2] := WIN_RED ENDCONDITION ENABLE CONDITION[1] CYCLE DELAY 1000 icone[2] := 'i2' DELAY 1000 icone[2] := 'i1' END rightmenu
pr-0-0-pdl_14.fm
16-16
00/0208
16.4.1
The xml file must be included in the suitable directory of the Controller, so that it is listed together with all the already available instructions (see Fig. 16.1).
Three examples follow, of xml files, for Adding a Statement, Adding a Routine, Adding a Built-in Routine.
16.4.1.1
Adding a Statement
In the following example, the DELAY instruction template is described by means of an xml file, to obtain the template shown in Fig. 16.2.
<keyword> <text>DELAY % </text> <param> <text>time</text> <keymode>num</keymode> </param> </keyword> <text>DELAY % </text> states that a string will be displayed containing the instruction name (DELAY), with one parameter. The section included between <param> and </param> describes the structure of parameter: the field name displayed in the template (<text>time</text>), the alphanumeric keypad modality (<keymode>num</keymode>), associated to such a parameter.
pr-0-0-pdl_14.fm
00/0208
16-17
16.4.1.2
Adding a Routine
In the following example, a Routine Calling template is described by means of an xml file, to obtain the template shown in Fig. 16.3.
<keyword> <import> <prog_name>tt_tool</prog_name> <type> <type_name>routines</type_name> <name>a_tool</name> </type> </import> <text>A_TOOL (%) </text> <param> <text>index</text> <keymode>num</keymode> </param> </keyword> the section between <import> and </import>, describes any information which is needed to EXPORT the routine FROM <prog_name>tt_tool</prog_name> is the name of the owning program (tt_tool) the routine is to be EXPORTED FROM <type_name>routines</type_name> indicates the type of the object to be EXPORTED FROM <name>a_tool</name> is the routine name <text>A_TOOL (%) </text> states that a string will be displayed in the template, containing the routine name (A_TOOL), with one parameter The section included between <param> and </param> describes the structure of parameter: the field name displayed in the template (<text>index</text>), the alphanumeric keypad modality (<keymode>num</keymode>), associated to such a parameter.
16.4.1.3
16-18
00/0208
<param> <text>flag</text> <keymode>alpha</keymode> <context>ON</context> <context>OFF</context> </param> <param> <text>aux_joint</text> <keymode>num</keymode> </param> <param> <text>arm_num</text> <keymode>num</keymode> </param> </keyword> <text>AUX_COOP (%, %, %) </text> states that a string will be displayed in the template, containing the routine name (AUX_COOP), with three parameters The three sections included between <param> and </param> describe the structure of the parameters: the field names displayed in the template (<text>flag</text>, <text>aux_joint</text>, <text>arm_num</text>) the alphanumeric keypad modality (<keymode>num</keymode>, <keymode>alpha</keymode>), associated to such parameters. <context>ON</context> and <context>OFF</context> indicate the strings to be displayed in the menu which becomes available when the flag field is selected (context key F3 - see Fig. 16.5).
When the AUX_COOP.xml file is created in the suitable directory, the AUX_COOP built-in routine is immediately available, as shown in Fig. 16.6.
pr-0-0-pdl_14.fm
00/0208
16-19
16.4.2
To do that, it is needed to write an xml file as explained below. An example follows about creating a Numeric Keypad (see Fig. 16.7) related to the Cooperative Motion built-ins. <numpad> <header> <title>COOP</title> </header> <shortcut> <numkey>2</numkey> <statement>AUX_COOP</statement> <help> <it>ab./disab. movimento cooperativo</it> <en>en./dis. cooperative motion</en> </help> <path>IDE\PDL2\keywords\Coop-Motion\AUX_COOP.xml</path> </shortcut> </numpad> <title>COOP</title> states that the string COOP will be displayed as the title of the table (red highlighted string in Fig. 16.7); <numkey>2</numkey> states that the numeric key which is involved in the current shortcut definition, is key no.2 (green highlighted in Fig. 16.7);
pr-0-0-pdl_14.fm
16-20
00/0208
Appendix B - Customizations on the TP <statement>AUX_COOP</statement> states that the instruction associated to the numeric key (included in the <numkey> section) is called AUX_COOP (purple highlighted in Fig. 16.7); <help> <it>ab./disab. movimento cooperativo</it> <en>en./dis. cooperative motion</en> </help> is the section which includes the help strings, in different languages. In the example shown in Fig. 16.7, the chosen help string is in English (yellow highlighted); <path>IDE\PDL2\keywords\Coop-Motion\AUX_COOP.xml</path> indicates path (LD:\TP4i\TP4iInternalFS\IDE\PDL2\keywords\Coop-Motion\ - see the red highlighted string in Fig. 16.6) and name (AUX_COOP.xml) to reach the file which has already been created to insert the AUX_COOP icon in the PDL2 menu (see par. 16.4.1.3 Adding a Built-in Routine on page 16-18).
When a Numeric Keypad does exist, including a specified instruction, pressing SHIFT+1 opens such a Numeric Keypad. As soon as the numeric key (in our example is 2) is pressed, the corresponding template is inserted in the PDL2 program (in our example the one shown in Fig. 16.4), ready to be edited. For further information, refer to Use of C4G Unit manual, IDE Page, par.6.11.4 Numeric Keypad.
pr-0-0-pdl_14.fm
00/0208
16-21
pr-0-0-pdl_14.fm
16-22
00/0208
17.
17.1 Introduction
Current chapter describes the e-mail functionality which allows to send/receive e-mails by means of the C4G Controller Unit. The currently supported protocols are SMTP and POP3. To use the e-mail capability, the following parameters are needed: name / IP address of the SMTP server name / IP address of the POP3 server login and password of the POP3 server
A detailed description is supplied about the following topics: Configuration of SMTP and POP3 clients Sending/receiving e-mails on C4G Controller Sending PDL2 commands via e-mail
pr-0-0-pdl_19.fm
00/0607
17-1
[2]: Maximum size in bytes for incoming messages (if 0, the default is 300K, that is 300 * 1024 bytes) [3]: Polling interval for POP3 server (if 0, the default and minimum used value is 60000 ms) [4]: Size to reserve to the body of the email (if 0 the default value is 5K, that is 5 * 1024 bytes) [5]: Maximum execution time for command (if 0 the default value is 10000 ms)
Both arrays are retentive, thus it is needed to issue a ConfigureControllerSave command to save them.
17.3.1
email program
PROGRAM email NOHOLD, STACK = 10000 CONST ki_email_cnfg = 20 ki_email_send = 21 ki_email_num = 22 ki_email_recv = 23 ki_email_del = 24 ki_email_hdr = 25 ki_email_close = 26 VAR ws_cfg : ARRAY[6] OF STRING[63] wi_cfg : ARRAY[5] OF INTEGER si_handle : INTEGER vs_insrv, vs_outsrv : STRING[63] vs_replyto, vs_login, vs_password : STRING[63] vs_inbox : STRING[255] vs_from : STRING[63] vs_subj, vs_body : STRING[1023]
pr-0-0-pdl_19.fm
17-2
00/0607
ws_attachments : ARRAY[10] OF STRING[64] vi_num, vi_date, vi_ans, vi_ext, vi_first : INTEGER vs_input : STRING[1] ws_to_cc : ARRAY[2,8] OF STRING[63] ROUTINE pu_help
BEGIN WRITE LUN_CRT ('1. Get Number of mail on the server', NL) WRITE LUN_CRT ('2. Send a new mail', NL, '3. Receive a mail', NL, '4. Get header only', NL) WRITE LUN_CRT ('5. Delete a mail from server', NL, '6. This menu', NL, '7. Quit', NL) END pu_help ROUTINE pu_getmenu(as_input : STRING) : INTEGER BEGIN IF as_input = '0' THEN RETURN(0) ENDIF IF as_input = '1' THEN RETURN(1) ENDIF IF as_input = '2' THEN RETURN(2) ENDIF IF as_input = '3' THEN RETURN(3) ENDIF IF as_input = '4' THEN RETURN(4) ENDIF IF as_input = '5' THEN RETURN(5) ENDIF IF as_input = '6' THEN RETURN(6) ENDIF IF as_input = '7' THEN RETURN(7) ENDIF IF as_input = '8' THEN RETURN(8) ENDIF IF as_input = '9' THEN RETURN(9) ENDIF RETURN(-1) END pu_getmenu ROUTINE pu_getstrarray(as_prompt : STRING; aw_input : ARRAY[*] OF STRING; ai_n : INTEGER) VAR vi_i : INTEGER VAR vi_skip : INTEGER BEGIN vi_i := 1 vi_skip := 0 WHILE vi_i <= ai_n DO IF vi_skip = 0 THEN WRITE LUN_CRT (as_prompt, '(', vi_i, ')', ': ') READ LUN_CRT (aw_input[vi_i]) IF aw_input[vi_i] = '' THEN vi_skip := 1 ENDIF ELSE aw_input[vi_i] := '' ENDIF vi_i += 1 ENDWHILE END pu_getstrarray ROUTINE pu_getstrmatrix2(as_prompt1 : STRING; as_prompt2 : STRING; aw_input : ARRAY[*,*] OF STRING; ai_n : INTEGER) VAR vi_i : INTEGER pr-0-0-pdl_19.fm
00/0607
17-3
VAR vi_skip : INTEGER BEGIN vi_i := 1 vi_skip := 0 WHILE vi_i <= ai_n DO IF vi_skip = 0 THEN WRITE LUN_CRT (as_prompt1, '(', vi_i, ')', ': ') READ LUN_CRT (aw_input[1,vi_i]) IF aw_input[1,vi_i] = '' THEN vi_skip := 1 ENDIF ELSE aw_input[1,vi_i] := '' ENDIF vi_i += 1 ENDWHILE vi_i := 1 vi_skip := 0 WHILE vi_i <= ai_n DO IF vi_skip = 0 THEN WRITE LUN_CRT (as_prompt2, '(', vi_i, ')', ': ') READ LUN_CRT (aw_input[2,vi_i]) IF aw_input[2,vi_i] = '' THEN vi_skip := 1 ENDIF ELSE aw_input[2,vi_i] := '' ENDIF vi_i += 1 ENDWHILE END pu_getstrmatrix2 ROUTINE pu_getstr(as_prompt, as_input : STRING) VAR vi_i : INTEGER BEGIN WRITE LUN_CRT (as_prompt, ': ') READ LUN_CRT (as_input) END pu_getstr BEGIN ERR_TRAP_ON(40024) ERR_TRAP_ON(39990) ERR_TRAP_ON(39995) vi_ext := 0 vi_first := 1 DELAY 1000 WRITE LUN_CRT ('TEST 2', NL) ws_cfg[1] := '192.168.9.244' ws_cfg[2] := '192.168.9.244' ws_cfg[3] := 'username@domainname.com' ws_cfg[4] := 'proto1' ws_cfg[5] := 'proto1' ws_cfg[6] := 'pdl2' wi_cfg[1] := 0 wi_cfg[2] := 0 wi_cfg[3] := 0 wi_cfg[4] := 0 wi_cfg[5] := 0 si_handle := 0 DV4_CNTRL(ki_email_cnfg, si_handle, ws_cfg, wi_cfg) WHILE vi_ext = 0 DO IF vi_first = 1 THEN vi_first := 0 pu_help
pr-0-0-pdl_19.fm
17-4
00/0607
ENDIF WRITE LUN_CRT (NL, 'Command > ') READ LUN_CRT (vs_input) vi_ans := pu_getmenu(vs_input) IF NOT VAR_UNINIT(vi_ans) THEN SELECT vi_ans OF CASE (1): -- Number of emails DV4_CNTRL(ki_email_num, (si_handle), vi_num) WRITE LUN_CRT (vi_num, ' E-mail waiting on server.', NL) WRITE LUN_CRT ('*Mail num OK.', NL) CASE (2): -- Send pu_getstrmatrix2('To ', 'Cc ', ws_to_cc, 8) pu_getstr ('Subj', vs_subj) pu_getstrarray('Att ', ws_attachments, 10) pu_getstr ('Body', vs_body) DV4_CNTRL(ki_email_send, (si_handle), ws_to_cc, (vs_subj), (vs_body), ws_attachments, 1) WRITE LUN_CRT ('*Mail send OK.', NL) CASE (3): -- Recv DV4_CNTRL(ki_email_recv, (si_handle), 1, vs_from, vs_subj, vs_body, vi_date, ws_to_cc, ws_attachments) WRITE LUN_CRT ('Received mail:', NL) WRITE LUN_CRT (' Date:', vi_date, NL) WRITE LUN_CRT (' From: ', vs_from, NL) WRITE LUN_CRT (' To: ', ws_to_cc[1,1], ' ', ws_to_cc[1,2], ' ', ws_to_cc[1,3], ' ', ws_to_cc[1,4], ' ', ws_to_cc[1,5], ' ', ws_to_cc[1,6], ' ', ws_to_cc[1,7], ' ', ws_to_cc[1,8], NL) WRITE LUN_CRT (' Cc: ', ws_to_cc[2,1], ' ', ws_to_cc[2,2], ' ', ws_to_cc[2,3], ' ', ws_to_cc[2,4], ' ', ws_to_cc[2,5], ' ', ws_to_cc[2,6], ' ', ws_to_cc[2,7], ' ', ws_to_cc[2,8], NL) WRITE LUN_CRT (' Subj: ', vs_subj, NL) WRITE LUN_CRT (' Att.: ', ws_attachments[1], ' ', ws_attachments[2], ' ', ws_attachments[3], ' ', ws_attachments[4], ' ', ws_attachments[5], ' ', ws_attachments[6], ' ', ws_attachments[7], ' ', ws_attachments[8], ' ', ws_attachments[9], ' ', ws_attachments[10], NL) WRITE LUN_CRT (' Body: ', NL, vs_body, NL) WRITE LUN_CRT ('*Mail recv OK.', NL) CASE (4): -- Header DV4_CNTRL(ki_email_hdr, (si_handle), 1, vs_from, vs_subj, vi_date, ws_to_cc) WRITE LUN_CRT ('Header:', NL) WRITE LUN_CRT (' Date:', vi_date, NL) WRITE LUN_CRT (' From: ', vs_from, NL) WRITE LUN_CRT (' To: ', ws_to_cc[1,1], ' ', ws_to_cc[1,2], ' ', ws_to_cc[1,3], ' ', ws_to_cc[1,4], ' ', ws_to_cc[1,5], ' ', ws_to_cc[1,6], ' ', ws_to_cc[1,7], ' ', ws_to_cc[1,8], NL) WRITE LUN_CRT (' Cc: ', ws_to_cc[2,1], ' ', ws_to_cc[2,2], ' ', ws_to_cc[2,3], ' ', ws_to_cc[2,4], ' ', ws_to_cc[2,5], ' ', ws_to_cc[2,6], ' ', ws_to_cc[2,7], ' ', ws_to_cc[2,8], NL) WRITE LUN_CRT (' Subj: ', vs_subj, NL) CASE (5): -- Delete DV4_CNTRL(ki_email_del, (si_handle), 1) WRITE LUN_CRT ('*Delete OK.', NL) CASE (6): -- Help pu_help CASE (7): -- Exit DV4_CNTRL(ki_email_close, si_handle) WRITE LUN_CRT ('*Program exit.', NL) vi_ext := 1 ELSE: pu_help ENDSELECT ELSE ENDIF ENDWHILE END email
pr-0-0-pdl_19.fm
00/0607
17-5
Appendix C - E-Mail Functionality command is ConfigureControllerRestartCold, the user must insert the following string in the e-mail title: CL CCRC. The authentication is performed by inserting a text which is automatically generated by c4gmp program (on a PC), in the message body. Such a program asks the user the system identifier ($BOARD_DATA[1].SYS_ID), the sender of the e-mail which includes the required command, the user login and password; it gives back a message to be inserted into the message body, and it will work as an authentication. Note that the PC time and the Controller time (as well as the corrsponding timezones) must be synchronized, because the message returned by c4gmp program is ok within a time interval of half an hour, more or less, since the generation time.
pr-0-0-pdl_19.fm
17-6
00/0607
COMAU Robotics services Repair: repairs.robotics@comau.com Training: training.robotics@comau.com Spare parts: spares.robotics@comau.com Technical service: service.robotics@comau.com