Porbleme super urgent de port série !!!!!!

Porbleme super urgent de port série !!!!!! - C++ - Programmation

Marsh Posté le 17-06-2003 à 16:44:40    

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 :
  1. //initialisation du RS232
  2. WCHAR pwchLicenseKey[] = 
  3.    { 
  4.      0x0043, 0x006F, 0x0070, 0x0079, 0x0072, 0x0069, 
  5.      0x0067, 0x0068, 0x0074, 0x0020, 0x0028, 0x0063, 
  6.      0x0029, 0x0020, 0x0031, 0x0039, 0x0039, 0x0034, 
  7.      0x0020 
  8.    }; 
  9.    
  10.    BSTR bstrLicense = ::SysAllocStringLen(pwchLicenseKey, sizeof(pwchLicenseKey)/sizeof(WCHAR));
  11. comm1 = new CMSComm;
  12. comm1->Create(NULL,0,CRect(0,0,0,0),this,IDC_MSCOMM1, NULL, FALSE, bstrLicense);
  13. comm1->SetCommPort(1);
  14. comm1->SetSettings("2400 //vitesse de 2400 bauds
  15.                            ,o    //parité impaire
  16.                            ,8    //nombre de bit à lire
  17.                            ,1" ); //nombre de bit de stop
  18. comm1->SetInputLen(1);  //nombre de caractére lu à la fois
  19. comm1->SetPortOpen(true);


 
 
Voila ma fonction d'écriture

Code :
  1. void ecrire(char c)              /* ‚criture sur le port s‚rie */
  2.     {VARIANT var;
  3. CString macs;
  4. macs=""+c;
  5. var=(VARIANT)(_variant_t) _bstr_t(macs);
  6. comm1->SetOutput(var);
  7. }


 
 
Demande d'allocation de la ligne à la carte par l'envoi d'un octet null:

Code :
  1. ecrire(0);


 
 
Envoie des parametres:

Code :
  1. ecrire(3);           /*demande de lecture*/
  2. ecrire(65);          /*envoi de divers parametres*/
  3. ecrire(pw1);         
  4. ecrire(pw2);         
  5. ecrire(ecr1);         
  6. ecrire(ecr2);


 
 
lecture sur le port série

Code :
  1. tagVARIANT tempp;
  2. CString recep;
  3. char * tenta="";
  4. //on récupere le premier caratére présent sur le port série
  5. //la donnée reçue est de type VARIANT
  6. tempp=comm1->GetInput();
  7. //multi castage permettant de convertir notre VARIANT en CString
  8. recep.Format("%s",(char *)(_bstr_t) _variant_t(&tempp));
  9. //tant qu'on reçoit des données
  10. while(recep.IsEmpty()==0)               
  11. {
  12. //on ne recupere que le premier caractere de la CString  et on le stock dans un tableau
  13.         tab[i]=recep[0];
  14.         i++;
  15. //on récupere le caractére suivant présent sur le port série
  16. tempp=comm1->GetInput();
  17. //meme castage qu'au dessus
  18. recep.Format("%s",(char *)(_bstr_t) _variant_t(&tempp));
  19. }


 
 
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.  :cry:  
Le seul probleme vient de cette communication par port série!!!  :cry:  
 
merci
 
 

Reply

Marsh Posté le 17-06-2003 à 16:44:40   

Reply

Marsh Posté le 18-06-2003 à 13:43:46    

Personne ne peut m'aider?  :cry:  
 
Quelques précisions:
le type tagVARIANT est une structure renvoyée par la methode GetInput (on utilise l'activeX MScomm32), elle contiend les informations prevenant du port. C'est pour cela qu'on a recours a un multi castage afin de  convertir les donnée lu en CString afin de pouvoir les exploiter.
 
merci d'avance  :sweat:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed