主要内容

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

Parsimを使ったラピッドアクセラレータシミュレーション

この例では,入力値とパラメーター値の範囲で並列シミュレーションの実行を必要とするアプリケーションでラピッドアクセラレータを使用する方法を示します。

エンジンのアイドル回転数のモデルを使用して,エンジンのアイドル回転数をシミュレーションします。このモデルの入力はバイパスエアバルブの電圧、出力はアイドル回転数です。

2セットのバルブ電圧とともにparsimを使用し2つの値の範囲で伝達関数の3つのゲインパラメーターのうち2つを独立して変化させることによって,並列シミュレーションを実行します。8次の表に,実行するつのシミュレーションをパラメーター値と共に示します。inpSetsはこの後の手順2で作成する外部入力で,gain2gain3は2つのゲインパラメーターに対応する変数です。

実行 ExternalInput gain2 gain3
1 inpSets (1) 25 20.
2 inpSets (1) 25 30.
3. inpSets (1) 35 20.
4 inpSets (1) 35 30.
5 inpSets (2) 25 20.
6 inpSets (2) 25 30.
7 inpSets (2) 35 20.
8 inpSets (2) 35 30.

この例の作成に使用されたスクリプトファイルを変更することにより,この例を簡単に独自のアプリケーション用にカスタマイズできます。スクリプトファイルを編集するには,このページの左上隅のリンクをクリックします。MATLAB®からこの例を実行するには,右上隅のリンクをクリックしてください。

手順 1: 準備

まず,シミュレーションモードがラピッドアクセラレータに設定されているモデルを開きます。既定の入力データと必須パラメーターは,ベースワークスペースに事前に読み込まれています。

次のようにしてモデルを開きます。

mdl =“sldemo_raccel_engine_idle_speed”;open_system (mdl);

手順2:入力セットの作成

ここでは,既定の入力値ベクトルに摂動を与え,新しい入力値ベクトルを取得します。

inpSets(1) = timeseries(inpData, time);rndPertb = 0.5 + rand(length(time), 1); / /时间长度inpSets (2) = timeseries (inpData。* rndPertb、时间);numInpSets =长度(inpSets);

手順3:パラメーターセットの作成

パラメーターgain2およびgain3のさまざまな値に対してアイドル回転数がどのように変化するか調べます。金宝app仿真软件。SimulationInputオブジェクトの配列を作成し,各シミュレーションに異なるパラメーター値と外部入力を指定します。SimulationInputオブジェクトの配列は、パフォーマンスを改善するために事前割り当てされます。また、外部入力は、モデル パラメーターを使用するのではなく、SimulationInput オブジェクトに直接指定できる点に注目してください。

gain2_vals = 25:10:35;gain3_vals = 20:10:30;num_gain2_vals =长度(gain2_vals);num_gain3_vals =长度(gain3_vals);numSims = num_gain2_vals * num_gain3_vals * numInpSets;(1: numSims) = S金宝appimulink.SimulationInput (mdl);idx = 1;iG2 = 1: num_gain2_valsiG3 = 1: num_gain3_valsnuminpset in(idx) = in(idx).setModelParameter(“SimulationMode”“快速”...“RapidAcceleratorUpToDateCheck”“关闭”...“SaveTime”“上”...“SaveOutput”“上”);%使用setVariable为变量指定一个新值%的模拟在(idx) = (idx) .setVariable (“gain2”gain2_vals (iG2));在(idx) = (idx) .setVariable (“gain3”gain3_vals (iG3));在(idx)。ExternalInput = inpSets (inpSetsIdx);Idx = Idx + 1;结束结束结束

ラピッドアクセラレータモードでシミュレーションを実行してログを有効にするように,SimulationInputオブジェクトのsetModelParameterメソッドを使用してモデルパラメーターの設定も行っている点に注目してください。ラピッドアクセラレータターゲットのビルドにはSetupFcnを使用しています。ラピッドアクセラレータターゲットを1回ビルドし,モデルのコンパイルにかかる時間を短縮するために以降のすべてのシミュレーションで使用します。SetupFcnのコードは次のとおりです。

函数sldemo_parallel_rapid_accel_sims_script_setup (mdl)暂时将workers上的当前文件夹更改为空%文件夹,以便客户端上任何现有的SLPRJ文件夹都不存在%干涉构建过程。currentFolder = pwd;tempDir = tempname;mkdir (tempDir);cd (tempDir);c = onCleanup(@() cd (currentFolder));金宝appSimulink.BlockDiagram.buildRapidAcceleratorTarget (mdl);结束

手順4:シミュレーションの実行

関数parsimを使用してシミュレーションを並列実行します。最後の手順で作成されたSimulationInputオブジェクトの配列は,最初の引数として関数parsimに渡されます。シミュレーション出力データを,値が金宝app仿真软件。SimulationOutputオブジェクトの配列である変数に保存します。各SimulationOutputオブジェクトには,ログ信号に加え,SimulationMetadataが含まれています。parsimを使用して複数のシミュレーションを実行すると,後続のシミュレーションを継続して実行できるようにエラーがキャプチャされます。エラーがあればSimulationOutputオブジェクトのErrorMessageプロパティに表示されます。

= parsim (,“ShowProgress”“上”...“SetupFcn”@ () sldemo_parallel_rapid_accel_sims_script_setup (mdl));
[16-Oct-2018 15:54:39]检查并行池的可用性…使用“local”配置文件启动并行池(parpool)…[16-Oct-2018 15:55:37] Starting Simulink on parallel workers…金宝app分析和传送文件给工人…完成。[16-Oct-2018 15:55:38]配置并行工作器上的模拟缓存文件夹…[16-Oct-2018 15:55:38] Running SetupFcn on parallel workers…[16-Oct-2018 15:56:28] Loading model on parallel workers…[16-Oct-2018 15:56:29]运行模拟…[16-Oct-2018 15:56:34] 8次仿真运行中完成1次[16-Oct-2018 15:56:34] 8次仿真运行中完成2次[16-Oct-2018 15:56:34] 8次仿真运行中完成3次[16-Oct-2018 15:56:34] 8次仿真运行中完成4次[16-Oct-2018 15:56:34] 8次仿真运行中完成5次[16-Oct-2018 15:56:34] 8次仿真运行中完成6次[16-Oct-2018 15:56:38] [16-Oct-2018 15:56:38]

手順5:結果のプロット

さまざまなパラメーター値と入力で,時間に対するエンジンのアイドル回転数をプロットします。出力は配列形式に記録され,SimulationOuputオブジェクトからアクセスできます。

i = 1:numSims simOut = out(i);t = simOut.tout;y = simOut.yout;情节(t, y)所有结束

手順6:MATLABワーカーを閉じる

删除(gcp (“nocreate”))
使用“本地”配置文件的并行池正在关闭。