Программа «Демо-зал»: обзор

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

Это большой пример, в котором все приёмы раздела работают вместе. Если вы ещё не собирали программу сами, начните с «Первой программы по шагам»: там те же приёмы на маленьком примере. Откройте «Демо-зал» после неё: вы увидите знакомые узлы (блоки программы U-Logic) в большой программе.

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

Загрузка программы «Демо-зал»

Программе нужны две вещи. Первая — интерфейсы «Демо-зал» и «Рецепты»: они есть в том же проекте UI-Designer (редактор интерфейсов), что и «Первая программа». Вторая — драйверы (описания протоколов устройств: команды, их параметры и разбор ответов) четырёх устройств зала: матрица AVCiT PHINX — avcit-phinx, звуковой процессор Biamp Tesira — Tesira, кодек VINTEO — vinteo-st, камеры VISCA — visca-generic. Сначала загрузите на контроллер проект UI-Designer с интерфейсами (см. «UI-Designer»): достаточно загрузить проект, публиковать после «Загрузить проект» не нужно. Иначе узлы не найдут элементов.

Программа выложена в двух видах — выберите способ:

Способ

Файл

Когда подходит

Проект целиком

demo-hall-project.zip — две вкладки («Демо-зал» и «Первая программа») и четыре драйвера

учебный или чистый контроллер: проект заменяет все потоки и все драйверы на контроллере

Только поток

demo-hall-flow.json — программа без драйверов

на контроллере уже есть своя программа, которую нужно сохранить

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

Способ 1. Проект целиком

Предупреждение

«Загрузить проект» заменяет все потоки и все драйверы контроллера содержимым архива; слияния нет, подтверждения перед заменой тоже нет. Ваши вкладки и драйверы, которых нет в архиве, пропадут. Перед загрузкой обязательно скачайте свой проект (шаг 3): вернуть потоки и драйверы можно, загрузив эту копию тем же способом. Пароли подключений устройств в копию не входят, их придётся ввести заново; неразвёрнутые правки в копию тоже не попадут.

  1. Откройте U-Logic.

  2. Откройте меню справа сверху → «Вид» → «Редактор драйверов». Редактор откроется на боковой панели справа.

  3. Нажмите «Скачать проект» и сохраните файл: это копия ваших потоков и драйверов.

  4. Нажмите «Загрузить проект» и укажите файл demo-hall-project.zip. Загрузка начнётся сразу после выбора файла.

../../_images/dd-menu.png

Меню U-Logic: 1 — «Вид», 2 — «Редактор драйверов»

../../_images/dd-project-buttons.png

«Редактор драйверов»: 1 — «Режим», 2 — «Драйвер», 3 — «Скачать проект», 4 — «Загрузить проект»

  1. Дождитесь сообщения об успешной загрузке и обновите страницу U-Logic. Программа перезапускается сама, нажимать «Развернуть» (кнопку, которая запускает правки программы в работу) не нужно.

  2. Впишите адреса ваших устройств (как в шаге 9 способа 2) и нажмите «Развернуть».

Что вы увидите: в U-Logic две вкладки — «Демо-зал» и «Первая программа» (её разбор — на странице «Первая программа по шагам»); в списке «Драйвер» редактора драйверов — avcit-phinx, Tesira, vinteo-st, visca-generic. У узлов «События панели» и «Команды панели» горит зелёная точка, когда открыта хотя бы одна панель; узлы устройств, пока адреса не вписаны, — «Отключено».

Способ 2. Только поток

