• Aucun résultat trouvé

Labo 1b – Prise en main du simulateur 3D

N/A
N/A
Protected

Academic year: 2022

Partager "Labo 1b – Prise en main du simulateur 3D"

Copied!
4
0
0

Texte intégral

(1)

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

(2)

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

(3)

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,

(4)

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

Références

Documents relatifs

Etudier par chronophotographie (intervalle de temps 200 ms) le mouvement d'une boule de pétanque lancée à la vitesse de 10 m.s-1 (direction de lancement 45°).. Décrire le mouvement

Le robot mBot devra avancer sur une distance de 1 mètre à la vitesse 200, attendre 5 secondes, puis repartir en reculant pour revenir à son point de départ à une vitesse 2 fois

L’autre partie du mécanisme est décrit sur la figure 5a, elle présente la liaison entre le bâti et le cockpit grâce aux bras avant et arrière.. Hypothèse : Le point G,

La solution retenue permet de simuler un accélération longitudinale ressentie maximale de a Tx = ± 2 , 2 m.s -2 ce qui correspond à la plage d'accélération définie dans le cahier

Dans le réseau de droite, faire correspondre à une adresse IP un nom comme suit:.. site1 / site2 / site3 2-Travail à

Renseigner dans le tableau du document réponse, par un signe + (une tige de vérin sort) ou un signe − (une tige de vérin rentre), le comportement des vérins « a » et « b »

• Lorsque vous cliquez sur « Rapport », une fenêtre s’ouvre dans laquelle vous renseignez les nom et prénom du client (si le client n’a pas déjà été identifié avant),

Le fichier de démo est protégé en écriture, il est necessaire de l’enregistrer dans le futur dossier de travail de MPLAB. Créer un dossier de travail par exemple TST_MPLAB_ISIS