Page 1 of 2

Ayuda URGENTE- con puerto serial virtual USB

PostPosted: Fri Nov 03, 2023 3:38 pm
by carito
Hola a todos,

Necesito una ayuda u orientacion urgente:

Tengo que leer el peso de una bascula (PESA) , que se conecta al pc mediante un cable adaptador SERIAL a puerto USB.

El drive de instalacion de la pesa me crea un puerto virtual COM4 por conexion USB. ( este puerto no existe fisicamente en el PC)

Mi problema es que no logro reconocer con las funciones de Harbour 3.2 ese puerto virtual, estoy medio angustiado, pues no
conozco otra forma. Si alguien sabe como configurar o reconocer esos puertos, se lo agradeceria mucho.

Se que la rutina funciona, pues si le doy un puerto serial COM1 verdadero ( no virtual ), es capaz de abrir y conectarse.

Mi rutina es la siguiente:


FUNCTION Balanza1( cPortName )

Local nComPort := 4 //COM3
Local nTimeOut := 100 //ms
Local lIsOpened := FALSE
Local lIsInit := FALSE

Local nBytesSended := 0
Local nBytesReceived := 0
Local cReceiveBuffer := SPACE(512)

Local cStringToSend := "W<CR>" // este comando le indica a la balzan que devuelva el peso detectado

//To receive
Local cReceivedString := ""

//to COM open
lIsOpened := HB_comOpen( nComPort )

//to Com Initialize
lIsInit := HB_ComInit( nComPort, 9600 , "N", 8, 1 )


//To send
nBytesSended := HB_ComSend( nComPort, cStringToSend , , nTimeOut )

//To receive
nBytesReceived := HB_ComRecv( nComPort, @cReceiveBuffer, , nTimeOut )

cReceivedString := Left( cReceiveBuffer, nBytesReceived )

? cReceivedString

return nil

Quedo a al espera y gracias,
Carito

Re: Ayuda URGENTE- con puerto serial virtual USB

PostPosted: Fri Nov 03, 2023 4:10 pm
by karinha

Re: Ayuda URGENTE- con puerto serial virtual USB

PostPosted: Fri Nov 03, 2023 5:40 pm
by carito
Hola Karinha;

Como siempre eres muy amable, gracias por tu respuesta.

La probe y modifique, pero me da error de memoria no funciona y se cae.

Existira alguna otra forma o tilizar alguna otra libreria externa, acepto ideas o sugerencias.

Quedo a la espera y gracias nuevamente, saludos
Carito

Re: Ayuda URGENTE- con puerto serial virtual USB

PostPosted: Fri Nov 03, 2023 6:31 pm
by karinha

Re: Ayuda URGENTE- con puerto serial virtual USB

PostPosted: Sat Nov 04, 2023 1:41 pm
by cmsoft
En alguna oportunidad usé estas funciones para conectarme por un puerto COM, tal vez te puedan ser de ayuda. Son las mismas que te pasó Jao, adaptadas a tu código
Espero que al menos te de una luz
Code: Select all  Expand view

FUNCTION Balanza1( cPortName )

Local idPort , cDcb
Local nComPort := 4 //COM3
Local nTimeOut := 100 //ms
Local lIsOpened := FALSE
Local lIsInit := FALSE


Local nBytesSended := 0
Local nBytesReceived := 0
Local cReceiveBuffer := SPACE(512)

Local cStringToSend := "W<CR>" // este comando le indica a la balzan que devuelva el peso detectado

//To receive
Local cReceivedString := ""

//to COM open
IdPort := OpenComm("COM"+STR(nComPort,1),1024,256)
lIsOpened := (idPort>0)

//to Com Initialize
//lIsInit := HB_ComInit( nComPort, 9600 , "N", 8, 1 )
lIsInit := BuildCommDcb("COM"+STR(nComPort,1)+":9600,n,8,1" , @cDcb)

//Set Port
SetCommState( IdPort, cDcb )

//To send
//nBytesSended := HB_ComSend( nComPort, cStringToSend , , nTimeOut )
nBytesSended := WriteComm( IdPort,cStringToSend) )

//To receive
//nBytesReceived := HB_ComRecv( nComPort, @cReceiveBuffer, , nTimeOut )
nBytesReceived := ReadComm( IdPort,@cReceiveBuffer)

cReceivedString := Left( cReceiveBuffer, nBytesReceived )

? cReceivedString

return nil
 

Re: Ayuda URGENTE- con puerto serial virtual USB

PostPosted: Mon Nov 06, 2023 12:11 am
by carito
Hola Karinha:

Es de marca METTLER TOLEDO , tiene conexion serial via adaptador con cable USB.

La documentacion es mala, nula que proporciona el proveedor. Asi que he estado
con prueba y error, y no hay caso, no lo logro comunicarme con ella.

Gracias por tu consulta.

Re: Ayuda URGENTE- con puerto serial virtual USB

PostPosted: Mon Nov 06, 2023 12:14 am
by carito
Hola Cesar, muchas gracias por tu mensaje.

Tambien buscando encontre tu rutina, la probe, pero no me funciono.
Muchas gracias de todas formas.

Tenia la esperanza de que exista una DLL o algun ejemplo con este modelo,
sigo buscando, pero nada aun.
Saludos,
Carito

Re: Ayuda URGENTE- con puerto serial virtual USB

