通过 rs232 将数据从 PC 发送到 POS

Send Data to POS from PC through rs232

我有一个销售点,我尝试通过 rs232 将要用卡收取的金额发送到 POS。但是不工作,我不理解文档。

我试图从文档示例中准确发送,但 POS 停留在处理中并且 return 02 = 错误。如果我发送良好的 POS 显示金额并等待触摸卡,但在我的情况下 POS return 到菜单。

我的脚本:

import serial
import crc16
import time

port =serial.Serial("COM7")
port.close()
port.open()

print(port.isOpen())

print("Port opened...")

if True:
    port.write(b'\x05')
    response = port.read()
    print(ord(response))
    if response is not None:
        fdata = b'\x02 00 04 a0 00 01 01 03 06 35'
        port.write(fdata)
        print(ord(port.read()))

文档:

示例文档:

以我为例 POS 答案:

SEND : 05
RECEIVE : 06
SEND : 02 00 04 a0 00 01 01 03 06 35
RECEIVE : 02

您的问题出在这一行:

fdata = b'\x02 00 04 a0 00 01 01 03 06 35'

写入字节流的正确方法是:

fdataok = b'\x02\x00\x04\xa0\x00\x01\x01\x03\x06\x35'

如你所见:

>>> fdata == fdataok
False

您可能 运行 遇到的另一个问题是,您可能在完成发送之前正在读取数据。默认情况下,您应该阻止写入,但您可能希望在定义端口时添加 writeTimeout 以确保完全确定。

并且您的代码中存在最后一个根本性缺陷:您使用 port.read() 仅读取一个字节,您需要将其替换为 port.read(port.inWaiting())port.read(x)x 预期的字节数(你不需要精确,只需要比你预期的更高的数字)。读取超时可能也是一个好主意。