Узлы «Общие»

В категорию «общие» палитры U-Logic (редактор программы управления) входят узлы, которые нужны в любой программе: запускать её (inject), показывать, что происходит (debug, status), связывать далёкие части вкладки (рабочего листа программы) без проводов (link in, link out, link call) и оставлять заметки (comment). Ещё два узла, complete и catch, ловят завершение обработки и ошибки.

Как открыть окно любого узла, как пользоваться встроенной справкой и где остальные категории — на странице «Узлы U-Logic». Примеры ниже взяты с учебных вкладок: «Первая программа» (по шагам) и «Демо-зал» (обзор). Подписи полей даны так, как они показаны в окне узла; английские подписи не переводятся.

inject: запустить программу

Зачем. Программе нужно с чего-то начаться: записать таблицы при запуске, раз в несколько секунд спросить устройство о состоянии, проверить цепочку по нажатию. Узел inject сам создаёт сообщение и отправляет его по выходу. У него нет входа: он всегда начало цепочки.

../../_images/node-inject.png

Окно узла inject «Раз в 5 с»: 1 — «Имя», 2 — свойство сообщения, 3 — «Отправить через … сек, затем», 4 — «Повторять», 5 — «каждые N сек»

Поля окна (все они на вкладке «Свойства»):

  1. «Имя» — подпись на вкладке. Пишите, что узел запускает: «При запуске», «Раз в 5 с».

  2. Список свойств сообщения: в строке — msg., имя свойства, знак «=» и значение. Здесь одно свойство, msg.payload со значением «milliseconds since epoch» (метка времени). Для каждого свойства выбирается тип значения: строка, число, логический тип, JSON, метка времени, выражение, переменная среды, msg., flow., global.. Кнопка «добавить» под списком добавляет ещё свойство. Часто содержимое не важно: inject нужен только как «пускатель» для следующего узла.

  3. Отметка «Отправить через … сек, затем» — отправить сообщение один раз после запуска программы.

  4. «Повторять» — как часто отправлять дальше: «нет», «с интервалом», «с интервалом в промежутке», «в определенное время».

  5. Параметры выбранного повтора: «каждые N сек/мин/час»; для промежутка — «каждые N мин» между двумя временами и дни недели (пн…вс); для определённого времени — время и дни недели.

Кнопка слева от узла отправляет сообщение вручную.

Пример на учебных вкладках.

  • В «Первой программе» inject «При запуске» включает «Отправить через» 1 секунду и не повторяется. Он подключён к узлу change «Карты кнопок и входов», который при запуске записывает таблицы в память программы (подробно — блок A). Одного такого сообщения достаточно: таблицы нужно записать один раз.

../../_images/flow-common-inject-start.png

Цепочка примера: inject «При запуске» → change «Карты кнопок и входов» (на снимке — группа «Старт: карты»)

  • В «Демо-зале» inject «Раз в 5 с» повторяет отправку «с интервалом» 5 секунд и начинает через 6 секунд после запуска. Он посылает кодеку запрос о состоянии звонка: кодек сам о звонке не сообщает, его приходится спрашивать (подробно — «Команды устройствам и ответы»).

../../_images/flow-common-inject-poll.png

Цепочка примера: inject «Раз в 5 с» → device - command «Кодек: состояние звонка»

Что вы увидите. После «Развернуть» нажатие кнопки слева от узла отправляет сообщение по выходу. С отметкой «Отправить через» и с повтором сообщения идут сами. Чтобы увидеть сообщение, подключите к выходу debug.

Частые ошибки.

  • Нажали кнопку слева от узла до «Развернуть» — редактор сообщит, что узел не развёрнут. Сначала нажмите «Развернуть».

  • Ждёте, что «Отправить через» сработает при нажатии кнопки. Оно срабатывает один раз при запуске программы (после «Развернуть»), а не при нажатии.

  • После правки таблицы запись в change нужно повторить: нажмите «Развернуть» и кнопку слева от inject, иначе в памяти останется старая таблица.

debug: посмотреть сообщение

Зачем. Самая частая работа с программой — выяснить, что именно пришло в сообщении: ответ устройства, событие панели, результат вычисления. debug показывает сообщение в боковой панели отладки и ничего не пересылает дальше. У него один вход и нет выходов.

