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

时间:2019-07-31 18:48:05

标签: python serial-port

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

我尝试完全从文档示例发送,但是POS停留在PROCESSING中并返回02 = error。如果我发送了不错的POS显示金额并等待用卡触摸,但在我的情况下POS返回菜单。

我的脚本:

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()))

文档:

enter image description here

示例文档:

enter image description here

在我的情况下,POS答案:

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

1 个答案:

答案 0 :(得分:1)

您的问题在这一行:

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)来替换它,用{{1} }预期的字节数(您不需要精确,只需将其设置为比您期望的数字高的字节数即可)。读取超时可能也是个好主意。