Не работает: где смотреть

Нажали кнопку на панели, а в зале ничего не произошло. Или устройство не отвечает, или на панели не меняется вид. Эта страница — один маршрут проверки. Он идёт по тому же пути, что и нажатие: от панели до устройства и обратно. На каждом шаге сказано, что проверить, как это увидеть и что значит, если не так. Подробности — по ссылке на нужную страницу.

Проверяйте по порядку: каждый следующий шаг имеет смысл, только когда прошёл предыдущий.

        flowchart LR
    A["1. UI-Panel<br/>нужный интерфейс открыт"] --> B["2. UI - Panel in<br/>событие пришло"]
    B --> C["3. ui - switch<br/>правило сработало"]
    C --> D["4. device - command<br/>команда ушла"]
    D --> E["5. Подключение<br/>к устройству"]
    E --> F["6. device - response - listener<br/>ответ разобран"]
    F --> G["7. api - helper - 2 и UI - Panel out<br/>вид на панели"]
    

Шаг 8 стоит отдельно: он про правки, которые не действуют, и про проект после загрузки.

Термины, которые встретятся: U-Logic — редактор программы управления; узел — блок программы U-Logic; «Развернуть» — кнопка U-Logic, которая запускает правки программы в работу; драйвер — описание протокола устройства: команды, их параметры и разбор ответов; транспорт — способ связи с устройством: TCP, UDP, HTTP, Telnet, SSH, RS232 и другие; имя элемента — его ID: по нему программа находит элемент.

С какого шага начать

Что вы видите

С какого шага начать

Вместо интерфейса форма «Вход в интерфейс»

шаг 1

На панели только синие точки загрузки

шаг 1

В списке «Интерфейсы» нет нужного интерфейса, или на панели старая версия

шаг 1

Интерфейс затемнён, сверху надпись «Потеряно соединение c сервером»

шаг 1

Нажимаю кнопку — ничего не происходит

шаг 2

Событие в отладке видно, а действия нет

шаг 3

Действие выполняется три раза

шаг 3

Под device - command написано «Не настроено соединение» или команда не доходит

шаг 4

Статус «Отключено» или ошибка, устройство молчит

шаг 5

Устройство ответило, а в отладке нет ответа или он «сырой»

шаг 6

Ответ приходит, а кнопка, ползунок или надпись на панели не меняются

шаг 7

Поправил, а ничего не изменилось; после загрузки проекта что-то пропало

шаг 8

Не знаете, где ломается, — начните с шага 1.

Шаг 1. Панель открыта и показывает нужный интерфейс

Что проверить. UI-Panel (страница, на которой оператор работает с интерфейсом) открывается, слева в селекторе «Интерфейсы» есть нужный интерфейс, и он выбран.

Как проверить.

  1. Откройте UI-Panel: на странице настроек в разделе «Открыть» нажмите «Открыть UI-Panel» («UI-Panel»).

  2. В селекторе «Интерфейсы» нажмите на название нужного интерфейса.

Что вы увидите: интерфейс в основной области. Пока интерфейс не выбран, там написано «Выберите доступный интерфейс».

Если не так.

  • Только синие точки загрузки, без селектора и надписей. В программе U-Logic нет развёрнутого узла UI - Panel in. Добавьте его и нажмите «Развернуть», затем обновите страницу панели.

  • Селектор есть, а нужного интерфейса в нём нет. Интерфейс не опубликован или опубликован без сохранения. В UI-Designer нажмите «Сохранить», дождитесь «Сохранено ✓», затем «Опубликовать» и обновите страницу панели.

  • Интерфейс изменили, а на панели старый. Обновите страницу панели.

  • Интерфейс затемнён, сверху «Потеряно соединение c сервером». Панель не получает от программы U-Logic ответ. Проверьте сеть между панелью и контроллером и состояние программы в U-Logic. Панель переподключается сама.

  • Вместо интерфейса форма «Вход в интерфейс». Включено ограничение доступа. Введите пароль интерфейса или откройте ссылку-пропуск. Если форма появляется на панели, у которой пропуск уже был, смотрите вопрос «Панель вместо интерфейса показывает форму «Вход в интерфейс». Что делать?» на странице «Доступ к интерфейсам».

