Чтобы улучшить эффективность симуляции, можно сконфигурировать MATLAB Discrete-Event System для симуляции с помощью сгенерированного кода. С Simulate using набора параметров, чтобы Code generation опция, блок моделирует и генерирует код используя только MATLAB® функции, поддерживаемые для генерации кода.
Блоки MATLAB Discrete-Event System поддерживают повторное использование кода для моделей, которые имеют несколько блоков MATLAB Discrete-Event System с использованием одного и того же исходного файла 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 объект
Замените постоянную переменную объявлением свойства системный объект. Для получения дополнительной информации см. раздел «Создание системных объектов».
Ограничения включают:
blocked | cancelForward | cancelGenerate | cancelIterate | cancelTimer | entry | eventForward | generate | getEntityPortsImpl | getEntityTypesImpl | iterate | matlab.DiscreteEventSystem | matlab.System | queueFIFO | setupEvents | timer