Для повышения производительности моделирования можно настроить систему дискретных событий MATLAB для моделирования с использованием сгенерированного кода. С помощью параметра Simulate using Code generation блок моделирует и генерирует код, используя только функции MATLAB ®, поддерживаемые для генерации кода.
Блоки системы с дискретными событиями MATLAB поддерживают повторное использование кода для моделей, имеющих несколько блоков системы с дискретными событиями MATLAB, использующих один и тот же исходный файл System object™. Повторное использование кода позволяет генерировать код только один раз для блоков, совместно использующих объект System.
Начиная с R2017b, блок системы дискретных событий MATLAB может моделировать с использованием сгенерированного кода. Существующие приложения продолжают работать с Simulate, используя значение параметра Interpreted execution.
Если требуется создать код для блока с помощью ускорения системы дискретных событий MATLAB, обновите код объекта System с помощью этих инструкций. Пример обновленного объекта системы дискретных событий MATLAB см. в примере Разработка пользовательского планировщика многоядерной системы управления.
matlab.DiscreteEventSystem МетодыИспользование преимуществ моделирования с генерацией кода для matlab.DiscreteEventSystem класс:
В matlab.DiscreteEventSystem измените следующие имена методов на новые имена:
| Старое имя метода | Новое имя метода |
|---|---|
blockedImpl | blocked |
destroyImpl | destroy |
entryImpl | entry |
exitImpl | exit |
generateImpl | generate |
iterateImpl | iterate |
setupEventsImpl | setupEvents |
timerImpl | timer |
В коде переместите переименованные определения методов из защищенной области в общедоступную для каждого 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. Дополнительные сведения см. в разделе Создание системных объектов.
Ограничения включают:
blocked | cancelForward | cancelGenerate | cancelIterate | cancelTimer | entry | eventForward | generate | getEntityPortsImpl | getEntityTypesImpl | iterate | matlab.DiscreteEventSystem | matlab.System | queueFIFO | setupEvents | timer