Если вы используете Coder™ Simulink ®, то использование виртуальной или невиртуальной шины может существенно изменить эффективность, размер и удобочитаемость созданного кода. Например, невиртуальная шина появляется как структура в сгенерированном коде, и существует только одна копия любого алгоритма, использующего шину. Использование структуры в сгенерированном коде может быть полезно при отслеживании соответствия между моделью и кодом. Например, вот сгенерированный код для блока COUNTERBUSCreator в ex_bus_logging модель.


Виртуальная шина не появляется как структура или какой-либо другой когерентный блок в сгенерированном коде. Отдельная копия любого алгоритма, который управляет шиной, существует для каждого элемента. Как правило, виртуальные шины не влияют на генерируемый код.
Для группирования сигналов по структурам в сгенерированном коде используются невиртуальные шины. См. раздел Организация данных в структуры в сгенерированном коде (Simulink Coder).
При создании структуры MATLAB ® для инициализации шины, содержащей элементы без двойного сигнала, необходимо задать значения полей структуры. Метод, выбранный для установки значений, может влиять на эффективность и читаемость создаваемого кода. См. раздел Управляющие типы данных полей структуры начального условия.
При создании кода для шины, вводимой в ссылочную модель или выводимой из нее, существуют некоторые ограничения на генерацию кода. См. раздел Использование шин в интерфейсах модели.
Генерация кода для массивов шин производит структуры с определенным форматом. См. раздел Генерация кода для массивов шин.
Для инициализации сигнальных элементов на шине можно использовать структуру MATLAB. См. раздел Определение начальных условий для элементов шины.
Если сигнальные элементы целевой шины используют числовые типы данных, отличные от double, в целом:
Чтобы избежать сопоставления типов данных полей вручную с типами данных сигнальных элементов, используйте нетипизированные выражения для установки значений полей. По мере разработки и быстрого создания прототипа модели используйте этот метод для удобства.
Чтобы создать более эффективный производственный код и избежать хранения данных с плавающей запятой в коде, сопоставьте типы данных полей структуры с типами данных соответствующих сигнальных элементов.
Выбранный метод может влиять на эффективность и удобочитаемость созданного кода.
Примеры и дополнительные сведения о настраиваемых начальных условиях в сгенерированном коде см. в разделе Управляющий сигнал и инициализация состояния в сгенерированном коде (Simulink Coder).
Если для параметра конфигурации Поведение по умолчанию (Default parameter behavior) задано значение Inlinedпо умолчанию значения полей начальной структуры условий отображаются в сгенерированном коде в виде встроенных номеров (без возможности настройки). Для этих структур используйте нетипизированные выражения, чтобы задать значения полей в Simulink. Значения полей не требуют типов данных, поскольку структура не может быть настроена в созданном коде.
Однако если позже задать поведение параметра По умолчанию (Default parameter behavior) равным Tunable или применить класс хранения к структуре с помощью Simulink.Parameter объект, код может содержать память с плавающей запятой и неэффективные явные типы и битовые сдвиги. Чтобы избежать этих проблем, рассмотрите возможность сопоставления типов данных полей структуры с типами данных соответствующих сигнальных элементов.
Предположим, что начальная структура условий задается непосредственно в диалоговом окне блока или в Simulink.Signal объект, с выражением, таким как struct('signal1',5,'signal2',7.2) (вместо хранения структуры в переменной или Simulink.Parameter объект). В этом случае для создания настраиваемой структуры в коде необходимо задать для параметра Поведение по умолчанию значение Tunable.
Таблица используется для определения способа управления типами данных полей в этих начальных структурах условий.
| Цель | Техника | |
|---|---|---|
Используйте невиртуальную шину. | Для задания значений поля используйте нетипизированные выражения. | |
Используйте виртуальную шину. | Избегайте ручного сопоставления типов данных полей с типами данных сигнальных элементов. | Для задания значений поля используйте нетипизированные выражения. |
Создавайте более эффективный код и избегайте хранения с плавающей запятой. | Сопоставьте типы данных полей структуры с типами сигнальных элементов. Сохранить информацию о типе данных в | |
Предположим, что структура начального условия хранится в переменной или Simulink.Parameter объект, создаваемый в базовой рабочей области или словаре данных. Например, этот метод используется для совместного использования структуры между несколькими блоками или для создания настраиваемой структуры при задании для поведения параметра по умолчанию значения Inlined. В этом случае используйте таблицу для определения способа управления типами данных полей в структуре начального условия.
| Цель | Техника | |
|---|---|---|
Избегайте ручного сопоставления типов данных полей с типами данных сигнальных элементов. | Для задания значений поля используйте нетипизированные выражения. В созданном коде поля структуры используют тип данных. | |
Создавайте более эффективный код и избегайте хранения с плавающей запятой. | Сопоставьте типы данных полей структуры с типами сигнальных элементов. сохранять информацию о типе данных в полях структуры или использовать Сведения об использовании Model Advisor для проверки модели на наличие потенциально дорогостоящих несоответствий типов данных см. в разделе Проверка использования параметров структуры с сигналами шины. | |
Инициализируйте массив шин в ссылочной модели с помощью массива структур. Передайте массив структур ссылочной модели в качестве значения аргумента модели в блоке Модель. | Сопоставьте типы данных полей структуры с типами сигнальных элементов. сохранять информацию о типе данных в полях структуры или использовать Если структура не передается ссылочной модели в качестве аргумента модели, следуйте другим инструкциям для невиртуальных шин, чтобы решить, как управлять типами данных. | |
Для задания значений полей структуры можно использовать нетипизированные выражения. В полях неявно используется тип данных double. Задайте значения полей для представления идеальных, реальных значений инициализации.
Не допускается сопоставление типов данных полей вручную с типами данных соответствующих сигнальных элементов. Однако в зависимости от виртуальности шины, метода, используемого для применения исходного условия, и других факторов, в генерируемый код можно ввести хранение с плавающей запятой и потенциально неэффективные типоразмеры.
Предположим, что вы создаете шину myBusSig с этими сигнальными элементами. Каждый элемент использует определенный тип данных.
myBusSig signalElement1 (int32) signalElement2 (boolean) signalElement3 (single)
Создание структуры начального условия initStruct. Для задания значений полей используйте нетипизированные выражения. Дополнительно для улучшения читаемости логического поля signalElement2, используйте значение false вместо 0.
initStruct.signalElement1 = 3; initStruct.signalElement2 = false; initStruct.signalElement3 = 17.35;
При использовании функции Simulink.Bus.createMATLABStruct для создания структуры функция сохраняет информацию о типе данных в полях структуры. После создания структуры можно дополнительно использовать нетипизированные выражения для изменения значений полей. См. раздел Использование Simulink.Bus.createMATLABStruct для создания структуры.
Чтобы сохранить информацию о типе данных в полях структуры, используйте типизированные выражения для установки значений полей или используйте функцию Simulink.Bus.createMATLABStruct для создания структуры. Используйте эти методы для создания эффективного кода путем исключения хранения с плавающей запятой и потенциально неэффективных явных типов.
Чтобы избежать применения новых типов данных вручную к полям структуры при изменении типов данных соответствующих сигнальных элементов, рекомендуется использовать Simulink.Bus объект для одновременного управления типами данных в структуре и шине.
Используйте «Типизированные выражения» для задания значений полей. Предположим, что вы создаете шину myBusSig с этими элементами, которые используют определенные типы данных.
signalElement1 (int32)
signalElement2 (boolean)
signalElement3 (single)
Создание структуры начального условия initStruct используя типизированные выражения для задания значений поля. Сопоставьте типы данных полей с типами данных соответствующих сигнальных элементов.
initStruct.signalElement1 = int32(3); initStruct.signalElement2 = false; initStruct.signalElement3 = single(17.35);
В полях структуры хранится информация о типе данных. При последующем изменении типа данных сигнального элемента примените новый тип данных вручную к соответствующему полю структуры.
Чтобы сопоставить тип данных с фиксированной точкой, задайте значение поля с помощью fi (Конструктор фиксированных точек).
Изменение значения поля путем сохранения информации о типе данных. Предположим, что изменяется значение поля в существующей начальной структуре условия. Для сохранения информации о типе данных в поле можно использовать подстрочное назначение с синтаксисом (:).
initStruct.signalElement3(:) = 16.93;
Если подстрочное назначение не используется, необходимо сохранить тип данных с помощью типизированного выражения.
initStruct.signalElement3 = single(16.93);
Если ни один из этих методов не используется, поле теряет информацию о типе данных.
initStruct.signalElement3 = 16.93; % Field data type is now 'double'.Использовать Simulink.Bus.createMATLABStruct для создания структуры. Можно использовать функцию Simulink.Bus.createMATLABStruct для создания структуры, все поля которой имеют базовые значения, как правило, 0. При настройке типов данных сигнальных элементов перед использованием функции, например, путем установки типов выходных данных блоков, генерирующих сигнальные элементы, каждое поле в структуре вывода использует тот же тип данных, что и соответствующий сигнальный элемент. В полях хранится информация о типе данных, как если бы для задания значений использовались типизированные выражения.
Можно инициализировать некоторые сигнальные элементы со значением, отличным от «земля», путем передачи функции частичной структуры. При создании этой частичной структуры сопоставьте тип данных каждого поля с типом данных соответствующего сигнального элемента с помощью типизированных выражений. Дополнительные сведения и примеры см. в разделе Simulink.Bus.createMATLABStruct.
При последующем изменении значения поля в структуре выберите один из следующих методов для установки нового значения:
Нетипизированное выражение. Значение поля больше не хранит информацию о типе данных.
Типизированное выражение или подстрочное назначение. Значение поля продолжает сохранять информацию о типе данных.
Независимо от того, хранится ли информация о типе данных в полях структуры или используются нетипизированные выражения для задания значений полей, можно использовать Simulink.Bus объект как вид данных всей структуры начального условия. Затем можно независимо управлять значениями полей и типами данных.
При использовании этого метода рекомендуется использовать нетипизированные выражения для задания значений полей. В этом случае при изменении типов данных сигнальных элементов нет необходимости сопоставлять типы данных полей вручную. Для управления типами данных полей и сигнальных элементов используйте DataType свойства элементов в Bus объект.
Предположим, что для создания шины используется блок Bus Creator myBusSig с этими элементами:
signalElement1 (int32)
signalElement2 (boolean)
signalElement3 (single)
Откройте редактор шины.
buseditor
Создать Bus объект, myBus, что соответствует шине.

