Logiciel RAPID ABB
Logiciel RAPID ABB
ID du document: 3HAC050947-004
Révision: N
3 Glossaire 169
Index 171
Utilisation
Le présent manuel doit être consulté pendant la programmation.
Public visé
Ce manuel est conçu pour des personnes ayant déjà une expérience en
programmation, comme par exemple un programmeur en robotique.
Références
Référence ID du document
Manuel d’utilisation - IRC5 avec FlexPendant 3HAC050941-004
Manuel de référence technique - Instructions, fonctions et types 3HAC050917-004
de données RAPID
Technical reference manual - RAPID kernel 3HAC050946--001
Manuel de référence technique - Paramètres système 3HAC050948-004
Application manual - Controller software IRC5 3HAC050798--001
Révisions
Révision Description
- Disponible avec les RobotWare 6.0.
A Disponible avec les RobotWare 6.01.
• Ajout de l'instruction TriggJIOs, consultez Activation des sorties
ou des interruptions sur des positions spécifiques à la page 59.
Révision Description
B Disponible avec les RobotWare 6.02.
• Ajout de fonctions trigonométriques pour les données de type dnum,
voir Fonctions arithmétiques à la page 90.
• Ajout de TriggDataCopy, TriggDataReset et TriggDataValid,
voirActivation des sorties ou des interruptions sur des positions
spécifiques à la page 59.
• Ajout de l'instruction SaveCfgData, voir Enregistrement des données
de configuration à la page 95.
C Disponible avec RobotWare 6.03.
• Les types de données de signal sont désormais à semi-valeur, voir
Types de données sans valeurTypes de données sans valeur à la
page 28 et Signaux d'entrée et de sortie à la page 67.
D Disponible avec RobotWare 6.04.
• Mise à jour des sections concernant la déclaration de données Dé-
claration de variable à la page 31 et Déclaration de persistante à la
page 33.
• Corrections mineures.
E Disponible avec RobotWare 6.05.
• Suppression des instructions DitherAct et DitherDeact.
• Ajout de Fonctions de la matrice à la page 92.
• Corrections mineures.
F Disponible avec RobotWare 6.06.
• Mise à jour de Instructions d’aide à la programmation RAPID à la
page 94
• Mise à jour de Comportement de l’exécution vers l’arrière à la page 110
• Mise à jour de Singularités à la page 156
• Corrections mineures.
G Disponible avec RobotWare 6.07.
• Ajout de CrossProd, Max et Min à Fonctions arithmétiques à la
page 90.
H Disponible avec RobotWare 6.08.
• Corrections mineures.
• Section Interpolation des trajectoires de raccordement à la page 130
mise à jour.
J Disponible avec RobotWare 6.09.
• Modifications apportées au texte et aux exemples pour la communi-
cation, pour accorder moins d’attention aux ports série et plus d’at-
tention aux dispositifs d’E/S.
K Disponible avec RobotWare 6.11.
• Ajout de StrFormat à Fonctions de chaîne de caractères à la
page 100.
L Disponible avec RobotWare 6.12.
• Ajout d'informations sur l’arrêt anti-collision indépendant sans frein.
M Disponible avec RobotWare 6.13.
• Ajout du support pour la division de pos, voir Expressions arithmé-
tiques à la page 37.
• Ajout d'informations indiquant que les options PP to Main et PP to
routine supprimeront les zones atelier temporaires.
N Disponible avec RobotWare 6.13.02.
• Clarification de la limitation de l'exécution arrière et des erreurs
d'exécution.
Règles de syntaxe
Les instructions et les fonctions sont décrites en faisant appel aussi bien à la
syntaxe simplifiée qu’à la syntaxe formelle. Si vous utilisez le FlexPendant pour
effectuer une programmation, il vous suffit généralement de connaître la syntaxe
simplifiée, car le robot vérifie automatiquement que la syntaxe correcte est utilisée.
Exemple
GOTO <identifier> ';'
<identifier> ::= <ident> | <ID>
<ident> ::= <letter> {<letter> | <digit> | '_'}
1.1.1 Introduction
Instructions
Le programme consiste en un certain nombre d’instructions qui décrivent le travail
du robot. Il existe donc des instructions spécifiques pour les diverses commandes,
par exemple celle pour faire avancer le robot, celle pour déterminer une sortie,
etc.
Généralement, les instructions comportent un certain nombre d’arguments associés,
lesquels définissent ce qui va se passer avec une instruction spécifique. Par
exemple, l’instruction pour la réinitialisation d’une sortie comporte un argument
qui définit la sortie à réinitialiser ; par exemple, Reset do5. Ces arguments peuvent
être spécifiés de l’une des façons suivantes :
• en tant que valeur numérique, par exemple 5 ou 4.6
• en tant que référence de données, par exemple reg1
• en tant qu'expression, par exemple 5+reg1*2
• en tant qu'appel de fonction, par exemple Abs(reg1)
• en tant que valeur de chaîne, par exemple "Producing part A"
Routines
Il existe trois types de routines – procédures, fonctions et routines d’interruption.
• Une procédure est utilisée en tant que sous-programme.
• Une fonction fournit une valeur d’un type spécifique et est utilisée en tant
qu’argument d’une instruction.
• Les routines d’interruption constituent un moyen de répondre aux
interruptions. Une routine d’interruption peut être associée à une interruption
spécifique ; par exemple, lorsqu’une entrée est sélectionnée, elle est
automatiquement exécutée si une interruption spécifique se produit.
Données
Les renseignements peuvent également être stockés dans des données, par
exemple, des données outil (qui contiennent tous les renseignements sur un outil,
par exemple son TCP et son poids) et des données numériques (lesquelles peuvent,
par exemple, être utilisées pour compter le nombre de pièces à traiter). Les données
sont regroupées selon des types de données différentes qui décrivent des types
différents de renseignements, par exemple les outils, les positions et les charges.
Ces données pouvant être créées et recevoir des noms arbitraires, il n’y a pas de
limites (sauf la limite imposée par la mémoire) quant au nombre de données. Ces
données peuvent exister soit globalement dans le programme soit localement au
sein d’une routine.
Autres fonctions
Parmi les autres caractéristiques du langage, nous citerons :
• Les paramètres de routine
• les expressions arithmétiques et logiques ;
• Le traitement automatique des erreurs
• Les programmes modulaires
• Multitâche
Le language n'est pas sensible à la casse, majuscules et minuscules étant
considérées de façon égale.
Identificateurs
Les identificateurs sont utilisés pour affecter un nom aux modules, aux routines,
aux données et aux étiquettes ; par exemple :
MODULE module_name
PROC routine_name()
VAR pos data_name;
label_name:
Le premier caractère d’un identificateur doit être une lettre. Les autres caractères
peuvent être des lettres, des chiffres ou des caractères de soulignement (_).
La longueur maximale d’un identificateur est de 32 caractères, chacun de ces
caractères étant significatif. Les identificateurs identiques, mais tapés en majuscules
ou en minuscules sont cependant considérés comme identiques.
Mots réservés
Les mots énumérés ci-après sont des mots réservés. Ils ont une signification
spéciale dans le langage RAPID et, de ce fait, ne devront pas être utilisés en tant
qu’identificateurs.
Il existe un certain nombre de noms prédéfinis pour les types de données, les
données du système, les instructions et les fonctions, lesquels ne doivent pas être
utilisés en tant qu’identificateurs.
ALIAS AND BACKWARD CASE
CONNECT CONST DEFAULT DIV
DO ELSE ELSEIF ENDFOR
ENDFUNC ENDIF ENDMODULE ENDPROC
ENDRECORD ENDTEST ENDTRAP ENDWHILE
ERROR EXIT FALSE FOR
FROM FUNC GOTO IF
INOUT LOCAL MOD MODULE
NOSTEPIN NOT NOVIEW OR
PERS PROC RAISE READONLY
RECORD RETRY RETURN STEP
SYSMODULE TEST THEN TO
TRAP TRUE TRYNEXT UNDO
VAR VIEWONLY WHILE WITH
XOR
• valeurs numériques
• marques de réservation
Les caractères de nouvelle ligne, de tabulation et de changement de page peuvent
être utilisés chaque fois qu’un espace peut être utilisé, sauf au sein des
commentaires.
Les identificateurs, les mots réservés et les valeurs numériques doivent être
séparés les uns des autres par un espace, un caractère de ligne nouvelle, de
tabulation ou de changement de page.
Valeurs numériques
Une valeur numérique peut être exprimée en tant que :
• nombre entier, par exemple 3, -100, 3E2
• nombre décimal, par exemple 3,5, -0,345, -245E-2
La valeur doit se situer dans les limites spécifiées par la norme ANSI IEEE 754
(Floating-Point Arithmetic - Arithmétique de virgule flottante).
Valeurs logiques
Une valeur logique peut être exprimée en tant que TRUE ou FALSE.
Valeurs de chaîne
Une valeur de chaîne est une séquence de caractères (ISO 8859-1 (Latin-1)) et de
caractères de commande (non-ISO 8859-1 (Latin-1) se situant dans la plage de
codes numériques 0-255). Des codes de caractères peuvent être inclus, ce qui
permet également d’inclure des caractères non imprimables (données binaires)
dans la chaîne. La longueur de chaîne maximum est de 80 caractères.
Exemple :
"This is a string"
"This string ends with the BEL control character \07"
Si une barre oblique inverse (qui indique un code de caractère) ou des guillemets
doubles sont inclus, ils devront être écrits deux fois.
Exemple :
"This string contains a "" character"
"This string contains a \\ character"
Commentaires
Les commentaires sont utilisés afin de faciliter la compréhension du programme.
Ils n’affectent nullement la signification du programme.
Un commentaire commence par un point d’exclamation (!) et se termine par un
caractère de nouvelle ligne. Il occupe le reste de la ligne (à partir du point
d’exclamation) et ne peut pas se trouver en dehors d’une déclaration de module.
! comment
IF reg1 > 5 THEN
! comment
reg2 := 0;
ENDIF
Marques de réservation
Les marques de réservation peuvent être utilisées pour représenter provisoirement
des parties de programme qui ne sont pas encore définies. Tout programme qui
contient des marques de réservation est un programme correct du point de vue
syntaxique et peut être chargé dans la mémoire du programme.
Marque de réservation Description
<TDN> définition du type de données
<DDN> déclaration de données
<RDN> déclaration de routine
<PAR> paramètre formel alternatif optionnel
<ALT> paramètre formel optionnel
<DIM> dimension formelle (conforme) de tableau
<SMT> instruction
<VAR> référence d’objet de données (variable, persistante
ou paramètre)
<EIT> else if, clause d’instruction if
<CSE> case, clause d’instruction test
<EXP> expression
<ARG> argument d'appel de procédure
<ID> identificateur
En-tête de fichier
Un fichier de programme peut commencer par l'en-tête de fichier suivant (il n'est
pas requis) :
%%%
VERSION:1
LANGUAGE:ENGLISH
%%%
Syntaxe
Identificateurs
<identifier> ::= <ident> | <ID>
<ident> ::= <letter> {<letter> | <digit> | '_'}
Valeurs numériques
<num literal> ::=
<integer> [ <exponent> ]
| <decimal integer>) [<exponent>]
| <hex integer> | <octal integer>
| <binary integer>
| <integer> '.' [ <integer> ] [ <exponent> ]
| [ <integer> ] '.' <integer> [ <exponent> ]
<integer> ::= <digit> {<digit>}
<hex integer> ::= '0' ('X' | 'x')
<hex digit> {<hex digit>}
<octal integer> ::= '0' ('O' | 'o') <octal digit> {<octal digit>}
Suite page suivante
Manuel de référence technique - Vue d’ensemble de RAPID 15
3HAC050947-004 Révision: N
© Copyright 2004-2022- ABB. Tous droits réservés.
1 Programmation RAPID de base
1.1.2 Éléments de base
Suite
<binary integer> ::= '0' ('B' | 'b') <binary digit> {<binary digit>}
<exponent> ::= ('E' | 'e') ['+' | '-'] <integer>
<digit> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
<hex digit> ::= <digit> | A | B | C | D | E | F | a | b | c | d |
e | f
<octal digit> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7
<binary digit> ::= 0 | 1
Valeurs logiques
<bool literal> ::= TRUE | FALSE
Valeurs de chaîne
<string literal> ::= '"' {<character> | <character code> } '"'
<character code> ::= '\' <hex digit> <hex digit>
<hex digit> ::= <digit> | A | B | C | D | E | F | a | b | c | d |
e | f
Commentaires
<comment> ::= '!' {<character> | <tab>} <newline>
Caractères
<character> ::= -- ISO 8859-1 (Latin-1)--
<newline> ::= -- newline control character --
<digit> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
<hex digit> ::= <digit> | A | B | C | D | E | F | a | b | c | d |
e | f
<letter> ::= <upper case letter> | <lower case letter>
<upper case letter> ::=
A | B | C | D | E | F | G | H | I | J
| K | L | M | N | O | P | Q | R | S | T
| U | V | W | X | Y | Z | À | Á | Â | Ã
| Ä | Å | Æ | Ç | È | É | Ê | Ë | Ì | Í
| Î | Ï | Ð | Ñ | Ò | Ó | Ô | Õ | Ö | Ø
| Ù | Ú | Û | Ü | Ý | Þ | ß
<lower case letter> ::=
a | b | c | d | e | f | g | h | i | j
| k | l | m | n | o | p | q | r | s | t
| u | v | w | x | y | z | ß | à | á | â | ã
| ä | å | æ | ç | è | é | ê | ë | ì | í
| î | ï | ð | ñ | ò | ó | ô | õ | ö | ø
| ù | ú | û | ü | ý | þ | ÿ
1.1.3 Modules
Introduction
Le programme est divisé en modules de programme et modules système.
xx1100000550
Modules de programme
Un module de programme peut être constitué de différentes données et routines.
Chaque module, ou le programme entier, peut être copié sur une disquette, etc.,
et vice versa.
Un des modules contient la procédure d’entrée, une procédure globale appelée
Main. En fait, exécuter le programme signifie exécuter la procédure Main. Le
programme peut comporter plusieurs modules, mais un seul contiendra une
procédure principale.
Un module peut, par exemple, définir l’interface avec les équipements externes
ou contenir des données géométriques qui sont soit générées par des systèmes
CAO soit créées en ligne par numérisation (programmation par apprentissage).
Alors que la plupart du temps les petites installations sont contenues dans un seul
module, les installations plus importantes pourront comporter un module principal
qui fait référence à des routines et/ou des données qui se trouvent dans un ou
plusieurs autres modules.
Modules système
Les modules système sont utilisés pour définir des données propres au système
et des routines communes, tels des outils. Ils ne sont pas inclus lorsqu’un
programme est sauvegardé, ce qui signifie que toute mise à jour apportée à un
module système affecte tous les programmes existants ou chargés à un stade
ultérieur dans la mémoire du programme.
Déclarations de module
La déclaration d’un module spécifie le nom et les attributs du module en question.
Ces attributs peuvent uniquement être ajoutés hors ligne et non à l’aide du
FlexPendant. Vous trouverez ci-après des exemples d’attributs d’un module :
Attribut S’il est spécifié
SYSMODULE Le module est un module système ; sinon, il s’agit d’un module
de programme
NOSTEPIN Le module ne peut pas être entré lors d’une exécution pas à
pas
VIEWONLY Le module ne peut pas être modifié
READONLY Le module ne peut pas être modifié, mais son attribut peut être
supprimé
NOVIEW Le module ne peut être visualisé, uniquement exécuté. Les
routines globales peuvent être atteintes à partir d’autres mo-
dules et sont toujours exécutées en tant que NOSTEPIN. Il est
possible d’atteindre les valeurs actuelles concernant les don-
nées globales à partir d’autres modules ou depuis la fenêtre
de données du FlexPendant. NOVIEW peut être défini unique-
ment hors ligne depuis un PC.
Par exemple :
MODULE module_name (SYSMODULE, VIEWONLY)
!data type definition
!data declarations
!routine declarations
ENDMODULE
Un module ne peut pas avoir le même nom qu’un autre module, une autre routine
globale ou d'autres données.
Syntaxe
Déclaration de module
<module declaration> ::=
MODULE <module name> [ <module attribute list> ]
SYSMODULE
| NOVIEW
| NOSTEPIN
| VIEWONLY
| READONLY
Remarque
Si au moins deux attributs sont utilisés, ils doivent adopter l'ordre donné
ci-dessus. L'attribut NOVIEW peut uniquement être spécifié seul ou avec l'attribut
SYSMODULE.
<type definition list> ::= { <type definition> }
<data declaration list> ::= { <data declaration> }
<routine declaration list> ::= { <routine declaration> }
Introduction
Afin de simplifier la programmation, le robot est livré avec un certain nombre de
données prédéfinies. Il n’est pas nécessaire de créer ces données et, de ce fait,
elles peuvent être utilisées directement.
Si ces données sont utilisées, la programmation initiale est facilitée. Toutefois, il
est généralement préférable d’attribuer vos propres noms aux données que vous
utilisez, car ceci facilitera la lecture du programme.
Contenu
User comprend cinq données numériques (registres), un jeu de données de repère
objet, un jeu de données d'horloge et deux valeurs symboliques destinées aux
signaux numériques.
Nom Type de données Déclaration
reg1 num VAR num reg1:=0
reg2 num VAR num reg2:=0
reg3 num VAR num reg3:=0
reg4 num VAR num reg4:=0
reg5 num VAR num reg5:=0
clock1 clock VAR clock clock1
User est un module système, ce qui signifie qu'il réside toujours dans la mémoire
du robot, quel que soit le programme chargé.
1.1.5 Routines
Introduction
Il existe trois types de routine (sous-programmes) : procédures, fonctions et
interruptions.
• Les procédures ne renvoient pas de valeur et sont utilisées dans le contexte
des instructions.
• Les fonctions renvoient une valeur d’un type spécifique et sont utilisées dans
le contexte des expressions.
• Les routines d’interruption permettent de gérer les interruptions. Une routine
d’interruption peut être associée à une interruption spécifique et, si
l’interruption en question a lieu à un stade ultérieur, elle sera
automatiquement exécutée. Une routine d’interruption ne peut jamais être
appelée explicitement à partir du programme.
Domaine de routine
Le domaine d’une routine indique la zone dans laquelle la routine est visible. La
pseudo-instruction locale optionnelle d’une déclaration de routine classe une
routine en tant que locale (au sein du module) ; sinon, il s’agit d’une routine globale.
Exemple :
LOCAL PROC local_routine (...
PROC global_routine (...
Les règles de domaine suivantes s’appliquent aux routines :
• Le domaine d’une routine globale peut inclure n’importe quel module dans
la tâche.
• Le domaine d’une routine locale comprend le module dans lequel elle se
trouve.
• Dans les limites de son domaine, une routine locale peut cacher une routine
globale ou des données portant le même nom.
• Dans les limites de son domaine, une routine peut cacher des instructions,
ainsi que des données et des routines prédéfinies portant le même nom.
xx1100000551
Dans l'exemple ci-dessous, les routines suivantes peuvent être appelées à partir
de la routine h :
• Module1 : Routine c, d.
• Module2: Toutes les routines.
Une routine ne peut pas porter le même nom qu’une autre routine, d'autres données
ou un autre type de données dans le même module. Une routine globale ne peut
pas porter le même nom qu’une routine de module ou globale, que des données
globales ou qu’un type de donnée globale dans un autre module.
Paramètres
La liste des paramètres d’une déclaration de routine spécifie les arguments (les
paramètres effectifs) qui doivent/peuvent être fournis lorsqu’on appelle la routine.
Il y a quatre types différents de paramètres (dans le mode d’accès) :
• Normalement, un paramètre est utilisé uniquement en tant qu’entrée et est
considéré comme une variable de la routine. Le fait de modifier cette variable
ne changera pas l’argument correspondant.
• Un paramètre INOUT spécifie qu’un argument correspondant doit être une
variable (entière, élément ou composante) ou une persistante entière pouvant
être modifiée par la routine.
• Un paramètre VAR spécifie qu’un argument correspondant doit être une
variable (entière, élément ou composante) pouvant être modifiée par la
routine.
• Un paramètre PERS spécifie qu’un argument correspondant doit être une
persistante entière pouvant être modifiée par la routine.
Si un paramètre INOUT, VAR ou PERS est mis à jour, ceci signifie en fait que
l’argument même est mis à jour, c’est-à-dire qu’il devient possible d’utiliser des
arguments pour renvoyer des valeurs à la routine appelante.
Exemple :
PROC routine1 (num in_par, INOUT num inout_par,
VAR num var_par, PERS num pers_par)
Un paramètre peut être optionnel et être omis de la liste des arguments d’un appel
de routine. Un paramètre optionnel est identifié par une barre oblique inverse (\)
placée devant le paramètre.
Exemple :
PROC routine2 (num required_par \num optional_par)
La valeur d’un paramètre optionnel omis dans un appel de routine peut ne pas être
référencée. Ceci signifie que les appels de routine doivent être vérifiés afin de
relever la présence de paramètres optionnels avant qu’un paramètre optionnel ne
soit utilisé.
Deux paramètres optionnels ou plus peuvent être mutuellement exclusifs
(c’est-à-dire, déclarés pour s’exclure ’un l’autre), ce qui signifie que seul l’un d’entre
eux peut être présent dans un appel de routine. Ceci est indiqué par une barre
verticale (caract. tuyaux, | )insérée entre les paramètres en question.
Exemple :
PROC routine3 (\num exclude1 | num exclude2)
Le type spécial, switch, peut (uniquement) être affecté aux paramètres optionnels
et permet d'utiliser des arguments d'aiguillage, c’est-à-dire des arguments qui sont
uniquement spécifiés par des noms (et non des valeurs). Une valeur ne peut pas
être transférée sur un paramètre switch. La seule façon d’utiliser un paramètre
switch consiste à vérifier sa présence en utilisant la fonction prédéfinie Present.
Exemple :
PROC routine4 (\switch on | switch off)
...
IF Present (off ) THEN
...
ENDPROC
Les tableaux peuvent être renvoyés en tant qu'arguments. Le degré d’un argument
de tableau doit être conforme au degré du paramètre formel correspondant. La
dimension d’un paramètre de tableau est conforme (marquée d’un *). La dimension
réelle dépend donc de la dimension de l’argument correspondant dans un appel
de routine. Une routine peut déterminer la dimension réelle d’un paramètre en
utilisant la fonction prédéterminée, Dim.
Exemple :
PROC routine5 (VAR num pallet{*,*})
Fin de routine
On peut mettre fin à l’exécution d’une procédure soit explicitement à l’aide de
l’instruction RETURN, soit implicitement lorsque la fin (ENDPROC, BACKWARD, ERROR
ou UNDO) de la procédure est atteinte.
L’évaluation d’une fonction doit être terminée à l’aide d'une instruction RETURN.
On peut mettre fin à l’exécution d’une routine d’interruption soit explicitement à
l’aide de l’instruction RETURN, soit implicitement lorsque la fin (ENDTRAP, ERROR
ou UNDO) de cette routine d'interruption est atteinte. L’exécution continue à partir
du point où l’interruption a eu lieu.
Déclarations de routine
Une routine peut contenir des déclarations de routine (y compris des paramètres),
des données, un corps, un gestionnaire d'instruction arrière (procédures
uniquement) et un gestionnaire d’annulation. Les déclarations de routine ne peuvent
pas être imbriquées, c’est-à-dire qu’il n’est pas possible de déclarer une routine
au sein d’une routine.
xx1100000553
Déclaration de procédure
Par exemple, multipliez tous les éléments d'un tableau num par un facteur :
PROC arrmul( VAR num array{*}, num factor)
FOR index FROM 1 TO dim( array, 1 ) DO
array{index} := array{index} * factor;
ENDFOR
ENDPROC
Déclaration de fonction
Une fonction peut renvoyer n’importe quelle valeur de type de données, mais pas
une valeur de tableau.
Par exemple, le renvoi de la longueur d’un vecteur.
FUNC num veclen (pos vector)
RETURN Sqrt(Pow(vector.x,2)+Pow(vector.y,2)+Pow(vector.z,2));
ENDFUNC
Déclaration d'interruption
Par exemple, répondez à l’interruption d'alimentateur vide :
TRAP feeder_empty
wait_feeder;
RETURN;
ENDTRAP
Appel de procédure
Lors de l'appel d'une procédure, les arguments qui correspondent aux paramètres
de cette procédure doivent être utilisés :
• Les paramètres obligatoires doivent être spécifiés. Ils doivent également
être spécifiés dans l’ordre correct.
• Les arguments optionnels peuvent être omis.
• Les arguments conditionnels peuvent être utilisés pour transférer les
paramètres d’un appel de routine à un autre.
Voir Utilisation des appels de fonction dans les expressions à la page 42.
Le nom de la procédure est spécifié statistiquement à l’aide d’un identificateur
(attribution précoce) ou évalué pendant la durée d’exécution à partir d’une
expression sous forme de chaîne de caractères (attribution tardive). Même si une
attribution précoce doit être considérée comme la forme d’appel de procédure
normale, une attribution tardive fournit parfois un code très rapide et compact. Une
attribution tardive est définie en insérant des signes de pourcentage avant et après
la chaîne de caractères indiquant le nom de la procédure.
Exemple :
! early binding
TEST products_id
CASE 1:
proc1 x, y, z;
CASE 2:
proc2 x, y, z;
CASE 3:
...
! same example using late binding
% “proc” + NumToStr(product_id, 0) % x, y, z;
...
! same example again using another variant of late binding
VAR string procname {3} :=[“proc1”, “proc2”, “proc3”];
...
% procname{product_id} % x, y, z;
...
Notez que l’attribution tardive est disponible pour les appels de procédure
uniquement, et non pour les appels de fonction. Si une attribution tardive fait
référence à une procédure inconnue, la variable système ERRNO prend la valeur
ERR_REFUNKPRC. Si une attribution tardive fait référence à une erreur d’appel de
procédure (syntaxe, et non pas procédure), la variable système ERRNO prend la
valeur ERR_CALLPROC.
Syntaxe
Déclaration de routine
<routine declaration> ::=
[LOCAL] ( <procedure declaration>
| <function declaration>
| <trap declaration> )
| <comment>
| <RDN>
Paramètres
<parameter list> ::=
<first parameter declaration> { <next parameter declaration> }
<first parameter declaration> ::=
<parameter declaration>
| <optional parameter declaration>
| <PAR>
<next parameter declaration> ::=
',' <parameter declaration>
| <optional parameter declaration>
| ','<optional parameter declaration>
| ',' <PAR>
<optional parameter declaration> ::=
'\' ( <parameter declaration> | <ALT> )
{ '|' ( <parameter declaration> | <ALT> ) }
<parameter declaration> ::=
[ VAR | PERS | INOUT] <data type>
<identifier> [ '{' ( '*' { ',' '*' } ) | <DIM>] '}'
| 'switch' <identifier>
Déclaration de procédure
<procedure declaration> ::=
PROC <procedure name>
'(' [ <parameter list> ] ')'
<data declaration list>
<instruction list>
[ BACKWARD <instruction list> ]
[ ERROR <instruction list> ]
[ UNDO <instruction list> ]
ENDPROC
<procedure name> ::= <identifier>
<data declaration list> ::= {<data declaration>}
Déclaration de fonction
<function declaration> ::=
FUNC <value data type>
<function name>
'(' [ <parameter list> ] ')'
<data declaration list>
<instruction list>
[ ERROR <instruction list> ]
[ UNDO <instruction list> ]
ENDFUNC
<function name> ::= <identifier>
Appel de procédure
<procedure call> ::= <procedure> [ <procedure argument list> ] ';'
<procedure> ::=
<identifier>
| '%' <expression> '%'
<procedure argument list> ::= <first procedure argument> {
<procedure argument> }
<first procedure argument> ::=
<required procedure argument>
| <optional procedure argument>
| <conditional procedure argument>
| <ARG>
<procedure argument> ::=
',' <required procedure argument>
| <optional procedure argument>
| ',' <optional procedure argument>
| <conditional procedure argument>
| ',' <conditional procedure argument>
| ',' <ARG>
<required procedure argument> ::= [ <identifier> ':=' ] <expression>
<optional procedure argument> ::= '\' <identifier> [ ':='
<expression> ]
<conditional procedure argument> ::= '\' <identifier> '?' (
<parameter> | <VAR> )
Introduction
Il existe trois types différents de données :
• Un type de données atomique dans le sens où elles ne sont pas définies sur
base d'un autre type de données et ne sont pas divisées en parties ou
composantes (par exemple num).
• Un type de données enregistrement est un type composé de composantes
nommées et ordonnées (par exemple, pos). Une composante peut être de
type atomique ou enregistrement.
Une valeur d'enregistrement qui peut être exprimée à l'aide d'une
représentation total (par exemple, la valeur de total d'enregistrement pos [
300, 500, profondeur ].
Une composante spécifique des données d'un enregistrement peut être
atteinte en utilisant le nom de cette composante (par exemple, pos1.x := 300
; affectation de la composante x de pos1.
• Par définition, un type de données alias est égal à un autre type. Les types
Alias permettent de classer des objets de données.
Exemple :
VAR num level;
VAR dionum high:=1;
level:= high;
Ceci est correct car dionum est un type de données pseudonyme pour num.
Syntaxe
<type definition>::=
[LOCAL] ( <record definition>
| <alias definition> )
| <comment>
| <TDN>
<record definition>::=
RECORD <identifier>
<record component list>
ENDRECORD
Introduction
Il existe trois types de données :
• Une variable peut recevoir une nouvelle valeur en cours d’exécution du
programme.
• Unes persistante peut être décrite en tant que variable persistante. Pour ce
faire, laissez une mise à jour de la valeur d’une persistante générer
automatiquement la valeur d’initialisation de la déclaration de persistante à
mettre à jour. (Lorsqu’un programme est sauvegardé, la valeur d’initialisation
d’une déclaration de persistante reflète la valeur actuelle de la persistante.)
• Une constante représente une valeur statique et ne peut pas recevoir de
nouvelle valeur.
Une déclaration de données introduit des données en associant un nom
(identificateur) à un type de données. À l’exception des données prédéfinies et
des variables de boucle, toutes les données utilisées doivent être déclarées.
Domaine de données
Le domaine des données indique la zone dans laquelle les données sont visibles.
La pseudo-instruction locale optionnelle d’une déclaration de données classe les
données en tant que données locales (au sein du module) ; sinon, il s’agit de
données globales. Vous noterez que la pseudo-instruction locale peut uniquement
être utilisée au niveau du module et non au sein d’une routine.
Exemple
LOCAL VAR num local_variable;
VAR num global_variable;
Données de programme
Les données déclarées en dehors d'une routine sont appelées données de
programme. Les règles suivantes s’appliquent aux données de programme :
• Le domaine de données de programme prédéfinies ou globales peut inclure
n’importe quel module.
• Le domaine de données de programme locales comprend le module dans
lequel elles se trouvent.
• Dans les limites de leur domaine, les données de programme locales peuvent
cacher des données globales ou une routine portant le même nom (y compris
des instructions et des données et routines prédéfinies).
Les données de programme ne peuvent pas avoir le même nom que d’autres
données ou une autre routine dans le même module. Les données de programme
globales ne peuvent pas avoir le même nom que d’autres données globales ou
une autre routine dans un autre module.
Données de routine
Les données déclarées à l'intérieur d'une routine sont appelées données de routine.
Vous noterez que les paramètres d’une routine sont également traités comme s’il
s’agissait de données de routine. Les règles suivantes s’appliquent aux données
de routine :
• Le domaine des données de routine comprend la routine dans lequel elles
se trouvent.
• Dans les limites de leur domaine, les données de routine cachent toute autre
routine ou donnée portant le même nom.
Des données de routine ne peuvent pas avoir le même nom que d’autres données
ou étiquettes dans la même routine.
Exemple
Dans cet exemple, les données suivantes peuvent être appelées à partir de la
routine e :
• Module1 : Données c, d.
• Module2: Données a, f, g, e1.
Les données suivantes peuvent être appelées à partir de la routine h :
• Module1 : Données d.
• Module2: Données a, f, g, h1, c.
xx1100000554
Déclaration de variable
Une variable est introduite par une déclaration de variable et peut être déclarée
en tant que variable globale (aucune condition n’est nécessaire) ou variable locale.
Exemple :
MainModule est chargé dans la tâche T_ROB1.
MODULE MainModule
! The scope of this variable is within T_ROB1, i.e. it can be
! accessed from any module in T_ROB1.
VAR num global_var := 123;
PROC main()
! The scope of this variable is within this procedure.
VAR num local_var2 := 321;
...
ENDPROC
ENDMODULE
Une variable déclarée dans un module installé et partagé peut être déclarée avec
la condition TASK, voir Manuel de référence technique - Paramètres système,
rubrique Controller, type Automatic Loading of Modules. Une telle variable est
accessible à partir de toutes les tâches mais possède une valeur unique pour
chaque tâche. Par exemple, changer la valeur des variables d’une tâche n’affecte
pas les autres tâches.
Exemple :
SharedModule est installé et partagé dans le système.
MODULE SharedModule(SYSMODULE)
! This variable is accessible from all tasks, but has a
! unique value for each task.
TASK VAR num global_var := 123;
...
ENDMODULE
Utiliser la condition TASK dans un module qui n’est pas installé et partagé n’a
aucune conséquence.
Des variables de n’importe quel type peuvent se voir affecter un format de tableau
(1, 2 ou 3 dimensions) en ajoutant des informations dimensionnelles à la déclaration.
Une dimension est une valeur entière supérieure à 0.
Exemple :
VAR pos pallet{14, 18};
Les variables avec des types de valeur peuvent être initialisées (recevoir une valeur
initiale). L’expression utilisée pour initialiser une variable de programme doit être
une constante. Notez que la valeur d’une variable non initialisée peut être utilisée,
mais elle n’est pas définie, c’est-à-dire qu’elle est nulle s’il s’agit d’un num. Une
chaîne est définie comme chaîne vide et une variable booléenne porte la valeur
FALSE.
Exemple :
VAR string author_name := "John Smith";
VAR pos start := [100, 100, 50];
VAR num maxno{10} := [1, 2, 3, 9, 8, 7, 6, 5, 4, 3];
La valeur d’initialisation est déterminée lorsque :
• le module / programme est chargé.
• le pointeur de programme est réinitialisé, par exemple sur « main ».
Déclaration de persistante
Les persistantes ne peuvent être déclarées qu’au niveau d’un module, et non à
l’intérieur d’une routine. Les persistantes peuvent être déclarées en tant que
persistantes système globales (aucune condition n’est nécessaire), en tant que
persistantes de tâche globales ou en tant que persistantes locales.
Exemple :
Le module suivant est chargé à la fois dans T_ROB1 et T_ROB2.
MODULE MainModule
! The scope of this persistent is within the task it’s been
! loaded to. But, it will share the current value with any
! other task declaring the same persistent. I.e. changing the
! value in T_ROB1 will automatically change the value in T_ROB2.
PERS num globalpers := 123;
Déclaration de constante
Une constante est introduite par une déclaration de constante. La valeur d’une
constante ne peut pas être modifiée.
Exemple :
CONST num pi := 3.141592654;
Une constante de n’importe quel type peut être associée à un tableau (1, 2 ou 3
dimensions), en ajoutant des renseignements dimensionnels à la déclaration. Une
dimension est une valeur entière supérieure à 0.
CONST pos seq{3} := [[614, 778, 1020], [914, 998, 1021], [814, 998,
1022]];
Données d'initialisation
La valeur d'initialisation d'une constante ou d'une variable peut être une expression
constante.
La valeur d’initialisation d’une persistante ne peut être qu’une expression littérale.
Exemple :
CONST num a := 2;
CONST num b := 3;
!Correct syntax
CONST num ab := a + b;
VAR num a_b := a + b;
PERS num a__b := 5; !
!Faulty syntax
PERS num a__b := a + b;
Le tableau ci-dessous montre ce qui se produit au cours de différentes activités,
comme un redémarrage, un nouveau programme, un démarrage de programme,
etc.
Un évé- Mise Ouvrir, Démar- Démar- Démar- Démar- Démar- Démar-
nement sous ten- Fermer rer pro- rer pro- rer pro- rer pro- rer pro- rer pro-
système sion (re- ou Nou- gramme gramme gramme gramme gramme gramme
affecte démar- veau (Dépla- (Dépla- (Dépla- (Appeler (après (après
rage) progra- cer PP cer PP cer PP la rou- cycle) arrêt)
mme vers prin- vers vers cur- tine)
cipal) Routine) seur)
Consta- Inchangé Init Init Init Inchangé Inchangé Inchangé Inchangé
nte
Variable Inchangé Init Init Init Inchangé Inchangé Inchangé Inchangé
Persista- Inchangé Init i / Inchangé Inchangé Inchangé Inchangé Inchangé Inchangé
nte Inchangé
Interrup- Redema- Disparaît Disparaît Disparaît Inchangé Inchangé Inchangé Inchangé
tions co- ndé
mman-
dées
Classe de sauvegarde
La classe de sauvegarde d’un objet de données détermine quand le système alloue
et désalloue de la mémoire pour cet objet de données. La classe de sauvegarde
d'un objet de données est déterminée par le type d'objet de données et le contexte
de sa déclaration, et peut être statique ou volatile.
Les constantes, persistantes et variables de module sont statiques : leur sauvegarde
est la même pendant toute la durée d’une tâche. Cela veut dire que toute valeur
attribuée à une persistante ou à une variable de module reste toujours inchangée
jusqu’à la prochaine attribution.
Les variables de routine sont volatiles. La mémoire nécessaire pour sauvegarder
la valeur d’une variable volatile est d’abord allouée à l’appel de la routine qui
contient la déclaration de la variable. La mémoire est ensuite désallouée lors du
retour à l’endroit où la routine a été appelée. Cela veut dire que la valeur d’une
variable de routine est toujours indéfinie avant l’appel de la routine et est toujours
perdue (devient indéfinie) à la fin de l’exécution de la routine.
Dans une chaîne d'appels de routines récursives (une routine s'appelant elle-même
directement ou indirectement), chaque instance de routine reçoit son propre
emplacement de mémoire pour la même variable de routine - plusieurs instances
de la même variable sont créées.
Syntaxe
Déclaration de données
<data declaration> ::=
[LOCAL] ( <variable declaration>
| <persistent declaration>
| <constant declaration> )
Déclaration de variable
<variable declaration> ::=
VAR <data type> <variable definition> ';'
<variable definition> ::=
<identifier> [ '{' <dim> { ',' <dim> } '}' ]
[ ':=' <constant expression> ]
<dim> ::= <constant expression>
Déclaration de persistante
<persistent declaration> ::=
PERS <data type> <persistent definition> ';'
<persistent definition> ::=
<identifier> [ '{' <dim> { ',' <dim> } '}' ]
[ ':=' <literal expression> ]
Remarque
L’expression littérale ne peut être omise que pour les persistantes système
globales.
Déclaration de constante
<constant declaration> ::=
CONST <data type> <constant definition> ';'
<constant definition> ::=
<identifier> [ '{' <dim> { ',' <dim> } '}' ]
':=' <constant expression>
<dim> ::= <constant expression>
1.3 Expressions
Description
Une expression spécifie l'évaluation d'une valeur. Elle peut être utilisée, par
exemple:
dans une instruction d'affectation par exemple : a:=3*b/c;
en tant que condition dans une instruction par exemple : IF a>=3 THEN ...
IF
en tant qu'argument dans une instruction par exemple : WaitTime time;
en tant qu'argument dans un appel de fonc- par exemple : a:=Abs(3*b);
tion
Expressions arithmétiques
Une expression arithmétique est utilisée pour évaluer une valeur numérique.
Exemple :
2*pi*radius
Expressions logiques
Une expression logique est utilisée pour évaluer une valeur logique (TRUE/FALSE).
Exemple :
a>5 AND b=3
xx1100000555
Expressions de chaîne
Une expression de chaîne est utilisée pour effectuer des opérations sur des chaînes
de caractères.
Exemple : "IN" + "PUT" donne le résultat "INPUT"
Opérateur Fonctionnement Types d'opérande Type de résultat
+ concaténation de string + string string
chaîne
Introduction
Une variable entière, persistante ou constante peut faire partie d’une expression.
Exemple :
2*pi*radius
Tableaux
Une variable, persistante ou constante déclarée en tant que tableau peut être
référencée en utilisant la totalité du tableau ou un seul élément.
Un élément de tableau est désigné en utilisant le numéro d’index de l’élément.
L’index est une valeur entière supérieure à 0 et ne devra pas enfreindre la dimension
déclarée. La valeur d’index 1 choisit le premier élément. Le nombre d’éléments de
la liste d’index doit correspondre au degré déclaré (1, 2 ou 3) du tableau.
Exemple :
VAR num row{3};
VAR num column{3};
VAR num value;
Enregistrements
Une variable, persistante ou constante déclarée en tant qu’enregistrement peut
être référencée en fonction de la totalité de l’enregistrement ou d’une seule
composante.
Une composante d’enregistrement est référencée en utilisant le nom de la
composante.
Exemple :
VAR pos home;
VAR pos pos1;
VAR num yvalue;
..
! get the Y component only
yvalue := home.y;
Introduction
Un total est utilisé pour les valeurs d’enregistrement ou de tableau.
Exemple :
! pos record aggregate
pos := [x, y, 2*x];
Conditions préalables
Il doit être possible de déterminer le type de données d’un total en fonction du
contexte. Le type de données de chaque élément du total doit être le même que
celui de l’élément correspondant du type déterminé.
Exemple (type de total pos - déterminé par p1) :
VAR pos pl;
p1 :=[1, -100, 12];
Exemple de ce qui n'est pas autorisé (car le type de données de n'importe quel
total peut être déterminé par le contexte) :
VAR pos pl;
IF [1, -100, 12] = [a,b,b,] THEN
Introduction
Un appel de fonction génère l’évaluation d’une fonction spécifique et reçoit la
valeur retournée par la fonction.
Exemple :
Sin(angle)
Arguments
Les arguments d’un appel de fonction sont utilisés pour transférer des données
vers (et peut-être en provenance de) la fonction appelée. Le type de données d’un
argument doit être identique au type du paramètre correspondant de la fonction.
Les arguments optionnels peuvent être omis mais l’ordre des arguments (présents)
doit être le même que l’ordre des paramètres formels. De plus, au moins deux
arguments optionnels peuvent être déclarés comme s’excluant mutuellement
auquel cas un seul pourra être présent dans la liste des arguments.
Un argument requis (obligatoire) est séparé de l’argument qui le précède par une
virgule (,). Le nom du paramètre formel peut soit être inclus soit être omis.
Exemple Description
Polar(3.937, 0.785398) Deux arguments requis, avec ou sans le nom
Polar(Dist:=3.937, de paramètre.
Angle:=0.785398)
Cosine(45) Un argument requis, avec ou sans aiguillage.
Cosine(0.785398\Rad)
Dist(p2) Un argument requis, avec ou sans argument
Dist(\distance:=pos1, p2) optionnel.
Un argument optionnel doit être précédé d’une barre oblique inverse(\) et du nom
du paramètre formel. De plus, un argument du type aiguillage est un tant soit peu
spécial ; il ne comprendra peut être pas d’expression d’argument. Par contre, un
tel argument peut être uniquement présent ou non présent.
Les arguments conditionnels sont utilisés pour la propagation continue des
arguments optionnels via des chaînes d’appels de routine. Un argument
conditionnel est considéré comme étant présent si le paramètre optionnel spécifié
(de la fonction d’appel) est présent, sinon il est tout simplement considéré comme
étant omis. Notez que le paramètre spécifié doit être optionnel.
Exemple :
PROC Read_from_file (iodev File \num Maxtime)
..
character:=ReadBin (File \Time?Maxtime);
! Max. time is only used if specified when calling the routine
! Read_from_file
..
ENDPROC
Paramètres
La liste des paramètres d’une fonction affecte un mode d’accès à chaque paramètre.
Le mode d'accès peut être in, inout, var ou pers :
• Un paramètre IN (par défaut) permet à l’argument d’être n’importe quelle
expression. La fonction appelée considère le paramètre comme étant une
constante.
• Un paramètre INOUT exige que l’argument correspondant soit une variable
(entière, élément de tableau ou composante d’enregistrement) ou une
persistante entière. La fonction appelée bénéficie d’un accès total
(lecture/écriture) à l’argument.
• Un paramètre VAR exige que l’argument correspondant soit une variable
(entière, élément de tableau ou composante d’enregistrement). La fonction
appelée bénéficie d’un accès total (lecture/écriture) à l’argument.
• Un paramètre PERS exige que l’argument correspondant soit une persistante
entière. La fonction appelée bénéficie d’un accès total (lecture/mise à jour)
à l’argument.
Règles de priorité
La priorité relative des opérateurs détermine l’ordre selon lequel ils sont évalués.
Les parenthèses permettent de neutraliser la priorité de l’opérateur. Les règles
ci-dessous suggèrent la priorité opérateur suivante :
Priorité opérateurs
La plus élevée * / DIV MOD
+ -
< > <> <= >= =
AND
La plus faible XOR OR NOT
Un opérateur avec priorité élevée est évalué avant un opérateur de priorité moins
élevée. Les opérateurs ayant une même priorité sont évalués de gauche à droite.
Exemple d'expression Ordre d'évaluation Commentaire
a + b + c (a + b) + c Règle de gauche à droite
a + b * c a + (b * c) * plus élevé que +
a OR b OR c (a OR b) OR c Règle de gauche à droite
a AND b OR c AND d (a AND b) OR (c AND d) AND plus élevé que OR
a < b AND c < d (a < b) AND (c < d) < plus élevé que AND
1.3.6 Syntaxe
Expressions
<expression> ::= <expr> | <EXP>
<expr> ::= [ NOT ] <logical term> { ( OR | XOR ) <logical term> }
<logical term> ::= <relation> { AND <relation> }
<relation> ::= <simple expr> [ <relop> <simple expr> ]
<simple expr> ::= [ <addop> ] <term> { <addop> <term> }
<term> ::= <primary> { <mulop> <primary> }
<primary> ::=
<literal>
| <variable>
| <persistent>
| <constant>
| <parameter>
| <function call>
| <aggregate>
| '(' <expr> ')'
opérateurs
<relop> ::= '<' | '<=' | '=' | '>' | '>=' | '<>'
<addop> ::= '+' | '-'
<mulop> ::= '*' | '/' | DIV | MOD
Valeurs constantes
<literal> ::= <num literal>
| <string literal>
| <bool literal>
Données
<variable> ::=
<entire variable>
| <variable element>
| <variable component>
<entire variable> ::= <ident>
<variable element> ::= <entire variable> '{' <index list> '}'
<index list> ::= <expr> { ',' <expr> }
<variable component> ::= <variable> '.' <component name>
<component name> ::= <ident>
<persistent> ::=
<entire persistent>
| <persistent element>
| <persistent component>
<constant> ::=
<entire constant>
| <constant element>
| <constant component>
Totaux
<aggregate> ::= '[' <expr> { ',' <expr> } ']'
Appels de fonction
<function call> ::= <function> '(' [ <function argument list> ]
')'
<function> ::= <ident>
<function argument list> ::= <first function argument> { <function
argument> }
<first function argument> ::=
<required function argument>
| <optional function argument>
| <conditional function argument>
<function argument> ::=
',' <required function argument>
| <optional function argument>
| ',' <optional function argument>
| <conditional function argument>
| ',' <conditional function argument>
<required function argument> ::= [ <ident> ':=' ] <expr>
<optional function argument> ::= '\' <ident> [ ':=' <expr> ]
<conditional function argument> ::= '\' <ident> '?' <parameter>
Expressions spéciales
<constant expression> ::= <expression>
<literal expression> ::= <expression>
<conditional expression> ::= <expression>
Paramètres
<parameter> ::=
<entire parameter>
| <parameter element>
| <parameter component>
1.4 Instructions
Description
Les instructions sont exécutées successivement à moins qu’une instruction de
déroulement du programme, une interruption ou une erreur ne provoque la
continuation de l’exécution ailleurs.
La plupart des instructions se terminent par un point-virgule (;). Une étiquette se
termine par deux-points (:). Certaines instructions peuvent contenir d’autres
instructions et se terminent par des mots-clés spécifiques :
Instruction Mot de fin
IF ENDIF
FOR ENDFOR
WHILE ENDWHILE
TEST ENDTEST
Exemple :
WHILE index < 100 DO
.
index := index + 1;
ENDWHILE
Listes de sélection
Toutes les instructions sont collectées dans des groupes spécifiques, qui sont
décrits dans les sections suivantes. Ces groupes sont identiques à ceux des listes
de sélection utilisées lors de l'ajout de nouvelles instructions à un programme via
l'éditeur de programme.
Syntaxe
<instruction list> ::= { <instruction> }
<instruction> ::=
[<instruction according to separate chapter in this manual>
| <SMT>
Introduction
En règle générale, le programme est exécuté de manière séquentielle, c’est-à-dire
instruction par instruction. Parfois, les instructions qui interrompent cette exécution
séquentielle et appellent une autre instruction doivent faire face à des situations
différentes susceptibles de survenir en cours d’exécution.
Principes de programmation
Le déroulement du programme peut être contrôlé selon cinq principes différents
:
• En appelant une autre routine (procédure) et, lorsque cette routine a été
exécutée, continuer l’exécution avec l’instruction qui suit l’appel de la routine.
• En exécutant différentes instructions selon qu’une condition donnée a été
satisfaite ou pas.
• En répétant une séquence d’instructions un certain nombre de fois ou jusqu’à
ce qu’une condition donnée soit satisfaite.
• En se rendant dans un label au sein de la même routine.
• En mettant fin à l’exécution d’un programme.
Introduction
Diverses instructions sont utilisées pour
• affecter des valeurs à des données
• attendre un certain temps ou attendre jusqu’à ce qu’une condition soit
satisfaite
• insérer un commentaire dans le programme
• charger des modules de programmes.
Attente
Le robot peut être programmé pour attendre un certain temps ou pour attendre
jusqu’à ce qu’une condition arbitraire ait été satisfaite ; par exemple, attendre
jusqu’à ce qu’une entrée ait été déterminée.
Instruction Utilisé pour
WaitTime Attendre un certain temps ou jusqu'à ce que le robot cesse de
se déplacer
WaitUntil Attendre qu'une condition soit satisfaite
WaitDI Attendre jusqu’à ce qu’une entrée numérique soit définie
WaitDO Attendre jusqu’à ce qu’une entrée numérique soit définie
Commentaires
Les commentaires sont uniquement insérés dans le programme pour en accroître
la lisibilité. L’exécution du programme n’est pas affectée par l’insertion d’un
commentaire.
Instruction Utilisé pour
! Commentaire sur le programme. Une ligne commençant par
(! (point d’exclamation) est un commentaire et est ignorée par
l'exécution du programme.
Fonctions diverses
Données de base
Fonction de conversion
Introduction
Certaines caractéristiques de déplacement du robot sont déterminées à partir
d’instructions logiques qui s’appliquent à tous les déplacements :
• Vitesse maximale du TCP
• Vitesse maximale et dépassement de vitesse
• Accélération
• Gestion des différentes configurations de robot
• Charge utile
• Comportement autour de points singuliers
• Déplacement du programme
• Soft servo
• Valeur de mise au point
• Activation et désactivation de la mémoire tampon d'événements
• Suppression des messages d’avertissement de la trajectoire de raccordement
Principes de programmation
Les caractéristiques de base du déplacement du robot sont déterminées par les
données spécifiées pour chaque instruction de positionnement. Toutefois, certaines
données sont spécifiées dans des instructions séparées qui s’appliquent à tous
les mouvements jusqu’à ce que ces données changent.
Les paramètres de déplacement généraux sont spécifiés à l’aide d’un certain
nombre d’instructions, mais ils peuvent également être lus à l’aide de la variable
système C_MOTSET ou C_PROGDISP.
Les valeurs par défaut sont automatiquement déterminées (en exécutant la routine
SYS_RESET dans le module système BASE_SHARED)
• lors de l'utilisation du mode de redémarrage Réinitialiser le système,
• lorsqu’un nouveau programme est chargé,
• lorsque le programme est exécuté à partir du début.
Définir la vitesse
La vitesse absolue est programmée en tant qu’argument dans l’instruction de
positionnement. Outre ceci, la vitesse maximale et la neutralisation de la vitesse
(pourcentage de la vitesse programmée) peuvent être définies.
Une limitation de vitesse peut également être définie ; elle sera appliquée
ultérieurement, lorsqu'un signal d'entrée système sera défini.
Instruction Utilisée pour définir
VelSet La vitesse maximale et la neutralisation de vitesse
SpeedRefresh Mettre à jour la neutralisation de vitesse pour le déplacement
en cours
SpeedLimAxis Définissez la limitation de vitesse pour un axe. Elle sera appli-
quée ultérieurement via un signal d'entrée système.
SpeedLimCheckPoint Définissez la limitation de vitesse pour les points de contrôle.
Elle sera appliquée ultérieurement via un signal d'entrée sys-
tème.
Définir l’accélération
Lorsque des pièces fragiles, par exemple, sont manipulées, l’accélération peut
être réduite pendant une partie du programme.
Instruction Utilisé pour
AccSet Définir l’accélération maximale.
WorldAccLim Limiter l’accélération et/ou la décélération de l’outil (et de la
charge de préhension) dans le système de coordonnées atelier.
PathAccLim Régler ou réinitialiser les limitations sur l’accélération du TCP
et/ou la décélération du TCP le long de la trajectoire de dépla-
cement.
Déplacer un programme
Lorsqu’une partie du programme doit être déplacée, par exemple à la suite d’une
recherche, on peut ajouter un déplacement de programme.
Instruction Utilisé pour
PDispOn Activer le déplacement d’un programme
PDispSet Activer le déplacement d’un programme en spécifiant une va-
leur
PDispOff Désactiver le déplacement d’un programme
EOffsOn Activer le décalage d'un axe supplémentaire
EOffsSet Activer le décalage d’un axe supplémentaire en spécifiant une
valeur
EOffsOff Désactiver le décalage d'un axe supplémentaire
Servo mou
Un ou plusieurs axes du robot peuvent être rendus "souples". Lorsqu’on utilise
cette fonction, le robot sera "conciliant" et pourra, par exemple, remplacer un outil
à ressort.
Instruction Utilisé pour
SoftAct Activer le servo mou pour un ou plusieurs axes
SoftDeact Désactiver le servo mou
Zones atelier
Jusqu’à 10 volumes différents peuvent être définis à l’intérieur de la zone de travail
du robot. Ils peuvent être utilisés pour :
• Indiquer que le TCP du robot est dans une section particulière de la zone de
travail.
• Délimiter la zone de travail du robot et empêcher une collision avec l’outil.
• Créer une zone de travail commune à deux robots. La zone de travail n’est
alors accessible que pour un robot à la fois.
Les instructions reprises dans le tableau ci-dessous ne sont disponibles que
lorsque le robot est équipé de l'option World Zones.
Instruction Utilisé pour
WZBoxDef Définir une zone globale en forme de boîte
WZCylDef Définir une zone globale cylindrique
WZSphDef Définir une zone globale sphérique
WZHomeJointDef Définir une zone globale en coordonnées articulaires
1.8 Mouvement
Principes de programmation
Les autres caractéristiques de déplacement sont spécifiées en définissant les
données qui sont les arguments d’une instruction. Les autres caractéristiques de
déplacement sont spécifiées en définissant les données qui sont les arguments
d’une instruction.
• Données de position (position de fin du robot et des axes supplémentaires)
• Données de vitesse (vitesse souhaitée)
• Données de zone (précision de la position)
• Données d'outil (par exemple, la position du TCP)
• Données d'objet de travail (par exemple, le système de coordonnées actuel)
Certaines caractéristiques de déplacement du robot sont déterminées à partir
d’instructions logiques qui s’appliquent à tous les déplacements (voir Paramètres
de mouvement à la page 53) :
• Vitesse maximale et dépassement de vitesse
• Accélération
• Gestion des différentes configurations de robot
• Charge utile
• Comportement autour de points singuliers
• Déplacement du programme
• Soft servo
• Valeur de mise au point
• Activation et désactivation de la mémoire tampon d'événements
Le robot et les axes supplémentaires sont positionnés à partir des mêmes
instructions. Les axes supplémentaires sont déplacés à une vitesse constante et
atteignent la position de fin en même temps que le robot.
Instructions de positionnement
Recherche
Lors de son déplacement, le robot peut rechercher, par exemple, la position d’un
objet de travail. La position recherchée (indiquée par un signal capteur) est mise
en mémoire, et pourra être utilisée ultérieurement pour positionner le robot ou
calculer le déplacement d’un programme.
Instruction Type de mouvement
SearchC Le TCP se déplace selon une trajectoire circulaire.
SearchL Le TCP se déplace selon une trajectoire linéaire.
SearchExtJ Déplacement articulaire d’une unité mécanique sans TCP.
Axes indépendants
L’axe 6 du robot (et 4 pour les IRB 1600, 2600 et 4600, à l'exception des versions
ID) ou un axe supplémentaire peut être déplacé indépendamment des autres
mouvements. L’espace de travail d’un axe peut aussi être remis à zéro, ce qui
permet de réduire les temps de cycle.
Les instructions reprises dans le tableau ci-dessous ne sont disponibles que
lorsque le robot est équipé de l'option Independent Axis.
Instruction Utilisé pour
IndAMove Mettre un axe en mode indépendant et déplacer l'axe vers une
position absolue.
IndCMove Mettre un axe en mode indépendant et démarrer son mouve-
ment de façon continue.
IndDMove Mettre un axe en mode indépendant et déplacer l’axe d’une
distance delta.
IndRMove Mettre un axe en mode indépendant et le déplacer vers une
position relative (comprise dans un tour d'axe).
IndReset Mettre un axe en mode dépendant et/ou redéfinir la zone de
travail.
HollowWristReset i Réinitialiser la position des articulations de poignet sur les
manipulateurs de poignet creux tels que l'IRB 5402 et l'IRB
5403
i Peut également être utilisé pour les IRB 5402 et 5403.
Les fonctions reprises dans le tableau ci-dessous ne sont disponibles que lorsque
le robot est équipé de l'option Independent Axis.
Fonction Utilisé pour
IndInpos Contrôler si un axe indépendant est en position.
IndSpeed Contrôler si un axe indépendant a atteint la vitesse program-
mée.
Correction de trajectoire
Les instructions, fonctions et types de données repris dans le tableau ci-dessous
ne sont disponibles que lorsque le robot est équipé des options Path offset ou
RobotWare-Arc sensor.
Instruction Utilisé pour
CorrCon Contrôler si un axe indépendant est en position
CorrWrite Contrôler si un axe indépendant a atteint la vitesse program-
mée
CorrDiscon Déconnecter un générateur de corrections connecté précéde-
mment
CorrClear Supprimer tous les générateurs de corrections connectés
Enregistreur de trajectoire
Les instructions, fonctions et types de données repris dans le tableau ci-dessous
ne sont disponibles que lorsque le robot est équipé de l'option Path Recovery.
Instruction Utilisé pour
PathRecStart Lancer l'enregistrement de la trajectoire du robot
PathRecStop Arrêter l'enregistrement de la trajectoire du robot
PathRecMoveBwd Déplacer le robot vers l’arrière le long d’une trajectoire enregi-
strée
PathRecMoveFwd Ramener le robot à la position où PathRecMoveBwd a été
exécuté
Suivi de convoyeur
Les instructions reprises dans le tableau ci-dessous ne sont disponibles que
lorsque le robot est équipé de l'option Conveyor tracking.
Instruction Utilisé pour
WaitWObj Attendre un objet de travail sur le convoyeur
DropWObj Laisser tomber l'objet de travail sur le convoyeur
Synchronisation de capteur
La synchronisation de capteur est la fonction par laquelle la vitesse du robot suit
un capteur qui peut être monté sur un convoyeur mobile ou sur un axe de moteur
de presse.
Les instructions reprises dans le tableau ci-dessous ne sont disponibles que
lorsque le robot est équipé de l'option Sensor Synchronization.
Instruction Utilisé pour
WaitSensor Connecter un objet dans la fenêtre de démarrage sur une unité
mécanique de capteur.
SyncToSensor Démarrer ou arrêter la synchronisation du déplacement du
robot par rapport au mouvement du capteur.
DropSensor Déconnecter l'objet actuel.
Fonctions de position
Fonctions d'état
Données de mouvement
Les données de mouvement sont utilisées en tant qu’argument dans les instructions
de positionnement.
Type de données Utilisée pour définir
robtarget La position de fin
jointtarget La position de fin pour une instruction MoveAbsJ ou MoveExtJ
speeddata La vitesse
zonedata La précision de la position (point d’arrêt ou point de passage)
tooldata Le système de coordonnées outil et la charge de l’outil
wobjdata Système de coordonnées du repère objet
stoppointdata La fin de la position
Renseignements connexes
Signaux
Le robot peut disposer d’un certain nombre de signaux utilisateur numériques et
analogiques qui peuvent être lus et modifiés à partir du programme même.
Principes de programmation
Les noms des signaux sont définis dans les paramètres du système. Ces noms
sont toujours disponibles dans le programme pour les opérations de lecture et de
réglage des E/S.
La valeur d’un signal analogique ou d’un groupe de signaux numériques est
spécifiée en tant que valeur numérique.
1.10 Communication
Principes de programmation
La décision d’utiliser des renseignements à base de caractères ou binaires dépend
de la façon dont l’équipement qui communique avec le robot traite ces informations.
Un fichier, par exemple, peut avoir des données stockées sous forme de caractères
ou sous forme binaire.
Si la communication est requise dans les deux sens simultanément, la transmission
binaire est requise.
Chaque dispositif d’E/S ou fichier utilisé doit d’abord être ouvert. Pour cela, le
dispositif/fichier reçoit un descripteur qui est ensuite utilisé comme référence lors
de la lecture/écriture. Le FlexPendant peut être utilisé à tout moment et il n’est pas
nécessaire de l’ouvrir.
Vous pouvez imprimer aussi bien le texte que la valeur de certains types de
données.
Lecture à partir de ou écriture vers un dispositif d’E/S ou un fichier basé sur des caractères
1.11 Interruptions
Introduction
Les interruptions sont des événements définis par le programme, identifiés par
des numéros d’interruption. Une interruption a lieu lorsqu’une condition
d’interruption est vérifiée. Contrairement aux erreurs, l’apparition d’une interruption
n’est pas directement liée (synchrone avec) à une position de code spécifique.
L’apparition d’une interruption provoque la suspension de l’exécution normale du
programme et le contrôle est transféré vers une routine d'interruption.
Bien que le robot reconnaisse immédiatement l’apparition d’une interruption
(uniquement retardée par la vitesse du matériel), sa réponse – c’est-à-dire appeler
la routine d’interruption correspondante – peut uniquement avoir lieu en des
endroits spécifiques du programme, à savoir :
• lorsque l’instruction suivante est introduite,
• à n’importe quel moment lors de l’exécution d’une instruction d’attente, par
exemple, WaitUntil,
• à n’importe quel moment lors de l’exécution d’une instruction d’attente, par
exemple, MoveL.
Ceci génère normalement un délai de 2-30 ms entre l’identification d’une interruption
et la réponse, selon le type de mouvement effectué au moment de l’interruption.
Le déclenchement des interruptions peut être invalidé et validé. Si des interruptions
sont invalidées, toute interruption qui a lieu est mise en file d’attente et ne sera
pas déclenchée, jusqu’à ce que les interruptions soient à nouveau validées. Notez
que la file d’attente des interruptions peut contenir plusieurs interruptions en
attente. Les interruptions mises en file d’attente sont déclenchées selon le système
FIFO (première entrée, première sortie). Les interruptions sont toujours invalidées
pendant l’exécution d’une routine d’interruption.
Pendant une exécution pas à pas et en cas d’arrêt du programme, aucune
interruption ne sera traitée. Les interruptions de la file d'attente à l'arrêt sont
éliminées, et aucune interruption générée pendant un arrêt n'est traitée, à
l'exception des interruption de sécurité (voir Interruption de sécurité à la page 78).
Le nombre maximum d'interruptions se produisant au même moment s'élève à
100 par tâche de programme.
Principes de programmation
Chaque interruption reçoit une identité d’interruption. Elle obtient cette identité en
créant une variable (de type de données intnum) et en la connectant à une routine
d’interruption.
L’identité d’interruption (variable) est ensuite utilisée pour commander une
interruption, c’est-à-dire spécifier la raison de l’interruption. Il pourra s’agir d’un
des événements suivants :
• Une entrée ou une sortie est réglée sur 1 ou sur 0.
• Un certain temps s’écoule après la commande d’une interruption.
• Une position précise est atteinte.
Données d’interruption
Interruption de sécurité
Certaines instructions (par exemple ITimer et ISignalDI) peuvent être utilisées
avec la fonction d'interruption de sécurité. Les interruptions de sécurité sont des
interruptions qui sont mises en file d'attente si elles se produisent pendant un arrêt
ou une exécution pas à pas. Les interruptions mises en file d'attente seront traitées
dès que l'exécution continue est démarrée, selon le système FIFO (première entrée,
première sortie). Les interruptions mises en file d'attente à l'arrêt sont également
traitées. L'instruction ISleep ne peut pas être utilisée avec les interruptions de
sécurité.
! activate
IWatch sig1int;
Une interruption autorisée peut ensuite être désactivée (et vice versa).
Quand un type d’interruption est inhibé, si une interruption de ce type est générée,
elle est mise dans une file d’attente et traitée dès qu’elle est de nouveau autorisée.
Exemple :
! disable
IDisable sig1int;
1 enable
IEnable sig1int;
Le fait de supprimer une interruption supprime sa définition. Il n’est pas nécessaire
de supprimer explicitement la définition d’une interruption, mais une nouvelle
interruption ne peut pas être définie selon une variable d’interruption jusqu’à ce
que la définition précédente ait été supprimée.
Exemple :
IDelete sig1int;
Routines d'interruption
Les routines d’interruption permettent de gérer les interruptions. Une routine
d’interruption peut être associée à une interruption spécifique à l’aide de l’instruction
CONNECT. Lorsqu’une interruption a lieu, le contrôle est immédiatement transféré
à la routine d’interruption correspondante (s’il y en a une). Si une interruption a
lieu et qu’elle ne dispose pas de routine d’interruption à laquelle se connecter, il
s’agira alors d’une erreur fatale, c’est-à-dire qui met fin immédiatement à l’exécution
du programme.
Exemple :
VAR intnum empty;
VAR intnum full;
PROC main()
! Connect trap routines
CONNECT empty WITH etrap;
CONNECT full WITH ftrap;
! Define feeder interrupts
ISignalDI di1, high, empty;
ISignalDI di3, high, full;
...
! Delete interrupts
IDelete empty;
IDelete full;
ENDPROC
! Responds to “feeder empty” interrupt
TRAP etrap
open_valve;
RETURN;
ENDTRAP
! Responds to “feeder full” interrupt
TRAP ftrap
close_valve;
RETURN;
ENDTRAP
Plusieurs interruptions peuvent être connectées à la même routine d’interruption.
La variable système INTNO contient le numéro d’interruption et peut être utilisée
par une routine d’interruption afin d’identifier une interruption. Une fois les mesures
nécessaires prises, vous pouvez mettre fin à une routine d’interruption à l’aide de
l’instruction RETURN ou lorsque la fin de la routine d’interruption (ENDTRAP ou
ERROR) est atteinte. L’exécution continue à partir du point où l’interruption a eu
lieu.
Introduction
Plusieurs des erreurs qui se produisent lors de l’exécution d’un programme peuvent
être traitées au sein du programme même, ce qui signifie qu’il n'est pas nécessaire
d’interrompre l’exécution du programme. Ces erreurs sont du type détecté par le
système (par exemple, une division par zéro) ou du type généré par le programme
(par exemple, un programme générant une erreur lorsqu’une valeur incorrecte est
lue par un lecteur de code à barres).
Une erreur d’exécution est une situation anormale, liée à l’exécution d’une partie
spécifique d’une tâche de programme. Une erreur rend impossible (ou au moins
dangereuse) la poursuite de toute exécution. Le Dépassement de capacité et la
division par zéro sont des exemples d’erreurs.
Numéros d'erreur
Les erreurs sont identifiées par leur numéro d'erreur unique et sont toujours
reconnues par le système. L’apparition d’une erreur provoque l’arrêt de l’exécution
normale du programme, et le contrôle est transféré au gestionnaire d’erreurs. Le
concept des gestionnaires d’erreurs fait qu’il est possible de répondre et,
probablement, de reprendre après des erreurs qui surviennent en cours d’exécution
du programme. S’il s’avère impossible de poursuivre l’exécution, le gestionnaire
d’erreurs pourra au moins garantir un abandon en toute sécurité.
Principes de programmation
Lorsqu’une erreur se produit, le gestionnaire d’erreurs de la routine est appelé (le
cas échéant). Il est également possible de générer une erreur à partir du programme
même, puis de passer au gestionnaire d’erreurs.
Dans le gestionnaire d’erreurs, les erreurs peuvent être traitées à l’aide
d’instructions normales. Le paramètre ERRNO des données du système peut être
utilisé pour déterminer le type d’erreur survenue. Un retour au gestionnaire d’erreurs
pourra alors se faire de diverses façons (RETURN, RETRY, TRYNEXT et RAISE).
Si la routine en cours n’a pas de gestionnaire d’erreurs, le gestionnaire d’erreurs
interne du robot prend directement le contrôle. Le gestionnaire d’erreurs interne
émet un message d’erreur et arrête l’exécution du programme en positionnant le
pointeur de programme sur l’instruction à l’origine de l’erreur.
Gestionnaires d'erreurs
Toute routine est susceptible de comprendre un gestionnaire d’erreurs. Le
gestionnaire d’erreurs fait en réalité partie de la routine et le domaine de toutes
données de routines comprend également le gestionnaire d’erreurs de la routine.
Si une erreur survient en cours d’exécution de la routine, le contrôle est transféré
au gestionnaire d’erreurs.
Exemple :
FUNC num safediv( num x, num y)
RETURN x / y;
ERROR
IF ERRNO = ERR_DIVZERO THEN
TPWrite "The number cannot be equal to 0";
RETURN x;
ENDIF
ENDFUNC
La variable système ERRNO contient le numéro de l’erreur (la plus récente) et peut
être utilisée par le gestionnaire d’erreurs pour identifier l’erreur en question. Une
fois les mesures nécessaires prises, le gestionnaire d’erreurs peut:
• Reprendre l’exécution, à partir de l’instruction au sein de laquelle l’erreur a
eu lieu. Cette opération s’effectue à l’aide de l’instruction RETRY. Si cette
instruction génère à nouveau la même erreur, jusqu’à quatre reprises après
erreur ont lieu ; l’exécution prend ensuite fin. Pour pouvoir effectuer plus de
quatre tentatives, vous devez configurer le paramètre système No Of Retry,
voir Manuel de référence technique - Paramètres système.
• Redémarrer l’exécution, en commençant par l’instruction suivant celle où
s’est produite l’erreur. Cette opération s’effectue à l’aide de l’instruction
TRYNEXT.
• Retransférer le contrôle à la routine appelante à l’aide de l’instruction RETURN.
Si la routine est une fonction, l’instruction RETURN doit spécifier une valeur
de retour appropriée.
• Transmettre l’erreur à la routine appelante à l’aide de l’instruction RAISE.
les routines d’interruption ne peuvent être appelées que par le système (en réponse
à une interruption), la transmission d’une erreur à partir d’une routine d’interruption
est effectuée par le gestionnaire d’erreurs du système.
La reprise après erreur n’est pas possible pour les instructions qui se trouvent
dans le gestionnaire d'instruction arrière. Ces erreurs sont toujours transmises au
gestionnaire d’erreurs du système.
Il n’est pas possible de répondre ou de reprendre après des erreurs qui se
produisent au sein d’un gestionnaire d’erreurs. Ces erreurs sont toujours transmises
au gestionnaire d’erreurs du système.
1.13 UNDO
Introduction
Les routines RAPID peuvent contenir un gestionnaire UNDO Le gestionnaire est
exécuté automatiquement si le pointeur de programme est déplacé hors de la
routine. Ceci sert à éliminer les effets qui subsistent quand les routines sont
exécutées partiellement, par exemple pour annuler des instructions modales
(ouverture d'un fichier, etc.). La plupart des éléments du langage RAPID peuvent
être utilisés dans un gestionnaire UNDO mais font l'objet de limitations (par exemple,
les instructions de mouvement).
Terminologie
Les termes suivants sont associés à UNDO.
• UNDO : exécution du code de nettoyage avant que le programme soit
réinitialisé.
• Gestionnaire UNDO : composant en option d'une procédure ou d'une fonction
RAPID contenant le code RAPID qui fait l'objet d'une exécution UNDO.
• Routine UNDO : procédure ou fonction dotée d'un gestionnaire UNDO.
• Chaîne d'appels : toutes les procédures ou fonctions associées les unes aux
autres par le biais d'appels de routine qui ne sont pas encore terminés. Est
censée démarrer dans la routine Main si aucun autre élément n'est spécifié.
• Contexte UNDO : lorsque la routine actuelle fait partie d’une chaîne d’appels
démarrant dans un gestionnaire UNDO.
Limitations
Un gestionnaire UNDO peut accéder à toute variable ou à tout symbole accessible
depuis le corps d’une routine normale, y compris les variables déclarées localement.
Toutefois, les codes RAPID à exécuter dans un contexte UNDO font l’objet de
limitations.
Un gestionnaire UNDO doit contenir une instruction STOP, BREAK, RAISE ou
RETURN. Si vous tentez d’utiliser l’une de ces instructions dans un contexte UNDO,
elle est ignorée et un avertissement ELOG généré.
Les instructions de mouvement (par exemple MoveL) ne sont pas non plus
autorisées dans un contexte UNDO.
L’exécution est permanente dans UNDO. Il est impossible de procéder pas à pas.
Lorsque UNDO démarre, le mode d’exécution est paramétré de manière à ce que
l’exécution soit automatiquement permanente. Une fois la session UNDO terminée,
l’ancien mode d’exécution est restauré.
Si le programme est arrêté lors de l’exécution d’un gestionnaire UNDO, les autres
composants de ce dernier ne sont pas exécutés. Si la chaîne d’appels inclut d’autres
gestionnaires UNDO qui n’ont pas encore été exécutés, ils ne sont pas pris en
compte non plus. Cela entraîne la génération d’un avertissement ELOG. et implique
l’arrêt du programme en raison d’une erreur d’exécution.
Le pointeur du programme n’apparaît dans aucun gestionnaire UNDO. Lorsque
UNDO s’exécute, le pointeur du programme conserve son ancienne position, mais
est mis à jour quand l’exécution du/des gestionnaire(s) UNDO s’achève.
Une instruction EXIT annule l’exécution de UNDO de la même manière qu’une
erreur d’exécution ou qu’une instruction Stop. Les autres gestionnaires UNDO
sont ignorés et le pointeur du programme est déplacé vers le menu Main.
Exemple
Le programme :
PROC B
TPWrite "In Routine B";
Exit;
UNDO
TPWrite "In UNDO of routine B";
ENDPROC
PROC A
TPWrite "In Routine A";
B;
ENDPROC
PROC main
TPWrite "In main";
A;
UNDO
TPWrite "In UNDO of main";
ENDPROC
La sortie :
In main
In Routine A
In Routine B
In UNDO of routine B
In UNDO of main
xx1100000588
Description
Les instructions relatives au système et au temps permettent à l’utilisateur de
mesurer, d’inspecter et d’enregistrer le temps.
Principes de programmation
Les instructions horloge permettent à l’utilisateur d’utiliser des horloges qui
fonctionnent en tant que chronomètres. Ainsi, le programme du robot peut être
utilisé pour mesurer la durée d’un événement souhaité.
L’heure ou la date actuelle peut être reprise sous forme de chaîne. Cette chaîne
peut ensuite être affichée sur l’écran du FlexPendant ou utilisée pour horodater
les dossiers d’archives.
Il est également possible de récupérer des composants du temps du système
actuel sous forme de valeur numérique. Ceci permet au programme du robot
d’effectuer une action à un certain moment ou un certain jour de la semaine.
1.15 Mathématique
Description
Des instructions et des fonctions mathématiques sont utilisées pour calculer et
modifier la valeur des données.
Principes de programmation
Les calculs sont normalement effectués à l'aide de l'instruction d'affectation ; par
exemple, reg1:= reg2 + reg3 / 5. Il existe également des instructions pour
les calculs simples, par exemple pour la suppression d’une variable numérique.
Fonctions arithmétiques
Fonctions de bit
Fonctions de la matrice
Instructions
Fonctions
Types de données
Description
Différentes fonctions pour l’aide à la programmation du langage RAPID :
• Obtenir des données système
• Lire des données de configuration
• Écrire des données de configuration
• Redémarrer le système de commande
• Tester des données système
• Obtenir un nom d’objet
• Obtenir un nom de tâche
• Rechercher des symboles
• Obtenir le type d’événement en cours, le gestionnaire d'exécution ou le
niveau d'exécution
• Lire les informations d'entretien
Redémarrer le contrôleur
Obtenir l'état actuel du panneau de sélection des tâches pour une tâche du programme
Description
Il existe un certain nombre d’instructions qui permettent de tester le système de
robot.
Étalonnage de l’outil
Description
Les fonctions de chaînes de caractères sont utilisées pour des opérations sur des
chaînes de caractères, comme la concaténation, la comparaison, la recherche, la
conversion, etc.
Opérations de base
Comparaison et recherche
Conversion
1.20 Multitâche
Description
Les événements dans la cellule du robot interviennent simultanément, alors
pourquoi pas les programmes ?
Le Multitâche RAPID permet d’exécuter des programmes parallèlement (ou
presque). Un programme parallèle peut être placé en arrière-plan ou au premier
plan d’un autre programme. Il peut aussi être au même niveau qu’un autre
programme.
Pour tous les paramètres, voir Manuel de référence technique - Paramètres
système.
Limitations
L’utilisation du Multitâche RAPID présente toutefois quelques restrictions.
• N’utilisez pas un programme parallèle avec un PLC. Le temps de réponse
est le même que celui d’une tâche à une interruption. Cela, bien sûr, si la
tâche n’est pas en arrière-plan d’un autre programme déjà occupé.
• Lors de l’exécution d’une instruction Wait en mode manuel, une boîte de
simulation apparaît après 3 secondes, Cela se produit uniquement dans une
tâche NORMAL.
• Les instructions de déplacement peuvent uniquement être exécutées dans
la tâche de mouvement (la tâche est reliée à l’instance de programme 0, voir
Manuel de référence technique - Paramètres système).
• L’exécution de la tâche sera interrompue pendant que d’autres tâches
accèdent au système du fichier, c’est-à-dire si l’opérateur choisit de
sauvegarder ou d’ouvrir un programme, ou si le programme d’une tâche
utilise les instructions charger/effacer/lire/écrire.
• Le FlexPendant ne peut pas accéder aux tâches autres qu’une tâche
NORMAL. Donc, l'élaboration de programmes RAPID pour d'autres tâches
SEMISTATIC ou STATIC ne peut être réalisée que si le code est chargé dans
une tâche NORMAL, ou hors ligne.
Généralités
Pour utiliser cette fonction, le robot doit être configuré avec une TÂCHE
supplémentaire pour chaque programme supplémentaire. Chaque tâche peut être
du type NORMAL, STATIC ou SEMISTATIC.
Jusqu’à 20 tâches différentes peuvent être exécutées en pseudo parallèle. Chaque
tâche consiste en un ensemble de modules, comme pour le programme normal.
Tous les modules sont locaux dans chaque tâche.
Les variables, les constantes et les persistantes sont locales dans chaque tâche,
mais les persistantes globales ne le sont pas. Par défaut, une persistante est
globale si elle n’est pas déclarée en tant que LOCAL ou TASK. Une persistante
globale portant le même nom et type est accessible dans toutes les tâches,
c’est-à-dire qu’elle y est déclarée. Si deux persistantes globales portent le même
nom, mais le type ou taille (dimension de tableau) diffère, une erreur d’exécution
se produit alors.
Une tâche a sa propre gestion d’interruptions et les routines d’événement ne sont
déclenchées que par le système de leur propre tâche (par exemple,
Démarrage/Arrêt/Redémarrage ....).
Exemple
TÂCHE 1 :
MODULE module1
PERS bool startsync:=FALSE;
PROC main()
startsync:= TRUE;
ENDPROC
ENDMODULE
TÂCHE 2 :
MODULE module2
PERS bool startsync:=FALSE;
PROC main()
WaitUntil startsync;
ENDPROC
ENDMODULE
Exemple
TÂCHE 1 :
MODULE module1
PROC main()
SetDO do1,1;
ENDPROC
ENDMODULE
TÂCHE 2 :
MODULE module2
VAR intnum isiint1;
PROC main()
CONNECT isiint1 WITH isi_trap;
ISignalDO do1, 1, isiint1;
WHILE TRUE DO
WaitTime 200;
ENDWHILE
IDelete isiint1;
ENDPROC
TRAP isi_trap
.
ENDTRAP
ENDMODULE
Exemple
TÂCHE 1 :
MODULE module1
PERS bool startsync:=FALSE;
PERS string stringtosend:=””;
PROC main()
stringtosend:=”this is a test”;
startsync:= TRUE
ENDPROC
ENDMODULE
TASK 2:
MODULE module2
PERS bool startsync:=FALSE;
PERS string stringtosend:=””;
PROC main()
WaitUntil startsync;
!read string
IF stringtosend = “this is a test” THEN
...
ENDIF
ENDPROC
ENDMODULE
Type de tâche
Chaque tâche peut être du type NORMAL, STATIC ou SEMISTATIC.
Les tâches STATIC et SEMISTATIC sont démarrées au cours de la séquence de
démarrage du système. Si la tâche est du type STATIC, elle sera redémarrée à la
position actuelle (à l’endroit où se trouvait le PP lorsque le système a été mis hors
tension). Si le type est défini sur SEMISTATIC, la tâche sera démarrée à partir du
début à chaque mise sous tension, et les modules spécifiés dans les paramètres
du système seront rechargés si le fichier du module est plus récent que le module
chargé.
Les tâches du type NORMAL ne seront pas démarrées au démarrage. Elles sont
démarrées normalement, à partir du FlexPendant, par exemple.
Priorités
Pour exécuter les tâches par défaut, il suffit d’exécuter toutes les tâches de même
niveau en mode "round robbin" (un pas de base à chaque étape). Mais il est
possible de modifier le degré de priorité d’une tâche en plaçant la tâche en
arrière-plan d’une autre. L’arrière-plan n’est exécuté que quand l’avant-plan est
en attente d’un événement ou en arrêt d’exécution (au point mort). Un
programme-robot contenant des instructions de mouvement est la plupart du temps
au point mort.
L’exemple ci-dessous décrit quelques cas où le système a 10 tâches à réaliser
(voir la Figure 9).
Round robbin-chaîne 1 : les tâches 1, 2 et 9 sont occupées.
Round robbin-chaîne 2 : les tâches 1, 4, 5, 6 et 9 sont occupée, les tâches 2 et 3
sont au point mort.
Round robbin-chaîne 3 : les tâches 3, 5 et 6 sont occupée, les tâches 1, 2, 9 et 10
sont au point mort.
Round robbin-chaîne 4 : les tâches 7 et 8 sont occupée, les tâches 1, 2, 3, 4, 5, 6,
9 et 10 sont au point mort.
xx1100000589
TrustLevel
Le paramètre TrustLevel gère le comportement du système lorsqu'une tâche
SEMISTATIC ou STATIC est arrêtée ou ne peut pas être exécutée.
• SysFail - Il s’agit du comportement par défaut ; toutes les autres tâches
NORMAL s’arrêtent également et le système prend l’état SYS_FAIL. Tous
les ordres de pilotage manuel et de démarrage de programme seront rejetés.
Seul un nouveau démarrage à chaud permet de relancer le système. Ce
procédé doit être utilisé si la tâche possède certaines supervisions de
sécurité.
• SysHalt - Toutes les tâches NORMAL seront arrêtées. Le système est forcé
de passer en mode Moteurs désactivés. Lors du passage du système en
mode Moteurs désactivés, il est possible de piloter manuellement le robot,
mais une nouvelle tentative de démarrage du programme sera rejetée. Un
nouveau démarrage à chaud permet de relancer le système.
• SysStop - Toutes les tâches NORMAL seront arrêtées, mais peuvent être
redémarrées. Le pilotage manuel est également possible.
• NoSafety - Seule la tâche réelle concernée s’arrêtera.
Voir Manuel de référence technique - Paramètres système, rubrique Controller,
type Task.
Recommendation
Lorsque vous spécifiez des priorités de tâche, pensez aux points suivants :
• Toujours utiliser le mécanisme ou les boucles d’interruption avec retard dans
les tâches de supervision. Sinon, le FlexPendant n’aura jamais le temps de
communiquer avec l’utilisateur. De plus, si la tâche de supervision est en
avant-plan, elle n’autorisera jamais l’exécution d’une autre tâche en
arrière-plan.
1.21 Rétro-exécution
Description
Un programme peut être exécuté en sens inverse, en procédant à une instruction
à la fois. Les restrictions générales suivantes sont valables pour la rétro-exécution
:
• Il n'est pas possible de retourner en arrière à partir des instructions IF, FOR,
WHILE et TEST.
• Il n'est pas possible de retourner en arrière à partir d'une routine lorsque le
début de la routine est atteint.
• Les instructions relatives aux paramètres de mouvement, ainsi que d’autres
instructions concernant le mouvement, ne peuvent pas être exécutées vers
l’arrière. Si vous tentez d’exécuter une telle instruction, un avertissement
est inscrit dans le journal des événements.
• Lors de l'exécution des gestionnaires d’exécutions arrière et en présence
d'une erreur d'exécution, il ne sera pas possible de gérer l'erreur dans un
gestionnaire d'erreurs.
Exemple 1
PROC MoveTo ()
MoveL p1,v500,z10,tool1;
MoveC p2,p3,v500,z10,tool1;
MoveL p4,v500,z10,tool1;
BACKWARD
MoveL p4,v500,z10,tool1;
MoveC p2,p3,v500,z10,tool1;
MoveL p1,v500,z10,tool1;
ENDPROC
Lorsque la procédure est appelée pendant l’exécution vers l’avant, ce qui suit a
lieu :
MoveL p1,v500,z10,tool1;
MoveC p2,p3,v500,z10,tool1;
MoveL p4,v500,z10,tool1;
Exemple 2
PROC MoveTo ()
MoveL p1,v500,z10,tool1;
MoveC p2,p3,v500,z10,tool1;
MoveL p4,v500,z10,tool1;
BACKWARD
MoveL p4,v500,z10,tool1;
MoveC p2,p3,v500,z10,tool1;
MoveL p1,v500,z10,tool1;
ENDPROC
Lorsque la procédure est appelée pendant l’exécution vers l’avant, le code suivant
est exécuté (le code de la procédure jusqu'au gestionnaire d'instruction arrière) :
MoveL p1,v500,z10,tool1;
MoveC p2,p3,v500,z10,tool1;
MoveL p4,v500,z10,tool1;
Lorsque la procédure est appelée pendant l’exécution vers l’arrière, le code suivant
est exécuté (le code de la procédure jusqu'au gestionnaire d'instruction arrière) :
MoveL p4,v500,z10,tool1;
MoveC p2,p3,v500,z10,tool1;
MoveL p1,v500,z10,tool1;
xx1100000633
AVERTISSEMENT
Exemple
Cet exemple illustre le déroulement lorsque vous retournez en arrière via des
instructions de mouvement. Les pointeurs de programme et de mouvement vous
aident à suivre la position de l'exécution RAPID et celle du robot.
xx1100000634
A Pointeur de programme
B Pointeur de mouvement
C Mise en surbrillance de la valeur robtarget vers laquelle le robot se dé-
place ou qu’il a déjà atteinte.
Description
La position du robot et ses déplacements sont toujours fonction du point central
de l'outil (TCP). Le point est normalement défini comme se situant quelque part
sur l’outil, par exemple sur l’embout d’un pistolet à colle, au centre d’une pince ou
à l’extrémité d’un outil de nivellement.
Plusieurs TCP (outils) peuvent être définis, mais un seul à la fois pourra être actif.
Lorsqu’une position est enregistrée, c’est la position du TCP qui est enregistrée.
Il s’agit également du point qui se déplace le long d’une trajectoire donnée, à une
vitesse donnée.
Si le robot tient un objet de travail et travaille sur un outil stationnaire, un TCP fixe
est utilisé. Si cet outil est actif, la trajectoire et la vitesse programmées sont fonction
de l'objet de travail. Voir TCP fixes à la page 123.
Renseignements connexes
Décrit dans :
Définition du système de coordonnées atelier Manuel de référence technique - Paramètres
système
Définition du système de coordonnées utili- Manuel d’utilisation - IRC5 avec FlexPendant
sateur
Définition du système de coordonnées objet Manuel d’utilisation - IRC5 avec FlexPendant
Définition du système de coordonnées outil Manuel d’utilisation - IRC5 avec FlexPendant
Définition du point central de l'outil Manuel d’utilisation - IRC5 avec FlexPendant
Définition du référentiel de déplacement Manuel d’utilisation - IRC5 avec FlexPendant
Déplacement manuel dans des systèmes de Manuel d’utilisation - IRC5 avec FlexPendant
coordonnées différents
Description
La position de l’outil (TCP) peut être spécifiée dans différents systèmes de
coordonnées afin de faciliter la programmation et l'ajustement des programmes.
Le système de coordonnées défini dépend de ce que le robot doit faire.
Lorsqu’aucun système de coordonnées n’est défini, les positions du robot sont
définies à partir du système de coordonnées de base.
xx1100000611
xx1100000612
xx1100000613
xx1100000614
xx1100000615
xx1100000616
xx1100000617
Description
L’orientation d’un outil au niveau d’une position programmée correspond à
l’orientation du système de coordonnées outil. Le système de coordonnées outil
est référencé au système de coordonnées du poignet, défini au niveau du flasque
de montage du poignet du robot.
xx1600000580
xx1600000581
xx1600000582
TCP fixes
Si le robot tient un objet de travail et travaille sur un outil stationnaire, un TCP fixe
est utilisé. Si cet outil est actif, la trajectoire et la vitesse programmées sont fonction
de l'objet de travail tenu par le robot. Ceci signifie que les systèmes de coordonnées
seront inversés, tel qu'indiqué sur la figure ci-dessous.
La figure ci-dessous présente un TCP fixe, où le système de coordonnées objet
est basé sur le système de coordonnées poignet.
xx1100000635
xx1100000636
Le déplacement de programme peut également être utilisé avec des TCP fixes
2.2.1 Introduction
AVERTISSEMENT
Renseignements connexes
Voir :
Définition de la vitesse Manuel de référence technique - Instructions, fonctio-
ns et types de données RAPID
Définition des zones (trajectoires de Manuel de référence technique - Instructions, fonctio-
raccordement) ns et types de données RAPID
Instruction pour l'interpolation articu- Manuel de référence technique - Instructions, fonctio-
laire ns et types de données RAPID
Voir :
Instruction pour l'interpolation li- Manuel de référence technique - Instructions, fonctio-
néaire ns et types de données RAPID
Instruction pour l'interpolation circu- Manuel de référence technique - Instructions, fonctio-
laire ns et types de données RAPID
Instruction pour l'interpolation modi- Manuel de référence technique - Instructions, fonctio-
fiée ns et types de données RAPID
Singularité Singularités à la page 156
Exécution simultanée d'instructions Synchronisation avec les instructions logiques à la
du programme page 140
Optimisation du processeur Manuel de référence technique - Paramètres système
Interpolation articulaire
Lorsque la précision de la trajectoire n’est pas spécialement importante, ce type
de mouvement est utilisé pour déplacer l’outil rapidement d’une position à une
autre. Le mouvement articulaire permet également à un axe de se déplacer d’un
endroit à un autre au sein de sa zone de travail, en un seul mouvement.
Tous les axes se déplacent du point de départ jusqu’au point visé à une vitesse
d’axe constante, voir la figure ci-dessous.
Le mouvement articulaire est souvent la façon la plus rapide de se déplacer entre
deux points, car les axes du robot suivent la trajectoire la plus courte entre le point
de départ et le point visé (dans le contexte des angles de l’axe).
xx1100000637
Interpolation linéaire
Pendant l’interpolation linéaire, le TCP se déplace le long d’une ligne droite entre
le point de départ et les points visés.
xx1100000638
Pour obtenir une trajectoire linéaire dans le système de coordonnées objet, les
axes du robot doivent suivre une trajectoire non linéaire dans l’espace de l’axe.
Moins la configuration du robot est linéaire, plus des accélérations et des
décélérations sont requises pour que l’outil puisse se déplacer selon une ligne
droite et obtenir l’orientation souhaitée. Si la configuration est fortement non linéaire
Interpolation circulaire
Une trajectoire circulaire est définie à partir de trois positions programmées qui
définissent un segment de cercle. Le premier point devant être programmé est le
point de départ du segment de cercle. Le point suivant est un point de support
(point du cercle) utilisé pour définir les dimensions du cercle et le troisième point
représente la fin du cercle. Les trois points programmés devraient être répartis à
intervalles réguliers le long de l’arc de cercle afin que celui-ci soit le plus précis
possible.
L’orientation définie pour le point de support servira à sélectionner soit la torsion
courte, soit la torsion longue, pour l’orientation du point de départ au point visé.
Si l’orientation programmée est la même par rapport au cercle aux points de départ
et visé, et que l’orientation au point de support est proche de la même orientation
par rapport au cercle, celle de l’outil restera constante par rapport à la trajectoire.
La figure ci-dessous présente une interpolation circulaire d’une partie de cercle
(segment de cercle) avec un point de départ, un point de cercle et un point visé.
xx1100000639
xx1100000640
Tant que les couples de tous les moteurs ne dépassent pas les couples autorisés
maximum, l’outil se déplacera selon la vitesse programmée le long de l’arc de
cercle. Si le couple d’un des moteurs est insuffisant, la vitesse sera
automatiquement réduite sur les tronçons de la trajectoire circulaire où les
performances du moteur sont insuffisantes.
Tous les axes sont coordonnés afin d’obtenir une trajectoire indépendante de la
vitesse. L’accélération est optimisée automatiquement.
SingArea\Wrist
Lors de l’exécution à proximité d’un point singulier, l’interpolation linéaire ou
circulaire risque de poser des problèmes. Dans ce cas, il est préférable d’utiliser
l’interpolation modifiée, ce qui signifie que les axes du poignet sont interpolés axe
par axe, le TCP suivant une trajectoire linéaire ou circulaire. Toutefois, l’orientation
de l’outil sera quelque peu différente de l’orientation programmée. L’orientation
résultante du point programmé peut également être différente de l’orientation
programmée, en raison des deux singularités.
xx1100000641
La première singularité se présente lorsque le TCP est tout droit par rapport à l’axe
2 (a2 dans le schéma ci-dessus). Le TCP ne peut pas passer de l’autre côté de
l’axe 2; à la place, les axes 2 et 3 vont plier un peu plus pour maintenir le TCP du
même côté. L’orientation finale du déplacement sera éloignée par rapport à
l’orientation programmée de la même taille.
La seconde singularité se présente lorsque le TCP passe à proximité de l’axe 1
(z1 dans le schéma ci-dessus). Dans ce cas, l’axe 1 fera un demi-tour à vitesse
maximale et la réorientation de l’outil suivra de la même manière. Le sens du
retournement dépend du côté sur lequel va le TCP. Il est recommandé de changer
le mouvement articulaire (MoveJ) à proximité de l’axe z. Notez que c’est le TCP
qui fait la singularité, et non le WCP comme lorsque SingArea\Off est utilisé.
Dans le cas de SingArea\Wrist, l’orientation au point de support du cercle sera
la même que l’orientation programmée. Cependant, l’outil n’aura pas une direction
constante par rapport au plan du cercle comme dans le cas d’une interpolation
circulaire normale. Si la trajectoire circulaire passe par une singularité, l’orientation
aux positions programmées doit quelquefois être modifiée pour éviter les trop
grands mouvements du poignet qui peuvent se produire si une reconfiguration
complète du poignet est générée quand le cercle est exécuté (les articulations 4
et 6 tournant chacune de 180°).
Description
Des trajectoires de raccordement sont utilisées afin d’obtenir un mouvement continu
le long des positions programmées. Ainsi, on pourra passer des positions à grande
vitesse sans devoir réduire inutilement la vitesse. Un point de passage génère une
trajectoire parabolique au point. Le début et la fin de cette trajectoire de
raccordement sont obtenus en définissant une zone autour du point programmé.
Corner zone
for the TCP path Programmed
position
Corner path
xx1100000643
Tous les axes sont coordonnés afin d’obtenir une trajectoire indépendante de la
vitesse. La vitesse et l’accélération sont optimisées automatiquement.
xx1100000647 E
p1 p3
xx1100000649
Si une interpolation est changée d’un mouvement TCP normal en une réorientation
sans mouvement TCP ou réciproquement, aucune zone de raccordement ne sera
générée. Il en est de même si l’on change l’interpolation depuis ou vers un
mouvement articulaire externe sans mouvement du TCP.
Generated
path
p2 p4
p1
Programmed
position zone
p3
Corner zone as
calculated by the robot
xx1800000780
Remarque
Remarque
Programmed
corner zone p4
p3
xx1800002286
p1
Generated
p4
path
p3
Programmed Corner zone as
corner zone calculated by the robot
xx1800001538
Description
Un axe indépendant est un axe se déplaçant indépendamment des autres axes
dans le système de robot. Il est possible de passer un axe en mode autonome et
de repasser en mode normal ultérieurement.
Les instructions utilisées pour manœuvrer les axes indépendants sont spéciales.
Quatre instructions de mouvement différentes permettent de définir le mouvement
de l’axe. Par exemple, l’instruction IndCMove démarre un mouvement continu de
l’axe. L’axe continue alors de se déplacer à vitesse constante (indépendamment
de ce que fait le robot) jusqu’à ce qu’une nouvelle instruction “indépendante” soit
exécutée.
Pour repasser en mode normal, l’instruction de réinitialisation IndReset est utilisée.
Cette instruction peut aussi fixer une nouvelle référence pour le système de mesure,
une sorte de nouvelle synchronisation de l’axe. Quand un axe repasse en mode
normal, il fonctionne alors comme un axe normal.
Exécution du programme
Un axe passe immédiatement en mode autonome quand une instruction Ind_Move
est exécutée, même si l’exécution de l’instruction a lieu au cours d’un déplacement
de l’axe, comme quand un point précédent a été programmé en tant que point de
passage, ou lorsque l’exécution de programmes simultanés est utilisée.
Si une nouvelle instruction Ind_Move est exécutée avant que la précédente soit
finie, la nouvelle instruction est prioritaire par rapport à la précédente.
Si l’exécution d’un programme est arrêtée au cours du déplacement d’un axe
indépendant, cet axe s’arrête. Quand le programme est redémarré, l’axe
indépendant démarre automatiquement. Aucune coordination active entre les axes
indépendants et les axes en mode normal n’a lieu.
Le programme ne peut pas être redémarré après une perte de puissance, survenue
alors qu’un axe est en mode indépendant. Un message d’erreur est alors affiché
et le programme doit être redémarré du début.
Notez qu’une unité mécanique ne peut pas être désactivée si l’un de ses axes est
en mode autonome.
xx1100000652
Pilotage manuel
Les axes en mode indépendant ne peuvent pas être pilotés manuellement. Si l’on
essaie de manœuvrer l’axe manuellement, l’axe ne bouge pas et un message
d’erreur est affiché. Exécutez une instruction IndReset ou déplacez le pointeur
de programme sur Principal pour quitter le mode indépendant.
Rayon d'action
Le rayon d’action physique correspond au mouvement total de l’axe.
Le rayon d’action logique correspond au domaine utilisé par les instructions RAPID
et l’instruction de lecture dans la fenêtre de pilotage manuel.
Après synchronisation (compteur de tours mis à jour), les rayons d’action physique
et logique coïncident. Le rayon d’action logique peut être déplacé à l’aide de
l'instruction IndReset, voir la figure ci-dessous.
xx1100000653
Vitesse et accélération
En mode manuel à vitesse réduite, la vitesse est réduite à la vitesse qu’aurait l’axe
s’il fonctionnait en mode non-indépendant. Notez que la fonction IndSpeed ne
prend pas la valeur TRUE si la vitesse de l’axe est réduite.
L’instruction VelSet et la correction de vitesse, exprimée en pourcentage par
l’intermédiaire de la fenêtre de production, sont actives durant les mouvements
indépendants. Notez qu’une correction par l’intermédiaire de la fenêtre de
production empêche la fonction IndSpeed de prendre la valeur TRUE.
La valeur la plus basse d’accélération et de décélération spécifiée dans le fichier
de configuration est utilisée à la fois pour l’accélération et la décélération en mode
autonome. Cette valeur peut être réduite à l’aide de la valeur de rampe dans
l’instruction (1 - 100 %). L’instruction AccSet n’a aucune influence sur les axes
en mode autonome.
Axes du robot
Seul l’axe 6 du robot peut être utilisé comme axe indépendant. Normalement,
l’instruction IndReset est utilisée seulement pour cet axe. L’instruction IndReset
peut toutefois être aussi utilisée pour l’axe 4 des modèles IRB 1600, 2600 et 4600
(pas pour les versions ID). Si l’instruction IndReset est utilisée pour l’axe 4 du
robot, l’axe 6 ne doit pas être en mode autonome.
Si l’axe 6 est utilisé comme axe indépendant, des problèmes de singularité peuvent
se poser, puisque la fonction normale de transformation des coordonnées de l’axe
6 est toujours utilisée. Si un problème se pose, exécutez le même programme,
avec l’axe 6 en mode normal. Modifiez les points ou utilisez les instructions
SingArea\Wrist ou MoveJ.
L’axe 6 est aussi actif en interne, dans le calcul des performances de la trajectoire.
Cela a pour conséquence qu’un mouvement interne de l’axe 6 peut réduire la
vitesse des autres axes dans le système.
Le rayon d’action indépendant de l’axe 6 est défini avec les axes 4 et 5 en position
de repos. Si l’un des axes 4 ou 5 n’est pas en position de repos, le rayon d’action
de l’axe 6 est déplacé suite à l’accouplement du réducteur. La position de l’axe 6
lue sur le FlexPendant est toutefois compensée par les positions des axes 4 et 5
via l’accouplement du réducteur.
Description
Certaines applications nécessiteront un servomécanisme, qui fera office de ressort
mécanique. Dans ce cas, la force appliquée par le robot à l’objet travaillé
augmentera en fonction de la distance entre la position programmée (derrière
l’objet travaillé) et la position de contact (outil robot - objet travaillé).
Souplesse
La relation entre la déviation de position et la force est définie par un paramètre
appelé mollesse. Plus ce paramètre mollesse sera élevé, plus la déviation de
position requise pour obtenir la même force sera importante.
Ce paramètre mollesse est fixé dans le programme, et il est possible d’en changer
la valeur en n’importe quel point du programme. Différentes mollesses peuvent
être fixées pour différentes articulations, et il est également possible de mélanger
des articulations à servo normal et à servo mou.
L’activation et la désactivation du servo mou, ainsi que les changements des
valeurs de mollesse, peuvent être effectués pendant que le robot bouge. Un accord
est ensuite effectué entre les différents modes servo et entre les différentes valeurs
de la mollesse afin d’obtenir des transitions progressives. Le temps d’accord peut
être réglé dans le programme avec la rampe de paramètre. Avec ramp = 1, les
transitions prendront 0,5 seconde et, en général, le temps de transition sera égal
à ramp x 0.5 en secondes.
Remarque
La désactivation du servo mou ne devra pas être effectuée lorsqu’il y aura une
force entre le robot et l’objet travaillé.
Remarque
Les mollesses élevées présentent le risque que les déviations de position dues
au servo soient si élevées que les axes sortent du rayon d’action du robot.
Arrêts de mouvement
Un mouvement peut être arrêté de trois manières différentes :
• Dans le cas d’un arrêt normal, le robot s’arrête sur la trajectoire, ce qui facilite
le redémarrage.
• Dans le cas d’un arrêt accéléré, le robot s’arrête plus rapidement que dans
le cas d’un arrêt normal, mais la trajectoire de décélération ne suit pas la
trajectoire programmée. C’est le type d’arrêt utilisé par exemple pour un arrêt
recherche, lorsqu’il est important d’arrêter le mouvement dès que possible.
Dans le cas d’un arrêt accéléré, le robot s’arrête plus rapidement que dans
le cas d’un arrêt progressif, mais la trajectoire de décélération ne suit pas la
trajectoire programmée. C’est le type d’arrêt utilisé par exemple pour un arrêt
recherche, lorsqu’il est important d’arrêter le mouvement dès que possible.
• Dans le cas d’un arrêt rapide, les freins mécaniques sont appliqués pour
atteindre une distance de décélération qui doit être aussi courte que possible,
pour des raisons de sécurité. La déviation par rapport à la trajectoire est
généralement plus importante pour un arrêt rapide que pour un arrêt accéléré.
Démarrage de mouvement
Après un arrêt (quel qu’en soit le type), il est toujours possible d’effectuer un
redémarrage sur la trajectoire interrompue. Si le robot s’est arrêté en dehors de
la trajectoire programmée, ce redémarrage débutera par un retour à la position
sur la trajectoire à laquelle le robot aurait dû s'arrêter.
Un redémarrage à la suite d’une panne secteur est équivalent à un redémarrage
après un arrêt rapide. Notez que le robot revient toujours à la trajectoire avant que
l’exécution du programme interrompu ne reprenne, même dans les cas où la panne
secteur est intervenue pendant l’exécution d’une instruction logique. Au
redémarrage, toutes les durées sont comptées à partir du début; par exemple, un
positionnement à temps ou une interruption dans l’instruction WaitTime.
Instructions logiques
Les instructions sont normalement exécutées de manière séquentielle dans le
programme. Toutefois, les instructions logiques peuvent également être exécutées
sur des positions spécifiques ou en cours de déplacement.
Une instruction logique est une instruction qui ne déclenche pas de déplacement
du robot ou des axes supplémentaires, par exemple une instruction d'E/S.
xx1100000654
xx1100000655
xx1100000656
L’instant auquel elles sont exécutées (DT) dépend des composantes de temps
suivantes :
• Temps nécessaire au robot pour planifier le déplacement suivant : environ
0,1 s.
xx1100000657
xx1100000658
Les instructions qui affectent indirectement les déplacements (par exemple, ConfL
et SingArea), sont exécutées de la même façon que les autres instructions
logiques. Toutefois, elles n’affectent pas les déplacements demandés par des
instructions de positionnement précédentes.
Si plusieurs instructions de positionnement avec l’argument \Conc et plusieurs
instructions logiques d’une séquence longue sont mélangées, Les instructions
logiques sont exécutées directement dans l’ordre de programmation. Cette
opération a lieu en même temps que le déplacement, ce qui signifie que les
xx1100000659
Synchronisation de la trajectoire
Pour pouvoir synchroniser l’équipement de traitement (pour des applications telles
que l’encollage, la peinture et le soudage à l’arc) avec les mouvements du robot,
différents types de signal de synchronisation peuvent être générés.
Avec ce que l’on appelle un événement de position, un signal trigonométrique sera
créé lorsque le robot passera par une position définie sur la trajectoire. Avec un
événement de temps, un signal sera créé dans un temps prédéfini avant que le
robot s’arrête à une position d’arrêt. De plus, le système de commande traite
également les événements de balayage, qui génèrent des impulsions à des angles
de phase prédéfinis d’un mouvement de balayage.
Tous les signaux synchronisés avec la position peuvent être créés aussi bien avant
(temps d’avance) qu’après (temps de retard) le moment où le robot passe par la
position prédéfinie. La position est donnée par une position programmée et elle
peut être réglée comme une distance de trajectoire avant la position programmée.
La précision standard de répétition pour un jeu de sorties numériques sur la
trajectoire est de +/- 2 ms.
Si une panne secteur intervient au cours de l’exécution d’une instruction Trigg,
tous les événements déclenchés seront recréés sur la trajectoire restante de
déplacement pour l’instruction Trigg.
Suite page suivante
142 Manuel de référence technique - Vue d’ensemble de RAPID
3HAC050947-004 Révision: N
© Copyright 2004-2022- ABB. Tous droits réservés.
2 Programmation de mouvement et d'E/S
2.3 Synchronisation avec les instructions logiques
Suite
Renseignements connexes
Voir :
Instructions de positionnement Mouvement à la page 58
Définition de la dimension d’une zone Manuel de référence technique - Instructions, fonc-
tions et types de données RAPID
xx1100000660
xx1100000661
Cela peut aussi être obtenu en faisant tourner la partie avant du bras supérieur du
robot (axe 4) pour la mettre « tête en bas » et en faisant tourner les axes 5 et 6
jusqu’à la position et l’orientation souhaitées.
xx1100000662
xx1100000663 xx1100000664
Rotation d’un quart de tour pour un angle Rotation d’un quart de tour pour un angle
d’articulation positif d’articulation négatif
Renseignements connexes
Voir :
Définition d'une configuration de robot Manuel de référence technique - Instructions,
fonctions et types de données RAPID
Activation/désactivation de la supervision Mouvement à la page 58
de la configuration
Cinématique de robot
La position et l’orientation d’un robot sont déterminées à partir du modèle
cinématique de sa structure mécanique. Pour chaque installation, il est nécessaire
que les modèles des unités mécaniques spécifiques soient définis. Pour les robots
ABB principal et externe, ces modèles sont prédéfinis dans la baie.
Robot principal
Le modèle cinématique du robot principal modélise la position et l’orientation de
l’outil du robot par rapport à sa base comme une fonction des angles des
articulations du robot.
Les paramètres de cinématique spécifiant les longueurs de bras, les écarts et le
comportement aux articulations sont prédéfinis dans le fichier de configuration de
chaque type de robot.
xx1100000666
xx1100000667
Robot externe
La coordination avec un robot externe nécessite également un modèle cinématique
pour le robot externe. Un certain nombre de classes prédéfinies de structures
mécaniques dimensionnelles 2 et 3 est permis.
La figure ci-dessous présente une structure cinématique d’un robot ORBIT 160B
utilisant un modèle prédéfini.
xx1100000668
xx1100000669
xx1100000670
Cinématique générale
Les structures mécaniques non prises en charge par les structures prédéfinies
peuvent être modélisées à l’aide d’un modèle de cinématique générale. Ceci est
possible pour les robots externes.
La modélisation est basée sur la convention Denavit-Hartenberg, d’après l’ouvrage
Introduction to Robotics, Mechanics & Control de John J. Craigh (Addison-Wesley
1986).
La figure ci-dessous présente une structure cinématique d’un robot ORBIT 160B
utilisant un modèle cinématique général.
xx1100000671
xx1100000672
Renseignements connexes
Voir :
Définition de la cinématique générale d'un Manuel de référence technique - Paramètres
robot externe système
Introduction
Supervision du déplacement est le nom donné à un ensemble de fonctions
permettant un contrôle très précis du robot et de ses mouvements en fonction du
modèle. La supervision du déplacement comprend la fonctionnalité de détection
des collisions, des blocages et des définitions incorrectes de charge. Cette
fonctionnalité est appelée détection de collision (option Collision Detection).
La détection de collision peut se déclencher si les charges montées sur le robot
ne sont pas correctement définies. Il s’agit des données de charge des outils, des
charges utiles et des charges des bras. Si les données de l’outil ou de la charge
utile ne sont pas connues, la fonction d’identification de charge peut être utilisée
pour les définir. Les données de charge des bras ne peuvent pas être identifiées.
Lorsque la détection des collisions est déclenchée, le robot s’arrête le plus vite
que possible. Par défaut, les couples sont inversés et les freins sont appliqués,
mais il est également possible de configurer un arrêt qui n’utilise pas les freins.
Par défaut, le contrôle de mouvement est actif uniquement lorsqu'au moins un axe
(y compris les axes supplémentaires) est en mouvement. Lorsque tous les axes
sont immobiles, la fonction est désactivée. Ceci afin d'éviter le déclenchement
inutile dû à des forces de processus externes. Le paramètre Collision detection at
standstill permet de détecter une collision, même à l'arrêt, voir Manuel de référence
technique - Paramètres système.
xx1100000674
Sorties numériques
La sortie numérique MotSupOn est élevée lorsque la fonction de détection de
collision est active. Elle est faible lorsque cette dernière n’est pas active. Remarque
: une modification de l’état de la fonction devient effective dès qu’un déplacement
est commencé. C’est pourquoi MotSupOn est élevée si la détection de collision
est active et le robot en déplacement. Si le robot est arrêté et la fonction désactivée,
MotSupOn demeure élevée. Lorsque le robot commence à se déplacer, MotSupOn
devient faible.
La sortie numérique MotSupTrigg augmente lorsque la détection de collision se
déclenche. Elle reste élevée jusqu’à ce que le code d’erreur soit acquitté depuis
le FlexPendant ou depuis l’entrée numérique AckErrDialog.
Les sorties numériques sont décrites en détail dans les sections Manuel
d’utilisation - IRC5 avec FlexPendant et Manuel de référence technique - Paramètres
système.
Limitations
La supervision du déplacement est disponible uniquement pour les axes du robot.
Elle n’est pas disponible pour les axes de translation, les stations périphériques
ou tout autre manipulateur externe.
La détection de collision est désactivée lorsqu’un axe au minimum se trouve en
mode d’articulation indépendante. C’est aussi le cas lorsqu’il s’agit d’un axe
supplémentaire utilisé comme une articulation indépendante.
La détection de collision peut se déclencher lorsque le robot est utilisé en mode
de servo mou. C’est pourquoi il est recommandé de désactiver la détection de
collision lorsque le robot est en mode de servo mou.
Si l’instruction RAPID MotionSup est utilisée pour désactiver la détection de
collision, elle devient effective uniquement lorsque le robot commence à se
Renseignements connexes
Voir :
Instruction RAPID MotionSup Mouvement à la page 58
Paramètres de mise au point du système Manuel de référence technique - Paramètres
système
Signaux d'E/S de supervision de mouve- Manuel de référence technique - Paramètres
ment système
Détection de collision à l'arrêt Manuel de référence technique - Paramètres
système
Arrêt anti-collision indépendant sans frein Manuel de référence technique - Paramètres
système
Identification de la charge Manuel d’utilisation - IRC5 avec FlexPendant
2.7 Singularités
Description
Certaines positions au sein de l’espace de travail du robot peuvent être obtenues
à l’aide d’un nombre infini de configurations de robot permettant de positionner et
d’orienter l’outil. Ces positions, que l’on appelle points singuliers (singularités),
constituent un problème lorsqu’on doit calculer les angles du bras du robot à partir
de la position et de l’orientation de l’outil.
Généralement, un robot comporte deux types de singularité : singularités du bras
et singularités du poignet.
Les singularités du bras sont toutes les configurations où le centre du poignet (les
intersections des axes 4, 5 et 6) se trouvent directement au-dessus de l'axe 1. Les
singularités du poignet correspondent aux configurations pour lesquelles les axes 4
et 6 se situent sur la même ligne, l’angle de l'axe 5 étant alors égal à 0.
xx1100000676
xx1100000677
Renseignements connexes
Voir :
Contrôle du comportement du robot à Manuel de référence technique - Instructions,
proximité des points singuliers fonctions et types de données RAPID
Description
L’accélération et la vitesse du robot sont contrôlées, de manière continue, afin de
ne pas dépasser les limites définies.
Les limites sont définies par le programme de l’utilisateur (par exemple, vitesse
programmée ou AccSet) ou par le système lui-même (par exemple, couple maximal
dans un réducteur ou un moteur, contrainte ou couple maximal dans la structure
du robot).
Accélération du TCP
L’accélération et la vitesse du TCP sont contrôlées par le planificateur de trajectoire,
avec l’aide d’un modèle dynamique complet des bras du robot, incluant les charges
définies par l’utilisateur.
L’accélération et la vitesse du TCP dépendent de la position, de la vitesse et de
l’accélération de tous les axes à tout moment ; l’accélération réelle varie donc de
manière continue. De cette manière, on obtient un temps de cycle optimal,
c'est-à-dire qu'au moins une des limites se trouve à sa valeur maximale à chaque
instant. Cela signifie que les moteurs et la structure du robot sont utilisés à tout
moment au maximum de leur capacité.
AVERTISSEMENT
Pour des raisons de sécurité, ce logiciel ne doit pas être utilisé pour la protection
des individus. Pour ce faire, utilisez un équipement de protection matérielle.
xx1100000678
Une zone atelier peut être définie comme étant à l’intérieur ou à l’extérieur d’une
boîte, d’une sphère ou d’un cylindre.
Une zone atelier peut également être définie pour les articulations. La zone doit
être définie entre (intérieur) ou pas entre (extérieur) deux valeurs d’articulation
pour n’importe quel robot ou axe supplémentaire.
xx1100000679
Le mouvement du point central de l’outil est supervisé, ainsi que tous les autres
points du robot.
Le TCP est toujours supervisé, quel que soit le mode de fonctionnement, pendant
l'exécution d'un programme ou au cours d'un pilotage manuel par exemple.
TCP fixes
Si le robot tient un objet de travail et travaille sur un outil stationnaire, un TCP fixe
est utilisé. Si cet outil est actif, il ne se déplace pas et, s’il se trouve à l’intérieur
d’une zone atelier, il y reste.
Actions
Définir une sortie numérique lorsque le TCP est à l'intérieur d'une zone atelier.
Cette action définit une sortie numérique lorsque le TCP est à l’intérieur d’une
zone atelier. Elle est utile pour indiquer que le robot s’est arrêté dans une zone
spécifique.
xx1100000680
Définir une sortie numérique avant que le TCP n’atteigne une zone atelier.
Cette action définit une sortie numérique avant que le TCP n’atteigne une zone
atelier. Elle peut être utilisée pour arrêter le robot juste à l'intérieur de la zone
atelier.
xx1100000681
xx1100000682
Si le robot a été déplacé dans une zone atelier définie comme étant en dehors de
la zone de travail, par exemple en desserrant les freins et en le poussant
manuellement, la seule façon de sortir le robot de la zone est d’utiliser le pilotage
manuel ou de le pousser manuellement, les freins desserrés.
xx1100000683
Si la même sortie numérique est utilisée pour plus d’une zone atelier, la distance
entre les zones doit être supérieure à la taille minimale indiquée dans le tableau
ci-dessus, afin d’éviter que la sortie n’ait une valeur incorrecte.
Il est possible que le robot passe par un coin d'une zone sans la voir si le temps
que passe le robot dans la zone est trop court. Assurez-vous donc que la zone est
plus grande que la zone dangereuse.
xx1100000684
Si les zones atelier sont utilisées avec un servo mou, la taille de la zone doit être
augmentée de façon à compenser le décalage du servo mou. Le décalage du servo
mou est la distance entre le TCP du robot et la supervision de la zone atelier au
temps d’interpolation. Le décalage du servo mou sera augmenté avec davantage
de souplesse définie via l'instruction SoftAct.
Renseignements connexes
Description
Généralement, le robot comporte une carte E/S ou plus. Chaque carte comporte
plusieurs canaux numériques et/ou analogiques qui doivent être connectés à des
signaux logiques avant de pouvoir être utilisés. Ceci est effectué au niveau des
paramètres du système et, généralement, a déjà été effectué à l’aide de noms
standard lorsque le robot est livré. Vous devez toujours utiliser des signaux logiques
en cours de programmation.
Un canal physique peut être connecté à plusieurs signaux logiques, mais peut
également ne pas avoir de connexions logiques, comme indiqué à la figure
ci-dessous.
Pour que vous puissiez utiliser une carte d'E/S, ses canaux doivent recevoir des signaux logiques
déterminés. Sur la figure ci-dessous, la sortie physique 2 est connectée à deux signaux logiques
différents. Par contre, IN16 n’a pas de signal logique et ne peut donc pas être utilisée.
xx1100000685
xx1100000686
Signaux système
Les signaux logiques peuvent être interconnectés à l’aide de fonctions système
spéciales. Si, par exemple, une entrée est connectée à la fonction système Start,
un démarrage de programme est automatiquement généré dès que cette entrée
est validée. Ces fonctions système sont généralement uniquement validées en
mode automatique.
Interconnexions
Les signaux logiques peuvent être interconnectés de façon à ce qu’ils influent
automatiquement les uns sur les autres :
• Un signal de sortie peut être connecté à un ou plusieurs signaux d’entrée
ou de sortie.
• Un signal d’entrée peut être connecté à un ou plusieurs signaux d’entrée ou
de sortie.
• Si le même signal est utilisé sur plusieurs interconnexions, la valeur de ce
signal est la dernière valeur établie (changée).
• Les interconnexions peuvent être reliées. Autrement dit, une interconnexion
peut en influencer une autre. Toutefois, elles en doivent pas être connectées
de façon à former un "cercle vicieux" ; par exemple, interconnecter di1 à
di2 alors que di2 est interconnecté à di1.
• S’il y a une interconnexion sur un signal d’entrée, la connexion physique
correspondante est automatiquement invalidée. Tout changement apporté
à ce canal physique ne sera par conséquent pas détecté.
• Les impulsions ou les délais ne sont pas transmis via les interconnexions.
• Les conditions logiques peuvent être définies à l’aide de NOT, AND, et OR.
Exemples Description
di2=di1 Si di1 change, di2, di3 et do4 seront modifiés vers la valeur
di3=di2 correspondante.
do4=di2
do8=do7 Si do7 est défini sur 1, do8 sera également défini sur 1. Si di5 est
do8=di5 ensuite défini sur 0, do8 sera également modifié (bien que do7 soit
toujours défini sur 1).
do5 = di6 AND do5 est défini sur 1 si di6 et do1 sont définis sur 1.
do1
Limitations
Un maximum de 10 signaux peuvent être pulsés en même temps et un maximum
de 20 signaux peuvent être retardés en même temps.
Renseignements connexes
Décrit dans :
Définition des cartes et signaux d'E/S Manuel de référence technique - Paramètres sys-
tème
Instructions de gestion d’E/S Signaux d'entrée et de sortie à la page 67
Manipulation manuelle d'E/S Manuel d’utilisation - IRC5 avec FlexPendant
3 Glossaire
Glossaire
Terme Description
Argument Les parties d'une instruction qui peuvent être modifiées, c'est à
dire n'importe quoi, à l'exception du nom de l'instruction.
Mode automatique Le mode en application lorsque le sélecteur du mode de fonctio-
nnement est réglé sur .
xx1100000688
xx1100000687
Terme Description
Unité mécanique Un groupe d'axes supplémentaires.
Module Un groupe de routines et de données, c'est-à-dire une partie du
programme.
Moteurs en marche/à l’ar- L’état du robot, c'est-à-dire si l’alimentation électrique des mo-
rêt teurs est enclenchée ou non.
Panneau de commande Le panneau situé à l'avant du contrôleur.
Orientation Le sens d'un outil terminal.
Paramètre Les données d’entrée d’une routine, envoyées avec un appel
de routine. Elles correspondent à l’argument d’une instruction.
Persistante Une variable dont la valeur est persistante.
Procédure Une routine qui, lorsqu’elle est appelée, peut former une instru-
ction indépendamment.
Programme L’ensemble d’instructions et de données qui définissent la tâche
du robot.
Cependant, les programmes ne contiennent pas de modules
système.
Données de programme Données auxquelles on peut accéder dans un module complet
ou dans le programme complet.
Module de programme Module inclus dans le programme du robot et transféré lors de
la copie du programme sur une disquette.
Enregistrement Un type de données composé.
Routine Un sous-programme.
Données de routine Données locales qui ne peuvent être utilisées que dans une
routine.
Point de départ L’instruction qui sera exécutée en premier lieu lors du démarrage
de l’exécution du programme.
Point d'arrêt Point auquel le robot s'arrête avant de passer au point suivant.
Module de système Un module qui est toujours présent dans la mémoire du progra-
mme. Lors de la lecture d’un nouveau programme, le module
système reste dans la mémoire du programme.
Paramètres système Les paramètres qui définissent l’équipement du robot et ses
propriétés ; en d’autres termes, ce sont les données de configu-
ration.
Point central de l'outil Point (généralement situé sur la pointe d'un outil) qui se déplace
(TCP) le long de la trajectoire programmée à la vitesse programmée.
Routine d'interruption La routine qui définit la marche à suivre lorsque survient une
interruption spécifique.
Variable Données qui peuvent être modifiées dans un programme, mais
qui perdent leur valeur (reviennent à leur valeur initiale) lorsqu'un
programme est redémarré depuis le début.
Zone L’espace sphérique qui entoure un point de passage. Dès que
le robot pénètre dans cette zone, il commence à se déplacer
jusqu’à la position suivante.
données, 30 N
globale niveau d'exécution, 96
routine, 21 NOT, 38
glossaire, 169 num, 51
groupe de signaux, 169 numéros d'erreur, 81
H O
horloge, 88 OR, 38
orientation, 170
I
I/O communication avec dispositif d’E/S, 72 P
identificateurs, 13 panneau de commande, 170
identification de charge, 64 paramètre, 22, 170
informations d'entretien, 97 paramètres de mouvement
INOUT, 22 instructions, 53
instructions paramètres optionnels, 22
déroulement de programme, 48 paramètres système, 170
description, 11 PERS, 33
listes de sélection, 47 persistante, 30, 170
instructions de communication, 71 persistantes, 33
instructions de déplacement, 58 valeurs d'initialisation, 34
instructions de déroulement de programme, 48 point central de l'outil, 113, 170
instructions de fichier, 72 point d'arrêt, 170
instructions de positionnement, 58 point de départ, 170
instructions de recherche, 59 point de passage, 130, 140, 169
instructions de temps, 88 principes d’E/S, 165
instructions d’attente, 50 priorité
instructions mathématiques, 90 opérateurs, 44
interconnexions, 167 tâches, 106
interpolation, 126, 130 priorité opérateur, 44
interpolation articulaire, 126 procédure, 21, 170
interpolation circulaire, 127 programme, 17, 170
interpolation linéaire, 126
interpolation linéaire modifiée, 129 R
interruption, 169 récupération d'erreur, 81
interruptions, 59, 76 redémarrer le contrôleur, 95
règles de syntaxe, 9
J Respect de la casse, 12
journal des événements, 84 rétro-exécution, 108
robot à liaison sérielle, 157
L rotations d’un quart de tour, 145
listes de sélection, 47 routine, 21, 170
local routine d'interruption, 21, 170
données, 30 routine principale, 17, 169
locale routines
routine, 21 description, 11
routines d'interruption, 76, 79
M
marques de réservation, 15 S
mémoire, 95 servocommande de suivi, 64
MOD, 38 servo mou, 56, 138
mode automatique, 169 signaux, 67, 165
modèles cinématiques, 148 signaux d'E/S, 67
mode manuel, 169 signaux d'entrée, 67
module, 170 signaux de sortie, 67
module de programme, 17, 170 singularité, 129
modules, 17 singularités, 156
description, 17 string, 51
module système, 18, 170 suivi de convoyeur, 63
moteurs en marche/à l’arrêt, 170 supervision
mots réservés, 13 de la configuration du robot, 145
mouvement, 58 supervision de déplacement, 152
mouvement articulaire, 126 supervision de la configuration du robot, 145
mouvement circulaire, 127 switch, 23, 51
mouvement linéaire, 126 synchronisation, 140
MultiMove, 61, 103 synchronisation d'E/S, 140
Multitâche, 102 synchronisation de capteur, 64
T U
tableaux UNDO, 85
expressions, 40 unité mécanique, 170
variables, 32 User module système, 20
tâches, 96, 102
task selection panel, 96 V
TCP, 113, 170 valeurs logiques, 14
fixe, 123 valeurs numériques, 14
TCP fixe, 123 VAR, 31
total, 28 variable, 30, 170
totaux variables, 31
expressions, 41 tableaux, 32
trajectoire de raccordement, 130, 169 valeurs d'initialisation, 34
trajectoire interrompue, 65
type d'événement, 96 X
type de données atomique, 28 XOR, 38
types de données, 28
atomique, 28 Z
composantes, 28 zone, 130, 170
enregistrement, 28 zones atelier, 56, 160
ABB AS
Robotics & Discrete Automation
Nordlysvegen 7, N-4340 BRYNE, Norway
Box 265, N-4349 BRYNE, Norway
Telephone: +47 22 87 2000
ABB Inc.
Robotics & Discrete Automation
1250 Brown Road
Auburn Hills, MI 48326
USA
Telephone: +1 248 391 9000
[Link]/robotics
3HAC050947-004, Rev N, fr