How to clear a customer display using TComPort with Delphi 10.2?
我正在使用 Winsoft 的 TComPort v6.0 连接到我的 COM5 设备,该设备是 Oxhoo 的客户显示器。(Prolific PL2303 USB-to-Serial Comm Port)
我想简单地在上面显示一些文本,然后在按下按钮时清除整个显示。我已经搜索了一个明确的命令,但它似乎不像那样工作。
现在我可以使用 Comport1.WriteString() 成功发送文本以显示,但我无法清除显示或显示文本。
此外,发送一长串空格确实会在视觉上清除显示,但将显示的下一个文本将位于随机位置。 (最后一个文本长度添加了空格)。
根据制造商的说法,它应该支持 ESC/POS 命令,但我不知道在我的 Delphi 代码中使用它们以及如何使用它们。
显示由 2 行 20 个字符组成。
1 2
| > [][][][][][][][][][][][][][][][][][][][]
> [][][][][][][][][][][][][][][][][][][][] |
如何清除显示并再次从第一行写入文本?
- 是否有任何用于客户显示处理的协议?发送一长串空格会清除显示吗?"客户展示"硬件设备是否具有已知型号名称?
-
@MBo 谢谢你的回答。客户显示器的制造商是来自法国的 Oxhoo。在计算机管理中显示为 Prolific PL2303 USB-to-Serial Comm Port。我还编辑了我的帖子以提供更多信息。
-
Prolific 是 USB-COM 转换器 - 在这里并不重要,但值得添加有问题的 Oxhoo。
-
ESC/POS 命令是旧的 lineprinter 代码,具有类似背景的打字机:reference.epson-biz.com/modules/ref_escpos/... 考虑到这一点,您可以尝试使用 LF(换行 = 转到新行但与当前行的位置相同)和 CR(回车 = 移动到行首)命令 - 因此 DOS/Windows CRLF 样式用于 Enter 移动到新行的开头;)
为了简单地清除显示,我们需要发送一个 ESC/POS 命令:
1
| CLR 0C Clear display screen |
-> 十六进制的 0C 转换为十进制的 12。
所以对于Delphi来说就是这么简单:
1
| Comport1.WriteLine(#12); |
- 好的,所以您的显示器支持 ESC/POS 协议(详细信息可能取决于具体设备)
-
您也可以写 Comport1.WriteLine(#$0C);,这样您就不必将十六进制值转换为十进制。
-
@MBo 是的,这是正确的。我应该立即在这个方向上进行更深入的搜索。感谢 Delphi Coder 提供了避免转换十六进制值的重要提示。