RS232 envoye une string

Signaler
Messages postés
8
Date d'inscription
jeudi 25 mars 2010
Statut
Membre
Dernière intervention
15 avril 2010
-
Messages postés
8
Date d'inscription
jeudi 25 mars 2010
Statut
Membre
Dernière intervention
15 avril 2010
-
Bonjour,

C'est mon premier message sur ce site, et comme tous le monde je viens la première fois pour avoir de l'aide.
Mon problème est que je voudrais créer un programme en c epour envoyer/revevoir une chaine de caractère a travers un port rs232 vers un appareil de mesure.

le prototype de ma fonction:
void send(int numero_port_com,char chaine[nb_carac])
avec chaine="CT 50\0" par exemple
une fonction de réception aussi.

J'ai vu l'exemple de ymca2003 mais le fait que cela ce fasse en binaire me complique un peu la tache quand meme :)

J'aimerais donc savoir si des fonctions dans le meme genre que je cherche existe déja, ou si je suit "obligé" de me faire les conversions selon le code ascii de ce que je veux envoyer.
Je code sous eclipse c/c++ si ca a une influence.

Merci pour votre aide

4 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
24
Chaque octet d'une chaine EST le code ASCII, il n'y a rien à convertir.

ciao...
BruNews, MVP VC++
Messages postés
8
Date d'inscription
jeudi 25 mars 2010
Statut
Membre
Dernière intervention
15 avril 2010

Ok, merci

J'ai essayé son code jusqu'a l'envoie de donnée et ca marche "bien",i.e. si je veux envoyer "Cm 20", le buffer contient bien Cm 20.(je n'est pas testé si l'envoye se fesait reelement)

Le problème est que je veux que ca soit moi dévellopeur qui envoye ces commandes et non pas l'utilisateur(l'utilisateur devrait en envoyé certainne aussi).
Donc les structures de windows m'ont l'air un peu difficille a comprendre.

Par exemple si je veux envoyer "CF 500" pourrier vous me dire ce que je doit mettre dans
BOOL WriteCOM(void* buffer, int nBytesToWrite, int* pBytesWritten)

J'initialiserait de la manière suivante
int nBytesToWrite=6;
char buffer[] = "CF 500";

Mais pour pBytesWritten j'ai du mal. J'ai fait un exemple et &nBytesWritten vallait 2293564 et nButesWritten=2293596. Ces valeurs semble ne pas changer, mais je n'ai aucune idée si elle dépende de la machine ou pas. Pensez vous qu'il y a d'autres parametres, ou je peut "simuler" que l'utilisateur ai tapé ce que je lui envoie ?
Quelles fonctions écrit ces parametres normalement est ce fflush(stdin), ou gets(buffer)?

Dsl pour ce tas de question, j'ai du mal...

Le lien de ymca2003 http://www.cppfrance.com/codes/BASE-COMMUNICATION-SERIE-RS232-WIN32_22441.aspx
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
24
nBytesWritten doit contebir en sortie le nbr d'octets réellement écrits.

ciao...
BruNews, MVP VC++
Messages postés
8
Date d'inscription
jeudi 25 mars 2010
Statut
Membre
Dernière intervention
15 avril 2010

J'ai finalement compris mon erreur, j'avais vraiment fait n'importe quoi.
Par contre son programme ne marche pas, alors qu'avec l'hyperterminal de windows j'arrive a faire ce que je veux.
L'erreur vient je pense de la configuration de la communication avec la structure dcb ou qu'il n'envoye pas reellement "CT 50;" par exemple. Je verrait ca, ma configuration desiré est 9600 baud, 8 bits pas de controle de parité et 1 bit de stop et aucun protocole DSR, CTS et tout le tralala.
Merci pour votre aide.