Пакет: simulink.schedule
Создание OrderedSchedule объект, содержащий порядок приоритетов разделов модели
The simulink.schedule.OrderedSchedule объект является представлением порядка выполнения разделов заданной модели. Доступ к этому объекту как параметру модели с get_param. Можно использовать OrderedSchedule объект для изменения расписания разделов модели через командную строку.
Можно использовать set_param для применения спецификации к модели.
get_param(mdl,'Schedule') создает OrderedSchedule объект для заданной модели, mdl.
Order - Порядок приоритета разделовПорядок приоритета разделов, заданный как таблица, где:
Имена строк являются именами разделов.
Первый столбец является индексом раздела. Измените индекс, чтобы изменить порядок разделов.
Во втором столбце показан тип разделов.
В третьем столбце показан триггер раздела. В этом столбце указывается шаг расчета разделов или время хита, в течение которого выполняются разделы.
RateSections - Разделы таблицы порядковRateSections - массив объектов, содержащий фрагмент таблицы порядков с одной скоростью. Использование RateSections для простого изменения порядка выполнения разделов в допустимых группах.
Description - Описание OrderedSchedule объектНазначение отдельного объекта расписания, заданное как строка.
Этот пример использует 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
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.