TGViewer
Engee на старт! Engee на старт! @engee_com · 4.58K subscribers
Post #662 3.2K
🔧 Тестирование кода в Engee без ручной рутины

Тестирование ПО-в-контуре (SIL) – важный элемент рабочего процесса кодогенерации. Ведь нам необходимо проверить, что модель и код считаются одинаково.

Обычный процесс SIL-тестирования выглядит так: включили настройку создания проверочной Си-функции, сгенерировали код, запустили скрипт, вставили Си-функцию, запустили симуляцию, сравнили результаты. Это занимает время. А если моделей много, то легко запутаться что с чем сравнивать, что уже сделано, а что еще надо проверить. Надо как-то избавится от этой головной боли. В идеале хочется нажать кнопку и пойти пить кофе, а тестирование выполнится само собой.

Что будем использовать
Слышим тестирование - применяем библиотеку Test.jl.
А что тестируем? Надо проверить сразу несколько вещей:
1️⃣Код вообще генерируется?
2️⃣Создается ли проверочная Си-функция?
3️⃣Эквивалентность работы модели и кода
Чтобы не рушить тестовую обвязку модели будем делать ее копию. И это тоже предмет тестирования. Для работы с моделями будем использовать программное управление моделями.

Как это работает?
Используя Test.jl, создадим наборы тестов, которые будут выполнять наше тестирование поэтапно:
@testset verbose = true "SIL" begin
@testset "Code Generation" begin
@test SILAutom
ation.buildCUT(CUT)==true
@test isfile(CUT*"_verification.engee")
end

SILAutomation.buildCUT(CUT)
SILAutom
ation.buildSILHarness(SIL_Harness,CUT, MIL_Harness)

@testset "SIL Equality" begin
(MR,SR) = SILAutom
ation.runSims(MIL_Harness,SIL_Harness)
(sync,equal) = SILAutom
ation.compare_signals(MR["filtered"],SR["C Function.1"])
@test sync==true
@test equal==true
end
end

А все манипуляции с моделями спрячем в отдельный модуль SILAutomation.

⚠️ ВАЖНО - Как правильно сравнить сигналы

Нельзя просто сравнить два сигнала численно и сказать, что они равны. Надо проверить, что они синхронизированы по времени, а значения не различаются больше чем на ошибку. Написали такую функцию:
function compare_signals(sig_one,sig_two)
Ds = collect(sig_one);
Rs = collect(sig_two);
Cmp = isapprox.(Ds, Rs)
issynched = all(Cmp.time)
issimilar = all(Cmp.value)
return (issynched, issimilar)
end


Что мы получили в итоге
В результате сделали утилиту, которая
✅запускает и проверяет генерацию кода
✅Собирает обвязку SIL
✅Запускает симуляции тестов и корректно сравнивает результаты
Теперь можно спокойно запускать тесты и идти пить кофе, а Engee все сделает за вас!

📎 Скачать себе все файлы утилиты можно тут

🎓 Школа моделирования уже стартовала!
🧑‍💻 Расписание бесплатных тренингов
  • 🔥 9
  • 👍 8
  • 🥰 4
  • 👏 2
  • ❤ 1
More from @engee_com
  1. Sep 28, 2026🧑‍🎓 Запись вебинара «ПИД-регулятор в АСУ ТП: управление температурой в Engee» 🔗 Презент…
  2. Sep 25, 2026Релиз 26.9 – новое в сентябре 🍂 ☕️ ⚙️ Друзья, Сентябрь подходит к концу — за окном яркая…
  3. Sep 23, 2026Engee MIND — ИИ непосредственно в инженерном проекте На ИТОПК-2026 впервые представили Eng…
  4. Sep 18, 2026🔄 Почему ПИД теряет управление при насыщении: разбираем anti-windup Представим: регулятор…
  5. Sep 15, 2026Собрали в карточках, что вас ждёт в День Engee 2026: демозона с реальным оборудованием, но…
  6. Sep 11, 2026📡 EngeeDSP: инструменты для ЦОС в Engee Для ЦОС в Engee мы развиваем специализированную б…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →