KarmaKiller | J'ai un programme censé faire communiquer un PC et une carte par le port série. Voila le code concernant les différents bloc de code assurant la gestion de cette communication:
configuration et création du port:
Code :
- //initialisation du RS232
- WCHAR pwchLicenseKey[] =
- {
- 0x0043, 0x006F, 0x0070, 0x0079, 0x0072, 0x0069,
- 0x0067, 0x0068, 0x0074, 0x0020, 0x0028, 0x0063,
- 0x0029, 0x0020, 0x0031, 0x0039, 0x0039, 0x0034,
- 0x0020
- };
-
- BSTR bstrLicense = ::SysAllocStringLen(pwchLicenseKey, sizeof(pwchLicenseKey)/sizeof(WCHAR));
- comm1 = new CMSComm;
- comm1->Create(NULL,0,CRect(0,0,0,0),this,IDC_MSCOMM1, NULL, FALSE, bstrLicense);
- comm1->SetCommPort(1);
- comm1->SetSettings("2400 //vitesse de 2400 bauds
- ,o //parité impaire
- ,8 //nombre de bit à lire
- ,1" ); //nombre de bit de stop
- comm1->SetInputLen(1); //nombre de caractére lu à la fois
- comm1->SetPortOpen(true);
|
Voila ma fonction d'écriture
Code :
- void ecrire(char c) /* ‚criture sur le port s‚rie */
- {VARIANT var;
- CString macs;
- macs=""+c;
- var=(VARIANT)(_variant_t) _bstr_t(macs);
- comm1->SetOutput(var);
- }
|
Demande d'allocation de la ligne à la carte par l'envoi d'un octet null:
Envoie des parametres:
Code :
- ecrire(3); /*demande de lecture*/
- ecrire(65); /*envoi de divers parametres*/
- ecrire(pw1);
- ecrire(pw2);
- ecrire(ecr1);
- ecrire(ecr2);
|
lecture sur le port série
Code :
- tagVARIANT tempp;
- CString recep;
- char * tenta="";
- //on récupere le premier caratére présent sur le port série
- //la donnée reçue est de type VARIANT
- tempp=comm1->GetInput();
- //multi castage permettant de convertir notre VARIANT en CString
- recep.Format("%s",(char *)(_bstr_t) _variant_t(&tempp));
- //tant qu'on reçoit des données
- while(recep.IsEmpty()==0)
- {
- //on ne recupere que le premier caractere de la CString et on le stock dans un tableau
- tab[i]=recep[0];
- i++;
- //on récupere le caractére suivant présent sur le port série
- tempp=comm1->GetInput();
- //meme castage qu'au dessus
- recep.Format("%s",(char *)(_bstr_t) _variant_t(&tempp));
- }
|
Alors j'ai l'impression que mon programme lis sur le port com vu que je reçoit des valeurs; mais rien n'est moins sur...
En effet les valeurs héxa lues ( grace au watch du debugger) ne semblent pas conforme au valeurs que j'attendais. Ainsi je reçois des valeurs héxa allant 0 à 255 alors que normalement elles devraient tourner autour de 0,1,2,3 ou 4.
Donc sil vous plait si quelqu'un avait la moindre idée du problème faite le moi savoir. :-(
C'est super urgent, ce programme est mon sujet de stage et il doit être bouclé pour vendredi. Le seul probleme vient de cette communication par port série!!! merci
|