shtrih-m / fr_drv_ng

релизы и поддержка драйвера fr_drv_ng
36 stars 5 forks source link

Smartpos mini inout error #129

Closed ola-skorp closed 3 years ago

ola-skorp commented 3 years ago

Отправляю на печать фискальный чек прихода с 90 лайнами. Печатается часть лайнов, после чего происходит ошибка inout error. Ссылка на gist с логом https://gist.github.com/ola-skorp/a8496f309009f7f272cfdb6fa0faf3da Повторяется стабильно. Каждый следующий чек после этой ошибки печати не печатается с той же ошибкой, и падает кассовое ядро. Перезагрузка не помогает. Сразу после перезагрузки при отмене чека из фискал мастера получаю ошибку 88. Если жму "Продолжить печать", кассовое ядро падает. Тестировалось на двух разных устройствах. Версии кассового ядра 34865 и 1.8.37240 Версия фискал мастера 2.2.1

До печати проверяем состояние принтера. Если требуется закрытие смены из-за превышения ей 24 часов, то посылаем ошибку сразу, не переходя к печати. После обработки ошибки печатаем чек закрытия смены, после чего запускаем печать того же чека с 90 лайнами ещё раз. В этом случае ошибки inout error нет.

swex commented 3 years ago

По логу мало что понятно, какая именно последовательность команд!?

  1. Что такое 90 лайнов? 90 позиций?
  2. Ошибка возникает уже после закрытия чека при попытке дождаться завершения печати?
  3. Так может быть увеличить таймаут.
  4. Вы можете дать кусок лога или кода от подключения до возникновения ошибки?
ola-skorp commented 3 years ago
  1. 90 позиций в чеке
  2. Ошибка возникает после печати части позиций, как я и написала выше (вылезает бумажный чек, содержащий не все позиции, а только несколько, в моём случае 32)
  3. Как увеличить таймаут?
  4. Сейчас мой смартпос в этой самой ошибке inout, в которой он так и остаётся. Попробую переустановить кассовое ядро
ola-skorp commented 3 years ago

Установила кассовое ядро 1.8.37240. Бумажные чеки больше не печатаются, хотя перед печатью выполняется код

Set_DeviceFunctionNumber(classic_interface.DeviceFunctionEnumeration.DFE_SkipAllPrinting.swigValue())
Set_ValueOfFunctionInteger(0)
SetDeviceFunction()
ola-skorp commented 3 years ago

В таком состоянии (без печатающегося чека) чек с 90 позициями оформился без ошибок

swex commented 3 years ago
2. Ошибка возникает после печати части позиций, как я и написала выше (вылезает бумажный чек, содержащий не все позиции, а только несколько, в моём случае 32)

похоже на ошибку в КЯ

3. Как увеличить таймаут?

таймаут можно увеличить, через параметр ?timeout=N в свойстве connectionURI или в свойстве Timeout, все это нужно делать до Connect

  1. Сейчас мой смартпос в этой самой ошибке inout, в которой он так и остаётся. Попробую переустановить кассовое ядро ну что-то КЯ плохо

В таком состоянии (без печатающегося чека) чек с 90 позициями оформился без ошибок

осталось включить печать, покажите лог вот этого места

Set_DeviceFunctionNumber(classic_interface.DeviceFunctionEnumeration.DFE_SkipAllPrinting.swigValue())
Set_ValueOfFunctionInteger(0)
SetDeviceFunction()

Давайте если проблема воспроизведется на актуальной версии КЯ - передадим задачу разработчикам КЯ.

ola-skorp commented 3 years ago

А 1.8.37240 - это разве не актуальная версия?

ola-skorp commented 3 years ago
2021-02-05 13:44:43.435 2002-3298/ru.insales.ekam V/fr_drv_ng: [2021-02-05 13:44:43.435] [3298] [classic_interface_0x74ce3b4d00  ] [T] Set_DeviceFunctionNumber(`0`)
2021-02-05 13:44:43.435 2002-3298/ru.insales.ekam V/fr_drv_ng: [2021-02-05 13:44:43.435] [3298] [classic_interface_0x74ce3b4d00  ] [T] Set_DeviceFunctionNumber() ok
asem-m commented 3 years ago

