アーキテクチャ

Twin Activateでのクライアントとエンジンの間の以下のワークフローにより、システムのモデリングが処理されています。

OMLコマンドウィンドウモデルおよびダイアグラムスコープと表示インタープリターXMLブロックライブラリインターフェース関数アダプターシミュレーターコンパイラーCブロックライブラリCコードジェネレーター

OMLコマンドウィンドウ

Twin Activateクライアントでは、OMLのコマンドおよび関数を入力できるCommand Windowを通して直接インタープリターにアクセスできます。

Twin Activateでのブロック定義の作成および変更、モデルの作成、編集および実行、ダイアグラム内の要素の操作、ユーザーインターフェースのカスタマイズ、およびモデルのシミュレーションに必要なデータのプリ / ポスト処理のための関数の定義は、OMLに大きく依存しています。

コンパイラー

コンパイラーは、モデルを関数ブロック、ブロックの相互接続を指定する定義、およびシミュレーションプロセスでブロックが呼び出される順序を指定するスケジューリングテーブルの構造に変換します。

モデルおよびダイアグラム

本ソフトウェアには、モデルを作成、編集、シミュレート、および管理するための機能とそれぞれのダイアグラムが用意されています。

シミュレーター

シミュレーターは、スケジューリングテーブルと、コンパイラーで提供されるその他の情報に基づいて実行されます。

Activateのシミュレーターはハイブリッドなので、離散時間システムや連続時間システム、およびシミュレーションプロセス実行中のイベントに対応できます。シミュレーターでは、解析するシステムの特性に応じてさまざまなソルバーを使用します。

インタープリター

インタープリターは、OMLで記述されてOMLコマンドウィンドウまたはOMLエディターから入力されたブロックパラメータ、関数構文、およびスクリプトを評価します。

OMLインテグレーション

OMLスクリプトおよび数値計算言語は、Twin Activateにパッケージングされており、ブロックパラメーターの定義、モデルの処理、モデルのシミュレーションなどを実行を可能にします。モデルデータのプリ / ポスト処理や、バッチモードのシミュレーションなどの操作を実行するために、多数のOML APIが用意されています。

OML - ベースの操作
  • ブロック定義の作成または変更。
  • モデルを作成、編集、または実行するためのスクリプトの作成。
  • ダイアグラム内の要素の処理。
  • モデルのシミュレーションに必要なデータのプリ / ポスト処理。
OML - 共有のUIコンポーネント
  • コマンドウィンドウ
  • プロットウィンドウ
OMLの使用例
  • ビュー > OMLコマンドウィンドウまたはツール > OMLエディターからのOMLコマンドの編集および実行。
  • ContStateSpace ブロックダイアグラムでのOML構文を用いたモデルまたはブロックパラメーターの定義。


  • OMLを経由したソフトウェア内のデータの交換。
  • OML APIを使用したモデルの編集およびシミュレーション。

スコープと表示

本ソフトウェアには、データをプロットするためのScopeブロックと、シミュレーション結果を可視化するためのその他の表示オプションが含まれています。

XMLブロックライブラリ

本ソフトウェアには、モデルを作成するための様々な事前定義済みブロックが格納されたブロックライブラリが含まれています。

ブロックはXMLフォーマットで記述されており、ファイル拡張子は.scbです。各.scbファイルには、グラフィカルプロパティ、ポート、パラメーター、およびインターフェース関数によるブロック定義が含まれています。

インターフェース関数

Evaluation関数は、ブロックのXML定義の一部です。モデルにあるブロックごとに、OMLインタープリターでEvaluation関数を評価して、実際の値を取得します。

アダプター

アダプターは、アーキテクチャのすべてのコンポーネントとのインターフェースとして機能する一般的なコンポーネントです。

Cブロックライブラリ

上述のXMLコンテンツの他に、各ブロックには、ブロック定義を含むシミュレーション関数が付属しています。ほとんどのブロックシミュレーション関数はC言語で記述されており、DLLライブラリとしてシミュレーターで使用されます。

Cコードジェネレーター

本ソフトウェアのエンジンによって、FMIエクスポートなどの操作で必要になるCコードが生成されます。

定式化手法

Twin Activate環境には、ハイブリッドシステムのモデリングを容易にするための基盤となる定式化手法が用意されています。

Twin Activateでイベントの仕様を処理することによって、同期および非同期の両方のダイナミクスを持つモデルの作成が可能になります。さらに、システムのダイナミクスを制御するようにTwin Activateでアクティベーション信号を処理することで、複雑なタイミングでのモデルの構築が可能になります。

HMLからOMLへの移行

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

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

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

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

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

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

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

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

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

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

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

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

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


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


APIの変更

  • Twin 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
    
  • Twin Activateのデモ用モデルFft_anim.scmの移行例:


ライブラリの移行

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

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

移行のためのコマンド

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