Этот способ добавляет программу отдельной вкладкой и не трогает остальные. Архив demo-hall-project.zip здесь нужен только как источник кода драйверов: не загружайте его через «Загрузить проект», он заменит вашу программу (см. способ 1).

  1. Откройте U-Logic.

  2. Убедитесь, что в «Редакторе драйверов» (меню → «Вид» → «Редактор драйверов», список «Драйвер») есть четыре драйвера: avcit-phinx, Tesira, vinteo-st, visca-generic. Без драйверов узлы соединений не смогут работать. Если какого-то нет, возьмите его код из архива demo-hall-project.zip (папка drivers, файл <имя>.js): в редакторе драйверов выберите в поле «Режим» значение «Создать новый», введите имя драйвера (как имя файла, без .js), вставьте содержимое файла и нажмите «Сохранить». Подробнее о драйверах — в «Dynamic Driver».

  3. Сохраните копию действующих потоков: меню справа сверху → «Экспорт» → все потоки → «Скачать». «Развернуть» заменяет работающую программу, а восстановить её можно только из копии.

  4. В меню справа сверху выберите «Импорт» (или нажмите Ctrl + I).

  5. В окне «Импортировать узлы» нажмите «выберите файл для импорта» и укажите файл программы.

  6. В «Импортировать в» нажмите «новый поток», чтобы программа открылась отдельной вкладкой «Демо-зал».

  7. Нажмите «Импорт».

  8. Подключение к UI-Panel (странице, на которой оператор работает с интерфейсом): файл создаёт своё подключение «Демо: UI-Panel». Если на контроллере такое подключение уже есть, откройте узлы «События панели» (UI - Panel in) и «Команды панели» (UI - Panel out), выберите в поле «Path» уже существующее подключение, а «Демо: UI-Panel» удалите (меню → «Конфигурационные узлы»). Если подключения не было, ничего менять не нужно.

  9. Впишите адреса ваших устройств: меню → «Конфигурационные узлы» → откройте по очереди «Демо: матрица», «Демо: звуковой процессор», «Демо: кодек ВКС», «Демо: камера 1», «Демо: камера 2», «Демо: камера 3». Адреса и порты в файле тестовые: впишите адрес каждого устройства и его порт управления из документации устройства. Если устройство требует входа (например, кодек ВКС), укажите в подключении логин и пароль устройства.

  10. Нажмите «Развернуть». Вверху должно появиться «Успешно развернуто».

../../_images/import-dialog.png

Окно «Импортировать узлы»: 1 — «выберите файл для импорта», 2 — «Импортировать в», 3 — «Импорт»

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

Если вкладка «Демо-зал» уже есть и вы хотите загрузить новую версию, удалите вкладку (меню → «Потоки» → «Удалить») и импортируйте файл заново. В окне «Некоторые узлы уже существуют» нажмите «Показать узлы…», в списке отметьте прежние узлы «Демо: …» и действие «заменить», затем нажмите «Импортировать выбранные». После замены адреса и подключение к UI-Panel вернутся к значениям из файла: повторите шаги 8 и 9 и нажмите «Развернуть».

Если загрузка не удалась

  • В списке драйверов нет нужных. Загружался только поток. Добавьте драйверы по шагу 2 способа 2.

  • Узлы «Демо: …» показывают «Отключено» или «Ошибка». Адреса устройств в файле — заглушки; впишите свои (шаг 9).

  • На панели пусто или точки загрузки. Не загружен проект UI-Designer или UI - Panel in не развёрнут; см. «Частые ошибки» на странице «Связь интерфейса с программой».

  • Кнопки не подсвечиваются. Устройств в сети нет — подсветка идёт по их ответам.

Как читать вкладку

Программа лежит на одной вкладке «Демо-зал». Каждый приём показан в отдельном подписанном блоке — группе узлов с комментарием-заголовком. Блоки пронумерованы и идут сверху вниз, а внутри блока узлы идут слева направо, провода — только вперёд. Между блоками — не длинные провода через всю вкладку, а пары узлов link out и link in: у такой пары общее имя, и сообщение, вошедшее в один, выходит из другого.

В таблице ниже названия даны так, как они подписаны на вкладке; дальше блок назван по первым словам названия (например, блок «Экран» — это «4. Экран: источник — подсветка по ответу матрицы»).

Блок на вкладке

Какой приём показывает

0. Что настроить после импорта

комментарий со списком того, что поменять в загруженной программе: адреса устройств и подключение к UI-Panel (только в файле для загрузки)

1. Старт: настройки зала и адресная книга

настройки зала и две карты («кнопка → параметры матрицы», «вход → кнопка и название») собраны в одном узле и при запуске записываются в память потока

2. Связь с панелью

один узел UI - Panel in и один UI - Panel out на всю вкладку, остальные блоки подключены к ним через пары link

3. Главная: сценарии и «Выключить всё?»

кнопка запускает список шагов для нескольких устройств

4. Экран: источник — подсветка по ответу матрицы

