Чтобы улучшить эффективность симуляции, можно сконфигурировать MATLAB Discrete-Event System для симуляции с помощью сгенерированного кода. С Simulate using набора параметров, чтобы Code generation
опция, блок моделирует и генерирует код используя только MATLAB® функции, поддерживаемые для генерации кода.
Блоки MATLAB Discrete-Event System поддерживают повторное использование кода для моделей, которые имеют несколько блоков MATLAB Discrete-Event System с использованием одного и того же исходного файла System object™. Повторное использование кода позволяет сгенерировать код только один раз для блоков, совместно использующих системный объект.
Начиная с R2017b, MATLAB Discrete-Event System блок может симулировать с использованием сгенерированного кода. Существующие приложения продолжают работать с Simulate using набора параметров для Interpreted execution
.
Если вы хотите сгенерировать код для блока с помощью ускорения системы дискретных событий MATLAB, обновите код системного объекта с помощью этих руководств. Пример обновленной MATLAB Discrete-Event System Системного объекта см. в примере разработки пользовательского планировщика многоядерной системы управления.
matlab.DiscreteEventSystem
МетодыЧтобы воспользоваться преимуществами симуляции с генерацией кода для matlab.DiscreteEventSystem
класс:
В matlab.DiscreteEventSystem
файл приложения, измените эти имена методов на новые:
Старое имя метода | Новое имя метода |
---|---|
blockedImpl | blocked |
destroyImpl | destroy |
entryImpl | entry |
exitImpl | exit |
generateImpl | generate |
iterateImpl | iterate |
setupEventsImpl | setupEvents |
timerImpl | timer |
В коде переместите переименованные определения методов из защищенной области в общедоступную для каждого matlab.DiscreteEventSystem
способ.
Инициализируйте свойства системного объекта в разделе свойств. Не инициализируйте их в конструкторе или других методах. Другими словами, вы не можете использовать переменный размер для свойств системного объекта.
Используйте initEventArray
для инициализации массивов.
Прежде | После |
---|---|
function events = setupEventsImpl(obj) |
function events = setupEvents(obj) events = obj.initEventArray; |
Добавьте элементы к массиву структур. Для примера:
Прежде | После |
---|---|
events(id) = obj.eventGenerate(1, num2str(id), ... 0, obj.Priorities(id)); %#ok<*AGROW> |
events = [events obj.eventGenerate(1, int2str(id),... 0, obj.Priorities(id))]; %#ok<AGROW> |
Замените функции, которые не поддерживают генерацию кода, функциональными эквивалентами, которые поддерживают генерацию кода. Для примера:
Прежде | После |
---|---|
events(id) = obj.eventGenerate(1, num2str(id), ... 0, obj.Priorities(id)); %#ok<*AGROW> |
events = [events obj.eventGenerate(1, int2str(id),... 0, obj.Priorities(id))]; %#ok<AGROW> |
Для функций, которые не поддерживают генерацию кода и которые не имеют функциональных эквивалентов, используйте coder.extrinsic
функция для объявления этих функций внешними. Для примера, str2double
не имеет функционального эквивалента. Перед вызовом coder.extrinsic
, сделайте возвращенную переменную совпадающим типом данных, что и идентифицируемую функцию. Для примера:
Прежде | После |
---|---|
id = str2double(tag); |
coder.extrinsic('str2double'); id = 1; id = str2double(tag); |
Не передайте Системный объект функциям, которые объявлены как внешние.
Объявить внешними только статические методы системного объекта.
Замените массивы ячеек матрицами или массивами структур.
Прежде | После |
---|---|
entity.data.execTime = obj.ExecTimes{id}(1); |
entity.data.execTime = obj.ExecTimes(id, 1); |
Изменение флагов из таких значений, как 1
и 0
к логическим значениям, таким как true
и false
.
Управляйте глобальными данными во время симуляции с генерацией кода с помощью одного из следующих:
Многие логгирования MATLAB и графические функции не поддерживают генерацию кода. Можно переместить логгирование и графические функции в:
Новый matlab.DiscreteEventSystem
объект и сконфигурируйте связанный блок MATLAB Discrete-Event System для симуляции с помощью Interpreted execution
режим.
Существующая simevents.SimulationObserver
объект
Замените постоянную переменную объявлением свойства системный объект. Для получения дополнительной информации см. раздел «Создание системных объектов».
Ограничения включают:
blocked
| cancelForward
| cancelGenerate
| cancelIterate
| cancelTimer
| entry
| eventForward
| generate
| getEntityPortsImpl
| getEntityTypesImpl
| iterate
| matlab.DiscreteEventSystem
| matlab.System
| queueFIFO
| setupEvents
| timer