С Embedded Coder®можно запустить циклы» (SIL) и «цикл» (PIL) при помощи:
Модель верхнего уровня.
Model блоки.
Блоки из подсистем.
В следующих разделах описываются функции моделирования и генерации кода, которые либо не поддерживаются, либо частично поддерживаются симуляциями SIL и PIL.
Для Model блоков SIL/PIL и SIL/PIL симуляций, можно настроить настраиваемые параметры рабочей области, но не настраиваемые параметры диалогового окна. Для получения информации о параметрах настройки смотрите Tune и Experiment with Параметры Блоков Values.
Для верхней части с настраиваемыми параметрами можно запустить симуляцию SIL/PIL, но вы не можете настроить параметры во время симуляции.
Программа не может определять, инициализировать или настроить следующие типы настраиваемых параметров рабочей области.
Описание параметра | Реакция программного обеспечения | ||
---|---|---|---|
Верхняя модель SIL/PIL | Моделируйте блок SIL/PIL | Блок SIL/PIL | |
Параметры с применяемым классом памяти "static" возможности или "const" ключевое слово. Для примера, Custom , Const , или ConstVolatile | Предупреждение | Предупреждение | Предупреждение |
Параметры с многословными типами данных с фиксированной точкой | Предупреждение | Ошибка | Предупреждение |
Параметры с типами данных, которые имеют различные размеры на хосте и цели | Предупреждение | Ошибка | Предупреждение |
Для кода класса C++, SIL/PIL можно настроить настраиваемые параметры рабочей области, когда Parameter visibility public
. Если Parameter visibility private
или protected
, настройка поддерживается только в том случае, если Parameter access Method
или Inlined method
.
Для верхних моделей SIL/PIL и блока SIL/PIL рассмотрим случай, когда применяются все следующие условия:
Code Generation > Interface > Code interface packaging Reusable function
.
Code Generation > Interface > Use dynamic memory allocation for model initialization не выбран.
Optimization > Default parameter behavior 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.
Для Model блока SIL/PIL, если вы задаете, Code interface быть Top model
можно настроить параметры во время выполнения симуляции. Если вы настраиваете параметры между последовательными запусками симуляции, программное обеспечение генерирует новый код для последующего запуска. Новый код использует ваши последние настройки как начальные значения параметров.
Для верхней модели или Model блока SIL/PIL, если вы меняете значение MATLAB® объект переменной или параметра (например Simulink.Parameter
), которые вы храните в рабочей области, Simulink® Coder™ регенерирует код С
Model SIL/PIL не поддерживает определение тестовых данных тестовой обвязки, динамическую инициализацию или настройку параметров рабочего пространства модели.
SIL/PIL поддерживает глобальные данные хранилища. Для компонентов, которые не экспорт функций модели, SIL/PIL блока симуляции, которые получают доступ к глобальным данным хранилищам, должны быть одинарной скоростью. В противном случае программное обеспечение создает ошибку.
SIL/PIL не поддерживает локальные хранилища данных.
Блок Model SIL/PIL не поддерживает локальные блоки Data Store Memory, которые имеют следующие настройки параметра:
Share across model instances - Выбран.
Storage class – Auto
или Model default
.
Вы не можете создать блоки SIL/PIL из моделей, которые используют блоки локальных Data Store Memory с выбранным параметром Share across model instances.
SIL/PIL не проверяет состояние ошибки Simulink Coder сгенерированного кода. Этот статус ошибки помечает исключительные условия во время выполнения сгенерированного кода.
Блоки в модели могут также задать статус ошибки Simulink Coder, например, пользовательские блоки, которые вы создаете. SIL/PIL не проверяет это состояние ошибки и сообщает об ошибках.
SIL/PIL требует файла описания интерфейса кода, который создается во время генерации кода для тестируемого компонента. Если файл описания интерфейса кода отсутствует, симуляция не может быть продолжено. Вы видите ошибку, сообщающую, что файл не существует. Если вы выберете неподдерживаемую опцию Classic call interface, может возникнуть эта ошибка. Поэтому не выбирайте опцию.
Если вы включите логгирование MAT-файлов, блоки SIL/PIL и SIL/PIL верхней модели поддерживают блоки To Workspace.
Model SIL/PIL не поддерживает блоки To Workspace.
Если вы соединяете Model блок SIL/PIL или SIL/PIL выходов к блоку Merge, то видите ошибку, поскольку память S-функции не переиспользуется.
SIL/PIL не поддерживает следующие блоки:
Scope блоки и все типы отображения во время выполнения. Для примера отображение значений портов и значений сигналов.
Остановите блоки. SIL/PIL игнорирует блок Stop Simulation и продолжает симулировать.
Вы не можете запустить SIL и PIL симуляции моделей, которые имеют многословие, сигналы с фиксированной точкой через контуры компонента.
SIL/PIL поддерживает типы данных с фиксированной точкой, которые шире 32 бит. Для примера:
64-разрядная long
и long long
64-разрядный тип данных таймера профилирования выполнения
int64
и uint64
в выполнении MATLAB Coder SIL.
Применяются следующие ограничения:
Для поддержки 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. Однако они поддерживают непрерывные шаги расчета в компоненте.
Блок Model SIL/PIL не поддерживает непрерывные шаги расчета.
Симуляции SIL/PIL блока Model поддерживают сигналы переменного размера, только если Diagnostics> Model Referencing> Propagate sizes of variable-size signals During execution
.
Симуляции блоков SIL/PIL и SIL/PIL верхней модели рассматривают сигналы переменного размера на контуре ввода-вывода компонента SIL/PIL как сигналы фиксированного размера, которые могут привести к ошибкам при распространении размеров сигнала. Чтобы избежать таких ошибок, используйте только сигналы фиксированного размера на контуре ввода-вывода компонента SIL/PIL.
Могут быть случаи, когда ошибка не возникает во время распространения размеров сигнала. В этих случаях программное обеспечение обрабатывает входные сигналы переменного размера как сигналы нулевого размера.
Блоки SIL/PIL не поддерживают логгирование сигналов. Для решения проблемы смотрите Журнал сигналов компонента.
Следующие внутренние ограничения по логгированию сигналов применяются к симуляциям SIL/PIL верхней модели и Model блока.
Ограничение | Применяется к | |
---|---|---|
Верхняя модель SIL/PIL | Моделируйте блок SIL/PIL | |
Блоки объединения сигналов, подающие сигналы, не поддерживаются для логгирования в нормальной симуляции, но регистрируются в режиме SIL/PIL. Зарегистрированные значения во время SIL/PIL совпадают с записанными значениями для выхода блока слияния. | Да | Нет |
Верхняя модель нормальной симуляции регистрирует данные с периодической скоростью, но верхняя модель SIL/PIL симуляции регистрирует данные с постоянной скоростью в этих обстоятельствах:
Чтобы избежать такого поведения и зарегистрировать с постоянной скоростью во всех режимах симуляции, установите Default parameter behavior равной | Да | Нет |
Функции не поддерживаются:
| Да | Да |
Сигналы переменного размера, вызова функции и действия не поддерживаются. Нормальная симуляция приводит к ошибке. Симуляция 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.
Через блок, который изменяет тип данных сигнала. Чтобы проверить согласованность типов данных в модели, отобразите Port Data Types.
Через блок, который изменяет размерности сигнала. Чтобы проверить согласованность типов данных в модели, отобразите Signal Dimensions.
PIL не поддерживает многословные типы данных, где порядок слов отличается от целевого порядка байтов. Сбой PIL симуляции, отображение неопределенного поведения.
PIL требует, чтобы вы конфигурировали правильные настройки Hardware Implementation для целевого окружения, включая упорядоченное расположение байтов для целевых объектов. Если вы не задаете правильное упорядоченное расположение байтов, PIL симуляция прекращает работать, отображая неопределенное поведение.
Если вы сопоставляете элементы шины Simulink с битовыми полями через импортированный файл заголовка, симуляция SIL или PIL приводит к ошибке сборки. Например, если у вашей модели есть Inport блок, соединенный с шиной, которая является Simulink.Bus
объект со следующими свойствами:
Name — myBus
Bus elements - массив 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 |
Data scope — Imported
Header file — 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
объект со следующими свойствами:
Base type — boolean
.
Mode — Built in
, boolean
.
Data scope — Imported
.
Header file — 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-разрядного двоичного приложения.
Если вы используете Данные Моделирования Inspector, чтобы сравнить результаты регистрации модели из нормальных и SIL или PIL симуляций, шаги расчета выходов могут отличаться. Можно по-прежнему использовать Данные моделирования Inspector, чтобы убедиться, что выходы совпадают численно.
SIL/PIL верхней модели поддерживает регистрацию сигналов, подключенных к входным и выходным портам корневого уровня. API на C не требуется. Логгирование корневого уровня имеет следующие ограничения:
Характеристики записанных данных, такие как тип данных, шаг расчета и размерностей, должны совпадать с характеристиками входных и выходных портов корневого уровня (а не с характеристиками подключенного сигнала).
В некоторых случаях могут быть различия в типе данных и размерностях между регистрируемым сигналом и корневым входным или выходным портом, с которым соединяется сигнал. Рассмотрим следующие примеры.
Если регистрируемый сигнал имеет матричные размерности [1x5]
но выходной порт, соединенный с сигналом, имеет векторные размерности (5
), тогда данные, записанные во время SIL или PIL симуляции, имеют векторные размерности (5
).
Если регистрируемый сигнал имеет скалярные размерности, но выходной порт, соединенный с сигналом, имеет матричные размерности [1x1]
, тогда данные, записанные во время SIL или PIL симуляции, имеют матричные размерности [1x1]
.
Сигналы, подключенные к дублированным входным портам, не регистрируются во время симуляции SIL/PIL. Предупреждение не выдается.
Во время нормальной симуляции сигналы, подключенные непосредственно к дублированным входным портам, регистрируются.
Селектор/ DataLoggingOverride< reservedrangesplaceholder0 логгирования
сигналов механизм переопределения не поддерживается.
Симуляции Normal и SIL/PIL регистрируют сигналы шины с именами, которые отличаются, когда применяются все следующие условия:
The 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 верхней модели, программное обеспечение регенерирует код, если он обнаруживает изменения в вашей модели. Программа обнаруживает изменения с помощью контрольной суммы для модели. Программное обеспечение не обнаруживает изменений, которые вы вносите в:
The HeaderFile
свойство Simulink.AliasType
объект
Устаревшие S-функции
Если вы вносите эти изменения, создайте (Ctrl-B) свою модель снова, прежде чем начинать следующую PIL симуляцию.
Применяются следующие ограничения:
Поскольку аргументы модели не применяются к модели верхней части, когда Code interface параметров блоков установлено на Top model
программное обеспечение не поддерживает Model arguments параметров блоков.
Условное выполнение не применяется к верхней модели. Если блок Model настроен на выполнение условно, и Code interface параметров блоков установлено на 'Top model'
программное обеспечение создает ошибку при запуске SIL или PIL симуляции.
Для выборочных независимых от времени моделей необходимо задать Configuration Parameters > Solver > Periodic sample time constraint Ensure sample time independent
.
Вы видите ошибку, если:
Вы помещаете свой Model блок в SIL или PIL режиме симуляции в условно выполненную подсистему, и ссылочная модель является многоразовой (то есть имеет несколько шагов расчета). Односкоростные ссылочные модели (с одним шагом расчета) не затрагиваются.
Ваш Model блок в режиме SIL или PIL симуляции имеет блоки, которые зависят от абсолютного времени и выполняются по условию.
Если параметры блоков Code interface Top model
, Model блок SIL/PIL поддерживает выходы с постоянным шагом расчета.
SIL/PIL симуляции блоков Model не поддерживают неинлинфицированные S-функции.
Рассмотрим верхнюю часть с двумя или несколькими блоками Model, которые ссылаются на модели, использующие одно и то же целевое строение связи. Если блоки Model находятся одновременно в PIL-режиме, вы не можете запустить симуляцию верхней модели. Возникает ошибка.
Рассмотрим верхнюю часть, которая содержит два образцов блока Model, которые ссылаются на одну и ту же модель. Если один образец находится в режиме SIL, а другом образце - в режиме PIL, вы не можете запустить симуляцию модели верхней части. Возникает ошибка.
Рабочий процесс, описанный в Test Atomic Subsystem Generated Code, не поддерживает:
Эти типы подсистем:
Виртуальный
Вызов функции
Stateflow
Для каждого
Действие
Инициализация функции
Функция сброса
Оконечная функция
Функция Simulink
The 'Compact'
опция для ERTFilePackagingFormat
если PreserveStaticInFcnDecl
установлено в 'on'
.
AUTOSAR сгенерированного кода.
Подсистемы, которые генерируют встроенный код. Подсистема параметров блоков RTWSystemCode
должен быть 'Nonreusable function'
или 'Reusable function'
.
Подсистемы, которые содержат:
Ссылка на модели.
Simulink Function блоки.
Data Store Memory, Data Store Read и Data Store Write блоки.
Тестирование LDRA® и инструменты BullseyeCoverage для анализа покрытия кода.
Сигнал и состояние логгирования данных.
Виртуальные шины в интерфейсе подсистемы.
Результаты от модели и SIL или PIL симуляций могут отличаться численно, если:
Подсистема использует не конечные числа, например NaN
и Inf
.
Подсистема и родительская модель имеют несколько частот дискретизации и переходов скорости.
SIL/PIL блока симуляции не поддерживают распространение вариантных условий между контурами компонентов.
Блок PIL поддерживает сигналы мультиплексора, за исключением смешанных сигналов мультиплексора типа данных, которые расширяются на отдельные сигналы во время сборки подсистемы правой кнопкой мыши.
Симуляции блоков не поддерживают генерацию результатов покрытия кода. Поддержка блоков для покрытия кода зависит от вашего целевого строения подключения и поддержки сторонних продуктов.
Когда вы создаете блок SIL/PIL из подсистемы, которая имеет блоки с унаследованными шагами расчета, сгенерированный код и оболочка SIL/PIL получают шаг расчета исходной родительской модели. Если вы используете блок SIL/PIL в контексте, который не допускает явных шагов расчета, то, пример, в пределах триггируемой подсистемы, вы видите ошибку.
Попробуйте один из следующих обходных путей:
Прежде чем Вы создадите блок SIL/PIL, в родительской модели, установите Configuration Parameters> Solver> Periodic sample time constraint к Ensure sample time independent
.
Используя подсистему, создайте Model блок, который не зависит от шага расчета. С помощью этого блока запустите Model блок SIL/PIL симуляции.