Управление платами удаленного ввода вывода
Плата удаленного ввода вывода подключается к головному контроллеру по RS-232, отправка сообщений осуществляется по транспортному протоколу рассмотренному в отдельной статье.
Данная статья описывает порядок запросов и команд, обрабатываемых платой.
Упаковка данных
Для упаковки данных используется MessagePack. Ниже форматы запросов и ответов описаны в JSON для наглядности.
Тип запроса/ответа
Все Запросы/ответы имеют поле t: uint16
. Старший взведенный бит означает что тело содержит ответ на соответствующий запрос. Тип ответа вычисляется как 0x8000 XOR (тип запроса)
Версия прошивки
Запрос отправляется головным контроллером с целью определения версии прошивки и/или наличия связи и готовности устройства.
Запрос:
{ "t": 0x0000 // uint16, тип запроса/ответа }
Ответ (отправляется вместе с ACK):
{ "t": 0x8000, // uint16, тип запроса/ответа "v": "1.0.0", // ASCII строка с версией }
Замыкание реле (выхода)
Запрос отправляется головным контроллером.
Запрос:
{ "t": 0x0001, // uint16, тип запроса/ответа "n": 0x00, // uint8, номер выхода (начиная с нуля) "ton": 0x00000000, // uint32, длительность замыкания, в миллисекундах "toff": 0x00000000, // uint32, длительность размыкания после замыкания, в миллисекундах "cimp": 0x00, // uint8, число импульсов (повторов циклов замыкания/размыкания) }
Ответ (отправляется вместе с ACK):
{ "t": 0x8001 // uint16, тип запроса/ответа }
По завершении управления сигналов не отправляется.
Получение сигнала на входе
Отправляется платой
Запрос:
{ "t": 0x0002, // uint16, тип запроса/ответа "n": 0x00, // uint8, номер входа }
Ответ (отправляется вместе с ACK):
{ "t": 0x8002 // uint16, тип запроса/ответа }
Настройка входов
Отправляется головным контроллером
Запрос:
{ "t": 0x0002, // uint16, тип запроса/ответа "n": 0x00, // uint8, номер входа "v": 0x00, // uint8, 0 - срабатывает по замыканию // 1 - срабатывает по размыканию }
Ответ (отправляется вместе с ACK):
{ "t": 0x8002 // uint16, тип запроса/ответа }
Опрос входов
Запрос отправляется головным контроллером с целью определения состояния входов устройства.
Запрос:
{ "t": 0x0003 // uint16, тип запроса/ответа }
Ответ (отправляется вместе с ACK):
{ "t": 0x8003, // uint16, тип запроса/ответа "n": 0b00000000, // uint8, битовая маска с состоянием входов - 1 сигнальное состояние - 0 нет // 0b00000101 - говорит о наличии сигнала на 1 и 3 входах }