Main Content

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

転送テーブル

既存のライブラリ ブロックを編集する際に、モデルがライブラリ ブロックの古いバージョンで保存される場合、変更によってモデルに不具合が発生していないことを確認する必要があります。ライブラリ ブロックで行われる編集の種類には、ライブラリ パスの変更、ライブラリ ブロック名の変更またはパラメーターの追加、削除または名前の変更があります。

転送テーブルによりライブラリ ブロックの互換性が維持され、モデルが引き続き動作することを確実にします。転送テーブルを使用して、古いライブラリ ブロックと新しいライブラリ ブロックの間のマップをデータや機能の損失を発生させずに作成できます。古いライブラリ ブロックの新しいライブラリ ブロックへのマッピングを転送テーブルに指定した後、古いライブラリ ブロックへのリンクは、モデルの読み込み時に自動的に更新されます。たとえば、ライブラリ内でブロックの名前を変更したりブロックを移動したりすると、転送テーブルを使用して古いライブラリ ブロックへのリンクをもつモデルを更新できるようになります。転送テーブルは、次のようなシナリオで実行されます。

  • モデルを閉じ、再度開くとき。

  • add_block コマンドまたは replace_block コマンドを実行するとき。

転送テーブルの作成

メモ

切断されたリンクまたは無効なリンクをもつモデルを、転送テーブルを使用して更新することはできません。

  1. ロックされたライブラリ モデルを開きます。

  2. ライブラリ ウィンドウの [ライブラリ] タブで、[ロックされたライブラリ] をクリックします。ライブラリのロックは解除され編集できるようになりました。

  3. [モデル化] タブで、[ライブラリ プロパティ] をクリックします。[ライブラリ プロパティ] ダイアログ ボックスが開きます。

  4. [転送テーブル] タブをクリックします。

  5. ([新しいエントリの追加]) ボタンをクリックします。転送テーブルに新しい列が追加されます。

  6. [古いブロック パス] 列と [新しいブロック パス] 列に値を指定します。ブロックのパスを取得するには、モデルのブロックを選択して をクリックします。

  7. [バージョン] 列で、ライブラリ ブロックのバージョン番号を指定するように選択できます。

    古いブロック名と新しいブロック名が同じである場合、転送テーブルはバージョン番号を自動的に設定します。ライブラリ バージョン (LibraryVersion) の初期値は、ライブラリ リンクの作成時のライブラリのモデル バージョン (ModelVersion) から派生します。その後ライブラリ ブロックが更新されると、ライブラリのモデル バージョンと一致するようにライブラリ バージョンが更新されます。

    メモ

    • バージョン番号は数値でなければなりません。

    • 古いブロック パスと新しいブロック パスが同じである場合バージョン番号は <major_version>.<minor_version> の形式でなければなりません。たとえば、ライブラリ ブロックの名前の変更時などです。

    • バージョン番号には複数のドット表記を指定できません。たとえば、バージョン番号 1.3 は許可されますが、バージョン番号 1.3.1 は許可されません。

    • 転送テーブルを使用して、ライブラリ ブロックをあるライブラリから別のライブラリに移動する場合、バージョン番号の形式は重要ではありません。

  8. [変換関数] 列で、古いリンクと新しいリンクの間のパラメーター データの不一致を修正する MATLAB® ファイルを指定できます。古いリンク パラメーター データを新しいライブラリ ブロック用に変換することによって、古いリンクを読み込み、パラメーター データを維持することができます。詳細については、変換関数を参照してください。

    変換関数が指定されていないと、ライブラリを保存するときに [変換なし] が [変換関数] 列に表示されます。

  9. 変更を適用してダイアログ ボックスを閉じるには、[OK] をクリックします。古いパスから新しいパスへのマッピングが転送テーブルで作成されます。ライブラリへのリンクを含むモデルを開くときに、古いライブラリ ブロックへのリンクは自動的に更新されます。

転送テーブルが表示されたら、テーブル上部の検索バーを使用して内容をフィルターできます。このフィルターは、転送テーブルのエントリが多すぎる場合に特に役に立ちます。テーブルの列は昇順または降順に並べ替えできます。また、各列をその値によってグループ化することもできます。

ユーザー定義の転送テーブルの例を次に示します。

古いブロックと新しいブロックに対して同一のライブラリ ブロック名およびパスを指定する場合、転送テーブルはバージョン番号を自動的に設定します。同じ名前とパスをもつ最初のエントリの場合、古いブロックのバージョン番号は 0 から始まり、ブロックの新しいバージョンはライブラリのモデル バージョンとして設定されます。転送テーブルの [履歴] タブで、ライブラリのモデル バージョンを表示できます。

古いライブラリ ブロックと新しいライブラリ ブロックでインスタンス固有のパラメーター (InstanceData) が変更された場合、変換関数を指定しなければなりません。

この例では以下のようになります。

  • Block A のブロック パスは LibA から LibB に変更されます。

  • ライブラリ パスは同じままですが、Block X のブロック名は Block Y に変更されます。

  • Block M のブロック名は Block N に変更されました。インスタンス固有の変更を実行するために変換関数が指定されます。

  • Block L のブロックのバージョンとインスタンス固有のパラメーターが変更されました。

転送テーブルのプログラムによる作成

コマンド ラインで、ライブラリ内部または別のライブラリに移動したブロックの古い場所および新しい場所を指定する簡単な転送テーブルを作成できます。2 要素 cell 配列の cell 配列に ForwardingTable パラメーターを設定することによってライブラリと転送テーブルを関連付けます。ここでの 2 要素の cell 配列には、移動したブロックの元のパスと新しいパスを指定します。たとえば、転送テーブルを作成し、その転送テーブルを Lib1 という名前のライブラリに割り当てる構文は、次のとおりです。

