Modelica - отображение не модельной функции на модель
Если у меня есть функция non-modelica, которая не имеет входа и выхода, как
void foo(void)
{
variable1;
variable2;
for loop
{
if conditions
}
variable2=foobar(); // another function call, foobar() is not modelica function
}
тогда я могу смоделировать это как ниже в modelica?
model foo
variable1;
variable2;
algorithm
for loop
{
if conditions
}
variable2 :=foobar(); //foobar here is modelica function
end foo;
2 ответа
На самом деле, ваше описание немного беспокоит. Если ваша функция не имеет входов и выходов, какой смысл ее вызывать?
Я предполагаю, что у вашей функции есть побочные эффекты. Но если вы вызываете функции с побочными эффектами из Modelica, вам нужно быть предельно осторожным, потому что, вообще говоря, вы не можете контролировать их вызов. Например, их будут вызывать для так называемых "подходящих решений", а также для реальных этапов моделирования.
Так что было бы лучше, если бы вы немного объяснили, что делает эта функция. Это не только поможет решить, как вы можете выразить это в Modelica, но и продемонстрировать, что лучше оставить вашу функцию в виде кода C и вызывать ее через интерфейс сторонних функций в Modelica.
Возможно, вы захотите быстро взглянуть на красивую шпаргалку http://modref.xogeny.com/ чтобы узнать, как делать циклы for. Также, когда внутри секций алгоритма вы должны использовать присваивания вместо уравнений:
algorithm
...
variable2 := foobar(); //foobar here is modelica function