jysuispresque
Messages postés2Date d'inscriptionmardi 29 novembre 2005StatutMembreDernière intervention30 novembre 2005
-
29 nov. 2005 à 20:56
jysuispresque
Messages postés2Date d'inscriptionmardi 29 novembre 2005StatutMembreDernière intervention30 novembre 2005
-
30 nov. 2005 à 13:07
Bonjour,
J'utilise le sous-programme ci-joint (C++ Borland v.5) pour envoyer et récupérer des données par voie série à partir d'un capteur. Mon problème est le suivant : quand j'envoie les données au capteur afin qu'il commence la mesure, tout va bien, il comprend ce qui est transmis et démarre l'envoi de données. Mais c'est à la lecture que rien ne va plus : les données lues sont incompréhensibles, et je n'arrive pas à savoir pourquoi. Par ailleurs, le capteur fonctionne et ce n'est donc pas de lui que provient l'erreur.
Toute contribution est la bienvenue,
Jean-Michel
void TBD_Modale3::B_OK3()
{
HANDLE mon_hand1;
DCB dcb1;
DWORD error1;
BOOL fSuccess,fSuccess1,fSuccess2,bResult,bResult1;
char buf[15];
COMMTIMEOUTS tTimeout;
int TimeoutRead;
unsigned char inBuffer[100];
char *Message;
unsigned long nBytesRead;
char *ChaineRecue;
int NbOctet;
unsigned long nBytesWrite;
char *Port;
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 29 nov. 2005 à 23:35
if(mon_hand1==INVALID_HANDLE_VALUE)
Capteur1->SetText("pb");
OK mais faudrait aussi un 'return' car si pas bon le handle STOP.
Message=new char[6];
char char1=0x1B, char2=0x06, char3=0x00, char4=0x05, char5=0x00, char6=0x00;
sprintf(Message,"%c%c%c%c%c%c",char1,char2,char3,char4,char5,char6);
Tu es certain que tout cela tient dans les 6 octets de 'Message' ???
Evite aussi de faire tourner le memory manager pour quelques octets qui iront très bien sur la pile:
char Message[24]; // plus imple et nettement + rapide
Commence déjà par cela, on regardera plus bas ensuite.
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 30 nov. 2005 à 09:35
dcb1.DCBlength = 100000;
> dcb1.DCBlength sizeof(DCB); il faut donner la taille de la structure
vu que c'est plutôt des octets que des caractères affichables que tu envoi, les afficher en hexa serait mieux,
=> %c à remplacer par %02X.
a priori tu es suceptible de recevoir des octets à 0 (vu que tu en envoi, mais c'est une supposition)
=> il faut spécifier que tu veux les recevoir
dcb1.fNull = FALSE;
jysuispresque
Messages postés2Date d'inscriptionmardi 29 novembre 2005StatutMembreDernière intervention30 novembre 2005 30 nov. 2005 à 13:07
Merci Brunews; j'ai effectué les modifs conseillées. En vérifiant par
Debug, les 6 octets paraissent suffisants; cependant j'ai fixé le
nombre à 24. Mais le problème reste entier...
Merci ymca2003, effectivement j'envoie et je reçois des octets à 0. En
fait, pour tester le capteur, j'envoie 0x1B 0x06 0x00 0x05 0x00 0x00 ,
et il doit me renvoyer la même chose;
j'ai modifié le dcb1 comme proposé, mais je ne reçois pas encore la bonne réponse, même s'il y a du progrès...