Skip to main content

Отладка 4diac приложений

Уровни логирования FORTE

# Запуск с подробным логированием
forte --loglevel DEBUG

# Уровни: FATAL, ERROR, WARNING, INFO, DEBUG, TRACE

Лог FORTE

[INFO]  Starting 4diac FORTE Runtime
[INFO] Waiting for connections on port 61499
[DEBUG] FB E_CYCLE: Event EO triggered
[DEBUG] FB MY_FB: Algorithm MAIN executed
[ERROR] Connection failed: timeout

Типичные проблемы и решения

FB не получает события

Причина: Неправильное соединение или FB не запущен.

Решение:

  1. Проверьте Watch Mode — есть ли события на выходе источника?
  2. Убедитесь, что ресурс запущен (зелёный статус)
  3. Проверьте маппинг FB на правильный ресурс

Данные не обновляются

Причина: Событие приходит, но данные не сопровождают его.

Решение: В IEC 61499 данные передаются только вместе с событием. Убедитесь, что соединения по данным привязаны к нужным событиям через With ассоциации.

FORTE падает при старте ресурса

Причина: Ошибка в алгоритме или неправильный тип данных.

Решение:

# Смотрим детальный лог
forte --loglevel DEBUG 2>&1 | grep ERROR

Проблема производительности

# Профилирование на Linux
perf record -g ./forte
perf report

Мониторинг событий и данных (Event/Data Flow)

Трассировка событий

В Debug Perspective можно отслеживать поток событий через FB-сеть:

  1. Правый клик на FB → Watch All — показывает все входы/выходы
  2. Счётчики событий показывают количество срабатываний каждого события
  3. Значения данных обновляются в реальном времени

Анализ event-data ассоциаций

Частая ошибка: данные не обновляются, хотя событие приходит.

Симптом: OUT всегда = 0, хотя EO срабатывает
Причина: Нет WITH-ассоциации между EO и OUT

Проверка:
1. Откройте определение типа FB (Ctrl+клик на имени типа)
2. Проверьте вкладку Interface → WITH-connections
3. Убедитесь, что выходное событие связано с выходными данными

Принудительное задание значений

В Debug Perspective:

  • Force Value — задать фиксированное значение входу данных
  • Trigger Event — вручную сгенерировать входное событие

Это позволяет тестировать отдельные FB без полной развёрнутой системы.

Удалённая отладка через IDE

Пошаговая настройка

  1. Убедитесь, что FORTE запущен на целевом устройстве (Ларус-100 или ПК)
  2. В 4diac IDE: Run → Debug Configurations → 4diac Remote Debug
  3. Создайте новую конфигурацию:
    • Host: IP-адрес устройства
    • Port: 61499 (порт управления FORTE)
  4. Нажмите Debug
  5. Переключитесь в Debug Perspective
  6. Правый клик на системе → Monitor System

Точки останова (Breakpoints)

Точки останова можно устанавливать на:

  • Переходах ECC — выполнение приостановится перед переходом
  • Алгоритмах — приостановка перед выполнением алгоритма
caution

Точки останова останавливают весь ресурс, а не отдельный FB. Все FB в том же ресурсе прекратят выполнение.

Watches View

Окно Watches View показывает:

  • Текущие значения отслеживаемых переменных
  • Счётчики событий
  • Статус соединения с устройством

Для добавления: правый клик на переменной → Watch, или на FB → Watch All.

note

Удалённая отладка замедляет выполнение — не использовать в продакшне.

Replay Debugger

4diac IDE поддерживает воспроизведение записанных сессий отладки.

Настройка Replay Debugger

  1. Запись: включите запись событий в Debug Perspective (кнопка Record)
  2. Выполните сценарий, который нужно проанализировать
  3. Остановка: нажмите Stop Recording
  4. Воспроизведение: откройте записанный файл, используйте кнопки Play/Pause/Step
  5. Анализируйте поток событий и значения данных пошагово

Воспроизведение записанной сессии

Replay Debugger полезен для:

  • Анализа редко возникающих ошибок
  • Демонстрации работы системы
  • Обучения и документирования

Примеры анализа проблем

Пример 1: E_CYCLE не генерирует события

Лог FORTE:
[INFO] Starting 4diac FORTE Runtime
[INFO] Waiting for connections on port 61499
[DEBUG] Resource EMB_RES: COLD event triggered
[DEBUG] FB E_CYCLE: START received
...
(нет строк о EO)

Диагностика:

  1. Проверьте, задано ли значение DT (по умолчанию = 0, события не генерируются)
  2. Убедитесь, что START соединён с COLD или WARM ресурса
  3. Попробуйте DT = T#1s для начала

Пример 2: Modbus CLIENT не читает данные

Лог FORTE:
[ERROR] FB CLIENT_1_0: modbus connection failed: Connection refused
[DEBUG] FB CLIENT_1_0: retrying in 5s...

Диагностика:

  1. Проверьте IP-адрес и порт (502) устройства
  2. Пинг устройства: ping 192.168.1.100
  3. Проверьте порт: nc -zv 192.168.1.100 502
  4. Убедитесь, что Unit ID правильный
  5. Проверьте формат ID: modbus[ip:port, uid, func, addr, count]

Пример 3: OPC UA SUBSCRIBE не получает обновления

Лог FORTE:
[INFO] OPC UA: Connected to opc.tcp://server:4840
[INFO] OPC UA: Subscription created, id=1
[DEBUG] OPC UA: MonitoredItem created for ns=2;s=Temp
...
(нет IND событий)

Диагностика:

  1. Убедитесь, что значение на сервере действительно меняется
  2. Проверьте sampling interval (по умолчанию 100 мс)
  3. Проверьте deadband — значение может не превышать порог
  4. Попробуйте READ вместо SUBSCRIBE для проверки доступности узла

Следующие шаги