Полностью встроенная S-функция создает ваш алгоритм (блок) в сгенерированный код, который вы не можете отличить от встроенного блока. Как правило, полностью встроенная S-функция требует, чтобы вы реализовали свой алгоритм дважды: однажды для модели Simulink (S-функция MEX C/C++) и однажды для генерации кода (файл TLC).
Используя пример в S-функции Обертки Записи и Файлах TLC (Simulink Coder), можно устранить вызов 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-функции является sfun_multiport.c и sfun_multiport.tlc. Эта S-функция иллюстрирует, как создать полностью встроенный файл TLC для S-функции, которая содержит несколько портов.
Рассмотрите использование свойства RTWdata блока (см. S-Function RTWdata (Simulink Coder)). Это свойство является структурой векторов символов, которые можно сопоставить с блоком. Генератор кода сохраняет структуру с моделью в файле и делает файл 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.