algorithm
クラス: slmetric.metric.Metric
パッケージ: slmetric.metric
メトリクス データ解析のロジックの指定
説明
メトリクス アルゴリズム解析のロジックを指定します。カスタムに作成されたメトリクス アルゴリズムは、ライブラリ リンクおよび外部 MATLAB ファイル コンポーネントに対しては呼び出されません。
入力引数
Metric
— 新規モデル メトリクス クラス
slmetric.metric.Metric
オブジェクト
新規メトリクスのために定義するモデル メトリクス クラス。
Component
— メトリクス解析のコンポーネント
Advisor.component.Component
オブジェクト
メトリクス解析用の Advisor.component.Component
のインスタンス。
出力引数
Result
— アルゴリズムの結果データ
slmetric.metric.Result
オブジェクトの配列
アルゴリズム データ。slmetric.metric.Result
オブジェクトの配列として返されます。
例
非バーチャル ブロックをカウントするメトリクス アルゴリズムの作成
この例では、algorithm
メソッドを使用して、非バーチャル ブロックをカウントするメトリクスを作成する方法を説明します。
関数 createNewMetricClass
を使用して、nonvirtualblockcount
という名前のメトリクス クラスを作成します。この関数は、nonvirtualblockcount.m
ファイルを現在の作業フォルダー内に作成します。
className = 'nonvirtualblockcount';
slmetric.metric.createNewMetricClass(className);
メトリクス アルゴリズム ファイル nonvirtualblockcount.m
を開いて、編集します。このファイルには、空のメトリクス アルゴリズム メソッドが含まれています。
edit(className);
以下のコードをコピーして、nonvirtualblockcount.m
ファイルに貼り付けます。nonvirtualblockcount.m
を保存します。コードは、非バーチャル ブロックをカウントするためのメトリクス アルゴリズムを提供します。
classdef nonvirtualblockcount < slmetric.metric.Metric % nonvirtualblockcount calculate number of non-virtual blocks per level. % BusCreator, BusSelector and BusAssign are treated as non-virtual. properties VirtualBlockTypes = {'Demux','From','Goto','Ground', ... 'GotoTagVisiblity','Mux','SignalSpecification', ... 'Terminator','Inport'}; end methods function this = nonvirtualblockcount() this.ID = 'nonvirtualblockcount'; this.Version = 1; this.CompileContext = 'None'; this.Description = 'Algorithm that counts nonvirtual blocks per level.'; this.ComponentScope = [Advisor.component.Types.Model, ... Advisor.component.Types.SubSystem]; end function res = algorithm(this, component) % create a result object for this component res = slmetric.metric.Result(); % set the component and metric ID res.ComponentID = component.ID; res.MetricID = this.ID; % use find_system to get all blocks inside this component blocks = find_system(getComponentSource(component), ... 'FollowLinks','on', 'SearchDepth', 1, ... 'Type', 'Block', ... 'FollowLinks', 'On'); isNonVirtual = true(size(blocks)); for n=1:length(blocks) blockType = get_param(blocks{n}, 'BlockType'); if any(strcmp(this.VirtualBlockTypes, blockType)) isNonVirtual(n) = false; else switch blockType case 'SubSystem' % Virtual unless the block is conditionally executed % or the Treat as atomic unit check box is selected. if strcmp(get_param(blocks{n}, 'IsSubSystemVirtual'), ... 'on') isNonVirtual(n) = false; end case 'Outport' % Outport: Virtual when the block resides within % any SubSystem block (conditional or not), and % does not reside in the root (top-level) Simulink window. if component.Type ~= Advisor.component.Types.Model isNonVirtual(n) = false; end case 'Selector' % Virtual only when Number of input dimensions % specifies 1 and Index Option specifies Select % all, Index vector (dialog), or Starting index (dialog). nod = get_param(blocks{n}, 'NumberOfDimensions'); ios = get_param(blocks{n}, 'IndexOptionArray'); ios_settings = {'Assign all', 'Index vector (dialog)', ... 'Starting index (dialog)'}; if nod == 1 && any(strcmp(ios_settings, ios)) isNonVirtual(n) = false; end case 'Trigger' % Virtual when the output port is not present. if strcmp(get_param(blocks{n}, 'ShowOutputPort'), 'off') isNonVirtual(n) = false; end case 'Enable' % Virtual unless connected directly to an Outport block. isNonVirtual(n) = false; if strcmp(get_param(blocks{n}, 'ShowOutputPort'), 'on') pc = get_param(blocks{n}, 'PortConnectivity'); if ~isempty(pc.DstBlock) && ... strcmp(get_param(pc.DstBlock, 'BlockType'), ... 'Outport') isNonVirtual(n) = true; end end end end end blocks = blocks(isNonVirtual); res.Value = length(blocks); end end end
バージョン履歴
R2016a で導入
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)