Сгенерируйте код для сигналов шины

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

Виртуальная шина не появляется как структура или любой другой когерентный модуль в сгенерированном коде. Отдельная копия любого алгоритма, который управляет шиной, существует для каждого элемента. В целом виртуальные шины не влияют на сгенерированный код.

К сигналам группы в структуры в сгенерированном коде используйте невиртуальные шины. Смотрите Организуют Данные в Структуры в Сгенерированном коде (Simulink Coder).

Когда вы создаете структуру MATLAB®, чтобы инициализировать шину, которая содержит недвойные элементы сигнала, необходимо установить значения полей структуры. Метод, что вы принимаете решение установить значения, может влиять на эффективность и удобочитаемость сгенерированного кода. Смотрите Типы данных Управления Начальных Полей Структуры Условия.

Когда вы генерируете код для сигнала шины, который вводится к или выводится от модели, на которую ссылаются, существуют некоторые ограничения генерации кода. Смотрите Ограничения для Виртуальных Шин, Пересекающих Контуры Модели - ссылки.

Генерация кода для массива сигналов шин производит структуры с определенным форматом. Смотрите Генерацию кода для Массивов Шин.

Управляйте типами данных начальных полей структуры условия

Можно использовать структуру MATLAB, чтобы инициализировать элементы сигнала в шине. Смотрите Задают Начальные условия для Сигналов Шины.

Если элементы сигнала целевой шины используют типы числовых данных кроме double в целом:

  • Чтобы постараться не вручную совпадать с полевыми типами данных типам данных элементов сигнала, используйте нетипизированные выражения, чтобы установить значения полей. Как вы разрабатываете и быстрое прототипирование модель, используйте этот метод для удобства.

  • Чтобы сгенерировать более эффективный производственный код и избежать устройства хранения данных с плавающей точкой в коде, совпадайте с типами данных полей структуры с типами данных соответствующих элементов сигнала.

Метод, который вы выбираете, может влиять на эффективность и удобочитаемость сгенерированного кода.

Для примеров и большей информации о настраиваемых начальных условиях в сгенерированном коде, смотрите Управляющий сигнал и Инициализацию состояния в Сгенерированном коде (Simulink Coder).

Встроенные числовые значения полей структуры в сгенерированном коде

Если вы устанавливаете параметр конфигурации поведения параметра По умолчанию на Inlined, по умолчанию, значения полей начальной структуры условия появляются в сгенерированном коде как встроенные (ненастраиваемые) числа. Для этих структур используйте нетипизированные выражения, чтобы установить значения полей в Simulink. Значения полей не требуют типов данных, потому что структура не является настраиваемой в сгенерированном коде.

Однако, если вы позже устанавливаете поведение параметра По умолчанию на Tunable или применяете класс памяти к структуре при помощи объекта Simulink.Parameter, код может содержать устройство хранения данных с плавающей точкой и неэффективные явные преобразования типа и сдвиги разряда. Чтобы избежать этих проблем, рассмотрите соответствие с типами данных полей структуры с типами данных соответствующих элементов сигнала.

Сгенерируйте настраиваемую структуру, заданную непосредственно в блочном диалоговом окне

Предположим, что вы задаете начальную структуру условия непосредственно в блочном диалоговом окне, или в объекте Simulink.Signal, с выражением, таким как struct('signal1',5,'signal2',7.2) (вместо того, чтобы хранить структуру в переменной или объекте Simulink.Parameter). В этом случае, чтобы сгенерировать настраиваемую структуру в коде, вы устанавливаете поведение параметра По умолчанию на Tunable.

Используйте таблицу, чтобы решить, как управлять типами данных полей в этих начальных структурах условия.

ЦельМетод

Используйте невиртуальную шину.

Используйте нетипизированные выражения, чтобы установить значения полей.

Используйте виртуальную шину.

Постарайтесь не вручную совпадать с полевыми типами данных тем из элементов сигнала.

Используйте нетипизированные выражения, чтобы установить значения полей.

Сгенерируйте более эффективный код и избегайте устройства хранения данных с плавающей точкой.

Совпадайте с полевыми типами данных структуры типам элемента сигнала. Храните информацию типа данных в struct при помощи введенных выражений, чтобы установить значения полей.

Сгенерируйте настраиваемую структуру, сохраненную в переменном или объекте параметра

Предположим, что вы храните начальную структуру условия в переменной или объекте Simulink.Parameter, который вы создаете в базовом рабочем пространстве или словаре данных. Например, вы используете этот метод, чтобы совместно использовать структуру между несколькими блоками или сгенерировать настраиваемую структуру, когда вы устанавливаете поведение параметра По умолчанию на Inlined. В этом случае используйте таблицу, чтобы решить, как управлять типами данных полей в начальной структуре условия.

ЦельМетод

Постарайтесь не вручную совпадать с полевыми типами данных тем из элементов сигнала.

Используйте нетипизированные выражения, чтобы установить значения полей. В сгенерированном коде поля структуры используют тип данных double. Сгенерированный алгоритм использует явные преобразования типа, чтобы согласовать неверные типы данных.

Сгенерируйте более эффективный код и избегайте устройства хранения данных с плавающей точкой.

