Циклы обратной связи с использованием реальных сигналов: как инициализировать модель? - PullRequest
2 голосов
/ 18 июня 2019

Я переношу устаревшую модель из Simulink в Dymola, которая включает в себя контур обратной связи, где выходной сигнал передается обратно на вход для расчетов затухания.В Simulink блок памяти используется для создания задержки на один шаг интегрирования, а также для инициализации сигналов.Я попытался использовать задержку на единичный шаг в Dymola, однако мы не использовали решатель с фиксированным шагом, и модель разошлась.Фиксированная задержка также не работала, как ожидалось

Есть ли какие-либо предложения о том, как передать выходные данные на вход при правильной инициализации?Все эти сигналы имеют тип "Реал".

1 Ответ

5 голосов
/ 18 июня 2019

Блок Memory в Simulink задерживает сигнал на один шаг непрерывного интегрирования (если он не помещен в подсистему итератора).В сочетании с решателем с переменным шагом, результатом является переменная задержка, зависящая от размера шага решателя.На мой взгляд, это довольно опасная операция с точки зрения стабильности и повторяемости.

В Dymola (и я предполагаю, что OpenModelica) нет доступного эквивалентного блока, поэтому я думаю, что будет невозможно "точно" воспроизвести такое же поведение.Я полагаю, что в любом случае это будет сложно, так как решатель, вероятно, выберет разные размеры шага.

Кроме того, есть хороший шанс, что вы можете просто удалить блок и подключить петлю обратной связи напрямую в любой Modelica-основанный инструмент, поскольку они, вероятно, будут обрабатывать алгебраический цикл символически и решать его для вас.Для инициализации вы можете использовать атрибут initial equation или start.Тем не менее, немного сложно определить, какое решение будет работать без какого-либо примера кода.

Если закрытие цикла напрямую не является вариантом, я бы предложил использовать блок FirstOrder (Modelica.Blocks.Continuous.FirstOrder) вместо задержки.Поскольку это непрерывный блок, он должен обеспечивать лучшую производительность и более предсказуемое поведение по сравнению с блоком Memory.Кроме того, он позволит вам инициализировать его выходное значение с несколькими параметрами.

...