Main Content

MATLAB からのルックアップ テーブル データのインポート

ダイアログ ボックスの [テーブルとブレークポイント] タブ内でそれらのデータを参照することにより、MATLAB ワークスペースの変数からテーブルとブレークポイントのデータをインポートできます。次の例では、MATLAB ワークスペースから標準形式および非標準形式のデータをインポートおよびエクスポートする方法を示します。

標準形式のルックアップ テーブル データのインポート

n-D Lookup Table ブロックの 3 次元ルックアップ テーブルを指定すると仮定します。

ルックアップ テーブルのブレークポイントとテーブル データとして使用するワークスペース変数を作成します。

table3d_map = zeros(2,4,3);
table3d_map(:,:,1) = [     1     2     3     4;      5     6     7     8];
table3d_map(:,:,2) = [    11    12    13    14;     15    16    17    18];
table3d_map(:,:,3) = [   111   112   113   114;   115   116   117   118];
bp3d_z =[  0    10    20];
bp3d_x =[     0    10    20    30];
bp3d_y =[   400  6400];
n-D Lookup Table ブロックのダイアログ ボックスを開き、[テーブルとブレークポイント] タブの以下のパラメーターを入力します。

  • テーブル データ: table3d_map

  • ブレークポイント 1: bp3d_y

  • ブレークポイント 2: bp3d_x

  • ブレークポイント 3: bp3d_z

[テーブルとブレークポイントの編集] をクリックしてルックアップ テーブル エディターを開き、ワークスペース変数からのデータを表示します。

標準形式のルックアップ テーブル データの伝播

ルックアップ テーブル データを変更した場合、[ファイル][ブロック データの更新] を使用して、変更内容をデータのインポート元の MATLAB ワークスペース変数に伝播させることを検討してください。

ルックアップ テーブル エディターを使用して、Simulink.LookupTable のテーブル データとブレークポイント ベクトルおよび Simulink.Breakpoint オブジェクトのブレークポイント ベクトルを編集し、変更をオブジェクトに伝播して戻すこともできます。

標準形式のルックアップ テーブル データのインポートに記載されている MATLAB ワークスペース変数からインポートされたルックアップ テーブル変数を変更すると仮定します。たとえば、(1,1,1) のデータの値を 1 から 33 に変更します。この変更をワークスペースの table3d_map に伝播するには、ルックアップ テーブル エディターのツールストリップで [適用] をクリックします。

非標準形式のルックアップ テーブル データのインポート

n-D Lookup Table ブロックの 3 次元ルックアップ テーブルを指定すると仮定します。ルックアップ テーブルのブレークポイントとテーブル データとして使用するワークスペース変数を作成します。テーブル データの変数 table3d_map_custom は 2 次元行列です。

table3d_map_custom = zeros(6,4);
table3d_map_custom = [     1     2     3     4;      5     6     7     8;
11      12     13      14;        15      16      17     18;
111   112    113    114;     115    116    117    118];
bp3d_z =[  0    10    20];
bp3d_x =[  0    10    20    30];
bp3d_y =[  400  6400];
n-D Lookup Table ブロックのダイアログ ボックスを開き、[テーブルとブレークポイント] タブの以下のパラメーターを入力します。下記では、reshape コマンドを使用して table3d_map_custom をテーブル データ入力の 3 次元行列に変換しています。

  • テーブル データ: reshape(table3d_map_custom,[2,4,3])

  • ブレークポイント 1: bp3d_y

  • ブレークポイント 2: bp3d_x

  • ブレークポイント 3: bp3d_z

[テーブルとブレークポイントの編集] をクリックしてルックアップ テーブル エディターを開き、ワークスペース変数からのデータを表示します。

ルックアップ テーブル エディターで 1 を 33 に変更します。ルックアップ テーブル エディターはテーブルのコピーを保存して、変更を記録します。MATLAB® ワークスペースから変数値を復元するには、ルックアップ テーブル エディターのツールストリップで [再読み込み] をクリックします。MATLAB ワークスペースの変数を編集済みのデータで更新するには、ルックアップ テーブル エディターのツールストリップで [適用] をクリックします。n-D Lookup Table ブロックの非標準テーブル データを含んでいるワークスペース変数 table3d_map_custom への変更は伝播できません。変更を伝播するには、MATLAB 検索パスに存在するカスタマイズ関数を登録しなければなりません。詳細については、非標準形式のルックアップ テーブル データの伝播を参照してください。

非標準形式のルックアップ テーブル データの伝播

