Термопринтер — ноутбук через базовую плату FTDI и C#

Я пытаюсь установить связь между моим ноутбуком и термопринтером (купленным в Sparkfun) через базовую плату FTDI с использованием С# (под управлением Mono 3.2 под Mac 10.8). Я использую библиотеку .net из:

http://electronicfields.wordpress.com/2011/09/29/thermal-printer-dot-net/

https://github.com/yukimizake/ThermalDotNet

В коде, похоже, нет ошибок (я изменил последовательные порты и скорость передачи данных, чтобы они соответствовали моим настройкам), и, похоже, он проходит через всю программу на терминале. Однако он не взаимодействует с принтером и, как следствие, ничего не печатается.

Это точный код, который я использую:

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();
    }
}
}

Это журнал терминала, который я получаю после запуска программы:

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...

Есть идеи, в чем проблема?

Несколько замечаний:

  1. Принтер смог распечатать образец, так что, похоже, он работает.
  2. Когда я играю в программу, я заметил, что на FTDI загорается только TX (передача?), а RX (прием?) не горит. Я проверил проводку, и все, кажется, в порядке, поэтому не уверен, что что-то не так (я прикрепил изображения) [править: недостаточно точек повторения для изображений!]
  3. Я также пытался использовать Arduino в качестве сравнения, но имел аналогичные ошибки (отладка в порядке, но без взаимодействия)
  4. Я новичок, поэтому прошу прощения за упрощения или большие упущения!

Спасибо, Фионн


person fionntom    schedule 28.08.2013    source источник
comment
Вот ссылка для скачивания некоторых изображений и видео: db.tt/7bI6piom   -  person fionntom    schedule 28.08.2013


Ответы (1)


Мне кажется, что ваша проводка может быть неправильной.

TX (передача) на плате FTDI должен быть подключен к RX (прием) на принтере. Аналогично, RX (прием) на плате FTDI должен быть подключен к TX (передача) на принтере.

См. пример в этом руководстве с дальнейшими пояснениями: https://www.sparkfun.com/tutorials/224

person sfm    schedule 28.08.2013
comment
Вот оно! Благодарю вас! - person fionntom; 28.08.2013