使用 Python 进行 MEI 现金验证器编程

问题描述 投票:0回答:2

我正在尝试使用 Python 与 MEI Advance Cash Validator 进行通信,但到目前为止尚未成功。我正在使用

pyserial
库,机器已连接到 COM 端口。另外,我正在 Ubuntu 18 下编程。

我发送到机器的任何内容都会被忽略,并且我没有回复。我正在尝试遵循官方文档,它说格式应如下: STX (0x02) - 消息的开始 长度 - 消息中的字节数 消息类型 数据字段 EXT (0x03) - 消息结束 校验和 - 异或校验和

这是我尝试的:

ser = serial.Serial(
    port='/dev/ttyS0',
    baudrate = 9600,
    #parity=serial.PARITY_ODD,
    #stopbits=serial.STOPBITS_TWO,
    bytesize=serial.SEVENBITS
)

def send(msg,ser):
    r = chr(0x02)
    r += "".join([chr(i) for i in msg])
    check = 0
    for a in msg:
        check = check^a
    r += chr(0x03)
    r += chr(check)
    print("Sending", r.encode())
    ser.write(r.encode())

m1 = [0x08,0x10,0x1F,0x14,0x00] #1F
m2 = [0x08,0x11,0x1F,0x15,0x00]

for i in range(5):
    send(m1, ser)
    send(m2, ser)
    time.sleep(1)
    out = 0
    while ser.inWaiting() > 0:
        print(ser.read(1),end="")
        out += 1
    if out > 0:
        print()
ser.close()

结果是:

/home/timur/local/kmf/venv/bin/python /home/timur/local/kmf/example.py
Sending b'\x02\x08\x10\xc2\x9f\x14\x00\x03\xc2\x93'
Sending b'\x02\x08\x11\xc2\x9f\x15\x00\x03\xc2\x93'
Sending b'\x02\x08\x10\xc2\x9f\x14\x00\x03\xc2\x93'
Sending b'\x02\x08\x11\xc2\x9f\x15\x00\x03\xc2\x93'
Sending b'\x02\x08\x10\xc2\x9f\x14\x00\x03\xc2\x93'
Sending b'\x02\x08\x11\xc2\x9f\x15\x00\x03\xc2\x93'
Sending b'\x02\x08\x10\xc2\x9f\x14\x00\x03\xc2\x93'
Sending b'\x02\x08\x11\xc2\x9f\x15\x00\x03\xc2\x93'
Sending b'\x02\x08\x10\xc2\x9f\x14\x00\x03\xc2\x93'
Sending b'\x02\x08\x11\xc2\x9f\x15\x00\x03\xc2\x93'

Process finished with exit code 0

所以机器根本不回答任何问题:(

任何帮助将不胜感激!!!

python validation serial-port pyserial
2个回答
1
投票

你很接近了。 协议要求您侦听消息,然后在每次目标正确响应时切换第三个字节。因此,不要连续发送这两条消息,而是发送一条消息,读取并解析验证器的响应,然后切换 ACK 字节。另外,你的校验和是错误的。最后一个字节应该是数据包有效负载部分的 8 位 XOR,即起始命令字节之后的 6 个字节。最终数据包的长度应为 8 个字节。

MEI 协议与 Apex RS-232 票据验证器 API 兼容。我在here写了一个Python主机,应该适合你。

免责声明我为 Pyramid Technologies 工作


0
投票

@timur 你最后能用python与MEI账单接受器通信了吗?

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.