Контроллер вакуумного вендингового автомата VVM
VVM-контроллер вакуумного вендингового автомата
Описание
VVM-контроллер позволяет управлять процессом выдачи товара вакуумным способом с управляющего компьютера (хоста) через интерфейс RS232.
Подключение
Процесс калибровки
Каждый товар может имеет свой индекс 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