3

これまでのところ、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'WSMSimulateSystem 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" )、問題は解決しません。

4

1 に答える 1