Подробнее. Раздел «Почему панель пустая или не обновляется» на странице «UI-Panel»; добавить UI - Panel in — раздел «Подготовьте U-Logic» на странице «Первый интерфейс»; «Доступ к интерфейсам».

Шаг 2. Событие доходит до программы

Что проверить. Нажатие на панели приходит в узел UI - Panel in. Пока это не так, дальше по цепочке искать нечего.

Как проверить.

  1. Перетащите на вкладку (рабочий лист программы) узел debug и соедините его с выходом UI - Panel in.

  2. Откройте debug: в поле «Выводить» выберите «выражение» и впишите $string(payload). Нажмите «Готово» и «Развернуть».

  3. Откройте на правой боковой панели вкладку отладки (значок «жук»).

  4. Нажмите нужный элемент на панели.

Что вы увидите: за одно нажатие кнопки в отладке три строки (push, release, tap), в каждой — object с именем кнопки. Строка без object — это подключение панели к интерфейсу.

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

Если не так.

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

  • Ничего не приходит. В узле UI - Panel in не выбран «Интерфейс»; или имя элемента отличается от имени в правиле хоть на букву; или интерфейс не опубликован.

  • Правки узлов не действуют. Они начинают работать после «Развернуть».

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

Подробнее. Раздел «Как посмотреть событие самому» на странице «Связь интерфейса с программой»; блок «Как проверять: узел debug» и «Частые ошибки» в «Первой программе»; узел debug.

Шаг 3. Правило ui - switch срабатывает

Что проверить. Событие панели попадает на выход правила в узле ui - switch.

Как проверить. Подключите debug к выходу нужного правила и нажмите тот же элемент.

Что вы увидите: на выходе правила, которому подошло событие, в отладке появляется сообщение с полями ui, object, event, value.

Если не так. Проверьте по порядку: выбран ли интерфейс; совпадает ли имя элемента до буквы (регистр, пробелы); для шаблона — включён ли флажок «Шаблон» и верно ли выбран режим (* работает только в wildcard, а в regex это спецсимвол); нет ли выше правила, которое перехватывает событие при «остановке после первого совпадения»; не изменилось ли событие (кнопка шлёт push, а не value_changed).

Другие частые случаи:

  • Узел молча ничего не делает. ui - switch игнорирует сообщения без UI, чужого интерфейса, без object или event. Сообщение disconnected (панель закрыли) не имеет object, оно тоже уходит без выхода.

  • Действие выполняется три раза. В правиле осталось «Любое событие»: выберите push.

  • Элемента нет в списке «Поиск элемента…». Интерфейс не сохранён и не опубликован. Звёздочки ** рядом с именем значат, что такого элемента в интерфейсе уже нет: его переименовали или удалили.

  • Подошло не то правило. Имя подходит под два правила, а проверка остановилась на первом: поставьте точное правило выше шаблона.

Подробнее. Раздел «Как проверить» и «Частые ошибки» на странице «Приём событий»; имя элемента — раздел «Имя элемента — это ID» на странице «Связь интерфейса с программой».

Шаг 4. Команда уходит

Что проверить. Узел device - command получает сообщение, в нём выбраны «Соединение» и «Команда», а msg.command и msg.parameters содержат то, что нужно.

Как проверить.

  1. Посмотрите на статус под узлом device - command. Если «Соединение» не выбрано, под узлом красным написано «Не настроено соединение». Если у подключения не выбран транспорт — «Не настроен транспорт».

  2. Подключите debug («весь msg») к выходу узла, который стоит перед device - command (обычно это change), и нажмите кнопку на панели. Разверните в сообщении command и parameters.

  3. Чтобы проверить саму команду без панели, подайте её узлом inject: цепочка из inject, device - command и debug описана в разделе device - command.

