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