ドキュメンテーション

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

データ ディクショナリの列挙値

Simulink® データ ディクショナリは、列挙型を含む MATLAB® 変数、データ オブジェクト、データ型などのモデル データを永続的に保存します。データ ディクショナリの基本的な情報は、データ ディクショナリとはを参照してください。

データ ディクショナリへの列挙型の移行

この例では、モデルで使用されている列挙型をデータ ディクショナリに移行する方法を示します。

設計データのインポート

  1. 設計データまたはブロックに列挙型を使用しているモデルを開きます。

  2. Simulink エディターで、[ファイル][モデル プロパティ][データ ディクショナリへのリンク] をクリックします。

  3. [モデル プロパティ] ダイアログ ボックスで、[新規作成] をクリックしてデータ ディクショナリを作成します。

  4. データ ディクショナリに名前を付けて保存し、[適用] をクリックします。

  5. [データの移行] をクリックします。

  6. 参照された変数のコピーについてのメッセージに対して、[移行] をクリックします。

  7. Simulink でデータ ディクショナリにインポートされなかった列挙型が報告されます。

  8. [OK] をクリックします。

    モデルがデータ ディクショナリにリンクされたことを報告する通知が Simulink エディターに表示されます。

列挙型のインポート

列挙型の定義をインポートするのは、その型を使用して作成しているすべての設計データをインポートした後のみです。列挙型をデータ ディクショナリにインポートすると、Simulink が MATLAB ファイルまたは型定義を含む P ファイルを無効にするため、MATLAB ベース ワークスペースに残っている変数の定義が失われます。

  1. MATLAB コマンド プロンプトで、モデル ブロック内で使用される列挙型の名前を取得します。

    % Find all variables and enumerated types used in model blocks
    usedTypesVars = Simulink.findVars('EnumsReporting','IncludeEnumTypes',true);
    % Here, EnumsReporting is the name of the model and
    % usedTypesVars is an array of Simulink.VariableUsage objects
    
    % Find indices of enumerated types that are defined by MATLAB files or P-files
    enumTypesFile = strcmp({usedTypesVars.SourceType},'MATLAB file');
    
    % Find indices of enumerated types that are defined using the function 
    % Simulink.defineIntEnumType
    enumTypesDynamic = strcmp({usedTypesVars.SourceType},'dynamic class');
    
    % In one array, represent indices of both kinds of enumerated types
    enumTypesIndex = enumTypesFile | enumTypesDynamic;
    
    % Use logical indexing to return the names of used enumerated types
    enumTypeNames = {usedTypesVars(enumTypesIndex).Name}'
    enumTypeNames = 
    
        'dEnum1'
        'dEnum10'
        'dEnum2'
        'dEnum3'
        'dEnum4'
        'dEnum5'
        'dEnum6'
        'dEnum9'
  2. データ ディクショナリを開いて、それを Simulink.data.Dictionary オブジェクトで表します。

    ddConnection = Simulink.data.dictionary.open('myEnumsDD.sldd')
    ddConnection = 
    
      Dictionary with properties:
    
              DataSources: {0x1 cell}
        HasUnsavedChanges: 0
               NumberOfEntries: 3
    

  3. importEnumTypes メソッドを使用して、モデルのブロックで使用されている列挙型をインポートします。このメソッドによってターゲット ディクショナリに対する変更が保存されるため、メソッドを使用する前に、保存されていない変更が許容可能なものであるか確認してください。

    [successfulMigrations, unsuccessfulMigrations] = ...
    importEnumTypes(ddConnection,enumTypeNames)
    successfulMigrations = 
    
    1x6 struct array with fields:
    
        className
        renamedFiles
    
    
    unsuccessfulMigrations = 
    
    1x2 struct array with fields:
    
        className
        reasons
    importEnumTypes で列挙型をインポートすると、列挙型クラス定義ファイルの名前が変更されて .save が追加されます。たとえば元の列挙型クラス定義ファイルの名前が Enum1.m であれば、Simulink では Enum1.m.save という名前になります。

    移行されなかった列挙型は構造体 unsuccessfulMigrations で報告されます。この例では 2 つの列挙型のインスタンスがモデル ワークスペースで定義され、モデルを閉じた後にインポートできます。モデルを閉じてそれらの列挙型をインポートします。

  4. ディクショナリを開いて移行された列挙型を表示します。

データ ディクショナリの列挙値の操作

以下の例では、データ ディクショナリの既存の列挙値を操作する方法を示します。

列挙型定義の名前の変更

  1. データ ディクショナリで、列挙型のコピーを作成し、そのコピーの名前を変更します。

  2. 古い名前の型から派生したモデルが使用する列挙オブジェクトを見つけます。

  3. これらのオブジェクトを、名前を変更した型から派生したオブジェクトに置き換えます。

  4. 古い名前の型を削除します。

列挙メンバーの名前の変更

以下のいずれかの方法を使用します。

  • ディクショナリ内の列挙値を選択し、1 つ以上の列挙メンバーの名前を変更します。

  • モデルが列挙メンバーを参照する場合、名前を変更したメンバーと一致するようにこれらの参照を変更します。

列挙メンバーの名前の削除

  1. 削除する列挙メンバーに対する、モデルの参照を見つけます。

  2. これらの参照を別のメンバーに置き換えます。

  3. 列挙値から元のメンバーを削除します。

列挙メンバーの元となる値の変更

列挙メンバーの値を MATLAB 変数として表す場合、または Simulink.Parameter オブジェクトの Value フィールドを使用して、列挙メンバーの値を変更できます。

  1. 値を変更する列挙メンバーに対する、モデルの参照を見つけます。

  2. これらの参照をメモしておきます。

  3. 列挙メンバーの値を変更します。

  4. モデルの列挙メンバーへの参照を手動で更新します。

参考

関連するトピック