Создает OrderedSchedule объект, содержащий порядок приоритетов разделов модели
simulink.schedule.OrderedSchedule объект является представлением порядка выполнения разделов заданной модели. Доступ к этому объекту как параметр модели с get_param. Можно использовать OrderedSchedule объект изменить расписание разделов модели через командную строку.
Можно использовать set_param применять расписание к модели.
get_param(mdl,'Schedule') создает OrderedSchedule объект для заданной модели, mdl.
Order — Порядок приоритетов разделовПорядок приоритетов разделов в виде таблицы, где:
Имена строки являются именами разделов.
Первый столбец является индексом раздела. Измените индекс, чтобы изменить порядок разделов.
Второй столбец показывает тип разделов.
Третий столбец показывает триггер раздела. Это списки столбцов или шаг расчета разделов, или времена хита, в которые выполняются разделы.
RateSections — Разделы таблицы порядкаRateSections массив объектов, содержащих фрагмент таблицы порядка с одним уровнем. Используйте RateSections легко изменить порядок выполнения разделов в допустимых группах.
Description — Описание OrderedSchedule объектЦель отдельного расписания возражает в виде строки.
Этот пример использует Редактор Расписания 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
randomSchedule функция используется, чтобы создать случайные расписания при помощи случайных сочетаний модификаций индекса в schedule объект. Используя Order и RateSections свойства schedule объект, разделы в расписаниях перемещены в различных, случайных комбинациях. С этими случайным образом созданными расписаниями модели симулированы и сравнены, чтобы изучить эффект различных расписаний на симуляции. В функциональном randomSchedule, вход является именем модели. Затем используйте get_param получить simulink.schedule.OrderedSchedule объект модели. Объект расписания и его свойства используются, чтобы изменить и рандомизировать расписания. Создайте переменную 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 объекты, можно применить расписания к модели с 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 объекты запустить несколько симуляций. Если симуляции завершены, можно построить выход всех симуляций в Инспекторе Данных моделирования.
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)
[30-Jul-2020 16:47:58] Running simulations... [30-Jul-2020 16:48:13] Completed 1 of 15 simulation runs [30-Jul-2020 16:48:21] Completed 2 of 15 simulation runs [30-Jul-2020 16:48:25] Completed 3 of 15 simulation runs [30-Jul-2020 16:48:30] Completed 4 of 15 simulation runs [30-Jul-2020 16:48:34] Completed 5 of 15 simulation runs [30-Jul-2020 16:48:38] Completed 6 of 15 simulation runs [30-Jul-2020 16:48:42] Completed 7 of 15 simulation runs [30-Jul-2020 16:48:46] Completed 8 of 15 simulation runs [30-Jul-2020 16:48:50] Completed 9 of 15 simulation runs [30-Jul-2020 16:48:54] Completed 10 of 15 simulation runs [30-Jul-2020 16:48:58] Completed 11 of 15 simulation runs [30-Jul-2020 16:49:02] Completed 12 of 15 simulation runs [30-Jul-2020 16:49:07] Completed 13 of 15 simulation runs [30-Jul-2020 16:49:11] Completed 14 of 15 simulation runs [30-Jul-2020 16:49:15] Completed 15 of 15 simulation runs ans = 1x15 Simulink.SimulationOutput array
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.