主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

MATLAB函数ブロックを使用したカスタム機能の作成

この例では,MATLAB函数ブロックを使用して,値のベクトルの平均と標準偏差を計算するモデルを作成する方法を示します。

モデルの作成

  1. 新しい仿金宝app真软件®モデルを作成し,用户定义函数ライブラリからMATLAB函数ブロックを挿入します。

  2. 常数ブロックを追加し,その値をベクトル[2 3 4 5]に設定します。2つの显示ブロックをモデルに追加します。

  3. モデルをcall_stats_block1として保存します。

MATLAB函数ブロックのプログラム

ベクトルの値から平均と標準偏差を計算するブロックをプログラムします。

  1. MATLAB函数ブロックをダブルクリックします。MATLAB函数ブロックエディターに既定の関数シグネチャが表示されます。定義された関数シグネチャ内にコードを記述します。

  2. 関数のヘッダー行を次のように編集します。

    Function [mean,stdev] = stats(val)

    このコードから,统计数据という関数を定義します。これは,ベクトル瓦尔斯の値の統計上の平均と標準偏差を計算します。関数ヘッダーは,瓦尔斯を関数统计数据への引数として宣言し,的意思是および方差を関数からの戻り値として宣言しています。

  3. MATLAB函数ブロックエディターで,関数ヘッダーの後に空白行を入力し,以下のコードを追加します。

    计算val值的统计平均值和标准偏差%。len =长度(val);意味着= avg (val, len);方差=√总和(vals-avg (vals, len)) ^ 2)) / len);情节(val”——+ ');Function mean = avg(array,size) mean = sum(array)/size;
  4. MATLAB函数ブロックへの接続を次のように実行します。

  5. モデルをcall_stats_block2という名前で保存します。

関数のビルドとエラーのチェック

金宝app仿真软件モデルでブロックのプログラミングが終了したら,その関数をビルドしてエラーがないかテストできます。MATLAB函数ブロックを構築するには,サポートされているコンパイラが必要です。MATLAB®では既定のコンパイラとして1つのコンパイラが自動的に選択されます。システムにMATLABでサポートされているコンパイラが複数インストールされている場合は,墨西哥人设置コマンドを使用して既定のコンパイラを変更できます。既定のコンパイラの変更を参照してください。

シミュレーションビルドとコード生成ビルド対応コンパイラ

シミュレーションおよびコード生成対応MATLAB函数ブロックを含んでいるモデルを作成するためのコンパイラの一覧を表示します。

  1. サポートされている互換コンパイラページへ移動し,該当するプラットフォームを選択します。

  2. 金宝app仿真软件製品ファミリの表にスクロールします。

  3. シミュレーションに対応するMATLAB函数ブロックを含んでいるモデルを表から探すには,金宝appSimulink For Model references, Accelerator mode, Rapid Accelerator mode, and MATLAB Function blocksという見出しの列でチェックマークの入ったコンパイラを見つけます。

    MATLAB函数ブロックを含むモデルを表から探してコードを生成するには,金宝app仿真软件编码器™という見出しの列でチェックマークの入ったコンパイラを見つけます。

コード生成対応コンパイラ

MATLAB函数ブロックを含むモデルのコード生成には,金宝app仿真软件编码器でのコード生成用に仿金宝app真软件ソフトウェアがサポートするCコンパイラならどれでも使用できます。対応コンパイラのリストは次の方法でアクセスできます。

  1. サポートされている互換コンパイラWebページへ移動します。

  2. 該当するプラットフォームを選択します。

  3. 金宝app仿真软件と関連製品の表で,金宝app仿真软件编码器という見出しの列でチェックマークの入ったコンパイラを探します。

エラーの追跡と訂正

ビルドプロセスでエラーが発生した場合,[診断ビューアー]ウィンドウにエラーが問題のコードへのリンクと共に列記されます。

次の演習問題には,MATLAB函数ブロック内のエラーを追跡して訂正する方法が示されています。

  1. 関数统计数据内で,ローカル関数avgを実在しないローカル関数8月に変更して再コンパイルすると,ウィンドウに次のメッセージが表示されます。[診断ビューアー]ウィンドウにそれぞれの検出されたエラーが赤色の影付き線で表示されます。

  2. 未定义函数或变量“aug”というタイトルのエラーを調べます。選択したエラーの診断メッセージ内で,関数名の後の青いリンクをクリックして,問題のコードを表示します。問題の行が強調表示されてMATLAB函数块编辑器に表示されます。

  3. エラーメッセージにはMATLAB関数の変数や式に関するコンパイル時のデータ型情報を入れたレポートへのリンクも付いています。この情報はデータ型の伝播規則を理解してエラーメッセージを診断する手がかりになります。このレポートの詳細は,MATLAB函数レポートを参照してください。レポートを表示するには,启动诊断报告という行の青色に強調表示されたリンクをクリックします。

  4. 8月avgに戻してエラーを訂正し,コンパイルし直します。

入力と出力の定義

既定の設定では,関数の入力と出力はその端子に付いている信号からデータ型とサイズを継承します。MATLAB函数ブロック用の入力データと出力データがデータ型とサイズを正しく継承しているかチェックします。

  1. MATLAB函数ブロック统计数据をダブルクリックします。

  2. MATLAB函数ブロックエディターで,[データの編集)を選択します。[端口和数据管理器]が開き,ここでMATLAB函数ブロックの引数を定義できます。

    左のペインに,MATLAB函数ブロック用に作成した引数瓦尔斯と戻り値的意思是および方差が表示されます。瓦尔斯スコープ金宝app仿真软件からの入力を意味する[输入]に,的意思是方差スコープ金宝app仿真软件への出力を意味する[输出]になっていることがわかります。

  3. (端子とデータの管理]の左のペインで,瓦尔斯の行のどこかをクリックしてその行を強調表示します。

    右側のペインでは,瓦尔斯データプロパティがダイアログボックスに表示されます。既定の設定では,入力と出力引数のクラス,サイズ,単位,実数/複素数は,各入力端子や出力端子に対応付けられている信号から継承されます。継承を指定するには,[サイズ]-1に,[実数/複素数][継承]に,[データ型)[継承:仿金宝app真软件と同じ]に設定します。

    実際に継承されるサイズとデータ型の値はモデルのコンパイル時に設定され,左のペインの[コンパイルされた型)列と[コンパイルされたサイズ]列に表示されます。

    入力引数や出力引数のデータ型(はなど),[データ]プロパティダイアログボックスの[タイプ]フィールドで指定できます。また,[サイズ]フィールドに式を入力することによって,入力または出力引数のサイズを指定することもできます。たとえば,瓦尔斯2×3の行列にする場合は,[サイズ]フィールドに”3 [2]“と入力します。データ型とサイズに関する入力可能な式の詳細は、関数引数の型指定および関数引数のサイズ指定を参照してください。

    メモ

    MATLAB函数ブロック関数に追加する配列用の既定の最初のインデックスはMATLABの場合と同様に1です。

プログラムによるMATLAB函数ブロックの設定

MATLAB函数ブロックをプログラムを使って設定するには次の2つの方法があります。

  • MATLABFunctionConfigurationオブジェクトを使用して,ブロックのプロパティについてクエリおよび変更を行います。ブロックパスを使用するか,関数华东桐柏を呼び出して,モデル内のブロックを特定できます。

  • Stateflow。EMChartオブジェクトを使用して,ブロックの入力,出力,およびプロパティにアクセスします。Stateflow®APIオブジェクトの階層を移動して,モデル内のブロックを特定します。

ブロックプロパティの設定

前の例で説明したモデルcall_stats_block1について考えます。関数get_paramを呼び出して,このモデル内のMATLAB函数ブロックに対するMATLABFunctionConfigurationオブジェクトにアクセスできます。

配置= get_param (“call_stats_block1 / MATLAB函数”...“MATLABFunctionConfiguration”);

構成オブジェクトのプロパティのクエリまたは変更を実行するには,オブジェクト名を指定してドット表記を使用します。

myConfig。UpdateMethod
ans =“继承”
配置。描述=计算一个值向量的平均值和标准差

MATLAB函数構成オブジェクトで変更できるプロパティの詳細については,MATLABFunctionConfigurationを参照してください。

ブロックの入力,出力,およびプロパティへのアクセス

MATLAB函数ブロックのプログラムによる制御を強化するには,オブジェクトのStateflow階層の最上位レベルで,金宝app仿真软件。根オブジェクトの関数找到(Stateflow)を呼び出して,そのStateflow。EMChartオブジェクトにアクセスします。

rt = sfroot;块=找到(rt,“是”“Stateflow。EMChart”...“路径”“call_stats_block1 / MATLAB函数”);

構成オブジェクトのプロパティのクエリまたは変更を実行するには,オブジェクト名を指定してドット表記を使用します。

块。ChartUpdate
ans =“继承”
块。描述=计算一个值向量的平均值和标准差

Stateflow。EMChartオブジェクトによって,MATLABFunctionConfigurationオブジェクト内では使用できない追加のプロパティにアクセスできるようになります。たとえば,ブロックの入力および出力の表格を作成するには,次を入力します。

信息= get ([block.Inputs; block.Outputs) {“名字”“范围”“端口”});T =表(信息(:,2),cell2mat(信息(:,3)),...“VariableNames”, {“范围”“端口”},...“RowNames”信息(:1));T.Scope =分类(T.Scope)
T = 3×2 table Scope Port ______ ____ vals Input 1 mean Output 1 stdev Output 2

詳細については,Stateflow API概述(Stateflow)を参照してください。

コード生成用のローカル変数の定義

MATLAB函数ブロックのMATLABアルゴリズムからコードを生成する場合,ローカル変数は,演算で使用したり関数で出力として返す前にクラス,サイズおよび実数/複素数を明示的に割り当てなければなりません(コード生成のためのデータの定義を参照してください)。関数统计数据の例では,ローカル変数lenは平均と標準偏差の計算に使用する前に定義されます。

len =长度(val);

一度変数にプロパティを割り当てた後は,関数本体の他の場所でそのクラス,サイズ,実数/複素数を再定義することはできません,がいくつかの例外があります(変数プロパティの再代入を参照してください)。

MATLAB函数ブロックのコードの生成

  1. MATLAB函数ブロックのプログラムの終わりに保存したcall_stats_block2モデルを開きます。

  2. 统计数据ブロックをダブルクリックします。

  3. [モデルのビルド][ビルド]を選択し,モデル例をコンパイルし,ビルドします。

    (可変ステップ]ソルバーに関連するエラーが表示されると,[コンフィギュレーションパラメーター][ソルバー]から,ソルバータイプを(固定ステップ]ソルバーに変更し,ビルドに戻ります。固定ステップと可変ステップのソルバーの違いに関する詳細については,固定ステップソルバーと可変ステップソルバーを参照してください。

    エラーが発生しなければ,[診断ビューアー]ウィンドウに成功を示すメッセージが表示されます。エラーが発生した場合は,エラーの追跡と訂正で説明されているように,このウィンドウでエラーを追跡できます。

参考

||||||

関連するトピック