Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Componente puerto serie Embarcadero c++ Builder (https://www.clubdelphi.com/foros/showthread.php?t=95260)

chinchan 26-06-2021 13:52:18

Componente puerto serie Embarcadero c++ Builder
 
Hola y saludos a todos los del foro. Cuando programaba en C++ Builder6 utilizaba los componentes ComPort para comunicarme por el puerto serie (de eso hace ya tiempo). Ahora utilizo el el Embarcadero XE y por más que he buscado, no encuentro estos componentes para el Builder XE5. ¿Sabéis si existen para este compilador?, ¿Sabéis si hay otros componentes que pueda utilizar?... Muchas gracias.

Neftali [Germán.Estévez] 28-06-2021 09:16:00

Revisa este link:
https://winsoft.sk/comport.htm
El precio es muy asequible.

También puedes revisar esta lista a ver si hay algún otro interesante:
https://torry.net/pages.php?s=89

chinchan 28-06-2021 12:55:41

Muchas gracias Neftali, echaré un vistazo a los link.

lucho6007 28-06-2021 15:08:27

El usuario CWBudde de GitHub dice que hizo un fork de la versión 4.10 alojada en SourceForge.

https://github.com/CWBudde/ComPort-Library


Espero te sea util.


Saludos

chenech 07-04-2022 00:07:15

API de Windows
 
Cita:

Empezado por chinchan (Mensaje 541493)
Hola y saludos a todos los del foro. Cuando programaba en C++ Builder6 utilizaba los componentes ComPort para comunicarme por el puerto serie (de eso hace ya tiempo). Ahora utilizo el el Embarcadero XE y por más que he buscado, no encuentro estos componentes para el Builder XE5. ¿Sabéis si existen para este compilador?, ¿Sabéis si hay otros componentes que pueda utilizar?... Muchas gracias.

Yo lo he echo siempre con llamadas al API de Windows, así no dependo de terceros y complia en cualquier versión desde la 1 hasta la 11.
Te paso un ejemplo que tengo para comunicar con una pesa, ReadFile y WriteFile se encargan de leer o grabar en el puerto:
Código:

        HANDLE hComm;
        DCB dcbCommPort;
        COMMTIMEOUTS ctmoNew = {0};
        DWORD dwBytesRead, dwBytesWrite;
        char chBuf[50], chEnvia[32], chEnvia2[3];
        chBuf[0] = '\0';
        double dPesada = 0;
        char *cPuerto = getenv("CFPUERTO");
        String ASPuerto = cPuerto;
        hComm = CreateFile(ASPuerto.w_str(), GENERIC_READ | GENERIC_WRITE, 0, 0,
                                                                                OPEN_EXISTING, 0, 0);
        if(hComm == INVALID_HANDLE_VALUE)
        {
                ShowMessage("Error abiendo el puerto de comunicaciones");
                return 0;
        }
        ctmoNew.ReadTotalTimeoutConstant = 100;
        ctmoNew.ReadTotalTimeoutMultiplier = 0;
        ctmoNew.WriteTotalTimeoutConstant = 100;
        ctmoNew.WriteTotalTimeoutMultiplier = 0;
        SetCommTimeouts(hComm, &ctmoNew);
        dcbCommPort.DCBlength = sizeof(dcbCommPort);
        GetCommState(hComm, &dcbCommPort);
        BuildCommDCB(L"9600,o,7,1", &dcbCommPort);
        SetCommState(hComm, &dcbCommPort);
        char cRedondeo[25], chPeso[10];
        sprintf(cRedondeo, "%06.f", Form1->PN(EPVP->Text) * 100);
        unsigned int ui;
        for(ui=0;ui<strlen(cRedondeo);ui++)
                chEnvia[ui+5] = cRedondeo[ui];
        sprintf(cRedondeo, "%13s", ENomArticulo->Text.c_str());
        for(ui=0;ui<strlen(cRedondeo);ui++)
                chEnvia[ui+17] = cRedondeo[ui];
        chEnvia[0] = '\x04';
        chEnvia[1] = '\x02';
        chEnvia[2] = '0';
        chEnvia[3] = '5';
        chEnvia[4] = '\x1b';
        chEnvia[11] = '\x1b';
        chEnvia[12] = '0';
        chEnvia[13] = '0';
        chEnvia[14] = '0';
        chEnvia[15] = '0';
        chEnvia[16] = '\x1b';
        chEnvia[30] = '\x03';
        chEnvia[31] = '\0';
        WriteFile(hComm, chEnvia, strlen(chEnvia), &dwBytesWrite, NULL);
        ReadFile(hComm, chBuf, 45, &dwBytesRead, NULL);
        if(dwBytesRead == 1)
        {
                if(chBuf[0] == '\x06')
                {
                        chEnvia2[0] = '\04';
                        chEnvia2[1] = '\05';
                        chEnvia2[2] = '\0';
                        Sleep(500);
                        WriteFile(hComm, chEnvia2, strlen(chEnvia2), &dwBytesWrite, NULL);
                        Sleep(500);
                        ReadFile(hComm, chBuf, 45, &dwBytesRead, NULL);
                        if(dwBytesRead == 26)
                        {
                                if(chBuf[0] == '\x02')
                                {
                                        chPeso[0] = chBuf[6];
                                        chPeso[1] = chBuf[7];
                                        chPeso[2] = chBuf[8];
                                        chPeso[3] = chBuf[9];
                                        chPeso[4] = chBuf[10];
                                        chPeso[5] = '\0';
                                        cRedondeo[0] = chPeso[0];
                                        cRedondeo[1] = chPeso[1];
                                        cRedondeo[2] = '.';
                                        cRedondeo[3] = chPeso[2];
                                        cRedondeo[4] = chPeso[3];
                                        cRedondeo[5] = chPeso[4];
                                        cRedondeo[6] = '\0';
                                        try { dPesada = atof(cRedondeo); }
                                        catch (...) { dPesada = 0; }
                                }
                                else
                                        ShowMessage("Error en la lectura de la cabecera de la pesa");
                        }
                        else
                                ShowMessage("Error en los dígitos devueltos de la pesa");
                }
                else
                        ShowMessage("No se recibe ACK de la pesa");
        }
        else
                ShowMessage("No se recibe respuesta de la pesa");
        PurgeComm(hComm, PURGE_RXABORT);
        CloseHandle(hComm);



La franja horaria es GMT +2. Ahora son las 04:17:28.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi