メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

Simulink.ModelReference.protect

参照先のモデルの内容を見えなくして知的財産を隠す

説明

harnessHandle = Simulink.ModelReference.protect(mdl) は、mdl で指定されたモデルから保護モデルを作成します。保護モデルの名前は元のモデルと同じで、ファイル拡張子は .slxp です。既定では、ソフトウェアは保護モデルを現在の作業フォルダーに配置します。

モデル保護でハーネス モデルが作成されて開かれると、ハーネス モデルのハンドルが harnessHandle によって返されます。既定では、harnessHandle0 を返します。

harnessHandle = Simulink.ModelReference.protect(mdl,Name=Value) では、前の構文の入力引数に加えて、1 つ以上の名前と値の引数を使用してオプションを指定します。たとえば、プロジェクト内の依存関係を収集するには、Projecttrue に設定します。

[harnessHandle,neededVars] = Simulink.ModelReference.protect(___) は、neededVars で、保護モデルによって使用されるベース ワークスペース変数の名前を返します。前述の構文における入力引数の組み合わせを指定します。

すべて折りたたむ

CounterAlgorithm という名前の参照モデルを含む例を開きます。

openExample('simulink/ComponentInterfaceSpecificationUsingBusesExample')

参照モデルを保護します。

mdl = "CounterAlgorithm";
Simulink.ModelReference.protect(mdl);

Simulink.ModelReference.protect 関数は CounterAlgorithm.slxp という名前の保護モデルを現在の作業フォルダーに作成します。

ベース ワークスペースでは、モデル保護プロセスは既定ではハーネス モデルを作成しないため、この関数はハーネス ハンドルに対して 0 を返します。

Model ブロックでファイル拡張子が指定されていない場合、ブロックは元のモデルではなく保護モデルを参照します。既定では、保護モデルを参照するモデルはノーマル、アクセラレータまたはラピッド アクセラレータのモードで実行できます。

保護モデルのコードを生成する場合、保護モデルを参照するモデルはコード生成をサポートできます。

たとえば、CounterAlgorithm という名前の参照モデルを保護する場合に、C および C++ コードを生成します。

参照モデルを含む例を開きます。

openExample('simulink/ComponentInterfaceSpecificationUsingBusesExample')

参照モデルを保護し、保護モデルの C および C++ コードを生成しますが、生成されたコードを難読化しません。保護モデルの読み取り可能なコードを生成すると、受信者は保護モデルのコードを自分のコードと統合できます。

mdl = "CounterAlgorithm";
Simulink.ModelReference.protect(mdl, Mode="CodeGeneration", ...
ObfuscateCode=false);

関数は CounterAlgorithm.slxp という名前の保護モデルを作成します。保護モデルを参照するモデルは、C および C++ コード生成をサポートできます。

別の例として、hdlcoder_referenced_model_gain という名前の参照モデルを保護する場合に、HDL コードを生成します。

参照モデルを含む例を開きます。

mdl = "hdlcoder_referenced_model_gain";
openExample(mdl)

参照モデルを保護し、保護モデルの HDL コードを生成します。

Simulink.ModelReference.protect(mdl, Mode="HDLCodeGeneration");

関数は hdlcoder_referenced_model_gain.slxp という名前の保護モデルを作成します。保護モデルを参照するモデルは、HDL コード生成をサポートできます。

C、C++、および HDL コード生成をサポートする保護モデルを作成するには、Mode"CodeGeneration" に設定し、hdltrue に設定します。

保護モデルをサードパーティと共有する予定がある場合は、プロジェクトで保護モデル、ハーネス モデル、およびサポート ファイルをパッケージ化します。

CounterAlgorithm という名前の参照モデルを含む例を開きます。

openExample('simulink/ComponentInterfaceSpecificationUsingBusesExample')

参照モデルを保護し、プロジェクト内の保護モデルの依存関係を収集します。必要に応じて、サポートされている機能を説明するレポートを生成します。

mdl = "CounterAlgorithm";
Simulink.ModelReference.protect(mdl, Project=true, Report=true);

