Здравствуйте, уважаемые коллеги !
На днях столкнулся с задачей калибровки этого зверя. Почитал о Ваших псевдонаучных изисканиях по этому поводу на форуме.
Скачал инструкцию по тестру
http://www.ictgroup.com.tw/manual/700/T ... MANUAL.zipпришел к выводу, что все эти попытки выставить напряжения - шаманство, а микропрограмма купюрника лучше отслеживает уровни на сенсорах.
По идее жутко крутой и дорогой прибор, который якобы есть только у "Cтиля" это ни что иное, как аппаратный терминал.
Впрочем, так оно и оказалось.
После раскопки микропрограммы купюрника родилась технология, которой я и решил поделиться с коллегами.
В BL-700 применен микроконтроллер с ядром Hitachi H8.
Дизассемблировал и раскапывал прошивку 60FRU531
-------------------------------------------------------------------
I. Подключение
--------------
Очень приятно удивил факт, что у BL-700 согласователь уровней (MAX232 или аналог) есть непосредственно на CPU Board.
Соответственно для подключения к COM порту компьютера можно обойтись простейшим шнурком из трех проводов (Tx, Rx, GND).
Сжема подключения следующая (распиновка):
Bill Acceptor (головой верх/справа на лево)
--------------------------------------------------------
1 2 3 4 5 6
|--------------------|
| o o o o o o |
|---| |---|
------------------------------------------------
Соединяем напрямую с DB9 (Female)
Acceptor COM-port
----------- ------------
1 2
2 3
5 5
Все. Шнурок готов.
Параметры протокола: 9600, 8E1
Для исследований и дальшейшей работы я использовал замечательнейшую программу RealTerm:
http://realterm.sourceforge.net/С помощью нее можно посылать в купюрник различные коды и получать ответ сразу в виде чисел в HEX виде
(примеры с комментариями будут приведены ниже)...
II. Протокол и функции
-------------------------------
Ключ техрежима: 0x0A
После того как купюрник проинициализировался посылаем ему этот код.
Купюрник его возвращает обратно для контроля и переходит в техрежим (светодиоды на передней панели перестают мигать и горят постоянно).
Далее доступны следующие команды:
0x33 получение версии микропрограммы
0x36 получение состояния DIP-переключателей.
0x38 КАЛИБРОВКА
На посылку 0x33 и 0x36 команды купюроприемник внешне никак не реагирует.
По получении команды 0x38 купюроприемник запускает двигатель и ждет VLA-карту.
Далее после подачи команды нужно дать ему еще один код 0x00 или 0xFF.
0x00 - получить данные. 0xFF - выйти из технологического режима.
Рассмотрим техклманды более подробно:
------------------------------------------------------
A) Получение версии микропрограммы
Последовательность:
0x0A ; переход в техрежим
0x33 ; команда.
0x00 ; дать данные.
Возвращает 128 байт (возможно разработчики задумывали возвращать в этом дампе еще что-то, но большинство значений в микропрограмме
версии 60FRU531 - пустышки со значением 0x03 и только 8 байт по смещению +0x70 несут полезную информацию - собственно версия микропрограммы)
Пример дампа:
+0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
+00 : 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 ................
+10 : 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 ................
+20 : 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 ................
+30 : 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 ................
+40 : 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 ................
+50 : 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 ................
+60 : 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 ................
+70 : 36 30 46 52 55 35 33 31 03 03 03 03 03 03 03 03 60FRU531........
После выдачи дампа купюрник сразу же возвращается в нормальный режим работы.
Если после команды вместо кода 0x00 дать код 0xFF, то купюрник возвращается в нормальный режим работы без выдачи дампа.
B) Получение состояния DIP-переключателей
Последовательность:
0x0A ; переход в техрежим
0x36 ; команда.
0x00 ; дать данные.
Возвращает 2 байта (состояние DIP-переключателей в формате LowByte; HighByte)
При очередной посылке кода 0x00 заново возврашает текущее положение переключателей
При посылке кода 0xFF купюроприемник возвращается в нормальный режим работы.
Следует помнить, что состояние DIP-переключателей описывается 16 разрядным словом, однако реально у купюрника 10 переключателей.
Старшие разряды слова есть Const = '1' (засчет подтяжки)
Для того, чтобы вычислить реальное состояние переключателей необходимо перевести полученное значение в двоичный вид
и соответственно проанализировать состояние десяти младших разрядов. Единица соответствует положению OFF, а ноль положению ON.
Например 1F FC
соответствует фабричным установкам DIP-переключателей:
1-5: OFF
6-10: ON
С) КАЛИБРОВКА
Последовательность:
0x0A ; переход в техрежим
0x38 ; команда.
Купюроприемник запускает двигатель и ждет VLA-карту.
Всавляем VLA-карту ("калибровочную бумажку"). Купюрник ее втягивает, останавливает двигатель и ждет кода для дальнейших действий.
По получении кода 0x00 возврашается дамп размером 22 байта. Дамп данных состоит из трех блоков. Каждый блок завершается словом 0x0000
Первый блок - синхрополе (четыре байта 0x06 [число сенсоров]). Второй блок - текущие уровни (калибровочные коэффичиенты оптических сенсоров).
Третий блок - идеальные уровни (калибровочные коэффичиенты) оптических сенсоров.
Как и в случае получения состояния DIP-переключателей повторный прием кода 0x00 заставляет купюрник отдать дамп с новым состоянием
оптических сенсоров. Если выставить в RealTerm длину строки в 22 байта и периодически посылать в купюрник код 0x00, то вращая калибровочные
переменники и смотря на возвращаемые строчки кодов - уже можно калибровать купюрник в динамике. Но может кто-нибудь напишет на основе
моих материалов программу, которая выполняет функции аналогичные "крутому тестеру"... ;-)
Мне было лень писать - у меня не так много BL'ек в ремонте...
Example (возвращаемый дамп):
+0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
+00 : 06 06 06 06 00 00 3C 3B 3D 79 3B 49 00 00 3A 3A
+10 : 3A 78 39 46 00 00
+00..+03: Синхрополе [код 0x06]
+04..+05: 00 00
+06..+0B: Текущие калибровочные коэффициенты оптических сенсоров купюроприемника.
+0C..+0D: 00 00
+0E..+13: Идеальные коэффициенты оптических сенсоров для данной прошивки.
+14..+15: 00 00
По получении кода 0xFF купюроприемник "выплевывает" VLA-карту и возвращается в нормальный режим работы...
------------------------------------------------------------------------------------------------------
Итак, коллеги - вот вам удобная, рабочая технология!
Пробуйте, эксперементируйте, если что - пишите/спрашивайте (возможно я где-то что-то сумбурно написал)...
Если кто-то напищет специальную программу и выложит на billacceptor.nm.ru , думаю многим будет интересно и главное, закроет довольно
наболевший вопрос... Единственная просьба - при распространении такой программы или публикации вышенаписанного текста в любых источниках
указание моего авторства исследовательской работы обязательна.
Контактная информация:
E-Mail:
[email protected] Тел. 7(4232)55-42-66
WBR, Alexei Zaiko
Сервисный инженер
ООО "Торговые автоматы"
г. Владивосток