Найти в Дзене
В Дзене применяются
рекомендательные технологии
Технологии денег

Как программируют банкоматы

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

Подавляющее большинство банкоматов во всем мире имеют на борту всего три гордых лэйбла. Это Diebold (Диболд), NCR и Wincor. Причем Wincor и Diebold объединились, став крупнейшим в мире производителем в этой области.

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

Но как бы там ни было, принципы разработки "программ" для банкоматов изначально закладывались конторами NCR и Diebold. И это было в те времена (а это семидесятые), когда компьютеры были большими и слабыми. Соответственно, все разрабатывалось так, чтобы все это слабенькое железо как-то удовлетворительно работало.

Хотя, пожалуй, это легкое высокомерие не совсем уместно.

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

В реальности же, как я уже сказал, в мире довольно много старых банкоматов (хотя больше в США), которые все еще прекрасно работают. Поэтому нужна обратная совместимость протоколов. Как итог - устаревшее наследие тащится с незапамятных времен, новые возможности достраиваются как расширения. Поэтому, если посмотрите спецификацию на протокол NDC (NCR Direct Connect авторства NCR) или DDC (Diebold Direct Connect авторства Diebold) - увидите, какая она огромная, а протоколы нестройные, запутанные и используют странные механизмы. Скажем так, у нормального программиста возникает реакция: взять бы да переписать всё по уму! Но нельзя, потому что есть парк старых банкоматов, которые не поймут нашего стремления к прекрасному. Кстати, Wincor не стал разрабатывать свой собственный протокол. Он стал поддерживать оба (но не полностью), плюс добавил свои авторские расширения. NDC и DDC протоколы в главном очень похожи друг на друга, хотя различия, конечно есть.

Да, а средние и мелкие производители банкоматов просто берут и поддерживают один из протоколов - NDC или DDC (хотя сейчас есть и кое-что современное).

Так вот, протоколы эти исходили из того, что банкомат выполняет ограниченный набор простых и четких инструкций, безо всяких там скриптов и стороннего программного обеспечения.

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

У вас есть набор состояний, в которые банкомат умеет переходить и выполнять в них какие-то заранее известные операции. И составляя сценарий, вы просто выбираете из имеющихся те состояния, которые вам нужны, и ставите их в определенном порядке.

Например, состояние "A" в обоих протоколах - это состояние ожидания ввода карты, оно должно быть самым первым. При старте банкомат начинает с первого состояния. После того, как карта вставлена, банкомат, находясь в состоянии "А", пытается ее прочесть и проанализировать результат. У состояния "А" есть настройки, в т.ч. номера следующих состояний. К состоянию с каким номером перейти, если, например, карта не прочиталась. Или куда перейти, если всё прошло успешно.

А, например, в состоянии "B" банкомат ожидает ввода PIN-кода. Еще он в этом состоянии умеет выводить звездочки на экран.

Состояние "E" создано для организации меню из четырех функционально-дисплейных клавиш (FDK), которые находятся по периметру экрана. Состояние "Y" - уже для меню из восьми пунктов (чаще всего именно восемь кнопок вокруг экрана, хотя в рекордных случаях есть еще четыре штуки сверху). В состоянии "D" устанавливается начальное содержание командного буфера. И так далее.

Разработчик сценария последовательно указывает имена состояний (они жестко заданы в протоколе), их настройки (среди них обязательно есть номера следующих состояний для разных случаев), а также номера "экранов".

Дело в том, что "экраны" описываются отдельно от состояний. И это, кстати, удобно. Бывает, что у разных состояний может быть один и тот же "экран" (да хоть бы банальная надпись "Подождите, транзакция обрабатывается"), поэтому экран описывается один раз, а в состояних указываются номера подходящих экранов. Некоторые состояния не имеют никакого визуального представления, а у некоторых состояний может быть несколько "экранов" (для разных случаев).

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

Какой-то универсальной программы для разработки сценариев нет, и в ней нет смысла. Сценарий в банкомат загружается по сети, из процессингового центра. А программы процессинга там стоят самые разные. И каждый производитель процессингового софта сам реализует редактор сценариев для банкоматов. Нередко такие редакторы позволяют представить сценарий в виде диаграммы переходов, где узлы - это состояния, а стрелки указывают переходы между ними.

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

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

Ах, да, я обещал рассказать, почему часто мультимедия такая грустная в банкоматах...

Дело вот в чем. Я выше в тексте слово "экран" везде старался помещать в кавычки. Потому что это не просто картинка, точнее, совсем не картинка. Когда в сценарии описывается экран, на самом деле, перечисляется список команд, который должен выполнить банкомат, чтобы получить какое-то изображение. А там команды такие, уровня прошлого века. "Поместить курсор в позицию 5, 7". "Вывести текст ПРИВЕТ". "Поместить курсор в позицию 30, 30". "Выбрать цвет КРАСНЫЙ". "Вывести текст МИР". И т.д. Грустно, конечно. Ну да рассчитано на старые банкоматы.

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

На самом деле есть и более современные протоколы и решения. Где все устроено на привычных нам языках программирования. Но это больше в новых банкоматах (или просто этот софт стоит отдельных денег) и пока не получило большого распространения.

А вообще от банкомата не требуется, чтобы он пел и плясал. Шуршание банкнот доставляет удовольствие почище симфонии в 3D звуке. Но выглядеть он должен презентабельно. Чего можно добиться и без 4K разрешения при 60 FPS.

Вопросы? Предложения по темам? Напишите мне в телеграм!
Подписывайтесь на канал "Технологии Денег" в Яндекс.Дзен и Телеграм! У меня много интересного материала!
Рекомендуем почитать