Диагностика моделей

Отладка моделей в Рабочем пространстве

Основные понятия

Диагностика модели — это процесс выявления, анализа и устранения формальных ошибок в ходе моделирования.

Отладка модели не предусматривает выявление ошибок исходной логики — это означает, что процесс отладки модели не сможет указать на ошибки в логике построения модели или установке параметров блока.

Некорректно составленная модель не только покажет неточные или неверные результаты, но и может не работать вовсе. В Engee диагностика моделей происходит с помощью двух инструментов рабочего пространства — Отладка и Диагностика. (Подробнее с интерфейсом рабочего пространства можете ознакомиться по ссылке Интерфейс Engee).

Меню отладки

Меню отладки представляет собой часть окна Настройки, находится в левом верхнем углу рабочего пространства Engee и обозначается значком debug article icon 1.

debug article 1

С помощью меню отладки вы можете отобразить информацию о модели и сохранить результаты симуляции в окне переменных img65. Меню отладки состоит из следующих операций:

  • Типы данных — отображает типы данных сигнальных линий между блоками модели. Если в модели присутствует некорректный тип данных, то при выборе функции Типы данных автоматически появится Окно диагностики с указанием ошибки.

    Пример отображения типов данных.

    datatypes function engee

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

    Примеры отображения с разными сигналами.
    • Скалярный сигнал — единичное значение данных, которое не имеет направления и является простейшим типом сигнала:

      example dimension scalar

      scalar_signal = 1 #Пример скалярного сигнала
      
      #Вывод
      1
    • Векторный сигнал — упорядоченный набор данных одного типа, организованный в виде вектора, который имеет направление и может содержать несколько элементов.

      example dimension vector

      vector_signal = [1, 2, 3] #Пример векторного сигнала
      
      #Вывод
      3-element Vector{Int64}:
       1
       2
       3
    • Матричный сигнал — двумерный массив данных, состоящий из строк и столбцов, и может содержать данные различных типов. Матрица может быть использована для представления множества сигналов одновременно.

      example dimension matrix

      matrix_signal = [1:2 2:3 3:4]
      
      #Вывод
      2×3 Matrix{Int64}:
       1  2  3
       2  3  4
  • Частота дискретизации сигнала — отображает частоту дискретизации блоков модели. Мелкий шаг дискретизации может привести к увеличению объема данных, что может замедлить выполнение моделирования. Слишком крупный шаг может привести к потере точности расчета модели. Выберите оптимальный вариант, исходя из вашей модели и целей.

    Пример отображения частоты дискретизации сигнала.

    sample rate 0

    • Выделение цветом — подпункт опции частота дискретизации сигнала позволяет выделить цветом один из следующих вариантов: сигналы с текущей частотой дискретизации, источник сигнала, либо не выделять ничего (выбрано по умолчанию). Дискретные сигналы могут отображаться разными цветами в зависимости от частоты дискретизации сигнала.

      Пример выделения цветом.

      sample rate 1

  • Порядок выполнения блоков — позволяет узнать порядок выполнения блоков в модели. Последовательность выполнения моделей будет отображаться цифрами, где 1 — первый исполняемый блок в модели. Эта опция помогает контролировать последовательность выполнения блоков во избежание нежелательных зависимостей и улучшает читаемость модели.

    Пример порядка выполнения.

    order feature models

  • Сохранение результатов симуляции в рабочую область — позволяет сохранить результаты симуляции модели в рабочую область (окно переменных img65). Подробнее о сохранении результатов симуляции читайте в статье Программная обработка результатов симуляции в Engee.

  • Физические переменные — позволяет записать данные с выбранных блоков. Для записи подходят только блоки из библиотеки физическое моделирование. Нажмите правой кнопкой мыши по блоку, сигнал с которого хотите записать и выберите опцию Записать физические сигналы в контекстном меню:

    physical variables recording 1

    Записанные переменные отображаются в модуле Графики graphs icon 1 и в приложении Инспектор данных.

    Примеры записанных сигналов

    Записанные переменные в модуле Графики:

    graphs variables 1

    Записанные переменные в приложении Инспектор данных:

    data inspector variables 1

