Sylvain Mahé Le site Web Retour à l'accueil Principes Partager des idées et des projets. Contact 06.45.49.96.98
contact@sylvainmahe.site
Écriture de la page : Sylvain Mahé
Une communication vers les ordinateurs personnels avec la classe UsartRs232 Avec la classe UsartRs232 il est simple de relier votre ordinateur personnel via son interface RS232 (port DE-9) à votre automate programmable. En exemple d'application possible, ceci peut servir dans le pilotage de fonctions qui animent des moteurs pas à pas utilisés dans l'asservissement d'une machine à commande numérique (CNC). La couche d'abstraction que je propose avec la classe dédiée UsartRs232 simplifie la mise en œuvre de cette liaison numérique. Le matériel utilisé dans le microcontrôleur et la partie logicielle utilisent le protocole USART (pour "Universal Synchronous Asynchronous Receiver Transmitter" ou émetteur récepteur synchrone asynchrone universel) pour communiquer. Les communications sont bidirectionnelles et s'effectuent à la vitesse de 9600 bauds sur une largeur de 8 bits utiles. Ports des automates programmables concernés par l'USART : Automate programmable MODULABLE 20 :
- Port GPIO 1 (PD0) = RXD (receive data)
- Port GPIO 2 (PD1) = TXD (transmit data)

Automate programmable MODULABLE 32 :
- Port GPIO 9 (PD0) = RXD (receive data)
- Port GPIO 10 (PD1) = TXD (transmit data)
Exemple de communication bidirectionnelle avec la classe UsartRs232 : #include <UsartRs232.h> int main() { UsartRs232::start (void); while (true) { UsartRs232::receive(); //UsartRs232::data est la donnée reçue UsartRs232::transmit (123); } return 0; } Dans cet exemple, la fonction statique start est appelée prenant en seul paramètre une fonction à appeler lorsque des données sont reçues. Ici ce paramètre est indiqué void (vide) ce qui signifie qu'aucune fonction ne sera appelée lors de la réception de données (une interruption interviendra mais n'appellera pas de fonction). Puis dans la boucle while la fonction statique receive est appelée. Elle s'occupe de la réception des données en provenance de l'ordinateur personnel, et permet la mise à jour de la variable statique data qui représente la donnée 8 bits reçue. Ensuite la fonction statique transmit est utilisée pour transmettre le nombre 123 vers l'ordinateur personnel. Du fait de la boucle, le nombre 123 sera transmit continuellement à la vitesse de la liaison RS232. Exemple via l'utilisation de fonctions dédiées : #include <UsartRs232.h> #include <Timer.h> void myReceiving() { //une donnée a été reçue en provenance de l'ordinateur personnel UsartRs232::receive(); //UsartRs232::data est la donnée reçue } void myTransmiting() { //une donnée va être envoyée vers l'ordinateur personnel UsartRs232::transmit (123); } int main() { UsartRs232::start (myReceiving); while (true) { myTransmiting(); Timer::pause (1000); //pause de 1 seconde } return 0; } L'exemple ci-dessus montre que dans la fonction principale main, la communication RS232 est démarrée en appelant la fonction statique start avec en seul paramètre la fonction myReceiving qui sera appelée lorsqu'une donnée sera reçue. Lors de la réception, la fonction statique receive est appelée permettant de stocker la donnée reçue dans la variable statique data. Les fonctions myReceiving et myTransmiting sont dédiées respectivement à la réception et à l'émission de données via la liaison RS232. En effet dès la réception d'une donnée 8 bits, la fonction myReceiving est immédiatement appelée. Dans cette fonction il est commun d'utiliser la fonction statique receive afin de mettre à jour la variable statique data qui contient alors la donnée 8 bits reçue, que vous pouvez utiliser n'importe où dans votre programme. À la suite dans la boucle while, la fonction myTransmiting est utilisée permettant l'émission du nombre 123 vers l'ordinateur personnel, ceci 1 fois par seconde à l'aide de la fonction statique pause prenant 1000 en paramètre (la durée de la pause indiquée en millisecondes). Les deux exemples expliqués ci-dessus permettent en toute simplicité de comprendre le principe d'application de la classe UsartRs232 pour établir des liaisons RS232 fiables d'un point de vue logiciel. Autre fonctionnalité disponible : Si besoin la classe UsartRs232 dispose d'une fonction statique stop ce qui permet d'arrêter les communications RS232, un nouvel appel à la fonction statique start permet de redémarrer les communications RS232. Câblages et priorités : Il convient dans l'utilisation de la classe UsartRs232 de prendre note de quelques considérations techniques importantes pour le bon fonctionnement : Si vous n'utilisez pas la partie réception du montage et que vous n'appelez pas la fonction statique receive, il est important de quand même connecter un câble sur le port RXD de l'automate programmable allant vers un port TXD du périphérique, car dans le cas contraire les fonctions matérielles USART capteraient tous les bruits électromagnétiques environnants sur la broche laissée en l'air du microcontrôleur, et générerait des interruptions intempestives, ce qui n'est pas souhaité. La classe UsartRs232 utilise le protocole USART tout comme les classes UsartNetwork et UsartMidi, mais les vitesses de communication et les algorithmes mis en œuvre ne sont pas compatibles les uns avec les autres. Pour éviter tout problème de compatibilité, la classe utilisant l'USART déclarée en premier dans votre projet sera la seule activée et fonctionnelle. Références : Récapitulatif des fonctions et variables de cette classe : static unsigned char data; static void start (void functionJump()); static void receive(); static void transmit (const unsigned char DATA); static void stop();