【问题标题】:Check if cash drawer is open or closed检查钱箱是打开还是关闭
【发布时间】:2018-11-09 19:14:11
【问题描述】:

我正在使用带有 WPF 的 c# 开发 POS。我需要检查现金抽屉是否打开,以告诉用户它需要在下一次出售之前关闭。

我的钱箱是一个连接到收据打印机 ECLine 的 dynapos(我没有安装驱动程序,只使用 Windows 的通用),这台打印机通过 USB 连接到 PC。到目前为止,我可以使用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) 根据 1. 3) 你看过docs.microsoft.com/en-us/uwp/api/windows.devices.pointofservice 吗?
  • 您标记了问题“OPOS”,但很遗憾您没有使用它。它将解决您所有的现金抽屉问题。但是你必须解决所有遗留的打印代码。 OPOS 很棒 - 它将 POS 硬件变成了一种兼容的商品,让您可以将任何 POS 设备换成不同供应商的产品,让您从出价最高的人那里购买,而无需更改应用程序来处理硬件。
  • @John Deters 使用 OPOS 时我真的需要安装驱动程序吗?我正在为 MSR 使用 OPOS,但我必须安装每个 MSR 设备的驱动程序,这很痛苦,因为每个客户端都有不同的 MSR
  • 您必须安装供应商提供的 OPOS 服务对象,但一旦安装成功,您的应用通常就可以正常工作。

标签: c# .net opos pos


【解决方案1】:

使用您正在使用的 Windows 打印后台处理程序 API,应用程序无法知道打印机/现金抽屉的状态。

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

比如EPSON provides a status API function with the name Advanced Printer Driver.(因为找不到英文解释页面,引入了日文页面)

如果这些扩展 API 可用,请咨询您的打印机供应商。

当没有扩展 API 时,考虑以下方法之一。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-20
    • 2013-03-11
    • 1970-01-01
    • 1970-01-01
    • 2015-10-05
    • 1970-01-01
    • 2017-02-07
    相关资源
    最近更新 更多