Полностью встроенная 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-функции 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);
The .rtw
файл, который генератор кода производит для блока, включает комментарии, заданные в структуре mydata
.
Рассмотрите использование mdlRTW
функция для ввода функции C MEX S в сгенерированный код для:
Переименование настраиваемых параметров в сгенерированный код.
Введение ненастраиваемых параметров в файл TLC.