Чтобы улучшать производительность симуляции, можно сконфигурировать Дискретную Систему событий MATLAB, чтобы моделировать сгенерированный код использования. С набором параметра Simulate using к опции Code generation блок моделирует и генерирует код с помощью только функции MATLAB®, поддерживаемые для генерации кода.
Дискретная Система событий MATLAB блокирует повторное использование кода поддержки для моделей, которые имеют несколько блоков Дискретной Системы событий MATLAB с помощью той же Системы object™ исходный файл. Повторное использование кода позволяет коду быть сгенерированным только однажды для блоков, совместно использующих Системный объект.
Начиная в R2017b, блок MATLAB Discrete-Event System может моделировать сгенерированный код использования. Существующие приложения продолжают работать с набором параметра Simulate using к Interpreted execution.
Если вы хотите сгенерировать код для использования блока ускорение дискретной системы событий MATLAB, обновите код Системного объекта с помощью этих инструкций. Для примера обновленного Системного объекта Дискретной Системы событий MATLAB смотрите seExampleSchedulerClass файл в Разрабатывании Пользовательского Планировщика Многожильного примера Системы управления.
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.
Управляйте глобальными данными при симуляции с генерацией кода, использующей один из них:
evalin и assignin функционируют в рабочем пространстве MATLAB
Статический объект данных (MATLAB)
Много журналирований MATLAB и графических функций не поддерживают генерацию кода. Можно переместить журналирование и графические функции в:
Новый объект matlab.DiscreteEventSystem и конфигурирует связанный блок MATLAB Discrete-Event System, чтобы моделировать режим Interpreted execution использования.
Существующий объект simevents.SimulationObserver
Замените персистентную переменную путем объявления свойства Системного объекта. См. Создание системных объектов (MATLAB) для получения дополнительной информации.
Ограничения включают:
Никакие глобальные переменные (MATLAB)
Системные объекты в Генерации кода MATLAB (Simulink)
Ограничения MATLAB System Block (Simulink)
blocked | cancelForward | cancelGenerate | cancelIterate | cancelTimer | entry | eventForward | generate | getEntityPortsImpl | getEntityTypesImpl | iterate | matlab.DiscreteEventSystem | matlab.System | queueFIFO | setupEvents | timer