関数は CounterAlgorithm.slxp という名前の保護モデルと、CounterAlgorithm_protected.mlproj という名前のプロジェクト アーカイブを作成します。

プロジェクト アーカイブには次のものが含まれます。

  • CounterAlgorithm.slxp という名前の保護モデル

  • CounterAlgorithm_harness.slx という名前のハーネス モデル

  • BusTypes.sldd という名前のデータ ディクショナリ

  • CounterAlgorithm_harness.slxc という名前の Simulink® キャッシュ ファイル

プロジェクトを共有する前に、プロジェクトに必要なサポート ファイルが含まれているかどうか確認してください。サポート ファイルが不足している場合は、関連するハーネス モデルのコードをシミュレーションまたは生成することで、不足しているファイルを特定できます。不足している依存関係をプロジェクトに追加し、必要に応じてハーネス モデルを更新します。

保護モデルをサードパーティと共有するには、プロジェクト アーカイブを共有します。プロジェクト アーカイブの作成方法の詳細については、プロジェクトの共有を参照してください。

受信者が保護モデルとプロジェクト アーカイブを使用する方法については、サードパーティからの保護モデルの参照を参照してください。

保護モデルには、設計ファイルの名前とバージョン、保護モデルの作成に使用されたプラットフォームなどの情報が自動的に保存されます。継続的インテグレーション システムで保護モデルを作成する場合は、保護モデルの作成に関連するジョブ番号、Git™ コミット、継続的インテグレーション システム タグなどの来歴情報を含めることを検討します。

たとえば、継続的インテグレーションに Jenkins® を使用するとします。保護モデルの来歴情報を含むタグを作成します。たとえば、Jenkins 環境の GIT_COMMIT 変数と BUILD_ID 変数を使用してタグを作成します。

JenkinsInfo = [getenv("GIT_COMMIT")+"@"+getenv("BUILD_ID")];

モデルを保護し、ファイルの来歴情報を含むタグを含めます。必要に応じて、保護モデルの生成に使用されたモデルのバージョンを含むレポートを生成します。次の例では、保護するモデルは mdl で指定されています。

Simulink.ModelReference.protect(mdl, Tag=JenkinsInfo, Report=true);

関数は保護モデルを作成します。タグに保存されている情報を取得するには、保護モデル レポートを開くか、slxpinfo 関数を使用します。

保護モデルを参照するモデルをシミュレートするには、ベース ワークスペースまたはデータ ディクショナリで変数の定義が必要になることがあります。たとえば、CounterAlgorithm モデルには、モデルのルートの入力端子と出力端子のバスを指定する変数が必要です。保護モデルを出荷する際は、必要な変数の定義を含めないとモデルを使用できません。

ヒント

必要な変数の定義を保護モデルとともに自動的にプロジェクトにパッケージ化するには、Projecttrue に設定します。

CounterAlgorithm という名前の参照モデルを含む例を開きます。

openExample('simulink/ComponentInterfaceSpecificationUsingBusesExample')

保護モデルを生成し、保護モデルのハーネス モデルを作成し、保護モデルに必要な変数を判別します。

mdl = "CounterAlgorithm";
[harnessHandle,neededVars] = Simulink.ModelReference.protect(mdl, ...
Harness=true)

ハーネス モデルのハンドルは harnessHandle で渡されます。

受信者に送信する必要がある変数は、neededVars で渡されます。neededVars の値は、保護モデルに必要な変数の名前を含む cell 配列です。ただし、この cell 配列には、モデルには必要がない変数の名前も含まれる可能性があります。

保護モデルを共有する前に、neededVars を編集して、モデルに必要がない変数を削除します。必要な変数をデータ ディクショナリに保存します。

入力引数

すべて折りたたむ

保護するモデル。文字ベクトルまたは string スカラーとして指定します。保護するモデルの名前、または保護するモデルを参照する Model ブロックのパスを指定します。

データ型: char | string

名前と値の引数

すべて展開する

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

