Когда речь заходит о протоколе MDB, то мы понимаем, что рассматривается «умный протокол», а не простой вариант подключения платёжных систем к торговым автоматам. В простейших вариантах платёжные системы, по существу, исполняют роль датчиков, например: принял монетоприемник монетку - выдал импульс по проводку, сработал электромагнит и вам в руку упала шоколадка.  Что такое вендинговые аппараты или торговые автоматы? Это автоматы для продажи товаров и услуг. Многие из нас наверняка сталкивались с такими в аэропортах или бизнес-центрах. Машина, в которую мы кидаем монетки, чтобы получить кофе, шоколадку или бутерброд, и есть вендинговый аппарат. Продажа снеков и напитков — самый привычный формат таких устройств. Но на деле их потенциал гораздо шире. Вендинговые автоматы услуг делают массаж (это такие специальные кресла), чистят обувь, копируют документы, принимают платежи. В последнее время очень распространены автоматы по отпуску воды в тару потребителя. Мозгом является контроллер торгового автомата, другое название Vending Machine Controller (VMC) которое значительно чаще используется в технической документации к оборудованию. Поэтому и я буду использовать это сокращение. Вот о нем и пойдет речь, точнее о взаимодействии контроллера торгового аппарата и периферийного оборудования. Все устройства (монетоприемник, банкнотоприемник, системы безналичной оплаты) подсоединяются к общей шине (набор проводов). При включении торгового аппарата, VMC производит опрос по этой шине и таким образом узнает о наличии различных платежных устройств в системе. После этого VMC непрерывно опрашивает каждое устройство и узнает его состояние. Например, Вы подошли к автомату и опустили 10 рублей в банкнотоприемник; VMC последовательно опрашивает каждый компонент платёжной системы одним вопросом: "у тебя что?" банкнотоприемник отвечает: "у меня ничего", то же самое отвечает и система безналичной оплаты. А вот монетоприемник ответит: "у меня 10 рублей". VMC проанализирует ответ и выдаст команду: "принять" или "не принять" монеты к оплате. После принятия монет Вы выбираете напиток, ну, предположим, за 6 рублей; VMC его Вам выдаст, после чего даст команду диспенсеру, часто совмещенному с монетоприемником, выдать 4 рубля сдачи. Монетоприемники как правило и принимают, и выдают сдачу. Если идет перебор, и монеты не помещаются в отведенные для них тубы, то они сбрасываются в кешбокс. Так же некоторые номиналы сразу выкидываются в кешбокс. Кешбокс - железная банка для монет, деньги из нее можно забрать только руками. При работе по протоколу MDB, ведущим (главным) в связке «автомат – платежка» выступает контроллер VMC (ПК или другое управляющее устройство). Некоторые преимущества: простота подключения воткнул - заработало простота настройки  простота получения данных аудита статистики с дисплея автомата Но есть и недостатки: совместимость оборудования: MDB так называемый "открытый" протокол, который постоянно дорабатывается, поэтому не стоит удивляться если на автомате заработал монетник, но почему-то не заработал купюрник или кешлес, или их сочетание...  обмен по шине MDB высокий, каждые 50mS идет опрос состояния.  невозможность использования универсальных средств снятия статистики, у каждого производителя оборудования для торговых автоматов свой девайс, свои переходники и программаторы для настройки.  Стандарт MDB определяет электрические и механические характеристики разъемов для соединения Master и Slave устройств, а также материалы, из которых разъемы должны изготавливаться. Рекомендуемые разъемы: Для периферии: Molex 39-01-2060 / AMP P/N 106527-6. Для VMC: Molex 39-28-1063 / AMP P/N 794664. Контакты: 1 - Питание 34В. 2 - Питание, обратный провод. 3 - Не используется. 4 - Master прием. 5 - Master передача. 6 - Общий связи. Вот эта распиновка разъема взята из описания протокола MDB Стандарт определяет связь между VMC и Slave, как оптически изолированную токовую петлю с уровнем напряжения 5 В.  VMC/Передача: Минимальный ток (активное состояние): 100 мА (4 В). Максимальный ток утечки (неактивное состояние): 100 мкА.  VMC/Прием: Минимальный входной ток (активное состояние): 15 мА (1 В). Максимальный входной ток (неактивное состояние): 1 мА.  Slave/Передача: Минимальный ток (активное состояние): 15 мА (1 В). Максимальный ток утечки (неактивное состояние): 30 мкА.  Slave/Прием: Максимальный входной ток (активное состояние): 15 мА (4 В). Максимальный входной ток (неактивное состояние): 100 мкА. Отсюда, как мы видим, возникают некоторые трудности, связанные с подключением устройств к разрабатываемому VMC. Это связано с тем, что вход монетоприемника потребляет 15мА, по сути, это потребление светодиода. А если в системе помимо монетоприемника есть купюроприемник и бесконтактная оплата – то получим потребление порядка 50мА, а это очень много для выходов большинства микросхем. Чтобы защитить выход от возможного короткого замыкания применяется следующая рекомендованная схема управляемого генератора тока на двух транзисторах, схема которого также приводится в описании. Оптроны 4N37 входят схему периферийного оборудования и показаны для лучшего понимания принципов работы. Многие контроллеры разрабатываются для универсального использования. Наличие порта RS232 для них норма, но нет разъема или порта для подключения по MDB, поэтому необходимо сделать внешний преобразователь уровней, который представлен на следующих рисунках. Схема и печатная плата согласования уровней RS232-MDB Коротко опишем формат байтов. Скорость обмена: 9600 Бод. Формат двоичной последовательности: 1 старт бит, 8 бит данных, 1 бит режима, 1 стоп бит. Start 0 1 2 3 4 5 6 7 Mode Stop Сравнивая с форматом асинхронной последовательной передачи данных бит режима используется вместо бита четности в качестве признака передачи байта адреса периферийного устройства. Бит режима: Направление передачи - от Master к Slave. Значение бита режима зависит от того, предается байт адреса или байт данных. Байт Адрес воспринимается всеми Slave устройствами одновременно. Байты Данные воспринимаются только теми Slave, которым они адресованы предыдущим байтом Адрес. Бит режим равен логической 1 при передаче байта Адрес и логическому 0 при передаче байта Данные. Бит режима: Направление от Slave к Master. Бит должен быть установлен в 1 в последнем байте данных, передаваемых от Slave к Master. Вся эта информация доступна в описании протокола MDB или в описании конкретных монетоприемников , которые используются в системе. А сейчас приведем временные диаграммы работы устройства, которые вы не найдете ни в одном описании. Многие разработчики согласятся с тем, что наличие временных диаграмм очень помогает в разработке VMC, или других контроллеров. На рисунках верхний канал – это отправляемые запросы и подтверждения от VMC , а нижний канал – это ответы монетоприемника, конкретно СС61100. Контроллер вендингового аппарата отправляет запросы каждые 50mS Если был длинный ответ монетоприемника, то время следующего запроса отсчитывается от момента подтверждения приема данных Это нужно учитывать, чтобы не завалить запросами монетоприемник. Команд, которыми управляется монетоприемник по протоколу MDB не так уж и много для того, чтобы сделать простой торговый автомат. Вот как они приводятся в описании протокола: Command    Hex Code      Description    RESET    08H    Command for changer to self-reset    SETUP    09H    Request for changer setup information    TUBE STATUS      0AH    Request for changer tube status    POLL    0BH    Request for changer activity status    COIN TYPE        0CH    Signifies coin types accepted and allowable coin dispensing.  This  command is followed by setup data. See command format section.  DISPENSE    0DH    Command to dispense a coin type.  Followed by coin type to dispense. See command format section.    EXPANSION    0FH    Command to allow addition of  COMMAND  features and future enhancements    Нам понадобятся всего четыре команды:  RESET-программный сброс периферийного оборудования POLL – запрос статуса оборудования. На этот запрос монетоприемник будет сообщать VMC о принятых монетах и состоянием занято при выдаче монет. TUBE STATUS  - запрос состояния наполнения туб с монетами. Это больше информативные данные.  DISPENSE- выдача монет из туб. Стоит отметить, что командой можно указать какие монеты и сколько нужно выдать. Под тип выдаваемых монет отведено 4 бита и под количество монет отведено поле 4 бита. Таким образом один бай кодирует сразу и тип выдаваемых монет и их количество. За один раз можно выдать не более 15 монет одного номинала.  К примеру, если нам нужно выдать 8руб сдачи, то мы должны последовательно подать команду на выдачу одной монеты достоинством 1руб, потом одной монеты достоинством 2руб и еще одной монеты достоинством 5руб. Есть конечно диспенсеры, которые могут выдавать сдачу путем указания суммы в команде, но это нужно проверять и смотреть руководство на конкретный диспенсер. Если в монетоприемнике нет никаких событий, то он отвечает кодом 0х0100. На этот ответ VMC не нужно слать подтверждение о получении ответа. Но, если, к примеру, монетоприемник занят выдачей монет Или он сообщает что принял монету То в этом случае VMC должен прислать подтверждение кодом 0х0000 Если монетоприемник занят выдачей монет, то запрос POLL нужно слать  До тех пор, пока не получим в ответе код 0х0000 Как только получили ответ 0х0000 то можно спросить сколько монет в тубах Для выдачи сдачи посылаем команду «0D выдать монеты»  После этого читаем состояние и видим ответ  Такой ответ будет приходить пока аппарат не выдаст нужное количество монет После получения состояния ОК, можно попросить выдать другие монеты или посмотреть, что у нас осталось в тубах. Автомат по продаже воды в тару потребителя, предназначен для продажи очищенной питьевой воды. Очистка производится многоступенчатой системой фильтрации и дальнейшей нормализации минерального состава.  Требования к контроллеру управления торговым автоматом: 1.   Размещение аппарата уличное, но возможна установка внутри помещения.  2.   Продажа воды.  2.1.  На мониторе отображается информация для клиента: Дата, время, стоимость 1 литра  воды, дата замены фильтров.  2.2.  Внесение средств клиентом (купюры, монеты, бесконтактная оплата) с выдачей сдачи 2.3.  В момент внесения на мониторе отображается сумма внесённых средств.  2.4.  Клиент подставляет в приёмную нишу ёмкость для воды и кратковременно нажимает кнопку «СТАРТ».  2.5.  После кратковременного нажатия кнопки «СТАРТ» включается насос розлива,  одновременно активизируется возможность нажатия второй кнопки «ОЗОН», то есть во  время налива воды можно (по желанию клиента) озонировать воду.  2.6.  Кнопки «СТАРТ» и «ОЗОН» становятся активными только когда сумма внесённых средств больше нуля.  2.7.  Во время розлива воды на мониторе отображается “Progress bar”, визуально отображающий процесс заполнения ёмкости.  2.8.  Кнопка «СТАРТ» при повторном нажатии выполняет функцию «ПАУЗА».   3.   В аппарате предусмотрена ночная подсветка, которая включается и выключается по времени, время включения и выключения, устанавливается в контроллере клиентом самостоятельно.  4.   Внутри аппарата в зимнее время должна поддерживаться рабочая температура от +4 до +25 °С.  5.   При низком уровне очищенной воды в баке (датчик низкого уровня), должна включаться блокировка приёма денег (купюры, монеты, бесконтактная оплата) функция ingibit.  6.   Для контроля и возможного управления функционалом автомата по розливу воды должна быть предусмотрена связь (автомат – сервер) по средствам GSM-GPRS модуля, а при наличии возможности подключаться по LAN. 6.1.  Перечень данных, периодичность и формат передачи согласовываются разработчиком контроллера и разработчиком серверной части (личного кабинета).  6.2.  Аппарат должен иметь возможность дооснащение хоппером и чеком.   6.3.  Дистанционный контроль аппарата и возможность изменения основных настроек автомата. 6.4.  Датчик протечки воды   6.5.  Датчик открытие двери.  Настройки контроллера 1 настройки соединения с сервером: IP адрес, Порт сервера, APN провайдера, ID номер контроллера. 2 Минимальная температура для включения подогрева. Температура отключения подогрева 3 Стоимость одного литра воды 4 Количество импульсов расходомера на 1 литр воды 5 время замены фильтров 6 время работы подсветки рекламы 7 настройки чтения показаний счетчика: тип счетчика, серийный номер, скорость порта  Мне очень нравится делать контроллеры со встроенным ВЕБ интерфейсом. ВЕБ интерфейсом легко пользоваться, он интуитивно понятен для обслуживающего персонала. Хотя им пользуются только при настройке контроллера во время пусконаладочных работ это сильно экономит время настройки и подготовки контроллера к работе. Наличие в контроллере ТСР клиента и ТСР сервера расширяет возможности диагностики оборудования. Контроллер выполнен на процессоре PIC32MX795F512L фирмы Micrpchip. Программное обеспечение разработано без использования ОС, написано на С. На рисунке мы видим плату контроллера, которая устанавливается в стандартный корпус для DINрейки.  Веб-интерфейс контроллера взаимодействует с внешним миром по протоколу HTTP, что позволяет обмениваться данными с любыми подключёнными к контроллеру устройствами, поддерживающим этот протокол.  Чтобы зайти в веб-интерфейс контроллера, откройте браузер и введите в адресную строку IP-адрес контроллера, к примеру 192.168.1.9. Надеюсь, что эта статья была вам интересной и полезной.  Конструктор схемотехник, разработка ПО embedded