Модуль Диагностика модели

В модуль Диагностика модели выводятся системные сообщения, связанные с процессом симуляции. Чтобы открыть раздел, нажмите иконку Диагностика модели.

img28

Нажатие по иконке Диагностики отроет окно диагностики модели. Сообщения в модуле появляются как после запуска симуляции модели, так и во время работы с ней.

img28a

Диагностические сообщения

Типы диагностических сообщений

В окне диагностики предоставляются различные типы диагностических сообщений, включая предупреждения, ошибки и информационные сообщения. Знание этих типов помогает быстро локализовать и решить проблемы. Всего в Engee используются три типа сообщений:

  • img29 синие — информационные

  • img31 желтые — предупреждения

  • img30 красные — ошибки

Ошибки (errors) не позволят в дальнейшем работать с моделью до тех пор, пока не будут устранены.

Структура сообщений об ошибках

Модуль диагностики модели в Engee позволяет не только оповестить об ошибке, но и показать ее структуру. Рассмотрим структуру типовой ошибки в модуле диагностики модели на основе ошибки неподключенных портов блоков Unconnected Port:

error reading 1

Данную ошибку можно условно разбить на 3 пункта:

  1. Ключ (ключевое слово) ошибки, указывающее к какому типу ошибки относится текущая проблема. В данном случае это тип CompositeException, который используется для объединения нескольких ошибок.

  2. В строке кода ("port 'root/Terminator:main_in' is not connected") указано, что порт блока Terminator не был подключен. Неподключенные блоки не позволяют запустить симуляцию модели и показывают ошибку. main_in означает, что у блока не подключен главный входной порт.

  3. В строке кода ("port 'root/Add:main_out' is not connected") указано, что порт блока Add не был подключен. В данном случае речь идет о main_out или же главном выходном порте.

Сообщение модуля диагностики не указывает на другие ошибки, поэтому делаем вывод, что ошибка возникает из-за отсутствия сигнальной линии между блоками Terminator и Add. Проведем сигнальную линию с выходного порта Add к входному порту Terminator для решения проблемы.

Частые ошибки и способы их устранения

