通过 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
预期的字节数(你不需要精确,只需要比你预期的更高的数字)。读取超时可能也是一个好主意。
我有一个销售点,我尝试通过 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
预期的字节数(你不需要精确,只需要比你预期的更高的数字)。读取超时可能也是一个好主意。