../../_images/node-debug.png

Окно узла debug «Что прислал процессор»: 1 — «Имя», 2 — «Выводить», 3 — отметка «окно отладки», 4 — отметка «статус узла»

Поля окна (номера — как на снимке; в самом окне «Имя» стоит последним):

  1. «Имя» — подпись на вкладке. Для постоянных узлов пишите, что смотрите: «Что прислал кодек».

  2. «Выводить» — что показывать. По умолчанию msg.payload; «весь msg объект сообщения» — сообщение целиком (подходит, когда вы не знаете, в каком поле нужное значение); «выражение» — результат выражения, например $string(payload).

  3. В группе «В» отметка «окно отладки» — выводить в боковую панель отладки (включена по умолчанию).

  4. В той же группе отметка «статус узла (32 символа)» — показывать значение под узлом на вкладке. После включения рядом выбирается, что показывать: то, что выводит этот узел, msg., выражение или «message count» (счётчик сообщений).

Пример на учебных вкладках.

  • В «Первой программе» debug «Что прислал кодек» и «Что прислал процессор» выводят payload ответов устройств. В готовой вкладке они выключены: включите узел кнопкой справа от него, когда нужно посмотреть ответы.

../../_images/flow-common-debug-first.png

Цепочка примера: device - response listener «Звук: ответы» → debug «Что прислал процессор» (выключен: кнопка справа пустая) и → switch «Какая подписка?»

  • В «Демо-зале» debug «Что прислала панель» выводит выражение $string(payload) — событие панели одной строкой. Он тоже выключен.

../../_images/flow-common-debug-panel.png

Цепочка примера: UI - Panel in «События панели» → debug «Что прислала панель» (выключен: кнопка справа пустая)

Как подключить debug к выходу узла, развернуть и прочитать сообщение — в блоке «Как проверять: узел debug» «Первой программы».

Что вы увидите. Открыта вкладка отладки на правой боковой панели (значок «жук»). В ней строки сообщений; payload и другие поля можно развернуть. Если включена отметка «статус узла», значение видно под узлом.

Частые ошибки.

  • Сообщений нет — узел выключен кнопкой справа от него или не развёрнут. Включите узел и нажмите «Развернуть».

  • Длинное значение в статусе под узлом обрезано: там помещается 32 символа. Полное значение смотрите в боковой панели.

  • Забытые включённые debug засоряют отладку. После проверки отключите узел или удалите.

status: узнать, что узел сменил состояние

Зачем. Под многими узлами виден статус: например, device - command показывает состояние соединения. Узел status превращает смену статуса в сообщение. Программа может на неё отреагировать, например показать на панели, что связь с матрицей пропала. Входа у него нет, выход один.

../../_images/node-status.png

Окно узла status: 1 — «Получать статус», 2 — кнопка «Выберите узлы…»

Поля окна:

  1. «Получать статус» — от каких узлов: «всех узлов», «in same group» (узлы в одной группе с этим) или «выбранных узлов».

  2. Кнопка «Выберите узлы…» — открывает выбор узлов для варианта «выбранных узлов»; рядом строка поиска. В выборе показаны только узлы той же вкладки, на которой стоит status.

Ещё в окне — «Имя»: подпись на вкладке. Поле стоит внизу, под списком узлов; на снимке его нет.

Пример (на учебных вкладках status нет; добавьте его на вкладку «Первая программа», которую вы импортировали, и ничего не сохраняйте):

  1. Откройте вкладку «Первая программа». Перетащите на свободное место status и debug и соедините выход status со входом debug.

  2. В status в «Получать статус» выберите «выбранных узлов», нажмите «Выберите узлы…» и отметьте узел device - command «Матрица: подать вход».

  3. В debug выберите «весь msg объект сообщения». Нажмите «Развернуть».

  4. Проверив, удалите два добавленных узла.

../../_images/flow-common-status.png

Цепочка примера: status «Статусы узлов» → debug «Что изменилось». На снимке status следит за «всех узлов»; в примере выше — «выбранных узлов»