PostPosted: Mon Nov 06, 2023 11:53 am
by karinha

Re: Ayuda URGENTE- con puerto serial virtual USB

PostPosted: Mon Nov 06, 2023 11:06 pm
by carito
Hola Karinha:

Muchas gracias por tus link, los miro , pruebo y te cuento.

Saludos,
Carito

Re: Ayuda URGENTE- con puerto serial virtual USB

PostPosted: Sun Feb 25, 2024 9:08 am
by Marc Venken
Tuviste éxito en la conexión a un USB virtual? Y con código de bruja?

Did you succeed in connection to a Virtual USB ? And with witch code ?

Re: Ayuda URGENTE- con puerto serial virtual USB

PostPosted: Mon Feb 26, 2024 9:57 pm
by carito
Hola lamentable NO, por un lado muy mala documentacion y ayuda del proveedor de la pesa.

Asi que ha sido solo prueba y error.

Si descubro algo, les informare.
Saludos

Re: Ayuda URGENTE- con puerto serial virtual USB

PostPosted: Mon Feb 26, 2024 10:52 pm
by Danielmaximiliano
carito wrote:Hola Karinha:

Es de marca METTLER TOLEDO , tiene conexion serial via adaptador con cable USB.

La documentacion es mala, nula que proporciona el proveedor. Asi que he estado
con prueba y error, y no hay caso, no lo logro comunicarme con ella.

Gracias por tu consulta.

Hola
que modelo en exacto es....

Re: Ayuda URGENTE- con puerto serial virtual USB

PostPosted: Tue Feb 27, 2024 5:12 am
by VictorCasajuana
Has probado de conectar con el hiper terminal de Windows? A veces nos volvemos locos con algo y realmente no funciona.

Enviado desde mi motorola edge 20 mediante Tapatalk

Re: Ayuda URGENTE- con puerto serial virtual USB

PostPosted: Tue Feb 27, 2024 7:38 pm
by Marc Venken
I wonder, did you connect to a virtual USB and where able to recieve data ?
Me pregunto, ¿te conectaste a un USB virtual y dónde pudiste recibir datos?

I found no code in the forum for virtual usb
No encontré código en el foro para usb virtual.

Re: Ayuda URGENTE- con puerto serial virtual USB

PostPosted: Wed Feb 28, 2024 7:29 am
by Antonio Linares
Dear Marc,

Have you tested the code that I emailed you ?
Code: Select all  Expand view
#pragma BEGINDUMP

#include <windows.h>
#include <stdio.h>
#include <hbapi.h>

HB_FUNC( TEST )
{
    HANDLE hSerial;
    DCB dcbSerialParams = {0};
    COMMTIMEOUTS timeouts = {0};
    const char data_to_send[] = "Hello Arduino!";
    DWORD bytes_written;
    char buffer[256];
    DWORD bytes_read;

    // Replace "COM3" with the correct port name for your Arduino
    hSerial = CreateFile("COM3", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    if (hSerial == INVALID_HANDLE_VALUE) {
        MessageBox( 0, "Error opening serial port", "Error", 0 );
        hb_retnl( 1 );
        return;
    }

    dcbSerialParams.DCBlength = sizeof(dcbSerialParams);
    if (!GetCommState(hSerial, &dcbSerialParams)) {
        MessageBox( 0, " Error getting serial port state", "Error", 0 );
        CloseHandle(hSerial);
        hb_retnl( 1 );
        return;
    }

    dcbSerialParams.BaudRate = CBR_9600; // Set your baud rate
    dcbSerialParams.ByteSize = 8;        // 8 data bits
    dcbSerialParams.StopBits = ONESTOPBIT; // 1 stop bit
    dcbSerialParams.Parity = NOPARITY;    // No parity

    if (!SetCommState(hSerial, &dcbSerialParams)) {
        MessageBox( 0, " Error setting serial port state", "Error", 0 );
        CloseHandle(hSerial);
        hb_retnl( 1 );
        return;
    }

    timeouts.ReadIntervalTimeout = 50;
    timeouts.ReadTotalTimeoutConstant = 50;
    timeouts.ReadTotalTimeoutMultiplier = 10;
    timeouts.WriteTotalTimeoutConstant = 50;
    timeouts.WriteTotalTimeoutMultiplier = 10;

    if (!SetCommTimeouts(hSerial, &timeouts)) {
        MessageBox( 0, " Error setting timeouts", "Error", 0 );
        CloseHandle(hSerial);
        hb_retnl( 1 );
        return;
    }

    // Example: Write data to Arduino
    if (!WriteFile(hSerial, data_to_send, sizeof(data_to_send) - 1, &bytes_written, NULL)) {
        MessageBox( 0, " Error writing to serial port", "Error", 0 );
    } else {
         MessageBox( 0, "Bytes sent to Arduino", "Error", 0 );
    }

    // Example: Read data from Arduino
    if (!ReadFile(hSerial, buffer, sizeof(buffer) - 1, &bytes_read, NULL)) {
         MessageBox( 0, "Error reading from serial port", "Error", 0 );
    } else {
        buffer[bytes_read] = '\0';
        // printf("Received %lu bytes from Arduino: %s\n", bytes_read, buffer);
    }

    CloseHandle(hSerial);
    hb_retnl( 0 );
}

#pragma ENDDUMP