Модуль диагностики отображает ошибки, связанные с моделью. Рассмотрим наиболее частые из них:

  • Algebraic Loop — эта ошибка возникает при образовании замкнутых алгебраических циклов, называемых петлями. Петля — это замкнутый цикл, в котором сигнал влияет сам на себя.

    Пример петли.

    Рассмотрим пример на основе модели с блоком Add. На вход блока Add подается сигнал с его выхода, что приводит к образованию замкнутого цикла (петли) и ошибки Algebraic Loop.

    algebraic loop article

    Решение: решением проблемы будет корректное подключение сигнальных линий, в котором блок Add не будет замыкаться сам на себе. Перейдите к блоку с ошибкой алгебраической петли и исправьте ее, поставив сигнальную линию корректно или добавив блок Delay в обратный сигнал.

    Пример ошибки Algebraic Loop.

    algebraic loop error 1

    В данном примере в части кода ("Found algebraic loop(s). Loop 1 containing block(s): Add;") указано, что количество замкнутых циклов равно одному, а блок с ошибкой – это Add. Добавление блока Delay решит проблему:

    algebraic loop article 2

  • UndefVarError(:json) — эта ошибка указывает на то, что в модели остались неподключенные сигнальные линии. Ошибка возникает, если сигнальная линия была перемещена вручную или блок видоизменился, (входов/выходов стало больше/меньше) и оставил сигнальные линии неподключенными.

    Решение: удалите сигнальную линию или скорректируйте модель, подсоединив сигнальные линии к портам блока. Удалите лишние блоки при необходимости.

    Пример ошибки UndefVarError(:json).

    Неподключенная сигнальная линия имеет вид красной пунктирной линии:

    undefvarerror error 2

    Модуль диагностики для этой модели выдает следующую ошибку:

    undefvarerror error 1

  • ArgumentError — эта ошибка указывает на то, что аргументы неверны и нет более конкретного исключения (exception). В общем случае, ошибка может включать в себя передачу неверного типа данных, неверного числа аргументов или других проблем с передачей значений между блоками модели в Engee.

    Исключение — событие или объект, представляющий ошибку, возникающую в процессе выполнения программы.

    Решение: устраните ошибку, препятствующую работе блока.

    Пример ошибки ArgumentError.

    argumenterror error 1

    В примере выводится ошибка ArgumentError, которая не устранена. В данном случае аргумент — это значение, которое передается в логический оператор (Logical Operator). При этом оператору необходимо, чтобы его аргументы были вещественного типа данных. Решением текущей проблемы будет замена некорректного типа данных на вещественный.

  • KeyError(:attributes) — эта ошибка указывает на то, что обращение к конкретной информации о модели невозможно. Ошибка возникает, если в модели есть другая неустраненная ошибка и вы пытаетесь выполнить какое-либо действие с моделью в меню отладки debug article icon 1 или запустить модель img12.

    Решение: устраните основную ошибку, тогда ошибка KeyError(:attributes) автоматически исчезнет.

    Пример ошибки KeyError(:attributes).

    keyerror error 1

    В данном примере выводится ошибка Unconnected Port, которая не устранена.

  • ErrorException — эта ошибка указывает на то, что в блоке возникло общее исключение. ErrorException используется, когда код возвращает ошибку, которая не является конкретным случаем другого типа ошибки (не является Unconnected Port, UndefVarError(:json), ArgumentError или другими частными типами ошибок).

    Решение: устраните ошибку, препятствующую работе блока.

    Пример ошибки ErrorException.

    errorexception error 1

    В ошибке указывается, что возникла проблема в блоке кода, связанном с операцией дискретизации сигнала (downsampling). Текст ошибки говорит о том, что все времена отсчетов (sample times) для блока Downsample должны быть дискретными, а непрерывные времена отсчетов не допускаются.

    В контексте обработки ошибок Julia, ErrorException используется для представления различных видов ошибок, которые могут возникнуть в Engee. Например, это может быть ошибкой в синтаксисе кода, недопустимым обращением к переменной, делением на ноль и т.д. В нашем примере ошибка в дискретизации сигнала не является каким-то конкретным типом ошибок в Julia, поэтому ей и был присвоен общий тип ErrorException.
  • CompositeException — эта ошибка указывает на то, что в блоке возникло одно или несколько исключений. Тип исключения Composite используется для объединения нескольких исключений в одно. Если несколько исключений происходят одновременно, они могут быть помещены в CompositeException, чтобы передать все ошибки одновременно.

    Решение: устраните ошибку/ошибки, препятствующие работе блока.

    Пример ошибки CompositeException.

    compositeexception error 1

    В ошибке указывается, что есть две проблемы:

    • Первая проблема связана с парсингом (сбором информации) блока 2-D Lookup Table (двумерная таблица).

    • Вторая проблема указывает на текст "[4 5 6; 16 19 20; 10 18 2", в которой произошла ошибка в связи с матрицей типа Matrix{<:Number}.

    При этом первая ошибка логически вытекает из второй, поскольку ошибка связи блока не позволит произвести корректный сбор информации. Решением текущей проблемы будет добавление отсутствующей квадратной скобки в параметры блока 2-D Lookup Table для восстановления связи с матрицей. Корректный вариант — [4 5 6; 16 19 20; 10 18 2].

CompositeException и ErrorException в Julia представляют два разных подхода к обработке ошибок:

  • CompositeException — объединяет несколько исключений в одно, если ошибки возникают одновременно.

  • ErrorException — общий тип исключения, используемый для представления ошибок без конкретизации их типов (без дополнительных деталей о причинах или характерах).