Что вы увидите. Каждый раз, когда device - command меняет статус (например, соединение с устройством оборвалось и восстановилось), в отладке появляется сообщение с полем msg.status: в нём fill (цвет значка), shape (форма), text (подпись под узлом) и source — какой узел сменил статус (id, type, name). На вкладке подпись под узлом status показывает, за кем он следит: при выбранных узлах — число узлов («статус: 1»), при «всех узлов» — «статус: все».

Частые ошибки.

  • Выбрали «всех узлов» и получили лавину сообщений — на вкладке много узлов, у каждого меняется статус. Выберите нужные.

  • Не находите нужный узел в списке «Выберите узлы…» — он на другой вкладке. status следит только за узлами своей вкладки; поставьте его туда же, где нужный узел.

  • Ждёте сообщения от узла, у которого нет статуса: меняться нечему.

Короткие узлы

Три узла с небольшим числом полей. Все поля узла — во встроенной справке: откройте вкладку «справка» боковой панели (значок книги) и выберите узел.

Узел

Что делает

complete

сообщает, что выбранные узлы закончили обработку сообщения

catch

ловит ошибки узлов и выдаёт сообщение с описанием

comment

заметка на вкладке; ничего не делает

Так выглядят все три узла на пробной вкладке (в complete отмечен узел «Записать значение», catch ловит ошибки всех узлов):

../../_images/flow-common-short-nodes.png

Цепочки примера: заметка «Заметка: что делает вкладка»; inject «Запуск» → change «Записать значение» → debug «Результат»; complete «Запись завершена» → debug «Узел закончил»; catch «Ловить все ошибки» → debug «Ошибка»

complete: сообщение о завершении обработки

Зачем. Запустить следующий шаг, когда выбранные узлы закончили обработку сообщения, например после длинной цепочки. Входа нет, выход один: когда выбранные узлы закончили, complete выдаёт сообщение. На вкладке под узлом подпись «завершение: N».

../../_images/node-complete.png

Окно узла complete «Запись завершена»: 1 — «Имя» (в окне стоит внизу), 2 — кнопка «Выберите узлы…» и список узлов вкладки

Поля окна (номера — как на снимке; в самом окне «Имя» стоит последним):

  1. «Имя» — подпись на вкладке.

  2. Кнопка «Выберите узлы…» (рядом строка поиска) и под ней список узлов вкладки: отметьте те, за которыми нужно следить. В строке каждого узла справа — его тип; на снимке отмечен «Записать значение». Узел без выбранных узлов редактор не принимает: отметьте хотя бы один.

На учебных вкладках complete не использован.

catch: поймать ошибку

Зачем. Ошибка одного узла не должна остаться незамеченной. catch ловит ошибки узлов и выдаёт сообщение: описание ошибки лежит в msg.error, его можно показать в debug. Входа нет, выход один. На вкладке под узлом подпись «ловить: все».

../../_images/node-catch.png

Окно узла catch «Ловить все ошибки»: 1 — «Имя» (в окне стоит внизу), 2 — «Ловить ошибки», 3 — «Игнорировать ошибки, пойманные другими узлами Catch»

Поля окна (номера — как на снимке; в самом окне «Имя» стоит последним):

  1. «Имя» — подпись на вкладке.

  2. «Ловить ошибки»: «всех узлов», «выбранных узлов» или «in same group» (узлов из той же группы).

  3. Отметка «Игнорировать ошибки, пойманные другими узлами Catch» — чтобы одну и ту же ошибку не получали два catch.

На учебных вкладках catch не использован.

comment: заметка на вкладке

Зачем. Подпись и описание для того, кто будет читать вкладку: что делает блок, что настроить после импорта. Узел ничего не делает: у него нет ни входов, ни выходов. В «Демо-зале» так подписан каждый блок («0. Что настроить после импорта», «1. Старт: настройки зала и адресная книга» и другие); в «Первой программе» заметки тоже стоят над блоками.

../../_images/node-comment.png

Окно узла comment «Заметка: что делает вкладка»: 1 — «Имя», 2 — поле описания с панелью форматирования

Поля окна:

  1. «Имя» — заголовок заметки, виден на вкладке.

  2. Описание — длинный текст заметки. Это поле без подписи: сверху панель форматирования (заголовки h1–h3, жирный и курсив, списки, ссылка и другие кнопки), справа от неё кнопка «развернуть» для увеличения поля.