从Datecs FML 10KL打印

时间:2017-12-12 12:40:05

标签: c# .net bluetooth serial-port compact-framework


我正在使用.NET CF,我的任务是打印财务和非财务收据。 所以我需要通过蓝牙连接到FML 10 KL。 我使用 SerialPort 来执行此操作,但在发送命令后没有任何反应 我尝试发送这样的命令:

    byte[] buf = new byte[218];
    using (StreamWriter writer = new StreamWriter(inPort.BaseStream))
    {
       writer.Write(buf);
       //inPort.NewLine = "\n";
       //var msg = inPort.ReadLine();
    }

我用我的命令填充“buf” 之后我尝试读取响应,但每次我都超时。我也尝试用文本“写”而不是字节数组,但我得到了相同的结果。 如果有人能给我一些很好的建议。

2 个答案:

答案 0 :(得分:0)

包括蓝牙SPP和套接字控制设备在内的大多数串行设备都不支持Unicode。如果您有一个字符串,则需要使用Encoding ASCII(或UTF8)getBytes来获得适合串行或直接套接字连接的字节。如果您不关心这一点,您可能会得到一个{0x00,0x41}(Unicode)的字节序列,而不是所需的{0x41}。

如果您尝试打印某些内容,请通过将数据写入文件并使用终端应用程序(以前的超级终端)发送文件来验证您发送的代码是否有效。

大多数打印机都支持转储模式。使用转储模式验证您构建的代码是否未经更改传输到打印机,并与您用于打印的验证代码进行比较。

操作系统和目标设备可以使用缓冲区。确保刷新缓冲区,然后在断开连接之前关闭Stream。

使用串行端口类确保设备和类使用相同的参数,即8Bit等。对于蓝牙SPP采用波特率,您可以使用115200或57600而不会失败。

我发现了一个支持Datecs财务打印协议的类:https://github.com/wqweto/UcsFiscalPrinters/blob/master/Samples/Demo1/Program.cs您应该使用它或查看类在Datecs上的打印方式。

答案 1 :(得分:0)


我想出了我的问题。这是与移动打印机的连接。 我这样连接和写作:

  

SerialPort inport = new SerialPort(“COM5”,115200,Parity.None,8,   StopBits.One);   inport.Write(buf,0,buf.Length);   Thread.sleep代码(1000);

我需要使用Thread.Sleep,因为缓冲区已满,而且有些数据没有打印出来。