例: Simulink.ModelReference.protect(mdl,Mode="CodeGeneration",OutputFormat="Binaries",ObfuscateCode=true) は、保護モデルに対して難読化されたコードを生成し、バイナリ ファイルと生成されたコード内のヘッダーのみが保護モデルのユーザーに表示されるように指定します。

ファイル作成オプション

すべて展開する

プロジェクト内の依存関係を収集するためのオプション。false または true として指定します。

保護モデルとともにハーネス モデルを含むサポート ファイルをプロジェクト アーカイブにパッケージ化するかどうかを指定します。サポート ファイルのタイプと数は保護されるモデルによって異なります。ベース ワークスペース定義を含む MAT ファイルや、関連する定義に間引きされたデータ ディクショナリはサポート ファイルの例です。サポート ファイルは保護されません。

  • false — 保護モデルのみを作成します。保護モデルに依存関係がある場合は、それらを個別に共有しなければなりません。同様に、保護モデルのハーネス モデルを作成する場合は、ハーネス モデルを個別に共有しなければなりません。

  • true — 保護モデル、その依存関係、およびハーネス モデルが含まれるプロジェクト アーカイブ (.mlproj) を作成します。サポート ファイルは保護されません。プロジェクト アーカイブは簡単に共有できる単一ファイルです。対話型のプロジェクトを作成するには、プロジェクト アーカイブを開きます。

例: Simulink.ModelReference.protect(mdl,Project=true)

ヒント

プロジェクトを共有する前に、プロジェクトに必要なサポート ファイルが含まれているかどうか確認してください。サポート ファイルが不足している場合は、関連するハーネス モデルのコードをシミュレーションまたは生成することで、それらを特定できます。不足している依存関係をプロジェクトに追加し、必要に応じてハーネス モデルを更新します。詳細については、プロジェクト ファイルの管理を参照してください。

依存関係

Projecttrue に設定するには、Mode を、シミュレーションをサポートする値に設定します。たとえば、Mode"Simulation" (既定) に設定します。

データ型: logical

カスタムのプロジェクト名。文字ベクトルまたは string スカラーとして指定します。

生成されたファイルが含まれるプロジェクト アーカイブの名前を指定します。アーカイブ内のプロジェクトは同じ名前を使用します。

カスタム名を指定しない場合、保護モデル名の後に _protected が付いたものがプロジェクトの既定の名前になります。

例: Simulink.ModelReference.protect(mdl,Project=true,ProjectName="MyProject")

依存関係

この引数を有効にするには、Projecttrue に設定します。

データ型: char | string

ハーネス モデルを作成するためのオプション。ブール値として指定します。

保護モデルのハーネス モデルを作成するかどうかを指定します。ハーネス モデルは保護モデルのために Model ブロックで参照される分離された環境を提供します。

  • false — 保護モデルのハーネス モデルを作成しません。

  • true — 保護モデルのハーネス モデルを作成します。

ベース ワークスペース定義に依存する保護モデル用のハーネス モデルを作成するときに、ソフトウェアはベース ワークスペース定義を含む MAT ファイルを作成します。

ハーネス モデルは、ベース ワークスペース定義を含む MAT ファイルやデータ ディクショナリといったサポート ファイルにアクセスできなければなりません。

例: Simulink.ModelReference.protect(mdl,Harness=true)

依存関係

  • Harnesstrue に設定するには、Mode を、シミュレーションをサポートする値に設定します。たとえば、Mode"Simulation" (既定) に設定します。

  • Projecttrue に設定すると、Harnesstrue に設定されます。

データ型: logical

保護モデルのフォルダー。文字ベクトルまたは string スカラーとして指定します。

例: Simulink.ModelReference.protect(mdl,Path="C:\Work")

依存関係

保護対象のモデルは、MATLAB® パス上になければなりません。

データ型: char | string

R2024b 以降

追加情報のカスタム テキスト文字列。文字ベクトルまたは string スカラーとして指定します。

