OpenModelica利用時のトラブルシューティング

<< 目次を表示 >>

ページ位置:  シミュレーション > 数学的なシミュレーション > SysPhS シミュレーション > OpenModelicaとの連携 >

OpenModelica利用時のトラブルシューティング

ここではOpenModelicaを使用する際に起こりうる問題について説明しますが、多くの点はMATLAB Simulinkを使用してシミュレーションを行う際にも同様に適用できます。

 

トラブルシューティングの概要

下の表は、主な問題とその解決策の例です。OpenModelicaのソースコード生成とビルド時の問題は、システム出力サブウィンドウに表示されます。この内容は、OpenModelicaのコンパイラ (omc.exe) が出力した内容となります。多くの場合には行番号が表示されていますので、その行の内容を中心に調査すると効率的です。

 

変数と等式の数が適切になっているかどうか確認して下さい。いくつかのプロパティについては、SimConstantとして設定する必要があります。

このSimConstantは、シミュレーションの実行中に値が変わらないことを示します。SimConstantについては、シミュレーションの開始時に値を設定する必要があります。
(シミュレーションデータセットで指定します。)

ポートの型となるブロックについては、isConserved = trueとなるプロパティを保持する必要がある場合があります。

例えば、ブロックChargePortが2つのプロパティ"v : Voltage"と"i: Current"を保持する場合に、"i : Current"はSimVariableとして定義し、属性"isConserved = true"として指定しなければなりません。

SimConstantsに既定値が指定されているかどうか確認して下さい。

SimVariableには開始時の初期値が必要な場合には、指定して下さい。

対象のパッケージ外に存在するブロックやバリュー型によって型付けされるプロパティがある場合には、package importの関係が必要です。

 

 

SysMLシミュレーションの設定内容のフィルタ

SysMLシミュレーションの設定タブでは、既定の状態では対象のパッケージ内のすべてのSysML要素が表示されます。具体的には、バリュー型・ブロック・制約ブロック・パートプロパティ・ポートなどが表示されます。モデルがある程度の規模になると、シミュレーションの設定のための項目を探し設定することが効率的にできなくなります。

 

例えば、貯水タンクのサンプルモデルで、Tank.areaのプロパティ'SimConstant'を削除した状態でシミュレーションを実行しようとすると、次のようなエラーが表示されます。

 

    Error: Too few equations, under-determined system. The model has 11 equation(s) and 13 variable(s).        

 

このエラーは、'SimConstant'にいくつかのプロパティが不足していることを示しています。

 

このような状況で、ツールバーの右から2番目の設定ボタンを押すと、次のようなダイアログが表示されます。「すべて」のボタンを押してから、「制約ブロックを非表示」と「変数プロパティを非表示」の項目からチェックを外し、OKボタンを押します。

 

 

これにより、表示される内容が限定され、問題点を探すことが容易になります。この例では、シミュレーション中に 'area'の値が変わらないことに気付きます。その結果として、この値を 'SimConstant' に設定し初期値を指定します。

 

 

モデル評価のエラーの例

項目

説明

制約に含まれる変数が定義されていない場合

貯水タンクのサンプルモデルで、 'constraintBlock.Outcontrol.Constraint'に対して入力内容を以下のように間違えたと仮定します。

 

    正しい内容:

a=b*(c+d)

 

    入力した内容:

a=v*(c+d)

 

 

このような場合には、次のようなエラーがModelicaタブに表示されます。

 

Validating model...

Error: Variable v not found in scope OutControl. (Expression: " a=v*(c+d);")

Error: Error occurred while flattening model TanksConnectedPI

Number of Errors and Warnings found: 2

 

エラーの行をダブルクリックすると、SysMLシミュレーションの設定タブ内の制約を示す行にカーソルが移動します。

 

'v'を'b'に直すことで、このエラーは発生しなくなります。

ヒント:

SysMLシミュレーションの設定タブを利用することで、ブロックや制約ブロックの制約を効率的に修正できます。このタブでの操作の特徴は次の通りです。

  • 制約を直接編集できる
  • 制約を削除する際にコンテキストメニューを利用できる
  • ブロックや制約ブロックの右クリックで制約を追加できる

変数名が重複している場合

貯水タンクのサンプルモデルで、 block.tank.constraintProperty.e1を参照します。同名のプロパティが2つ存在してしまっていると仮定します。

e1を右クリックし、モデルブラウザ内の位置を表示を実行します。名前をe2に変更後、SysMLのシミュレーションの設定タブの内容を再読込します。

 

このような場合には、次のようなエラーがModelicaタブに表示されます。

Validating model...

Error: Duplicate elements (due to inherited elements) not identical: (Expression: "SensorValue e2;")

Error: Error occurred while flattening model TanksConnectedPI

Number of Errors and Warnings found: 2

 

エラーの行をダブルクリックすると、SysMLシミュレーションの設定タブ内の制約プロパティを示す行にカーソルが移動します。

 

'e2'を'e1'に直すことで、このエラーは発生しなくなります。

制約ブロックに定義されているプロパティが利用されていない

貯水タンクのサンプルモデルで、 TwoTanks.constraints.OutFlow を例にします。

 

ここで、プロパティ 'c' を新しく追加し、インスタンスとの同期を行わない状況とします。その結果、等価式の数が不足し、実行することができなくなります。

 

このような場合には、次のようなエラーがModelicaタブに表示されます。

 

Validating model...

Error: ConstraintProperty 'e4' is missing parameters defined in the typing ConstraintBlock 'OutFlow'. (Missing: c)        

Error: Too few equations, under-determined system. The model has 11 equation(s) and 12 variable(s).

Number of Errors and Warnings found: 2

 

エラーの行をダブルクリックすると、SysMLシミュレーションの設定タブ内の制約プロパティ'c'を示す行にカーソルが移動します。

 

対象の制約プロパティを右クリックし、利用されているダイアグラムを実行することで、配置されているダイアグラムに移動できます。ダイアグラムの背景で、付属要素の項目を選択し、追加した'c'が表示されるようにチェックを入れ、付属要素のダイアログを閉じます。

 

再度シミュレーションを実行仕様とすると、今度は次のようなエラーがModelicaタブに表示されます。

 

Validating model...

Error: ConstraintProperty 'e4' does not have any incoming or outgoing binding connectors for parameter 'c'.

Error: Too few equations, under-determined system.

The model has 11 equation(s) and 12 variable(s).

Number of Errors and Warnings found: 2

 

この問題を修正するには、次のいずれかの対応を行う必要があります。

  1. プロパティ 'c' が必要で制約にcを含む場合には、このプロパティ'c'を利用するようにモデルを構成する必要があります。
  2. プロパティ'c' が不要な場合には、制約ブロック内の定義を削除します。図に配置した要素は自動的に削除されます。

 

 

参照: