Полностью встроенная 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-функции является sfun_multiport.c
и sfun_multiport.tlc
. Эта S-функция иллюстрирует, как создать полностью встроенный файл TLC для 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.