Чтобы улучшать производительность симуляции, можно сконфигурировать Дискретную Систему событий MATLAB, чтобы моделировать сгенерированный код использования. С набором параметра Simulate using к опции Code generation
блок моделирует и генерирует код с помощью только функции MATLAB®, поддерживаемые для генерации кода.
Дискретная Система событий MATLAB блокирует повторное использование кода поддержки для моделей, которые имеют несколько блоков Дискретной Системы событий MATLAB с помощью той же Системы object™ исходный файл. Повторное использование кода позволяет коду быть сгенерированным только однажды для блоков, совместно использующих Системный объект.
Начиная в R2017b, блок MATLAB Discrete-Event System может моделировать сгенерированный код использования. Существующие приложения продолжают работать с набором параметра Simulate using к Interpreted execution
.
Если вы хотите сгенерировать код для использования блока ускорение дискретной системы событий MATLAB, обновите код Системного объекта с помощью этих инструкций. Для примера обновленного Системного объекта Дискретной Системы событий MATLAB смотрите 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
.
Управляйте глобальными данными при симуляции с генерацией кода, использующей один из них:
evalin
и assignin
функционируют в рабочем пространстве MATLAB
Статический объект данных (MATLAB)
Много журналирований MATLAB и графических функций не поддерживают генерацию кода. Можно переместить журналирование и графические функции в:
Новый объект matlab.DiscreteEventSystem
и конфигурирует связанный блок MATLAB Discrete-Event System, чтобы моделировать режим Interpreted execution
использования.
Существующий объект simevents.SimulationObserver
Замените персистентную переменную путем объявления свойства Системного объекта. См. Создание системных объектов (MATLAB) для получения дополнительной информации.
Ограничения включают:
Никакие глобальные переменные (MATLAB)
Системные объекты в Генерации кода MATLAB (Simulink)
Ограничения MATLAB System Block (Simulink)
blocked
| cancelForward
| cancelGenerate
| cancelIterate
| cancelTimer
| entry
| eventForward
| generate
| getEntityPortsImpl
| getEntityTypesImpl
| iterate
| matlab.DiscreteEventSystem
| matlab.System
| queueFIFO
| setupEvents
| timer