Communication port série W2000/W98
Salut
Voila mon probleme: j'ai développé une appli en C++ avec Microsoft Development Environment 2003 Version 7.1.3088 (Visual .Net 2003 koi ;) ) qui gère une communication avec une balance industrielle via le port série. Cette appli fonctionne correctement sous win 2000 et je reçois parfaitement la trame envoyée par la balance.
Or, lorsque j'essaie la meme appli sous win 98, je ne récupère aucune information de la-dite balance. Apparemment, mon application ne retourne aucune erreur donc l'ouverture de la communication avec le port série est correcte et la réception pareil. J'ai vérifié les paramètres de configuration du port série grâce à l'hyperterminal, et lui, il récupere bien la trame envoyée.
Je vous joins le codes de la fonction d'ouverture de communication :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| e_ErrCom OuvreCom(char *strPort,long BaudRate,int BitsSize,int Parity,int StopBits)
{
g_ErrCom = e_ErrCom_None;
// On ouvre le port série
g_hCom = CreateFile(strPort,GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_FLAG_WRITE_THROUGH | FILE_FLAG_NO_BUFFERING,NULL);
if(g_hCom == INVALID_HANDLE_VALUE)
{
// Echec
g_ErrCom=e_ErrCom_Creation;
}
else
{
// On vide les buffers
PurgeComm(g_hCom,PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);
// On paramètre le port série
g_DCB.DCBlength = sizeof(DCB);
//Configuration actuelle
GetCommState(g_hCom, &g_DCB);
//Modification du DCB
g_DCB.BaudRate=BaudRate;
g_DCB.ByteSize=BitsSize;
g_DCB.Parity=Parity;
g_DCB.StopBits=StopBits;
g_DCB.fDtrControl=DTR_CONTROL_DISABLE;
//Configuration de la liaison serie
SetCommState(g_hCom,&g_DCB);
}
return g_ErrCom;
} |
Voici le code de ma fonction de réception :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| e_ErrCom ReceptionCom(void *lpBuf,unsigned int nCountMax, unsigned int* pCountRead)
{
COMSTAT Stat;
DWORD Errors;
unsigned int nCarALire;
unsigned long NCarLus=0;
if(g_hCom!=NULL)
{
//on pari sur pas d'erreur
g_ErrCom=e_ErrCom_None;
//Pour éviter de gérer un time out; Laisse le temps de recevoir la trame.
Sleep(1000);
//Pour connaitre le nombre d'octets dans le buffer d'entrée
ClearCommError(g_hCom,&Errors,&Stat);
nCarALire=Stat.cbInQue;
//On effectue la lecture si il y a des caractères présents
if( (nCarALire>0)&&(nCarALire<=nCountMax) )
{
if(ReadFile(g_hCom,lpBuf,nCarALire,&NCarLus,NULL)==0)
{
g_ErrCom=e_ErrCom_Reception;
}
}
*pCountRead=NCarLus;
}
else
//Le port n a pas été ouvert
g_ErrCom=e_ErrCom_Creation;
//Compte rendu de l'exécution
return g_ErrCom;
} |
Et enfin la fonction qui gère la fermeture :
Code:
1 2 3 4 5 6 7
| void FermeCom()
{
if(g_hCom!=NULL)
{
CloseHandle(g_hCom);
}
} |
Voila, ces fonctions sont-elles compatibles avec w98 ? comment pourrai-je les transformer pour que mon programme tourne sur cet OS ?
J'ai cru comprendre que sous w98, on peut directement travailler avec les registres du port série, p-e est-ce cela la solution ?
Merci d'avance