Программная обработка результатов симуляции в Engee
В этой статье мы расскажем, как сохранять результаты симуляций с помощью переменной simout
. Рассмотрим работу с переменной на основе простого примера — вывода синусоиды при помощи блока Sine Wave.
По умолчанию переменная
|
Переменная simout в Engee: интеграция и взаимодействие
Создайте модель, используя блоки Sine Wave и Terminator. Для этого разместите их на рабочей области, соедините сигнальной линией и включите запись сигнала с помощью контекстного меню сигнальной линии. (см. здесь).
В этом примере все параметры (решатель и параметры блока Sin Wave) — остаются по умолчанию. График симуляции синусоидального сигнала отобразится в окне графиков.
Включите запись сигналов при соединении блоков на тех выводах, для которых требуется получить информацию. |
Если схема собрана правильно, то результат симуляции будет отображен на графике. После окончания симуляции переменная simout
будет автоматически создана в рабочей области Engee.
Переменная simout
формирует DataFrame – структуру данных, представленную в виде таблицы. Ячейки этой таблицы автоматически заполняются данными результатов симуляции. Для удобства сохраните таблицу в формате CSV (в примере названа result.csv
).
К переменной simout
можно обратиться двумя способами:
-
Напрямую к DataFrame переменной
simout
через вызов столбцовtime
(время) иvalue
(значение). -
Используя команду
collect
для сохранения результатов симуляции в новую переменную и обращение к ней.
Рассмотрим оба варианта. Для обращения к переменной напрямую, используем следующий код и поочередно вызовем значения и время из таблицы DataFrame:
simout["newmodel_1/Sine Wave.1"].value[:] # выведет все значения таблицы из DataFrame
Вывод
1001-element Vector{Any}:
0.0
0.009999833334166664
0.01999866669333308
0.02999550020249566
0.03998933418663416
0.04997916927067833
0.059964006479444595
0.06994284733753277
0.0799146939691727
0.08987854919801104
0.09983341664682815
0.10977830083717481
0.11971220728891936
⋮
-0.44862125384280294
-0.4575358937753214
-0.4664047804997409
-0.4752270271347798
-0.48400175146312646
-0.49272807601966023
-0.5014051281791974
-0.5100320402437544
-0.5186079495293108
-0.527131998452086
-0.5356033346142913
-0.5440211108893698
После обращения к значениям simout
напрямую, аналогично обратитесь к значениям времени:
simout["newmodel_1/Sine Wave.1"].time[:] # выведет все значения времени из таблицы DataFrame
Вывод
1001-element Vector{Any}:
0.0
0.01
0.02
0.03
0.04
0.05
0.06
0.07
0.08
0.09
0.1
0.11
0.12
⋮
9.89
9.9
9.91
9.92
9.93
9.94
9.95
9.96
9.97
9.98
9.99
10.0
Прямое обращение к simout
полезно, когда значение переменной нужно просто получить или использовать в выражениях без дополнительной обработки или изменения.
Теперь рассмотрим обращение через collect
и создание новой переменной. Команда collect
сохраняет результаты симуляции в оперативную память Engee. collect
собирает данные с переменной simout
и сохраняет их в новую переменную. Для выполнения команды создайте переменную (в этом примере result
) и сохраните результаты симуляции, введя следующий код в командную строку:
result = collect(simout["newmodel_1/Sine Wave.1"])
где:
-
result
– имя переменной, в которую сохраняются данные о симуляции (может быть переименована). -
newmodel_1
– имя текущей модели. -
Sin Wave
– имя блока, который выдает данные. -
1
– номер порта, с выхода которого считываются значения для переменнойsimout
и к которому добавлена запись сигнала.
Полученный результат можно наблюдать в виде таблицы в командной строке.
Далее запишите данные о проведенной симуляции в файл формата CSV. Данные внутри переменной result
сохраните в CSV-файл result.csv
с помощью следующих команд:
using CSV
CSV.write("result.csv", result)
где:
-
using CSV
– строка, указывающая, что код будет использовать функциональность из библиотеки CSV. В Julia ключевое словоusing
используется для импорта функций и типов из пакетов. -
CSV.write("result.csv", result)
– выполняет запись данных в файл формата CSV. ФункцияCSV.write
принимает два аргумента: файл в формате CSV "result.csv" и переменнуюresult
. В итоге код берет переменнуюresult
и записывает ее содержимое в файл "result.csv" в формате CSV.
Полученные результаты сохранены в файле "result.csv", который отображается в файловом браузере.
В полученном CSV-файле представлены численные результаты работы блока Sin Wave с заданными параметрами (в этом примере по умолчанию). Результаты представлены в виде столбцов time и value, где к каждому моменту времени соответствует значение симуляции блока Sin Wave.
CSV-файл с результатами симуляции также можно получить с помощью блока To CSV. |
Можно убедиться в корректности сохранения данных в переменной simout
визуально, отобразив график в командной строке или редакторе скриптов:
using Plots
plot(result.time, result.value)
Полученный график будет совпадать с тем, что был получен ранее в окне графиков:
Таким образом, статья демонстрирует как легко сохранять результаты симуляций помощью переменной simout
и нескольких строчек кода. Такой подход прост в применении и обеспечивает сохранность данных симуляции в удобном и универсальном формате CSV.