1

以下包'RecordTest'(重现更大模型的错误的示例)包含一个记录来定义一些数据的结构。进一步在包“DataDefintion”中定义了两组数据。最后,此数据应在包“UseOfData”中使用。这里读取数据集,并在函数“FunctionWithData”中评估所有数组 A 的总和。

模型“FunctionCall”的模拟在 OpenModelica 中运行良好。在 Dymola 中,我收到错误消息:“对于变量包常量 RecordTest.UseOfData.ReadData[1].A,数组变量的下标 RecordTest.UseOfData.ReadData.Index 不是整数。”

我想念什么吗?常量“Index”被定义为记录“DataStructure”中的一个整数。此外,该模型在 OpenModelica 中运行。我不明白 Dymola 的错误。

提前致谢。

package RecordTest

record DataStructure
  constant Integer Index;
  Real A[Index];
end DataStructure;

package DataDefinition
  constant DataStructure Set1(Index=2, A={1,2});
  constant DataStructure Set2(Index=2, A={3,4});
end DataDefinition;

package UseOfData
  constant Integer N=2;
  constant DataStructure ReadData[N]={DataDefinition.Set1, DataDefinition.Set2};

  function FunctionWithData
    input Real b;
    output Real Result;
  protected
    Real Array[2];
  algorithm
    Array := {sum(ReadData[1].A), sum(ReadData[2].A)};
    Result := b*sum(Array);
  end FunctionWithData;

  model FunctionCall
    parameter Real b=2;
    Real FunctionResult;
  equation
    FunctionResult = FunctionWithData(b);
  end FunctionCall;
end UseOfData;

end RecordTest;
4

1 回答 1

0

一种解决方法是按如下方式重写包:

package RecordTest

record DataStructure
  constant Integer Index;
  Real A[:];
end DataStructure;

package DataDefinition
  constant DataStructure Set1=DataStructure(Index=2, A={1.0,2.0});
  constant DataStructure Set2=DataStructure(Index=2, A={3.0,4.0});
end DataDefinition;

package UseOfData
  constant Integer N=2;
  constant DataStructure ReadData[N]={DataDefinition.Set1, DataDefinition.Set2};

  function FunctionWithData
    input Real b;
    output Real Result;
    protected 
    Real Array[2];
  algorithm 
    Array := {sum(ReadData[1].A), sum(ReadData[2].A)};
    Result := b*sum(Array);
  end FunctionWithData;

  model FunctionCall
    parameter Real b=2;
    Real FunctionResult;
  equation 
    FunctionResult = FunctionWithData(b);
  end FunctionCall;
end UseOfData;

end RecordTest;

问题是在 A 中使用的包常量记录数组中的“索引”,以及包常量记录 Set1 和 Set2 的修饰符而不是绑定方程。(这也将在未来版本的 Dymola 中处理,我明白答案有点晚了。)

于 2017-12-13T16:36:48.050 回答