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

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

Используя пример в Wrapper S-Function и TLC Files, можно устранить вызов к my_alg полностью путем определения явного кода (то есть 2.0 * u) в wrapsfcn.tlc. Хотя это может улучшить эффективность, если вы работаете с большим количеством кода C/C + +, задача может быть длительной. Вы также должны поддерживать свой алгоритм в двух местах, самой функции C/C + + S и соответствующего файла 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);

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

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

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

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

Похожие темы