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