Closed ola-skorp closed 3 years ago
По логу мало что понятно, какая именно последовательность команд!?
Установила кассовое ядро 1.8.37240. Бумажные чеки больше не печатаются, хотя перед печатью выполняется код
Set_DeviceFunctionNumber(classic_interface.DeviceFunctionEnumeration.DFE_SkipAllPrinting.swigValue())
Set_ValueOfFunctionInteger(0)
SetDeviceFunction()
В таком состоянии (без печатающегося чека) чек с 90 позициями оформился без ошибок
2. Ошибка возникает после печати части позиций, как я и написала выше (вылезает бумажный чек, содержащий не все позиции, а только несколько, в моём случае 32)
похоже на ошибку в КЯ
3. Как увеличить таймаут?
таймаут можно увеличить, через параметр
?timeout=N
в свойствеconnectionURI
или в свойствеTimeout
, все это нужно делать доConnect
- Сейчас мой смартпос в этой самой ошибке inout, в которой он так и остаётся. Попробую переустановить кассовое ядро ну что-то КЯ плохо
В таком состоянии (без печатающегося чека) чек с 90 позициями оформился без ошибок
осталось включить печать, покажите лог вот этого места
Set_DeviceFunctionNumber(classic_interface.DeviceFunctionEnumeration.DFE_SkipAllPrinting.swigValue())
Set_ValueOfFunctionInteger(0)
SetDeviceFunction()
Давайте если проблема воспроизведется на актуальной версии КЯ - передадим задачу разработчикам КЯ.
А 1.8.37240 - это разве не актуальная версия?
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
Пришлите полный лог файл драйвера (типа лога на gist'е), где видна вся последовательность команд набора длинного чека и его закрытие, где будет ошибка inout error.
Я не могу, потому что после печати этого чека у меня сгорело что-то в принтере. Я вам прислала всё, что удалось достать на момент тестирования. В Logcat ограниченное количество строк.
Известная проблема с моторами. К КЯ и драйверу отношения не имеет. Нужно поменять мотор и перешить микроконтроллер управления принтером в сервисе.
Отправляю на печать фискальный чек прихода с 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
и "мотор") или одна взаимосвязанная проблема?
Известная проблема с моторами. К КЯ и драйверу отношения не имеет. Нужно поменять мотор и перешить микроконтроллер управления принтером в сервисе.
Это это проблема чисто Смартопса мини, или на большом Смартпосе двигатели тоже перегреваются?
А как правильно работать с принтером, чтобы мотор точно не сгорел? Какие и где должны быть задержки. Какое минимально время ожидания между чеками? Не хотелось бы эти параметры выяснять эксперементально. Боюсь это может дорого обойтись. У нас клиент спалил двигатель, а потом мы на тестах еще два.(
Есть ли какие-то способы узнать, что перегрев скоро может случиться и надо остановиться?
Поясню, контекст. У нас разные клиенты. Есть которые месяц печатают чеки аванса, а потом для всех этих чеков разом начинают печатать чеки полного расчета. Это может быть 60-100 чеков за раз. Нашелся клиент у которого 100 позиций в чеки. Нам надо понимать как в общем случае организовать работу с оборудованием, чтобы мотор не сгорал.
P.S. И понятно, что температура в комнате, где стоит принтер, тоже может быть разной.
Это из файла лога драйвера или из 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, который я скинула вашим коллегам. Код печати чека продажи, с помощью которого выполнялась печать этого чека, я также скинула вашим коллегам.
Это проблема платфомы на которой построен Смартпос мини. В большом Смартпосе этой проблемы нет, там один из лучших принтеров. Есть новая прошивка контроллера принтера Смартпоса мини в которой, возможно, исправлено "горение" мотора, но у меня нет информации как прошивать этот контроллер.
В КЯ есть параметр Т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
произошел по таймату драйвера ФР, но если библиотека принтера не возращает управление в КЯ долгое время это ненормально.
Пока картина такая - прошивка контроллера зависает, останавливая шаги мотора, но подавая напряжение на мотор, который за некоторое время (минуту, например) перегревается и плавит корпус.
Для отладки этой ситуации мы сделали приложение, которое печатает заданное количество чеков с заданным количеством позиций и с заданными задержками между чеками и между позициями. При печати одного чека со 95 позициями и задержкой между позициями 1500ms у нас крашится кассовое ядро. Перезагрузка и отмена чека не помогает, помогает только перепрошивка. Если нужно, можем предоставить исходный код приложения. Ссылка на apk
Не удается установить 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?
Спасибо за тестовую программу. Установите КЯ 1.8.37245, в режимах по умолчанию Т3П19=20, Т3П20=1 ваш тест Burn It будет проходить корректно на СмартПОС мини.
Отправляю на печать фискальный чек прихода с 90 лайнами. Печатается часть лайнов, после чего происходит ошибка inout error. Ссылка на gist с логом https://gist.github.com/ola-skorp/a8496f309009f7f272cfdb6fa0faf3da Повторяется стабильно. Каждый следующий чек после этой ошибки печати не печатается с той же ошибкой, и падает кассовое ядро. Перезагрузка не помогает. Сразу после перезагрузки при отмене чека из фискал мастера получаю ошибку 88. Если жму "Продолжить печать", кассовое ядро падает. Тестировалось на двух разных устройствах. Версии кассового ядра 34865 и 1.8.37240 Версия фискал мастера 2.2.1
До печати проверяем состояние принтера. Если требуется закрытие смены из-за превышения ей 24 часов, то посылаем ошибку сразу, не переходя к печати. После обработки ошибки печатаем чек закрытия смены, после чего запускаем печать того же чека с 90 лайнами ещё раз. В этом случае ошибки inout error нет.