Совпадайте с полевыми типами данных структуры типам элемента сигнала. Храните информацию типа данных в полях структуры или используйте объект Simulink.Bus управлять типами данных полей и элементов сигнала одновременно.

Чтобы использовать Образцового Советника, чтобы проверить вашу модель на потенциально дорогие неверные типы данных, смотрите использование параметра структуры Проверки с сигналами шины.

Инициализируйте массив шин в модели, на которую ссылаются, при помощи массива структур. Передайте массив структур к модели, на которую ссылаются, как значение образцового аргумента в Блоке модели.

Совпадайте с полевыми типами данных структуры типам элемента сигнала. Храните информацию типа данных в полях структуры или используйте объект Simulink.Bus управлять типами данных полей структуры и элементов сигнала одновременно.

Если вы не передаете структуру модели, на которую ссылаются, в качестве образцового аргумента, следуете другим инструкциям для невиртуальных шин, чтобы решить, как управлять типами данных.

Используйте нетипизированные выражения, чтобы установить значения полей

Можно использовать нетипизированные выражения, чтобы установить значения полей структуры. Поля неявно используют тип данных 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 с этой иерархией элементов сигнала. Каждый элемент использует определенный тип данных.

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 Creator, чтобы создать сигнал шины myBusSig с этими элементами сигнала.

myBusSig
   signalElement1 (int32)
   signalElement2 (boolean)
   signalElement3 (single)

  1. Откройте редактор шины.

    buseditor

  2. Создайте объект шины, myBus, который соответствует сигналу шины.

  3. Создайте начальную структуру условия initStruct. Используемые нетипизированные выражения, чтобы установить значения полей. Чтобы улучшить удобочитаемость поля signalElement2, используйте булево значение false вместо 0.

    initStruct.signalElement1 = 3;
    initStruct.signalElement2 = false;
    initStruct.signalElement3 = 17.35;
    

  4. Чтобы представлять структуру, создайте объект Simulink.Parameter.

    initStruct = Simulink.Parameter(initStruct);
    

  5. Используйте объект параметра, чтобы задать начальное условие для сигнала шины. Например, в диалоговом окне блока Unit Delay, устанавливает Начальное условие к initStruct.

  6. Используйте объект шины задать тип данных объекта параметра.

    initStruct.DataType = 'Bus: myBus';

  7. Используйте объект шины задать тип данных сигнала шины. Например, в диалоговом окне блока Bus Creator, устанавливает тип Выходных данных на Bus: myBus.

Во время моделирования и в сгенерированном коде, поля структуры и элементы сигнала используют типы данных, которые вы задаете в объекте шины. Перед моделированием и генерацией кода, объект параметра бросает поля структуры к типам данных, которые вы задаете в объекте шины.

Для основной информации об объектах шины смотрите, Когда Использовать Объекты Шины.

Сконфигурируйте типы данных для существующей структуры

Чтобы удалить информацию о типе данных из всех полей структуры, можно записать пользовательскую функцию, которая заменяет значения полей на числа double. Используйте функцию, взятую в качестве примера, castStructToDbl в качестве шаблона.

Чтобы преобразовать структуру, которую использование удваивает до того, которое хранит информацию типа данных, можно создать ссылочную структуру с помощью функционального Simulink.Bus.createMATLABStruct. Можно затем записать пользовательскую функцию, чтобы бросить значения полей к типам данных в ссылочной структуре. Используйте функцию, взятую в качестве примера, castStructFromDbl в качестве шаблона.

Проверьте на несовпадающие типы данных с образцовым советником

Чтобы обнаружить, когда типы данных полей структуры не сопоставимы со связанными элементами сигнала шины в Редакторе Simulink, используют Анализ> Образцовый Советник> продуктом> использование параметра структуры Simulink Check с проверкой сигналов шины.

Ограничения для виртуальных шин, пересекающих контуры модели - ссылки

При использовании сигнал шины в качестве входного параметра к или вывода от модели, на которую ссылаются (Блок модели):

  • Вы не можете сконфигурировать стиль I/O arguments step method интерфейса класса C++ для модели, на которую ссылаются.

    Как обходное решение, используйте невиртуальную шину вместо этого. Также используйте стиль Default интерфейса класса C++.

  • Вы не можете сконфигурировать управление прототипом функции для модели, на которую ссылаются.

    Как обходное решение, используйте невиртуальную шину вместо этого.

Для получения дополнительной информации об использовании шин как входные параметры к или выходные параметры от модели, на которую ссылаются, смотрите, что Данные Шины Пересекают Контуры Модели - ссылки. Для получения дополнительной информации о виртуальности шины, смотрите Виртуальные и Невиртуальные Шины.

Генерация кода для массивов шин

Когда вы генерируете код для модели, которая включает массив шин, typedef, который представляет базовый тип шины, появляется в *_types.h hfile .

Генерация кода производит массив структур C, которые можно интегрировать с устаревшим кодом С, который использует массивы структур. По мере необходимости код для переменных шины (массивы) сгенерирован в следующих структурах:

  • Блокируйте IO

  • Состояния

  • Внешние входные параметры

  • Внешние выходные параметры

Вот упрощенный пример некоторого сгенерированного кода для массива шин.

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

Похожие темы

Была ли эта тема полезной?