保護モデルを設計ファイルの対応するバージョンまでトレースできると、デバッグに役立ちます。ファイルの来歴情報を保護モデルに保存するには、保護モデルの作成に関連するジョブ番号、Git コミット、継続的インテグレーション システム タグなどの情報を含むカスタム テキスト タグを指定します。

タグの長さは 256 文字を超えてはなりません。

環境変数に基づいてタグを生成するには、getenv 関数を使用します。

例: Simulink.ModelReference.protect(mdl,Tag=myTag)

データ型: char | string

R2024b 以降

ビルド プロセス情報の詳細出力。数値または logical 1 (true) または logical 0 (false) として指定します。

既定では、モデル保護プロセスには限られたビルド プロセス情報のみが表示されます。モデル保護中に詳細なビルド プロセス情報を表示するには、Verbosetrue に設定します。

ビルド プロセス情報の表示を制御するために、モデル保護プロセスは、[詳細なアクセラレータのビルド] および [詳細なビルド] コンフィギュレーション パラメーターの値を一時的にオーバーライドします。

例: Simulink.ModelReference.protect(mdl,Verbose=true)

データ型: logical

機能オプション

すべて展開する

レポートを生成するためのオプション。ブール値として指定します。

レポートを表示するには、次のいずれかのアクションを実行します。

  • Simulink エディター:Model ブロックで、保護モデル バッジ アイコン を右クリックします。次に、[レポートの表示] を選択します。

  • MATLAB コマンド ウィンドウ:関数 Simulink.ProtectedModel.open を使用します。たとえば、mdl によって指定される保護モデルのレポートを表示するには、次のコマンドを入力します。

    Simulink.ProtectedModel.open(mdl,"report");

レポートはHTML 形式で生成されます。保護モデルの環境、機能、およびインターフェイスに関する情報が含まれています。

例: Simulink.ModelReference.protect(mdl,Report=true)

依存関係

Reporttrue に設定するには、Mode を、シミュレーションをサポートする値に設定します。たとえば、Mode"Simulation" (既定) に設定します。

データ型: logical

読み取り専用 Web ビューを含めるためのオプション。ブール値として指定します。

受信者が Web ブラウザーで表示できる Simulink モデルの対話的な表現を共有するかどうかを指定します。モデルのこの読み取り専用 Web ビューには、モデルのコンテンツおよびブロック パラメーターが含まれます。

  • false — 保護するモデルの Web ビューを共有しません。

  • true — 保護するモデルの Web ビューを共有します。

保護モデルの Web ビューを開くには、次のいずれかのアクションを実行します。

  • [ファイル] パネル: 保護モデル ファイル (.slxp) をダブルクリックします。

  • MATLAB コマンド ウィンドウ:関数 Simulink.ProtectedModel.open を使用します。たとえば、mdl によって指定される保護モデルの Web ビューを表示するには、次のコマンドを入力します。

    Simulink.ProtectedModel.open(mdl,"webview");

例: Simulink.ModelReference.protect(mdl,Webview=true)

依存関係

モデルの読み取り専用 Web ビューを作成するには、Simulink Report Generator™ ライセンスが必要です。

データ型: logical

モデル保護モード。次のいずれかの値として指定します。

  • "Simulation" (R2023b 以降) — 保護モデルを参照するモデルをノーマル、アクセラレータまたはラピッド アクセラレータのモードで実行できます。

    R2023b より前: "Simulation" の代わりに "Accelerator" を使用します。

  • "CodeGeneration" — 保護モデルを参照するモデルをノーマル、アクセラレータ、ラピッド アクセラレータ、またはエクスターナル モードで実行でき、そのモデルは C および C++ コード生成をサポートできます。このオプションには Simulink Coder™ ライセンスが必要です。

  • "HDLCodeGeneration" — 保護モデルを参照するモデルをノーマル、アクセラレータまたはラピッド アクセラレータのモードで実行でき、そのモデルは HDL コード生成をサポートできます。このオプションには HDL Coder™ のライセンスが必要です。

  • "ViewOnly" — 保護モデルは読み取り専用 Web ビューのみをサポートします。保護モデルはシミュレーションまたはコード生成はサポートしません。このオプションには Simulink Report Generator ライセンスが必要です。

