Bonjour à tous !
Je vais tâcher d'être le plus
succin et précis possible mais c'est un projet sur lequel j'ai un peu réfléchis, et je ne voulais pas partir tête baissée.
Stagiaire, je travaille actuellement sur l'élaboration d'un petit programme qui communique avec des cartes de contrôle de moteurs pas-à-pas.
Pour communiquer avec elles, j'utilise un convertisseur ethernet/RS485 (
plus de détails)
Pour résumer et que vous ayez une idée claire, voici ce que mon programme doit faire :
Globalement, la communication se fera très peu souvent (les cartes sont assez autonomes) et les commandes et leurs retours (echo) sont très succins. Par exemple pour faire tourner le moteur 2 selon le programme prédéfini N°1 cela se passe en 2 lignes de commande :
#2y1 *ENTREE* Selection du programme pré-enregistré dans la carteecho venant de la carte : 2y1#1A *ENTREE*echo venant de la carte : 1AEt là, magie, le moteur tourne ! Dans ce cas là, l'echo est pas
vraiment nécéssaire (si ce n'est vérifier que la carte comprend bien ce que je lui dis)
Un autre exemple serait la lecture des entrée/sorties de la carte (où là l'echo est important) :
#2Y *ENTREE* Lecture des toutes les entrée sorties de la carte 2
Echo : 2Y+<une succession de chiffres représentants les bits de la carte à interpréter>Jusque là, je travaillais un peu avec PuTTY pour voir le fonctionnement des cartes, mais faut maintenant que je passe au niveau supérieur : La programmation.
J'y ai déjà un peu réfléchis, mais j'aurais besoin d'un peu d'aide pour établir la structure de la com à établir :
LA TYPOLOGIE UTILISEEC'est le gros truc sur lequel je doute. Qui doit être client ou serveur ?
Je me disais que les cartes joueraient le rôle de serveur et l'ordinateur (via mon programme) serait le client.
Ainsi, je crée ma socket, et j'envoie mes commande avec la fonction send(...) et lis les echos avec la fonction receive. Ainsi je n'aurais pas de serveur à programmer.
LES SOCKETSAu début je pensais n'utiliser que du TCP, j'ai pas vraiment besoin de vitesse, mes commandes sont relativement simples, et je préfère être sûr qu'elle arrivent.
Mais pour certains cas (par exemple la lecture constante d'un capteur de position) je pensais utiliser de l'UDP pour avoir une position actuelle la plus précise possible. Et puis aussi par rapport à la façon d'envoyer mes paquets (partie juste après)
L'ENVOI DES PAQUETS : ENVOIS BRUT ou HAUT NIVEAU ?? J'ai vu aussi dans les tutos de SFML qu'il y avait 2 manières d'envoyer mes donnes : en bas niveau ou haut niveau.
Tout content qu'une fonction toute faite existe, je me suis dis que j'allais l'utiliser. Deception quand j'ai vu qu'il fallait que pour que les données soient reçues, il fallait aussi utiliser cette fonction toute faites d'envoie des paquets. Impossible donc pour communiquer avec mes cartes, SAUF si je communique en UDP. (D'après
cette page, le paragraphe juste avant "Etendre les paquets pour qu'ils gèrent vos types persos")
Du coup je pensais utiliser que de l'UDP, et utiliser la "Fonction Haut niveau".
Est-ce que vous pensez que cela devrait marcher ainsi ? VOILA !
Merci de m'avoir lu pour ceux qui l'ont fait.
Si vous pouvez m'éclairer, je vous en serais très reconnaissant !
Vincent.
EDIT : Désolé pour la taille, j'ai essayé de faire au plus court.