одно правило на семь кнопок и карта вместо узла на каждую; фильтр ответа матрицы; подсветка по ответу

5. ВКС: кнопки и список → кодек

выбор строки списка, звонок, кнопка-переключатель (value_changed и switch)

6. ВКС: ответы кодека → список и состояние звонка

заполнение списка, опрос, изменение надписей и цвета

7. Микрофоны: 13 мест — одно правило

порядок правил в ui - switch; состояние мест хранится в памяти потока

8. Звук: ползунки и кнопки → звуковой процессор

ползунок, масштаб значений, команды звука

9. Звуковой процессор: ответы → вид элементов

уведомления процессора перекрашивают кнопки и двигают ползунок

10. Камеры: выбор и управление

события «нажата» и «отпущена»; выбор устройства по памяти потока

11. Шаги сценариев и подписки

выполнение списка шагов с паузами; подписки после подключения

12. Рецепты: живые значения для второго интерфейса

второй интерфейс в той же программе

13. Ввод с клавиатуры: инпут → программа

текст из поля ввода попадает в программу

14. Скриптер: сценарий «Перерыв»

один узел scripter: нажатие кнопки, команды устройствам с паузами и изменение надписи — кодом, без проводов

Общее правило, которое видно во всей программе: нажатие запускает команду, а вид на панели меняет ответ устройства. Так на панели видно то, что действительно произошло: источник мог переключиться и с пульта, а команда могла не пройти.

Правила, по которым собран «Демо-зал»

Держитесь этих правил — тогда программу легко читать и чинить.

  1. Один блок — один приём. Блок — группа узлов с комментарием-заголовком. Блоки идут сверху вниз, узлы внутри блока — слева направо, провода — только вперёд. Между блоками — пары link in и link out, а не длинные провода через всю вкладку.

  2. Один вход и один выход панели. Один UI - Panel in и один UI - Panel out на вкладку; остальные блоки подключены через link.

  3. Настройки зала — в одном узле, а логика читает их по ключу. Номера входов и имена лежат в картах — таблицах «имя кнопки → параметры» и «вход → кнопка и название». Их записывает при запуске один узел change (блок 1), а остальные берут нужную строку по ключу: change с выражением вида demoMatrix[msg.payload.object] («Первая программа», блоки A и C). Логика не держит чисел у себя.

  4. Имя элемента — ключ всего. Настройки, правила, подписки процессора используют то же имя, что в UI-Designer.

  5. Шаблон вместо копий. Группа кнопок с общей частью имени — одно правило. Вид группы кнопок с одинаковым поведением — один шаблон.

  6. Один device - command на устройство. Команда — в msg.command, параметры — в msg.parameters.

  7. Вид кнопок — по ответу устройства. Нажатие запускает команду, а подсвечивает кнопку ответ. Ответ фильтруется узлом switch (подтверждён ли, по какому выходу). Исключение — устройство, которое о состоянии не сообщает.

  8. Сценарий — список шагов. Список [{устройство, команда, параметры}] в одном change, исполнение — в одном блоке шагов с паузами. Время задавайте узлами delay и trigger.

  9. Простое делайте узлами change и switch. Узел function нужен только для сложной логики (например, выбор из нескольких источников); дайте ему имя и комментарий «вход / выход».

  10. Переключатели — средствами UI-Designer. Кнопку отмечают флажком «Отметить как toggle», программа получает value_changed и разбирает его switch или change. Узел toggle - helper не используется.

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

  12. Подписки и опрос — после подключения. Запускайте их от первого выхода device - command: пока соединения нет, команда теряется.

Экскурсия по блокам

Для каждого блока ниже: что он делает, какой приём показывает и где читать про этот приём подробно. Снимки — крупные куски вкладки, по одному на блок.

Блок 1. Старт: настройки зала и адресная книга

Через 3 секунды после запуска узел inject «Старт» запускает цепочку. Узел change записывает в память потока настройки зала: номера входов матрицы, имена, список шагов и две карты (demoMatrix: кнопка → параметры матрицы; demoInputs: вход → кнопка и название). Логика дальше читает их оттуда по ключу и не держит чисел у себя. Затем узел device - command «Кодек: адресная книга» просит у кодека список контактов, и список ВКС заполнен с самого начала.