モデルの階層構造におけるシミュレーション モードについては、モデルの階層構造内のシミュレーション モードの選択を参照してください。

例: Simulink.ModelReference.protect(mdl,Mode="Simulation")

生成コードのインターフェイス。次のいずれかの値として指定します。

  • "Model reference" — 保護モデルを参照する Model ブロックは、アクセラレータ モード、ソフトウェアインザループ (SIL) モード、またはプロセッサインザループ (PIL) モードでの C および C++ コードの生成とシミュレーションをサポートできます。SIL および PIL シミュレーションでは、ソフトウェアは、参照モデルを使用するより大きなアプリケーションの一部として、生成コードを展開します。生成されたアーティファクトは、"ModelReferenceCoderTarget" ビルド仕様を指定して slbuild 関数によって生成されたアーティファクトと一致します。

  • "Top model" — 保護モデルを参照する Model ブロックは、アクセラレータ モード、ソフトウェアインザループ (SIL) モード、またはプロセッサインザループ (PIL) モードでのシミュレーションをサポートできます。SIL および PIL シミュレーションでは、ソフトウェアは、スタンドアロン アプリケーションとして、生成コードを展開します。生成されたアーティファクトは、"StandaloneCoderTarget" ビルド仕様を指定して slbuild 関数によって生成されたアーティファクトと一致します。

SIL および PIL シミュレーションにより、保護モデルのコードを検証できます。

例: Simulink.ModelReference.protect(mdl,CodeInterface="Top model")

依存関係

[システム ターゲット ファイル] コンフィギュレーション パラメーターは、ERT ベースのシステム ターゲット ファイル (たとえば、ert.tlc) に設定されなければなりません。このオプションには Embedded Coder® のライセンスが必要です。

HDL コードを生成するためのオプション。ブール値として指定します。

保護モデルでシミュレーション、C および C++ コード生成、HDL コード生成をサポートするために、Mode"CodeGeneration" に、hdltrue に設定します。

例: Simulink.ModelReference.protect(mdl,Mode="CodeGeneration",hdl=true)

ヒント

保護モデルでシミュレーションおよび HDL コード生成をサポートし、C および C++ コード生成はサポートしないようにするには、Mode"HDLCodeGeneration" に設定します。hdltrue に設定する必要はありません。

依存関係

  • HDL コードを生成するには、HDL Coder ライセンスが必要です。

  • この引数は、Mode"CodeGeneration" に設定した場合のみ出力に影響します。

データ型: logical

R2022a 以降

シミュレーションの調整可能なパラメーター。"None"{}"All"、string 配列、または文字ベクトルの cell 配列として指定します。

受信者によるシミュレーション中の調整を可能にする、外部データ ソースのパラメーターを指定します。

モデル保護プロセスでは、モデル ワークスペース内のパラメーターの調整可能性が適用されます。モデルの引数は本質的に調整可能です。モデル引数の調整可能性を指定する必要はありません。

1 つ以上の保護モデルを参照するモデルを保護する場合は、各参照保護モデルの調整可能なパラメーターを、親モデルに対しても調整可能として指定します。保護モデルの調整可能なパラメーターのリストを取得するには、関数 Simulink.ProtectedModel.getTunableParameters を使用します。

シミュレーション用の調整可能なパラメーターの詳細については、ブロック パラメーター値の調整と試行を参照してください。

例: Simulink.ModelReference.protect(mdl,TunableParameters=["param1","param2"])

データ型: char | string | cell

保護モデルのコールバックを指定するためのオプション。Simulink.ProtectedModel.Callback オブジェクトの cell 配列として指定します。

例: Simulink.ModelReference.protect(mdl,Callbacks={pmcallback_sim,pmcallback_cg})

データ型: cell

保護オプション

すべて展開する

論理値として指定されている生成されたコードを難読化するためのオプションです。

例: Simulink.ModelReference.protect(mdl,Mode="CodeGeneration",ObfuscateCode=true)

依存関係

