Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

RS232 para Leo, nuevo problema

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: RS232 para Leo, nuevo problema Responder citando

inicio un nuevo tema, porque es posible que no vieses la pregunta del anterior post ya se hizo muy largo.

Leo...
Me ha surgido un problema curioso y no sé por donde meterle mano ya que no lo entiendo.

El código que me facilitaste funciona, pero...
Solo sin antes ejecuto el PROGRAMA DE TEST, hago la prueba y lo cierro. Si luego abro mi aplicación funciona perfecto, pero si abro mi aplicación sin antes haber abierto el programa de TEST, NO funciona y no da ningún mensaje.

Imagino que es porque el programa de TEST, además de enviar y recibir datos por el PUERTO SERIE, debe de iniciar algo en la BALANZA o en mi PC.

Estoy confuso y no sé por donde cogerlo...
¿Se te ocurre que puede ser?

GRACIAS.
_________________
Muchos hombres no se equivocan jamás porque no se proponen nada razonable.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor
Mensaje    Asunto: Responder citando

Prueba añadiendo lo siguiente antes del WriteFile:
Código:
DCB dcb = {0};
dcb.DCBlength = sizeof(DCB);
dcb.BaudRate  = CBR_9600; //Prueba con CBR_19200 también
dcb.ByteSize  = 8;
dcb.Parity    = NOPARITY;
dcb.StopBits  = ONESTOPBIT;
SetCommState(com, &dcb);

Fíjate que los datos que pones coinciden con los que tiene configurados la pesa, no se me ocurre que otra cosa puede ser ya que el manual no pone que haya que enviar nada más para inicializar.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Leo, Perfecto...
Ya probé antes con código parecido, pero no puse los valores tal como tu has escrito y no me funcionó, sin embargo con el que has escrito funciona perfecto.

Solo una pregunta...
Por qué esta LINEA:
const DWORD bufferSize = 80;

En lugar de esta?
const DWORD bufferSize = 18;

La BALANCA me devuelve:
16 + 1 + '\n' = 18

¿Quizás lo pusiste a 80 por precaución?


Muchas gracias por todo...
_________________
Muchos hombres no se equivocan jamás porque no se proponen nada razonable.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor
Mensaje    Asunto: Codigo final Responder citando

Sabiendo los caracteres que devuelve la BALANZA he puesto directamente el valor del buffer a 20
Gracias por todo, Leo.

Código:

//Secuencia de caracteres a enviar a la BALANZA en función del PROCOLO Programado en la BALANZA (Protocolo TISA, por defecto en las Balanzas)
String __fastcall TfrmBalanzaDigital::LeerPeso(String PuertoCom)
{
    String ret = "";
    HANDLE com = CreateFile(PuertoCom.w_str(), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
    if(com == INVALID_HANDLE_VALUE)
    {
       throw Exception("No se pudo abrir el puerto serie");
    }
    else
        {//PROTOCOLO por defecto TISA: 98PPPPPCCrLf -> "98000001\r\n" Secuencia de caracteres a enviar a la BALANZA, Se recibe: 99SWWWWWEIIIIIICCRLF
        //Donde 98 =Protocolo TISA,  P = 5 Digítos para precio 00000, C = CheckSum XOR, Cr = Retornto de carro \r, Lf = Salto de Linea \n
            DCB dcb = {0};
            dcb.DCBlength = sizeof(DCB);
            dcb.BaudRate  = CBR_9600;
            dcb.ByteSize  = 8;
            dcb.Parity    = NOPARITY;
            dcb.StopBits  = ONESTOPBIT;
            SetCommState(com, &dcb);

            WriteFile(com, "98000001\r\n", 10, 0, NULL);
            Sleep(100);
            COMSTAT stat;
            ClearCommError(com, 0, &stat);
            if(stat.cbInQue > 0)
            {
                char buffer[20] = "";
                ReadFile(com, buffer, stat.cbInQue, 0, NULL);
                ret = buffer;
            }
        }
    CloseHandle(com);
    return ret;
}
//---------------------------------------------------------------------------

_________________
Muchos hombres no se equivocan jamás porque no se proponen nada razonable.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.