Main Content

モデル全体でのクローンの特定

クローンは、同一のブロック タイプと接続をもつモデル化パターンです。これらのクローン パターンからライブラリ ブロックを作成し、クローンをライブラリ ブロックへのリンクで置き換えることによってモデルをリファクタリングでき、コンポーネントの再利用が可能になります。クローンの詳細については、クローン検出を使用したコンポーネント再利用の有効化を参照してください。

サブシステム内またはモデル全体の任意の場所でクローンを検索できます。

  • サブシステム クローン: サブシステム内のクローンのみを特定します。

  • モデル全体のクローン: モデル全体の任意の場所でクローンを特定します。

この例では、クローン検出器アプリと API を使用してモデル全体の任意の場所にあるクローンを特定し、それらをライブラリ ブロックへのリンクで置き換える方法を説明します。

クローン検出器アプリを使用したモデル全体でのクローンの特定

この例では、"クローン検出器" を使用してモデル全体でクローンを特定する方法を説明します。

  • モデル similar_clones_model を開きます。

  • モデルを現在の作業ディレクトリに保存します。

  • [アプリ] タブで、[クローン検出器] をクリックします。あるいは、MATLAB コマンド ラインで「clonedetection("similar_clones_model")」と入力します。

  • クローン検出のためのパラメーターを設定するには、[設定] をクリックします。[任意の場所のクローンに関する設定][モデル全体でのクローンの検出] をクリックします。

[最小領域サイズ] および [最小クローン グループ サイズ] は既定で 2 に設定されます。[最小領域サイズ] パラメーターはクローン領域ごとに必要な最小ブロックを表し、[最小クローン グループ サイズ] パラメーターはクローン グループとして定義するために必要な最小のクローン出現箇所を表します。

  • [クローンの検索] をクリックしてクローンを特定します。

  • アプリによってクローンが強調表示されます。厳密クローンは赤で、類似クローンは青で強調表示されます。

この例で強調表示されているクローンには、サブシステムおよびサブシステムに接続された Simulink ブロック内外で特定されたクローンが含まれます。

  • [クローンの置換] をクリックします。

アプリによってモデルがリファクタリングされ、クローンが作業ディレクトリの newLibraryFile ライブラリ ファイルへのリンクで置き換えられます。アプリによって、サブシステム外の Simulink クローン ブロックがリンクされた Subsystem ブロックで置き換えられます。

プログラムによるクローンの特定

  1. Simulink.CloneDetection.Settings クラスを使用してオブジェクトを作成します。

     cloneDetectionSettings = Simulink.CloneDetection.Settings()
     cloneDetectionSettings = 
                                IgnoreSignalName: 0
                             IgnoreBlockProperty: 0
                          ExcludeModelReferences: 0
                             ExcludeLibraryLinks: 0                      
                  FindClonesRecursivelyInFolders: 1
                        ParamDifferenceThreshold: 50
        ReplaceExactClonesWithSubsystemReference: 0
                                       Libraries: {}
                                         Folders: {}
                         DetectClonesAcrossModel: 0
                          ExcludeInactiveRegions: 0
  2. モデル全体でクローンを検索するには、DetectClonesAcrossModel を 1 に設定します。

    cloneDetectionSettings.DetectClonesAcrossModel = 1
    cloneDetectionSettings = 
    
                                IgnoreSignalName: 0
                             IgnoreBlockProperty: 0
                          ExcludeModelReferences: 0
                             ExcludeLibraryLinks: 0
                          SelectedSystemBoundary: []
                  FindClonesRecursivelyInFolders: 1
                        ParamDifferenceThreshold: 50
        ReplaceExactClonesWithSubsystemReference: 0
                                       Libraries: {}
                                         Folders: {}
                         DetectClonesAcrossModel: 1
                          ExcludeInactiveRegions: 0
                               MinimumRegionSize: 2
                           MinimumCloneGroupSize: 2

    MinimumRegionSizeMinimumCloneGroupSize は既定で 2 に設定されます。これらの値は変更できます。

  3. クローンを検出するには、cloneDetectionSettings オブジェクトを使用して関数 Simulink.CloneDetection.findClones を実行します。

    cloneResults = Simulink.CloneDetection.findClones('similar_clones_model',cloneDetectionSettings)
    cloneResults = 
    
              Clones: [1×1 struct]
        ExceptionLog: ''
    cloneResults.Clones = 
      Results with properties:
    
            Summary: [1×1 struct]
        CloneGroups: [1×2 struct]

    クローン検出 API の詳細については、プログラムによるサブシステム クローンの検出と置換を参照してください。

関連するトピック