Сгенерируйте код для блоков Дискретной Системы событий MATLAB

Чтобы улучшать производительность симуляции, можно сконфигурировать Дискретную Систему событий MATLAB, чтобы моделировать сгенерированный код использования. С набором параметра Simulate using к опции Code generation блок моделирует и генерирует код с помощью только функции MATLAB®, поддерживаемые для генерации кода.

Дискретная Система событий MATLAB блокирует повторное использование кода поддержки для моделей, которые имеют несколько блоков Дискретной Системы событий MATLAB с помощью той же Системы object™ исходный файл. Повторное использование кода позволяет коду быть сгенерированным только однажды для блоков, совместно использующих Системный объект.

Переместите Существующий Системный объект Дискретной Системы событий MATLAB

Начиная в R2017b, блок MATLAB Discrete-Event System может моделировать сгенерированный код использования. Существующие приложения продолжают работать с набором параметра Simulate using к Interpreted execution.

Если вы хотите сгенерировать код для использования блока ускорение дискретной системы событий MATLAB, обновите код Системного объекта с помощью этих инструкций. Для примера обновленного Системного объекта Дискретной Системы событий MATLAB смотрите seExampleSchedulerClass файл в Разрабатывании Пользовательского Планировщика Многожильного примера Системы управления.

Замените переименованные методы matlab.DiscreteEventSystem

Использовать в своих интересах симуляцию с генерацией кода для класса matlab.DiscreteEventSystem:

  1. В файле приложения matlab.DiscreteEventSystem измените эти имена методов на новые имена:

    Старое имя методаНовое имя метода
    blockedImplblocked
    destroyImpldestroy
    entryImplentry
    exitImplexit
    generateImplgenerate
    iterateImpliterate
    setupEventsImplsetupEvents
    timerImpltimer
  2. В коде переместите определения переименованного метода от защищенной области до общественного места для каждого метода 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

Замените персистентные переменные

Замените персистентную переменную путем объявления свойства Системного объекта. См. Создание системных объектов (MATLAB) для получения дополнительной информации.

Ограничения генерации кода с блоком Дискретной Системы событий

Ограничения включают:

Смотрите также

| | | | | | | | | | | | | | |

Похожие темы