Диагностика моделей
Отладка моделей в Рабочем пространстве
Основные понятия
Диагностика модели — это процесс выявления, анализа и устранения формальных ошибок в ходе моделирования.
Отладка модели не предусматривает выявление ошибок исходной логики — это означает, что процесс отладки модели не сможет указать на ошибки в логике построения модели или установке параметров блока. |
Некорректно составленная модель не только покажет неточные или неверные результаты, но и может не работать вовсе. В Engee диагностика моделей происходит с помощью двух инструментов рабочего пространства — Отладка и Диагностика. (Подробнее с интерфейсом рабочего пространства можете ознакомиться по ссылке Интерфейс Engee).
Меню отладки
Меню отладки представляет собой часть окна Настройки, находится в левом верхнем углу рабочего пространства Engee и обозначается значком .
С помощью меню отладки вы можете отобразить информацию о модели и сохранить результаты симуляции в окне переменных . Меню отладки состоит из следующих операций:
-
Типы данных — отображает типы данных сигнальных линий между блоками модели. Если в модели присутствует некорректный тип данных, то при выборе функции Типы данных автоматически появится Окно диагностики с указанием ошибки.
Пример отображения типов данных.
-
Размерности сигналов — отображает размерности сигнальных линий между блоками модели. Сигналы моделей могут быть скалярными, векторными и матричными.
Примеры отображения с разными сигналами.
-
Скалярный сигнал — единичное значение данных, которое не имеет направления и является простейшим типом сигнала:
scalar_signal = 1 #Пример скалярного сигнала #Вывод 1
-
Векторный сигнал — упорядоченный набор данных одного типа, организованный в виде вектора, который имеет направление и может содержать несколько элементов.
vector_signal = [1, 2, 3] #Пример векторного сигнала #Вывод 3-element Vector{Int64}: 1 2 3
-
Матричный сигнал — двумерный массив данных, состоящий из строк и столбцов, и может содержать данные различных типов. Матрица может быть использована для представления множества сигналов одновременно.
matrix_signal = [1:2 2:3 3:4] #Вывод 2×3 Matrix{Int64}: 1 2 3 2 3 4
-
-
Частота дискретизации сигнала — отображает частоту дискретизации блоков модели. Мелкий шаг дискретизации может привести к увеличению объема данных, что может замедлить выполнение моделирования. Слишком крупный шаг может привести к потере точности расчета модели. Выберите оптимальный вариант, исходя из вашей модели и целей.
Пример отображения частоты дискретизации сигнала.
-
Выделение цветом — подпункт опции частота дискретизации сигнала позволяет выделить цветом один из следующих вариантов: сигналы с текущей частотой дискретизации, источник сигнала, либо не выделять ничего (выбрано по умолчанию). Дискретные сигналы могут отображаться разными цветами в зависимости от частоты дискретизации сигнала.
Пример выделения цветом.
-
-
Порядок выполнения блоков — позволяет узнать порядок выполнения блоков в модели. Последовательность выполнения моделей будет отображаться цифрами, где 1 — первый исполняемый блок в модели. Эта опция помогает контролировать последовательность выполнения блоков во избежание нежелательных зависимостей и улучшает читаемость модели.
Пример порядка выполнения.
-
Сохранение результатов симуляции в рабочую область — позволяет сохранить результаты симуляции модели в рабочую область (окно переменных ). Подробнее о сохранении результатов симуляции читайте в статье Программная обработка результатов симуляции в Engee.
-
Физические переменные — позволяет записать данные с выбранных блоков. Для записи подходят только блоки из библиотеки физическое моделирование. Нажмите правой кнопкой мыши по блоку, сигнал с которого хотите записать и выберите опцию Записать физические сигналы в контекстном меню:
Записанные переменные отображаются в модуле Графики и в приложении Инспектор данных.
Примеры записанных сигналов
Записанные переменные в модуле Графики:
Записанные переменные в приложении Инспектор данных:
Модуль Диагностика модели
В модуль Диагностика модели выводятся системные сообщения, связанные с процессом симуляции. Чтобы открыть раздел, нажмите иконку Диагностика модели.
Нажатие по иконке Диагностики отроет окно диагностики модели. Сообщения в модуле появляются как после запуска симуляции модели, так и во время работы с ней.
Диагностические сообщения
Типы диагностических сообщений
В окне диагностики предоставляются различные типы диагностических сообщений, включая предупреждения, ошибки и информационные сообщения. Знание этих типов помогает быстро локализовать и решить проблемы. Всего в Engee используются три типа сообщений:
-
синие — информационные
-
желтые — предупреждения
-
красные — ошибки
Ошибки (errors) не позволят в дальнейшем работать с моделью до тех пор, пока не будут устранены. |
Структура сообщений об ошибках
Модуль диагностики модели в Engee позволяет не только оповестить об ошибке, но и показать ее структуру. Рассмотрим структуру типовой ошибки в модуле диагностики модели на основе ошибки неподключенных портов блоков Unconnected Port:
Данную ошибку можно условно разбить на 3 пункта:
-
Ключ (ключевое слово) ошибки, указывающее к какому типу ошибки относится текущая проблема. В данном случае это тип CompositeException, который используется для объединения нескольких ошибок.
-
В строке кода ("port 'root/Terminator:main_in' is not connected") указано, что порт блока Terminator не был подключен. Неподключенные блоки не позволяют запустить симуляцию модели и показывают ошибку. main_in означает, что у блока не подключен главный входной порт.
-
В строке кода ("port 'root/Add:main_out' is not connected") указано, что порт блока Add не был подключен. В данном случае речь идет о main_out или же главном выходном порте.
Сообщение модуля диагностики не указывает на другие ошибки, поэтому делаем вывод, что ошибка возникает из-за отсутствия сигнальной линии между блоками Terminator и Add. Проведем сигнальную линию с выходного порта Add к входному порту Terminator для решения проблемы.
Частые ошибки и способы их устранения
Модуль диагностики отображает ошибки, связанные с моделью. Рассмотрим наиболее частые из них:
-
Algebraic Loop — эта ошибка возникает при образовании замкнутых алгебраических циклов, называемых петлями. Петля — это замкнутый цикл, в котором сигнал влияет сам на себя.
Пример петли.
Рассмотрим пример на основе модели с блоком Add. На вход блока Add подается сигнал с его выхода, что приводит к образованию замкнутого цикла (петли) и ошибки Algebraic Loop.
Решение: решением проблемы будет корректное подключение сигнальных линий, в котором блок Add не будет замыкаться сам на себе. Перейдите к блоку с ошибкой алгебраической петли и исправьте ее, поставив сигнальную линию корректно или добавив блок Delay в обратный сигнал.
Пример ошибки Algebraic Loop.
В данном примере в части кода ("Found algebraic loop(s). Loop 1 containing block(s): Add;") указано, что количество замкнутых циклов равно одному, а блок с ошибкой – это Add. Добавление блока Delay решит проблему:
-
UndefVarError(:json) — эта ошибка указывает на то, что в модели остались неподключенные сигнальные линии. Ошибка возникает, если сигнальная линия была перемещена вручную или блок видоизменился, (входов/выходов стало больше/меньше) и оставил сигнальные линии неподключенными.
Решение: удалите сигнальную линию или скорректируйте модель, подсоединив сигнальные линии к портам блока. Удалите лишние блоки при необходимости.
Пример ошибки UndefVarError(:json).
Неподключенная сигнальная линия имеет вид красной пунктирной линии:
Модуль диагностики для этой модели выдает следующую ошибку:
-
ArgumentError — эта ошибка указывает на то, что аргументы неверны и нет более конкретного исключения (exception). В общем случае, ошибка может включать в себя передачу неверного типа данных, неверного числа аргументов или других проблем с передачей значений между блоками модели в Engee.
Исключение — событие или объект, представляющий ошибку, возникающую в процессе выполнения программы. Решение: устраните ошибку, препятствующую работе блока.
Пример ошибки ArgumentError.
В примере выводится ошибка ArgumentError, которая не устранена. В данном случае аргумент — это значение, которое передается в логический оператор (Logical Operator). При этом оператору необходимо, чтобы его аргументы были вещественного типа данных. Решением текущей проблемы будет замена некорректного типа данных на вещественный.
-
KeyError(:attributes) — эта ошибка указывает на то, что обращение к конкретной информации о модели невозможно. Ошибка возникает, если в модели есть другая неустраненная ошибка и вы пытаетесь выполнить какое-либо действие с моделью в меню отладки или запустить модель .
Решение: устраните основную ошибку, тогда ошибка KeyError(:attributes) автоматически исчезнет.
Пример ошибки KeyError(:attributes).
В данном примере выводится ошибка Unconnected Port, которая не устранена.
-
ErrorException — эта ошибка указывает на то, что в блоке возникло общее исключение. ErrorException используется, когда код возвращает ошибку, которая не является конкретным случаем другого типа ошибки (не является Unconnected Port, UndefVarError(:json), ArgumentError или другими частными типами ошибок).
Решение: устраните ошибку, препятствующую работе блока.
Пример ошибки ErrorException.
В ошибке указывается, что возникла проблема в блоке кода, связанном с операцией дискретизации сигнала (downsampling). Текст ошибки говорит о том, что все времена отсчетов (sample times) для блока Downsample должны быть дискретными, а непрерывные времена отсчетов не допускаются.
В контексте обработки ошибок Julia, ErrorException используется для представления различных видов ошибок, которые могут возникнуть в Engee. Например, это может быть ошибкой в синтаксисе кода, недопустимым обращением к переменной, делением на ноль и т.д. В нашем примере ошибка в дискретизации сигнала не является каким-то конкретным типом ошибок в Julia, поэтому ей и был присвоен общий тип ErrorException. -
CompositeException — эта ошибка указывает на то, что в блоке возникло одно или несколько исключений. Тип исключения Composite используется для объединения нескольких исключений в одно. Если несколько исключений происходят одновременно, они могут быть помещены в CompositeException, чтобы передать все ошибки одновременно.
Решение: устраните ошибку/ошибки, препятствующие работе блока.
Пример ошибки CompositeException.
В ошибке указывается, что есть две проблемы:
-
Первая проблема связана с парсингом (сбором информации) блока 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 представляют два разных подхода к обработке ошибок:
|