このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
Simulink および Stateflow の要素用の Report Generator の作成
ファインダーとレポーターを使うと、ブロック線図やブロックなどの Simulink® モデル要素、および Stateflow® のチャートや遷移などを検索しレポートするためのコードの作成に必要な時間と複雑度が軽減されます。Simulink Report Generator™ レポート API は DOM API の上にある層です。そのファインダーとレポーターは Simulink および Stateflow の find 基底クラスを基にしています。サブシステム内のブロックやチャート内のステートなど、特定の要素を検索する対象となるコンテナーを指定します。ファインダー オブジェクトはその結果を、対応するファインダー結果オブジェクトの配列に返します。
Simulink レポート API には、コンテナーのイメージを返すレポーター クラスも含まれます。このイメージはモデルの最上位レベルです。
ファインダーから返される各結果オブジェクトには関連付けられたレポーター オブジェクトがあり、これらの結果をレポートします。レポーター オブジェクトはプロパティのテーブルやデータ プロットなどのコンテンツを保持し、コンテンツを書式設定します。レポーター オブジェクトをレポートに追加します。共通のレポート要素を定義するには、MATLAB® レポート API レポーターを使用します。詳細については、レポーターとはを参照してください。
すべてのファインダーとレポーターには次の機能があります。
既定の動作と値
出力のオーバーライドとカスタマイズの許可
すべてのファインダーには find
、hasNext
、および next
の各メソッドがあります。find
メソッドは検索を実行し、指定されたタイプの検出要素それぞれについて、すべての要素を結果オブジェクトの配列で返します。hasNext
メソッドと next
メソッドは一度に 1 つの要素を見つけて返し、結果リストの反復処理に使用されます。hasNext
メソッドは、指定されたタイプの要素が少なくとも 1 つコンテナーにあるかどうかをチェックします。コンテナーに 1 つ以上の要素がある場合は、next
メソッドで検索して結果オブジェクトとして返されるよう、hasNext
メソッドはこれをキューに入れます。
すべてのレポーターには事前定義されたテンプレートがあります。各レポーターのテンプレートで、書式設定、レイアウト、およびコンテンツのホールが定義されます。レポートをカスタマイズする場合を除き、テンプレートを変更する必要や、書式、レイアウト、ホールを指定する必要はありません。既定のテンプレートをコピーして編集するか、新しいテンプレートを使用することにより、レポートをカスタマイズできます。既定のテンプレートのコピーを編集すると、テンプレートをカスタマイズするための開始点と模範とする構造を得ることができます。新しいテンプレートを使用すると、空のファイルから始めて、独自のテンプレートを完全に定義することができます。レポートのコンテンツの順序を変更するには、テンプレートのホールを並べ替えます。ファインダーではテンプレートは使用しません。レポーター クラスをカスタマイズする別の方法は、これをサブクラス化することです。
各出力タイプの既定のレポーター テンプレートは、次の場所のテンプレート ライブラリにあります。
matlab\toolbox\shared\slreportgen\rpt\rpt\+slreportgen\ +report\@<reporter>\resources\templates\<output>
DiagramReporter
の PDF 出力で用いる既定のテンプレートのパスは、次のとおりです。 matlab\toolbox\shared\slreportgen\rpt\rpt\+slreportgen\ +report\@DiagramReporter\resources\templates\pdf\default.pdftx
Simulink レポート API クラス
Simulink レポート API は、以下のファインダー クラス、結果クラス、およびレポート クラスを提供します。これらのクラスを Report Generator プログラムで使用するには、レポートを保持するための、タイプ slreportgen.report.Report
のコンテナーを作成する必要があります。
ファインダー クラスと結果クラス
レポーター クラス
レポート API クラス | 説明 |
---|---|
slreportgen.report.Bus | Simulink ブロックによって選択または作成されたバスについてレポートします。 |
slreportgen.report.BusObject | モデルで使用される Simulink.Bus オブジェクトについてレポートします。 |
slgreportgen.report.CCaller | C Caller ブロックについてレポートします。 |
slreportgen.report.CFunction | C Function ブロックについてレポートします。 |
slreportgen.report.DataDictionary | Simulink データ ディクショナリについてレポートします。 |
slreportgen.report.Diagram | Simulink ブロック線図または Stateflow チャートのスナップショットを作成します。 |
slreportgen.report.DocBlock | Simulink DocBlock についてレポートします。 |
slreportgen.report.ElementDiagram | 要素のブロック線図のスナップショットと表題についてレポートします。 |
slreportgen.report.ExecutionOrder | モデルまたは非バーチャル サブシステムのタスクと各タスクのブロックを実行順序で並べ替えてレポートします。 |
slreportgen.report.LookupTable | Simulink Lookup Table ブロックのブレークポイントと出力ポイントについてレポートします。 |
slreportgen.report.MATLABFunction |
|
slreportgen.report.ModelConfiguration | モデルのアクティブなコンフィギュレーション セットについてレポートします。 |
slreportgen.report.ModelVariable | モデル変数についてレポートします。 |
slreportgen.report.Notes | Simulink または Stateflow のブロック線図メモについてレポートします。 |
slreportgen.report.Signal | 信号についてレポートします。 |
slreportgen.report.SimulinkObjectProperties | Simulink オブジェクトのプロパティのテーブルを作成します。 |
slreportgen.report.StateflowObjectProperties | Stateflow オブジェクトのプロパティのテーブルを作成します。 |
slreportgen.report.SystemHierarchy | Simulink のモデルまたはサブシステムについて、サブシステムの入れ子形式のリストを作成します。 |
slreportgen.report.SystemIO | Simulink システム入出力信号についてレポートします。 |
slreportgen.report.TestSequence | Simulink Test Sequence ブロックについてレポートします。 |
slreportgen.report.TruthTable | Simulink Truth Table ブロックまたは Stateflow Truth Table オブジェクトについてレポートします。 |
モデル内のブロックの検索とレポート
この例では、BlockFinder
クラスを使用して、slrgex_vdp
モデル内のすべての Simulink ブロックを検索してレポートする方法を説明します。結果の HTML レポートには既定の情報が含まれ、ブロックごとに既定の書式設定が使用されます。
レポート API パッケージをインポートしますが、これによりパッケージ名を含めずにクラス名を使用できるようになります。たとえば、slreportgen.finder.BlockFinder
の代わりに BlockFinder
を使用できます。Simulink レポート API の基底クラスに加えて、MATLAB レポート API の基底クラスもインポートします。一般的なレポートには、タイトル ページ、目次、章、節が含まれます。ユーザーはこれらをレポーター クラスとして MATLAB レポート API に含めます。
import slreportgen.finder.* import slreportgen.report.* import mlreportgen.report.*
slrgex_vdp
モデルを読み込みます。
model_name = 'slrgex_vdp';
load_system(model_name)
レポートを保持するコンテナー オブジェクトを作成し、レポートを開きます。この場合、出力レポートは圧縮された slrgex_vdp_model.htmx
HTML レポートで保存されています。任意の出力名を使用できます。同じ出力ファイル名を使用して Report Generator を複数回実行すると、出力ファイルは上書きされます。Simulink レポート API のファインダーとレポーターを Report Generator プログラムで使用するには、完全修飾名を使用してコンテナー オブジェクトを作成する必要があります。
rpt = slreportgen.report.Report('slrgex_vdp_model','html'); open(rpt)
章を追加し、そのタイトルを指定します。
ch = Chapter('Blocks in slrgex_vdp model');
BlockFinder
クラスを使用してファインダーを作成します。この場合、BlockFinder
はモデル内のすべてのブロックを検索します。find
メソッドを使用して、ファインダーで指定されたブロックを検索します。
finder = BlockFinder(model_name); results = find(finder);
find メソッドの結果をループ処理して各ブロックの節を作成し、各節にブロックのプロパティ テーブルを追加します。次に、各節を章に追加します。すべてのブロックを追加した後、章をレポートに追加します。
for result = results sect = Section('Title',result.Name); append(sect,result) append(ch,sect) end append(rpt,ch);
レポートとモデルを閉じ、レポートを表示します。
close(rpt); close_system(model_name); rptview(rpt);
異なるブロック タイプに対する特定のファインダーとレポーターの使用
slrgex_radar_eml
モデル内のすべてのブロックを検索する、PDF レポート ジェネレーターを作成します。
すべてのブロックを検索するには、BlockFinder
を使用します。if
ステートメントは MATLAB Function ブロックのテスト方法を示しています。MATLABFunction
レポーターを使用して、MATLAB Function ブロックの詳細をレポートします。else
ステートメントは、MATLAB Function ブロック以外のブロックで BlockFinder
find
メソッドの結果がどのように使用されるかを示しています。
import slreportgen.report.* import slreportgen.finder.* import mlreportgen.report.* model_name = 'slrgex_radar_eml'; load_system(model_name) rpt = slreportgen.report.Report('radar','pdf'); open(rpt) blkfinder = BlockFinder(model_name); blks = find(blkfinder); ch = Chapter('Blocks in slrgex_radar_eml Model'); for i=1:length(blks) if slreportgen.utils.isMATLABFunction(blks(i).Object) rptr = MATLABFunction(blks(i).Object); sec = Section(blks(i).Name); append(sec,rptr) append(ch,sec) else sec = Section(blks(i).Name); append(sec,blks(i)) append(ch,sec) end end append(rpt,ch) close(rpt) close_system(model_name) rptview(rpt)
MATLAB Function ブロックについて MATLABFunction
レポーターによりレポートされた情報の例を以下に示します。
BlockFinder
の find
メソッドによってレポートされた情報の例を以下に示します。
Stateflow 要素の検索とレポート
この例では、Stateflow のステート、遷移、およびジャンクションを検索およびレポートする方法について説明します。slrgex_fuelsys_fuel_rate_control
モデルの control_logic
チャートについてレポートします。
まず、レポートを設定します。
import mlreportgen.report.* import slreportgen.report.* import slreportgen.finder.* model_name = "slrgex_fuelsys_fuel_rate_control"; load_system(model_name); subsys = "slrgex_fuelsys_fuel_rate_control/control_logic"; rpt = slreportgen.report.Report("output","pdf"); open(rpt) tp = TitlePage("Title",... "Control Logic Chart of slrgex_fuelsys_fuel_rate_control"); append(rpt,tp) append(rpt,TableOfContents);
次に、StateFinder
オブジェクトとその find
メソッドを使用して、チャート内のステートを検索しレポートします。検出されたステートの配列をループ処理し、各ステートを章に追加します。
chapter = Chapter("Title","States"); stFinder = StateFinder(subsys); states = find(stFinder); for state = states append(chapter,state) end append(rpt,chapter)
遷移についてレポートするには、StateflowDiagramElementFinder
オブジェクトとその find
メソッドを使用します。プロパティ テーブルを既定より狭い幅で表示するには、出力をカスタマイズします。まず、結果のレポーターを取得します。幅を設定するには、レポーターの TableWidth
プロパティを使用します。
chapter = Chapter("Title","Transitions"); trFinder = StateflowDiagramElementFinder... ("Container",subsys,"Types","transition"); transitions = find(trFinder); for transition = transitions rptr = transition.getReporter; rptr.PropertyTable.TableWidth = "3in"; append(chapter,rptr) end append(rpt,chapter)
レポートとモデルを閉じ、レポートを表示します。
close(rpt) close_system(model_name) rptview(rpt)