Создание структуры начального условия initStruct. Для задания значений поля используются нетипизированные выражения. Для улучшения удобочитаемости поля signalElement2, используйте логическое значение false вместо 0.
initStruct.signalElement1 = 3; initStruct.signalElement2 = false; initStruct.signalElement3 = 17.35;
Чтобы представить структуру, создайте Simulink.Parameter объект.
initStruct = Simulink.Parameter(initStruct);
Используйте объект parameter для задания начального условия для шины. Например, в диалоговом окне Блок единичной задержки (Unit Delay block) задайте для параметра Начальное условие (Initial condition) значение initStruct.
Используйте Bus для указания типа данных объекта параметра.
initStruct.DataType = 'Bus: myBus';Используйте Bus для указания типа данных шины. Например, в диалоговом окне Bus Creator block задайте для параметра Output data type значение Bus: myBus.
Во время моделирования и в сгенерированном коде поля структуры и сигнальные элементы используют типы данных, указанные в Bus объект. Перед моделированием и созданием кода объект-параметр приводит поля структуры к типам данных, указанным в Bus объект.
Для получения основных сведений о Bus см. раздел Задание свойств шины с помощью Simulink.Bus Object Data Types.
Чтобы удалить информацию о типе данных из всех полей структуры, можно записать пользовательскую функцию, которая заменяет значения полей на double цифры. Используйте функцию примера castStructToDbl в качестве шаблона.
Чтобы преобразовать структуру, использующую двойные значения, в структуру, хранящую информацию о типе данных, можно создать ссылочную структуру с помощью функции. Simulink.Bus.createMATLABStruct. Затем можно записать пользовательскую функцию для приведения значений полей к типам данных в ссылочной структуре. Используйте функцию примера castStructFromDbl в качестве шаблона.
Чтобы определить, когда типы данных полей структуры не согласуются со связанными элементами шины, используйте Model Advisor.
На вкладке Моделирование (Modeling) щелкните Помощник по модели (Model Advisor).
Нажмите кнопку ОК.
В разделе По задаче (By Task) > Моделирование сигналов и параметров с использованием шин (Modeling Signals and Parameters using Bus) выберите Проверить использование параметров структуры с сигналами шины (Check structure parameter
Нажмите кнопку Выполнить эту проверку.
При создании кода для модели, включающей массив шин, typedef , который представляет базовый тип шины, появляется в *_types.h файл.
При создании кода создается массив структур C, который можно интегрировать с устаревшим кодом C, использующим массивы структур. При необходимости код для переменных шины (массивов) генерируется в следующих структурах:
Блок ввода-вывода
Государства
Внешние вводы
Внешние выходы
Ниже приведен упрощенный пример некоторого генерируемого кода для массива шин.

Основные сведения о создании кода для невиртуальных шин, которые отображаются в коде как структуры, см. в разделе Организация данных в структуры в сгенерированном коде (Simulink Coder).