代码之家  ›  专栏  ›  技术社区  ›  fionntom

热敏打印机-通过FTDI基本板和C的笔记本电脑#

  •  2
  • fionntom  · 技术社区  · 11 年前

    我正试图使用C#(在Mac 10.8下运行Mono 3.2)通过FTDI Basic板在我的笔记本电脑和热敏打印机(从Sparkfun购买)之间建立链接。我一直在使用来自以下位置的.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. 当我播放该程序时,我注意到在FTI上,只有TX(发送?)亮起,而RX(接收?)不亮。我检查了接线,一切似乎都很正常,所以不确定是否有什么问题(我附上了图像)[编辑:没有足够的图像代表点!]
    3. 我也尝试过使用Arduino作为比较,但也出现了类似的错误(调试很好,但没有交互)
    4. 我是一个初学者,所以很抱歉过于简单化或过于疏忽!

    谢谢 陈缘

    1 回复  |  直到 11 年前
        1
  •  0
  •   sfm    11 年前

    在我看来,你的接线可能不正确。

    FTDI板上的TX(发送)应连接到打印机上的RX(接收)。同样,FTDI板上的RX(接收)应连接到打印机上的TX(发送)。

    请参阅本教程以获取有关进一步解释的示例: https://www.sparkfun.com/tutorials/224