../../_images/tour-01-start.png

Блок 1: 1 — inject «Старт», 2 — change «Настройки «Демо-зала»», 3 — device - command «Кодек: адресная книга»

Приём: настройки и карты в одном узле. Где читать: «Первая программа», блок A, и «Команды устройствам и ответы».

Блок 2. Связь с панелью

Один UI - Panel in и один UI - Panel out на всю вкладку. UI - Panel in ведёт в link out, который разносит события по блокам; блоки возвращают результат в общий link in, подключённый к UI - Panel out. Один вход и один выход проще проверить: если сломалась связь с панелью, смотрите в одно место. Выключенный по умолчанию узел debug «Что прислала панель» показывает все события.

../../_images/block-panel-link.png

Блок 2: 1 — UI - Panel in «События панели», 2 — link out в блоки экранов, 3 — link in от блоков, 4 — UI - Panel out «Команды панели»

Приём: вход и выход панели в одном месте. Где читать: «Приём событий».

Блок 3. Главная: сценарии и «Выключить всё?»

Кнопки «Начало совещания», «Начало видеоконференции» и «Выключить» запускают сценарий — список шагов для нескольких устройств сразу. Список лежит в узле change, а выполняется в блоке 11. Четвёртый сценарий, «Перерыв», собран иначе: его выполняет один узел Скриптера (блок 14). Окно подтверждения «Выключить всё?» — это фрейм (область на странице, в которой показан оверлей) в интерфейсе: программа получает только нажатие «Выключить».

../../_images/tour-03-home.png

Блок 3: 1 — ui - switch «Главная», 2 — узлы change «Шаги: …» со списками шагов, 3 — api - helper - 2 «Микрофон ВКС: кнопка обычная», 4 — link out «→ шаги»

Приём: сценарий — список шагов, а не десяток проводов. Где читать: «Команды устройствам и ответы».

Кнопка «Выключить» запускает ещё один узел api - helper - 2 — «Микрофон ВКС: кнопка обычная»: он ставит переключателю микрофона состояние default, чтобы после «Выключить всё» кнопка на панели не оставалась нажатой. Сам микрофон кодека выключает один из шагов сценария.

Блок 4. Экран: источник — подсветка по ответу матрицы

Кнопки выбора источника на экране «Экран»: нажатие отправляет матрице команду, а подсветка кнопки и надпись «На экране» меняются по ответу матрицы, а не по нажатию.

Вперёд. Одно правило ui - switch по шаблону Src_*_b ловит все семь кнопок. Узел change «Кнопка → параметры матрицы» достаёт из карты demoMatrix по имени нажатой кнопки параметры {input, output} и кладёт их в msg.parameters (с «глубокой копией»). Затем один device - command «Матрица: подать вход» отправляет команду route. Кнопка «Убрать источник» — тоже строка карты: вход 0.

Назад. Ответ матрицы приходит в device - response - listener «Матрица: ответы» и проходит два узла switch: «Подтверждено?» (payload.ack равно true — настоящий ответ, а не отправка) и «Какой выход?» (payload.output равно 1 — только выход экрана зала; ответ по другому выходу отбрасывается). Дальше две ветки. change «Вход → кнопка» берёт из карты demoInputs имя кнопки по номеру входа и ведёт в interlock - 2 «Источники» (подсветка). change «Вход → название» берёт название и ведёт в api - helper - 2 «На экране» (две надписи — на экране «Экран» и на главной).

../../_images/tour-04-screen.png

Блок 4 «Экран»: 1 — change «Кнопка → параметры матрицы», 2 — device - response - listener «Матрица: ответы», 3 — switch «Какой выход?», 4 — change «Вход → кнопка», 5 — interlock - 2 «Источники», 6 — api - helper - 2 «На экране»

Приёмы: карта вместо узла на каждую кнопку; фильтр ответа; подсветка по ответу устройства. Где читать: «Первая программа», блоки C и D, «Команды устройствам и ответы», «Переключатели и группы».

Блок 5. ВКС: кнопки и список → кодек

Кнопки «Контакты», «История», «Позвонить», «Завершить», «Микрофон в ВКС» и список контактов. Выбор строки списка приходит событием item_selected; команды уходят кодеку через один device - command «Кодек: команда». «Контакты», «История» и «Завершить» — узлы change с константами (msg.command); «Позвонить» требует выбора строки из памяти, поэтому там function.

