08:30 

Записки маньяка. Использование VFD дисплея от ККМ "Штрих-М".

Mainframe
Reductio ad absurdum.
Друзья и не очень! Вы, наверное, не раз наблюдали на кассах в магазинах такие симпатичные зелёные экранчики, на которых вы видели сумму своей покупки и прочую полезную информацию. А вы не думали о том, что такой экранчик от сломанного аппарата вполне можно попытаться приспособить для домашних нужд? А если, например, подключить это к компьютеру, дабы оно выводило какую-нибудь полезную информацию? Вот этим мы сейчас и займёмся.

Оговорюсь сразу: не стоит бежать и ломать первый попавшийся кассовый аппарат, не прочитав всего текста. Пост написан, прежде всего, для людей, которым случайно попался именно вот такой дисплейный модуль, как у меня, и они не знают, что с этим модулем делать. Дело в том, что, во-первых, этот конкретный модуль отличается "немного нестандартной" системой команд, а во-вторых, по сей день слишком мало на свете софта, предназначенного для таких дисплеев.

Итак. Те, кому это не интересно, проходят мимо, а остальных прошу под кат.


Итак, попался в мои лапы некий суровый чугуниевый POS-терминал отечественного производства, который называется "Штрих-М". Неисправный. После нескольких безуспешных попыток оживить девайс целиком, я начал засматриваться на довольно большой двухстрочный зелёный VFD-дисплей на нём. Как выяснилось, этот дисплей называется "дисплеем покупателя" и тем же "Штрихом" встраивается в POS и продается отдельно.

После расковыривания агрегата и изучения модуля выяснилось следующее. Это тайваньский VFD модуль компании Flytech с подключением по RS-232 интерфейсу (COM-порт) и полем 2x20 символов. На самой плате распаян разъём 10P10C, на который подводится и питание модуля, и интерфейсные линии. Паниковать не стоит, туда прекрасно влезает обычный 8P8C разъём (RJ-45) и отлично работает. Но об этом чуть ниже.

Вот фотография раскуроченного POS с первыми попытками достучаться до дисплея.



Хочу выразить признательность производителю сурового агрегата "Штрих-М" за то, что на их сайте выложена документация по протоколу обмена для этого модуля и драйвер с утилитой тестирования. Драйвер нам не нужен будет, а вот утилита проверки дисплея пригодится.



Итак, что надо сделать, чтобы VFD начала работать отдельно от терминала?
Во-первых, найти COM-порт. Во-вторых, найти разъём или кабель DB9F, чтобы подключить дисплей к ком-порту.

Скачиваем мануал к дисплею, ссылку на который я давал выше, и видим, что нам от ком-порта нужны только три провода: GND, TxD и DSR.



Будьте внимательны: на разъёме 10P10C, который распаян на плате, крайние два контакта (по одному с каждой стороны) не используются, но нумеруются в мануале.



Схема подключения, как на скане выше. Третий контакт разъёма 10P10C подключаем к третьему контакту ком-порта, 4 контакт разъёма 10P10C подключаем к 5 контакту ком-порта, 6 или 7 контакт разъёма 10P10C подключаем к 5 контакту ком-порта, оставшийся из них подключаем к -12В питания, 8 или 9 контакт разъёма 10P10C подключаем к +12 В питания. На стороне компьютера надо еще дополнительно замкнуть 7 и 8 контакты ком-порта для возврата синхросигнала, в противном случае можно получить подвисший софт. Остальные "ноги" не используются.



Подключаем получившееся чудо к порту, подаем питание и запускаем программку "Тест драйвера дисплея покупателя" из комплекта драйверов, ссылку на который я опять же давал выше (вы же скачали его, правда?). Нажимаем там кнопку "Визуальная настройка", выставляем номер порта, скорость 9600 бод, 8N1, протокол Firinch, длину строки 20 и 2 строки, и жмём "Тест". В случае успеха вы увидите вот такую картину:





