Пакет: simulink.schedule
Создает 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)
[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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.