从记录数组设置参数

问题描述

在下面的模型中,我想通过数据记录设置正弦频率的数组,但是这个简单的尝试在 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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...