«Микрофон в ВКС» — кнопка-переключатель (флажок «Отметить как toggle» в UI-Designer). Правило ui - switch на неё ловит value_changed, а switch «Микрофон: вкл или выкл?» по msg.payload.value направляет pressed в change «Микрофон: включить» и default в change «Микрофон: выключить»; оба ставят команду setMute. Другое решение того же — одним change с выражением JSONata — разобрано в «Первой программе», блок F.

../../_images/tour-05-vcs-buttons.png

Блок 5 «ВКС: кнопки и список → кодек»: 1 — ui - switch «ВКС», 2 — change «Список: контакты», 3 — function «Позвонить выбранному», 4 — switch «Микрофон: вкл или выкл?», 5 — change «Микрофон: включить» и «Микрофон: выключить», 6 — device - command «Кодек: команда»

Приёмы: команда из константы, переключатель через value_changed. Где читать: «Переключатели и группы», «Команды устройствам и ответы».

Блок 6. ВКС: ответы кодека → список и состояние звонка

Ответы кодека contacts и history превращаются в строки списка и попадают в api - helper - 2 «Список ВКС» с событием «Список (JSON)». Кодек сам не сообщает о состоянии звонка, поэтому узел inject каждые 5 секунд спрашивает его (getCallInfo), а ответ callInfo меняет надписи «Идёт разговор» и «Нет звонка» и цвет плашки двумя узлами api - helper - 2.

../../_images/tour-06-vcs-answers.png

Блок 6: 1 — inject «Раз в 5 с», 2 — device - response - listener «Кодек: ответы», 3 — функция «Ответ кодека → строки списка», 4 — api - helper - 2 «Список ВКС», 5 — api - helper - 2 «Звонок: подписи»

Приёмы: заполнение списка, опрос устройства, которое само не сообщает, «Источник входных данных». Где читать: «Изменение вида на панели» и «Команды устройствам и ответы».

Блок 7. Микрофоны: 13 мест — одно правило

13 кнопок мест за столом обслуживает одно правило Mic_*_b. Правило для кнопки «Выключить все» стоит выше: оно тоже подошло бы под шаблон. Состояние мест программа хранит в памяти потока и по нему считает надпись «Говорят».

../../_images/tour-07-mics.png

Блок 7: 1 — ui - switch с двумя правилами, 2 — функция «Место → канал», 3 — link in «места: «Говорят»», 4 — api - helper - 2 «Говорят»

Приёмы: порядок правил, состояние в памяти потока. Где читать: «Приём событий».

Блок 8. Звук: ползунки и кнопки → звуковой процессор

Ползунки громкости ловятся событием slide_end: команда уходит один раз, когда оператор отпустил ползунок. Узел range переводит значение 0…1 в децибелы, а функция по имени кнопки выбирает команду звука.

../../_images/tour-08-sound.png

Блок 8: 1 — ui - switch «Звук», 2 — range, 3 — функция «Элемент → команда звука», 4 — device - command «Звук: команда»

Приём: событие ползунка, масштаб значений. Где читать: «Приём событий», «Команды устройствам и ответы».

Блок 9. Звуковой процессор: ответы → вид элементов

Процессор присылает уведомления по подписке. Подписки названы именами кнопок и ползунков (Mic_04_b, Snd_Hall_vol_sl), поэтому уведомление само указывает, какой элемент менять. Один шаблон вида { "{{payload.publishToken}}": { "uiState": "default" или "pressed" } } ставит состояние всем кнопкам mute, а узел api - helper - 2 «Кнопки по имени» работает без списка элементов.

../../_images/block-sound-feedback.png

Блок 9: 1 — «Звук: уведомления», 2 — «Чьё уведомление», 3 — шаблоны по имени кнопки «Кнопка: обычная» и «Кнопка: нажата», 4 — api - helper - 2 «Кнопки по имени», 5 — ветки ползунков и подписей «Зал» и «ВКС»

Приём: имя подписки равно имени элемента; одно состояние ведёт несколько кнопок. Где читать: «Изменение вида на панели».

Блок 10. Камеры: выбор и управление

