Сгенерируйте код для блоков MATLAB Discrete-Event System

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

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

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

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

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

Замените переименованный 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 объект

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

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

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

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

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

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

Похожие темы