== BOX-контроллер автомата выдачи коробок == BOX-контроллер осуществляет контроль выдачу коробок в вендинговом автомате. == Особенности подключения и комплектации == Особенности: * Крайне важно!! Управляющий симистор non-insulated, радиатор "под током". Т.е. контроллер нужно запаковать или закрыть крышкой чтобы избежать случайного касания. * Шунтирующее реле мы ставим как резервное, не используется. * ВАЖНО! Подключение строго RS232, не путать с uart! [[Image(boxer-1-0.png)]] == Коммутация через контроллер rvm == [[Image(rvm-box.png)]] == Алгоритм управления == Контроллер оперирует следующими состояниями: * IDLE - в ожидании команды, готов выполнять выдачу. * DISPENSE - идет выдача коробки. * ESCROW - коробка в положении выдачи, ожидает забора из лотка. * ERROR - защелкнутое состояние ошибки. Для выдачи коробки хост осуществляет следующие операции: * Проверяет текущий статус-готовность к выдаче (IDLE) * Выполняет команду DISPENSE. В случае неудачи отменяет операцию. * Ожидает смены статуса. * Если статус сменился на ERROR хост отменяет транзакцию, терминал останавливает работу до выезда сервисного инженера. * Если статус сменился на ESCROW хост рекомендует клиента забрать коробку. * Если/когда статус сменился на IDLE хост может завершить обслуживание. Возможные ошибки: * empty - ошибка фиксируется, если во время операции выдачи (DISPENSE) не зафиксировано движение коробки по концевику. * jam - ошибка фиксируется, если во время операции выдачи (DISPENSE) не зафиксировано освобождение датчика движения. ''' Важно! Контроллер не имеет возможности контролировать отсутствие коробок в стеке, поэтому ПО терминала должно осуществлять контроль загрузки и остатков коробок. == Протокол управления == При разработке протокола следует ориентироваться на исходный код утилиты protodemo_box. Команды и результаты выполнения описаны как с точки зрения заголовочного файла box.h и аргументов командной строки protodemo_box. Управление контроллером с хоста осуществляется через порт RS232 Параметры последовательного порта: * Baudrate: 115200 * Parity: none * 8 bits * 1 STOP контроллер и хост обмениваются командами и данными, инкапсулированными в пакеты следующего формата: * (1 байт) sync - байт синхронизации, 0x55 * (1 байт) size - размер пакета (включая sync и crc) * (2 байта) адрес устройства, иные параметры - не используются, передавать 0x00 0x00 * (1 байт) cmd/response - код команды * (N байт) data - блок данных команды (может быть пустым) * (2 байта) crc - контрольная сумма CRC16-CCIT == PING (0x01): проверка связи с устройством == Без данных. Успешный ответ на команду (response = 0x01) поступает без данных. С командной строки: {{{ protodemo_box COM1 ping }}} Ответ: {{{ PING OK }}} == ID: идентификация устройства/прошивки == С командной строки: {{{ protodemo_box COM1 id }}} Ответ: {{{ ID: device 4 version 1.0 }}} == ESTATUS (0x03): текущий статус устройства == Без данных. Успешный ответ включает в себя TLV-блоки, описывающие статус устройства, в формате: * (1 байт) тип TLV-блока * (1 байт) размер блока данных * (X байта) значение блока данных Варианты типа блока: * BOX_HPROTO_ESTATUS_STATE = 1 - статус (см box.h) * BOX_HPROTO_ESTATUS_ERROR = 2 - битовая маска ошибки (см. box.h) Блоки TLV с неизвестные типами данных необходимо корректно пропускать С командной строки: {{{ protodemo_box COM1 estatus }}} Ответ: {{{ Status:[2] idle }}} == DISPENSE (0x04): проверка связи с устройством == Без данных. Успешный ответ на команду (response = 0x04) поступает без данных. С командной строки: {{{ protodemo_box COM1 dispense }}} == RECOVER (0x06): восстановление после перехода в ошибку == С командной строки: {{{ protodemo_box COM1 recover }}} Без данных, Успешный ответ на команду (response = 0x04) поступает без данных.