基本ブロック用アトミックタブ

ブロックビルダーのアトミックタブで基本ブロックを定義します。

基本ブロックの場合、アトミックタブにシミュレーション機能のリストが表示されます。通常、ブロックは複数のシミュレーション機能を持ちます。シミュレーション関数ごとに、共有ライブラリとそれに対応するエントリポイントを指定する必要があります。基本ブロックを定義するには、最大3つのOML関数を作成する必要があり、これらの関数の部分コードはアトミックタブに含まれています。

最初の関数 SetParametersは、ブロックパラメータとポートプロパティに基づいてブロックの構造を作成します。他の2つの関数、SetIOResetは、この構造体の変更が必要なときに登場します。

パラメータの設定

関数を定義するために提供しなければならないOMLコードは、以下のものが利用可能であることを前提としています:

  • 変数_labelで定義されたブロック名。
  • 対応するパラメータ名の下にあるブロックパラメータ値。
  • ブロックを配置するダイアグラムで、変数_diagramで定義します。
基本ブロックの場合、ダイアグラムに追加されるブロックのタイプは "block" です。OMLのコードには一貫して以下の行が含まれています:
_block = vssAddNewObject (’Block’, _diagram);
vssSetBlockName (_block, _label);

ブロックによって表現された構造は、提供されるAPIを使用して補足されます。ここで適用されるコードは、新しいブロックの属性によって大きく異なります。 APIとその使い方の網羅的なリストを提供するのではなく、既存のブロックに関連するコード、特に新しいブロックのプロパティに似たコードを確認することをお勧めします。このアプローチは、新しいコードを作成するプロセスを簡素化し、既存のコードの数行を修正するだけにします。

SetParameters関数は、提供されたOMLコードに基づいて自動的に生成されます。エラーメッセージを生成するための系統的なテストも含まれています。 この関数は、コンパイルとシミュレーションに使用されるモデル構造を構築するモデル評価フェーズで呼び出されます。

他の2つの関数は、SetParameters関数で設定されなかった値を設定するために使用されます。これらの値は、ブロック入出力ポートの未定義のサイズとデータタイプに関するものです。SetParameters関数は一般的にすべてのブロック構造プロパティを指定しますが、コンパイラが未決定のプロパティを残す場合があります。

サイズベクトルを負の値、例えば[-1, -2]に設定することで、入力のサイズを未知のままにしておくことができます。負の値は任意のサイズを示します。別の入力または出力のサイズも[-1, -2]に設定されている場合、どちらも任意のサイズを持ち、それらは等しくなります。入力サイズが[-1, -1]の場合は、任意のサイズの正方行列を意味します。負の値は未知のサイズを表し、同一の負の値は同一のサイズを表します。このアプローチでは、ブロックポートサイズの制約を多くの一般的なブロックに適用することができます。例えば、行列の転置ブロックは、入力サイズが[-1, -2]、出力サイズが[-2, -1]となり、入力と出力に課される制約をカプセル化します。

コンパイラは、これらの制約とブロックの相互接続方法を考慮して、実際のポートサイズを決定します。同様に、ブロックポートのデータ型は、コンパイラが実際の型を推測して、任意の値に設定することができます。

入出力の設定

注: ほとんどのユーザー定義ブロックは、SetIOReset関数を必要としないので、Atomの関連コードは空のままにしておきます。
SetIO関数は、ポートのデータ型やサイズの制約を負数を使用して課すことができない場合に定義されます。例えば、ブロックは任意の入力サイズと、入力より1単位大きい出力サイズを持つ可能性がありますこれらの一意制約は、負のサイズ値を使用して扱うことはできません。このような場合、ブロックは、SetParametersによって以前に構築されたブロック構造を操作するSetIO関数を提供することができます。この関数は、ポートサイズとタイプの現在の状態に基づいて、負のポートサイズとタイプを正の値に置き換えることができます。コンパイル中に複数回呼び出すことができます。出力が入力より1サイズ大きい場合、SetIO関数が呼び出された時点で入力または出力のどちらかのサイズがわかっていれば、関数はポートサイズを完全に定義することができます。

パラメータのリセット

コンパイラがブロックの入出力データサイズとデータ型を計算した後、ブロックのリセットOML関数が実際のポートデータサイズとデータ型を含むブロック構造で呼び出されます。この関数は、必要に応じて他のブロックのプロパティを調整することができます。ほとんどの場合、リセット関数はポートのデータ型に基づいて適切なシミュレーション関数を選択し、ユーザが提供したコードに基づいてアトミックで定義されます。