このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
coder.mapping.api.get
モデルのコード マッピングの取得
構文
説明
は指定されたモデルに対してアクティブなコード マッピングを coderMapObj = coder.mapping.api.get(simulinkModel)coderMapObj オブジェクトとして返します。コード マッピングはモデル データ要素と関数を C または C++ コード生成の構成に関連付けます。モデルに複数のコード マッピングがある場合、アクティブなコード マッピングはアクティブなシステム ターゲット ファイルに関連付けられたマッピングです。
コード マッピングが存在しない場合、エラーが生成されます。モデルの Coder アプリを開くと、Simulink® はコード マッピング オブジェクトを作成します。モデルの Coder アプリを開いていない場合は、関数 coder.mapping.utils.create を呼び出してコード マッピング オブジェクトを作成できます。
は指定されたコード マッピング タイプに対応するモデルのコード マッピングを coderMapObj = coder.mapping.api.get(simulinkModel,codeMappingType)coderMapObj オブジェクトとして返します。
は、coderDataDictObj = coder.mapping.api.get(coderDictionary)coderDictionary で指定された共有ディクショナリ内のデータと関数の既定値を取得および設定するために使用できるオブジェクト coderDataDictObj を返します。
メモ
オブジェクト
coderMapObjを使用してディクショナリに加えた変更を保存するには、同じディクショナリに対して一般ディクショナリ オブジェクトSimulink.data.Dictionaryを作成して使用します。この関数の構文は、データ インターフェイス ディクショナリでのみサポートされています。
例
プログラム インターフェイスを使用して、Simulink モデルのコード マッピング オブジェクトを作成および使用します。
モデル NoCoderMapping を読み込みます。
simulinkModel = "NoCoderMapping";
load_system(simulinkModel);try-catch ブロックを使用して、モデル用にコード マッピング オブジェクトが存在するかどうかを判別します。try ブロック内で、関数 coder.mapping.api.get を使用して既存のオブジェクトの取得を試みます。catch ブロック内で、関数 coder.mapping.utils.create を使用して新しいコード マッピング オブジェクトを作成します。コード マッピング オブジェクトを変数 codeMapObj に保存します。
モデルに既存のコード マッピング オブジェクトがあったかどうかを示す出力メッセージを追加します。
try codeMapObj = coder.mapping.api.get(simulinkModel); fprintf("" + ... " ========================================================\n" + ... " The model already had code mappings.\n" + ... " ========================================================\n"); catch fprintf("" + ... " ==========================================\n" + ... " The model does not have code mappings.\n" + ... " Creating new code mappings for the model.\n" + ... " ==========================================\n"); codeMapObj = coder.mapping.utils.create(simulinkModel); end
========================================== The model does not have code mappings. Creating new code mappings for the model. ==========================================
モデルの入力端子 inport_1 のストレージ クラスを取得します。
getInport(codeMapObj,"inport_1","StorageClass")
ans = 'Auto'
入力端子 inport_1 のストレージ クラスを ExportedGlobal に設定します。
setInport(codeMapObj,"inport_1",StorageClass="ExportedGlobal")
同じ try-catch ブロックを使用して、関数 coder.mapping.api.get でモデルの既存のコード マッピングをどのように取得できるようになったかを確認します。
try codeMapObj = coder.mapping.api.get(simulinkModel); fprintf("" + ... " ========================================================\n" + ... " The model already had code mappings.\n" + ... " ========================================================\n"); catch fprintf("" + ... " ==========================================\n" + ... " The model does not have code mappings.\n" + ... " Creating new code mappings for the model.\n" + ... " ==========================================\n"); codeMapObj = coder.mapping.utils.create(simulinkModel); end
======================================================== The model already had code mappings. ========================================================
モデルの入力端子 inport_1 のストレージ クラスを取得します。これは、以前に設定したストレージ クラスであることに注意してください。
getInport(codeMapObj,"inport_1","StorageClass")
ans = 'ExportedGlobal'
モデルを保存せずに閉じます。
close_system(simulinkModel,false)
"Embedded Coder ディクショナリ" を使用してコード マッピング オブジェクトをプログラムによって取得して使用します。
コマンドが [コード マッピング] エディターとモデル ディクショナリにどのように反映されるかを対話的に確認するには、[データの既定の設定] タブが選択された状態で [コード マッピング] エディターが開いていて、[データの既定の設定] セクションが選択された状態でモデル ディクショナリが開いていることを確認してください。[コード マッピング] エディターを開く方法については、コード マッピング エディター – C を開くを参照してください。モデル ディクショナリを開く方法については、Embedded Coder ディクショナリ を開くを参照してください。
モデルとディクショナリのファイル名を保存してから、モデル ECoderMapAPI を開きます。
simulinkModel = "ECoderMapAPI"; dict_name = "ECoderDataDict.sldd"; load_system(simulinkModel);
共有ディクショナリのコード マッピングを使用するには、共有ディクショナリを使用するようにモデルを構成します。
set_param(simulinkModel,EmbeddedCoderDictionary="ECoderDataDict.sldd");Get を使用してモデルのコード マッピング オブジェクトを取得し、そのオブジェクトを使用して以下を行います。
モデルのすべてのルートレベルの端子のストレージ クラスとして
Model defaultを指定する。ルートレベルの端子の既定のストレージ クラスとして
Dictionary defaultを指定する。
modelCodeMapObj = coder.mapping.api.get(simulinkModel); setInport(modelCodeMapObj,find(modelCodeMapObj,"Inports"),StorageClass="Model default") setOutport(modelCodeMapObj,find(modelCodeMapObj,"Outports"),StorageClass="Model default") setDataDefault(modelCodeMapObj,"Inports",StorageClass="Dictionary default") setDataDefault(modelCodeMapObj,"Outports",StorageClass="Dictionary default")
コーダー ディクショナリには、モデルのコード マッピングで使用できる定義などが含まれます。コード マッピング API を使用すると、共有コーダー ディクショナリ内のデータおよび関数の既定の設定を取得および制御できます。
ディクショナリ ECoderDataDict.sldd のコード マッピング オブジェクトを取得します。このオブジェクトを使用して、ディクショナリのデータおよび関数の既定の設定を表示および制御します。
coderMapDictObj = coder.mapping.api.get(dict_name);
同じ共有ディクショナリの一般ディクショナリ オブジェクトを取得します。このオブジェクトを使用して、コード マッピングに関係のない、ディクショナリの一般的な要素を制御します。この例では、ディクショナリのコード マッピング オブジェクトを使用してディクショナリに変更を加えた後にディクショナリを保存するために、この一般ディクショナリ オブジェクトが必要になります。
dictObj = Simulink.data.dictionary.open(dict_name);
ディクショナリのコード マッピング オブジェクトを使用して、入力端子の既定のストレージ クラスを Localizable に設定し、出力端子の既定のストレージ クラスを Volatile に設定します。
setDataDefault(coderMapDictObj,"Inports",StorageClass="Localizable"); setDataDefault(coderMapDictObj,"Outports",StorageClass="Volatile");
既定のストレージ クラスが意図したとおりに設定されていることを確認します。
getDataDefault(coderMapDictObj,"Inports","StorageClass")
ans = 'Localizable'
getDataDefault(coderMapDictObj,"Outports","StorageClass")
ans = 'Volatile'
変数 Localizable と変数 Volatile は、生成されたモデル ヘッダー ファイルの別個のセクションで宣言されます。ヘッダー ファイル名を変数 model_h_file に格納します。
model_h_file = fullfile(simulinkModel+"_ert_rtw",simulinkModel+".h")
model_h_file = "ECoderMapAPI_ert_rtw/ECoderMapAPI.h"
モデルからコードを生成します。
evalc("slbuild(simulinkModel)");以下に、ヘッダー ファイル内のルートレベルの入力端子および出力端子の宣言を示します。
/* Declaration for custom storage class: Localizable */ extern real_T in_port_1; /* '<Root>/in_port_1' */ extern real_T in_port_2; /* '<Root>/in_port_2' */ extern real_T in_port_3; /* '<Root>/in_port_3' */ extern real_T in_port_4; /* '<Root>/in_port_4' */ /* Declaration for custom storage class: Volatile */ extern volatile real_T out_port_1; /* '<Root>/out_port_1' */ extern volatile real_T out_port_2; /* '<Root>/out_port_2' */ extern volatile real_T out_port_3; /* '<Root>/out_port_3' */ extern volatile real_T out_port_4; /* '<Root>/out_port_4' */
端子は、ディクショナリのデータの既定の設定で指定されたストレージ クラスです。
ヘッダー ファイルを開くには、MATLAB コマンド ウィンドウに次のコマンドを入力します。
edit(model_h_file)
ディクショナリのコード マッピング オブジェクトを指定して関数 setDataDefault を使用して、ディクショナリ内の入力端子と出力端子の既定のストレージ クラスを切り替えます。
setDataDefault(coderMapDictObj,"Inports",StorageClass="Volatile"); setDataDefault(coderMapDictObj,"Outports",StorageClass="Localizable");
既定のストレージ クラスが意図したとおりに設定されていることを確認します。
getDataDefault(coderMapDictObj,"Inports","StorageClass")
ans = 'Volatile'
getDataDefault(coderMapDictObj,"Outports","StorageClass")
ans = 'Localizable'
モデルからコードを再度生成します。
evalc("slbuild(simulinkModel)");ヘッダー ファイル内の入力端子と出力端子の宣言が、構成したストレージ クラスで更新されました。
/* Declaration for custom storage class: Localizable */ extern real_T out_port_1; /* '<Root>/out_port_1' */ extern real_T out_port_2; /* '<Root>/out_port_2' */ extern real_T out_port_3; /* '<Root>/out_port_3' */ extern real_T out_port_4; /* '<Root>/out_port_4' */ /* Declaration for custom storage class: Volatile */ extern volatile real_T in_port_1; /* '<Root>/in_port_1' */ extern volatile real_T in_port_2; /* '<Root>/in_port_2' */ extern volatile real_T in_port_3; /* '<Root>/in_port_3' */ extern volatile real_T in_port_4; /* '<Root>/in_port_4' */
一般ディクショナリ オブジェクト dictObj を使用して、ディクショナリに加えた変更を保存し、ディクショナリを閉じます。
saveChanges(dictObj); close(dictObj);
プログラム インターフェイスを使用して、Simulink モデルのさまざまなタイプのコード マッピング オブジェクトを取得して使用します。
モデル CoderMapAPI を読み込みます。
codeMapModel = "CoderMapAPI";
load_system(codeMapModel);関数 coder.mapping.api.get を使用して、このモデルの Simulink Coder™ および Embedded Coder マッピング オブジェクトを取得して保存します。
simCodeMapObj = coder.mapping.api.get(codeMapModel,"SimulinkCoderC"); eCodeMapObj = coder.mapping.api.get(codeMapModel,"EmbeddedCoderC");
すべてのルートレベルの入力端子名を保存します。
in_port_names = "in_port_"+(1:4)'in_port_names = 4×1 string
"in_port_1"
"in_port_2"
"in_port_3"
"in_port_4"
コード マッピング オブジェクトごとに、入力端子のストレージ クラスを設定するインライン関数を定義します。関数 arrayfun を使用して、Simulink コード マッピング オブジェクトのすべてのルートレベルの入力端子のストレージ クラスを ImportedExtern に設定し、Embedded Coder マッピング オブジェクトのルートレベルの入力端子のストレージ クラスを ImportedExternPointer に設定します。
configSimCoderPortStoreClassFcn = @(port_name) setInport(simCodeMapObj,port_name,StorageClass="ImportedExtern"); configECoderPortStoreClassFcn = @(port_name) setInport(eCodeMapObj,port_name,StorageClass="ImportedExternPointer"); arrayfun(configSimCoderPortStoreClassFcn,in_port_names); arrayfun(configECoderPortStoreClassFcn,in_port_names);
コード マッピング オブジェクトごとに、入力端子のストレージ クラスを表示するインライン関数を定義します。
dispSimCoderPortStoreClassFcn = @(port_name) disp(getInport(simCodeMapObj,port_name,"StorageClass")); dispECoderPortStoreClassFcn = @(port_name) disp(getInport(eCodeMapObj,port_name,"StorageClass"));
各コード マッピング オブジェクトのルートレベルの入力端子のストレージ クラスを表示します。
arrayfun(dispSimCoderPortStoreClassFcn,in_port_names);
ImportedExtern ImportedExtern ImportedExtern ImportedExtern
arrayfun(dispECoderPortStoreClassFcn,in_port_names);
ImportedExternPointer ImportedExternPointer ImportedExternPointer ImportedExternPointer
ImportedExtern および ImportedExternPointer ストレージ クラスをもつルートレベルの入力端子は、モデルの生成されたプライベート ヘッダー ファイル内の別個のセクションで宣言されます。両方のヘッダー ファイルでこれらのセクションを確認できるように、2 つのシステム ターゲット ファイルのヘッダー ファイル名を保存します。
priv_h_simcoder_file = fullfile(codeMapModel+"_grt_rtw",codeMapModel+"_private.h")
priv_h_simcoder_file = "CoderMapAPI_grt_rtw/CoderMapAPI_private.h"
priv_h_ecoder_file = fullfile(codeMapModel+"_ert_rtw",codeMapModel+"_private.h")
priv_h_ecoder_file = "CoderMapAPI_ert_rtw/CoderMapAPI_private.h"
モデルのターゲット ファイルを grt.tlc に設定し、モデルからコードを生成します。
set_param(codeMapModel,SystemTargetFile="grt.tlc") evalc("slbuild(codeMapModel)");
以下に、grt.tlc ヘッダー ファイル priv_h_simcoder_file 内のルートレベルの入力端子の宣言を示します。
/* Imported (extern) block signals */ extern real_T in_port_1; /* '<Root>/in_port_1' */ extern real_T in_port_2; /* '<Root>/in_port_2' */ extern real_T in_port_3; /* '<Root>/in_port_3' */ extern real_T in_port_4; /* '<Root>/in_port_4' */
ルートレベルの入力端子は、ImportedExtern セクションで宣言されます。
ヘッダー ファイルを開くには、MATLAB コマンド ウィンドウに次のコマンドを入力します。
edit(priv_h_simcoder_file)
次に、モデルのターゲット ファイルを ert.tlc に設定し、モデルからコードを生成します。
set_param(codeMapModel,SystemTargetFile="ert.tlc") evalc("slbuild(codeMapModel)");
以下に、ert.tlc ヘッダー ファイル priv_h_ecoder_file 内のルートレベルの入力端子の宣言を示します。
/* Imported (extern) pointer block signals */ extern real_T *in_port_1; /* '<Root>/in_port_1' */ extern real_T *in_port_2; /* '<Root>/in_port_2' */ extern real_T *in_port_3; /* '<Root>/in_port_3' */ extern real_T *in_port_4; /* '<Root>/in_port_4' */
このヘッダー ファイルのルートレベルの入力端子は、ImportedExternPointer セクションで宣言されます。
ヘッダー ファイルを開くには、MATLAB コマンド ウィンドウに次のコマンドを入力します。
edit(priv_h_ecoder_file)
入力引数
コード マッピング オブジェクトを返す対象の Simulink モデル。ハンドル、またはモデル名 (.slx ファイル拡張子なし) あるいはモデル ファイルの相対パスまたは絶対パス (.slx ファイル拡張子を含む) を含む文字ベクトルまたは string スカラーとして指定します。
メモ
モデルが (たとえば、load_system を使用して) 読み込まれていなければなりません。
例: "configModel"
データ型: char | string | handle
コード マッピング オブジェクトを返す対象のデータ インターフェイス ディクショナリ。Simulink.data.Dictionary オブジェクト、またはディクショナリ ファイルの相対パスまたは絶対パス (.sldd ファイル拡張子を含む) を含む文字ベクトルまたは string スカラーとして指定します。
例: "exCodeDefs.sldd"
データ型: char | string | Simulink.data.Dictionary
指定されたモデルまたはディクショナリに対して返すコード マッピングのタイプ。表内の値のいずれかとして指定します。コード マッピングを使用すると、モデルをプラットフォームに適したコード生成構成に関連付けることができます。指定されたマッピング タイプが存在しない場合は、エラーが生成されます。
| コード マッピング タイプ | コード生成の構成 | 詳細 |
|---|---|---|
"SimulinkCoderC" | C 言語ラピッド プロトタイピング プラットフォーム | Simulink Coder™ および C 言語 |
"EmbeddedCoderC" | C 言語生成プラットフォーム | Embedded Coder® および C 言語 |
"EmbeddedCoderCPP" | C++ 言語生成プラットフォーム | Embedded Coder および C++ 言語 |
出力引数
モデルのコード マッピング オブジェクト。CodeMapping オブジェクトまたは CodeMappingCPP として返されます。
| 出力 | 入力オブジェクト | コード マッピング タイプ |
|---|---|---|
coder.mapping.api.CodeMapping | Simulink モデル | "SimulinkCoderC" または "EmbeddedCoderC" |
coder.mapping.api.CodeMappingCPP | Simulink モデル | "EmbeddedCoderCPP" |
Embedded Coder データ ディクショナリ。coder.mapping.api.CoderDictionary オブジェクトとして返されます。
バージョン履歴
R2020b で導入
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)