Кнопки Cam_1_b…Cam_3_b выбирают, какой камерой управлять: номер записывается в память потока, а подпись «Управляемая камера» обновляется. Шесть кнопок движения ловят два события — push (начать) и release (стоп). Куда уйдёт команда, решает switch «Какая камера» по номеру из памяти.

../../_images/tour-10-cameras.png

Блок 10: 1 — ui - switch «Камеры», 2 — change «Камера 1» (рядом — такие же для камер 2 и 3), 3 — api - helper - 2 с подписью «Управляемая камера», 4 — функция «Кнопка → команда камеры», 5 — switch «Какая камера» и три device - command «Камера 1…3»

Приём: события «нажата» и «отпущена»; выбор устройства по памяти потока. Где читать: «Приём событий».

Блок 11. Шаги сценариев и подписки

Здесь выполняются списки шагов из блоков 3 и 7. Узел split разбирает список, delay (0,4 с) делает паузу между шагами, change превращает шаг в команду, switch выбирает устройство, и шаг уходит в device - command этого устройства. Тем же путём после подключения звукового процессора уходят его подписки: их запускает первый выход device - command («connected»).

../../_images/tour-11-steps.png

Блок 11: 1 — link in, 2 — split, 3 — delay, 4 — change «Шаг → команда», 5 — switch «Какому устройству» и три device - command

Приём: выполнение списка шагов с паузами. Где читать: «Команды устройствам и ответы».

Блок 12. Рецепты: живые значения для второго интерфейса

Тот же поток управляет вторым интерфейсом, «Рецепты»: узел api - helper - 2 задаёт значения спидометров, ползунков и подписей, а ui - switch ловит нажатия на вкладки. UI-Panel запоминает значения, поэтому панель, открытая позже запуска потока, всё равно их показывает.

../../_images/tour-12-recipes.png

Блок 12: 1 — ui - switch «Вкладки «Рецептов»», 2 — change «Значения для снимка», 3 — api - helper - 2 «Рецепты: значения»

Приём: ui - switch и api - helper - 2 выбирают интерфейс по имени. Где читать: «Изменение вида на панели».

Блок 13. Ввод с клавиатуры: инпут → программа

Текст из поля ввода приходит событием value_changed после «Кнопки отправки». Программа показывает полученное в надписи («В программу: 1003»). Второе правило ловит остальные события инпута и ведёт в выключенный debug.

../../_images/tour-13-input.png

Блок 13: 1 — ui - switch «Инпуты «Рецептов»», 2 — template «В программу: …», 3 — api - helper - 2 «Эхо ввода», 4 — выключенный debug

Приём: текст от инпута в программу. Где читать: «Клавиатура и поле ввода».

Блок 14. Скриптер: сценарий «Перерыв»

Кнопка «Перерыв» на главной — четвёртый сценарий, и в отличие от остальных он собран не цепочкой узлов, а одним узлом scripter. Проводов у узла нет: код на вкладке On Start сам слушает нажатие кнопки Home_Break_b и сам отправляет команды устройствам по именам их подключений. Шаги идут с паузами: сразу — подсветка кнопки и выключенные микрофоны, через 1 с — экран без источника, через 2 с — камера 1 «Домой», через 3 с — надпись в шапке «Демо-зал — перерыв». Кнопку «Перерыв» не ловит ни один узел ui - switch — её обрабатывает только Скриптер.

../../_images/tour-14-scripter.png

Блок 14: 1 — комментарий блока, 2 — узел scripter «Сценарий «Перерыв»»

Приём: логика кодом вместо цепочки узлов. Где читать: «Скриптер», раздел «Пример: сценарий «Перерыв» в «Демо-зале»».

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

  • Не вижу блок на вкладке. Откройте вкладку «Демо-зал» и найдите комментарий-заголовок блока. Блоки идут сверху вниз по номерам; если нужен блок 11, прокрутите вниз.

  • Блок не работает без устройств. Подсветка идёт по ответам устройств: пока адреса не вписаны, кнопки подсвечиваться не будут. События панели при этом приходят.

  • После «Развернуть» «На экране» показывает текст по умолчанию. Матрица состояние сама не присылает, поток после перезапуска его не запрашивает. Пока оператор не выберет источник, надпись не обновится; это ограничение учебного потока.