С чего начинать диагностику
Запишите время, компонент, действие и полный текст сообщения. Затем установите, на каком участке возникла ошибка: браузер → Studio/HMI, Studio → узел, Runtime → I/O либо Runtime → Historian.
В Studio используйте журнал соответствующего узла и фильтр источника. Для проблем запуска нужны журналы ОС:
systemctl status samutag-studio samutag-runtime samutag-hmi samutag-historian --no-pager
journalctl -u samutag-studio -n 150 --no-pager
journalctl -u samutag-runtime -n 150 --no-pager
journalctl -u samutag-hmi -n 150 --no-pager
journalctl -u samutag-historian -n 150 --no-pager
Для наблюдения в реальном времени добавьте -f. Если терминал показывает байтовые последовательности вместо кириллицы, проверьте UTF-8-локаль и вывод без программы постраничного просмотра: journalctl -u samutag-historian -o cat --no-pager. Для обращения в техническую поддержку сохраните сообщения за время возникновения ошибки.
Журналы узлов в Studio
- Откройте проект и перейдите на вкладку «Узлы». Откройте нужный Runtime, Historian или АРМ и перейдите к просмотру его состояния.
- Разверните блок «Журнал узла». Кнопка «Обновить» получает сообщения от выбранного узла. Если служба недоступна, проверьте её журнал средствами ОС, как показано выше.
- Начните с источника и уровня «Все», чтобы увидеть последовательность событий: запуск, отказ, повторные попытки и восстановление.
- Найдите время сбоя, затем ограничьте выборку источником, уровнем, текстом и периодом.
| Элемент | Как использовать |
|---|---|
| Источник | Выберите службу, подсистему или конкретный I/O-сервер. Список формируется по источникам имеющихся записей. |
| Уровень | Выбирает только указанный уровень. Например, ERROR не включает WARNING или CRITICAL. Для общей картины оставьте «Все». |
| Поиск | Введите часть сообщения или имени источника и нажмите Enter. Например, имя I/O-сервера, путь тэга или «Historian». |
| С / По | Задайте начало и конец периода, затем нажмите «Обновить». Время отображается в часовом поясе браузера; при сравнении с журналом ОС учитывайте его часовой пояс. |
| Время ↓ / ↑ | Щелчок по заголовку меняет порядок записей. Для разбора последовательности от причины к результату удобно расположить старые записи сверху. |
| На странице; Первая / Назад / Далее / Последняя | Выберите количество записей и перемещайтесь между страницами. Счётчик внизу относится к текущей отфильтрованной выборке. |
| Текст ячейки | Наведите указатель, чтобы прочитать полный текст во всплывающей подсказке. Для обращения в поддержку сохраните время, уровень, источник и сообщение целиком. |
Пример: найти ошибку конкретного I/O-сервера
Выберите нужный сервер в поле «Источник», установите уровень ERROR и нажмите «Обновить». На снимке осталась одна запись о закрытии соединения Modbus TCP до получения ответа.
Если записей нет, сбросьте источник, уровень, поиск и период. Убедитесь, что выбран нужный узел. Сообщения могли быть удалены по сроку или объёму хранения либо не записываться из-за установленного минимального уровня.
Уровни сообщений и хранение журнала
| Уровень | Значение | Действия |
|---|---|---|
| DEBUG | Подробности выполнения и обмена с оборудованием. | Используйте при диагностике. Для Modbus сюда относятся запросы и ответы; сопоставляйте их с картой устройства. |
| INFO | Штатные события: запуск, применение конфигурации, восстановление связи. | Проверяйте по ним последовательность действий и завершение восстановления. |
| WARNING | Предупреждение или временное нарушение работы. | Проверьте повторяемость и последующие сообщения. Найдите причину, если предупреждение сохраняется. |
| ERROR | Операция завершилась ошибкой. | Определите источник и объект, устраните причину и проверьте повторное выполнение. |
| CRITICAL | Критическая неисправность компонента. | Проверьте состояние службы и влияние на работающий проект; привлеките обслуживающего специалиста. |
В редакторе узла на вкладке «Параметры компьютера» задаются «Минимальный уровень журнала», «Объём журнала, МБ» и «Хранить журнал, дней».
Минимальный уровень определяет, какие сообщения записываются: при INFO сохраняются INFO, WARNING, ERROR и CRITICAL, а DEBUG пропускается. Фильтр в просмотре журнала только отбирает уже записанные сообщения и не включает подробное журналирование.
- Для диагностики установите DEBUG и сохраните узел.
- Передайте обновлённые настройки компоненту: загрузите актуальный проект на Runtime или АРМ, для Historian примените конфигурацию.
- Воспроизведите проблему и сохраните сообщения за нужный период.
- Верните обычный уровень, например INFO, и снова примените настройки.
Для сохранения журнала Linux в файл используйте, например, journalctl -u samutag-runtime --since "1 hour ago" -o short-iso --no-pager > runtime-log.txt. При необходимости выполните команду с sudo. Для другой службы замените её имя.
Нет соединения с узлом
| Сообщение или симптом | Что проверить |
|---|---|
| Connection refused / WinError 10061 | На указанном адресе и порту нет принимающей службы либо соединение отклонено. Проверьте запуск службы, её адрес прослушивания и порт. |
| Timeout | Маршрут, firewall, задержку сети, загрузку сервера и зависшие операции. |
| 401 / 403 | Авторизацию, токен, права Studio и проекта. Ответ получен от сервера; причиной отказа может быть отсутствие авторизации или необходимых прав. |
| 404 | Правильность адреса и пути, VirtualHost, совместимость браузерной и серверной частей приложения. |
| 502 / 503 от Apache | Работу службы за Apache и адрес, указанный в ProxyPass. |
Проверьте слушающие порты на машине службы:
ss -ltnp
Адрес loopback (127.0.0.1 или ::1) принимает подключения только с того же компьютера. Если используется 0.0.0.0, подключаться всё равно нужно к реальному IP или DNS-имени.
Графика не меняется или привязка не найдена
- Найдите полный путь проблемного символа, включая цепочку вложенных символов и ID элемента.
- Откройте источник графики и проверьте выбранный вид анимации, выражение и тип.
- Определите, относится ли привязка к локальному параметру символа или к тэгу Runtime. Локальная переменная не обязана иметь серверный источник.
- Проверьте владельца this и MyModel, особенно после переноса экземпляров между моделями или изменения композиции.
- Сохраните символ и убедитесь, что на HMI загружена актуальная версия проекта. До загрузки обновлённого проекта АРМ продолжает использовать прежнюю графику.
- Сравните значение и качество тэга в просмотре Runtime с ожидаемым условием.
Если вложенный символ отсутствует или повреждён, исправьте ссылку на его источник и загрузите обновлённую графику на АРМ.
Ошибки загрузки и восстановления проекта
Если восстановление завершилось ошибкой, запишите её текст, время и этап операции. Проверьте, что выбран архив проекта SAMUTAG и файл полностью скопирован на компьютер. Сохраните исходный архив до успешного восстановления.
Если сообщение указывает на превышение допустимого размера файла, обратитесь к администратору Studio для проверки ограничений загрузки. При повторяющейся ошибке передайте в техническую поддержку версию Studio, текст сообщения и журнал за время операции.
| Сообщение или симптом | Что делать |
|---|---|
| HTTP 413; превышен допустимый размер файла | Проверьте ограничения размера загрузки в Studio и обратном прокси. После согласованного изменения повторите импорт того же архива. |
| Сервер не принял архив, HTTP 404 | Проверьте адрес Studio, маршрутизацию Apache и актуальность установленной версии. Обновите страницу. Сам по себе код 404 не означает превышения размера архива. |
| Internal Server Error / HTTP 500 | Запишите время и номер операции. Найдите исключение в журнале samutag-studio за этот период. Передайте его полный текст в поддержку, если причина не связана с очевидным отказом базы или заполнением диска. |
| Конфликтующие данные; duplicate key; несовместимые связи объектов | Сохраните архив и сведения об объекте из сообщения. Проверьте совместимость версии Studio, при необходимости обновите её и повторите импорт. Не удаляйте строки базы вручную для обхода ошибки. |
| Процесс восстановления прерван | Проверьте перезапуск службы, свободное место и журнал ОС. Перед повтором посмотрите список проектов и состояние последней операции, чтобы не создавать лишние копии. |
История не поступает
- Проверьте, включена ли история у тэга и применён ли актуальный состав параметров.
- Проверьте Runtime: есть ли успешные сканы и подключение к выбранному Historian.
- Проверьте Historian: доступна ли база, завершена ли подготовка схемы, хватает ли места.
- Оцените очередь доставки и счётчики потерь. После восстановления связи дождитесь догрузки.
- Проверьте часы и период запроса, затем наличие восстановленных архивных суток.
Если база Historian не готова к работе, проверьте параметры подключения и права пользователя базы данных. Причина отказа указана в журнале службы. Если исправление настроек не помогло, передайте сообщение в техническую поддержку.
| Сообщение или симптом | Что делать |
|---|---|
| Связь с Historian потеряна | Проверьте службу Historian, её адрес и порт, доступность сети и токен проекта. После устранения причины найдите сообщение «Связь с Historian восстановлена», затем сообщение о доставке всех накопленных файлов. Восстановление связи ещё не означает окончания догрузки. |
| База Historian не готова. Данные не приняты | Проверьте PostgreSQL и параметры подключения Historian. Найдите исходную причину в журнале samutag-historian. Убедитесь, что подготовка базы завершилась и новые пакеты принимаются. |
| UndefinedTable / relation … does not exist | Запишите имя отсутствующей таблицы. Проверьте, что служба подключена к нужной базе, а её роль имеет права подготовки схемы. Проверьте сообщения запуска и версию Historian. Не создавайте таблицу вручную без проверки её структуры. |
| password authentication failed; permission denied | Проверьте имя базы, роль и пароль, правила доступа PostgreSQL и необходимые права роли. Исправьте параметры подключения или права и повторно проверьте готовность базы. |
| Дисковая очередь Historian заполнена; каталог очереди недоступен | Проверьте связь с Historian, доступное место, лимит очереди и права службы на каталог. После исправления контролируйте уменьшение очереди и счётчики потерь. Не удаляйте недоставленные сегменты. |
| История есть, но показана со сдвигом по времени | Сравните часы и часовые пояса Runtime, Historian и браузера, проверьте выбранный период. Не меняйте часы сервера только для визуального совмещения графика. |
Ошибки ввода-вывода и качества тэгов
В просмотре Runtime добавьте проблемный тэг в область «Значения» и сравните его значение, качество и текст ошибки с журналом соответствующего I/O-сервера. Ниже приведены характерные сообщения и порядок проверки.
| Сообщение или симптом | Что делать |
|---|---|
| Неизвестная ссылка I/O: сервер.переменная | Сверьте имя сервера и переменной с картой, назначение I/O-сервера узлу и вычисленное значение ссылки. После исправления сохраните проект и загрузите его на Runtime. |
| Соединение Modbus TCP закрыто до получения ответа | Проверьте доступность контроллера или шлюза, ограничения числа соединений и таймаут простоя на устройстве. При повторении включите DEBUG и сопоставьте запросы с ответами. Успешное повторное чтение должно восстановить обмен. |
| Истёк общий таймаут запроса Modbus; неполный ответ Modbus RTU | Проверьте адрес, порт или последовательный интерфейс, Unit ID, скорость, чётность и стоп-биты. Сравните таймаут со временем ответа устройства. Период опроса и таймаут запроса — разные настройки: ожидание следующего цикла само по себе не является ошибкой чтения. |
| Код функции не совпадает; неверное число регистров; некорректный заголовок | Сверьте протокол, область данных, адресацию от 0 или 1, тип и размер значения с документацией устройства. Проверьте, что выбран нужный шлюз и Unit ID. |
| Запись запрещена настройками I/O-сервера | Проверьте слайдер «Запретить запись». Если сервер предназначен только для чтения, устраните ненужные команды записи в проекте. Разрешайте запись только когда она предусмотрена назначением системы. |
| Нет права активного сервера: запись или обмен I/O запрещены | Проверьте активную сторону резервной пары и её связь с партнёром. Не включайте принудительную запись на обеих сторонах для обхода ограничения. |
| Ошибка чтения OPC UA | Проверьте адрес сервера, режим защиты, сертификаты и реквизиты доступа. Сверьте NodeId и тип переменной с картой сервера. Проверьте чтение после обновления карты и загрузки проекта. |
| Качество периодически становится плохим | Найдите соответствующие ошибки чтения и их частоту. Проверьте сеть, нагрузку устройства и число неудачных попыток в настройках I/O-сервера. После успешного чтения проверьте качество и возврат аварии в норму; увеличение числа попыток не устраняет причину отказов. |
Ошибки Runtime и скриптов
| Сообщение или симптом | Что делать |
|---|---|
| Служба ожидает загрузку проекта / IDLE | Служба запущена, но не выполняет проект. Проверьте назначенные модели и загрузите проект на нужный узел. |
| Runtime-workers ещё не готовы | Проверьте этап запуска и журнал. Если состояние не меняется, найдите ошибку загрузки worker, проверьте память, свободное место и лицензию. Не запускайте несколько одинаковых загрузок одновременно. |
| Неизвестная переменная; несовместимый тип | По полному пути найдите экземпляр, символ или скрипт, затем строку и столбец ошибки. Проверьте имя, тип и контекст this / MyModel, особенно после изменения композиции. Исправьте источник, выполните проверку и повторите загрузку. |
| Превышено максимальное время исполнения скрипта | Проверьте условия завершения циклов и объём вычислений. Сократите работу одного запуска, измерьте длительность и только после этого пересмотрите предел времени. |
| Runtime-worker занят IPC-запросом | Запишите название операции и длительность ожидания. Проверьте журнал worker и I/O-серверов за тот же период, загрузку процессора и задержки устройства. При повторении передайте эти сведения в поддержку. |
| Оценка ёмкости завершилась по таймауту | Посмотрите последний завершённый этап, текущую нагрузку и доступные ресурсы. Повторите оценку при меньшей нагрузке. Предыдущий успешный результат сохраняется, но не подтверждает производительность изменённого проекта. |
После исправления проверьте успешные циклы Runtime, нужные значения и качество тэгов. Отсутствие новых ошибок в узком фильтре не заменяет проверку фактической работы.
Ошибки лицензии и доступа к файлам
| Сообщение или симптом | Что делать |
|---|---|
| Требуется …, доступно … | Проверьте суммарное использование компонента на хосте, включая другие его узлы. Установите лицензию нужной ёмкости либо уменьшите назначенный состав проекта. |
| Достигнут предел операторских подключений | Закройте ненужные сеансы и дождитесь освобождения мест. Проверьте лимит в блоке лицензии АРМ; при необходимости увеличьте его. |
| Лицензия выдана другому хосту | Сформируйте запрос на том компьютере или ВМ, где работает компонент, и передайте его поставщику для выдачи подходящего файла. |
| Лицензия повреждена, подпись неверна или ключ издателя неизвестен | Повторно получите исходный файл от поставщика и проверьте совместимость версии компонента. Не редактируйте содержимое лицензии вручную. |
| Срок лицензии истёк; версия выпущена после окончания права на обновления | Проверьте системную дату и условия выданной лицензии. Обратитесь к поставщику за продлением или совместимым файлом. |
| Unable to open database file; Read-only file system; Permission denied | Определите каталог по полному тексту ошибки. Проверьте существование пути, владельца, права служебного пользователя и разрешённые каталоги systemd. Для лицензирования это обычно /var/lib/samutag-licensing. Исправьте доступ к нужному каталогу, не отключая защиту службы целиком. |
| No space left on device | Проверьте свободное место и inode. Освободите место за счёт согласованной очистки журналов, старых релизов или архивов; сохраните рабочие базы и недоставленные очереди. После этого повторите операцию. |
Порядок получения запроса и установки файла со снимками Studio приведён в разделе «Лицензирование». Если причина не определена, передайте в поддержку версию компонента, полный текст ошибки, время и журнал соответствующего узла.
Резервное копирование
Разделите копирование на три независимые задачи: проект Studio, установка с секретами и исторические данные. Проектный ZIP удобен для переноса и восстановления конфигурации. Копия PostgreSQL Studio и ключей нужна для восстановления среды. Historian требует базы, архивных файлов и конфигурации.
Храните хотя бы одну копию вне диска, на котором работает система. Опишите порядок восстановления и регулярно проверяйте его на отдельной машине. Перед обновлением сделайте свежую копию и запишите версии всех компонентов.
Пример логического резервирования PostgreSQL с запросом пароля, для пользователя с необходимыми правами:
pg_dump -h 127.0.0.1 -U samutag_studio -W -Fc -f studio-backup.dump samutag_studio
pg_dump -h 127.0.0.1 -U samutag_historian -W -Fc -f historian-backup.dump samutag_historian
Подставьте свои имена базы и роли. Для Historian отдельно согласуйте момент копирования каталога архивов: его состояние должно соответствовать базе. Не восстанавливайте тестовую копию поверх действующей системы без отдельного плана.
- Проект StudioЭкспорт конфигурации; при необходимости включите историю изменений.
- Базы данныхОтдельные резервные копии PostgreSQL Studio и Historian.
- Файлы службКонфигурации узлов, лицензии и архивы Historian.
- Контроль восстановленияПроверьте копии на отдельной установке, не подключённой к оборудованию.
Обновление и очистка старых релизов
- Сделайте резервные копии и запишите текущие версии.
- Выберите совместимые дистрибутивы и предусмотрите окно обслуживания.
- Запустите install.sh соответствующего компонента. Сохраните существующие конфигурации и ключи.
- Проверьте состояние служб, подключение, права и лицензию.
- При необходимости повторно загрузите проект на Runtime и HMI и примените конфигурацию Historian.
- После проверки удалите ненужные релизы по предложению установщика. Оставьте предыдущий релиз и резервную копию для восстановления.
Возврат к старому исполняемому каталогу не отменяет уже применённые изменения структуры базы данных. Поэтому старый релиз на диске не является полноценной резервной копией. Для обновления используйте установщик соответствующего дистрибутива.
Для удаления установленного компонента поставка размещает uninstall.sh. Перед запуском изучите предлагаемые действия и сохраните нужные данные. Проверьте отдельно, какие действия относятся к программе, а какие — к её данным.
- ПодготовкаСохраните резервные копии и сведения об установленных версиях.
- УстановкаОбновите выбранный компонент по инструкции его дистрибутива.
- ПроверкаПроверьте запуск службы, соединения, журнал и выполнение проекта.
- ОчисткаУдаляйте прежние релизы после проверки новой установки.
Проверка перед вводом в работу
В тестовой среде проверьте нормальный режим, отказ канала, остановку I/O, переподключение, перезапуск узла и заполнение диска.
- Известные измерения совпадают с контроллером, единицы и масштабирование верны.
- Запись разрешена только нужным пользователям и тэгам; запрет сервера действительно блокирует команды.
- Плохое качество видно оператору и создаёт настроенную аварию.
- Скрипты укладываются в требуемый цикл при максимальной нагрузке.
- История догружается после разрыва связи; старые периоды восстанавливаются из архива.
- Резервная пара испытана при отказе узла и разделении сети.
- Резервная копия восстановлена на отдельной машине и проверена.
По результатам зафиксируйте версии, условия нагрузки, измеренные задержки и ответственных за сопровождение.