Чтобы улучшать производительность симуляции, можно сконфигурировать MATLAB Discrete-Event System, чтобы симулировать сгенерированный код использования. С набором параметров Simulate using к Code generation
опция, блок симулирует и генерирует код с помощью только функции MATLAB®, поддерживаемые для генерации кода.
MATLAB Discrete-Event System блокирует повторное использование кода поддержки для моделей, которые имеют несколько блоков MATLAB Discrete-Event System с помощью той же Системы object™ исходный файл. Повторное использование кода позволяет коду быть сгенерированным только однажды для блоков, совместно использующих Системный объект.
Начиная в R2017b, блок MATLAB Discrete-Event System может симулировать сгенерированный код использования. Существующие приложения продолжают работать с набором параметров Simulate using к Interpreted execution
.
Если вы хотите сгенерировать код для использования блока ускорение дискретной системы событий MATLAB, обновить код Системного объекта с помощью этих инструкций. Для примера обновленного Системного объекта MATLAB Discrete-Event System смотрите seExampleSchedulerClass файл в Разрабатывании Пользовательского Планировщика Многожильного примера Системы управления.
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