Работа с файлами CSV: экспорт и импорт результатов моделирования#

 При моделировании часто возникает необходимость сохранить результаты расчёта для последующего анализа в других программах (Exel, Python) или, наоборот, подать в модель внешние данные - например, реальные сигналы с датчиков, табличные зависимости, полученные ранее результаты расчета модели. Для этого в REPEAT VISION предусмотрены блоки Экспорт CSV и Импорт CSV.

CSV (Comma‑Separated Values) – простой текстовый формат, в котором значения разделены запятыми или точкой с запятой, а первая строка обычно содержит заголовки столбцов.

 CSV-файлы часто используются для:

• обмена данными между моделями;

• загрузки экспериментальных измерений;

• подготовки тестовых воздействий;

• постобработки результатов в Python, Excel.

 В данном уроке мы построим модель с двумя периодическими сигналами (синусоида и прямоугольные импульсы), экспортируем их в CSV‑файл, а затем импортируем этот файл обратно в модель, изменяя настройки интерполяции и экстраполяции. Это позволит понять:

• как задавать количество записываемых данных;

• как управлять дискретизацией;

• как влияют разные типы интерполяции и экстраполяции при импорте.

 Пример графика импортированного при помощи CSV блока, рис. 1:

Рис. 1 Пример графика, импортированного при помощи CSV блока

Рис. 1 Пример графика, импортированного при помощи CSV блока#

1.  Постановка задачи#

 Создать модель с двумя источниками периодических сигналов:

  • синусоидальный: амплитуда 1, частота 1 [Гц];

  • прямоугольные импульсы: амплитуда 1, частота 1 [Гц], скважность 50%.

 Время расчёта – 1.25 [с], шаг интегрирования – 0.001 [с].

 Эти сигналы подаются на блок Экспорт CSV, который сохраняет их в файл с заданными заголовками и выбранной дискретизацией.

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

2.  Создание и настройка проекта#

 Создайте новый проект, назовите его, например, CSV_пример.

 Установите следующие настройки для проекта (см. рис. 2 ниже):

  1. Отключите параметр Синхронизация с реальным временем;

  2. Установите Время моделирования - 1.25 [c];

  3. Установите Шаг интегрирования - 1 [мс];

  4. Установите Шаг дискретизации - 1 [мс].

Важно

В REPEAT VISION десятичные числа задаются через точку.

Рис. 2 Настройка проекта

Рис. 2 Настройка проекта#

3.  Создание источников сигналов#

 Из библиотеки Автоматика раздела Источники добавьте два генератора и установите им следующие значения свойств:

Рис. 3 Добавление и настройка генератора синусоиды

Рис. 3 Добавление и настройка генератора синусоиды#

Рис. 4 Добавление и настройка генератора импульсов

Рис. 4 Добавление и настройка генератора импульсов#

4.  Построение графиков#

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

  1. Открыть вкладку Визуализация, расположенную на нижней панели слева;

  2. Нажать ЛКМ на кнопку Добавить;

  3. В выпадающем списке для построения первого графика выбрать Генератор синусоидального сигнала [1];

Рис. 5 Добавление первого графика

Рис. 5 Добавление первого графика#

  1. Нажать ЛКМ на кнопку Добавить, расположенную в правом нижнем углу;

  2. В выпадающем списке для построения второго графика выбрать Генератор прямоугольных импульсов [2].

Рис. 6 Добавление второго графика

Рис. 6 Добавление второго графика#

 Затем необходимо запустить расчёт для получения следующих графиков, рис. 7:

Рис. 7 Графики созданных сигналов

Рис. 7 Графики созданных сигналов#

 Модель готова для работы с блоками CSV.

5.  Добавление и подключение блока «Экспорт CSV»#

 Из раздела Внешние модели добавьте блок Экспорт CSV (см. рис. 8 ниже).

 Затем подключим блок Экспорт CSV согласно рис. 8:

Рис. 8 Добавление и подключение блока Экспорт CSV

Рис. 8 Добавление и подключение блока Экспорт CSV#

6.  Настройка блока «Экспорт CSV»#

6.1.  Настройка дискретизации#

 В свойствах блока найдите Тип задания дискретизации. Возможны три варианта свойства:

Тип

Принцип работы

Пример

