exponenta event banner

Создание кода для системных блоков с дискретными событиями MATLAB

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

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

Перенос существующего системного объекта системы дискретных событий MATLAB

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

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

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

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

  1. В matlab.DiscreteEventSystem измените следующие имена методов на новые имена:

    Старое имя методаНовое имя метода
    blockedImplblocked
    destroyImpldestroy
    entryImplentry
    exitImplexit
    generateImplgenerate
    iterateImpliterate
    setupEventsImplsetupEvents
    timerImpltimer
  2. В коде переместите переименованные определения методов из защищенной области в общедоступную для каждого matlab.DiscreteEventSystem способ.

Инициализировать свойства системы

Инициализировать свойства объекта System в разделе свойств. Не инициализируйте их в конструкторе или других методах. Другими словами, нельзя использовать переменный размер для свойств объекта System.

Инициализация пустых массивов событий

Используйте 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);
  • Не передавайте объект System функциям, объявленным как внешние.

  • Объявить только статические методы объекта System как внешние.

Заменить массивы ячеек

Замените массивы ячеек на матрицы или массивы структур.

ПреждеПосле
 entity.data.execTime = obj.ExecTimes{id}(1);
entity.data.execTime = obj.ExecTimes(id, 1);

Изменить флаги на логические значения

Изменение флагов из таких значений, как 1 и 0 логическим значениям, таким как true и false.

Управление глобальными данными

Управление глобальными данными при моделировании с созданием кода с помощью одного из следующих способов:

Переместить ведение журнала и графические функции

Многие функции ведения журнала MATLAB и графические функции не поддерживают создание кода. Ведение журнала и графические функции можно перемещать в:

  • Новое matlab.DiscreteEventSystem объект и сконфигурировать связанный блок системы дискретных событий MATLAB для моделирования с использованием Interpreted execution режим.

  • Существующее simevents.SimulationObserver объект

Заменить постоянные переменные

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

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

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

См. также

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

Связанные темы