このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
simulink.schedule.OrderedSchedule クラス
名前空間: simulink.schedule
説明
simulink.schedule.OrderedSchedule
オブジェクトは、指定されたモデルの分割の実行順序を表しています。get_param
を使用してモデル パラメーターとしてこのオブジェクトにアクセスします。OrderedSchedule
オブジェクトを使用して、コマンド ラインでモデルの分割のスケジュールを変更できます。
set_param
を使用すると、スケジュールをモデルに適用できます。
作成
get_param(mdl,'Schedule')
は指定されたモデル mdl
の OrderedSchedule
オブジェクトを作成します。
プロパティ
Order
— 分割の優先順位
table
分割の優先順位。次のような table として指定します。
行名は分割の名前。
最初の列は分割のインデックス。分割の順序を変更するには、インデックスを変更します。
2 番目の列は分割の種類を示す。
3 番目の列は分割のトリガーを示す。この列には、分割のサンプル時間、または分割が実行されるヒット時間のいずれかがリストされます。
RateSections
— 順序テーブルのセクション
配列
RateSections
は、シングル レートを使用する順序テーブルの一部が含まれるオブジェクトの配列です。RateSections
を使用すると、有効なグループ内の分割の実行順序を簡単に変更できます。
Description
— OrderedSchedule
オブジェクトの説明
string
個々のスケジュール オブジェクトの目的。string として指定します。
Events
— スケジュール エディターのイベント
配列
非周期的分割のトリガーとなる可能性のあるスケジュール エディターのイベント。スケジュール エディターのイベントは、Stateflow® チャートによって、また Simulink® の入力イベントによって送信され、simulink.schedule.Event
オブジェクトの配列として指定されます。
例
スケジュール エディター API による、モデルのランダムなスケジュールの作成と解析
この例では、スケジュール エディター API を使用して、スケジュールの操作を実行します。その後、関数を使用してランダムなスケジュールを生成し、シミュレーション データ インスペクターでそれを解析します。
モデルを開いてスケジュール オブジェクトを取得
スロットル位置制御システムのモデルを開いて、get_param を使用して simulink.schedule.OrderedSchedule
オブジェクトを取得します。このオブジェクトには現在のスケジュールが含まれています。
model = 'ScheduleEditorAPIWithSubsystemPartitions'; open_system(model); schedule = get_param(model, 'Schedule')
schedule = OrderedSchedule with properties: Order: [9x3 table] RateSections: [3x1 simulink.schedule.RateSection] Events: [0x1 simulink.schedule.Event] Description: ''
スケジュール オブジェクトの調査
このスケジュール オブジェクトには Order
プロパティがあり、それにはモデル内の分割の実行順序が含まれています。Order
プロパティは、分割名、インデックス、タイプ、そのトリガーを含むテーブルを表示します。
schedule.Order
ans = 9x3 table Index Type Trigger _____ ________ _______ Cont 1 Periodic "0" TPSSecondaryRun5ms 2 Periodic "0.005" MonitorRun5ms 3 Periodic "0.005" ControllerRun5ms 4 Periodic "0.005" ActuatorRun5ms 5 Periodic "0.005" D2 6 Periodic "0.005" D3 7 Periodic "0.01" APPSnsrRun 8 Periodic "0.01" TPSPrimaryRun10ms 9 Periodic "0.01"
Order
テーブルのインデックス変数を使用して、モデルの実行順序を変更します。
schedule.Order.Index('ActuatorRun5ms') = 2;
schedule.Order
ans = 9x3 table Index Type Trigger _____ ________ _______ Cont 1 Periodic "0" ActuatorRun5ms 2 Periodic "0.005" TPSSecondaryRun5ms 3 Periodic "0.005" MonitorRun5ms 4 Periodic "0.005" ControllerRun5ms 5 Periodic "0.005" D2 6 Periodic "0.005" D3 7 Periodic "0.01" APPSnsrRun 8 Periodic "0.01" TPSPrimaryRun10ms 9 Periodic "0.01"
スケジュールを変更するために行われた Order
プロパティ内のすべての移動は、有効なスケジュールになります。スケジュールの変更と有効な移動の実行を簡単にするため、各分割は RateSections
プロパティで同じレートをもつ分割とグループ化されています。RateSection
プロパティの各要素に、レートが同じ分割を含む順序テーブルがあります。
schedule.RateSections(2) schedule.RateSections(2).Order
ans = RateSection with properties: Rate: "0.005" Order: [5x3 table] ans = 5x3 table Index Type Trigger _____ ________ _______ ActuatorRun5ms 2 Periodic "0.005" TPSSecondaryRun5ms 3 Periodic "0.005" MonitorRun5ms 4 Periodic "0.005" ControllerRun5ms 5 Periodic "0.005" D2 6 Periodic "0.005"
インデックス変数を使用して、RateSections
内で分割を移動します。
schedule.RateSections(2).Order.Index('ActuatorRun5ms') = 5;
schedule.Order
ans = 9x3 table Index Type Trigger _____ ________ _______ Cont 1 Periodic "0" TPSSecondaryRun5ms 2 Periodic "0.005" MonitorRun5ms 3 Periodic "0.005" ControllerRun5ms 4 Periodic "0.005" ActuatorRun5ms 5 Periodic "0.005" D2 6 Periodic "0.005" D3 7 Periodic "0.01" APPSnsrRun 8 Periodic "0.01" TPSPrimaryRun10ms 9 Periodic "0.01"
ランダムなスケジュールを生成する関数の作成
この節では、randomSchedule
、generateSimulationInputs
、simulateRandomSchedules
の 3 つの異なる関数を作成します。
関数 randomSchedule
は、schedule
オブジェクトのインデックス変更のランダム置換によってランダムなスケジュールを作成するために使用されます。schedule
オブジェクトの Order
プロパティと RateSections
プロパティを使用して、スケジュール内の分割が、異なるランダムな組み合わせで移動されます。これらのランダムに作成されたスケジュールを使用してモデルをシミュレートして比較し、異なるスケジュールがシミュレーションに与える影響を調べます。関数 randomSchedule
において、入力はモデル名です。次に、get_param
を使用してモデルの simulink.schedule.OrderedSchedule
オブジェクトを取得します。この schedule
オブジェクトとそのプロパティは、スケジュールを変更してランダム化するために使用されます。モデルの最初のレートのセクションに対して変数 firstExecutionOrder
を作成します。コード行 rateSections(1).ExecutionOrder = [firstExecutionOrder(1,:); reSchedule(firstExecutionOrder(2:end,:))]
は、インデックスのランダム置換を作成する関数 reSchedule
を呼び出します。
type randomSchedule
function schedule = randomSchedule(model) % schedule = randomSchedule(model) Produces a % simulink.schedule.OrderedSchedule that has a randomized permutation % of the model's original execution order schedule arguments model char = bdroot end schedule = get_param(model, 'Schedule'); rateSections = schedule.RateSections; firstOrder = rateSections(1).Order; % This assumes that the slowest discrete rate is at index 1. This may % not be the case for all models (ex. JMAAB-B). rateSections(1).Order = [firstOrder(1,:); reSchedule(firstOrder(2:end,:))]; for i=2:length(rateSections) rateSections(i).Order = reSchedule(rateSections(i).Order); end schedule.RateSections = rateSections; end function out = reSchedule(in) numPartitions = height(in); in.Index = in.Index(randperm(numPartitions)); out = in; end
異なるスケジュールがモデルに与える影響を解析するため、さまざまなスケジュールでモデルをシミュレートします。この関数では、Simulink.SimulationInput
オブジェクトの配列を作成します。Simulink.SimulationInput
オブジェクトのこの配列を通して、Simulink.SimulationInput
オブジェクトの setModelParameters
メソッドを使用して、モデルにスケジュールを適用できます。
type generateSimulationInputs
function in = generateSimulationInputs(model, numSimulations) % in = generateSimulationInputs(model, numSimulations) Generates % numSimulations Simulink.SimulationInput objects each containing a % different, randomized execution order schedule arguments model char = bdroot numSimulations double = 10 end in(numSimulations) = Simulink.SimulationInput(); in = in.setModelName(model); for idx = 1:numSimulations in(idx) = in(idx).setModelParameter('Schedule', randomSchedule(model)); end end
最後の関数では、Simulink.SimulationInput
オブジェクトの配列を使用して複数のシミュレーションを実行します。シミュレーションが完了したら、シミュレーション データ インスペクターにすべてのシミュレーションの出力をプロットできます。
type simulateRandomSchedules
function out = simulateRandomSchedules(model, numSimulations) % out = simulateRandomSchedules(model, numSimulations) Simulates a % model numSimulations number of times. Each simulation has a % randomized execution order schedule. arguments model char = bdroot numSimulations double = 10 end in = generateSimulationInputs(model, numSimulations); out = sim(in); plot(out); end
関数の実行
今度は、ScheduleEditorAPIWithSubsystemPartitions
モデルで上記の関数を実行します。まず、関数 randomSchedule
を使用してランダムに生成されたスケジュールを作成します。次に、関数 generateSimulationInputs
を使用して Simulink.SimulationInput
オブジェクトの配列を生成します。さらに、関数 simulateRandomSchedule
を使用して異なるスケジュールでモデルをシミュレートし、比較のためにその結果をプロットします。それでは、15 個のランダムに生成されたスケジュールでシミュレーションを実行しましょう。
simulateRandomSchedules(model,15)
[25-Jan-2024 18:30:38] Running simulations... [25-Jan-2024 18:30:55] Completed 1 of 15 simulation runs [25-Jan-2024 18:30:58] Completed 2 of 15 simulation runs [25-Jan-2024 18:31:00] Completed 3 of 15 simulation runs [25-Jan-2024 18:31:03] Completed 4 of 15 simulation runs [25-Jan-2024 18:31:05] Completed 5 of 15 simulation runs [25-Jan-2024 18:31:07] Completed 6 of 15 simulation runs [25-Jan-2024 18:31:09] Completed 7 of 15 simulation runs [25-Jan-2024 18:31:10] Completed 8 of 15 simulation runs [25-Jan-2024 18:31:12] Completed 9 of 15 simulation runs [25-Jan-2024 18:31:14] Completed 10 of 15 simulation runs [25-Jan-2024 18:31:16] Completed 11 of 15 simulation runs [25-Jan-2024 18:31:18] Completed 12 of 15 simulation runs [25-Jan-2024 18:31:20] Completed 13 of 15 simulation runs [25-Jan-2024 18:31:22] Completed 14 of 15 simulation runs [25-Jan-2024 18:31:24] Completed 15 of 15 simulation runs ans = 1x15 Simulink.SimulationOutput array
バージョン履歴
R2020a で導入
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)