wiki:vvm

Контроллер вакуумного вендингового автомата VVM

VVM-контроллер вакуумного вендингового автомата

Описание

VVM-контроллер позволяет управлять процессом выдачи товара вакуумным способом с управляющего компьютера (хоста) через интерфейс RS232.

Подключение (версия 1.3)

Подключение (версия 1.2)

Процесс калибровки

Каждый товар может имеет свой индекс 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
Last modified 4 years ago Last modified on Aug 18, 2020, 1:12:01 PM

Attachments (6)

Download all attachments as: .zip