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 モデルのコード マッピングのプログラムによる作成と使用
プログラム インターフェイスを使用して、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 モデルでの複数のコード マッピング タイプのプログラムによる取得と使用
プログラム インターフェイスを使用して、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 = 4x1 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)
入力引数
simulinkModel
— Simulink モデル
ハンドル | 文字ベクトル | string スカラー
コード マッピング オブジェクトを返す対象の Simulink モデル。ハンドル、またはモデル名 (.slx
ファイル拡張子なし) あるいはモデル ファイルの相対パスまたは絶対パス (.slx
ファイル拡張子を含む) を含む文字ベクトルまたは string スカラーとして指定します。
メモ
モデルが (たとえば、load_system
を使用して) 読み込まれていなければなりません。
例: "configModel"
データ型: char
| string
| handle
coderDictionary
— コーダー データ インターフェイス ディクショナリ
文字ベクトル | string スカラー | Simulink.data.Dictionary
コード マッピング オブジェクトを返す対象のデータ インターフェイス ディクショナリ。Simulink.data.Dictionary
オブジェクト、またはディクショナリ ファイルの相対パスまたは絶対パス (.sldd
ファイル拡張子を含む) を含む文字ベクトルまたは string スカラーとして指定します。
例: "exCodeDefs.sldd"
データ型: char
| string
| Simulink.data.Dictionary
codeMappingType
— コード マッピングのタイプ
"SimulinkCoderC"
| "EmbeddedCoderC"
| "EmbeddedCoderCPP"
指定されたモデルまたはディクショナリに対して返すコード マッピングのタイプ。表内の値のいずれかとして指定します。コード マッピングを使用すると、モデルをプラットフォームに適したコード生成構成に関連付けることができます。指定されたマッピング タイプが存在しない場合は、エラーが生成されます。
コード マッピング タイプ | コード生成の構成 | 詳細 |
---|---|---|
"SimulinkCoderC" | C 言語ラピッド プロトタイピング プラットフォーム | Simulink Coder™ および C 言語 |
"EmbeddedCoderC" | C 言語生成プラットフォーム | Embedded Coder® および C 言語 |
"EmbeddedCoderCPP" | C++ 言語生成プラットフォーム | Embedded Coder および C++ 言語 |
出力引数
coderMapObj
— コード マッピング
CodeMapping
オブジェクト | CodeMappingCPP
オブジェクト
モデルのコード マッピング オブジェクト。CodeMapping
オブジェクトまたは CodeMappingCPP
として返されます。
出力 | 入力オブジェクト | コード マッピング タイプ |
---|---|---|
coder.mapping.api.CodeMapping | Simulink モデル | "SimulinkCoderC" または "EmbeddedCoderC" |
coder.mapping.api.CodeMappingCPP | Simulink モデル | "EmbeddedCoderCPP" |
coderDataDictObj
— Embedded Coder データ ディクショナリ
CoderDictionary
オブジェクト
Embedded Coder データ ディクショナリ。coder.mapping.api.CoderDictionary
オブジェクトとして返されます。
バージョン履歴
R2020b で導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)