gpt4 book ai didi

C# SerialPort - 模拟 pos 键盘

转载 作者:太空狗 更新时间:2023-10-29 23:27:50 26 4
gpt4 key购买 nike

我们正在尝试模拟 POS 键盘,以便将应用程序与现有的销售点应用程序集成。

我们遇到了这个软件:Virtual Serial Port Kit

它基本上创建了一个虚拟串行端口对,以便发送到 COM1 的数据可以从 COM4 传出,反之亦然。这允许我们的应用程序通过 COM4 发送数据,以向 POS 应用程序显示它正在与 COM1 上的键盘通话。

非常巧妙,但似乎有某种信号正在发生,我们无法使用 .Net System.IO.Ports.SerialPort 类复制...

从串口监控程序中我们可以看出,启动顺序是这样工作的:

  1. 8 字节命令发送到键盘
  2. 键盘发出哔哔声
  3. 键盘发出某种信号
  4. 第二个 8 字节命令被发送到键盘,由信号触发
  5. 键盘回复设备和版本信息

当使用我们的虚拟串行端口时,我们不知道如何复制从键盘发送的信号。我们可以看到所有数据都正常通过,因此我们相信 SerialPort 对象上的设置是正确的。这是我们的 SerialPort 设置的片段:

_port.BaudRate= 9600;
_port.Parity = Parity.None;
_port.DataBits = 8;
_port.StopBits = StopBits.One;
_port.DtrEnable = true;
_port.RtsEnable = true;

我们还注意到使用 portmon我们看到一个 GET_MODEM_STATUS 请求,这是 POS 应用程序在发送第二个命令之前正在等待的请求。

关于如何诊断这个的任何想法?由于我们使用的是 .NET,所以整个情况比我们习惯的要低一些。

更新:我还想指出,我们在这里尝试了 SDK:Franson Serial Tools但在使用此 SDK 时,我们甚至无法获取数据。

更新:我们已经放弃使用任何类型的虚拟串口。我们已经获得了从 POS PC 到另一台 PC 的电缆,并且可以看到通过模拟键盘传输的数据。现在我们的问题是,我们无法弄清楚如何发出键盘已准备好接收数据的信号,如最佳答案所述。似乎 POS 应用程序发送命令发出蜂鸣声并等待信号等待长达 3 秒。所以在与我们的应用程序对话时会超时,但在与真实键盘对话时不会超时

我们如何使用 SerialPort 类来做到这一点?我们已经将 DtrEnable 和 RtsEnable 设置为 true,是否还需要设置其他内容?或者我们是否必须使用较低级别的串行端口 p/invoke 来完成此操作?

解决方案:

_port.RtsEnabled = false;
Thread.Sleep(1000);
_port.RtsEnabled = true;

这使 POS 应用程序认为键盘已插入,这是有道理的。我会将第 1 个答案标记为答案,因为它极大地帮助我们找到了解决方案。

最佳答案

已编辑,从模拟键盘的角度提供更多视角。

碰巧我在遥远的过去为 92R 键盘编写了低级驱动程序。

您确实需要专有协议(protocol)的文档才能正确执行此操作 - 例如,发送到键盘的命令包含序列号和校验和。我建议联系富士通并尝试获取此文档。

根据您的描述:

  • 您发送的第一个 8 字节命令可能是重置命令(因为它会导致键盘发出哔哔声)。键盘发送响应以确认命令,然后自行重置。

  • 发送重置命令后,POS 应用需要等待键盘重置(我认为大约 3000 毫秒)才能发送其他命令。

  • 看起来第二次发送是一个请求固件版本的命令。

  • 在键盘实际发送击键之前,POS 应用还需要随后发送命令以启用“自动输入”。

  • 还有一些命令可用于请求键锁位置、发出音调发生器、启用/禁用 MSR 以及写入可选的嵌入式 2 行显示器。因此,您的模拟器需要能够重现对这些命令的响应。

  • POS 应用程序启用“自动输入”后,键盘将通过按下击键(或键锁位置更改,或 MSR 输入)发送未经请求的消息。 IIRC 这些消息还有一个序列号和校验和,您需要在您的模拟器中重现它们。

我所知道的唯一信号是键盘在准备好接收数据时发出 CTS。如果您连接 PC 上的两个端口,则需要一根特殊的零调制解调器电缆(见下文),以便当您的模拟器在 COM4 上提高 RTS 时,它将在另一个端口上被视为 CTS。

TeamPOS 主板上的 COM 端口为键盘供电。您可能不想将这些引脚连接到您的 COM4 端口,因此我建议使用仅连接以下引脚的零调制解调器电缆:

2(发送数据)- 3(接收数据)

3(接收数据)- 2(发送数据)

7(RTS)- 8(CTS)

8 (CTS) - 7 (RTS)

关于C# SerialPort - 模拟 pos 键盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1307206/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com