Децимация фундаментальной частоты дискретизации проекта

Записывает каждую N-ю точку

Если шаг расчёта = 0.001 [с], а децимация N = 100, то в файл попадёт точка каждые 0.1 [с]

Период дискретизации

Запись происходит строго через указанный промежуток времени. Это самый простой и понятный способ.

При периоде = 0.05 [с] запись точки производится каждые 50 [мс]

Частота дискретизации

Работает, как и период, но через формулу Период = 1 / Частота

Частота = 20 [Гц] → запись каждые 0.05 [с]

 Оставляем стандартные настройки, когда выбрана Децимация фундаментальной частоты дискретизации проекта и установлен Коэффициент децимации = 1 (в .csv файл запишутся все точки).

6.2.  Настройка заголовков столбцов#

 Свойство Тип задания заголовков имеет следующие значения:

  • Автоматическое - блок сам создаст заголовки;

  • Пользовательское - позволяет ввести собственные имена столбцов (через точку с запятой).

 Выберите значение Пользовательское и в свойстве Заголовки введите строку: sin; square.

 В итоге блок Экспорт CSV будет настроен аналогично рис. 9:

Рис. 9 Настройка блока Экспорт CSV

Рис. 9 Настройка блока Экспорт CSV#

7.  Запуск расчёта и проверка#

 Запустите модель на расчет. После завершения расчета в блоке Экспорт CSV нажмите кнопку Скачать - .csv файл сформируется и загрузится в вашу папку загрузок браузера, рис. 10:

Рис. 10 Скачивание результатов расчета

Рис. 10 Скачивание результатов расчета#

 При открытии скаченного файла .csv вы должны увидеть три столбца: t(время), sin(значения синуса), square(значения прямоугольного сигнала), рис. 11:

Рис. 11 Полученный .csv файл

Рис. 11 Полученный .csv файл#

 Для удобства чтения имени файла переименуем полученный CSV в resultsDecim1, рис. 12:

Рис. 12 Переименованный файл

Рис. 12 Переименованный файл#

8.  Блок «Импорт CSV» - чтение и воспроизведение сигналов#

 Теперь загрузим сохранённые данные обратно в модель. Для этого из библиотеки Внешние модели добавим блок Импорт CSV. Автоматически откроется окно загрузки .csv файла (см. рис. 13 ниже), в которое необходимо загрузить последний экспортированный CSV.

Рис. 13 Импорт файла

Рис. 13 Импорт файла#

 После успешной загрузки и инициализации нажимаем кнопку Добавить (см. рис. 14 ниже), чтобы блок появился на холсте, (см. рис. 15 ниже).

Рис. 14 Успешная загрузка .csv файла

Рис. 14 Успешная загрузка .csv файла#

Рис. 15 Блок добавлен на схему

Рис. 15 Блок добавлен на схему#

9.  Свойства блока «Импорт CSV»#

9.1.  Настройка интерполяции#

 Параметр Тип интерполяции определяет, как восстанавливаются значения между точками, сохранёнными в CSV:

  • Линейная - значения соединяются прямыми линиями. Используется по умолчанию. При достаточно малом шаге записи линейная интерполяция позволяет с высокой точностью восстановить исходный сигнал.

  • Кривая (кубическая сплайн-интерполяция) - строит плавную кривую через все точки.

Примечание

Оставляем значение по умолчанию

9.2.  Настройка экстраполяции#

 Параметр Тип экстраполяции определяет поведение выхода, когда время моделирования выходит за пределы временного диапазона, указанного в CSV-файле (например, файл содержит данные до 1.25 [с], а расчёт идёт до 2 [с]):

  • Ближайшее значение - выход сохраняет последнее значение файла;

  • Линейная - продолжает линию, построенную по последним двум точкам;

  • Установить в ноль - за пределами файла выход становится равным 0;

  • Без экстраполяции - блок создает ошибку, когда происходит расчет “дальше” последнего значения файла.

Примечание

Оставляем значение по умолчанию

10.  Подключение и запуск#

 Выберите выходные сигналы блока Импорт CSV для построения графиков во вкладке Визуализация. Запустите расчёт.

 На графике (см. рис. 16 ниже) должны в точности повториться исходные сигналы: синусоида и прямоугольный импульс (если экспорт был с децимацией 1 и импорт с линейной интерполяцией).