このオプションは、Mode"CodeGeneration" に設定した場合のみ適用されます。難読化は HDL コード生成ではサポートされていません。

データ型: logical

保護されたコードの可視性。次のいずれかの値として指定します。

  • "CompiledBinaries" — 生成されたコードのコンパイル済みバイナリのみを含めます。バイナリ ファイルおよびヘッダーが表示されます。

  • "MinimalCode" — 選択したビルド設定でコードをビルドするために必要な最小限のヘッダー ファイルのみを含めます。ビルド フォルダーのコードが表示されます。受信者は、保護モデルのレポート内のコードを検証し、目的に応じてそれを再コンパイルできます。

  • "AllReferencedHeaders" — インクルード パスにあるヘッダー ファイルを含めます。ビルド フォルダーのコードが表示されます。また、このコードによって参照されるヘッダーも表示されます。

この引数は、保護モデル用に生成されたコードのどの部分がユーザーに表示されるかを決定します。

例: Simulink.ModelReference.protect(mdl,Mode="CodeGeneration",OutputFormat="AllReferencedHeaders")

依存関係

この引数は、Mode"Simulation""Accelerator"、または "CodeGeneration" に設定した場合のみ出力に影響します。

保護モデルを暗号化するためのオプション。ブール値として指定します。

このオプションは、保護に際してパスワードを指定した場合に、または以下の関数を使用することにより適用されます。

指定したパスワードを保護モデルに適用するには、Encrypttrue に設定します。

例: Simulink.ModelReference.protect(mdl,Encrypt=true)

データ型: logical

保護モデルにデジタル証明書で署名するためのオプション。デジタル証明書を指定する文字ベクトルまたは string スカラーとして指定します。証明書ファイルがパスワードで保護されている場合は、証明書を使用する前に、関数 Simulink.ModelReference.ProtectedModel.setPasswordForCertificate を使用してパスワードを指定します。

例: Simulink.ModelReference.protect(mdl,Sign="certificate_file.pfx")

データ型: char | string

変更可能な保護モデルを作成するためのオプション。ブール値として指定します。

このオプションを使用するには、次の手順に従います。

例: Simulink.ModelReference.protect(mdl,Modifiable=true)

データ型: logical

関数ハンドルとして指定された保護モデル ファイル用に後処理関数を追加するオプションです。

この関数は Simulink.ModelReference.ProtectedModel.HookInfo オブジェクトを入力変数として受け入れます。このオブジェクトはソース コード ファイルおよび保護モデルの作成中に生成されるその他のファイルについて情報を提供します。オブジェクトは、変更してはいけないエクスポート済みシンボルについても情報を提供します。保護モデルをパッケージ化する前に、ソフトウェアは後処理関数を呼び出します。

最上位モデル インターフェイスをもつ保護モデルの場合、Simulink.ModelReference.ProtectedModel.HookInfo オブジェクトはエクスポート済みシンボルについての情報を提供できません。

例: Simulink.ModelReference.protect(mdl,Mode="CodeGeneration",CustomPostProcessingHook=@(protectedMdlInf)myHook(protectedMdlInf))

依存関係

この引数を有効にするには、Mode"CodeGeneration" に設定します。

出力引数

すべて折りたたむ

ハーネス モデルのハンドル。double として返されます。モデルの保護でハーネス モデルが作成されない場合、またはハーネス モデルがプロジェクト アーカイブにパッケージ化される場合、戻り値は 0 になります。

モデルの保護の後に開いているハーネス モデルを作成するには、Harnesstrue に、Projectfalse (既定値) に設定します。

保護モデルで使用されるベース ワークスペース変数の名前。cell 配列として返されます。

cell 配列には以下が含まれます。

  • 調整可能なパラメーター

  • モデル インターフェイスで使用されるパラメーター

  • バス オブジェクト、列挙型、値の型など、データ型の一部を指定するパラメーター

  • データ ストア メモリで使用されるパラメーター

cell 配列には保護モデルが使用しない変数も含めることができます。

バージョン履歴

R2012b で導入

すべて展開する