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

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

Блоки MATLAB Discrete-Event System поддерживают повторное использование кода для моделей, которые имеют несколько блоков MATLAB Discrete-Event System с использованием одного и того же исходного файла 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 объект

Замена стойких переменных

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

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

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

См. также

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

Похожие темы