Пришлите полный лог файл драйвера (типа лога на gist'е), где видна вся последовательность команд набора длинного чека и его закрытие, где будет ошибка inout error.

ola-skorp commented 3 years ago

Я не могу, потому что после печати этого чека у меня сгорело что-то в принтере. Я вам прислала всё, что удалось достать на момент тестирования. В Logcat ограниченное количество строк.

asem-m commented 3 years ago

Известная проблема с моторами. К КЯ и драйверу отношения не имеет. Нужно поменять мотор и перешить микроконтроллер управления принтером в сервисе.

asem-m commented 3 years ago

Отправляю на печать фискальный чек прихода с 90 лайнами. Печатается часть лайнов, после чего происходит ошибка inout error. Ссылка на gist с логом https://gist.github.com/ola-skorp/a8496f309009f7f272cfdb6fa0faf3da

2021-02-04 12:55:32.536 11587-11690/ru.insales.ekam D/fr_drv_ng: [2021-02-04 12:55:32.535] [11690] [ProtocolV2_0x7739d2d780         ] [D] command 10 return code: -1 execution took 10001ms
2021-02-04 12:55:32.536 11587-11690/ru.insales.ekam E/fr_drv_ng: [2021-02-04 12:55:32.536] [11690] [ProtocolV2_0x7739d2d780         ] [E] Inout error

Это из файла лога драйвера или из logcat после фильтрации по приложению драйвера?

Если вы сохранили в файл полный logcat из буфера, то пришлите причину падения КЯ в момент Inout error. Там нужно искать строчки с кодом ошибки, связанные с драйвером принтера, который за собой, скорее всего, крашит КЯ.

Уточните, у вас многократно происходили падения КЯ из-за печати, но потом в итоге сгорел мотор? Как долго все это происходило от начала появления первой Inout error и пониманием, что возникла аппаратная проблема с принтером (мотор расплавился)? (например, 5 мин? или сутки?) Уточняю, ошибки печати (с падением КЯ) возникли ПОСЛЕ проблемы с "мотором" (когда он встал и начал греться) или ДО? Мотор "встал" (остановился) или "зудел" перед тем как вы поняли, что что-то сгорело в принтере?

Нужно понять: это две разные проблемы (Inout error и "мотор") или одна взаимосвязанная проблема?

bvladimir commented 3 years ago

Известная проблема с моторами. К КЯ и драйверу отношения не имеет. Нужно поменять мотор и перешить микроконтроллер управления принтером в сервисе.

Это это проблема чисто Смартопса мини, или на большом Смартпосе двигатели тоже перегреваются?

А как правильно работать с принтером, чтобы мотор точно не сгорел? Какие и где должны быть задержки. Какое минимально время ожидания между чеками? Не хотелось бы эти параметры выяснять эксперементально. Боюсь это может дорого обойтись. У нас клиент спалил двигатель, а потом мы на тестах еще два.(

Есть ли какие-то способы узнать, что перегрев скоро может случиться и надо остановиться?

Поясню, контекст. У нас разные клиенты. Есть которые месяц печатают чеки аванса, а потом для всех этих чеков разом начинают печатать чеки полного расчета. Это может быть 60-100 чеков за раз. Нашелся клиент у которого 100 позиций в чеки. Нам надо понимать как в общем случае организовать работу с оборудованием, чтобы мотор не сгорал.

P.S. И понятно, что температура в комнате, где стоит принтер, тоже может быть разной.

ola-skorp commented 3 years ago

Это из файла лога драйвера или из logcat после фильтрации по приложению драйвера?

Да

Если вы сохранили в файл полный logcat из буфера, то пришлите причину падения КЯ в момент Inout error. Там нужно искать строчки с кодом ошибки, связанные с драйвером принтера, который за собой, скорее всего, крашит КЯ.

Не сохранила. Но в момент появления ошибки на экране не выводилось сообщения о падении кассового ядра. Кассовое ядро падало уже после появления ошибки inout error при попытке напечатать любой другой чек. Лог этой ошибки с падением кассового ядра я достать уже не могу, так как переустановила кассовое ядро и отменила чек, что привело к исчезновению ошибки inout error.

Уточните, у вас многократно происходили падения КЯ из-за печати, но потом в итоге сгорел мотор? Как долго все это происходило от начала появления первой Inout error и пониманием, что возникла аппаратная проблема с принтером (мотор расплавился)? (например, 5 мин? или сутки?) Уточняю, ошибки печати (с падением КЯ) возникли ПОСЛЕ проблемы с "мотором" (когда он встал и начал греться) или ДО? Мотор "встал" (остановился) или "зудел" перед тем как вы поняли, что что-то сгорело в принтере? Нужно понять: это две разные проблемы (Inout error и "мотор") или одна взаимосвязанная проблема?

Я запустила печать чека, json которого скидывала вашим коллегам с помощью кода печати, который тоже скидывала вашим коллегам. После запуска печати чек начал печататься. Напечаталось 32 позиции чека, после чего принтер перестал печатать этот чек и вернул ошибку inout error. Фотографию этого чека с чёрным пятном на нём я скидывала вашим коллегам. Сообщения о падении КЯ не было ни до печати, ни во время, ни после. После этого все попытки напечатать какой-либо чек приводили к мгновенной ошибке inout error от принтера и сообщению о падении КЯ. При попытке отменить чек через фискал мастер получила ошибку 88 и падение кассового ядра. Это исправилось переустановкой кассового ядра. После переустановки я смогла отменить чек, и ошибка inout error пропала. Но принтер не печатал бумажные чеки без вывода каких-либо ошибок. После длинных манипуляций по указанию ваших коллег выяснилось, что принтер неисправен. На длинном чеке, после печати которого принтер перестал печатать, есть чёрное пятно. От принтера пахло жжёной пластмассой. Перед попытками печатать чеки после переустановки КЯ я вытащила чековую ленту и увидела пятно. Следующие попытки печатать чек были на чистой части ленты, и они приводили к оставлению линии в месте печати и к такому же чёрному пятну как на том чеке, после которого принтер не печатал. Из всего этого я делаю вывод, что в принтере что-то сгорело после печати чека с 90+ позициями.

Сейчас у нас 3 случая с таким сюжетом. У меня, у моего коллеги и у нашего клиента. Во всех трёх случаях в чеке было 90+ позиций. В двух случаях из трёх чеки на печать посылались в виде того json, который я скинула вашим коллегам. Код печати чека продажи, с помощью которого выполнялась печать этого чека, я также скинула вашим коллегам.

asem-m commented 3 years ago

Это проблема платфомы на которой построен Смартпос мини. В большом Смартпосе этой проблемы нет, там один из лучших принтеров. Есть новая прошивка контроллера принтера Смартпоса мини в которой, возможно, исправлено "горение" мотора, но у меня нет информации как прошивать этот контроллер.

В КЯ есть параметр Т3П20 "НЕПРЕРЫВНАЯ ПЕЧАТЬ ДЛЯ ПРИНТЕРОВ №2,5", который можно установить Т3П20=0, чтобы сбрасывать накопленный растровый буфер на печать сразу. Если Т3П20=1 (по умолчанию) - не передавать буфер на печать, а наполнять его длинным чеком, видимо, приводит к переполнению и зависанию контроллера, управляющего мотором и головой. Но при Т3П20=0 после рестарта печати, первые растровые строчки могут плохо прогреваться и выглядеть белыми. Параметр Т3П19 "МАКС.КОЛ-ВО РАСТРОВЫХ СТРОК ПРИНТЕРА, 24" задает высоту растрового буфера (блок печати), который отправляется в драйвер принтера. *Кол-во строчек = Т3П19 24, т.е. Т3П19=20** задает высоту блока в 480 растровых строчек, что примерно равно 19 текстовым строчкам обычным (№1) шрифтом.

К самим чекам всякие задержки не относятся, как и размер чека. Проблема выглядит в передаче растровых данных между драйвером на Андройде в прошивку микросхемы управления принтером, где последняя зависает, раз вы видите, что головка жжет бумагу в одном месте (мотор встал). Вашей фотографии этого чека я не видел. У меня нет полноты информации, что происходит (я не встречался сам с этой проблемой), но видел фотку расплавленного корпуса.

Inout error значит либо, что упало КЯ, а его потянуло за собой встроенная библиотека (драйвер) работы с принтером, которая, видимо, не отработала ошибку, полученную от прошивки контроллера принтера (или ее отсутствие, т.к. прошивка может уже перестала отвечать драйверу). Либо вызов библиотеки принтера был долгим, и Inout error произошел по таймату драйвера ФР, но если библиотека принтера не возращает управление в КЯ долгое время это ненормально. Пока картина такая - прошивка контроллера зависает, останавливая шаги мотора, но подавая напряжение на мотор, который за некоторое время (минуту, например) перегревается и плавит корпус.

ola-skorp commented 3 years ago

Для отладки этой ситуации мы сделали приложение, которое печатает заданное количество чеков с заданным количеством позиций и с заданными задержками между чеками и между позициями. При печати одного чека со 95 позициями и задержкой между позициями 1500ms у нас крашится кассовое ядро. Перезагрузка и отмена чека не помогает, помогает только перепрошивка. Если нужно, можем предоставить исходный код приложения. Ссылка на apk

asem-m commented 3 years ago

Не удается установить adb install -r -d SmartposMiniBurner_2021_02_15_19_10.apk, правда касса не мини (проблема скорее с этим), но та же платформа. adb: failed to install SmartposMiniBurner_2021_02_15_19_10.apk: Failure [INSTALL_FAILED_INVALID_APK]

Можете прислать проект, чтобы можно было его загрузить в кассу в режиме debug?

ola-skorp commented 3 years ago

Ссылка на проект

asem-m commented 3 years ago

Спасибо за тестовую программу. Установите КЯ 1.8.37245, в режимах по умолчанию Т3П19=20, Т3П20=1 ваш тест Burn It будет проходить корректно на СмартПОС мини.