shtrih-m / javapos_shtrih

Реализация JavaPOS драйвера принтера фискального регистратора для устройств Штрих-М
http://www.shtrih-m.ru
MIT License
33 stars 16 forks source link

Частые ошибки с таймаутом #130

Closed ghost closed 3 years ago

ghost commented 3 years ago

Здравствуйте! Начали недавно использовать версию 620. Часто стали происходить ошибки с таймаутом на печати дубликата чека и при вызове метода setDeviceEnabled. Ниже стектрейсы для трех разных случаев. Хотели бы попробовать увеличить таймауты, чтобы уменьшить частоту таких ошибок.

Есть три таймаута, которые кажется могут повлиять на эти ошибки. Первые два в jpos.xml

        <prop name="byteTimeout" type="String" value="1000"/>
        <prop name="deviceByteTimeout" type="String" value="3000"/>

И еще один, который передается в метод claim.

1) Верно ли, что ошибка происходит при общении с принтером? Какой из трем таймаутом может помочь уменьшить частотность этой ошибки? Может ли здесь передаваться описание проблемы в JposException?

Caused by jpos.JposException
com.shtrih.jpos.fiscalprinter.JposExceptionHandler.getJposExceptionWithoutDetails (JposExceptionHandler.java:96)
com.shtrih.jpos.fiscalprinter.JposExceptionHandler.getJposException (JposExceptionHandler.java:52)
com.shtrih.jpos.fiscalprinter.JposExceptionHandler.handleException (JposExceptionHandler.java:41)
com.shtrih.jpos.fiscalprinter.FiscalPrinterImpl.handleException (FiscalPrinterImpl.java:462)
com.shtrih.jpos.fiscalprinter.FiscalPrinterService.handleException (FiscalPrinterService.java:37)
com.shtrih.jpos.fiscalprinter.FiscalPrinterService.printDuplicateReceipt (FiscalPrinterService.java:1529)
jpos.FiscalPrinter.printDuplicateReceipt (FiscalPrinter.java:4092)
com.shtrih.fiscalprinter.ShtrihFiscalPrinter113.printDuplicateReceipt (ShtrihFiscalPrinter113.java:757)

Caused by java.net.SocketTimeoutException
java.net.PlainSocketImpl.read (PlainSocketImpl.java:488)
java.net.PlainSocketImpl$PlainSocketInputStream.read (PlainSocketImpl.java:233)
com.shtrih.fiscalprinter.port.SocketPort.readByte (SocketPort.java:92)
com.shtrih.fiscalprinter.port.CancellablePrinterPort.readByte (CancellablePrinterPort.java:45)
com.shtrih.fiscalprinter.PrinterProtocol_1.portReadByte (PrinterProtocol_1.java:65)
com.shtrih.fiscalprinter.PrinterProtocol_1.readControlByte (PrinterProtocol_1.java:103)
com.shtrih.fiscalprinter.PrinterProtocol_1.writeCommand (PrinterProtocol_1.java:160)
com.shtrih.fiscalprinter.PrinterProtocol_1.send (PrinterProtocol_1.java:211)
com.shtrih.fiscalprinter.PrinterProtocol_1.sendCommand (PrinterProtocol_1.java:235)
com.shtrih.fiscalprinter.PrinterProtocol_1.sendCommand (PrinterProtocol_1.java:291)
com.shtrih.fiscalprinter.PrinterProtocol_1.send (PrinterProtocol_1.java:385)
com.shtrih.fiscalprinter.SMFiscalPrinterImpl.deviceExecute (SMFiscalPrinterImpl.java:228)
com.shtrih.fiscalprinter.SMFiscalPrinterImpl.executeCommand (SMFiscalPrinterImpl.java:356)
com.shtrih.fiscalprinter.SMFiscalPrinterImpl.execute (SMFiscalPrinterImpl.java:319)
com.shtrih.fiscalprinter.SMFiscalPrinterImpl.readShortStatus (SMFiscalPrinterImpl.java:581)
com.shtrih.fiscalprinter.SMFiscalPrinterImpl.readShortPrinterStatus (SMFiscalPrinterImpl.java:1974)
com.shtrih.fiscalprinter.SMFiscalPrinterImpl.readPrinterStatus (SMFiscalPrinterImpl.java:1995)
com.shtrih.fiscalprinter.SMFiscalPrinterImpl.waitForPrinting (SMFiscalPrinterImpl.java:1729)
com.shtrih.jpos.fiscalprinter.FiscalPrinterImpl.printEndFiscal (FiscalPrinterImpl.java:2425)
com.shtrih.jpos.fiscalprinter.FiscalPrinterImpl.printDuplicateReceipt (FiscalPrinterImpl.java:3201)
com.shtrih.jpos.fiscalprinter.FiscalPrinterService.printDuplicateReceipt (FiscalPrinterService.java:1527)
jpos.FiscalPrinter.printDuplicateReceipt (FiscalPrinter.java:4092)
com.shtrih.fiscalprinter.ShtrihFiscalPrinter113.printDuplicateReceipt (ShtrihFiscalPrinter113.java:757)

