simulink.schedule.OrderedSchedule class

Пакет: simulink.schedule

Создание OrderedSchedule объект, содержащий порядок приоритетов разделов модели

Описание

The simulink.schedule.OrderedSchedule объект является представлением порядка выполнения разделов заданной модели. Доступ к этому объекту как параметру модели с get_param. Можно использовать OrderedSchedule объект для изменения расписания разделов модели через командную строку.

Можно использовать set_param для применения спецификации к модели.

Создание

get_param(mdl,'Schedule') создает OrderedSchedule объект для заданной модели, mdl.

Свойства

расширить все

Порядок приоритета разделов, заданный как таблица, где:

  • Имена строк являются именами разделов.

  • Первый столбец является индексом раздела. Измените индекс, чтобы изменить порядок разделов.

  • Во втором столбце показан тип разделов.

  • В третьем столбце показан триггер раздела. В этом столбце указывается шаг расчета разделов или время хита, в течение которого выполняются разделы.

RateSections - массив объектов, содержащий фрагмент таблицы порядков с одной скоростью. Использование RateSections для простого изменения порядка выполнения разделов в допустимых группах.

Назначение отдельного объекта расписания, заданное как строка.

Примеры

свернуть все

Этот пример использует API редактора расписаний для выполнения операций по расписанию. Затем он использует функцию, чтобы сгенерировать случайные расписания и проанализировать их в Данные Моделирования Inspector

Откройте Модель и получите Объект Расписания

Откройте модель системы управления положением дросселя и используйте 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 свойство, которое содержит порядок выполнения разделов в модели. The 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

randomSchedule функция используется для создания случайных расписаний при помощи случайных сочетаний изменений индекса в schedule объект. Использование Order и RateSections свойства schedule объект, разделы в спецификациях перемещаются в различных, случайных комбинациях. С этими случайным образом созданными расписаниями модели моделируются и сравниваются для изучения эффекта различных расписаний на симуляцию. В функциональном randomSchedule, входом является имя модели. Затем используйте get_param для получения simulink.schedule.OrderedSchedule объект модели. Объект расписания и его свойства используются для изменения и рандомизации расписаний. Создайте переменную firstExecutionOrder для первого раздела модели. The 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 объекты, можно применить спецификации к модели с помощью setModelParameters метод Simulink.SimulationInput объект.

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 объекты для выполнения нескольких симуляций. После завершения моделирования можно построить график выхода всех симуляций в Данные Моделирования Inspector.

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)
[27-Jan-2021 13:25:41] Running simulations...
[27-Jan-2021 13:25:55] Completed 1 of 15 simulation runs
[27-Jan-2021 13:26:00] Completed 2 of 15 simulation runs
[27-Jan-2021 13:26:04] Completed 3 of 15 simulation runs
[27-Jan-2021 13:26:08] Completed 4 of 15 simulation runs
[27-Jan-2021 13:26:12] Completed 5 of 15 simulation runs
[27-Jan-2021 13:26:17] Completed 6 of 15 simulation runs
[27-Jan-2021 13:26:21] Completed 7 of 15 simulation runs
[27-Jan-2021 13:26:25] Completed 8 of 15 simulation runs
[27-Jan-2021 13:26:30] Completed 9 of 15 simulation runs
[27-Jan-2021 13:26:34] Completed 10 of 15 simulation runs
[27-Jan-2021 13:26:38] Completed 11 of 15 simulation runs
[27-Jan-2021 13:26:42] Completed 12 of 15 simulation runs
[27-Jan-2021 13:26:47] Completed 13 of 15 simulation runs
[27-Jan-2021 13:26:51] Completed 14 of 15 simulation runs
[27-Jan-2021 13:26:55] Completed 15 of 15 simulation runs

ans = 

1x15 Simulink.SimulationOutput array


Введенный в R2020a
Для просмотра документации необходимо авторизоваться на сайте