Что вы увидите: в сообщении перед узлом есть command и parameters с нужными значениями. На втором выходе device - command сообщение приходит уже без msg.command и msg.parameters: команду там искать не нужно.

Если не так.

  • В msg.parameters лежит undefined (если команда берётся из таблицы, как в блоке C «Первой программы»). Таблица не записана — не нажато «Развернуть» или не запускали inject — либо ключа нет в таблице. Запустите inject кнопкой слева от него и проверьте имя кнопки.

  • Команда не доходит. Не выбрано «Соединение» в device - command, или устройство ещё не подключилось: команда без соединения теряется.

  • Список «Команда» пуст. Не выбрано «Соединение», или у драйвера нет команд.

  • Вместе с командой пришло msg.connection. Тогда команда не отправляется: узел только подключается или отключается.

  • Подписки и запросы статуса не срабатывают. Они ушли до подключения: запускайте их от первого выхода device - command.

Подробнее. Раздел «device - command» на странице «Команды устройствам и ответы»; окно узла и «Частые ошибки» — device - command.

Шаг 5. Подключение к устройству работает

Что проверить. Контроллер связался с устройством: у подключения верные адрес и порт, выбран нужный транспорт.

Как проверить.

  1. Нажмите «Развернуть» и посмотрите на статус под device - command: сначала «IDLE», затем «Подключено». Статус можно получить и сообщением: на первом выходе узла msg.payload.status равен connected, disconnected или error, а в msg.payload.error — описание ошибки.

  2. Посмотрите на статус под device - response - listener: «Подключено», «Отключено» или «Ошибка».

  3. Откройте подключение (кнопка с карандашом рядом с полем «Соединение») и проверьте транспорт и его настройку: «Хост» и «Порт» (для UDP адрес устройства — в поле «Исходящий IP») и «Автоподключение».

  4. Чтобы проверить связь, не вовлекая драйвер, воспользуйтесь тестовым узлом своего транспорта (TCP Test, UDP Test, HTTP Test, SSH Test, Telnet Test): inject → тестовый узел → debug. Раздел тестовые узлы.

  5. На время наладки включите в подключении «Driver Debug» («Логировать все команды и ответы»): в отладке будет видно, что ушло на устройство и что оно вернуло.

Что вы увидите: «Подключено» под узлами; в тесте — ответ устройства и сообщения о подключении. Нет ни ответа, ни событий — транспорт не подключён: проверьте адрес, порт и сеть.

Если не так.

  • Вместо «Подключено» — «Отключено» или текст ошибки. Проверьте «Хост» и «Порт» и то, что у транспорта включено «Автоподключение».

  • Выбран один транспорт, а настройка выбрана для другого. Сменили транспорт — выберите настройку заново.

  • device - command и device - response - listener привязаны к разным подключениям. Ответы придут от другого устройства или не придут совсем.

  • Одно подключение создано для двух устройств. Подключение — это одно устройство; для второго создайте отдельное.

  • Тест не подключается, потому что устройство принимает только одно соединение и им уже пользуется драйвер. Проверяйте транспорт, пока драйвер это устройство не использует.

  • Устройство требует вход (логин и пароль или токен). Пока вход не завершён, команды ждут в очереди (не больше 64) и уходят после него; если вход не удался, новые команды не отправляются. У Telnet и SSH вход выполняет сам транспорт, если пароль заполнен в его окне; если пароль в окне пуст, вход должен выполнять драйвер. Вход должен выполнять кто-то один: если пароль заполнен и в окне транспорта, и вход включён в драйвере, вход выполнится дважды.

  • После загрузки проекта или примера устройства не подключаются. Адреса устройств в примерах — заглушки, а пароли подключений в копию не входят: впишите адреса и пароли и нажмите «Развернуть».

