我正在使用.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” 之后我尝试读取响应,但每次我都超时。我也尝试用文本“写”而不是字节数组,但我得到了相同的结果。 如果有人能给我一些很好的建议。
答案 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,因为缓冲区已满,而且有些数据没有打印出来。