我写了一个函数,返回值为记录类型。通常我会使用这个函数通过一个初始方程来初始化一个记录类型的实例。但是因为我想在时钟模型中使用这个函数,所以不可能有初始方程。
对我来说,这似乎是使用属性 start 初始化变量的唯一方法。不幸的是,记录没有这个属性,只有它的组成部分。
这是一个简单的例子,展示了我想要做什么:
model RecordInitializeTest
record simpleRecord
Integer arg1;
Integer arg2;
end simpleRecord;
function initFunc
output simpleRecord sR;
algorithm
sR.arg1 := 1;
sR.arg2 := 2;
end initFunc;
model InitializeTest
input Boolean u(start=false);
output simpleRecord sR1;
equation
if u and not previous(u) then
sR1 =initFunc();
else
sR1 = previous(sR1);
end if;
end InitializeTest;
InitializeTest iT;
equation
iT.u = sample(time > 0.5,Clock(0.1));
end RecordInitializeTest;
Run Code Online (Sandbox Code Playgroud)
这个模型在 dymola 中工作,但当然有警告,因为 iT.sR1.agr1 和 iT.sR1.arg2 没有起始值,但是 previous() 的参数。Conceputally 我想使用
output simpleRecord sR1(start=initFunc());
有没有人知道如何以方便的方式初始化 sR1 而无需像这样的分配 …