SIL и ограничения PIL

О SIL и ограничениях PIL

С Embedded Coder®, можно запустить программное обеспечение в цикле (SIL) и процессор в цикле (PIL) симуляции при помощи:

  • Топ-модель.

  • Блоки Model.

  • Блоки из подсистем.

Следующие разделы описывают моделирование и функции генерации кода, которые или не поддержаны или частично поддержаны SIL симуляциями и PIL симуляциями.

Общий SIL и ограничения PIL

Настраиваемые параметры и 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.
Если вы выбираете Code Generation> Interface> Use dynamic memory allocation for model initialization, это ограничение не применяется.

Для блока 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 classAuto или Model default.

Вы не можете создать блоки SIL/PIL из моделей, которые используют локальные блоки Data Store Memory выбранным параметром Share across model instances.

SIL/PIL Не Проверяет Ошибочное Состояние Simulink Coder

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 или SIL/PIL блока Model выходные параметры с блоком Merge, вы видите ошибку, потому что память S-функции не является допускающей повторное использование.

Неподдерживаемые блоки

SIL/PIL не поддерживает следующие блоки:

  • Блоки Scope и все типы отображения во время выполнения. Например, отображение значений порта и значений сигналов.

  • Остановите блоки. SIL/PIL игнорирует блок Stop Simulation и продолжает симулировать.

Ввод-вывод фиксированной точки многословный

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

Типы данных с фиксированной точкой шире, чем 32 бита

SIL/PIL поддерживает типы данных с фиксированной точкой, которые более широки, чем 32 бита. Например:

  • 64-битный long и long long

  • 64-битное выполнение профильный тип данных таймера

  • int64 и uint64 в выполнении SIL 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 не поддерживают логгирование сигнала. Для обходного решения смотрите Логарифмические Сигналы Компонента.

Следующие внутренние ограничения логгирования сигнала применяются к топ-модели и SIL/PIL симуляциям блока Model.

ОграничениеПрименяется
Топ-модель SIL/PILБлок Model SIL/PIL
Сигналы, питающие блоки слияния, не поддерживаются для входа в систему нормальной симуляции, но зарегистрированы режим SIL/PIL. Регистрируемые значения во время SIL/PIL совпадают с регистрируемыми значениями для выхода блока слияния.ДаНет

Топ-модель нормальные данные логов симуляции на периодическом уровне, но данные логов SIL/PIL симуляции топ-модели на постоянном уровне при этих обстоятельствах:

  • Default parameter behavior является Tunable.

  • Постоянный сигнал шага расчета от блока Model зарегистрирован топ-модель.

  • Регистрируемый сигнал непосредственно не соединяется с выходным портом корневого уровня.

Чтобы избежать этого поведения и журнала на постоянном уровне во всех режимах симуляции, установите Default parameter behavior на Inlined.

ДаНет

Функции, не поддерживавшие:

  • На сигнал вход в систему моделей ссылается компонент SIL/PIL.

  • Сигнал, входящий в систему блок Simulink Function.

  • Виртуальные сигналы.

  • Виртуальные шины.

  • Основанные на системе координат сигналы, которые регистрируются как основанные на выборке сигналы.

  • Непрерывные, асинхронные, и инициированные шаги расчета. На верхнем уровне моделей экспорта функций можно регистрировать сигналы с инициированными шагами расчета.

  • Логгирование Stateflow® состояния и локальные данные.

ДаДа

Переменный размер, вызов функции и сигналы Действия не поддерживаются. Нормальная симуляция производит ошибку. 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 booleanreal 1
    bitField1 boolean real 1
    bitField2 booleanreal 1
    bitField3 booleanreal 1
    bitField4 booleanreal1
    bitField5booleanreal1

  • Data scopeImported

  • Заголовочный файл 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 и типами данных целевого компьютера

Когда тип данных Simulink и соответствующий тип данных целевого компьютера отличаются по размеру, SIL симуляция или PIL симуляция производят ошибку. Это несоответствие размера может произойти, если вы сопоставляете тип данных Simulink с типом данных целевого компьютера через определения в импортированном заголовочном файле. Например, если вы создаете псевдоним типа данных, T_BOOL, который является Simulink.AliasType объект с этими свойствами:

  • Base typeboolean.

  • Режим Built in, boolean.

  • Data scopeImported.

  • Заголовочный файл 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 симуляции.

Например, SIL не поддерживает использование пользовательского кода, который явным образом бросает указатели на переменные целочисленного типа, которые меньше, чем длина переменной указателя на вашем компьютере разработчика. Рассмотрите использование одной из этих альтернатив:

  • Запустите PIL симуляцию.

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

Различия в шаге расчета в инспекторе данных моделирования сравнения

Если вы используете Инспектора Данных моделирования, чтобы сравнить регистрируемые выходные параметры модели от нормальных и SIL симуляций или PIL симуляций, шаги расчета выходных параметров могут отличаться. Можно все еще использовать Инспектора Данных моделирования, чтобы проверить, что выходные параметры соответствуют численно.

Топ-модель Ограничения 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 симуляцию.

Блок Model Ограничения SIL/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 поддерживает выходные параметры с постоянным шагом расчета.

Невстроенные S-функции

SIL/PIL СИМУЛЯЦИИ блока Model не поддерживает невстроенные S-функции.

Модели, на которые ссылаются, которые используют ту же целевую настройку возможности соединения

Рассмотрите топ-модель с двумя или больше блоками Model, что образцы модели, которые используют ту же целевую настройку возможности соединения. Если блоки Model находятся в режиме PIL одновременно, вы не можете запустить симуляцию топ-модели. Ошибка происходит.

SIL и экземпляры PIL модели, на которую ссылаются,

Рассмотрите топ-модель, которая содержит два экземпляра блока Model, которые ссылаются на ту же модель. Если один экземпляр находится в режиме SIL, и другой экземпляр находится в режиме PIL, вы не можете запустить симуляцию топ-модели. Ошибка происходит.

Блок Subsystem Ограничения 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 и инструмент BullseyeCoverage для анализа покрытия кода.

  • Виртуальные шины в интерфейсе подсистемы.

Результаты модели и SIL симуляций или PIL симуляций могут отличаться численно если:

  • Подсистема использует неличные числа, например, NaN и Inf.

  • Подсистема и родительская модель имеют несколько частот дискретизации и переходов уровня.

Различное распространение условия с различным источником и различными блоками приемника

Симуляции блока SIL/PIL не поддерживают распространение различных условий через контуры компонента.

Мультиплексор блока PIL

Блок PIL поддерживает сигналы мультиплексора, кроме смешанных сигналов мультиплексора типа данных, которые расширяются в отдельные сигналы во время сборки подсистемы щелчка правой кнопкой.

Покрытие кода

Симуляции блока SIL не поддерживают генерацию результатов покрытия кода. Поддержка блока PIL покрытия кода зависит от вашей целевой настройки возможности соединения и поддержки стороннего продукта.

Подсистема с наследованными блоками шага расчета

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

Попробуйте одно из этих обходных решений:

  • Прежде чем вы создадите блок SIL/PIL, в родительской модели, установите Configuration Parameters> Solver> Periodic sample time constraint к Ensure sample time independent.

  • Используя подсистему, создайте блок Model, который независим от шага расчета. С этим блоком запустите SIL/PIL симуляции блока Model.

Похожие темы