Блок Memory
в Simulink задерживает сигнал на один шаг непрерывного интегрирования (если он не помещен в подсистему итератора).В сочетании с решателем с переменным шагом, результатом является переменная задержка, зависящая от размера шага решателя.На мой взгляд, это довольно опасная операция с точки зрения стабильности и повторяемости.
В Dymola (и я предполагаю, что OpenModelica) нет доступного эквивалентного блока, поэтому я думаю, что будет невозможно "точно" воспроизвести такое же поведение.Я полагаю, что в любом случае это будет сложно, так как решатель, вероятно, выберет разные размеры шага.
Кроме того, есть хороший шанс, что вы можете просто удалить блок и подключить петлю обратной связи напрямую в любой Modelica-основанный инструмент, поскольку они, вероятно, будут обрабатывать алгебраический цикл символически и решать его для вас.Для инициализации вы можете использовать атрибут initial equation
или start
.Тем не менее, немного сложно определить, какое решение будет работать без какого-либо примера кода.
Если закрытие цикла напрямую не является вариантом, я бы предложил использовать блок FirstOrder
(Modelica.Blocks.Continuous.FirstOrder
) вместо задержки.Поскольку это непрерывный блок, он должен обеспечивать лучшую производительность и более предсказуемое поведение по сравнению с блоком Memory
.Кроме того, он позволит вам инициализировать его выходное значение с несколькими параметрами.