Рис. 16 Значения сигналов блока

Рис. 16 Значения сигналов блока#

 Импортированные сигналы практически совпадают с исходными, рис. 17:

Рис. 17 Совмещенные графики

Рис. 17 Совмещенные графики#

11.  Эксперименты с настройками#

 Исследуем варианты настроек блока Импорт CSV на основе построенного синусоидального сигнала.

11.1.  Влияние децимации при экспорте#

 Повторно создадим .csv файл с другим коэффициентом децимации. Изменим в блоке Экспорт CSV коэффициент децимации на 100 (см. рис. 18 ниже), остальные свойства оставим по умолчанию. Запустим расчёт заново (источники должны быть подключены).

Рис. 18 Увеличение коэффициента децимации

Рис. 18 Увеличение коэффициента децимации#

 Скачайте и переименуйте CSV файл в resultsDecim100, рис. 19:

Рис. 19 Переименованный файл с увеличенным коэффициентом

Рис. 19 Переименованный файл с увеличенным коэффициентом#

 Далее загрузите в проект полученный .csv файл при помощи блока Импорт CSV. Добавьте метку для блока Децимация = 100 (см. рис. 20 ниже). Предыдущий блок Импорт CSV с Децимацией = 1 нам не понадобится для последующих опытов.

Рис. 20 Добавление метки блока

Рис. 20 Добавление метки блока#

 Запустите на расчет и постройте график, совмещающий оригинальную синусоиду и импортированную .csv синусоиду (см. рис. 21 ниже).

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

Рис. 21 Сравнение графиков

Рис. 21 Сравнение графиков#

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

11.2.  Сравнение интерполяций#

 В том же загруженном файле изменим Тип интерполяции на Кривая (см. рис. 22 ниже). Запустите расчёт.

Рис. 22 Изменение типа интерполяции

Рис. 22 Изменение типа интерполяции#

 Синусоида становится более гладкой, однако на прямоугольном сигнале появляются колебания возле разрывов сигнала, что искажает фронт сигнала, рис. 23:

Рис. 23 Результаты расчета при типе интерполяции Кривая

Рис. 23 Результаты расчета при типе интерполяции Кривая#

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

11.3.  Экстраполяция#

 Измените Время моделирования с 1.25 до 2 [с]. Установите тип интерполяции обратно Линейная. Далее последовательно выбирайте разные Типы экстраполяции:

  • Ближайшее - после 1.25 [с] выход остаётся на уровне последнего значения (синус ≈ 1), рис. 24:

Рис. 24 Результаты расчета при типе экстраполяции Ближайшее значение

Рис. 24 Результаты расчета при типе экстраполяции Ближайшее значение#

  • Линейная - выход продолжает движение по прямой, заданной последними двумя точками, рис. 25:

Рис. 25 Результаты расчета при типе экстраполяции Линейная

Рис. 25 Результаты расчета при типе экстраполяции Линейная#

  • Установить в ноль - после 1.25 [с] выход обнуляется, рис. 26:

Рис. 26 Результаты расчета при типе экстраполяции Установить в ноль

Рис. 26 Результаты расчета при типе экстраполяции Установить в ноль#

  • Без экстраполяции – расчёт завершится ошибкой, поскольку блок не может вычислить значения за пределами диапазона данных, рис. 27:

Рис. 27 Результаты расчета при типе Без экстраполяции

Рис. 27 Результаты расчета при типе Без экстраполяции#

 Вывод: тип экстраполяции определяет поведение блока Импорт CSV за пределами временного диапазона исходного файла. Выбор режима зависит от физического смысла сигнала: сохранение последнего значения удобно для стационарных процессов, линейная экстраполяция подходит для более “стабильных” сигналов, а режим без экстраполяции позволяет выявлять выход модели за допустимый диапазон данных.

12.  Заключение#

 В данном уроке рассмотрены:

  • Cохранение одного или нескольких сигналов в CSV с помощью блока Экспорт CSV;

  • Управление дискретизацией (децимация, период) и заголовками;

  • Загрузка данных из CSV через блок Импорт CSV;

  • Влияние интерполяции (линейная, кривая) на восстановленный сигнал;

  • Поведение экстраполяции за пределами временного диапазона.