Diagramme de classes : utilisation de MyRio


Remarques générales :
Les exemples donnés par NI sont en C et sont relativement complexes pour les étudiants de première année.
- Il faut "taper dans les registres". (ex : faire la différence entre DIOA_158DIR etDIOA_70DIR sans documentation)
- Il faut avoir un lien avec le répertoire C Support for NI myRIO
Pour simplifier, je vous propose de faire les projets en C++ (les 5 1er sujet des TP sont en C). Pour cela, j'ai mis sur le partage un projet de base à copier pour chaque nouveau projet et le renommer.
Un répertoire ClassesBaseMyRio, sur le partage aussi, contient les classes utiles (DIO, UART...) que vous aurez besoin. Copiez les fichiers .cpp et .h correspondant dans votre nouveau projet en local.
Ce projet de base va s'étoffer au fur et à mesure ==> Le diagramme de classes suivant et sa description va aussi évoluer.
Un peu de patience pour la suite....
PortDIO : Entrées/Sorties Numériques
PortBoutonLed : Bouton et 4 leds de la carte MyRio
PortComSocket : Communication socket
PortAIO : Entrées/Sorties analogiques
PortSerie: Liaison série
Classe PortDIO

Cette classe permet de définir le nombre d'entrée/sortie numérique d'un port (A ou B) et de lire/écrire dessus. Les DIO vont de DIO0 à DIO15. On doit prendre dans l'ordre les DIO. Par exemple, si on a besoin de 4 DIO, on doit prendre obligatoirement DIO0 à DIO3. Si l'on a plus de 8 E/S, les broches seront alors configurées pour les DIO ==> faire attention pour le multiplexage sur d'autres fonctions (PWM, I2C...)
- PortDIO()
- Constructeur par défaut
- Initialise les 8 premières broches (DIO0 à DIO7) du port B
- PortDIO(char port, int nombreBroche)
- Constructeur
- Initialise les nombreBroche premières broches (de DIO0 à DIOnombreBroche) du port port (PORTA ou PORTB)
- initPort()
- initPort est utilisé si on veut plus de 8 broches sur le port
- Attention, si on l'utilise, toutes les nombreBroche broches de poids forts de l'objet PortDIO sont utilisées en entrée sorties numériques. Pensez aux PWM, I2C...qui sont multiplexées
- bool lire(int numeroBroche)
- Lit la broche numeroBroche de 0 à 15 ou de DIO0 à DIO15.
- numeroBroche doit être inférieure ou égale au nombre de broches initialisées dans le constructeur
- Retourne false si la broche est de niveau bas, true si la broche est de niveau haut
- void ecrire(int numeroBroche, bool etat)
- Ecrit etat sur la broche numeroBroche de 0 à 15 ou de DIO0 à DIO15
- numeroBroche doit être inférieure ou égale au nombre de broches initialisées dans le constructeur
Classe PortBoutonLed

Cette classe permet d'utiliser le bouton et les quatre leds de la carte.
- PortBoutonLed()
- Constructeur par défaut
- Initialise les 4 leds et le bouton.
- void allume(int led)
- Allume une des leds (de 0 à 3)
- void eteint(int led)
- Eteint une des leds (de 0 à 3)
- bool etatBouton()
- Retourne l'état du bouton.
- false s'il n'est pas appuyé
- true s'il est appuyé.
Classe PortComSocket

Cette classe simplifiée permet la communication par socket en TCP/IP entre des clients et un serveur.
La procédure est la suivante :
Pour un serveur avec un seul client (pas de multiprocessus) :
- Créer un objet PortComSocket :
PortComSocket * serveur = new PortComSocket();
- Choisir un port et un nombre de client :
serveur->constructionServeur(1000,1);
- Se mettre en attente client :
serveur->accepte();
- Suivant le cas, lire ou écrire :
serveur->envoie("Salut toi"); ou serveur->recoit(buffer);
Pour un serveur avec plusieurs clients (multiprocessus) :
- Créer un objet PortComSocket :
PortComSocket * serveur = new PortComSocket();
- Choisir un port et un nombre de client :
serveur->constructionServeur(1000,5);
- Se mettre en attente client, quand un client arrive, un processus se remet sur l'accepte :
while(1)
{ serveur->accepte();
- Lancer le processus qui communiquera avec le client :
serveur->processusCommunication("nomDeExe");
nomDeExe correspond au nom de l'éxecutable qui communiquera avec le client client.La socket de communication est passée en 2em argument au main. Il faut la récupérer avec un sscanf(argv[1],"%d",&communication);. Puis il faudra créer, dans cet exe, un PortComSocket avec un constructeur ayant communication en argument
- Suivant le cas, lire ou écrire :
nouveauServeur->envoie("Salut toi"); ou nouveauServeur->recoit(buffer);
Pour un client :
- Créer un objet PortComSocket :
PortComSocket * client = new PortComSocket();
- Choisir l'dresse IP et le port du serveur :
client->constructionClient(char IP[],int port);
- Suivant le cas, lire ou écrire :
client->envoie("Salut toi"); ou client->recoit(buffer);
Classe PortAIO
Classe PortSerie

Cette classe permet de communiquer simplement suur la liaison série sans protocole de vérification sur Rx/Tx soit sur le port A, soit sur le port B.
- PortUART() : constructeur par défaut
- Port A
- Vitesse : 9600 baud
- 8 bit de données
- 1 bit stop
- Pas de parité
- PortUART(char type, unsigned int const vitesse=9600, unsigned char const dataBits=8,Uart_Parity const parite=Uart_ParityNone, Uart_StopBits const stopBit=Uart_StopBits1_0) Constructeur avec paramètres par défauts identiques au le 1er constructeur avec type définissant le port A ou B
- char lire() : retourne un caractère lu
- void ecrire(char car) : écrit le caractère car sur la liaison série.
- void ecrire(string chaine) : écrit la string chaine sur la liaison série.
- void close() : ferme la liaison série.
- void nettoyer() : vide le buffer de lecture de la liaison série.

