С Embedded Coder® можно запустить программное обеспечение в цикле (SIL) и процессоре в цикле (PIL) симуляции при помощи:
Топ-модель.
Блоки Model.
Блоки из подсистем.
Следующие разделы описывают моделирование и функции генерации кода, которые или не поддержаны или частично поддержаны SIL и PIL симуляциями.
Для симуляций блока SIL/PIL и SIL/PIL блока Model можно настроить настраиваемые параметры рабочей области, но не настраиваемые параметры диалогового окна. Для получения информации о настраивающихся параметрах смотрите Мелодию и Эксперимент со Значениями Параметров блоков.
Для топ-модели с настраиваемыми параметрами можно запустить симуляцию SIL/PIL, но вы не можете настроить параметры во время симуляции.
Программное обеспечение не может задать, инициализировать или настроить следующие типы настраиваемых параметров рабочей области.
Описание параметра | Ответ программного обеспечения | ||
---|---|---|---|
Топ-модель SIL/PIL | Блок Model 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 не поддерживает локальные хранилища данных.
SIL/PIL блока Model не поддерживает локальные блоки 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 требует файла описания интерфейса кода, который создается во время генерации кода для компонента под тестом. Если файл описания интерфейса кода отсутствует, симуляция SIL/PIL не может продолжить. Вы видите сообщение об ошибке, что файл не существует. Если вы выбираете неподдерживаемую опцию Classic call interface, эта ошибка может произойти. Поэтому не выбирайте опцию.
Если вы включаете логгирование MAT-файла, топ-модель, SIL/PIL и блоки SIL/PIL поддерживают блоки To Workspace.
Блок Model SIL/PIL не поддерживает блоки To Workspace.
Если вы соединяете блок SIL/PIL или SIL/PIL блока Model выходные параметры с блоком Merge, вы видите ошибку, потому что память S-функции не является допускающей повторное использование.
SIL/PIL не поддерживает следующие блоки:
Блоки Scope и все типы отображения во время выполнения. Например, отображение значений порта и значений сигналов.
Остановите блоки. SIL/PIL игнорирует блок Stop Simulation и продолжает симулировать.
Вы не можете запустить SIL и PIL симуляции моделей, которые имеют сигналы фиксированной точки многословные через контуры компонента.
SIL/PIL поддерживает типы данных с фиксированной точкой, которые более широки, чем 32 бита. Например:
64-битный long
и long long
64-битное выполнение профильный тип данных таймера
int64
и uint64
в MATLAB Coder выполнение СИЛА.
Следующие ограничения применяются:
Для 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 не поддерживают логгирование сигнала. Для обходного решения смотрите Логарифмические Сигналы Компонента.
Следующие внутренние ограничения логгирования сигнала применяются к топ-модели и блоку Model симуляции SIL/PIL.
Ограничение | Применяется | |
---|---|---|
Топ-модель SIL/PIL | Блок Model 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 использует определение раздела memory в пользовательском классе памяти. Если пользовательский класс памяти задает переменную как const
и не сопоставлен с const
раздел memory, целевое приложение может не скомпилировать, или производит ошибку во время симуляции. В этом случае сопоставьте пользовательский класс памяти с разделом memory для который Is const
задан, например, MemConst
. В качестве альтернативы, если SupportSILPIL
специфичный для экземпляра параметр в классе пользовательских атрибутов, для связанного сигнала или параметра, установите 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
объект с этими свойствами:
Имя myBus
Bus elements — Массив Simulink.BusElement
объекты с этими свойствами.
Имя | Тип данных | Сложность | Размерности |
---|---|---|---|
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
Заголовочный файл 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
.
Режим Built in
, boolean
.
Data scope — 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 поддерживает логгирование сигнала для сигналов, соединенных с импортом корневого уровня и выходными портами. API C не требуется. Логгирование корневого уровня имеет нижеследующие ограничения:
Характеристики записанных данных, таких как тип данных, шаг расчета и размерности должны совпадать с характеристиками импорта корневого уровня и выходных портов (а не характеристиками связанного сигнала).
В некоторых случаях могут быть различия в типе данных и размерностях между регистрируемым сигналом и корневым импортом или выходным портом, с которым соединяется сигнал. Рассмотрите следующие примеры.
Если регистрируемый сигнал имеет матричные размерности [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 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 поддерживает выходные параметры с постоянным шагом расчета.
Блок Model симуляции SIL/PIL не поддерживает невстроенные S-функции.
Рассмотрите топ-модель с двумя или больше блоками Model, что образцы модели, которые используют ту же целевую настройку возможности соединения. Если блоки Model находятся в режиме PIL одновременно, вы не можете запустить симуляцию топ-модели. Ошибка происходит.
Рассмотрите топ-модель, которая содержит два экземпляра блока Model, которые ссылаются на ту же модель. Если один экземпляр находится в режиме SIL, и другой экземпляр находится в режиме PIL, вы не можете запустить симуляцию топ-модели. Ошибка происходит.
Рабочий процесс, описанный в Тестовом Сгенерированном коде Атомарной подсистемы, не поддерживает:
Эти типы подсистемы:
Виртуальный
Вызов функции
Stateflow
Для каждого
Действие
Инициализируйте функцию
Функция сброса
Оконечная функция
Функция Simulink
'Compact'
опция для ERTFilePackagingFormat
если PreserveStaticInFcnDecl
установлен в 'on'
.
Сгенерированный код AUTOSAR.
Подсистемы, которые генерируют встроенный код. Параметры блоков подсистемы RTWSystemCode
должен быть 'Nonreusable function'
или 'Reusable function'
.
Подсистемы, которые содержат:
Модели, на которые ссылаются.
Блоки Simulink Function.
Data Store Memory, Data Store Read, and Data Store Write блоки.
LDRA Testbed® и инструменты BullseyeCoverage для анализа покрытия кода.
Регистрация данных состояния и сигнала.
Виртуальные шины в интерфейсе подсистемы.
Результаты модели и SIL или PIL симуляций могут отличаться численно если:
Подсистема использует неличные числа, например, NaN
и Inf
.
Подсистема и родительская модель имеют несколько частот дискретизации и переходов уровня.
Симуляции блока SIL/PIL не поддерживают распространение различных условий через контуры компонента.
Блок PIL поддерживает сигналы мультиплексора, кроме смешанных сигналов мультиплексора типа данных, которые расширяются в отдельные сигналы во время сборки подсистемы щелчка правой кнопкой.
Симуляции блока SIL не поддерживают генерацию результатов покрытия кода. Поддержка блока PIL покрытия кода зависит от вашей целевой настройки возможности соединения и поддержки стороннего продукта.
Когда вы создаете блок SIL/PIL из подсистемы, которая имеет блоки с наследованными шагами расчета, сгенерированный код и обертка SIL/PIL получают шаг расчета исходной родительской модели. Если вы используете блок SIL/PIL в контексте, который не позволяет явные шаги расчета, например, в триггируемой подсистеме, вы видите ошибку.
Попробуйте одно из этих обходных решений:
Прежде чем вы создадите блок SIL/PIL, в родительской модели, установите Configuration Parameters> Solver> Periodic sample time constraint к Ensure sample time independent
.
Используя подсистему, создайте блок Model, который независим от шага расчета. С этим блоком запустите блок Model симуляции SIL/PIL.