複数の插值使用Prelookupブロックのマージによるコードの効率性の改善
モデルトランスフォーマーツールを使用すると,モデル化パターンをリファクタリングして,生成コードの効率性を改善できます。モデルトランスフォ,マ,は,Prelookupブロックの出力から単一の Interpolation Using Prelookup ブロックに接続されている同じ入力信号を持つ複数の使用预查找的插值ブロックを特定し,マ,ジします。
モデルトランスフォ,マ,は,使用预查找的插值ブロックの[テ,ブルデ,タ]以外のプロパティが同じ場合に機能します。モデル内の Interpolation Using Prelookup ブロックの数を削減することで、コード内の変数割り当ての数が削減され、生成されたコードの効率性が向上します。モデル トランスフォーマー アプリまたはプログラムのコマンドを使用して、モデルをリファクタリングできます。
モデルトランスフォ,マ,は,次のような複数の使用预查找的插值を置き換えることができます。
同じインデックスおよび小数部パラメーターを持つPrelookupブロックに接続されている同じ入力信号がある
同じ多端口切换ブロックに接続された出力信号がある
同じブレクポントの指定,値,デタ型がある
同じアルゴリズムパラメ,タ,がある
小数部パラメ,タ,に対して同じデ,タ型がある
モデルトランスフォーマーアプリを使用した插值使用Prelookupブロックのマージ
この例では,モデルトランスフォーマーアプリとAPIを使用して冗長な插值使用Prelookupブロックを特定し,モデルをリファクタリングする方法を説明します。
モデルmInterpolationOptim
はPrelookupブロックを使用して信号を複数の插值使用Prelookupブロックに入力します。こうした内挿ブロックの出力が多端口切换ブロックに接続されています。
この例では,変換の条件を満たす插值使用Prelookupブロックを特定し,それらを1つの插值使用Prelookupブロックと,多端口切换ブロックに接続された常数ブロックに置き換えます。
モデル
mInterpolationOptim
を開きます。MATLAB®コマンドラ@ @ンで以下のように入力します。目录(fullfile (docroot,“工具箱”,“金宝app模型”,“例子”) mInterpolationOptim
モデルを作業フォルダ,に保存します。
[アプリ]タブで,[モデルトランスフォ,マ,]をクリックします。
[変換]フォルダ,で,使用预查找块替换插值チェックを選択します。
[この変換で,ラaaplブラリ内の插值- ndブロックをスキップします.]]オプションを選択して,ライブラリにリンクされている插值使用Prelookupブロックが置換されないようにします。
[変換後のモデル名の接頭辞]フィ,ルドで,リファクタリングされたモデルの接頭辞を指定します。
[このチェックを実行]をクリックします。上部の[結果]テ,ブルには,使用预查找的插值ブロックと,それに対応する多端口切换ブロックの端子@ @ンデックスへのハ@ @パ@ @リンクが含まれています。
変換しないグル,プの(候选人组)の下にあるチェックボックスをオフにします。
[モデルのリファクタリング]をクリックします。[結果]テ,ブルには,新しいモデルへのハ,パ,リンクが含まれています。テ,ブルには,共有使用预查找的插值ブロックと,それに対応する多端口切换ブロック端子へのハ▪▪パ▪▪リンクが含まれています。ツールによって,新しい
gen_mInterpolationOptim.slx
モデルを含むm2m_mInterpolationOptim
フォルダ,も作成されます。
gen_mInterpolationOptim.slx
モデルにある2のPrelookupブロックPrelookup
およびPrelookup1
が単一の使用预查找的插值ブロックに接続され,常数ブロックは多端口切换ブロック端子に接続されて[テ,ブルデ,タ]を入力として提供します。
プログラムによる使用预查找插值方法ブロックのマ,ジ
モデルトランスフォ,マ,をプログラムによって使用するには,以下のようにします。
金宝appSimulink.ModelTransform.CommonSourceInterpolation.identifyCandidates
を使用して,変換の候補を特定する金宝appSimulink.ModelTransform.CommonSourceInterpolation.refactorModel
を使用して,モデルをリファクタリングする
モデルを現在の作業ディレクトリに保存します。
目录(fullfile (docroot,“工具箱”,“金宝app模型”,“例子”) mInterpolationOptim
変換の条件を満たす候補を特定するには,関数
金宝appSimulink.ModelTransform.CommonSourceInterpolation.identifyCandidates
を使用してオブジェクトtransformResults
を作成します。transformResults = 金宝appsimulink . modeltransform . commonsourceinterpolation . identifycandidate (“mInterpolationOptim”)
transformResults =带有属性的结果:候选项:[1×1 struct]
transformResults
オブジェクトには1のプロパティ候选人
があります。これは,InterpolationPorts
とSwitchPorts
の2のフィルドをも構造体です。transformResults。候选人= struct with fields: InterpolationPorts: [4×1 struct] SwitchPorts: [4×1 struct]
InterpolationPorts
フィ,ルドを表示します。transformResults.Candidates.InterpolationPorts =
4×1带字段的struct数组:块端口
InterpolationPorts
フィルドは2の配列块
と港口
で構成されます。同様に,SwitchPorts
には同じプロパティがあります。候选人。InterpolationPorts
フィ,ルドと候选人。SwitchPorts
フィ,ルドをテ,ブルに変換します。struct2table (transformResults.Candidates.InterpolationPorts) struct2table (transformResults.Candidates.SwitchPorts)
ans = 4×2表块端口 _____________________________________________ ____ {' mInterpolationOptim /插值↵使用Prelookup '} 0 {' mInterpolationOptim /插值使用Prelookup1↵'}0 {' mInterpolationOptim /插值使用Prelookup2↵'}0 {' mInterpolationOptim /插值使用Prelookup3↵'}0 ans = 4×2表块端口 ______________________________ ____ {' mInterpolationOptim / Multiport_Switch '} 1 {' mInterpolationOptim / Multiport_Switch '} 2 {' mInterpolationOptim / Multiport_Switch '} 3{' mInterpolationOptim / Multiport_Switch '} 4
SwitchPorts
を使用して,どの使用预查找的插值ブロックがどの多端口交换机ブロック端子に接続されているか確認します。モデルをリファクタリングするには,関数
金宝appSimulink.ModelTransform.CommonSourceInterpolation.refactorModel
を使用します。この関数は,関数identifyCandidate
からのtransformResults
オブジェクトを使用します。refactorResults = 金宝appSimulink.ModelTransform.CommonSourceInterpolation.refactorModel(transformResults)
refactorResults =带有属性的refactorResults: ModelName: 'mInterpolationOptim' ModelDirectory: " TraceabilityInfo: [4×1 containers。地图)
refactorResults
オブジェクトのModelName
プロパティとModelDirectory
プロパティは参照モデルの名前と場所をリストします。TraceabilityInfo
はブロックのトレ,ス情報をリストする容器。地图
オブジェクトです。
条件と制限
モデルトランスフォ,マ,は,次の場合は使用预查找的插值ブロックを置換できません。
使用预查找的插值ブロックがコメントアウトされた領域にあるか,非アクティブなバリアントである。
使用预查找的插值ブロックがマスクされている。
モデルトランスフォーマーアプリでは,原子サブシステム,参照モデル,またはライブラリにリンクされたブロックの境界を越える使用预查找的插值ブロックの置換は行われません。