Запись полностью встроенные S-функции

Полностью встроенная S-функция создает ваш алгоритм (блок) в сгенерированный код, который вы не можете отличить от встроенного блока. Как правило, полностью встроенная S-функция требует, чтобы вы реализовали свой алгоритм дважды: однажды для модели Simulink (S-функция MEX C/C++) и однажды для генерации кода (файл TLC).

Используя пример в S-функции Обертки Записи и Файлах TLC, можно устранить вызов my_alg полностью путем определения явного кода (то есть, 2.0 * u) в wrapsfcn.tlc. В то время как это может улучшать производительность, если вы работаете с большой суммой кода C/C++, задача может быть долгой. Также необходимо обеспечить алгоритм в двух местах, сама S-функция C/C++ и соответствующий файл TLC. Рассмотрите, может ли увеличение производительности перевесить недостатки. Встраивать алгоритм, используемый в этом примере, в Outputs раздел вашего wrapsfcn.tlc файл, вместо записи:

%<y> = my_alg(%<u>);

Использование:

%<y> = 2.0 * %<u>;

Этот код является кодом, произведенным в mdlOutputs:

void mdlOutputs(int_T tid)
{
  /* Sin Block: <Root>/Sin */
  rtB.Sin = rtP.Sin.Amplitude *
    sin(rtP.Sin.Frequency * ssGetT(rtS) + rtP.Sin.Phase);

  /* S-Function Block: <Root>/S-Function */
  rtB.S_Function = 2.0 * rtB.Sin; /* Explicit embedding of algorithm */

  /* Outport Block: <Root>/Out */
  rtY.Out = rtB.S_Function;
}

Компилятор Выходного языка заменяет вызов my_alg с самим алгоритмом.

Многопортовая S-функция

Более усовершенствованным многопортовым встроенным примером S-функции является sfun_multiport.c и sfun_multiport.tlc. Эта S-функция иллюстрирует, как создать полностью встроенный файл TLC для S-функции, которая содержит несколько портов.

Инструкции для записи встроенных S-функций

  • Рассмотрите использование свойства RTWdata блока (см. S-Function RTWdata). Это свойство является структурой векторов символов, которые можно сопоставить с блоком. Генератор кода сохраняет структуру с моделью в model.rtw файл и делает .rtw более читаемый файл. Например, в Окне Команды MATLAB, предположите, что вы вводите эти команды:

    mydata.field1 = 'information for field1';
    mydata.field2 = 'information for field2';
    set_param(sfun_block, 'RTWdata', mydata);

    .rtw файл, который генератор кода производит для блока, включает комментарии, заданные в структуру mydata.

  • Рассмотрите использование mdlRTW функционируйте, чтобы встроить вашу S-функцию MEX C в сгенерированном коде для:

    • Переименование настраиваемых параметров в сгенерированном коде.

    • Введение ненастраиваемых параметров в файл TLC.

Похожие темы