= Контроллер вакуумного вендингового автомата VVM = == VVM-контроллер вакуумного вендингового автомата == == Описание == VVM-контроллер позволяет управлять процессом выдачи товара вакуумным способом с управляющего компьютера (хоста) через интерфейс RS232. == Подключение (версия 1.3)== [[Image(vvm-1-3.png)]] == Подключение (версия 1.2)== [[Image(vvm.png)]] == Процесс калибровки == Каждый товар может имеет свой индекс 1-16 и каждому товару может быть назначено свое положение по осям X/Y. Для этого используется процесс калибровки. Для калибровки предварительно устанавливается позиция кареток управляющими командами MOVЕ с хоста (или утилитой protodemo) таким образом, чтобы присоска оказалась строго над товаром. После этого выполняется команда калибровки CALIBRATE с хоста (или утилитой protodemo), в процессе выполнения которой осуществляется возврат к исходным позициям, расчет положения товара и фиксация этого положения за номером. После выполнения калибровки для товара с указанным номером можно выполнять команду выдачи (VEND). == Демонстрационная утилита == Демонстрационная утилита позволяет управлять контроллером с командной строки. Исходный код утилиты и exe-файл см. в аттаче (запускать с командной строки из каталога exe-файлом). Варианты запуска: Проверка доступности устройства: {{{ protodemo.exe COM1 ping }}} Проверка статуса: {{{ protodemo.exe COM1 status }}} == API == Управление контроллером с хоста осуществляется через порт 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 == Алгоритм управления == Хост осуществляет опрос контроллера командой STATUS с получением текущего статуса. При готовности контроллера хост осуществляет прием оплаты и формирует команду VEND на выдачу продукта. В случае успешной выдачи контроллер переходит в состояние VENDED. После опроса статуса VENDED контроллер возвращается в режим IDLE. Для назначения позиций ячеек используются команды PRECALIBRATE, MOVE и CALIBRATION_SAVE Рекомендуемая последовательность калибровки: + открытие крышки холодильника (move z1 fwd 0) + позиционирование на ячейку первого товара командами move + калибровка первой ячейки командой calibrate + предкалибровка на первую ячейку - каретка будет спозиционирована над первой ячейкой + позиционирование командой move на соседнюю вторую ячейку и калибровка командой calibrate + предкалибровка на вторую ячейку - каретка будет спозиционирована над второй ячейкой + позиционирование командой move на соседнюю третью ячейку и калибровка командой calibrate + и т.д. для каждой ячейки == PING (0x01): проверка связи с устройством == Без данных. Успешный ответ на команду (response = 0x01) поступает без данных. == STATUS (0x03): текущее состояние устройства == Без данных, запрашивает текущее состояние устройства. В ответе (response = 0x01) в блоке данных последовательно возвращаются: * 1 байт: текущее состояние контроллера * 2 байта: для состояния CONTROLLER_STATE_ERROR - коды ошибки, битовая маска * Дополнительные параметры статуса (не регламентированы на данный момент, игнорировать) Текущие состояния контроллера: * CONTROLLER_STATE_ERROR = 1 - состояние защелкнутой ошибки. Контроллер остается в данном состоянии до ручной перезагрузки, требуется вмешательство оператора. * CONTROLLER_STATE_IDLE = 2 - готов, ожидание команды на выдачу * CONTROLLER_STATE_VENDING = 3 - идет выдача продукта * CONTROLLER_STATE_VENDED = 4 - продукт выдан * CONTROLLER_STATE_GOHOME = 6 - операция возвращения в исходное состояние * CONTROLLER_STATE_PRECALIBRATION = 7 - операция предкалибровки Коды ошибок (битовая маска): * CONTROLLER_ERROR_MOTOR_TIMEOUT = 0,- тайм аут работы привода * CONTROLLER_ERROR_MOTOR_JAM = 1, - привод заблокирован, механическое препятствие движени * CONTROLLER_ERROR_PUMP_OVERRUN = 2,- тайм аут работы компрессора * CONTROLLER_ERROR_PRODUCT_LOSS = 3, - потеря продукта во время выдачи * CONTROLLER_ERROR_GOHOME = 4, - ошибка возврата в исходную позицию == VEND (0x04): выдача продукта == Данной командой осуществляется выдача продукта. По итогам команды контроллер переходит в режим CONTROLLER_STATE_VENDING до окончания процесса выдачи. По итогам выдачи контроллер переходит либо в режим CONTROLLER_STATE_VENDED, либо CONTROLLER_STATE_ERROR. Параметры: * Номер ячейки, 1 байт Успешный ответ на команду (response = 0x04) поступает без данных. == RECOVER (0x06): восстановление после перехода в ошибку == Без данных, Успешный ответ на команду (response = 0x04) поступает без данных. !!! Использование данной операции предполагается только вмешательства оператора и оценки состояния терминала. Не допускается автоматическое восстановление терминала после защелкнутой ошибки. == MOVE (0x07): позиционирование == Позиционирование используется для определения позиции ячейки продукта при калибровке. Оператор позиционирует присоску над товаром ячейки оптимальным образом используя интерфейс хост-контроллера, который управляет контроллером RVM данной командой позиционирования. * Ось, 1 байт (1 - ось X, 2 - ось Y, 3 - ось Z) * Направление движения, 1 байт (1 — вперед (от стартовой позиции), 2 — назад (к стартовой позиции) * Шаг, 1 байт (0 - без ограничения, до повторного выполнения команды, 1-255 - шаг) Успешный ответ на команду (response = 0x07) поступает без данных. Повторное выполнение при активном моторе оси приводит к остановке движения. == PRECALIBRATE (0x0A): предкалибровка == Данной командой осуществляется переход в позицию уже откалиброванного товара, номер ячейки указывается в качестве параметра. Параметры: * Номер ячейки, 1 байт Успешный ответ на команду (response = 0x08) поступает без данных. == CALIBRATION (0x08): калибровка == Данной командой осуществляется сохранение текущей позиции кареток за продуктом с указанным номером. Присоска должна быть предварительно позиционирована над ячейкой с продуктом командами MOVE. По данной команде осуществляется возврат кареток в исходные положения по всем осям с оценкой и сохранением позиции кареток X/Y за указанным номером продукта. Параметры: * Номер ячейки, 1 байт Успешный ответ на команду (response = 0x08) поступает без данных. == GOHOME (0x09): возвращение на стартовую позицию == Данной командой осуществляется попытка возвращение в исходную позицию кареток с закрытой крышкой холодильника. Команда может быть выполнена даже в состоянии ошибки. Успешный ответ на команду (response = 0x08) поступает без данных. == Пример управления утилитой protodemo == Проверка связи {{{ protodemo COM1 ping }}} Ответ: {{{ PING OK }}} Проверка ID и версии контроллера: {{{ protodemo COM1 id }}} Ответ: {{{ ID: device 5 version 1.0 }}} Запрос статуса: {{{ protodemo COM1 status }}} Движение каретки X на 100 единиц вперед: {{{ protodemo COM1 move x fwd 100 }}} Движение каретки Y без ограничения назад (до концевика или до остановки повторной командой): {{{ protodemo COM1 move y bwd 0 }}} Калибровка, использовать текущее положение кареток как позицию товара с номером 1: {{{ protodemo COM1 calibrate 1 }}} Предкалибровка над ячейкой 1 {{{ protodemo COM1 calibrate 1 }}} Выдача товара с номером 1: {{{ protodemo COM1 vend 1 }}} Возврат в стартовое состояние: {{{ protodemo COM1 home }}} Обновление прошивки: {{{ protodemo COM1 upgrade vvm-1-1.bin }}}