Изменить переменную / функцию FMI во время симуляции

У меня есть простой файл FMU, который содержит блок синуса, который принимает вас в качестве входных данных и выводит у. В этом случае u устанавливается равным времени. В своем коде C++ я загрузил библиотеку FMI из FMILibrary и сделал все необходимые шаги до того момента, когда я хочу дать своему вводу новое значение pi(как 3.14). Поэтому я пошел:

fmistatus = fmi2_import_set_real(fmu, &uRef, 1, &pi);
while (timeCurrent < timeEnd){
    fmistatus = fmi2_import_do_step(fmu, timeCurrent , stepSize, fmi2_true);
    timeCurrent += stepSize;
}

Вы все еще были настроены на время, хотя я пытался придать ему новое значение. Я что-то пропустил?

PS. Где-нибудь я могу найти более подробное описание функций библиотеки FMI? В настоящее время я могу только найти описания ввода-вывода или я что-то пропустил снова.

ОБНОВЛЕНИЕ: После нескольких испытаний, я думаю, что эта проблема может быть, потому что я пытался переопределить свое уравнение u = время. Другими словами, когда я меняю переменную u в блок RealInput в openmodelica, все идет хорошо. Так что, если я действительно хочу переопределить определенное уравнение? Что мне нужно сделать?

1 ответ

Решение

Вы не сможете установить какую-либо переменную в FMI - и особенно не переменную с уравнением связывания - и я предполагаю, что ваша модель Modelica имеет "u= время;". Вместо того, чтобы иметь "u= время", вам нужно добавить вход верхнего уровня без какого-либо уравнения (так, чтобы экспортированная ИФР имела его в качестве входа) - и затем подключить его к синусоидальному блоку.

Детали: Для FMI совместного моделирования ограничение на то, что вы можете установить, находится в диаграмме состояний в разделе 4.2.4 спецификации FMI2.

Между fmi2DoStep вы можете установить только действительные переменные, которые имеют причинность = "вход" или причинность = "параметр" и переменность = "настраиваемый" - и вход с уравнением не подходит.

Перед началом интеграции вы можете установить его и для других переменных, но это только предположительные значения для инициализации, и не следует переписывать уравнение "u= время".

Другие вопросы по тегам