Программирование валидатора MEI с помощью Python - PullRequest
0 голосов
/ 19 сентября 2018

Я пытаюсь связаться с MEI Advance Cash Validator, используя Python, но пока безуспешно.Я использую библиотеку pyserial, машина подключена к COM-порту.Кроме того, я программирую под Ubuntu 18.

Все, что я посылаю на машину, игнорируется, и я не отвечаю.Я пытаюсь следовать официальной документации, и он говорит, что формат должен быть следующим: STX (0x02) - начало сообщения Длина - количество байтов в сообщении Тип сообщения Поля данных EXT (0x03) - конец сообщенияКонтрольная сумма - контрольная сумма XORed

Вот что я пытаюсь:

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

И поэтому машина вообще ничего не отвечает:(

Любая помощь будет принята с благодарностью !!!

1 Ответ

0 голосов
/ 20 сентября 2018

Ты рядом.Протокол требует, чтобы вы прослушали сообщение и затем переключали третий байт каждый раз, когда цель отвечает правильно.Поэтому вместо последовательной отправки этих двух сообщений отправьте одно, прочитайте и проанализируйте ответ валидатора, а затем переключите свой байт ACK.Кроме того, ваша контрольная сумма неверна.Последний байт должен быть 8-разрядным XOR части пакета с полезной нагрузкой, то есть 6 байтов ПОСЛЕ байта команды запуска.Конечный пакет должен иметь длину 8 байт.

Протокол MEI совместим с API проверки счетов Apex RS-232.У меня есть хост Python здесь , который должен работать для вас.

Отказ от ответственности : Я работаю в Pyramid Technologies

...