linuxcnc2hal_fr.txt
1 :lang: fr 2 :toc: 3 4 = LinuxCNC et HAL 5 6 [[cha:LinuxCNC-et-HAL]] 7 8 Voir également la man page 'motion(9)'. 9 10 [[sec:Motion]] 11 == motion (temps réel) 12 (((Motion))) 13 14 Ces pins et paramètres sont créés par le module temps réel 'motmod'. 15 Ce module fourni une interface vers HAL pour le planificateur de mouvements de 16 LinuxCNC. En gros, motmod prends dans une liste de points de cheminement 17 et génère un flux de positions respectant les limites de contrainte des 18 articulations. Ce flux sera reçu simultanément par tous les pilotes de moteurs. 19 20 Optionnellement le nombre d'E/S numériques est fixé avec 'num_dio'. 21 Le nombre d'E/S analogiques est fixé avec 'num_aio'. Le nombre par défaut est 4 22 de chaque. 23 24 Les noms de pin commençant par 'axis' sont actuellement des valeurs 25 d'articulations, mais les pins et les paramètres sont également appelés 'axis.N'. 26 Ils sont lus et mis à jour par la fonction 'motion-controller'. 27 28 'motion' est chargé par la commande 'motmod'. 29 La cinématique doit être chargée avant motion. 30 31 ---- 32 loadrt motmod [base_period_nsec=period] [servo_period_nsec=period] \ 33 [traj_period_nsec=period] [num_joints=[0-9] ([num_dio=1-64] num_aio=1-16])] 34 ---- 35 36 * 'base_period_nsec = 50000' - période de 'Base' des tâches, en nanosecondes. 37 C'est le 'thread' le plus rapide de la machine. 38 39 [NOTE] 40 Sur les systèmes à base de servomoteurs, il n'y a généralement aucune raison 41 d'avoir une valeur 'base_period_nsec' inférieure à celle de 'servo_period_nsec'. 42 Sur les machines avec une génération de pas logicielle, la valeur de 43 'base_period_nsec' détermine le nombre maximum de pas par seconde. En l'absence 44 de la nécessité d'une grande durée de pas ou d'un grand écart entre pas, le 45 taux maximum de pas est de un pas par 'base_period_nsec'. Ainsi, la 46 _base'period'nsec_ ci-dessus donnera un taux maximum absolu de 20000 pas 47 par seconde. 50000ns (50 µs) est une valeur assez prudente. La plus petite 48 valeur utilisable est relative au résultat du test de latence, à la 49 longueur de pas nécessaire et à la vitesse du processeur. 50 Choisir une 'base_period_nsec' trop basse peut entrainer l'arrivée du message 51 "Unexpected real time delay" ou "délai temps réel inattendu", le blocage de la 52 machine ou son redémarrage spontané. 53 54 * 'servo_period_nsec = 1000000' - C'est la période de la tâche 'Servo' en 55 nanosecondes. Cette valeur doit être arrondie à un entier multiple de 56 'base_period_nsec'. Cette période est utilisée même sur les systèmes à 57 moteurs pas à pas. 58 + 59 C'est la vitesse à laquelle sont calculées les nouvelles positions des moteurs, 60 que l'erreur de suivi est calculée, que les valeurs de sortie des PID sont 61 rafraichies et ainsi de suite. Les valeurs par défaut conviennent pour la 62 plupart des systèmes. C'est le taux de rafraichissement du planificateur de 63 mouvement de bas niveau. 64 65 * 'traj_period_nsec = 100000' - C'est la période, en nanosecondes, du 66 planificateur de mouvement. Cette valeur doit être arrondie à un entier 67 multiple de 'servo_period_nsec'. Excepté pour les machines ayant une 68 cinématique particulière (ex: hexapodes) cette valeur n'a pas de raison 69 d'être supérieure à celle de 'servo_period_nsec'. 70 71 === Options 72 73 Si le nombre d'entrées/sorties numériques demandées est supérieur à la valeur 74 par défaut de 4, il est possible d'en ajouter jusqu'à 64 en utilisant 75 l'option num_dio au chargement de motmod. 76 77 Si le nombre d'entrées/sorties analogiques demandées est supérieur à la 78 valeur par défaut de 4, il est possible d'en ajouter jusqu'à 16 en utilisant 79 l'option num_aio au chargement de motmod. 80 81 === Pins (((motion (hal pins)))) 82 83 * 'motion.adaptive-feed' - 84 (float, in) Quand la vitesse est placée en mode adaptatif avec 85 'M52 P1' la vitesse commandée est multipliée par cette valeur. Cet 86 effet est 87 multiplicatif avec 'motion.feed-hold' et la valeur du correcteur de 88 vitesse du niveau NML. 89 Les valeurs de 'motion.adaptive-feed' doivent être dans comprises 90 entre -1 (pleine vitesse arrière) et 1 (pleine vitesse). Une valeur du nulle 91 correspond à l'arrêt du mouvement. 92 93 * 'motion.analog-in-00' - 94 (float, in) Ces pins (00, 01, 02, 03 ou plus si configurées) sont 95 contrôlées par 'M66'. 96 97 * 'motion.analog-out-00' - 98 (float, out) Ces pins (00, 01, 02, 03 ou plus si configurées) sont contrôlées par 'M67' ou 'M68'. 99 100 * 'motion.coord-error' - 101 (bit, out) TRUE quand le mouvement est en erreur, ex: dépasser une 102 limite logicielle. 103 104 * 'motion.coord-mode' - 105 (bit, out) TRUE quand le mouvement est en 'mode coordonnées' par 106 opposistion au 'mode téléopération'. 107 108 * 'motion.current-vel' - 109 (float, out) La vitesse courante de l'outil. 110 111 * 'motion.digital-in-00' - 112 (bit, in) Ces pins (00, 01, 02, 03 ou plus si configurées) sont contrôlées par 'M62' à 'M65'. 113 114 * 'motion.digital-out-00' - 115 (bit, out) Ces pins (00, 01, 02, 03 ou plus si configurées) sont controlées par 'M62' à 'M65'. 116 117 * 'motion.distance-to-go' - 118 (float, out) Distance restante pour terminer le mouvement courant. 119 120 * 'motion.enable' - 121 (bit, in) Si ce bit devient FALSE, les mouvements s'arrêtent, la 122 machine est placée dans l'état “machine arrêtée” et un message est 123 affiché pour l'opérateur. En fonctionnement normal, ce bit devra être 124 mis TRUE. 125 126 * 'motion.feed-hold' - 127 (bit, in) Quand la vitesse est placée en mode arrêt contrôlé avec 128 'M53 P1' et que ce bit est TRUE, la vitesse est fixée à 0. 129 130 * 'motion.motion-inposition' - 131 (bit, out) TRUE si la machine est en position. 132 133 * 'motion.motion-enabled' - 134 (bit, out) TRUE quand l'état de la machine est 'machine on'. 135 136 * 'motion.on-soft-limit' - 137 (bit, out) TRUE quand la machine est sur une limite logicielle. 138 139 * 'motion.probe-input' - 140 (bit, in) 'G38.x' utilise la valeur de cette pin pour déterminer 141 quand la sonde de mesure a touché. TRUE le contact de la sonde est fermé 142 (touche), FALSE le contact de la sonde est ouvert. 143 144 * 'motion.program-line' - 145 (s32, out) La ligne en cours d'exécution pendant le déroulement du programme. 146 Zéro si pas en marche ou entre deux lignes, pendant le changement de pas de programme. 147 148 * 'motion.requested-vel' - 149 (float, out) La vitesse courante requise en unités utilisateur par seconde selon le réglage F=n du fichier G-code. Les correcteurs de vitesse et autres ajustements ne s'appliquent pas à cette pin. 150 151 * 'spindle.N.at-speed' - 152 (bit, in) Les mouvements passent en pause tant que cette pin est TRUE, 153 sous les conditions suivantes: avant le premier mouvement d'avance 154 suivant chaque démarrage de broche ou changement de vitesse; après le 155 démarrage de tout enchainement de mouvements avec broche synchronisée; 156 et si en mode CSS, à chaque transition avance rapide -> avance travail. 157 Cette entrée peut être utilisée pour s'assurer que la broche a atteint 158 sa vitesse, avant de lancer un mouvement d'usinage. Elle peut également 159 être utilisée sur un tour travaillant en mode CSS, au passage d'un 160 grand diamètre à un petit, pour s'assurer que la vitesse a été 161 suffisamment réduite avant la prise de passe sur le petit diamètre et 162 inversement, lors du passage d'un petit diamètre vers un grand, pour 163 s'assurer que la vitesse a été suffisamment augmentée. Beaucoup de 164 variateurs de fréquence disposent d'une sortie 'vitesse atteinte'. 165 Sinon, il est facile de générer ce signal avec le composant 'near', par 166 comparaison entre la vitesse de broche demandée et la vitesse actuelle. 167 168 * 'spindle.N.brake' - 169 (bit, out) TRUE quand le frein de broche doit être activé. 170 171 * 'spindle.N.forward' - 172 (bit, in) TRUE quand la broche doit tourner en sens horaire. 173 174 * 'spindle.N.index-enable' - 175 (bit, I/O) Pour les mouvements avec broche synchronisée, ce signal 176 doit être raccordé à la pin 'index-enable' du codeur de broche. 177 178 * 'spindle.N.on' - 179 (bit, out) TRUE quand la broche doit tourner. 180 181 * 'spindle.N.reverse' - 182 (bit, out) TRUE quand la broche doit tourner en sens anti-horaire. 183 184 * 'spindle.N.revs' - 185 (float, in) Pour le bon fonctionnement des mouvements avec broche 186 synchronisée, ce signal doit être raccordé à la broche 'position' du 187 codeur de broche. La position donnée par le codeur de broche doit être 188 étalonnée pour que 'spindle-revs' augmente de 1.0 pour chaque tour de 189 broche dans le sens horaire ('M3'). 190 191 * 'spindle.N.speed-in' - 192 (float, in) Donne la vitesse actuelle de rotation de la broche 193 exprimée en tours par seconde. Elle est utilisée pour les mouvements en 194 unités par tour ('G95'). Si le pilote du codeur de broche ne dispose pas 195 d'une sortie 'vitesse', il est possible d'en générer une en passant la 196 position de la broche au travers d'un composant ddt. Si la machine n'a pas de 197 codeur de broche, il est possible d'utiliser 'spindle.N.speed-out-rps'. 198 199 * 'spindle.N.speed-out' - 200 (float, out) Consigne de vitesse de rotation de la broche, exprimée en 201 tours par minute. Positive pour le sens horaire ('M3'), négative pour le 202 sens anti-horaire ('M4'). 203 204 * 'spindle.N.speed-out-abs' - 205 (float, out) Consigne de vitesse absolue de rotation de la broche, exprimée 206 en tours par minute. Toujours positive, quel que soit le sens de rotation. 207 208 * 'spindle.N.speed-out-rps' - 209 (float, out) Consigne de vitesse de rotation de la broche, exprimée en 210 tours par seconde. Positive pour le sens horaire ('M3'), négative pour le 211 sens anti-horaire ('M4'). 212 213 * 'spindle.N.speed-out-rps-abs' - 214 (float, out) Consigne de vitesse absolue de rotation de la broche, exprimée 215 en tours par seconde. Toujours positive, quel que soit le sens de rotation. 216 217 * 'motion.teleop-mode' - 218 (bit, out) TRUE quand motion est en 'mode téléopération', par opposition au 219 'mode coordonné'. 220 221 * 'motion.tooloffset.x à motion.tooloffset.w' - 222 (float, out; un par axe) montre l'offset d'outil courant. Il peut provenir 223 de la table d'outils ('G43 actif'), ou du G-code ('G43.1 actif') 224 225 * 'spindle.N.orient-angle' - 226 (float,out) Orientation souhaitée par M19. Contient la valeur du paramètre 227 R du M19 plus la valeur du paramètre [RS274NGC]ORIENT_OFFSET du fichier ini. 228 229 * 'spindle.N.orient-mode' - 230 (s32,out) Broche en mode 'recherche d'orientation' par M19. Par défaut 0. 231 232 * 'spindle.N.orient' - 233 (out,bit) Indique le début d'un cycle d'orientation de la broche. 234 Activé par M19. Révoqué par M3, M4 ou M5. 235 Si 'spindle-orient-fault' est différent de zéro pendant que 'spindle-orient' 236 est vrai, la commande M19 échoue avec un message d'erreur. 237 238 * 'spindle.N.is-oriented' - 239 (in, bit) Pin d'acquittement pour 'spindle-orient'. Achève le cycle 240 d'orientation. Si 'spindle-orient' est vraie quand 'spindle-is-oriented' est 241 actif, la pin 'spindle-orient' est relâchée et les pins 'spindle-locked' et 242 'spindle-brake' sont activées. 243 244 * 'spindle.N.orient-fault' - 245 (s32, in) Entrée d'erreur du cycle d'orientation. Toute valeur autre que 246 zéro produira l'abandon du cycle d'orientation. 247 248 * 'spindle.N.lock' - 249 (bit, out) Pin indiquant que l'orientation est atteinte et le cycle achevé. 250 Relâchée par M3, M4 ou M5. 251 252 ==== Utilisation des pins de HAL pour l'orientation broche avec M19 253 254 Par convention, la broche est dans un des trois modes suivants: 255 256 - mode rotation (mode par défaut). 257 - mode recherche d'orientation. 258 - mode orientation atteinte. 259 260 Quand un M19 est exécuté, la broche passe en mode 'recherche d'orientation' et 261 la pin de HAL 'spindle-orient' est activée. L'orientation cible 262 est spécifiée par les pins 'spindle-orient-angle' et 'spindle-orient-fwd' et 263 pilotée par les paramètres R et P du M19. 264 265 La logique de HAL réagi à l'ordre sur la pin 'spindle-orient' en déplaçant la 266 broche dans la position souhaitée. Quand cette orientation est atteinte, la 267 logique de HAL l'indique en activant la pin 'spindle-is-oriented'. 268 269 En réponse, 'motion' désactive la pin 'spindle-orient' et active la pin 270 'spindle-locked' indiquant le passage en mode 'orientation atteinte'. Il active 271 également la pin 'spindle-brake'. La broche est alors en mode 'orientation 272 atteinte'. 273 274 Si, pendant que 'spindle-orient' est vraie, et que 'spindle-is-oriented' est 275 fausse, la pin 'spindle-orient-fault' a une valeur autre que zéro, la commande 276 M19 est abandonnée, un message incluant le code d'erreur est affiché et la file 277 d'attente de 'motion' est vidée. La broche repasse en mode rotation. 278 279 Les commandes M3, M4 ou M5 annulent les modes 'recherche d'orientation' ou 280 'orientation atteinte'. Cet état est indiqué par la désactivation des broches 281 'spindle-orient' et 'spindle-locked'. 282 283 La pin 'spindle-orient-mode' reflète le paramètre P du M19, ce qui sera 284 interprété comme ci-dessous: 285 286 - 0: rotation, quel que soit le sens, pour petit mouvement angulaire (défaut) 287 - 1: rotation toujours en sens horaire (même direction qu’avec M3) 288 - 2: rotation toujours en sens anti-horaire (même direction qu’avec M4) 289 290 Il est possible d'utiliser le composant de HAL 'orient' qui fournit une boucle 291 de commande PID, basée sur la position du codeur de broche, 'spindle-orient-angle' 292 et sur 'spindle-orient-mode'. 293 294 === Paramètres 295 296 Beaucoup de ces paramètres servent d'aide au déboguage et sont sujets 297 aux changements ou au retrait à tout moment. 298 299 * 'motion-command-handler.time' - 300 (s32, RO) 301 302 * 'motion-command-handler.tmax' - 303 (s32, RW) 304 305 * 'motion-controller.time' - 306 (s32, RO) 307 308 * 'motion-controller.tmax' - 309 (s32, RW) 310 311 * 'motion.debug-bit-0' - 312 (bit, RO) Utilisé pour le déboguage. 313 314 * 'motion.debug-bit-1' - 315 (bit, RO) Utilisé pour le déboguage. 316 317 * 'motion.debug-float-0' - 318 (float, RO) Utilisé pour le déboguage. 319 320 * 'motion.debug-float-1' - 321 (float, RO) Utilisé pour le déboguage. 322 323 * 'motion.debug-float-2' - 324 (float, RO) Utilisé pour le déboguage. 325 326 * 'motion.debug-float-3' - 327 (float, RO) Utilisé pour le déboguage. 328 329 * 'motion.debug-s32-0' - 330 (s32, RO) Utilisé pour le déboguage. 331 332 * 'motion.debug-s32-1' - 333 (s32, RO) Utilisé pour le déboguage. 334 335 * 'motion.servo.last-period' - 336 Le nombre de cycle du processeur entre les invoquations du thread 337 servo. Typiquement, ce nombre divisé par la vitesse du processeur donne 338 un temps en secondes. Il peut être utilisé pour determiner si le 339 contrôleur de mouvement en temps réel respecte ses contraintes de 340 timing. 341 342 * 'motion.servo.last-period-ns' - 343 (float, RO) 344 345 === Fonctions 346 347 Généralement, ces fonctions sont toutes les deux ajoutées à 348 servo-thread dans l'ordre suivant: 349 350 * 'motion-command-handler' - 351 Processus des commandes de mouvement provenant de l'interface 352 utilisateur. 353 354 * 'motion-controller' - 355 Lance le contrôleur de mouvement de LinuxCNC. 356 357 == axis.N (temps réel) 358 359 Ces pins et paramètres sont créés par le module temps réel 'motmod'. 360 Ce sont en fait des valeurs d'articulations, mais les pins et les 361 paramètres sont toujours appelés 'axis.N'.footnote:[Dans une machine à 362 'cinématique triviale', il y a correspondance une 363 pour une, entre les articulations et les axes. 364 Note Du Traducteur: nous utilisons dans cette traduction le terme 'axe', 365 dans le cas d'une cinématique non triviale il devra être remplacé par 366 le terme 'articulation' (joint).] 367 Ils sont lus et mis à jour par la fonction 'motion-controller'. 368 369 === Pins (((axis (hal pins)))) 370 371 * 'axis.N.active' - 372 TRUE quand cet axe est actif. 373 374 * 'axis.N.amp-enable-out' - 375 (bit, out) TRUE si l'ampli de cet axe doit être activé. 376 377 * 'axis.N.amp-fault-in' - 378 (bit, in) Doit être mis TRUE si une erreur externe est détectée sur 379 l'ampli de cet axe. 380 381 * 'axis.N.backlash-corr' - 382 (float, out) 383 384 * 'axis.N.backlash-filt' - 385 (float, out) 386 387 * 'axis.N.backlash-vel' - 388 (float, out) 389 390 * 'axis.N.coarse-pos-cmd' - 391 (float, out) 392 393 * 'axis.N.error' - 394 (bit, out) 395 396 * 'axis.N.f-error' - 397 (float, out) 398 399 * 'axis.N.f-error-lim' - 400 (float, out) 401 402 * 'axis.N.f-errored' - 403 (bit, out) 404 405 * 'axis.N.faulted' - 406 (bit, out) 407 408 * 'axis.N.free-pos-cmd' - 409 (float, out) 410 411 * 'axis.N.free-tp-enable' - 412 (bit, out) 413 414 * 'axis.N.free-vel-lim' - 415 (float, out) 416 417 * 'axis.N.home-sw-in' - 418 (bit, in) Doit être mis TRUE si le contact d'origine de cet axe est 419 activé. 420 421 * 'axis.N.homed' - 422 (bit, out) 423 424 * 'axis.N.homing' - 425 (bit, out) TRUE si la prise d'origine de cette axe est en cours. 426 427 * 'axis.N.in-position' - 428 TRUE si cet axe, utilisant le 'free planner', a atteint un arrêt. 429 430 * 'axis.N.index-enable' - 431 (bit, I/O) Doit être reliée à la broche 'index-enable' du codeur de 432 cet axe pour activer la prise d'origine sur l'impulsion d'index. 433 434 * 'axis.N.jog-counts' - 435 (s32, in) Connection à la broche 'counts' d'un codeur externe utilisé 436 comme manivelle. 437 438 * 'axis.N.jog-enable' - 439 (bit, in) Quand elle est TRUE (et en mode manuel), tout changement 440 dans 'jog-counts' se traduira par un mouvement. Quand elle est FALSE, 441 'jog-counts' sera ignoré. 442 443 * 'axis.N.jog-scale' - 444 (float, in) Fixe la distance, en unités machine, du déplacement pour 445 chaque évolution de 'jog-counts'. 446 447 * 'axis.N.jog-vel-mode' - 448 (bit, in) Quand elle est FALSE (par défaut), la manivelle fonctionne 449 en mode position. L'axe se déplace exactement selon l'incrément de jog 450 sélectionné pour chaque impulsion, sans s'occuper du temps que prendra 451 le mouvement. Quand elle est TRUE, la manivelle fonctionne en mode 452 vitesse. Le mouvement s'arrête quand la manivelle s'arrête, même si le 453 mouvement commandé n'est pas achevé. 454 455 * 'axis.N.joint-pos-cmd' - 456 (float, out) La position commandée de l'articulation (par opposition à celle du moteur). 457 Ca peut être un écart entre les positions articulation et moteur. Par exemple; 458 la procédure de prise d'origine fixe cet écart. 459 460 * 'axis.N.joint-pos-fb' - 461 (float, out) Le retour de position de l'articulation (par opposition à celui du moteur). 462 463 * 'axis.N.joint-vel-cmd' - 464 (float, out) 465 466 * 'axis.N.kb-jog-active' - 467 (bit, out) 468 469 * 'axis.N.motor-pos-cmd' - 470 (float, out) Position commandée pour cette articulation. 471 472 * 'axis.N.motor-pos-fb' - 473 (float, in) Position actuelle de cette articulation. 474 475 * 'axis.N.neg-hard-limit' - 476 (bit, out) 477 478 * 'axis.N.pos-lim-sw-in' - 479 (bit, in) Doit être mis TRUE si le fin de course de limite positive de 480 cette articulation est activé. 481 482 * 'axis.N.pos-hard-limit' - 483 (bit, out) 484 485 * 'axis.N.neg-lim-sw-in' - 486 (bit, in) Doit être mis TRUE si le fin de course de limite négative de 487 cette articulation est activé. 488 489 * 'axis.N.wheel-jog-active' - 490 (bit, out) 491 492 === Paramètres 493 494 * 'axis.N.home-state' - 495 Reflète l'étape de la prise d'origine en cours actuellement. 496 497 == iocontrol (espace utilisateur) 498 499 Ces pins sont créées par le contrôleur d'entrées/sorties de l'espace 500 utilisateur, habituellement appelé 'io'. 501 502 === Pins (((iocontrol (HAL pins)))) 503 504 * 'iocontrol.0.coolant-flood' - 505 (bit, out) TRUE quand l'arrosage est demandé. 506 507 * 'iocontrol.0.coolant-mist' - 508 (bit, out) TRUE quand le brouillard est demandé. 509 510 * 'iocontrol.0.emc-enable-in' - 511 (bit, in) Doit être mise FALSE quand un arrêt d'urgence externe est 512 activé. 513 514 * 'iocontrol.0.lube' - 515 (bit, out) TRUE quand le graissage centralisé est commandé. 516 517 * 'iocontrol.0.lube_level' - 518 (bit, in) Doit être mise TRUE quand le niveau d'huile est correct. 519 520 * 'iocontrol.0.tool-change' - 521 (bit, out) TRUE quand un changement d'outil est demandé. 522 523 * 'iocontrol.0.tool-changed' - 524 (bit, in) Doit être mise TRUE quand le changement d'outil est terminé. 525 526 * 'iocontrol.0.tool-number' - 527 (s32, out) Numéro de l'outil courant. 528 529 * 'iocontrol.0.tool-prep-number' - 530 (s32, out) Numéro du prochain outil, donné par le mot *T* selon RS274NGC. 531 532 * 'iocontrol.0.tool-prepare' - 533 (bit, out) TRUE quand une préparation d'outil est demandée. 534 535 * 'iocontrol.0.tool-prepared' - 536 (bit, in) Doit être mise TRUE quand une préparation d'outil est 537 terminée. 538 539 * 'iocontrol.0.user-enable-out' - 540 (bit, out) FALSE quand un arrêt d'urgence interne est activé. 541 542 * 'iocontrol.0.user-request-enable' - 543 (bit, out) TRUE quand l'arrêt d'urgence est relâché. 544