これまでのところ、Wolfram System Modeler 4.3および5.1を使用すると、次の最小限の例はエラーなしでコンパイルされます:
model UnitErrorModel
MyComponent c( hasUnit = "myUnit" );
block MyComponent
parameter String hasUnit = "1";
output Real y( unit = hasUnit );
equation
y = 10;
end MyComponent;
end UnitErrorModel;
しかし、WSM 12.0 の新しいリリースでは (バージョンのジャンプは、Wolfram のフラグシップである Mathematica の現在のリリースとの調整によるものです)、次のエラー メッセージが表示されます。
内部エラー: Codegen.getValueString: 非定数式: c.hasUnit
(注: WSMLink'WSMSimulate
System Modeler 12.0 を内部で実行している Mathematica 12.0 でエラーが発生します。ここでは"InternalValues"
、WSM 12.0 をインストールしていないため、上記のモデルのプロパティを要求しています)。
OpenModelica [OMEdit v. 1.13.2 (64-bit)] で上記のモデルをシミュレートしようとすると、次のことが明らかになります。
SimCodeUtil.mo: 8492:9-8492:218]: 内部エラー 予期しない式 (おそらくフロントエンドで処理されているはずです。ユニット/displayUnit 式は文字列リテラルではありません: c.hasUnit
ユニット属性を設定するために、パラメータの可変性を持つ変数を使用できないようですか? これはなぜですか - 結局のところ、実行時にコンパイルするときにコンパイラがユニットをハードワイヤできるだけで十分ではないのでしょうか?
編集:私の古い質問への回答から、少なくとも最終的なパラメーターを使用してユニット属性を設定できると信じていました。変更を最終的にします (たとえばc( final hasUnit = "myUnit" )
、問題は解決しません。