Запишите невстроенную S-функцию

Невстроенная S-функция является C или S-функцией C++ MEX, которая обработана тождественно Simulink® механизм и сгенерированным кодом. Вы реализуете свой алгоритм однажды согласно API S-функции. Код двигателя Simulink и сгенерированный код вызывают стандартные программы S-функции (например, mdlOutputs) во время выполнения модели.

Невстроенные S-функции идентифицированы отсутствием sfunction.tlc файл для вашей S-функции. Имя файла варьируется в зависимости от вашей платформы. Например, на 64-битной Microsoft® Windows® система, именем файла является sfunction.mexw64. В MATLAB® Командное окно, ввести mexext видеть который расширение ваше системное использование.

Инструкции для записи невстроенных S-функций

  • Файл MEX не может вызвать функции MATLAB.

  • Если функции использования файла MEX в библиотеках MATLAB External Interface, включайте заголовочный файл cg_sfun.h вместо mex.h или simulink.c. Для заголовочного файла cg_sfun.h, в конце вашей S-функции включайте эти линии:

    #ifdef MATLAB_MEX_FILE /* Is this file being compiled as a MEX-file? */
    #include "simulink.c"  /* MEX-file interface mechanism */
    #else
    #include "cg_sfun.h"   /* Code generation registration function */
    #endif
  • Используйте только функцию MATLAB API, которую поддерживает генератор кода. Поддерживаемые API-функции:

    • mxGetDoubles

    • mxGetEps

    • mxGetInf

    • mxGetM

    • mxGetN

    • mxGetNaN

    • mxGetPr (Не рекомендуемый. Использование mxGetDoubles вместо этого.)

    • mxGetScalar

    • mxGetString

    • mxIsEmpty

    • mxIsFinite

    • mxIsInf

  • Вызовы библиотеки MEX не поддерживаются в сгенерированном коде. Чтобы использовать такие вызовы в файле MEX а не в сгенерированном коде, добавьте следующее условие:

    #ifdef MATLAB_MEX_FILE
    #endif
  • Используйте только полные матрицы, которые содержат только действительные данные.

  • Не задавайте возвращаемое значение для вызовов mxGetString. Если вы действительно задаете возвращаемое значение, файл MEX не компилирует. Вместо этого используйте второй входной параметр функции, которая возвращает указатель на вектор символов.

  • Используйте правильный #define s-function_name оператор. S-имя-функции, которое вы задаете, должно совпадать с именем S-файла-функции.

  • Если возможно, используйте типы данных real_T и int_T вместо double и int. Типы данных real_T и int_T являются более типовыми и может использоваться в нескольких средах.

  • Предоставьте процессу сборки имена модулей, используемых, чтобы создать S-функцию. Используйте make-файл шаблона, set_param функция или S-function modules поле диалогового окна параметров блоков S-Function. Например, предположите, что вы создаете свою S-функцию с этой командой:

    mex sfun_main.c sfun_module1.c sfun_module2.c

    Можно затем использовать следующий вызов set_param включать необходимые модули:

    set_param(sfun_block, "SFunctionModules","sfun_module1 sfun_module2")

    Когда вы будете готовы сгенерировать код, обеспечьте генератор кода, чтобы восстановить топ-модель. Для получения дополнительной информации смотрите Регенерацию Управления Кода Топ-модели.

Невстроенные ограничения типа S-параметра-функции

Параметры к невстроенным S-функциям могут иметь следующие типы только:

  • Двойная точность

  • Символы в скалярах, векторах или 2D матрицах

Для большей гибкости в типе параметров, которые можно предоставить к S-функциям или операциям в S-функции, встройте S-функцию и рассмотрите использование mdlRTW Стандартная программа S-функции.

Использование других функций от matrix.h MATLAB API или другие API MATLAB, такие как mex.h и mat.h, не поддерживаются. Если вы вызываете неподдерживаемые API от исходного файла S-функции, ошибки компилятора происходят. Для получения дополнительной информации на поддерживаемых функциях MATLAB API, смотрите файлы matlabroot/rtw/c/src/rt_matrx.h и matlabroot/rtw/c/src/rt_matrx.c

Если вы используете mxGetPr на пустой матрице функция не возвращает NULL. Это возвращает случайное значение. Поэтому необходимо защитить вызовы mxGetPr при помощи mxIsEmpty.

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте