Embedded Coder ® позволяет выполнять моделирование ПО в цикле (SIL) и процессора в цикле (PIL) с помощью:
Модель сверху.
Блоки модели.
Блоки от подсистем.
В следующих разделах описаны функции моделирования и генерации кода, которые либо не поддерживаются, либо частично поддерживаются моделированием SIL и PIL.
Для моделирования блоков SIL/PIL и SIL/PIL можно настроить настраиваемые параметры рабочего пространства, но не настраиваемые параметры диалогового окна. Сведения о настройке параметров см. в разделе Настройка и эксперимент со значениями параметров блока.
Для модели верхнего уровня с настраиваемыми параметрами можно выполнить моделирование SIL/PIL, но невозможно настроить параметры во время моделирования.
Программа не может определять, инициализировать или настраивать следующие типы настраиваемых параметров рабочей области.
| Описание параметра | Ответ программного обеспечения | ||
|---|---|---|---|
| Верхняя модель SIL/PIL | Блок модели SIL/PIL | Блок SIL/PIL | |
Параметры с применяемым классом хранения "static" область действия или "const" ключевое слово. Например, Custom, Const, или ConstVolatile | Предупреждение | Предупреждение | Предупреждение |
| Параметры с многословными типами данных с фиксированной точкой | Предупреждение | Ошибка | Предупреждение |
| Параметры с типами данных, имеющими разные размеры на хосте и цели | Предупреждение | Ошибка | Предупреждение |
Для кода класса C++, SIL/PIL можно настроить настраиваемые параметры рабочего пространства, если видимость параметра равна public. Если видимость параметра равна private или protected, настройка поддерживается только в том случае, если параметр access имеет значение Method или Inlined method.
Для верхней модели SIL/PIL и блока SIL/PIL рассмотрим случай, когда применяются все следующие условия:
Создание кода > Интерфейс > Упаковка интерфейса кода Reusable function.
Создание кода > Интерфейс > Не выбрано использование динамического выделения памяти для инициализации модели.
Оптимизация > Поведение параметров по умолчанию: Tunable.
В редакторе сопоставления кодов для модели класс хранения по умолчанию для категории Глобальные параметры (Global parameters) или Локальные параметры (Local parameters) имеет значение Default, и модель содержит соответствующие параметры, которые используют классы хранения Auto или Model default.
Если компонент SIL/PIL не может динамически инициализировать настраиваемые параметры в rtP структура параметров модели, появится следующее сообщение об ошибке:
Parameter Dialog:InitialOutput in 'rtwdemo_sil_topmodel/CounterTypeA/count' is part of the imported "rtP" structure in the generated code but cannot be initialized by SIL or PIL. To avoid this error, make sure the parameter corresponds to a tunable workspace variable. Alternatively, set "Configuration Parameters > Code Generation > Interface > Code interface packaging" to ''Nonreusable function'', or search for ''Use dynamic memory allocation for model initialization'' in the Configuration Parameters dialog box and select the checkbox.
Для блока модели SIL/PIL, если указан интерфейс кода Top model, можно настраивать параметры во время выполнения моделирования. При настройке параметров между последовательными запусками моделирования программа генерирует новый код для последующего запуска. Новый код использует последние настройки в качестве начальных значений параметров.
Для верхней модели или блока модели SIL/PIL при изменении значения переменной MATLAB ® или объекта параметра (например, Simulink.Parameter), хранящийся в рабочей области, Simulink ® Coder™ регенерирует код C.
Блок модели SIL/PIL не поддерживает определение данных тестового кабеля, динамическую инициализацию или настройку параметров рабочего пространства модели.
SIL/PIL поддерживает глобальные хранилища данных. Для компонентов, которые не являются моделями функций экспорта, моделирование блоков SIL/PIL с доступом к глобальным хранилищам данных должно быть односкоростным. В противном случае программа выдает ошибку.
SIL/PIL не поддерживает локальные хранилища данных.
Блок модели SIL/PIL не поддерживает локальные блоки памяти хранилища данных, имеющие следующие настройки параметров:
Общий доступ к экземплярам модели - выбрано.
Класс хранения - Auto или Model default.
Нельзя создавать блоки SIL/PIL из моделей, которые используют локальные блоки памяти хранилища данных с выбранным параметром Общий доступ для экземпляров модели.
SIL/PIL не проверяет состояние ошибки Simulink Coder в тестируемом коде. Это состояние ошибки помечает исключительные условия во время выполнения сгенерированного кода.
Блоки в модели также могут задавать статус ошибки Simulink Coder, например создаваемые пользовательские блоки. SIL/PIL не проверяет этот статус ошибки и не сообщает об ошибках.
Для SIL/PIL требуется файл описания интерфейса кода, который создается во время генерации кода для тестируемого компонента. Если файл описания интерфейса кода отсутствует, моделирование SIL/PIL не может быть продолжено. Появляется сообщение об ошибке, согласно которому файл не существует. Эта ошибка может возникнуть при выборе неподдерживаемого параметра Classic call interface. Поэтому не выбирайте опцию.
Если включено ведение журнала MAT-файлов, блоки SIL/PIL и SIL/PIL верхней модели поддерживают блоки К рабочей области.
Блок модели SIL/PIL не поддерживает блоки To Workspace.
При подключении выходов блоков SIL/PIL или SIL/PIL блока модели к блоку слияния появляется ошибка, так как память S-функций не используется повторно.
SIL/PIL не поддерживает следующие блоки:
Блоки области и все типы отображения времени выполнения. Например, отображение значений портов и значений сигналов.
Стоп-блоки. SIL/PIL игнорирует блок моделирования остановки и продолжает моделирование.
Нельзя выполнять моделирование SIL и PIL моделей, которые имеют многословные сигналы с фиксированной точкой через границы компонентов.
SIL/PIL поддерживает типы данных с фиксированной точкой, размер которых превышает 32 бита. Например:
64-разрядная версия long и long long
Тип данных таймера профилирования 64-разрядного выполнения
int64 и uint64 при выполнении SIL кодера MATLAB.
Применяются следующие ограничения:
Для поддержки 64-разрядных типов данных тип данных должен быть представлен как long или long long на хосте MATLAB и цели. В противном случае программное обеспечение использует многословный подход с фиксированной точкой, который SIL/PIL не поддерживает.
Программное обеспечение не поддерживает 40-разрядную версию long тип данных C6000™ цели TI.
С помощью панели Configuration > Hardware Implementation можно включить поддержку 64-разрядной версии long long тип данных. Для типов данных с шириной от 33 до 40 бит (включительно) программное обеспечение реализует типы данных с использованием 40-разрядного long тип данных, который SIL/PIL не поддерживает.
Программное обеспечение не поддерживает имена типов данных замены, определенные для встроенного типа данных boolean если эти имена соответствуют int или uint встроенный тип данных.
Верхняя модель SIL/PIL и блок SIL/PIL не поддерживают непрерывное время выборки на границе компонента SIL или PIL. Однако они поддерживают непрерывное время выборки внутри компонента.
Блок модели SIL/PIL не поддерживает непрерывное время выборки.
Моделирование SIL/PIL блока модели поддерживает сигналы переменного размера, только если Диагностика > Привязка модели > Распространить размеры сигналов переменного размера During execution.
Моделирование блоков SIL/PIL и SIL/PIL верхней модели рассматривает сигналы переменного размера на границе ввода/вывода компонента SIL/PIL как сигналы фиксированного размера, что может привести к ошибкам при распространении размеров сигнала. Чтобы избежать таких ошибок, используйте только сигналы фиксированного размера на границе ввода-вывода компонента SIL/PIL.
Могут быть случаи, когда во время распространения размеров сигнала не возникает ошибок. В этих случаях программное обеспечение рассматривает входные сигналы переменного размера как сигналы нулевого размера.
Блоки SIL/PIL не поддерживают регистрацию сигналов. Обходной путь см. в разделе Регистрация сигналов компонента.
Следующие внутренние ограничения регистрации сигналов применяются к моделированию SIL/PIL верхней модели и блока модели.
| Ограничение | Применяется к | |
|---|---|---|
| Верхняя модель SIL/PIL | Блок модели SIL/PIL | |
| Сигналы, подающие блоки объединения, не поддерживаются для регистрации в обычном моделировании, но регистрируются в режиме SIL/PIL. Записанные значения во время SIL/PIL совпадают с записанными значениями для вывода блока объединения. | Да | Нет |
Нормальное моделирование модели верхнего уровня регистрирует данные с периодической скоростью, а моделирование SIL/PIL модели верхнего уровня регистрирует данные с постоянной скоростью при следующих обстоятельствах:
Чтобы избежать такого поведения и записывать данные с постоянной скоростью во всех режимах моделирования, установите для параметра По умолчанию значение | Да | Нет |
Функции не поддерживаются:
| Да | Да |
Сигналы переменного размера, вызова функции и действия не поддерживаются. Обычное моделирование приводит к ошибке. Моделирование SIL/PIL выдает предупреждение. | Да | Нет |
Сигналы порта состояния не поддерживаются. Обычное моделирование приводит к ошибке. Моделирование SIL/PIL не выдает предупреждения. | Да | Нет |
OtherМоделирование SIL/PIL поддерживает пользовательский класс хранения, где Type имеет значение Other. Применяются следующие ограничения:
Если фрагменты кода, возвращенные TLC-файлом, связанным с пользовательским классом хранения, являются неполными, приложение SIL/PIL может не скомпилировать данные или получить неверные результаты.
Пользовательские классы хранения с Imported сфера охвата и Pointer доступ поддерживается, но для инициализации указателя необходимо указать код. Например, можно изменить ответ на DataAccess(record, "define", "", "") для предоставления определения реализации хранилища и инициализации указателя на адрес переменной реализации.
Определение того, является ли переменная const поэтому процесс сборки для приложения SIL/PIL не может быть настроен, он использует определение раздела памяти в пользовательском классе хранения. Если пользовательский класс хранения определяет переменную как const и не связан с const , целевое приложение может не скомпилироваться или вызвать ошибку во время моделирования. В этом случае свяжите пользовательский класс хранения с разделом памяти, для которого Is const указывается, например, MemConst. Или, если SupportSILPIL является специфичным для экземпляра параметром в классе пользовательских атрибутов, для связанного сигнала или параметра, set CoderInfo.CustomAttributes.SupportSILPIL кому false.
При использовании хранилища данных, сигнала или реализации параметров, которые не поддерживаются SIL/PIL, можно увидеть следующие ошибки:
The following data interfaces have implementations that are not supported by SIL or PIL.
data interfaces могут быть глобальными хранилищами данных, inports, outports, или parameters.Выходной порт модели оптимизирован посредством оптимизации виртуального выходного порта. См. раздел Оптимизация виртуальных выходных портов. Ошибка возникает из-за того, что свойства (например, тип данных, размеры) сигнала или сигналов, поступающих в виртуальный корневой выходной порт, были изменены путем маршрутизации сигналов одним из следующих способов:
Через блок Mux.
Через блок, изменяющий тип данных сигнала. Чтобы проверить непротиворечивость типов данных в модели, просмотрите Типы данных порта.
Через блок, изменяющий размеры сигнала. Чтобы проверить непротиворечивость типов данных в модели, отобразите Размеры сигнала (Signal Dimensions).
PIL не поддерживает многословные типы данных, где порядок слов отличается от целевого порядка байтов. Не удается выполнить моделирование PIL, отображая неопределенное поведение.
PIL требует настройки правильных параметров аппаратной реализации для целевой среды, включая порядок байтов для целевых объектов. Если не указать правильный порядок байтов, моделирование PIL завершится неудачей, отображая неопределенное поведение.
Если сопоставить элементы шины Simulink битовым полям через импортированный файл заголовка, моделирование SIL или PIL приведет к ошибке построения. Например, если модель имеет блок Inport, подключенный к шине, которая является Simulink.Bus объект со следующими свойствами:
Имя myBus
Элементы шины - массив Simulink.BusElement объекты с этими свойствами.
| Имя | DataType | Сложность | Размеры |
|---|---|---|---|
bitField0
| boolean | real
| 1
|
bitField1
| boolean
| real
| 1 |
bitField2
| boolean | real
| 1 |
bitField3
| boolean | real
| 1 |
bitField4
| boolean | real | 1
|
bitField5 | boolean | real | 1 |
Объем данных - Imported
Файл заголовка - busSpecification.h. Этот файл содержит myBus, которая определяет типы данных битового поля C для элементов шины.
typedef struct myBus
{
unsigned int bitField0 : 1;
unsigned int bitField1 : 1;
unsigned int bitField2 : 1;
unsigned int bitField3 : 1;
unsigned int bitField4 : 1;
unsigned int bitField5 : 1;
} myBus;
Когда тип данных Simulink и соответствующий целевой тип аппаратных данных различаются по размеру, моделирование SIL или PIL приводит к ошибке. Это несоответствие размеров может произойти при сопоставлении типа данных Simulink с типом данных целевого оборудования с помощью определений в импортированном файле заголовка. Например, при создании псевдонима типа данных T_BOOL, который является Simulink.AliasType объект со следующими свойствами:
Базовый тип - boolean.
Режим - Built in, boolean.
Объем данных - Imported.
Файл заголовка - myDefinitions.h. Этот файл определяет T_BOOL в качестве перечисляемого типа данных:
typedef enum _BOOL_TYPE
{
FALSE = 0,
TRUE = 1
} BOOL_TYPE;
typedef BOOL_TYPE T_BOOL;T_BOOL, который может отличаться от размера типа данных Simulink, boolean.
Специфичный для цели пользовательский код, который не переносится для выполнения на компьютере разработчика, может привести к сбоям компиляции или выполнения во время моделирования SIL.
Например, SIL не поддерживает использование пользовательского кода, который явно передает указатели на переменные целочисленного типа, которые меньше длины переменной указателя на компьютере разработчика. Рассмотрите возможность использования одной из следующих альтернатив:
Выполните моделирование PIL.
При наличии пользовательского кода, указывающего на 32-разрядный целочисленный тип, для компьютера разработчика настройте конфигурацию подключения PIL-цели, использующую цепочку инструментов, настроенную для построения 32-разрядного двоичного приложения.
При использовании инспектора данных моделирования для сравнения зарегистрированных выходных данных модели из нормального моделирования и моделирования SIL или PIL время выборки выходных данных может отличаться. Инспектор расчетных данных по-прежнему можно использовать для проверки численного соответствия выходных данных.
Верхняя модель SIL/PIL поддерживает регистрацию сигналов, подключенных к входам и выходам корневого уровня. C API не требуется. Ведение журнала на корневом уровне имеет следующие ограничения:
Характеристики зарегистрированных данных, такие как тип данных, время выборки и измерения, должны соответствовать характеристикам входов и выходов корневого уровня (а не характеристикам подключенного сигнала).
В некоторых случаях могут быть различия в типе данных и размерах между регистрируемым сигналом и корневым входным или выходным портом, к которому подключен сигнал. Рассмотрим следующие примеры.
Если регистрируемый сигнал имеет размеры матрицы [1x5] но выход, подключенный к сигналу, имеет векторные размеры (5), то данные, зарегистрированные во время моделирования SIL или PIL, имеют векторные размеры (5).
Если регистрируемый сигнал имеет скалярные размеры, но выходной порт, подключенный к сигналу, имеет матричные размеры [1x1], то данные, зарегистрированные во время моделирования SIL или PIL, имеют размеры матрицы [1x1].
Сигналы, подключенные к дублированным входам, не регистрируются во время моделирования SIL/PIL. Предупреждение не выдается.
Во время нормального моделирования регистрируются сигналы, подключенные непосредственно к дублированным входам.
Селектор регистрации сигналов/ DataLoggingOverride механизм переопределения не поддерживается.
Нормальное моделирование и моделирование SIL/PIL регистрируют сигналы шины с различными именами при соблюдении всех следующих условий:
SaveOutput или SignalLogging параметр конфигурации - on.
Имена элементов в сигнале шины отличаются от соответствующих имен в объекте шины. Например, когда InheritFromInputs параметр для блока Bus Creator имеет значение 'on'.
Программа вставляет суффикс _wrapper для регистрации выходных данных, если формат сохранения Structure или Structure with time и вы запускаете sim без указания формата одиночного вывода. Программное обеспечение добавляет _wrapper к имени блока для сигналов в yout. Если формат сохранения - Array, программа не добавляет суффикс. Например:
>> yout.signals
ans =
values: [11x1 double]
dimensions: 1
label: 'SignalLogging'
blockName: 'sillogging_wrapper/OutputLogging'
Чтобы избежать такого поведения, выполните моделирование командной строки с помощью sim команда, задающая формат одиночного вывода. См. раздел Программное моделирование.
SIL/PIL не поддерживает обратные вызовы (модель или блок) StartFcn и StopFcn.
Примечание
SIL/PIL верхней модели поддерживает обратный вызов InitFcn.
При запуске моделирования SIL/PIL верхней модели программа восстанавливает код, если обнаруживает изменения в модели. Программа обнаруживает изменения, используя контрольную сумму для модели. Программа не обнаруживает изменений, вносимых в:
HeaderFile свойство Simulink.AliasType объект
Унаследованные S-функции
При внесении этих изменений создайте (Ctrl-B) модель еще раз перед началом следующего моделирования PIL.
Применяются следующие ограничения:
Поскольку аргументы модели не применяются к модели верхнего уровня, если параметр блока интерфейса Code имеет значение Top model, программное обеспечение не поддерживает параметр блока Аргументы модели.
Условное выполнение не применяется к модели верхнего уровня. Если блок Model настроен на условное выполнение и параметр блока Code interface имеет значение 'Top model', программа создает ошибку при запуске моделирования SIL или PIL.
Для моделей, не зависящих от времени выборки, необходимо задать для параметров конфигурации > Решатель > Периодическое ограничение времени выборки значение Ensure sample time independent.
Вы видите ошибку, если:
Блок модели помещается в режиме моделирования SIL или PIL в условно выполненную подсистему, а ссылочная модель является многоскоростной (т. е. имеет несколько выборок). Односкоростные ссылочные модели (только с одним временем выборки) не затрагиваются.
Блок модели в режиме моделирования SIL или PIL имеет блоки, зависящие от абсолютного времени и выполняемые условно.
Если параметр блока Code interface имеет значение Top model, блок модели SIL/PIL поддерживает выходы с постоянным временем выборки.
Моделирование SIL/PIL в блоке модели не поддерживает неинлинированные S-функции.
Рассмотрим верхнюю модель с двумя или более блоками модели, которые ссылаются на модели, использующие одну и ту же целевую конфигурацию подключения. Если блоки модели находятся в режиме PIL одновременно, моделирование верхней модели невозможно. Возникает ошибка.
Рассмотрим модель верхнего уровня, содержащую два экземпляра блока модели, которые ссылаются на одну и ту же модель. Если один экземпляр находится в режиме SIL, а другой - в режиме PIL, нельзя выполнить моделирование модели верхнего уровня. Возникает ошибка.
Рабочий процесс, описанный в документе «Код, сгенерированный для тестовой атомной подсистемы», не поддерживает:
Эти типы подсистем:
Виртуальный
Вызов функции
Stateflow
Для каждого
Действие
Инициализация функции
Функция сброса
Завершить функцию
Функция симулятора
'Compact' опция для ERTFilePackagingFormat если PreserveStaticInFcnDecl имеет значение 'on'.
Сгенерированный код AUTOSAR.
Подсистемы, генерирующие встроенный код. Параметр блока подсистемы RTWSystemCode должно быть 'Nonreusable function' или 'Reusable function'.
Подсистемы, содержащие:
Ссылочные модели.
Функциональные блоки Simulink.
Блоки памяти хранилища данных, чтения хранилища данных и записи хранилища данных.
Средства LDRA Testbed ® и BullseyCoverage для анализа покрытия кода.
Регистрация сигналов и данных состояния.
Виртуальные шины на интерфейсе подсистемы.
Результаты моделирования модели и SIL или PIL могут отличаться численно, если:
Подсистема использует неграничные числа, например: NaN и Inf.
Подсистема и родительская модель имеют несколько скоростей выборки и переходов скоростей.
Моделирование блоков SIL/PIL не поддерживает распространение вариационных условий через границы компонентов.
Блок PIL поддерживает мультиплексорные сигналы, за исключением мультиплексорных сигналов смешанного типа, которые расширяются в отдельные сигналы во время построения подсистемы с щелчком правой кнопкой мыши.
Моделирование блоков SIL не поддерживает генерацию результатов покрытия кода. Поддержка блоков PIL для покрытия кода зависит от конфигурации целевого подключения и поддержки сторонних продуктов.
При создании блока SIL/PIL из подсистемы, содержащей блоки с наследуемыми временами выборки, сгенерированный код и оболочка SIL/PIL получают время выборки исходной родительской модели. При использовании блока SIL/PIL в контексте, который не допускает явного времени выборки, например, в пределах запускаемой подсистемы, появляется ошибка.
Попробуйте один из следующих обходных путей:
Перед созданием блока SIL/PIL в родительской модели задайте для параметра «Параметры конфигурации» > «Решатель» > «Временное ограничение периодической выборки» значение Ensure sample time independent.
С помощью подсистемы создайте блок модели, который не зависит от времени выборки. С помощью этого блока выполните моделирование SIL/PIL блока модели.