Узлы Dynamic Driver
Чтобы U-Logic управляла устройством через драйвер, в программе собирается цепочка из узлов (блоков программы): подключение (Device Connection), device - command и device - response - listener. Что такое драйвер, подключение и транспорт и как они связаны — на странице «Dynamic Driver»; здесь — порядок действий и окна этих узлов.
Подключение и транспорты — узлы конфигурации: их нет в палитре, а на холсте они не видны. Создаются они из окон device - command и device - response - listener (кнопка «+» рядом с полем «Соединение»). Править их можно и оттуда (кнопка с карандашом), и во вкладке боковой панели «Узлы конфигураций». Один и тот же узел подключения выбирают и в device - command, и в device - response - listener: так ответ приходит «обратно» к тому же устройству, которому ушла команда. Ещё пять узлов проверяют транспорт напрямую, без драйвера: TCP Test, UDP Test, HTTP Test, SSH Test, Telnet Test.
Подписи полей даны так, как они показаны в окне: часть подписей в окне английская, их здесь не переводим. Примеры взяты с учебных подключений «Демо: …».
По шагам: подключить устройство и отправить команду
Зачем. Окна узлов описаны ниже по отдельности, а работать приходится цепочкой. Здесь — весь путь от пустой рабочей области до ответа устройства. Заранее нужны драйвер устройства (готовый или сохранённый в редакторе драйверов) и адрес с портом устройства.
В палитре слева, в категории «Dynamic Driver», найдите
device - commandи перетащите его на рабочую область.Дважды щёлкните узел. Рядом с полем «Соединение» нажмите «+» — откроется окно подключения (Device Connection).
В списке «Драйвер» выберите драйвер. Под списком появится его карточка. Если нужного драйвера нет, откройте окно заново после сохранения драйвера в редакторе.
В списке «Транспорт» выберите способ связи, например «TCP».
Рядом с полем «TCP Config» (подпись зависит от транспорта) нажмите «+». В открывшемся окне (настройки транспорта) впишите «Хост» и «Порт» устройства. В окне UDP адрес устройства вписывается в «Исходящий IP». Нажмите «Добавить».
В окне подключения нажмите «Добавить». Подключение создано и выбрано в поле «Соединение».
В списке «Команда» выберите команду, при необходимости заполните «Параметры команды» и нажмите «Готово» (окно узла).
Перетащите на рабочую область
device - response - listenerи откройте его. В «Соединение» выберите то же подключение. В таблице «Типы ответов» отметьте нужные ответы и назначьте им выходы. Нажмите «Готово» (окно узла).Добавьте узлы
injectиdebug:injectсоедините со входомdevice - command,debug— с выходомdevice - response - listener, на который назначен ответ.Нажмите «Развернуть», затем кнопку слева от
inject.
Что вы увидите. Под device - command статус: сначала «IDLE», затем «Подключено». Когда устройство ответит, в боковой панели отладки появится сообщение с разобранным ответом (тип ответа — в msg.payload.type). Если вместо «Подключено» написано «Отключено» или текст ошибки, проверьте «Хост» и «Порт» и то, что у транспорта включено «Автоподключение».
Частые ошибки. Узлы привязаны к разным подключениям; после правки не нажато «Развернуть»; ответ ищут на выходе device - command. Полный список — в разделах про каждый узел ниже.
Device Connection: подключение драйвера к транспорту
Зачем. Одному драйверу нужен адрес, по которому он «говорит» с устройством. Подключение хранит эту пару: какой драйвер и каким способом связи. Все узлы, которые ссылаются на одно подключение, работают с одним и тем же устройством.
Чтобы открыть окно, в device - command или device - response - listener нажмите «+» рядом с полем «Соединение» (новое подключение) или кнопку с карандашом (правка выбранного).
Окно Device Connection «Демо: звуковой процессор»: 1 — «Драйвер», 2 — «Транспорт», 3 — «Telnet Config», 4 — «Параметры драйвера», 5 — «Keep-Alive», 6 — «Driver Debug»
«Имя» — название подключения; по нему его выбирают в других узлах. Пишите, что за устройство: «Матрица в зале 1». Остальные поля сверху вниз:
«Драйвер» — список драйверов контроллера. После выбора под списком появляется карточка: название, производитель, версия и описание драйвера.
«Транспорт» — способ связи: TCP (по умолчанию), SSH, UDP, Telnet, HTTP, Local (loopback), RS232 (Embedded), IR (Embedded), Embedded (GPIO), WebSocket. Подробно — в разделе «Транспорты» ниже.
Поле под «Транспортом» меняет подпись в зависимости от выбора: «TCP Config», «Telnet Config», «WS Config» и так далее. В нём выбирается готовая настройка транспорта; кнопка с карандашом открывает её окно, кнопка «+» создаёт новую. Адрес и порт устройства задаются именно там, а не в подключении.
«Параметры драйвера» — значения, которые драйвер просит ввести: например, номер устройства или пароль. Каждая строка — «Имя» и «Значение»; значение может быть строкой, числом, логическим значением или взято из памяти программы (
global,flow, переменная средыenv). Кнопка «добавить» добавляет строку. При выборе драйвера в список подставляются параметры, которые он объявил, вместе со значениями по умолчанию. У драйвера на снимке параметров нет, поэтому список пуст. Откуда драйвер берёт параметры — на странице «Как написать драйвер».«Keep-Alive» («Периодически проверять соединение») — флаг, по умолчанию выключен. Когда он включён, под ним появляется «Интервал Keep-Alive» (по умолчанию 30, не меньше 1) в секундах. Что именно отправляется при проверке, решает драйвер; если драйвер проверку не предусматривает, флаг ничего не отправляет. Подробнее — «Расширенные возможности».
«Driver Debug» («Логировать все команды и ответы») — флаг, по умолчанию выключен. Включайте на время наладки: так проще увидеть, что именно ушло на устройство и что оно вернуло.
Что вы увидите. После «Обновить» (в новом подключении — «Добавить») подключение появляется в списках «Соединение» узлов команды и ответов. Статус подключения показывают узлы, которые на него ссылаются (см. разделы ниже).
Частые ошибки.
В списке «Транспорт» выбран один тип, а настройка выбрана для другого. Поле настройки (3) относится к выбранному транспорту: сменили транспорт — выберите настройку заново.
Не нажали «Развернуть» после правки: узлы продолжают работать со старым подключением.
Одно подключение создали для двух разных устройств. Подключение — это одно устройство; для второго создайте отдельное.
Транспорты: как связаться с устройством
Настройка транспорта описывает, как именно контроллер связывается с устройством: адрес и порт, учётные данные, делимитер ответов. Она создаётся из окна подключения (поле под «Транспортом», кнопка «+»). Окно открывается поверх окна подключения и шире него.
Транспорт |
Для чего |
Главные поля |
|---|---|---|
устройства с обменом по сетевому порту: матрицы, процессоры, проекторы |
«Хост», «Порт», «Возвращать», «Делимитер», «Использовать TLS» |
|
устройства, которые принимают и отправляют пакеты без соединения |
«Внешний порт», «Локальный порт», «Формат данных», «Исходящий IP» |
|
устройства и сервисы с веб-интерфейсом (HTTP/HTTPS) |
«Метод», «Сервер», «Аутентификация», «Заголовки» |
|
устройства с консолью Telnet, в том числе с входом по логину и паролю |
«Хост», «Порт», «Логин», «Пароль», выражения для входа |
|
устройства с защищённой консолью |
«Хост», «Порт», «Логин», «Пароль», «Ключ» |
|
проверка драйвера без устройства: всё, что драйвер отправил, возвращается к нему |
только «Название» |
|
последовательный порт встроенного контроллера (RS232, RS485, RS422) |
«Порт», «Mode», «Baud Rate», «Parity» |
|
инфракрасный порт встроенного контроллера |
«IR Порт», «Контроллер» |
|
реле и входы встроенного контроллера |
только «Название» |
|
устройства и сервисы с постоянным соединением WebSocket |
«URL», «Subprotocol», «Reconnect (мс)», «Heartbeat (мс)» |
Что общего у разных транспортов:
«Имя» или «Название» — подпись настройки в списках. В окнах UDP, TCP, Local, RS232, IR, Embedded и WebSocket поле называется «Название», в Telnet, SSH и HTTP — «Имя».
Кнопка «Apply driver defaults» (вверху справа, видна не всегда) записывает в поля значения, которые драйвер считает правильными для своего устройства: порт, делимитер и так далее. Она видна, только если драйвер описал такие значения для выбранного транспорта; нажатие перезаписывает то, что было в полях. Как драйвер их задаёт — «Как написать драйвер».
Поля «Хост», «Порт», «Логин», «Пароль» (и «Сервер» у HTTP) принимают текст и значения других типов. Тип выбирается слева от поля, например
flow,globalили переменная средыenv; тогда в поле пишется имя переменной. Подробнее — в разделе «Доступ к контексту U-Logic».«Debug» («Отладочные сообщения») — флаг, по умолчанию выключен: транспорт пишет в отладку служебные сообщения. Включайте на время наладки.
«Автоподключение» (у Telnet и SSH — «Авто-подключение», «Подключаться при старте») — подключаться при запуске программы и после обрыва. У TCP включено по умолчанию.
«Интервал переподкл. (мс)» (по умолчанию 5000) — пауза между попытками подключиться после обрыва.
Пять транспортов (TCP, UDP, Telnet, SSH и RS232) получают от устройства поток байтов, который нужно разрезать на отдельные сообщения. Для этого у них одни и те же четыре поля (у RS232 таймаут называется просто «Таймаут (мс)»), ниже они описаны один раз:
«Делимитер» — признак конца сообщения, например
\r\nили\x0D\x0A. Подсказка окна: «Разделитель сообщений (пусто = отключено)». Если поле пусто, данные передаются драйверу по мере прихода.«Таймаут делимитера (мс)» — через сколько миллисекунд передать драйверу неполное сообщение, если делимитера ещё нет. 0 (по умолчанию) — не передавать неполные. Для устройств без делимитера подойдёт небольшое значение, но тогда драйвер может получить обрывок ответа (см. «Ответы устройства»).
«Сохранять делимитер» — оставлять ли делимитер в конце сообщения. По умолчанию выключено.
«Размер буфера (KB)» — сколько данных транспорт накапливает, пока не найден делимитер (по умолчанию 64, от 1 до 10240).
Как делимитер и неполные ответы связаны с разбором ответов в коде драйвера — на странице «Ответы устройства».
TCP
Самый частый транспорт: устройство слушает порт, контроллер подключается к нему и держит соединение.
Окно TCP-настройки: 1 — «Хост», 2 — «Порт», 3 — «Возвращать», 4 — «Делимитер», 5 — «Автоподключение», 6 — «Использовать TLS»
«Хост» — адрес устройства. По умолчанию
localhost; впишите адрес устройства в сети.«Порт» — порт устройства. Поле обязательное: пока оно пусто, оно подсвечено красным.
«Возвращать» — в каком виде транспорт отдаёт драйверу полученные данные: «Байты (Buffer)» (по умолчанию) — для протоколов, где обмен идёт байтами; «Строка» — для текстовых протоколов. Выбирайте то, чего ждёт драйвер: оно описано в его документации.
«Делимитер» — признак конца сообщения (см. выше).
«Автоподключение» («Автоматически подключаться при запуске») — по умолчанию включено.
«Использовать TLS» — шифровать соединение; при включении появляется выбор настройки TLS.
Ещё в окне: «Название» (вверху), «Интервал переподкл. (мс)», «Таймаут делимитера (мс)», «Сохранять делимитер», «Размер буфера (KB)», «Debug».
UDP
UDP не устанавливает соединения: контроллер отправляет пакеты на «Внешний порт» устройства и принимает ответы на «Локальный порт». Адрес устройства вписывается в поле «Исходящий IP».
Окно UDP-настройки: 1 — «Внешний порт», 2 — «Локальный порт», 3 — «Тип соединения», 4 — «IP версия», 5 — «Формат данных», 6 — «Исходящий IP»
«Внешний порт» — порт, на который контроллер отправляет пакеты устройству.
«Локальный порт» — порт, на котором контроллер ждёт ответ. Варианты: «Случайный (сервер отвечает на source port)», «Такой же как внешний (симметричный UDP)» (по умолчанию), «Указать вручную» (появляется поле «Номер локального порта»). Если устройство отвечает на тот порт, с которого пришёл запрос, подойдёт «Случайный»; если оно отвечает на фиксированный порт, выберите «Такой же как внешний» или укажите его вручную.
«Тип соединения» — в списке доступен только «Unicast» (пакеты одному устройству).
«IP версия» — «IPv4» или «IPv6».
«Формат данных» — как данные передаются драйверу: «Строка (UTF8)» (по умолчанию), «Base64» или «Hex».
«Исходящий IP» — адрес устройства, которому контроллер отправляет пакеты; ответы принимаются только с этого адреса. Если поле пусто, пакеты уходят широковещательно.
Ещё в окне: «Название» (вверху), «Делимитер» и три связанных с ним поля, «Автоподключение», «Debug».
HTTP
HTTP подходит для устройств и сервисов с веб-интерфейсом. Каждая команда драйвера превращается в запрос, а ответ возвращается драйверу.
Окно HTTP-настройки: 1 — «Метод», 2 — «Сервер», 3 — «Использовать TLS», 4 — «Аутентификация», 5 — «Тайм-аут запроса (мс)», 6 — «Возвращать»
«Метод» — «GET» (по умолчанию), «POST», «PUT», «DELETE», «HEAD» или «Установить через» (метод берётся из драйвера или сообщения).
«Сервер» — базовый адрес устройства вместе с протоколом, например
http://192.168.1.1. Протокол (http://илиhttps://) указывайте обязательно.«Использовать TLS» — шифровать соединение (HTTPS); при включении появляется выбор настройки TLS.
«Аутентификация» — при включении выбирается тип («Базовая», «Digest», «Bearer») и вводятся имя и пароль (для Bearer — токен).
«Тайм-аут запроса (мс)» — сколько ждать ответ; если поле пусто, используется значение по умолчанию.
«Возвращать» — в каком виде возвращать ответ: «UTF-8» (по умолчанию), «Бинарные данные» или «JSON».
Ещё в окне:
«Полезная нагрузка» (для GET): «Игнорировать» (по умолчанию), «Добавить в запрос» или «Добавить в тело».
«Сохранять соединение», «Отправлять ошибки», «Небезопасный HTTP парсер» (разрешает нестандартные ответы).
«Проверять SSL сертификаты» (включено; если выключить, разрешаются самоподписанные сертификаты) и «Следовать переадресациям» (включено; если выключить, переадресация 301/302 запрещена).
«Заголовки» — список заголовков запроса; кнопка «добавить».
«Имя» — внизу окна.
Большинство значений (адрес, путь, заголовки) обычно задаёт драйвер; об этом — раздел «HTTP-драйверы» на странице «Расширенные возможности».
Telnet
Telnet — консоль устройства по сети. Если устройство требует вход, транспорт может выполнить его сам: достаточно заполнить «Логин» и «Пароль».
Окно Telnet-настройки: 1 — «Хост», 2 — «Порт», 3 — «Логин», 4 — «Выражение для shell prompt», 5 — «Делимитер», 6 — «Авто-подключение»
«Хост» — адрес устройства.
«Порт» — порт Telnet; обычно 23.
«Логин» — имя пользователя. Следом идёт «Пароль».
«Выражение для shell prompt» — шаблон приглашения командной строки, по которому транспорт понимает, что вход завершён. Если устройство не показывает приглашения (аудио- и видеооборудование без интерактивной оболочки), оставьте поле пустым: ожидание приглашения тогда пропускается.
«Делимитер» — признак конца сообщения (см. выше).
«Авто-подключение» («Подключаться при старте»).
Ещё в окне: «Имя», «Пароль», «Выражение для логина» и «Выражение для пароля» (шаблоны, по которым транспорт узнаёт запросы логина и пароля; по умолчанию [Ll]ogin[: ]*$ и [Pp]assword[: ]*$), «Интервал переподкл. (мс)», «Автодобавлять окончание команды» (если выключено, команда отправляется как есть, без добавления \r\n), «Таймаут делимитера (мс)», «Сохранять делимитер», «Размер буфера (KB)», «Debug».
Предупреждение
Вход должен выполнять кто-то один: транспорт (когда заполнены «Логин» и «Пароль») или драйвер. Если вход настроен и там, и там, он выполнится дважды, и устройство может разорвать сеанс. Подробно — в разделе «Вход на устройство» страницы «Расширенные возможности».
SSH
SSH — защищённая консоль. Работает как Telnet, но вход можно выполнить по паролю или по ключу.
Окно SSH-настройки: 1 — «Хост», 2 — «Порт», 3 — «Логин», 4 — «Ключ», 5 — «Shell prompt regex», 6 — «Делимитер»
«Хост» — адрес устройства.
«Порт» — порт SSH; обычно 22.
«Логин» — имя пользователя. Следом идёт «Пароль».
«Ключ» — имя файла ключа из папки
uploadsконтроллера (в подсказке окна — «my_key»). Если указан ключ, вход идёт по нему вместо пароля. Как положить файл ключа вuploads— на странице «Порты» (SFTP пользователя, порт 22022). Если ключ защищён паролем, впишите его в поле «Passphrase».«Shell prompt regex» — шаблон приглашения командной строки после входа. Если поле оставить пустым, приглашение не ждут: после входа транспорт 3 секунды следит только за ошибками подключения и входа, и если их нет, считает соединение готовым. Для устройств с длинным приветствием, которое заканчивается символом
>, уточните шаблон.«Делимитер» — признак конца сообщения (по умолчанию
\n).
Ещё в окне: «Имя», «Пароль», «Passphrase» («Пароль для расшифровки ключа (если есть)»), «Интервал переподкл. (мс)», «Автодобавлять окончание команды» (если выключено, команда отправляется как есть, без добавления \n), «Таймаут делимитера (мс)», «Сохранять делимитер», «Размер буфера (KB)», «Авто-подключение», «Debug».
Предупреждение
Как и у Telnet, вход должен выполнять только транспорт или только драйвер: см. предупреждение выше.
Local (loopback)
Local не выходит в сеть: всё, что драйвер отправил, сразу возвращается к нему как полученное. Он нужен, чтобы проверить драйвер без устройства: адрес и порт не нужны. Пример — на странице «Примеры драйверов».
Окно Local-настройки: 1 — «Название», 2 — «Debug»
«Название» — подпись настройки в списках.
«Debug» («Отладочные сообщения») — флаг для наладки.
Других полей в окне нет.
RS232
Транспорт для последовательного порта встроенного контроллера. Параметры порта должны совпадать с параметрами устройства.
Окно RS232-настройки: 1 — «Порт», 2 — «Mode», 3 — «Baud Rate», 4 — «Parity», 5 — «Делимитер», 6 — «Автоподключение»
«Порт» — порт контроллера, к которому подключено устройство: от «A (COM1)» до «H (COM8)».
«Mode» — режим порта: «RS232» (по умолчанию в окне), «RS485» или «RS422».
«Baud Rate» — скорость обмена: 9600 (по умолчанию), 19200, 38400, 57600 или 115200.
«Parity» — контроль чётности: «None» (по умолчанию), «Even» или «Odd».
«Делимитер» — признак конца сообщения.
«Автоподключение» — подключаться при запуске (по умолчанию включено).
Ещё в окне: «Название», «Data Bits» (8 или 7), «Stop Bits» (1 или 2), «Таймаут (мс)», «Сохранять делимитер», «Размер буфера (KB)», «Debug».
IR
Транспорт для инфракрасного порта: команды драйвера отправляются как ИК-сигналы. В том же окне блок «IR Learning» позволяет обучить контроллер кодам пульта.
Окно IR-настройки: 1 — «IR Порт», 2 — «Контроллер», 3 — «Автоподключение»
«IR Порт» — порт, к которому подключён излучатель: от «A (IR1)» до «H (IR8)».
«Контроллер» — какой контроллер отправляет сигнал: встроенный (по умолчанию) или удалённый; для удалённого появляется поле «IP адрес».
«Автоподключение» — подключаться при запуске (по умолчанию включено).
Ещё в окне: «Название», «Debug» и блок «IR Learning». В нём выбирают драйвер («– Новый драйвер –») или вводят имя нового. Затем вписывают имя команды (например, power_on), нажимают «Обучить» и сохраняют драйвер кнопкой «Сохранить драйвер». Корзина удаляет драйвер. Коды можно загрузить из файла: перетащите файл в поле «Перетащите .sir, .eir или .lirc файл сюда» или нажмите «или нажмите для выбора».
Embedded (GPIO)
Транспорт для реле и входов встроенного контроллера. Адрес задавать не нужно.
Окно Embedded-настройки: 1 — «Название», 2 — «Автоподключение», 3 — «Debug»
«Название» — подпись настройки в списках (по умолчанию «Embedded Controller»).
«Автоподключение» — подключаться при запуске (по умолчанию включено).
«Debug» — отладочные сообщения.
WebSocket
Постоянное двустороннее соединение с устройством или сервисом, который поддерживает WebSocket.
Окно WebSocket-настройки: 1 — «URL», 2 — «Subprotocol», 3 — «Reconnect (мс)», 4 — «Heartbeat (мс)», 5 — «Headers (JSON)», 6 — «Автоподключение»
«URL» — адрес вида
ws://адрес:порт; для шифрованного соединения —wss://…, тогда ниже появляется выбор настройки TLS.«Subprotocol» — подпротокол, если устройство его требует; поле необязательное.
«Reconnect (мс)» — пауза между попытками подключиться после обрыва (по умолчанию 3000).
«Heartbeat (мс)» — как часто проверять соединение служебными сообщениями; 0 (по умолчанию) — не проверять.
«Headers (JSON)» — дополнительные заголовки при подключении, например
{"Authorization": "Bearer ..."}.«Автоподключение» — подключаться при запуске (по умолчанию включено).
Ещё в окне: «Название» и «Debug».
Что вы увидите после настройки любого транспорта. После «Обновить» (в новой настройке — «Добавить») окно закрывается, настройка выбрана в поле под «Транспортом», а после «Развернуть» контроллер пытается подключиться. Состояние показывают узлы device - command и device - response - listener (статус под узлом). Проверить транспорт отдельно от драйвера можно тестовыми узлами (раздел «Тестовые узлы» ниже).
Частые ошибки.
Порт и адрес указаны для другого устройства или пусты: подключение не устанавливается, узел показывает «Отключено».
В UDP в «Исходящий IP» вписан адрес контроллера, а не устройства: пакеты уходят не туда, а ответы не принимаются.
«Возвращать» в TCP выбран «Строка», а драйвер ждёт байты (или наоборот): ответы не распознаются.
У устройства без делимитера не задан «Таймаут делимитера»: транспорт ждёт конец сообщения и ничего не отдаёт драйверу.
Для SSH в «Ключ» вписан путь вместо имени файла: достаточно имени файла из папки
uploads.Включены вход транспорта и вход драйвера одновременно — см. предупреждение у Telnet.
device - command: отправить команду
Зачем. Узел отправляет устройству команду из драйвера: «подать вход 2 на выход 1», «выключить звук». Какие команды есть и какие у них параметры, узел узнаёт у драйвера: вручную писать их не нужно. Узел находится в палитре, в категории «Dynamic Driver»; у него один вход и два выхода.
Окно device - command «Матрица: вход на экран»: 1 — «Имя», 2 — «Соединение», 3 — «Команда», 4 — «Параметры команды»
«Имя» — подпись узла на холсте. Пишите, что узел делает: «Матрица: вход на экран».
«Соединение» — выбор подключения (Device Connection); рядом кнопки правки и «+». Драйвер берётся из выбранного подключения.
«Команда» — список команд драйвера. Список появляется после выбора соединения. Под ним показаны «Описание» команды и «Возвращает» (что команда возвращает; у многих команд «Нет информации о возвращаемом значении»).
«Параметры команды» — поле на каждый параметр команды; подпись поля — имя параметра, а подсказка объясняет, что вводить: например, «input» — «Номер канала входа (0 — отключить выход)», «output» — «Номер канала выхода». Логические параметры выбираются из «True»/«False», перечисления — из списка. Если у команды нет параметров, показано «Нет параметров».
Внизу окна — кнопка справки (книга) и переключатель «Включено».
Как отправить. Узел срабатывает, когда на вход приходит любое сообщение: команда отправляется с параметрами из окна. Параметры и саму команду можно задать и сообщением:
Свойство сообщения |
Что делает |
|---|---|
|
заменяет команду, выбранную в окне |
|
объект с параметрами; объединяется с параметрами из окна, значения из сообщения важнее |
|
|
|
не используется для команды; уходит на второй выход без изменений |
Пример: сообщение {"command": "route", "parameters": {"input": 3}} отправит команду route с входом 3, а «output» возьмёт из окна.
Выходы.
Статус соединения:
msg.payload.status—connected,disconnectedилиerror;msg.payload.error— описание ошибки;msg.payload.device— имя соединения.Сквозной: сообщение, которое пришло на вход, без
msg.commandиmsg.parameters. Так можно запускать следующий шаг после отправки.
Ответ устройства из этого узла не выходит: его принимает device - response - listener.
Пример цепочки. Узел inject запускает отправку, device - command отправляет команду, к двум выходам подключены debug.
Цепочка примера: inject «Вход 2 на экран» → device - command «Матрица: вход на экран» → debug «Статус соединения» (выход 1) и debug «Команда ушла» (выход 2); ниже device - response - listener «Матрица: ответы» → debug «Ответ матрицы»
Что вы увидите. После «Развернуть» нажмите кнопку слева от inject. Под узлом device - command появится статус соединения: сразу после «Развернуть» — «IDLE», затем «Подключено», «Отключено», «Статус: <код> - <текст>» или текст ошибки. В debug «Статус соединения» придёт состояние соединения, в debug «Команда ушла» — сообщение из inject. Ответ матрицы придёт в debug «Ответ матрицы» (см. следующий раздел). Если «Соединение» не выбрано, под узлом написано «Не настроено соединение» (красным), а если у подключения не выбран транспорт — «Не настроен транспорт». Команды, которые часто нужны панели, узел получает от кнопок интерфейса: см. «Команды устройствам и ответы».
Частые ошибки.
Список «Команда» пуст: не выбрано «Соединение» или у драйвера нет команд.
Ожидали увидеть ответ на выходе узла. Ответ приходит только в
device - response - listenerтого же подключения.msg.connectionприходит вместе с командой: команда не отправится, узел только подключится или отключится.
device - response - listener: принять ответы
Зачем. Устройство отвечает не сразу и не только на ваши команды: оно сообщает о событиях сам, а ответы приходят вразнобой. Узел принимает ответы драйвера и раздаёт их по выходам по типам: например, «ответ на коммутацию» идёт на один выход, «ошибка» — на другой. Дальше их разбирают другие узлы цепочки. Узел в палитре, категория «Dynamic Driver»; вход обычно не используется, число выходов задаётся в окне.
Окно device - response - listener «Матрица: ответы»: 1 — «Соединение», 2 — «Выходы» («Количество выходов»), 3 — флажок типа ответа route, 4 — «Номер выхода» для route
«Соединение» — то же подключение, что у
device - command: ответы придут от того устройства, которому отправляются команды.«Выходы» — число выходов узла («Количество выходов»), от 1 до 20. Выходы появятся на узле после «Готово».
Флажок в строке типа ответа. В таблице «Типы ответов» перечислены ответы, которые знает драйвер. Типы сгруппированы по категориям (на снимке —
routingиdiagnostic); у каждого — название, «Описание» и «Номер выхода».«Номер выхода» — куда отправлять ответ этого типа: «Нет» (по умолчанию) или «Выход 1», «Выход 2» и далее — до числа выходов из пункта 2.
Если столбец «Номер выхода» не виден, расширьте окно, потянув за его левый край.
Типы ответов
Таблица «Типы ответов» состоит из колонок «Тип ответа», «Описание» и «Номер выхода». Для драйвера на снимке типы такие:
Тип |
Описание в окне |
|---|---|
|
коммутация: отправлена (ack:false) или подтверждена устройством (ack:true) |
|
устройство отклонило коммутацию (RES не равен 0) |
|
на коммутацию не пришёл ответ за время ожидания |
|
ответ устройства на команду, отличную от коммутации по номерам |
|
нераспознанный текст от устройства |
|
команда не отправлена: неверные параметры или переполнена очередь |
Названия типов и описания приходят из драйвера, поэтому у другого драйвера список будет другим. Пока соединение не выбрано, в таблице написано «Выберите соединение». Если драйвер не описал типов ответов, показано «Нет доступных типов ответов».
Как пользоваться таблицей:
Выберите «Соединение».
Задайте число выходов.
Для нужных типов отметьте флажок и выберите «Номер выхода»: каждому типу — свой выход, например
route— «Выход 2»,routeError— «Выход 3».Нажмите «Готово» и «Развернуть».
Под таблицей показываются счётчики «Выбрано ответов» и «Настроено выходов». Если несколько типов назначены на один выход, окно предупреждает: «Внимание! Несколько типов ответов назначены на один выход» и перечисляет типы. Если так и задумано — оставьте; иначе назначьте типам разные выходы.
Что приходит на выход. Сообщение уходит только на один выход, назначенный типу; на остальных выходах сообщения нет:
msg.payload— разобранный ответ; тип — вmsg.payload.type;msg.device— сведения о подключении: имя, драйвер, транспорт, адрес и порт устройства;msg.originalMsg— исходное сообщение, которым была отправлена команда (если известно).
Если типу выход не назначен («Нет»), его сообщения приходят на первый выход.
Что вы увидите. Статус под узлом: «Подключено», «Отключено» или «Ошибка». В примере выше route назначен на «Выход 2», и debug «Ответ матрицы» подключён ко второму выходу: после команды в нём появляется разобранный ответ коммутации.
Как драйвер формирует типы и поля ответов — на странице «Ответы устройства». Как ответы используются в программе (фильтры, обновление элементов панели) — в разделе «device - response - listener» страницы «Команды устройствам и ответы».
Частые ошибки.
Ответы приходят все на первый выход: типам не назначены выходы («Нет») или не выбран нужный тип.
Уменьшили число выходов, а в таблице остались назначения на несуществующие выходы: такие ответы приходят на первый выход. Проверьте колонку «Номер выхода».
Узел привязан к другому подключению, чем
device - command: ответы приходят от другого устройства или не приходят совсем.Не нажали «Развернуть»: узел продолжает раздавать ответы по старой таблице.
Тестовые узлы: проверить транспорт без драйвера
Зачем. Прежде чем искать ошибку в драйвере, проверьте, что связь с устройством вообще работает: что устройство слышит контроллер и что именно оно отвечает. Тестовые узлы TCP Test, UDP Test, HTTP Test, SSH Test, Telnet Test отправляют данные напрямую через настройку транспорта, минуя драйвер, и показывают всё, что пришло в ответ. Они находятся в палитре, в категории «network»; у каждого один вход и один выход.
Все пять узлов устроены одинаково: окно содержит подпись «Имя», выбор настройки транспорта и формат вывода. Поэтому ниже один узел описан подробно, а различия — в таблице.
Окно TCP Test: 1 — «Имя», 2 — «TCP Config», 3 — «Формат вывода», 4 — «Сырые данные»
«Имя» — подпись узла на холсте.
«TCP Config» — выбор настройки транспорта, которую нужно проверить; рядом кнопки правки и «+». Для других узлов поле называется «UDP Config», «HTTP Config», «SSH Config», «Telnet Config».
«Формат вывода» — в каком виде узел отдаёт полученные данные в
msg.payload: «Строка (по умолчанию)», «JSON (если возможно)» или «HEX». Действует уSSH TestиHTTP Test. УTCP Test,UDP TestиTelnet Testвmsg.payloadприходят данные такими, какими их отдал транспорт, и формат на них не влияет.«Сырые данные» — флажок (включён по умолчанию): данные передаются необработанными, без преобразования по «Формату вывода». Есть только у TCP, UDP и Telnet; необработанные данные приходят и в
msg.rawData.
Окна остальных узлов — на снимках ниже; на них те же поля.
Окно UDP Test: 1 — «Имя», 2 — «UDP Config», 3 — «Формат вывода», 4 — «Сырые данные»
Окно HTTP Test: 1 — «Имя», 2 — «HTTP Config», 3 — «Формат вывода»
Окно SSH Test: 1 — «Имя», 2 — «SSH Config», 3 — «Формат вывода»
Окно Telnet Test: 1 — «Имя», 2 — «Telnet Config», 3 — «Формат вывода», 4 — «Сырые данные»
Что отличается:
Узел |
Поля окна |
Что отправляет |
Что приходит в |
Что ещё в сообщении на выходе |
|---|---|---|---|---|
|
«TCP Config», «Формат вывода», «Сырые данные» |
данные для устройства; объект уходит как JSON-строка |
|
|
|
«UDP Config», «Формат вывода», «Сырые данные» |
пакет UDP |
|
|
|
«HTTP Config», «Формат вывода» |
тело запроса; метод, адрес, путь и заголовки можно передать в |
|
|
|
«SSH Config», «Формат вывода» |
команда или данные для консоли |
|
|
|
«Telnet Config», «Формат вывода», «Сырые данные» |
команда или данные для консоли |
|
|
Пример цепочки. Узел inject отправляет строку STATUS?, TCP Test передаёт её устройству, debug показывает ответ.
Цепочка примера: inject «Отправить запрос» (строка STATUS?) → TCP Test → debug «Что ответило»
Что вы увидите. После «Развернуть» нажмите кнопку слева от inject. В боковой панели отладки появится сообщение: в msg.payload — ответ устройства (у TCP Test — в том виде, в каком его отдал транспорт, см. «Сырые данные» выше), в msg.topic — tcp_data. Сообщения с tcp_event приходят при подключении, отключении и ошибках. Если нет ни ответа, ни событий, транспорт не подключён: проверьте адрес, порт и сеть.
Частые ошибки.
Ждёте, что узел вызовет команду драйвера. Тестовые узлы работают без драйвера: они отправляют ровно то, что в
msg.payload, и не добавляют окончание команды, если его не добавляет сам транспорт (флаг «Автодобавлять окончание команды»).Выбрана настройка другого типа: у каждого узла выбор только своего транспорта (в
TCP Test— «TCP Config»).Устройство принимает только одно соединение, а им уже пользуется драйвер: тест не подключится. Проверяйте транспорт, пока драйвер не использует это устройство.
Данные ушли, а ответ пустой или непонятный: у
SSH TestиHTTP Testсмените «Формат вывода» на «HEX» — так видны управляющие байты. УTCP Test,UDP TestиTelnet Testформат не действует: смотритеmsg.rawDataи в настройке транспорта проверьте «Возвращать» (TCP) или «Формат данных» (UDP).
Что дальше
Как собрать цепочку целиком (кнопка панели → команда → ответ → элемент панели) — «Команды устройствам и ответы».
Как устроен драйвер и как написать свой — «Как написать драйвер», «Ответы устройства», «Расширенные возможности».
Как создавать и править драйверы в редакторе — «Редактор драйверов».