Форум сайта python.su
Привет всем.
Товарищи, помогите нубу разобраться.
Есть фискальный принтер с COM-разъемом. Надо заставить его от компа, где такого разъема нет печатать от свмописной проги.
Нашел переходник COM<->USB. В Линуксе переходник определился. Есть файл в папке /dev/serial со ссылкой на /dev/ttyUSB0. Прога формирует bytearray с массивом байт, которые надо отправить. Как в Питоне правильно работать с такой конфигурацией.
Пробовал через пакет PySerial
import serial conn = serial.Serial() conn.port = "/dev/ttyUSB0" conn.baudrate = 115200 conn.bytesize = serial.EIGHTBITS #number of bits per bytes conn.parity = serial.PARITY_NONE #set parity check: no parity conn.stopbits = serial.STOPBITS_ONE #number of stop bits conn.timeout = None #block read #conn.timeout = 1 #non-block read #ser.timeout = 2 #timeout block read conn.xonxoff = False #disable software flow control conn.rtscts = True #disable hardware (RTS/CTS) flow control conn.dsrdtr = True #disable hardware (DSR/DTR) flow control #conn.writeTimeout = 2 #timeout for write conn.open() conn.write(b'\x01\x25\x21\x26\x00\x05\x00\x00\x37\x31\x03') #Строка, которую надо отправить на принтер
import usb.core import usb.util dev = usb.core.find(idVendor=0x067b, idProduct=0x2303) # was it found? if dev is None: raise ValueError('Device not found') s=b'\x01\x25\x21\x26\x00\x05\x00\x00\x37\x31\x03' reattach = False if dev.is_kernel_driver_active(0): reattach = True dev.detach_kernel_driver(0) dev.set_configuration() # get an endpoint instance cfg = dev.get_active_configuration() intf = cfg[(0,0)] ep = usb.util.find_descriptor( intf, #match the first OUT endpoint custom_match = \ lambda e: \ usb.util.endpoint_direction(e.bEndpointAddress) == \ usb.util.ENDPOINT_OUT) ep.write(s)
Отредактировано garamond (Фев. 24, 2017 02:44:20)
Офлайн
Все. Тема закрыта.
Если кому интересно, оба варианта правильны. Проблема была в формировании строки для отправки.
Офлайн