2) Какой из трех таймаутов поможет уменьшить частоту этой ошибки? byteTimeout? Может ли она происходить, когда устройство уже занято?

Caused by jpos.JposException
Нет связи
com.shtrih.jpos.fiscalprinter.JposExceptionHandler.getJposExceptionWithoutDetails (JposExceptionHandler.java:98)
com.shtrih.jpos.fiscalprinter.JposExceptionHandler.getJposException (JposExceptionHandler.java:52)
com.shtrih.jpos.fiscalprinter.JposExceptionHandler.handleException (JposExceptionHandler.java:41)
com.shtrih.jpos.fiscalprinter.FiscalPrinterImpl.handleException (FiscalPrinterImpl.java:462)
com.shtrih.jpos.fiscalprinter.FiscalPrinterService.handleException (FiscalPrinterService.java:37)
com.shtrih.jpos.fiscalprinter.FiscalPrinterService.setDeviceEnabled (FiscalPrinterService.java:129)
jpos.BaseJposControl.setDeviceEnabled (BaseJposControl.java:171)
com.shtrih.fiscalprinter.ShtrihFiscalPrinter113.setDeviceEnabled (ShtrihFiscalPrinter113.java:972)

Caused by com.shtrih.fiscalprinter.DeviceException
Нет связи
com.shtrih.fiscalprinter.PrinterProtocol_1.connect (PrinterProtocol_1.java:274)
com.shtrih.fiscalprinter.SMFiscalPrinterImpl.connect (SMFiscalPrinterImpl.java:276)
com.shtrih.fiscalprinter.SMFiscalPrinterImpl.searchDevice (SMFiscalPrinterImpl.java:4478)
com.shtrih.jpos.fiscalprinter.FiscalPrinterImpl.setDeviceEnabled (FiscalPrinterImpl.java:901)
com.shtrih.jpos.fiscalprinter.FiscalPrinterService.setDeviceEnabled (FiscalPrinterService.java:127)
jpos.BaseJposControl.setDeviceEnabled (BaseJposControl.java:171)
com.shtrih.fiscalprinter.ShtrihFiscalPrinter113.setDeviceEnabled (ShtrihFiscalPrinter113.java:972)

3) Какой таймаут поможет уменьшить частоту этой ошибки? deviceByteTimeout?

Caused by jpos.JposException
failed to connect to /127.0.0.1 (port 12345) after 3000ms: isConnected failed: ECONNREFUSED (Connection refused)
com.shtrih.jpos.fiscalprinter.JposExceptionHandler.getJposExceptionWithoutDetails (JposExceptionHandler.java:96)
com.shtrih.jpos.fiscalprinter.JposExceptionHandler.getJposException (JposExceptionHandler.java:52)
com.shtrih.jpos.fiscalprinter.JposExceptionHandler.handleException (JposExceptionHandler.java:41)
com.shtrih.jpos.fiscalprinter.FiscalPrinterImpl.handleException (FiscalPrinterImpl.java:462)
com.shtrih.jpos.fiscalprinter.FiscalPrinterService.handleException (FiscalPrinterService.java:37)
com.shtrih.jpos.fiscalprinter.FiscalPrinterService.setDeviceEnabled (FiscalPrinterService.java:129)
jpos.BaseJposControl.setDeviceEnabled (BaseJposControl.java:171)
com.shtrih.fiscalprinter.ShtrihFiscalPrinter113.setDeviceEnabled (ShtrihFiscalPrinter113.java:972)

