Laboratoires d’ACOO
ACOO.Labo 1b - Prise en main du simulateur.doc 1/4
Labo 1b – Prise en main du simulateur 3D
1. Présentation
1.1. Objectifs pédagogiques
- Prendre en main le simulateur 3D de machine de gravage laser.
- Comprendre les principes de programmation d’une machine.
2. Tâches à effectuer
2.1. Prise en main du mode manuel
Démarrer le simulateur 3D.
Ouvrir le panneau de commandes manuelles situé sur la droite du simulateur.
Modifier le zoom, la rotation.
Changer de vue en sélectionnant une autre caméra.
Allumer le laser.
Déplacer l’axe X en utilisant les boutons.
Déplacer l’axe Y à la position 10.5 en utilisant la fonction Go.
Déplacer l’axe Z.
Eteindre le laser.
Charger une nouvelle pièce pour le gravage.
2.2. Programme C exemple 2.2.1. Test
Le programme exemple « SimulatorUDPController » en langage C permet de commander le simulateur de machine pour exécuter 2 types de séquences : - Séquence PTP (Point to Point) démontrant la mise en œuvre de mouvements
de type bang bang sans synchronisation entre axes, et permettant de déplacer les axes selon un profil de vitesse trapézoïdal permettant d’atteindre la meilleure rapidité. Ce type de mouvement est utilisé pour le positionnement rapide des axes numériques.
- Séquence PT. Dans ce mode, chaque contrôleur d’axe numérique reçoit une
table de points (Position, Temps), et effectue une interpolation linéaire de
position en fonction du temps. Comme tous les axes démarrent leur
Laboratoires d’ACOO
ACOO.Labo 1b - Prise en main du simulateur.doc 2/4
trajectoire simultanément, les axes synchronisés sur le temps permettent de réaliser des trajectoires coordonnées, du type droites non parallèles aux axes du système ou arcs de cercle par exemple. Ce type de mouvement est utilisé pour des déplacements contrôlés.
Tester ces 2 modes de fonctionnement. Pour cela, il faut fournir l’adresse IP 127.0.0.1 au programme de commande si le simulateur est exécuté sur le même PC, ou l’adresse IP du PC hébergeant le simulateur sinon.
2.2.2. Exploration du code source
Le programme exemple ci-dessus est fourni avec les fichiers sources suivants : 1. API de programmation du simulateur
- UDPConnection.h, UDPConnection.c : implémentation simple d’une liaison socket UDP, permettant de dialoguer avec le simulateur. A priori, pas utilisés directement.
- SimulatorController.h, SimulatorController.C : exploite la connexion UDP pour envoyer des commandes au simulateur. Ces fichiers contiennent les fonctions permettant de contrôler le simulateur pour lui ordonner le déplacement d’un axe ou l’activation du laser par exemple.
2. Programme exemple
- main.c : ce programme utilise les fonctions de SimulatorController.h pour piloter les séquences sur le simulateur. Il peut servir d’exemple pour aborder la programmation du simulateur.
Prenez connaissance des possibilités offertes par le fichier
« SimulatorController.h » et de la façon de les exploiter en lisant le fichier
« main.c ».
2.2.3. Modification du programme
Modifier le programme pour que la séquence PTP soit interrompue lorsque le bouton rouge du simulateur est pressé.
3. Travaux à rendre
Néant
Laboratoires d’ACOO
ACOO.Labo 1b - Prise en main du simulateur.doc 3/4
4. Fichier SimulatorController.h
#ifndef __SIMULATOR_CONTROLLER_H_
#define __SIMULATOR_CONTROLLER_H_
#include "UDPConnection.h"
// Axes
#define AXIS_X 0
#define AXIS_Y 1
#define AXIS_Z 2
// Constants used for working with output flags
#define OUTPUTS_BYTE 0
#define OUTPUT_BIT_LASER 0
#define OUTPUT_BIT_NEW_PIECE 1
#define OUTPUT_BIT_LIGHT_RED 2
#define OUTPUT_BIT_LIGHT_ORANGE 3
#define OUTPUT_BIT_LIGHT_GREEN 4
// Constants used for working with input flags
#define INPUTS_BYTE 0
#define INPUT_BIT_BUTTON_GREEN 0
#define INPUT_BIT_BUTTON_ORANGE 1
#define INPUT_BIT_BUTTON_RED 2 typedef struct
{
UDP_CONNECTION connection;
} SIMULATOR_CONTROLLER;
// Connection
void SimulatorInitialize(SIMULATOR_CONTROLLER * simulator, char* simulator_ip_address);
void SimulatorFinalize(SIMULATOR_CONTROLLER * simulator);
// Communication error management
int SimulatorErrorOnConnection(SIMULATOR_CONTROLLER * simulator);
const char* SimulatorGetConnectionErrorDescription(SIMULATOR_CONTROLLER * simulator);
void SimulatorClearConnectionErrors(SIMULATOR_CONTROLLER * simulator);
// PTP command functions
void SimulatorAxisMoveTo(SIMULATOR_CONTROLLER * simulator, char axisControllerID,
double position);
void SimulatorAxisBrake(SIMULATOR_CONTROLLER * simulator, char axisControllerID);
// PT command functions
void SimulatorAddPTValueToAxis(SIMULATOR_CONTROLLER * simulator, char axisControllerID,
double position, int relativeTimeInMs);
void SimulatorStartAxisPTMove(SIMULATOR_CONTROLLER * simulator,
Laboratoires d’ACOO
ACOO.Labo 1b - Prise en main du simulateur.doc 4/4
char axisControllerID);
void SimulatorStartAllAxisPTMove(SIMULATOR_CONTROLLER * simulator);
void SimulatorClearAxisPTTable(SIMULATOR_CONTROLLER * simulator, char axisControllerID);
int SimulatorGetAxisPTTableSize(SIMULATOR_CONTROLLER * simulator, char axisControllerID);
char SimulatorGetPTBufferState(SIMULATOR_CONTROLLER * simulator);
// Error command functions
char SimulatorIsAxisOnError(SIMULATOR_CONTROLLER * simulator, char axisControllerID);
int SimulatorGetAxisErrorDescription(SIMULATOR_CONTROLLER * simulator, char axisControllerID,
char* errorDescription);
void SimulatorAcknowledgeAxisError(SIMULATOR_CONTROLLER * simulator, char axisControllerID);
// End move
char SimulatorIsAxisMoveDone(SIMULATOR_CONTROLLER * simulator, char axisControllerID);
void SimulatorSetAxisTolerance(SIMULATOR_CONTROLLER * simulator, char axisControllerID,
double tolerance);
double SimulatorGetAxisTolerance(SIMULATOR_CONTROLLER * simulator, char axisControllerID);
// Get position
double SimulatorGetAxisMaxPosition(SIMULATOR_CONTROLLER * simulator, char axisControllerID);
double SimulatorGetAxisMinPosition(SIMULATOR_CONTROLLER * simulator, char axisControllerID);
double SimulatorGetAxisCurrentPosition(SIMULATOR_CONTROLLER * simulator, char axisControllerID);
double SimulatorGetAxisPositionToReach(SIMULATOR_CONTROLLER * simulator, char axisControllerID);
// Inputs/Outputs
void SimulatorSetOutput(SIMULATOR_CONTROLLER * simulator, char portNumber,
char value);
char SimulatorGetInput(SIMULATOR_CONTROLLER * simulator, char portNumber);
#endif