RS232 envoye une string

dongonis38 Messages postés 8 Date d'inscription jeudi 25 mars 2010 Statut Membre Dernière intervention 15 avril 2010 - 25 mars 2010 à 18:12
dongonis38 Messages postés 8 Date d'inscription jeudi 25 mars 2010 Statut Membre Dernière intervention 15 avril 2010 - 26 mars 2010 à 19:50
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

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

ciao...
BruNews, MVP VC++
0
dongonis38 Messages postés 8 Date d'inscription jeudi 25 mars 2010 Statut Membre Dernière intervention 15 avril 2010
26 mars 2010 à 12:49
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
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
26 mars 2010 à 19:39
nBytesWritten doit contebir en sortie le nbr d'octets réellement écrits.

ciao...
BruNews, MVP VC++
0
dongonis38 Messages postés 8 Date d'inscription jeudi 25 mars 2010 Statut Membre Dernière intervention 15 avril 2010
26 mars 2010 à 19:50
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.
0
Rejoignez-nous