Если текст вывелся - значит, все ОК, и можно идти дальше. Если нет - проверяем правильность соединений, настройки утилиты и положение переключателей на плате VFD. Переключатели эти можно просто переключить все восемь штук в положение ON (в сторону платы). В таком варианте работать оно будет (это дефолтные настройки: скорость 9600, кодовая страница US English, протокол обмена Firinch\CD5220). В мануале к дисплею есть таблицы положений переключателей, если потребуется эти самые настройки поменять.

Можно ещё послать текст на VFD через HyperTerminal или другую программу для работы с последовательным портом. Например, текст "Hello World!" на снимке ниже был подан на дисплей именно через "Гипертерминал". Служебные команды тоже можно посылать "вручную". Например, для очистки экрана можно послать последовательность ESC @ (жмём кнопку Эскейп и следом вводим "собаку"). Это команда инициализации экрана. В мануале к дисплею прописаны все управляющие последовательности, некоторые из которых нам пригодятся позже.



Если текст выводится и вообще дисплей работает, можно, эстетики ради, выкинуть лишнюю интерфейсную плату и подключить кабель от ком-порта и кабель питания напрямую к плате дисплея. Если вы, разумеется, сразу так не сделали. Берем обычный RJ-45 разъём (8P8C) и вставляем в него наши кабели. В точно том же порядке, как припаивали к плате. Не забываем, что у 8P8C на два контакта меньше, поэтому контакт №2 на плате (TxD) становится контактом №1 в RJ-45.



После обжимки RJ-45 и подключения к плате дисплея мы получаем функционально законченное устройство без лишнего хлама.



Коричневая конструкция, видимая слева от интерфейсного разъема, является 3-контактным разъемом от дохлого процессорного кулера, в котором замкнуты крайние контакты. Раньше там сидел выключатель питания дисплея.



Теперь, эту конструкцию неплохо было бы проверить на работоспособность. Выводим что-нибудь на дисплей, и если оно не выводится - внимательно проверяем правильность обжимки.









Теперь дело за программным обеспечением. Дело в том, что и так маловато софта, который способен выводить какую-нибудь полезную информацию на LCD или VFD дисплей. Плюс к этому, при попытках приспособить подобный софт сказывалась, в первую очередь, нестандартая система команд именно этого дисплея. Например, часто используемая таким софтом команда очистки дисплея, у этой платы кодируется символом 12 ASCII (FF), или 0x0C в шестнадцатеричной системе, тогда как софт лепит в порт команду 21 (NAK), она же 0x15, которую девайс успешно игнорирует. Сочетание различий в этой и других командах приводит к некорректной работе девайса: текст, хоть и выводится сам по себе корректно, начинает плавать в разные стороны, дисплей периодически начинает показывать полную чушь, или даже совсем отключиться.

Как пример, команда перевода курсора в начало строки, выдавленная в порт каким-нибудь плагином WinAmp, напрочь игнорируется, и начало второй строки получается там, где закончилась первая. Выглядит это всё забавно, но нечитабельно - учитывая то, что тот текст, которому не хватило места в этой самой второй строке, автоматически переносится дисплеем на первую строку, затирая часть уже существующей там информации.



К сожалению, подавляющее количество подобного ПО имеет в своем составе несколько предустановок для разных дисплеев (среди которых, конечно же, нет нашего) и поменять несколько команд в каком-либо из этих предустановок на правильные не представляется возможным, поскольку предустановки лежат в виде библиотек. Можно, конечно, взять и написать библиотеку самому, взяв за основу API программы или примеры для программирования, выложенные на официальном сайте, но это не ко мне - я не программист.

Поэтому я продолжил искать программы, которые либо позволяют вписывать произвольные наборы команд дисплея, либо произвольно менять эти команды в текстовых файлах предустановок без использования компиляторов.

