检查现金抽屉是否打开或关闭。

3
我正在使用C#和WPF开发POS机。我需要检查现金抽屉是否打开,以便告知用户在下次销售之前将其关闭。 我的现金抽屉是连到一台ECLine收据打印机的dynapos(我没有安装驱动程序,只是使用Windows的通用驱动程序)。这台打印机通过USB连接到电脑。到目前为止,我可以使用RawPrinterHelper打印,并使用以下方法打开现金抽屉:
byte[] codeOpenCashDrawer = new byte[] { 27, 112, 48, 55, 121 };
IntPtr pUnmanagedBytes = new IntPtr(0);
pUnmanagedBytes = Marshal.AllocCoTaskMem(5);
Marshal.Copy(codeOpenCashDrawer, 0, pUnmanagedBytes, 5);
RawPrinterHelper.SendBytesToPrinter(stringPrinterName, pUnmanagedBytes, 5);
Marshal.FreeCoTaskMem(pUnmanagedBytes);

与我打开现金抽屉的方式相同,希望通过发送一些字节来获取其状态。我在this中找到了一个解决方案,其中说:
要获取抽屉的状态,我需要使用DLE EOT n
问题是,当使用SendBytesToPrinter方法时,无法从RawPrinterHelper获得响应,因此我无法知道这些字节是否正确。
问题:
1)有没有办法使用RawPrinterHelper获取此状态?
2)如果我发送的字节不正确,如何确定哪些是正确的?
3)我需要为打印机安装驱动程序吗?我已经阅读了一些人们的文章,但我不想这样做,因为我的POS所安装的每个地点都有不同的硬件。

  1. 你需要制造商告诉你(手册?)。
  2. 根据第一点。
  3. 你看过https://learn.microsoft.com/en-us/uwp/api/windows.devices.pointofservice吗?
- Andrew Harris
您在问题中标记了“OPOS”,但不幸的是,您并没有使用它。它可以解决您所有的钱箱问题。但是,您将不得不处理所有的遗留打印代码。 OPOS非常好-它将POS硬件转化为兼容的商品,让您可以交换任何POS设备以获得不同供应商的产品,让您购买最佳出价的产品,而不需要应用程序更改来处理硬件。 - John Deters
@John Deters 我在使用OPOS时是否真的需要安装驱动程序?我正在使用OPOS进行MSR,但我必须安装每个MSR设备的驱动程序,这很麻烦,因为每个客户端都有不同的MSR。 - Fernando Santiago
你需要安装供应商提供的OPOS服务对象,但一旦安装成功,你的应用程序通常就可以正常工作了。 - John Deters
1个回答

2
使用Windows打印池API时,应用程序无法知道打印机/钱箱的状态。

根据打印机供应商的不同,您可能已经提供了一个具有自己扩展功能以了解状态的设备驱动程序。

例如,EPSON提供了名为高级打印机驱动程序(Advanced Printer Driver)的状态API函数。 (由于找不到英文说明页面,因此介绍了日文页面)

请向您的打印机供应商询问是否提供这些扩展API。

如果没有扩展API,则考虑以下方法之一。

1.切换到具有扩展API的打印机,例如EPSON。
2.将打印机切换到作为连接到COM端口的外围设备而不是Windows打印机运行的模式,并直接使用COM端口发送和接收ESC / POS命令和响应。
3.安装OPOS / POS for.NET / JavaPOS之一,并在打印机和钱箱的控制方法之间进行切换。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接