HMLからOMLへの移行

Activate 2019で、スクリプト言語がHyperMath(HML)からOpenMatrix(OML)へ移行されました。これに合わせて、HMLからOMLへの変換ツール(H2O)も導入されています。

OMLは、Altair Activate 2016~2017.3でサポートされてきたスクリプト言語であるHMLの正式な後継です。

Altair Activateバージョン2019以降におけるOMLの役割

OMLは、ActivateおよびComposeでサポートされる標準のスクリプト言語です。ActivateのモデルでOMLが広く使用される用途のいくつかを以下に挙げます:

  • 変数の作成
  • コンテキストの書き込み
  • ブロック定義の書き込み
  • OMLコマンドウィンドウを介したモデルとの相互動作
  • ライブラリの読み込み

H2O移行で知っておくべき事項

  • HMLとOMLには構文上の相違がいくつかありますが、総合的な概念と応用分野は似ているので、ほとんどの場合はHMLからOMLへシームレスに移行できます。
  • OMLの言語およびリファレンスガイドは、ComposeおよびActivateのドキュメントに収録されています。

Altair Activate 2016-2017.3で作成されたモデルで作業するために必要なものは?

  • ほとんどの場合、特別な処理は不要です。Activateバージョン2019以降には、従来のモデルを自動的に変換する機能が用意されています。
  • 高度なHMLスクリプトによるコンテキストを使用したモデルでは、OMLに変換された関数の確認とテストが必要です。データを作成するHMLスクリプトを伴うモデルでも同様の扱いが必要です。

H2O移行に伴って必要となる変更

  • 文字列として定義したブロックパラメータでは、HMLの二重引用符をOMLでは一重引用符に変更します。
  • モデルにあるHMLCustomBlockの記述をOMLCustomblockに置き換えます。
  • 従来のsolidThinking Activateブロックライブラリは、現在のバージョンのAltair Activateで開くと、自動的にAltair Activateブロックライブラリに変換されます。

HMLスクリプト / コンテキストの移行

  • Activateのデモ用モデルHybrid_Extended_Kalman_Filter.scmでのコンテキスト移行例:


  • 上級ユーザーのための拡張定義(PDF)の最適化の章にあるスクリプトからの移行例:


APIの変更

  • Activateには、モデルを作成、編集、操作するためのAPIが用意されています。これらのAPIはHMLからOMLに移行したものですが、きわめて類似した名前と引数が維持されています。
  • APIの詳細については、上級ユーザーのための拡張定義をご参照ください。

HMLCustomBlock

  • HMLCustomBlockからOMLCustomBlockへの移行では、ブロックの動作を定義したHMLコードの移行を実施します。OMLCustomBlockにあるスケルトン生成機能を利用すると、ブロックコードの各部分の移行がきわめて容易になります。
  • HMLCustomBlockの空のスケルトン:
    
    function HmlBlockFunction(block,flag)
      u1=vssGetInPortData(block,1);
      nevprt=vssGetEventCode(block);
      if flag ==  hwscpEngineBlock.INITIALIZE then
      elseif flag ==  hwscpEngineBlock.REINITIALIZE then
      elseif flag ==  hwscpEngineBlock.TERMINATE then
      elseif flag ==  hwscpEngineBlock.OUTPUT_UPDATE then
        //vssSetOutPortData(block,1,y1,vssGetOutputDataType(block,1));
      end
    end
    
  • OMLCustomBlockの空のスケルトン:
    
    function OmlBlockFunction(block,flag)
      u1=vssGetInputData(block,1);
      nevprt=vssGetEventCode(block);
      if flag == vssBlockInitializeFlag
      elseif flag == vssBlockReinitializeFlag
      elseif flag == vssBlockTerminateFlag
      elseif flag == vssBlockOutputUpdateFlag
        %%vssSetOutputData(block,1,y1,vssGetOutputDataType(block,1));
      end
    end
    
  • Activateのデモ用モデルFft_anim.scmの移行例:


ライブラリの移行

OMLコマンドウィンドウで次のコマンドを実行できます:

run('<install>/hwx/modules/sim/engine/scripts/oml/bdeMigrateModelToOml.oml')
migrate_library(libpath)

移行のためのコマンド

  • Activateによってほとんどのモデルは自動的に変換されますが、スクリプトによっては個別に変換を必要とするものがあります。
  • 移行を容易にするために、OMLコマンドが追加され、公開されています。
  • HMLファイルの移行:
    hwscpEngineUtilsAPIs_TranslateHmlFile('file1.hml', 'file1.oml')
  • HML式の移行:
    hwscpEngineUtilsAPIs_TranslateHmlString('<hmlstring>')