set_param('Lib1', 'ForwardingTable', {{'Lib1/A', 'Lib2/A'} 
{'Lib1/B', 'Lib1/C'}});

ここで、

  • Lib1 は転送テーブルに関連付けられているライブラリです。

  • ブロック A は、Lib1 から Lib2 に転送されます。

  • ブロック B の名前は同じライブラリ内の C に変更されます。

変換関数

リンク付きブロックのインスタンスは、InstanceData というインスタンス固有のパラメーターに関連付けられています。ライブラリ ブロックのバージョンを作成する場合、パラメーター セットは InstanceData から追加または削除できます。

変換関数は、新しいライブラリ リンクと古いライブラリ リンクの InstanceData でパラメーターの不一致を修正します。したがって、ライブラリ リンクは必ず引き続き動作します。

パスの MATLAB ファイルを使用して変換関数を定義してから、[転送テーブル][変換関数] 列でその関数を指定できます。

転送テーブルで定義された新しいブロック パスは、変換関数で定義された値をオーバーライドします。新しいブロック パスの値がある種の条件に基づいて動的に変化する場合、新しいブロック パスは変換関数を使用してのみ定義されなければなりません。

変換関数の構文は以下でなければなりません。

function outData = TransformationFcn(inData)

ここで、

  • inData はフィールド ForwardingTableEntry および InstanceData のある構造体であり、ForwardingTableEntry も構造体です。

  • outData は、フィールド NewInstanceDataNewBlockPath をもつ構造体です。

一般変換関数は、中に多くのローカル関数を定義できます。この関数は、古いブロックの名前とバージョンに基づいて適切なローカル関数を呼び出します。これを使用して複数のローカル関数を 1 つの変換関数に統合し、MATLAB パス上に多くの変換関数をもたないようにできます。

Simulink® ライブラリの Compare to Constant ブロックについて考えます。このブロックのバージョンを、名前とブロック パスを変更しないで作成し、新しいライブラリ ブロックへのパラメーターを追加しなければなりません

次の表には、Compare to Constant ブロックの 2 つのバージョンにおけるパラメーターの違いが示されています。

古いバージョン新しいバージョン
Block {
BlockType		      Reference
Name		      "Compare\nTo Constant"
Ports		        [1, 1]
Position		     [210, 60, 250, 100]
SourceBlock	  "fixpt_lib_4/Logic & Comparison/Compare\nTo Constant"
SourceType	    "Fixed-Point Compare To Constant"
relop	           "=="
const	           "3.0"
    }
Block {
BlockType		      Reference
Name		      "Compare\nTo Constant"
SID		                      "15"
Ports		                     [1, 1]
Position		      [125, 50, 155, 80]
ZOrder		      -5
LibraryVersion	      "1.271"
SourceBlock	       "simulink/Logic and Bit\nOperations/Compare\nTo Constant"
SourceType	        "Compare To Constant"
relop		          "<="
const		             "3.0"
OutDataTypeStr	      "boolean"
ZeroCross		      on
    }
  

Compare to Constant ブロックの新しいバージョンには、これに関連付けられている追加のパラメーター (OutDataTypeStr および ZeroCross) があります。このような場合は、変換関数によって必ず、古いライブラリ リンクが動作するように InstanceData の追加のパラメーターが設定されていなければなりません。

この例では、値が uint8 である OutDataTypestr パラメーターを追加する、Compare to Constant ブロックの変換関数を示します。

function [outData] = TransformationCompConstBlk(inData)
outData.NewBlockPath = ''; % No change in the library block path
outData.NewInstanceData = [];
instanceData = inData.InstanceData;
% Get the field type 'Name' from instanceData
[ParameterNames{1:length(instanceData)}] = instanceData.Name;

if (~ismember('OutDataTypeStr',ParameterNames))
    % OutDataTypeStr parameter is not present in old link. Add it and set value uint8
    instanceData(end+1).Name = 'OutDataTypeStr';
    instanceData(end).Value = 'uint8';
end

outData.NewInstanceData = instanceData;

マスク パラメーター エイリアスの作成

マスク パラメーターの名前を変更する場合、古いパラメーター名を使用する既存の MATLAB スクリプトが引き続き動作することを確認しなければなりません。互換性を確認するために、マスク パラメーター名のエイリアス (別名) を作成できます。エイリアスによって、既存のモデル内のブロックへのリンクを再作成しなくても、ライブラリ ブロック内のマスク パラメーターの名前を変更することができます。

[エディット] パラメーターを含むマスクされたブロックについて考えます。この [エディット] パラメーターのマスク パラメーター名は p1 です。

MaskObj= 
% MaskParameter with properties:

           Type: 'edit'
    TypeOptions: {0×1 cell}
           Name: 'p1'
         Prompt: 'p1'
          Value: '0'
       Evaluate: 'on'
        Tunable: 'on'
      NeverSave: 'off'
         Hidden: 'off'
        Enabled: 'on'
        Visible: 'on'
        ToolTip: 'on'
       Callback: ''
          Alias: ''

[エディット] マスク パラメーターにはエイリアス名がないことに注意してください。マスク パラメーターのエイリアス名を追加するには、Alias マスク パラメーターのプロパティに値を設定します。

MaskObj.Alias = 'pa'

マスク パラメーターの名前またはエイリアスのいずれかを使用して、マスク パラメーターに対して関数呼び出しを実行します。たとえば、この場合は set_param(gcb, 'p1, '10) (マスク パラメーター名) または set_param(gcb, 'pa, '10) (マスク パラメーターのエイリアス) を使用して、[エディット] マスク パラメーターの値を設定します。

関連するトピック