none
AYUDA!!! Problema al leer del puerto serie!! RRS feed

  • Pregunta

  • Hola!!

    A ver si me podeis echar una mano...os cuento mi problema..

    El caso es que trabajo para unas entidades bancarias..dichas entidades tienen varias impresoras financieras(las que leen/escriben en las libretas), el caso es que iban bien hasta que se les actualizó el firmware...desde ése día ya no leen la banda magnetica ni escriben en ella...asi que me han pedido que le eche un vistazo al código que implementa el puerto serie..

    Mas o menos lo que hace el codigo es crear un handle..con ése handle  y unos datos llama a la función writefile.. los escribe en el puerto serie y despues se llama a la funcion readfile para que lea lo que está en el puerto.

    según las pruebas que he realizado... escribir escribe bien en el puerto...pero leer.....la función no devuelve ningun error..pero 0 bytes leidos..

    he estado mirando y por lo visto es que no hay nada que leer...encuentra un end of file..y por eso la función read no da ningun error..

    Asi que me estoy volviendo loca.. no se como solucionarlo... tendrá algo que ver la configuracion de la impresora?

    Muchas gracias..




    KiShiTa.

    domingo, 4 de noviembre de 2007 21:03

Respuestas

  • Pues lo más normal es que ese nuevo firmware esté mal.

     

    Si con el firmware anterior se podía leer y escribir y con el nuevo no, está claro para mi, a no ser que hayan cambiado el protocolo. Si mandas una orden de impresión, ¿imprime o te ignora olímpicamente? Si te ignora también puede ser que la impresora se haya desconfigurado, es decir, esos aparatos deben llevar una serie de configuraciones (velocidad, paridad, etc etc) que debe poder ser cambiado de alguna manera y que al escribir el nuevo firmware también hayan vuelto a la configuración de fábrica y haya que volverlas a configurar.

     

    Primero la zanahoria, ahora el palo: Vamos a ver, alma de dios: ¿Trabajas para un banco, haces el soft de la terminal, te cambian el firmware de una impresora y ya no sabes por dónde tirar? ¿No tendrá ese nuevo firm un nuevo SDK o al menos una documentación nueva? ¿El banco deja así como así que lleguen unos tíos y les toquen los aparatos, sin más? ¿Sin pruebas preliminares? Ponte en contacto con el que haya actualizado el firm (o con el fabricante) y que te explique qué han cambiado.

     

    Nota: si el puerto serie está mal configurado y no se usan protocolos de hardware (es decir más de los tres hilos habituales), el hecho de escribir no indica que estés escribiendo bien, es decir, lo que está al otro lado puede recibir basura e ignorar (por eso no responde). Ahora bien, si mandas imprimir algo y lo saca, entonces debe ser que han cambiado algo del protocolo, o que el hilo RX (desde el punto de vista del ordenador) se haya cortado o algo similar... Porque imagino que sólo habrás probado en la máquina de prueba y no en otras...

     

    domingo, 4 de noviembre de 2007 22:21
    Moderador
  • Hola:

    Puedes descargar el manual en pdf sobre VC++ y  puerto serie.

    Saludo.

    http://electronica-pic.blogspot.com
    martes, 26 de mayo de 2009 21:46