Caused by java.net.ConnectException
failed to connect to /127.0.0.1 (port 12345) after 3000ms: isConnected failed: ECONNREFUSED (Connection refused)
libcore.io.IoBridge.isConnected (IoBridge.java:238)
java.net.Socket.connect (Socket.java:882)
com.shtrih.fiscalprinter.port.SocketPort.open (SocketPort.java:60)
com.shtrih.fiscalprinter.port.CancellablePrinterPort.open (CancellablePrinterPort.java:36)
com.shtrih.fiscalprinter.SMFiscalPrinterImpl.searchDevice (SMFiscalPrinterImpl.java:4477)
com.shtrih.jpos.fiscalprinter.FiscalPrinterImpl.setDeviceEnabled (FiscalPrinterImpl.java:901)
com.shtrih.jpos.fiscalprinter.FiscalPrinterService.setDeviceEnabled (FiscalPrinterService.java:127)
jpos.BaseJposControl.setDeviceEnabled (BaseJposControl.java:171)
com.shtrih.fiscalprinter.ShtrihFiscalPrinter113.setDeviceEnabled (ShtrihFiscalPrinter113.java:972)

Caused by android.system.ErrnoException
isConnected failed: ECONNREFUSED (Connection refused)

libcore.io.IoBridge.isConnected (IoBridge.java:223)
java.net.Socket.connect (Socket.java:882)
com.shtrih.fiscalprinter.port.SocketPort.open (SocketPort.java:60)
com.shtrih.fiscalprinter.port.CancellablePrinterPort.open (CancellablePrinterPort.java:36)
com.shtrih.fiscalprinter.SMFiscalPrinterImpl.searchDevice (SMFiscalPrinterImpl.java:4477)
com.shtrih.jpos.fiscalprinter.FiscalPrinterImpl.setDeviceEnabled (FiscalPrinterImpl.java:901)
com.shtrih.jpos.fiscalprinter.FiscalPrinterService.setDeviceEnabled (FiscalPrinterService.java:127)
jpos.BaseJposControl.setDeviceEnabled (BaseJposControl.java:171)
com.shtrih.fiscalprinter.ShtrihFiscalPrinter113.setDeviceEnabled (ShtrihFiscalPrinter113.java:972)

И есть дополнительный вопрос, если обновиться до версии выше, то могло ли бы это как-то помочь? Например, в версии 626 есть пункт "[-] Fixed error with continue print command" и в 624 "Added stopping FS data sending thread in method beginFiscalReceipt and starting it back in endFiscalRecepit and ResetPrinter". Например, могли ли они бы как-то повлиять на печать дубликата чека?

VitalyKravtsov2016 commented 3 years ago

Добрый день. Спасибо за комментарий. Значение таймаутов: byteTimeout - используется для связи с ФР deviceByteTimeout - записывается в ФР при установлении связи и используется в протоколе 1 claim(timeout) - не используется Для связи с ФР лучше использовать протокол 2, если ФР его поддерживает.

  1. Да, ошибка происходит при общении с принтером. Тут влияет только byteTimeout. Описания проблемы в JposException нет (но в принципе можно добавить). Желательно увидеть полный лог - там будет и тип ФР и версия ПО ФР и все настройки.
surkovnsk commented 3 years ago

Здравствуйте. Спасибо за ответ! Да, описание было бы хорошо добавить в следующих версиях библиотеки. Не совсем понятно какой именно полный лог нужен. Версии ПО такие: Кассовое Ядро ru.shtrihm.droidcashcore 33767 ФискалМастер ru.shtrihm.fiscalmaster 2.1.8 15 EFTBase com.termt.droidbase eftbase-1.2.0-2205

VitalyKravtsov2016 commented 3 years ago

Добрый день. Драйвер может записывать лог в файл - параметр LogEnabled в файле jpos.xml или через Log4J. Меня в основном интересует модель ФР, версия ПО ФР, тип подключения.

surkovnsk commented 3 years ago

Само устройство азур-01ф, фискальный носитель МГМ ФН-1.1