この例では、ルックアップ テーブル エディターでの変更を非標準形式のワークスペース変数に伝播する方法を示します。非標準形式のルックアップ テーブル データのインポートに記載されている Simulink® モデルには、2 次元のワークスペース変数 table3d_map_custom からテーブル データを取得する 3 次元ルックアップ テーブルがあると仮定します。ルックアップ テーブル エディターでルックアップ テーブルを更新し、これらの変更をカスタマイズ関数を使用して table3d_map_custom に伝播します。

  1. 次の内容の sl_customization.m という名前のファイルを作成します。

    function sl_customization(cm)
    cm.LookupTableEditorCustomizer.getTableConvertToCustomInfoFcnHandle{end+1} = ...
    @myGetTableConvertInfoFcn;
    end

    この関数では、

    • 引数 cm はカスタマイズ マネージャー オブジェクトのハンドルです。

    • ハンドル @myGetTableConvertInfoFcncm.LookupTableEditorCustomizer.getTableConvertToCustomInfoFcnHandle の cell 配列内の関数ハンドルのリストに追加されます。cell 配列に追加するハンドルの関数には任意の英数字名を使用できます。

  2. 同じファイルで、関数 myGetTableConvertInfoFcn を定義します。

    function blkInfo = myGetTableConvertInfoFcn(blk,tableStr)
            blkInfo.allowTableConvertLocal = true;
            blkInfo.tableWorkSpaceVarName = 'table3d_map_custom';
            blkInfo.tableConvertFcnHandle = @myConvertTableFcn;
    end

    関数 myGetTableConvertInfoFcnblkInfo オブジェクトを返します。このオブジェクトには以下の 3 つのフィールドが含まれています。

    • allowTableConvertLocal — ブロックのテーブル テータの変換を許可します。

    • tableWorkSpaceVarName — 非標準テーブル形式をもつワークスペース変数の名前を指定します。

    • tableConvertFcnHandle — 変換関数のハンドルを指定します。

    allowTableConvertLocaltrue に設定されている場合、そのブロックのテーブル データは名前が tableWorkSpaceVarName に一致するワークスペース変数の非標準形式に変換されます。変換関数は、tableConvertFcnHandle が指定するハンドルに対応します。変換関数には任意の英数字名を使用できます。

  3. 同じファイルで、関数 myConvertTableFcn を定義します。この関数はサイズが "行数 x 列数 x 高さ" の 3 次元のルックアップ テーブルを、サイズ "(行数 x 高さ) x 列数" の 2 次元の変数に変換します。

    % Converts 3-dimensional lookup table from Simulink format to
    % nonstandard format used in workspace variable
    function cMap = myConvertTableFcn(data)
        
    % Determine the row and column number of the 3D table data
        mapDim = size(data);
        numCol = mapDim(2);
        numRow = mapDim(1)*mapDim(3);
        cMap = zeros(numRow, numCol);
       % Transform data back to a 2-dimensional matrix
        cMap = reshape(data,[numRow,numCol]);
    end
  4. sl_customization.m を MATLAB 検索パス上に配置します。検索パス上には sl_customization.m という名前のファイルを複数もつことができます。詳細については、複数のカスタマイズ関数を使用する動作を参照してください。

  5. MATLAB コマンド プロンプトで Simulink のカスタマイズを更新します。

    sl_refresh_customizations
  6. ルックアップ テーブル ブロックのルックアップ テーブル エディターを開き、[ファイル][ブロック データの更新] を選択します。[はい] をクリックしてワークスペース変数 table3d_map_custom を上書きします。

  7. ベース ワークスペースで table3d_map_custom の値を確認します。

    table3d_map_custom =
    
        33     2     3     4
         5     6     7     8
        11    12    13    14
        15    16    17    18
       111   112   113   114
       115   116   117   118

    ルックアップ テーブル エディターの変更がワークスペース変数に伝播されています。

メモ

ワークスペース変数 table3d_map_custom を上書きしない場合、ワークスペース変数を数値データに置き換えるか確認するメッセージが表示されます。[はい] をクリックすると、[テーブル データ] フィールドの式を数値データに置き換えます。ルックアップ テーブル エディターによるテーブル データの変更がブロック ダイアログ ボックスに表示されないようにする場合は [いいえ] をクリックします。

複数のカスタマイズ関数を使用する動作

MATLAB セッションの開始時に、Simulink はパス上の sl_customization.m カスタマイズ ファイルをそれぞれ読み込み、関数 sl_customization を実行します。各関数を実行すると、そのセッションのカスタマイズが作成されます。

ルックアップ テーブル エディターで [ファイル][ブロック データの更新] を選択すると、エディターは cm.LookupTableEditorCustomizer.getTableConvertToCustomInfoFcnHandle の cell 配列で関数ハンドルのリストを確認します。cell 配列に 1 つ以上の関数ハンドルが含まれる場合、allowTableConvertLocal プロパティによってルックアップ テーブル エディターの変更を伝播できるかどうかが決定されます。

  • 値が true に設定されている場合、テーブル データはワークスペース変数では非標準形式に変換されます。

  • 値が false に設定されている場合、テーブル データはワークスペース変数では非標準形式に変換されません。

  • 値が true に設定され、別のカスタマイズ関数では false であると指定されている場合、ルックアップ テーブル エディターはエラーを報告します。

関連するトピック