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>')