Todas las respuestas

  • Pues lo más normal es que ese nuevo firmware esté mal.

     

    Si con el firmware anterior se podía leer y escribir y con el nuevo no, está claro para mi, a no ser que hayan cambiado el protocolo. Si mandas una orden de impresión, ¿imprime o te ignora olímpicamente? Si te ignora también puede ser que la impresora se haya desconfigurado, es decir, esos aparatos deben llevar una serie de configuraciones (velocidad, paridad, etc etc) que debe poder ser cambiado de alguna manera y que al escribir el nuevo firmware también hayan vuelto a la configuración de fábrica y haya que volverlas a configurar.

     

    Primero la zanahoria, ahora el palo: Vamos a ver, alma de dios: ¿Trabajas para un banco, haces el soft de la terminal, te cambian el firmware de una impresora y ya no sabes por dónde tirar? ¿No tendrá ese nuevo firm un nuevo SDK o al menos una documentación nueva? ¿El banco deja así como así que lleguen unos tíos y les toquen los aparatos, sin más? ¿Sin pruebas preliminares? Ponte en contacto con el que haya actualizado el firm (o con el fabricante) y que te explique qué han cambiado.

     

    Nota: si el puerto serie está mal configurado y no se usan protocolos de hardware (es decir más de los tres hilos habituales), el hecho de escribir no indica que estés escribiendo bien, es decir, lo que está al otro lado puede recibir basura e ignorar (por eso no responde). Ahora bien, si mandas imprimir algo y lo saca, entonces debe ser que han cambiado algo del protocolo, o que el hilo RX (desde el punto de vista del ordenador) se haya cortado o algo similar... Porque imagino que sólo habrás probado en la máquina de prueba y no en otras...

     

    domingo, 4 de noviembre de 2007 22:21
    Moderador
  • si mando una orden de impresion imprime correctamente..las configuraciones las he revisado y estan correctas..

    palo XD: llegue hace poco a esta empresa y lo unico que me han dicho es que la impresora antes imprimia y ahora no...que mire la implementacion del puerto serie..y que lo solucione...

    la libreria se ha probado en 3 impresoras una vieja.. una nueva y otra todavia mas nueva...en la vieja funcionaba antes y ahora.. en las otras dos.. antes funcionaban y ahora despues de que se les actualizase el firmware no...

    el caso es que no me dicen quien actualizó el firmware ...ni por supuesto que cambiaron...
    asi que no se ..por momentos me estoy volviendo loca XD


    Gracias de todos modos.
    Un saludo!
    lunes, 5 de noviembre de 2007 17:54
  •  KiShiTa Escribió:
    si mando una orden de impresion imprime correctamente..las configuraciones las he revisado y estan correctas..

    palo XD: llegue hace poco a esta empresa y lo unico que me han dicho es que la impresora antes imprimia y ahora no...que mire la implementacion del puerto serie..y que lo solucione...

     

    Pues no sé qué decirte, la verdad. En cierto modo lo entiendo, pero desde luego dicho de esa forma, no.

     

     KiShiTa Escribió:
    la libreria se ha probado en 3 impresoras una vieja.. una nueva y otra todavia mas nueva...en la vieja funcionaba antes y ahora.. en las otras dos.. antes funcionaban y ahora despues de que se les actualizase el firmware no...

     

    Vale, con eso descartamos que tengas un problema en tu ordenador de cableados etc.

     KiShiTa Escribió:
    el caso es que no me dicen quien actualizó el firmware ...ni por supuesto que cambiaron...
    asi que no se ..por momentos me estoy volviendo loca XD

     

    Pues para serte sinceros no creo que tu jefe se merezca que estés trabajando para él. Hazle ver que no eres adivina y que si han cambiado algo deben comunicártelo.

     

    De todos modos hay un programa que se llama "Realterm" (http://realterm.sourceforge.net/), que hace una espuerta de cosas, entre las que está monitorizar el puerto serie como si fuera un sniffer, aunque si la impresora no devuelve nada... poco vas a poder mirar.

     

    Estoooo... Supongo que lees mediante ReadFile y que has ajustado los tiempos mediante GetCommTimeouts y SetCommTimeouts. Te pongo un ejemplo que tengo en producción:

     

    Bloque de código

    DCB dcbComm;

    m_hComm = CreateFile(szComPort, GENERIC_WRITE|GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);

    if (m_hComm == INVALID_HANDLE_VALUE)

    exit(1);

    dcbComm.DCBlength = sizeof(DCB);

    if(!GetCommState(m_hComm,&dcbComm))

    {

    CloseHandle(m_hComm);

    exit(3);

    }

    dcbComm.BaudRate = CBR_9600;

    dcbComm.ByteSize = 8;

    dcbComm.Parity = NOPARITY;

    dcbComm.StopBits = ONESTOPBIT;

    dcbComm.fDtrControl=DTR_CONTROL_DISABLE;

    dcbComm.fRtsControl=RTS_CONTROL_DISABLE;

    dcbComm.fDsrSensitivity=FALSE;

    if (!SetCommState(m_hComm, &dcbComm))

    {

    CloseHandle(m_hComm);

    exit(2);

    }

    COMMTIMEOUTS commTimeouts;

    GetCommTimeouts(m_hComm,&commTimeouts);

    commTimeouts.ReadTotalTimeoutConstant=dwDefaultReadTimeout;

    SetCommTimeouts(m_hComm,&commTimeouts);

     

    Es solo un ejemplo, tus valores podrían cambiar. Echale un vistazo a http://msdn2.microsoft.com/en-us/library/aa363190.aspx.
miércoles, 7 de noviembre de 2007 18:12
Moderador
  • Ya lo tengo solucionado...era el valor del rts que lo tenía desactivado...


    Gracias de tdos modos

    Un Saludo!
    viernes, 9 de noviembre de 2007 15:11
  • Hola:

    Puedes descargar el manual en pdf sobre VC++ y  puerto serie.

    Saludo.

    http://electronica-pic.blogspot.com
    martes, 26 de mayo de 2009 21:46