Первой, и пока единственной программой с такой возможностью, которую я нашёл, был MediaPortal - оболочка для мультимедиа-центров и прочих домашних кинотеатров на базе ПК. В комплекте с программой идёт плагин Mini Display, который поддерживает команды для целой кучи дисплеев.



А самое главное, что среди этой кучи была обнаружена предустановка под названием Generic Serial Character VFD/LCD driver, позволяющая всписать в несколько полей нужные командные последовательности символов!



Итак, ставим MediaPortal. Язык выбираем английский! Или потом меняем в настройках на английский. После установки в настройках программы (выполненных в виде отдельной программы MediaPortal Configuration) включаем плагин MiniDisplay. Затем кнопка Config переносит нас в настройки самого плагина , где мы выбираем порт, количество столбцов и строк символов на дисплее, а кнопка Advanced переносит нас ещё глубже - к установкам скорости порта и назначаемым командным последовательностям.



В соответствии с мануалом к дисплею, заносим в поля соответствующие последовательности. Обращаю ваше внимание, что плагин требует записи последовательностей в шестнадцатеричных числах, в виде 0x00, разделённых пробелами (если конкретная команда состоит из нескольких символов. Так, например, команду смещения курсора вправо, по мануалу определяемая символом Ht (09 в шестнадцатеричной форме), в соответствующее поле плагина надо записыать как 0x09, а команда инициализации дисплея Esc @ (она же 1B 40) превращается в 0x1B 0x40.

Заполнив поля согласно мануалу или моим скриншотам, можно закрывать конфигуратор и запускать сам Медиапортал. После загрузки оболочки, в случае корректно выставленных настроек и управляющих последовательностей, на экране должно высветиться вот это:



Затем можно погулять по пунктам меню. Каждое действие в Медиапортале - перемещение по меню, входы и выходы по иерархии меню, запуск и остановка воспроизведения медиафайлов - должно отображаться на дисплее.



Единственный момент, который я пока не победил. По причине отсутствия мозгов или тому виной банальная лень - не знаю. Дисплей, доставшийся мне на растерзание и программа MediaPortal поддерживают разные кодировки русского языка. Именно поэтому я говорил про английский язык чуть раньше. Дисплей требует кодировку CP866 для русского языка, в настройках же Медиапортала я не нашёл пункта, отвечающего за кодировку посылаемого на мини дисплей текста.



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

URL
Комментарии
2013-05-23 в 13:13 

-Joker-
Main, мне вот что кажется, теоретически на данный дисплей можно вывести любой текст, будь то
1) Слово (сочетание) длиной до 40 символов, либо
2) Вообще бегущая строка, возможно даже в обе полосы.
Но, поскольку софтинки именно на этот девайс очень мало, то остаётся только тестировать дальше :pc:

2013-05-24 в 13:18 

Mainframe
Reductio ad absurdum.
-Joker-, на данный девайс можно практически вывести любой текст длиной до 40 символов. Напрямую, через HyperTerminal, например, это вполне реализуемо. Строка "Hello World!", про которую я говорил здесь, именно так и выведена.
Бегущая строка реализуется средствами штатного драйвера от "Штрих-М". В любую из двух или обе полосы. Можно даже разный текст и скорость на каждую полосу. К тому же, драйвер отлично поддерживает русский язык, на ходу перекодируя привычный CP1251 в CP866. Но для использования этого драйвера в практических целях нужно, как минимум, уметь программировать.

URL
2013-11-05 в 23:14 

Ага! Попался и мне такой дисплей! Пока еще с ним не экспериментировал, лежит на полке... Если появятся какие идеи - обязательно пишите, да и в свою очередь буду наблюдать за этой страничкой, если что придумаю - сообщу...

2013-11-07 в 05:10 

Mainframe
Reductio ad absurdum.
yaffny, я покамест его отложил на полочку, но может и придумаю что.

URL
Комментирование для вас недоступно.
Для того, чтобы получить возможность комментировать, авторизуйтесь:
 
РегистрацияЗабыли пароль?

и лишь в сердце моём

главная