Impresion directa a puertos usando [x]Harbour y FWH

Conocido es el problema que se plantea a la hora de poder realizar impresion directa en el puerto serie o paralelo usando [x]Harbour y FWH.

Aqui cuento mi aventura y como lo solucione.

Después de varios días haciendo pruebas y requetepruebas con TDosPrn, la clase que viene con FWH para la impresión directa a puertos llegue a la conclusión de que algo andaba mal.

Para saber que pasaba me cree la clase TComLpt, identica a TDosPrn, pero con menos métodos y que usaba las mismas funciones que vienen con FWH; al imprimir en una impresora de tickets siempre salian caracteres raros, por lo que me fui al DOS y alli configure el puerto con MODE COM1:9600,n,8,1 y todo empezó a funcionar correctamente, pero entonces ¿para que se enviaban los datos de la configuración desde las funciones de FWH? Para nada, probe de pasarle el parameto vacio y la cosa seguía igual, por lo que aquella funcion debía tener algo mal.

Buscando y rebuscando la forma de evitar tener que meter un BAT que configurase el puerto cada vez que se arrancase el sistema, busque las funciones HBComm, por supuesto venían sin documentación alguna y se me vino el alma al suelo.

Me puse en contacto con Walter Negro, que me envio una vesion de HBComm revisada y ampliada por él y con alguna documentación sobre las funciones, me puse manos a la obra, genere la libreria con BCC5.5 y cambie las funciones de mi clase TComLpt por las de HBComm y aquello funciono correctamente.

Para quien lo desee, desde este enlace pueden descargarse HBComm con todos sus fuentes, includa la clase TComLpt en fuente.

Instrucciones

Compilar TComLpt.prg como un PRG más de vuestro proyecto y enlazarlo junto con la libreria HBComm.lib.

TComLpt tiene los siguiente métodos:

New( cPort, nBaud, nBits, nParity, nStop, nBuff ) -> Constructor de la clase y activción del puerto.
PrnWrite( cCadena ) -> Envía en contenido de cCadena al puerto. cCadena puede ser un conmando de ESCape.
NewLine() -> Retorno de carro.
End() -> Cierra el puerto y finaliza.

Si en cPort se indica LPT*, se ignoran el resto de los parámetros.

Por el momento sólo está implementado el envío de datos al puerto, cuando tenga un hueco prepararé la lectura desde el puerto serie.

Espero sirva de ayuda a todos los que estáis migrando a FWH.

7 Responses to “Impresion directa a puertos usando [x]Harbour y FWH”

  1. Walter Negro Says:

    Muy bueno Jose !!!

    Efectivamente, las funciones de FWH para puertos serie no funcionan.

    Destaco que los parámetros de las funciones son compatibles con los de FW, de esta forma, es muy sencillo hacer la migración.

  2. Sergio Says:

    José Alfonso:
    He racia

  3. Sergio Says:

    José Alfonso:
    Itenté descargar varias veces el ZIP desde el enlace , pero parece estar dañado. Tendrías la amabilidad de enviarmelo a mi privado.
    Gracias.

  4. Claudio Morinico Says:

    El enlace funciona pero hay que pagar enviando un SMS. Yo no soy de españa y no tengo tarjeta de credito internacional para poder efectuar el pago. Puedes enviarlo a mi correo? Gracias.

  5. Ciro Vargas Says:

    Interesante tu camino hacia la impresion directa al puerto.

    Me gustaria obtener los fuentes del hbcomm.zip pero no soy de espana, me los podrias enviar a mi privado.

    Ciro

  6. José Alfonso Suárez Says:

    Ciro,

    En la página en la que hay que introducir el código para la descarga tienes un enlace para poder obtenerlo desde fuera de España.

    Saludos,

  7. Jesús Díez González Says:

    Otra vez, mil gracias por tus explicaciones. Me he descargado perfectamente el zip con la libreria y la clase. Ya la he vuelto a compilar para xHarbour y tambien he retocado un poco la clase, para crear el ocom, para hacer un Open() y un Close() pero dejando las propiedades de apertura del puerto :-) Nada, que sigas dejando reflexiones tuyas aqui, que son muy válidas.
    Un saludo
    Jesús Díez González