Не работает: где смотреть
Нажали кнопку на панели, а в зале ничего не произошло. Или устройство не отвечает, или на панели не меняется вид. Эта страница — один маршрут проверки. Он идёт по тому же пути, что и нажатие: от панели до устройства и обратно. На каждом шаге сказано, что проверить, как это увидеть и что значит, если не так. Подробности — по ссылке на нужную страницу.
Проверяйте по порядку: каждый следующий шаг имеет смысл, только когда прошёл предыдущий.
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: по нему программа находит элемент.
С какого шага начать
Что вы видите |
С какого шага начать |
|---|---|
Вместо интерфейса форма «Вход в интерфейс» |
|
На панели только синие точки загрузки |
|
В списке «Интерфейсы» нет нужного интерфейса, или на панели старая версия |
|
Интерфейс затемнён, сверху надпись «Потеряно соединение c сервером» |
|
Нажимаю кнопку — ничего не происходит |
|
Событие в отладке видно, а действия нет |
|
Действие выполняется три раза |
|
Под |
|
Статус «Отключено» или ошибка, устройство молчит |
|
Устройство ответило, а в отладке нет ответа или он «сырой» |
|
Ответ приходит, а кнопка, ползунок или надпись на панели не меняются |
|
Поправил, а ничего не изменилось; после загрузки проекта что-то пропало |
Не знаете, где ломается, — начните с шага 1.
Шаг 1. Панель открыта и показывает нужный интерфейс
Что проверить. UI-Panel (страница, на которой оператор работает с интерфейсом) открывается, слева в селекторе «Интерфейсы» есть нужный интерфейс, и он выбран.
Как проверить.
Откройте UI-Panel: на странице настроек в разделе «Открыть» нажмите «Открыть UI-Panel» («UI-Panel»).
В селекторе «Интерфейсы» нажмите на название нужного интерфейса.
Что вы увидите: интерфейс в основной области. Пока интерфейс не выбран, там написано «Выберите доступный интерфейс».
Если не так.
Только синие точки загрузки, без селектора и надписей. В программе U-Logic нет развёрнутого узла
UI - Panel in. Добавьте его и нажмите «Развернуть», затем обновите страницу панели.Селектор есть, а нужного интерфейса в нём нет. Интерфейс не опубликован или опубликован без сохранения. В UI-Designer нажмите «Сохранить», дождитесь «Сохранено ✓», затем «Опубликовать» и обновите страницу панели.
Интерфейс изменили, а на панели старый. Обновите страницу панели.
Интерфейс затемнён, сверху «Потеряно соединение c сервером». Панель не получает от программы U-Logic ответ. Проверьте сеть между панелью и контроллером и состояние программы в U-Logic. Панель переподключается сама.
Вместо интерфейса форма «Вход в интерфейс». Включено ограничение доступа. Введите пароль интерфейса или откройте ссылку-пропуск. Если форма появляется на панели, у которой пропуск уже был, смотрите вопрос «Панель вместо интерфейса показывает форму «Вход в интерфейс». Что делать?» на странице «Доступ к интерфейсам».
Подробнее. Раздел «Почему панель пустая или не обновляется» на странице «UI-Panel»; добавить UI - Panel in — раздел «Подготовьте U-Logic» на странице «Первый интерфейс»; «Доступ к интерфейсам».
Шаг 2. Событие доходит до программы
Что проверить. Нажатие на панели приходит в узел UI - Panel in. Пока это не так, дальше по цепочке искать нечего.
Как проверить.
Перетащите на вкладку (рабочий лист программы) узел
debugи соедините его с выходомUI - Panel in.Откройте
debug: в поле «Выводить» выберите «выражение» и впишите$string(payload). Нажмите «Готово» и «Развернуть».Откройте на правой боковой панели вкладку отладки (значок «жук»).
Нажмите нужный элемент на панели.
Что вы увидите: за одно нажатие кнопки в отладке три строки (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 содержат то, что нужно.
Как проверить.
Посмотрите на статус под узлом
device - command. Если «Соединение» не выбрано, под узлом красным написано «Не настроено соединение». Если у подключения не выбран транспорт — «Не настроен транспорт».Подключите
debug(«весь msg») к выходу узла, который стоит передdevice - command(обычно этоchange), и нажмите кнопку на панели. Разверните в сообщенииcommandиparameters.Чтобы проверить саму команду без панели, подайте её узлом
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. Подключение к устройству работает
Что проверить. Контроллер связался с устройством: у подключения верные адрес и порт, выбран нужный транспорт.
Как проверить.
Нажмите «Развернуть» и посмотрите на статус под
device - command: сначала «IDLE», затем «Подключено». Статус можно получить и сообщением: на первом выходе узлаmsg.payload.statusравенconnected,disconnectedилиerror, а вmsg.payload.error— описание ошибки.Посмотрите на статус под
device - response - listener: «Подключено», «Отключено» или «Ошибка».Откройте подключение (кнопка с карандашом рядом с полем «Соединение») и проверьте транспорт и его настройку: «Хост» и «Порт» (для UDP адрес устройства — в поле «Исходящий IP») и «Автоподключение».
Чтобы проверить связь, не вовлекая драйвер, воспользуйтесь тестовым узлом своего транспорта (
TCP Test,UDP Test,HTTP Test,SSH Test,Telnet Test):inject→ тестовый узел →debug. Раздел тестовые узлы.На время наладки включите в подключении «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. Тогда элемент на открытой панели меняется.
Как проверить.
Включите
debug(«весь msg») за узломchange, который готовит данные для панели, и посмотрите, что лежит вmsg.topic: там должна быть запись{"имя элемента": значение}.Проверьте окно
api - helper - 2: выбран интерфейс, «Тип сообщения» —uiState, «Источник входных данных» указывает на то поле, кудаchangeположил данные (msg.topicпо умолчанию).Чтобы отделить панель от устройства, подайте значение вручную: цепочка
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» там же, абзац «Где смотреть ошибки» страницы «Скриптер»; «Частые ошибки» на странице «Проекты: загрузить и скачать», разделы Загрузить проект интерфейсов и Загрузить проект программы.
Если причина не нашлась
Адрес технической поддержки — на странице «Часто задаваемые вопросы», раздел «Поддержка».