问题描述
在下面的模型中,我想通过数据记录设置正弦频率的数组,但是这个简单的尝试在 OMEdit 1.17~dev.alpha0 中默默地失败了。有什么建议么? sineC 包含一个解决方法,但这似乎是一个错误。
package ScratchPackage
record Data
constant Real[3] xyz;
constant Real freq;
String name="a";
end Data;
model Object
//normal,direct assignment
parameter Real[:] freqs;
Modelica.Blocks.sources.Sine[size(freqs,1)] sineA( freqHz=freqs );
//desired,assigned via struct "record"
parameter Data[:] data;
constant Integer n = size(data,1);
Modelica.Blocks.sources.Sine[n] sineB( freqHz={data[i].xyz[1] for i in 1:n});
//roundabout,assigned via intermediate variable
parameter Real[n,3] xyzs = {data[i].xyz for i in 1:n};
Modelica.Blocks.sources.Sine[n] sineC( freqHz={xyzs[i,1] for i in 1:n});
initial equation
for i in 1:n loop
//print("data["+String(i)+"].xyz[1] = " + String(data[i].xyz[1]) + " vs sine["+String(i)+"].freqHz = " + String(sine[i].freqHz) +" "); //fails to compile data[i].xyz[1]
print("sineA["+String(i)+"].freqHz = " + String(sineA[i].freqHz) +" ");
print("sineB["+String(i)+"].freqHz = " + String(sineB[i].freqHz) +" ");
print("sineC["+String(i)+"].freqHz = " + String(sineC[i].freqHz) +"\n");
end for;
end Object;
model RunMe "expect obj.sine[1].freqHz=1,obj.sine[1].freqHz=2,..."
constant Integer n = 5;
constant Real[n,3] xyzs = {{1,1,1},{2,2,2},{3,3,3},{4,4,4},{5,5,5} };
constant Data[n] data(xyz=xyzs,freq={xyzs[i,1] for i in 1:n});
Object obj( freqs={1,5},data=data );
end RunMe;
end ScratchPackage;
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)