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

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

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

  • Топ-модель SIL/PIL — Набор режим симуляции топ-модели к Software-in-the-Loop (SIL) или Processor-in-the-Loop (PIL).

  • Блок Model SIL/PIL — Установленный параметр блока Model Simulation mode на Software-in-the-loop (SIL) или Processor-in-the-loop (PIL).

  • Блок SIL/PIL — Использование SIL или PIL блокируется в модели.

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

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

Настраиваемые параметры и SIL/PIL

Для симуляций блока SIL/PIL и SIL/PIL блока Model можно настроить настраиваемые параметры рабочей области, но не настраиваемые параметры диалогового окна. Для получения информации о настраивающихся параметрах смотрите Мелодию и Эксперимент со Значениями Параметров блоков (Simulink).

Для топ-модели с настраиваемыми параметрами можно запустить симуляцию 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 не поддерживает локальные хранилища данных.

SIL/PIL блока Model не поддерживает локальные Блоки памяти Хранилища данных, которые имеют эти установки параметров:

  • Share across model instances – Выбранный.

  • Storage classAuto или Model default.

Вы не можете создать блоки SIL/PIL от моделей, которые используют локальные Блоки памяти Хранилища данных с выбранным параметром 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 блокам Рабочей области.

Блок Model SIL/PIL не поддерживает К блокам Рабочей области.

Не может Соединить Выходные параметры SIL/PIL, чтобы Объединить Блок

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

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

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

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

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

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

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

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

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

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

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

Только сигналы, которые включены в API C, регистрируются во время симуляции SIL/PIL. Чтобы наблюдать сигналы в сгенерированном коде, можно сконфигурировать сигналы как тестовые точки. Для каждого сигнала установите флажок Signal Properties> Test point.

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

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

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

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

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

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

ДаНет

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

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

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

  • Виртуальные сигналы, например, мультиплексор.

  • Шины.

  • Пользовательские классы памяти.

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

  • Журналирование состояний Stateflow® и локальных данных.

  • Модули.

ДаДа

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

ДаНет

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

ДаНет

Пользовательский класс памяти типа Other

Симуляции SIL/PIL поддерживают пользовательский класс памяти, где Type установлен в Other. Эти ограничения применяются:

  • Если фрагменты кода, возвращенные файлом TLC, сопоставленным с пользовательским классом памяти, являются неполными, приложение SIL/PIL может не скомпилировать, или приводит к неправильным результатам.

  • Пользовательские классы памяти с осциллографом Imported и доступом Pointer поддерживаются, но необходимо предоставить код, чтобы инициализировать указатель. Например, можно изменить ответ на DataAccess(record, "define", "", ""), чтобы предоставить определение реализации устройства хранения данных и инициализировать указатель на адрес переменной реализации.

  • Чтобы определить, является ли переменной const и поэтому не настраиваемая, процесс сборки для приложения SIL/PIL использует определение раздела memory в пользовательском классе памяти. Если пользовательский класс памяти задает переменную как const и не сопоставлен с разделом memory const, целевое приложение может не скомпилировать, или производит ошибку во время симуляции. В этом случае сопоставьте пользовательский класс памяти с разделом 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.

  • Через блок, который изменяет тип данных сигнала. Чтобы проверять непротиворечивость типов данных в модели, отобразите Типы Данных порта путем выбора Display> Signals & Ports> Port Data Types (см. Типы Данных порта (Simulink)).

  • Через блок, который изменяет размерности сигнала. Проверять непротиворечивость типов данных в модели, размерах дисплея путем выбора Display> Signal & Ports> Signal Dimensions.

Аппаратная реализация

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

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

Символы Non-ASCII на имя папки

Если имя текущей рабочей папки содержит символы non-ASCII, вы не можете запустить SIL симуляцию.

Журналирование состояния

SIL/PIL не поддерживает состояние, регистрирующее (Simulink).

Соедините шиной элементы, сопоставленные с импортированными определениями битового поля

Если вы сопоставляете элементы шины 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 поддерживает журналирование сигнала для сигналов, соединенных с импортом корневого уровня и выходными портами. 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 или Dataset и вы запускаете команду sim, не задавая одно выходной формат. Программное обеспечение добавляет _wrapper в имя блока для сигналов в yout. Если форматом сохранения является Array, программное обеспечение не добавляет суффикс. Например:

    >> yout.signals
    
    ans =
            values: [11x1 double]
        dimensions: 1
             label: 'SignalLogging'
         blockName: 'sillogging_wrapper/OutputLogging'
    

    Чтобы избежать этого поведения, запустите симуляции командной строки с командой sim, задающей одно выходной формат. Смотрите Симуляции Выполнения Программно (Simulink).

Модель в скомпилированном состоянии во время топ-модели SIL/PIL

Во время топ-модели симуляция SIL/PIL помещает программное обеспечение, модель в скомпилированном состоянии – смотрите model. Это действие может привести к конфликту по поводу глобальных ресурсов между моделью и сгенерированным кодом SIL/PIL. В этом случае различия между режимом normal mode и симуляцией SIL/PIL выходные параметры могут закончиться.

Например, рассмотрите модель, которая использует блоки UDP от DSP System Toolbox™. Эти блоки открывают сокеты UDP, которые могут привести к конкуренции ресурса между моделью и сгенерированным кодом SIL/PIL.

Поддержка коллбэка

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-функции

Блок Model симуляции SIL/PIL не поддерживает невстроенные S-функции.

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

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

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

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

Ограничения Блока 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, который независим от шага расчета. С этим блоком запустите блок Model симуляции SIL/PIL.

Похожие темы