Bonjour,

Je vous demande votre aide car j'ai un problème.
J'ai un programme en C++ qui me permet d'intéroger des compteurs électrique via RS485 en MODBUS.
Mon programme fonctionne mais uniquement si, avant de compiler, j'utilise l'utilitaire du fabriquant du compteur pour sélectionner mon COM 10 et cliquer sur connect puis disconnect.
Si je ne fais pas cette manipulation mon programmene va pas plus loin que le ReadFile.

Mon but est de faire en sorte de ne plus avoir à passer par l'utilitaire pour faire fonctionner mon programme.

Merci d'avance pour toute aide!

Lucas B

PS: voici mon constructeur:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Serie::Serie(int ad_client)
{
    DCB dcbSerialParams;
    COMMTIMEOUTS timeouts;
    hSerial = CreateFile( L"\\\\.\\COM10",
                         GENERIC_READ | GENERIC_WRITE,
                         0,
                         0,
                         OPEN_EXISTING,
                         FILE_ATTRIBUTE_NORMAL,
                         0);
 
   if(hSerial!= INVALID_HANDLE_VALUE){
        cout << "Connecter au port COM\n" << endl;
   }else{
        cout <<"Impossible de ce connecter au port COM\n" <<endl;
        exit(0);
   }
        GetCommState(hSerial,&dcbSerialParams);
        dcbSerialParams.BaudRate=CBR_9600;
        dcbSerialParams.ByteSize=8;
        dcbSerialParams.StopBits=ONESTOPBIT;
        dcbSerialParams.Parity=NOPARITY;
 
        timeouts.ReadIntervalTimeout=100;
        timeouts.ReadTotalTimeoutConstant=10000;
        timeouts.ReadTotalTimeoutMultiplier=1;
        timeouts.WriteTotalTimeoutConstant=50;
        timeouts.WriteTotalTimeoutMultiplier=10;
 
        if(!SetCommTimeouts(hSerial,&timeouts)){
            cout << "Timeouts: FAIL" << endl;
        }
        PurgeComm(hSerial,10);
        Sleep(1000);
        set_ad(ad_client);
}