Хорошо. Давайте разбираться. Для начала разделим два понятия - зависание кассового сервера и аппаратный сбой ККМ. Именно сбой, т.к. неадекватное поведение ККМ (зажигание на индикаторе мусора, самопроизвольный сброс и т.п.) корректнее называть сбоем.
Что происходит при зависании кассового сервера и отчего это зависание может произойти?
Зависание сервера, это остановка цикла опроса состояния ККМ. Т.к. кассы серии АМС являются системными пассивными машинами, они не инициируют процесс обмена данными с ПК (как это делают активные). Ведущим устройством в ККС (компьютерно-кассовой сети) является ПК, точнее работающий на нем кассовый сервер. Для этого сервер организует цикл опроса и постоянно спрашивает у машин, что у них произошло (запрос, закрытие чека и т.д.). При остановке этого опроса кассы в сети просто перестанут получать ответы на запросы и все. АМС-200 войдет в состояние "Обработка Online режим" по нажатию любой кнопки на ее клавиатуре. АМС-100Ф перестанет получать ответы на запросы, что будет выражаться в длительном сигнале через 5 сек. после считывания ШК. На кассе после этого можно продолжать работать дальше в автономе, т.е. бить свободные суммы по отделам.
Причинами зависания сервера может быть следующее:
1. Остановка цикла опроса касс внутри сервера, что не приводит к зависанию Windows приложения “Кассовый сервер”. Происходит только остановка работы ККМ. Такое зависание может произойти из-за ошибки в логике этого цикла, из-за неправильной обработки некорректных значений, которые могут придти либо из кассы, либо из БД. В следствие чего внутри цикла возникает ошибка (исключительная ситуация) и этот цикл просто останавливается средствами ОС.
2. Зависание Windows приложения “Кассовый сервер” со всеми вытекающими последствиями. В этом случае ОС говорит “Приложение не отвечает”. Причиной может быть сбой операционной системы.
3. Зависание SQL-сервера Firebird (встречается крайне редко). В этом случае “Кассовый сервер” корректно отловит ситуацию “Потеря соединения с базой данных’ и цикл опроса ККМ остановится по его команде.
4. Ошибка в логике работы с БД. Все ошибки такого характера корректно обрабатываются и протоколируются (CashServer.log). Возникновение такой ошибки не может привести к аварийному завершению сервера. Выразится такая ошибка может либо в том, что касса единично не получит ответ на один из своих запросов, при закрытии чека запись не добавится в БД и т.п., но это все протоколируется.
Что происходит при сбое ККМ и каковы его причины?
Рассмотрим сбой, который постоянно происходит в нашем конкретном случае – вывод на индикатор ККМ “мусора” и самопроизвольный рестарт ККМ.
При сбое кассы, в зависимости от результатов сбоя, кассовый сервер:
1. Теряет с ней связь до тех пор пока ее не приведут в рабочее состояние – это в случае “мусора на индикаторе”, т.к. в этом состоянии касса просто не работает. Это возможно при переходе процессора при выполнении программы на случайный адрес ПЗУ или сбое синхронизации процессора.
2. Сервер кратковременно теряет связь с ККМ на период прохождения рестарта. После того как касса после сброса выходит в режим “Запрос” сервер связь с ней восстанавливает.
Для сбоев такого характера могут быть следующие причины:
1. Переход процессора на случайный адрес ПЗУ.
Причины:
a). Сильный уровень шума на шинах адреса и данных, в результате чего данные на этих шинах просто искажаются и процессор улетает на случайный адрес. Наилучший вариант – это замена блока управления.
б). Сильный уровень шума на возвратных линиях клавиатуры, которые заведены напрямую на процессор, работающий с периферией. Из-за шума сбивается периферийный, и сбивает синхронизацию основного. Решение проблемы – это резисторы на возвратных линиях клавиатуры (все это кстати написано в методиках по доработке ККМ, которые мы высылаем всем желающим).
в). Шнур RS-232 является источником шума по GND (общей линии). Шнур подключенный к разъему “ЭВМ” кассы и “висящий в воздухе” однозначно является источником помех по общей линии. Шнур между “ЭВМ” ККМ и COM-портом ПК с незаземленной ККМ и ПК однозначно является источником помех. Шнур, у которого распаяны линии кроме 2-2, 3-3, 5-5 однозначно является источником помех, особенно влияет 6 контакт.
с). Недостаточный запас по току блока питания кассы. В результате в процессе печати чека, когда идет повышенное потребление питания, снижается уровень питающего напряжения и уровень сигналов, плюс уровень шума по питанию и по GND, вызывает тоже самое искажение на шине адреса и переход процессора по случайному адресу. Соответствующие доработки БП - в методике по доработке.
2. Сбой синхронизации процессора, который приводит либо к его рестарту, т.е. процессор начинает работать с адреса 0, либо приводит к пункту №1.
Причиной такого сбоя является работа процессора на частоте, превышающей ее допустимое значение. На определенных партиях ККМ АМС-100Ф (речь идет о модификациях блока управления, которые выпускались в 2000 и 2001 г. - 009 и 011) и АМС-200Ф могут быть установлены процессора рассчитанные на работу на частоте 20 мГц (распознать можно по 20PI на корпусе процессора), а применяемый в кассе кварц для тактирования процессора устанавливается на 24мГц(АМС-100) и 22,118 мГц (АМС-200). Методы борьбы – установка процессора, рассчитанного на 24 мГц (24PI).
Может ли работа кассового сервера привести к аппаратному сбою ККМ?
Давайте рассмотрим алгоритм взаимодействия сервера с ККМ. ПК хочет получить, либо сообщить ККМ какие то команды/данные, например, запросить ее состояние. Для этого формируется пакет данных, который включает в себя сетевой номер ККМ, код команды, необходимые данные и контрольную сумму. Этот пакет посылается в ККМ по RS-232. В кассе он попадает в соответствующий буфер и лежит там до обработки. Некий диспетчер этого буфера получив уведомление о приеме, во первых, проверяет пакет на корректность, т.е. сравнивает контрольные суммы. Пакет с неправильной КС отвергается сразу же. Далее извлекается сетевой номер. Если этот номер не своей кассы, пакет отвергается. Далее извлекается код команды и диспетчер передает управление соответствующей процедуре обработки. По моему ничего криминального нет. Взаимодействие сервера и кассы ограничивается только этим алгоритмом.
Таким образом, исходя из всего вышесказанного, возникает вопрос: как приведенный выше алгоритм может привести к перечисленным условиям возникновения аппаратного сбоя, при условии, что:
1. В протоколе нет команды перехода на указанный из вне адрес ПЗУ.
2. Закрыты от доступа из вне все критичные ресурсы ККМ.
3. Нет команды “Произвести аппаратный сбой ККМ”.
4. Та часть кассовой программы, которая отвечает за работу по RS, не претерпевала существенных изменений уже много лет.
P.S. Методики доработок ККМ АМС-100Ф, АМС-200Ф высылаются по запросу на kkm@kaluga.ru