Подробнее. Шаги от пустой рабочей области до ответа — «По шагам: подключить устройство и отправить команду»; окно подключения — Device Connection; поля транспортов — «Транспорты»; вход на устройство — Вход на устройство (auth-gate, автоматическая авторизация) (страница для разработчика драйвера); пример с адресами — «Программа «Демо-зал»: обзор».

Шаг 6. Ответ устройства разбирается

Что проверить. Устройство ответило, и драйвер превратил ответ в понятное сообщение: в msg.payload есть type, а сообщение приходит на нужный выход узла device - response - listener.

Как проверить. Подключите debug («весь msg») к выходу device - response - listener, нужному для этого типа ответа, и отправьте команду.

Что вы увидите: сообщение, где в msg.payload лежит разобранный ответ, а тип ответа — в msg.payload.type.

Если не так.

  • Ответы приходят все на первый выход. Типам не назначены выходы («Нет») или не выбран нужный тип. Ответ, для которого выход не выбран, уходит на первый выход.

  • Типы назначены, а ответ не приходит. В узле выбрано не то «Соединение», или не нажато «Развернуть»: узел раздаёт ответы по старой таблице.

  • Ответа нет вообще. Не сработало ни одно описание ответа, а parseResponse вернул null или упал. Включите «Driver Debug», сравните полученный текст с выражением, проверьте в окне транспорта «Возвращать» (TCP, HTTP) или «Формат данных» (UDP) и разделитель сообщений.

  • В msg.payload лишняя обёртка, на верхнем уровне нет поля type. В parseResponse уберите category, response, msg.

Подробнее. Таблица «В окне отладки → причина» и раздел «Если ответ не приходит» на странице «Ответы устройства»; раздел «Если не работает» на странице «Как написать драйвер»; окно узла — device - response - listener.

Шаг 7. Вид на панели меняется

Что проверить. Ответ доходит до узла api - helper - 2, а его выход подключён к UI - Panel out. Тогда элемент на открытой панели меняется.

Как проверить.

  1. Включите debug («весь msg») за узлом change, который готовит данные для панели, и посмотрите, что лежит в msg.topic: там должна быть запись {"имя элемента": значение}.

  2. Проверьте окно api - helper - 2: выбран интерфейс, «Тип сообщения» — uiState, «Источник входных данных» указывает на то поле, куда change положил данные (msg.topic по умолчанию).

  3. Чтобы отделить панель от устройства, подайте значение вручную: цепочка inject → api - helper - 2 → UI - Panel out. В inject для msg.payload выберите «JSON» и впишите, например, {"Fp_Mute_b": "pressed"}; в api - helper - 2 в «Источнике входных данных» вместо topic впишите payload. Нажмите «Развернуть», затем кнопку слева от inject.

Что вы увидите: на открытой панели элемент сразу меняется. Если вручную элемент меняется, а от устройства нет, ищите причину на шагах 4–6. Если не меняется и вручную, смотрите ниже.

Если не так.

  • Ничего не меняется. Проверьте по порядку: выход api - helper - 2 подключён к UI - Panel out; выбран интерфейс; «Источник входных данных» указывает на нужное поле; имя элемента в данных совпадает с именем в UI-Designer до буквы; интерфейс сохранён и опубликован.

  • В msg.topic пусто или undefined. Выражение в change не нашло поле в ответе: сверьте имена полей (payload.value, payload.inCall, payload.list) с тем, что пришло в отладке.

  • Устройство ответило, а на панели ничего не поменялось. Ответ дошёл до device - response - listener, но не подключён ни к api - helper - 2, ни к interlock - 2, либо их выход не подключён к UI - Panel out.

  • Подсвечивается не та кнопка или совсем не подсвечивается. Проверьте, дошёл ли ответ до device - response - listener, тот ли выбран тип ответа и тот ли выход. Если ответ приходит, но имя в interlock - 2 не подходит, исправьте имя, которое вы кладёте на его вход.

  • Ответ приходит, а ползунок и кнопка не меняются. В switch не совпало имя подписки с тем, что написано в change подписки; или имя элемента в выражении change отличается от имени в UI-Designer.

  • Ползунок не двигается. Если Min и Max в карточке «Числовое значение» равны, узел пропускает ползунок.

  • Кнопка сама возвращается в default. В списке узла осталась карточка этой кнопки со значением default: уберите её или замените нужным значением.

