Форум сайта python.su
Добрый всем день!
Разрабатываю программу для работы с фискальным принтером общающемуся по RS232 (COM-порт). Для разработки выбрал Python с библиотекой pyserial. Так как язык знаю поверхностно, возникла накладка которую никак не могу победить.
В сеансе связи между компьютером и принтером возможна передача как одного байта, так и массива байт (строки). Судя по документации pyserial, функция write() пишет в порт byte или bytearray. Оформляю функцию следующим образом:
def w_(*byte_arr): for byte in byte_arr: ser.write(bytes([byte])) r_() def r_(): time.sleep(0.05) while ser.inWaiting() > 0: ser.read(1) w_(5) w_(2,0,0,63,3,60)
#!/usr/bin/env python3 import sys import numpy as np # function write data to port def w_(*byte_arr): for byte in byte_arr: print(bytes([byte])) def consctuctString(textIn): # create list with password (0x00, 0x00) and Start Print String byte (0x4C) textArray = [0x00, 0x00, 0x4C] # convert symbols to CP866 and insert into list for i in range(len(textIn)): textArray.append(ord(textIn[i].encode('cp866'))) # add End Of Text (ETX) byte to end of list textArray.append(0x03) # calculate CRC (XOR all bytes of the string starts from password to ETX included) CRC = textArray[0] i = 1 while i < len(textArray): CRC ^= textArray[i] i += 1 # insert into start of list Start Of Text (STX) byte textArray.insert(0, 0x02) # insert into end of list calculated CRC textArray.append(CRC) print(textArray) w_(textArray) consctuctString("test string")
Отредактировано Emmk (Ноя. 7, 2016 14:57:54)
Офлайн
убери звездочку в
def w_(*byte_arr):
Отредактировано izekia (Ноя. 7, 2016 16:31:04)
Офлайн
посмотри на модуль struct сильно поможет
Офлайн
Проблема оказалась в использовании python 3. Во второй версии код работает адекатно. Всем спасибо за советы.
Офлайн