OpenModelica Multi Connector 接続エラーと対処

 OpenModelica(ver1.21.0時点)で時々発生する、接続(connection)のエラーと生じた場合の対処について.
  

エラー内容・メッセージ

     OpenModelcaにて、Modelica.Fluid.Vessels.ClosedVolumeのようなMulti connector、配列として定義され、アイコン上は1つのconnectorだが複数のconnectorの集まりとして振舞えるもの、を持つコンポーネントを用いてモデルを組むと、自動生成されたCodeに不備が生じてモデルチェック時/コンパイル時に下記のようなエラーメッセージが出る事が有る.
    [C:/OM121/OM64bit/OMCompiler/Compiler/NFFrontEnd/NFConnectEquations.mo: 1038:5-1039:59]: Internal error NFConnectEquations.lookupVarAttr could not find the variable volume.ports[2].m_flow
    	
    [C:/OM121/OM64bit/OMCompiler/Compiler/NFFrontEnd/NFConnectEquations.mo: 1038:5-1039:59]: Internal error NFConnectEquations.lookupVarAttr could not find the variable volume1.ports[1].m_flow
    	
    [C:/OM121/OM64bit/OMCompiler/Compiler/NFFrontEnd/NFConnectEquations.mo: 1038:5-1039:59]: Internal error NFConnectEquations.lookupVarAttr could not find the variable boundary.ports[1].m_flow
    	

エラーの意味

     Modelica言語のコード、文法を理解していないと理解が難しい筈なので、対処だけ知りたい場合は読み飛ばして差支え無い.
      
      
  1. parameterとして設定されている必要があるPortの数、nPortsが設定されていない.(コードにnPorts=xx)の記述が無い.
  2.   
  3. 配列を用いたmultiportsへの接続情報の添え字に誤りが生じている. 例えばportが2つ有り(配列要素が2つ)2本結線がつながっているが、それぞれport[1],[2]にではなく、2つともport[1]に接続されている.
  4.   

対応

     ソースコードの理解、直接修正は必須ではない.
     代わりに、該当するVolume/Boundaryコンポーネントのportに繋がっている結線を一度削除し、接続し直す.
     表示で判らないが、結線もコンポーネント同様にクリックすることで選択状態となる.選択状態にして、delキーを押すと結線のみを消る.なので、コンポーネントを消して置き直す必要は無い(それを行うとparameterも設定し直す必要が生じてしまう).
      
     エラーメッセージの最後の部分が対象となるコンポーネントを示す.例えば「volume1.ports[2].m_flow」とある場合は、volume1が対象です.
     複数ある結線のうちどれが該当物か判らない場合は、全ての結線を削除する.
     1回繋ぎ直しても治らない事がある.その場合は、何度か繋ぎ直しを繰り返す、OpenModelicaを再起動するなどする.
  

推定されるバグ発生条件

     完全な再現性があるわけでない.
     が、結線をVolume以外のコンポーネントからVolumeのPortに繋ぐ操作をした(ex. 配管のportから結線を引き始め、Volumeのportのクリックで接続操作を終わらせる)際に生じ、逆にVolumeのportから他コンポーネントのportへ繋ぐ操作をしていると生じてい印象が有る.
     Volumeに結線を繋ぐ際は、Volume側ではなく、もう一方のコンポーネントの側から結線を引くようにする事で、本事象の発生を減らせる可能性が有る.
  
以上

コメント

タイトルとURLをコピーしました