Соглашения
На этой странице собраны правила, которые повторяются на нескольких страницах базы знаний: как называть элементы, как собирать программу, что делать перед загрузкой проекта. У каждого правила есть смысл (что будет, если нарушить), пример из учебного проекта «Демо-зал» и ссылка на страницу, где оно разобрано подробно.
Как называть элементы
Правило. Имя элемента пишут по схеме Группа_Объект_тип: латиницей, без пробелов, слова с заглавной буквы, части через _. Тип — суффикс в конце имени:
Суффикс |
Элемент |
|---|---|
|
кнопка |
|
лейбл (подпись) |
|
фрейм |
|
фон |
|
слайдер |
|
список |
|
время |
|
группа кнопок, которые выбираются по одной (в «Демо-зале»: |
Зачем. Имя элемента — его ID: по нему программа в U-Logic находит элемент. По общему префиксу группы одно правило обрабатывает всю группу (например, все кнопки Src_*). По суффиксу сразу видно, кнопка это или ползунок. Регистр важен: Nav_Home_b и nav_home_b для программы — разные элементы. UI-Designer не проверяет имя при вводе: ошибка видна, только когда программа не находит элемент.
Пример из «Демо-зала».
Имя |
Что означает |
|---|---|
|
вкладка «Главная» ( |
|
источник «Камера 1» ( |
|
место 1 за столом на экране «Микрофоны» |
|
кнопка «Экран» в шапке |
|
кнопка «Выключить» в окне подтверждения |
Подробно. «Первый интерфейс», раздел «Как называть элементы»; для кнопок — «Кнопки и состояния», раздел «Имя кнопки — её ID».
Одно имя на всём пути
Правило. Имя, которое вы дали элементу в UI-Designer, не меняется во всей цепочке: в узлах, в таблицах настроек, в подписках устройства. Оно совпадает буква в букву, с тем же регистром, без лишних пробелов. По умолчанию каждому элементу — своё имя. Элементы готовой программы лучше не переименовывать.
Зачем.
Узлы ничего не обрезают и не приводят к одному регистру:
Src_Cam1_bиsrc_cam1_bдля них разные элементы.Если двум элементам дали одно имя, в списке узла они сливаются в одну строку, и программа не отличит один элемент от другого.
Если переименовать элемент после того, как программа готова, программа ищет старое имя и не находит элемент. Правила с шаблоном и имена внутри ваших узлов
changeсами не обновятся.Строя интерфейс под готовую программу или программу под готовый интерфейс, сначала договоритесь об именах: исправить их потом дороже, чем придумать сразу.
Элементы появляются в списках узлов после «Сохранить» и «Опубликовать» в UI-Designer. Добавили кнопку, но не опубликовали — в узле её нет.
Пример из «Демо-зала». Имя кнопки служит ключом в таблице настроек зала и именем подписки на звуковом процессоре. Поэтому уведомление процессора приходит уже с именем кнопки, которую надо перекрасить, и ничего переводить не нужно. Кнопка Snd_Hall_mute_b на экране «Звук» и кнопка «Звук в зале» в шапке (Hdr_Sound_b) показывают один и тот же mute: на этот канал подписаны два имени.
Подробно. «Связь интерфейса с программой», разделы «Имя элемента — это ID» и «Одно имя на всём пути»; ключ в таблице — в «Первой программе по шагам», блок C; правила ui - switch по шаблонам имён — в «Приёме событий».
Как раскладывать программу по блокам
Правило. Блок — группа узлов с комментарием-заголовком. Блоки идут сверху вниз, узлы внутри блока — слева направо, провода — только вперёд. Между блоками стоят пары link in и link out, а не длинные провода через всю вкладку. На вкладку — один UI - Panel in и один UI - Panel out, остальные блоки подключены к ним через link. Блоки пронумерованы.
Зачем. По этим правилам программу легко читать и чинить: каждый приём лежит в своём подписанном блоке.
Пример из «Демо-зала». Вся программа лежит на одной вкладке. Блок 1 называется «1. Старт: настройки зала и адресная книга», блок 2 — «2. Связь с панелью»: в нём единственные UI - Panel in и UI - Panel out вкладки, а остальные блоки подключены через пары link. Блок 4 — «4. Экран: источник — подсветка по ответу матрицы».
Подробно. «Программа «Демо-зал»: обзор», разделы «Как читать вкладку» и «Правила, по которым собран «Демо-зал»»; узлы link — в «Узлы «Общие»».
Остальные правила, по которым собран «Демо-зал»
Правило и смысл. Остальные правила того же списка. Полный список из двенадцати правил — на странице обзора.
Правило |
Смысл |
Пример из «Демо-зала» |
|---|---|---|
Настройки зала — в одном узле, логика читает их по ключу |
номера входов и имена лежат в картах («имя кнопки → параметры»); их записывает при запуске один узел |
блок 1; выражение |
Шаблон вместо копий |
группа кнопок с общей частью имени — одно правило; вид группы кнопок с одинаковым поведением — один шаблон |
одно правило |
Один |
команда — в |
узел «Матрица: подать вход» отправляет команду |
Вид кнопок — по ответу устройства |
нажатие запускает команду, а подсвечивает кнопку ответ: так на панели видно то, что действительно произошло (источник мог переключиться и с пульта, а команда могла не пройти) |
блок 4: подсветка по ответу матрицы |
Сценарий — список шагов |
список |
блок 11 «Шаги сценариев и подписки» |
Простое делайте узлами |
узел |
— |
Переключатели — средствами UI-Designer |
кнопку отмечают флажком «Отметить как toggle», программа получает |
|
Состояние — в памяти потока |
одно имя в памяти записывает один узел, остальные его только читают: так проще понять, кто менял значение |
блок 7: состояние мест хранится в памяти потока |
Подписки и опрос — после подключения |
запускайте их от первого выхода |
блок 11 |
Подробно. «Программа «Демо-зал»: обзор», раздел «Правила, по которым собран «Демо-зал»»; приём событий и шаблоны — «Приём событий»; команды и ответы — «Команды устройствам и ответы»; переключатели — «Переключатели и группы».
Копия перед загрузкой и правкой
Правило. Прежде чем загружать проект или делать крупную правку, нажмите «Скачать проект» и сохраните файл. Копия нужна и для интерфейсов, и для программы.
Зачем. «Загрузить проект» заменяет проект целиком: всё, чего нет в архиве, пропадёт. В редакторе драйверов подтверждения перед заменой нет. Вернуть прежнее можно, только загрузив сохранённую копию тем же способом. В редакторе драйверов нет отмены сохранения и нет подтверждения при удалении драйвера: прежний код тоже можно вернуть только из копии.
Что ещё нужно знать о копии:
копия интерфейсов содержит опубликованное состояние, а не последние неопубликованные правки: сначала опубликуйте проект;
в копию программы не попадают неразвёрнутые правки: перед «Скачать проект» нажмите «Развернуть»;
пароли подключений устройств в копию не входят: после загрузки их нужно ввести заново;
загружайте сначала интерфейсы, потом программу: программа находит кнопки и надписи по именам, и пока интерфейса нет, ей не к чему обращаться.
Пример из «Демо-зала». Перед загрузкой программы «Демо-зал» вы нажимаете «Скачать проект» в редакторе драйверов и сохраняете файл — это копия ваших потоков и драйверов. Если вы добавляете только вкладку через flow.json, сохраните копию потоков: меню → «Экспорт» → все потоки → «Скачать».
Подробно. «Проекты: загрузить и скачать»; «Программа «Демо-зал»: обзор», раздел «Загрузка программы «Демо-зал»»; «Редактор драйверов»; копия интерфейсов — «UI-Designer».
Оформление интерфейса
Правило. Это не требования редактора, а опыт «Демо-зала». Интерфейс получается спокойным и читаемым, если держаться шести правил:
Правило |
Зачем |
В «Демо-зале» |
|---|---|---|
Светлая тема: белые карточки с мягкой тенью на светло-сером фоне |
глянцевый экран панели в освещённом зале не теряет текст в бликах, а белый фон не утомляет за рабочий день |
вкладка «Звук»: светлые карточки |
Акцент — только у того, что включено или выбрано; остальное нейтральное |
когда яркого цвета мало, он сразу показывает, что происходит |
выбранная вкладка и источник — синие, включённый переключатель — зелёный, опасное действие («Выключить всё») — красное |
Крупные цели касания: кнопка не меньше 72 пикселей по меньшей стороне |
на панели 10″ с экраном 1920 × 1200 это около 8 мм: палец не промахивается, кнопки можно нажимать не глядя |
кнопки интерфейса |
Крупный текст: не меньше 24 пикселей |
— |
основные подписи кнопок — 26–30, значения — 48 и 72 |
Единые отступы и скругления |
— |
поля — 32 пикселя, промежутки между карточками — 24, углы скруглены одинаково для каждого вида элементов |
Один шрифт, два начертания |
— |
Inter Tight, обычный и жирный |
Подробно. «Оформление интерфейса», раздел «Несколько правил, которые работают»; там же палитра с ролями цветов.
Правила Скриптера
Правило. Настройка — один раз в On Start, дальше только реакции. Подписки объявляйте в On Start; в On Message оставляйте только действия.
Зачем.
Подписка (
onTap,on,onValueChanged,onStatusи другие) — правило, которое должно работать всё время, пока работает узел.Подписка, объявленная в On Message, создаётся заново на каждое сообщение, а старые остаются. Одно нажатие запускает все накопленные обработчики сразу (после 50 сообщений — 50 раз), а память растёт, пока узел не остановят.
Вручную снимать подписки не нужно: при остановке узла или «Развернуть» Скриптер снимает подписки на панель и устройства и останавливает таймеры. Новое «Развернуть» безопасно: On Start создаёт подписки с нуля, двойных не будет.
Ошибка в одном обработчике или таймере не останавливает остальные.
Пример. Подписка на кнопку Src_Cam1_b объявлена один раз в On Start, а в On Message стоит только действие в ответ на пришедшее сообщение:
// On Start: правильно — один раз
panel.onTap('Src_Cam1_b', () => matrix.send('route', { input: 1, output: 1 }));
// On Message: только действие в ответ на пришедшее сообщение
if (msg.topic === 'camera') camera.send('recallPreset', { preset: msg.payload });
Подробно. «Скриптер: логика кодом», раздел «Правила»; если что-то не работает — там же, раздел «Устранение неполадок».