Impresora térmica Sparkfun + FTDI Basic Board w / C #

0

Estoy tratando de conectar mi computadora portátil a una impresora térmica de Sparkfun a través de una placa FTDI Basic usando C #. He estado usando una biblioteca .net de:

enlace

enlace

El código no parece tener ningún error (he cambiado los puertos serie y la velocidad en baudios para que coincida con mi configuración) y parece que se ejecuta en todo el programa en el terminal. Sin embargo, no interactúa con la impresora y, como consecuencia, no se imprime nada.

Este es el código exacto que estoy usando:

using System;
using System.IO;
using System.Text; 
using System.Threading;
using System.IO.Ports;
//using System.Collections.Generic;
//using System.Drawing;
using ThermalDotNet;
using Microsoft.SPOT;

namespace ThermalPrinterTestApp
{
class PrinterClass
{
    SerialPort printerPort;
    ThermalPrinter printer;

    public PrinterClass(string printerPortName = "/dev/tty.usbserial-AD025HP0")
    {
        //Serial port init
        printerPort = new SerialPort(printerPortName, 19200);

        if (printerPort != null)
        {
            Debug.Print("Port ok");
            if (printerPort.IsOpen)
            {
                printerPort.Close();
            }
        }

        Debug.Print("Opening port");

        try
        {
            printerPort.Open();
        }
        catch
        {
            Debug.Print("I/O error");
            //Environment.Exit(0);
        }

        //Printer init
        printer = new ThermalPrinter(printerPort, 9, 110, 10);
        printer.Reset();
    }

    public void TestBarcode()
    {
        printer.WakeUp(); 
        ThermalPrinter.BarcodeType myType = ThermalPrinter.BarcodeType.ean13;
        string myData = "3350030103392";
        printer.SetBarcodeLeftSpace(25);
        printer.WriteLine(myType.ToString() + ", data: " + myData);
        printer.SetLargeBarcode(true);
        printer.LineFeed();
        printer.PrintBarcode(myType,myData);
        printer.LineFeed(2);
    }

    /*
    static void TestImage(ThermalPrinter printer)
    {
        printer.WriteLine("Test image:");
        Bitmap img = new Bitmap("../../../mono-logo.png");
        printer.LineFeed();
        printer.PrintImage(img);
        printer.LineFeed();
        printer.WriteLine("Image OK");
    }*/

    public void PrintTest()
    {
        printer.WakeUp();
        Debug.Print(printer.ToString());

        //System.Threading.Thread.Sleep(5000);
        printer.SetBarcodeLeftSpace(25);
        TestBarcode();
        printer.LineFeed(3);

        //System.Threading.Thread.Sleep(5000);
        //TestImage();

        //System.Threading.Thread.Sleep(5000);

        printer.WriteLineSleepTimeMs = 200;
        printer.WriteLine("Default style");
        printer.WriteLine("PrintingStyle.Bold",ThermalPrinter.PrintingStyle.Bold);
        printer.WriteLine("PrintingStyle.DeleteLine",ThermalPrinter.PrintingStyle.DeleteLine);
        printer.WriteLine("PrintingStyle.DoubleHeight",ThermalPrinter.PrintingStyle.DoubleHeight);
        printer.WriteLine("PrintingStyle.DoubleWidth",ThermalPrinter.PrintingStyle.DoubleWidth);
        printer.WriteLine("PrintingStyle.Reverse",ThermalPrinter.PrintingStyle.Reverse);
        printer.WriteLine("PrintingStyle.Underline",ThermalPrinter.PrintingStyle.Underline);
        printer.WriteLine("PrintingStyle.Updown",ThermalPrinter.PrintingStyle.Updown);
        printer.WriteLine("PrintingStyle.ThickUnderline",ThermalPrinter.PrintingStyle.ThickUnderline);
        printer.SetAlignCenter();
        printer.WriteLine("BIG TEXT!",((byte)ThermalPrinter.PrintingStyle.Bold +
            (byte)ThermalPrinter.PrintingStyle.DoubleHeight +
            (byte)ThermalPrinter.PrintingStyle.DoubleWidth));
        printer.SetAlignLeft();
        printer.WriteLine("Default style again");           
        printer.LineFeed(3);

        printer.Sleep();
    }
}
}

Este es el registro de terminal que obtengo después de ejecutar el programa:

Port ok
Opening port
ThermalPrinter:
    _serialPort=/dev/tty.usbserial-AD025HP0,
    _maxPrintingDots=2,
    _heatingTime=180,
    _heatingInterval=2,
    PictureLineSleepTimeMs=40,
    WriteLineSleepTimeMs=0,
    Encoding=ibm850
Printer is now offline.

Press any key to continue...

¿Alguna idea de cuál es el problema?

Algunas cosas a tener en cuenta:

  1. La impresora ha podido imprimir una muestra, por lo que parece estar funcionando.
  2. Cuando reproduzco el programa, he notado que en el FTDI solo se ilumina el TX (¿transmitiendo?) mientras que el RX (¿recibiendo?) permanece apagado. He comprobado el cableado y todo parece estar en orden, por lo que no estoy seguro de si algo está mal (he adjuntado imágenes) [editar: ¡No hay suficientes puntos de representación para las imágenes!]
  3. ¡Soy un noob completo, así que me disculpo por las simplificaciones o los grandes descuidos!

Gracias, Fionn

    
pregunta fionntom

1 respuesta

1

Tu RX y TX están volteados. Siempre son con respecto al dispositivo al que están conectados. RXI < = - Rx Input proviene de la salida de TX de su impresora.

Intente intercambiar RX / TX en el FTDI o en el lado de la impresora (¡pero no en ambos!) y vuelva a intentarlo.

    
respondido por el HL-SDK

Lea otras preguntas en las etiquetas