Подробнее. «Как проверить без устройства» и «Частые ошибки» на странице «Изменение вида на панели»; «Частые ошибки» на странице «Команды устройствам и ответы» и в «Первой программе»; группы кнопок — «Переключатели и группы».

Шаг 8. Правки не действуют или после загрузки проекта что-то пропало

Что проверить. Правка дошла до работающей программы. Есть три разных места, и у каждого своя кнопка.

Где правили

Что нужно сделать

Узлы в U-Logic

нажать «Развернуть»: правки узлов работают только после этого

Интерфейс в UI-Designer

нажать «Сохранить», дождаться «Сохранено ✓», затем «Опубликовать» и обновить страницу панели; «Развернуть» для этого не нужно

Код Скриптера в редакторе (IDE)

нажать Deploy и подтвердить; черновик сам в работу не попадает

Код Скриптера в окне узла

закрыть окно и нажать «Развернуть»

Драйвер в редакторе драйверов

сохранить и нажать «Развернуть»: сохранение само не обновляет уже работающие узлы

Если правка Скриптера не работает.

  • «Запустить тест» выполняет старый код. Тест запускает последний задеплоенный код: нажмите Deploy и повторите. Статус должен быть «Синхронно с деплоем».

  • «Узел не найден в проекте» при Deploy. Узла ещё нет в работающей программе: разверните его в U-Logic, потом нажмите Deploy.

  • Правка из окна узла пропала после Deploy в редакторе. Deploy заменяет код узла черновиком редактора. Правьте код в одном месте.

  • «Конфликт черновика» или «Конфликт версий». Один Скриптер открыт в двух вкладках редактора, или два Deploy пришли одновременно: перезагрузите страницу и повторите правку.

  • В «Ошибках» пусто, хотя что-то не работает. Ошибка внутри таймера (ctrl.wait, ctrl.timer) или обработчика панели сюда не попадает: поставьте node.warn('шаг 1') и смотрите Консоль и боковую панель отладки.

Если после загрузки проекта что-то пропало. «Загрузить проект» заменяет проект целиком, поэтому перед ней скачайте копию кнопкой «Скачать проект».

  • Загрузили программу, а интерфейсов на панели нет. Интерфейсы — отдельный проект: загрузите архив интерфейсов на странице настроек.

  • Загрузили интерфейсы, а кнопки ничего не делают. Программа — отдельный проект: загрузите её в U-Logic.

  • Пропали вкладки, драйверы или интерфейсы. Загрузите копию, скачанную перед этим. Чтобы сохранить имеющиеся интерфейсы, используйте «Объединить проект»; чтобы добавить вкладку в программу — flow.json.

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

  • После импорта flow.json узлы устройств не работают. В flow.json нет драйверов: добавьте их в редакторе драйверов или загрузите проект программы целиком.

  • Устройства после загрузки не подключаются: см. последний пункт шага 5.

Подробнее. Раздел «Частые ошибки» на странице «Редактор Скриптера», раздел «Черновик и Deploy» там же, абзац «Где смотреть ошибки» страницы «Скриптер»; «Частые ошибки» на странице «Проекты: загрузить и скачать», разделы Загрузить проект интерфейсов и Загрузить проект программы.

Если причина не нашлась

Адрес технической поддержки — на странице «Часто задаваемые вопросы», раздел «Поддержка».