У меня есть простой файл FMU, который содержит блок синуса, который принимает вас в качестве входных данных и выводит у. В этом случае u устанавливается равным времени. В моем коде C ++ я загрузил библиотеку FMI из FMILibrary и сделал все необходимые шаги до того момента, когда я хочу дать своему вводу u новое значение 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, все идет хорошо. Так что, если я действительно хочу переопределить определенное уравнение? Что мне нужно сделать?
Вы не сможете установить какую-либо переменную в FMI — и особенно не переменную с уравнением связывания — и я предполагаю, что ваша модель Modelica имеет «u = время;». Вместо того, чтобы иметь «u = время», вам нужно добавить вход верхнего уровня без какого-либо уравнения (чтобы экспортированная ИФР имела его в качестве входа) — и затем подключить его к синусоидальному блоку.
Подробности:
Для FMI совместного моделирования ограничение на то, что вы можете установить, находится в диаграмме состояний в разделе 4.2.4 спецификации FMI2.
Между fmi2DoStep вы можете установить только действительные переменные, которые имеют причинность = «вход» или причинность = «параметр» и переменность = «настраиваемый» — и вход с уравнением не подходит.
Перед началом интеграции вы можете установить его и для других переменных, но это только предположительные значения для инициализации, и не следует переписывать уравнение «u = время».
Других решений пока нет …