== Диспенсер выдачи магнитов == == Схема подключения == [[Image(motorcontroller-scheme.png)]] == Описание == Управляющий контроллер позволяет управлять выдачей магнитов с управляющего компьютера (хоста) через интерфейс USB. Хост отслеживает состояние диспенсера (команда STATUS) на предмет наличия фатальных ошибок (JAMMED) и состояния стекера магнитов. Диспенсер может находится в одном из четырех статусов * 0x00 — инициализация. Производится при старте устройства. * 0x01 — готов к работе. Штатное состояние устройства при ожидании команды на выдачу магнитов. * 0x02 — в процессе выдачи. Диспенсер осуществляет выдачу магнитов. * 0x03 - фатальная ошибка JAMMED. В данное состояние диспенсер переходит в случае если зафиксирован сбой работы. Выход из состояния JAMMED может быть осуществлен двумя способами: * Перезагрузкой устройства * Длительным (2-3 сек) нажатием кнопки на устройстве. Хост выдает команды (DISPENSE) на выдачу нужного количества магнитов. Команда обрабатывается во всех состояниях кроме состояния JAMMED. == Демонстрационная утилита == Демонстрационная утилита позволяет управлять диспенсером с командной строки. Варианты запуска: Проверка доступности устройства: {{{ protodemo.exe COM1 ping }}} Проверка статуса: {{{ protodemo.exe COM1 status }}} Выдача 3-х магнитов {{{ priotodemo.exe COM1 dispense 3 }}} == API == Управление БУ с хоста осуществляется через порт USB, который эмулирует работу последовательного порта (COM-порта). Для корректной работы необходимо установить драйвер (FTDI): http://www.ftdichip.com/Drivers/VCP.htm Параметры последовательного порта: * 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) поступает без данных. == DISPENSE (0x02): команда выдачи магнитов == Данные: * 1 байт - количество магнитов к выдаче. Успешный ответ на команду (response = 0x02) поступает без данных, ошибка (response = 0x00) поступает с кодом ошибки размером 1 байт в блоке данных. == STATUS (0x03): текущее состояние устройства == Без данных, запрашивает текущее состояние устройства. В ответе (response = 0x01) в блоке данных последовательно возвращаются: * 1 байт: статус устройства (0x00 — инициализация, 0x01 — готов к работе, 0x02 — в процессе выдачи, 0x03 - фатальная ошибка JAMMED) * 1 байт: количество магнитов, ожидающих выдачи * 1 байт: состояние датчика нижнего уровня стека магнитов (0x00 - магнитов достаточно, 0x01 - уровень низкий)