RMS не поддерживается в функции Matlab внутри Simulink

В Simulink есть модуль под названием «Функция Matlab», который позволяет вам создавать настраиваемую функцию на блок-схеме Simulink.

Я реализовал простую функцию в модуле Simulink Matlab Function. Моя функция содержит вызов встроенного в Matlab rms(). Когда я запускаю модель Simulink, я получаю следующую ошибку:

The function 'rms' not supported for standalone code generation

Если я удалю rms из моей функции Matlab в модели Simulink, ошибка исчезнет, ​​и модель будет работать безупречно.

Вопросы:

  • Есть ли способ использовать rms от Matlab в Simulink?
  • Есть ли много других собственных вызовов Matlab, которые нельзя использовать внутри Simulink?

person solvingPuzzles    schedule 31.10.2012    source источник


Ответы (2)


Я просто хотел прояснить и расширить некоторые моменты, затронутые в ответе learnvst.

Даже если вы просто пытаетесь смоделировать модель, содержащую блок MATLAB Function, и явно не пытаетесь выполнить генерацию кода, вы все равно получите ошибку not supported for standalone code generation.

Как указано в learnvst, существует несколько ограничений на функции, которые можно использовать с генерацией кода. Однако, если вы просто хотите смоделировать вашу модель, Simulink позволяет вам сделать это, если вы обозначите эти «занесенные в черный список» функции как внешние. Это позволяет Simulink знать, что функции будут использоваться только для целей моделирования и не будут частью генерации кода.

В вашем конкретном случае добавьте следующую строку кода где-нибудь перед вызовом rms:

coder.extrinsic('rms');

Объявление функции как внешней в функции MATLAB часто полезно, даже когда вы выполняете генерацию кода. Например, вы можете захотеть визуализировать свои данные с помощью команды plot во время моделирования, но, очевидно, не нужно, чтобы команда plot была частью сгенерированного кода.

Дополнительную информацию об объявлении функций для быть сторонним.

person grungetta    schedule 01.11.2012
comment
Спасибо! Я все еще не успел попробовать это, но я свяжусь с вами, если у меня возникнут трудности с coder.extrinsic. - person solvingPuzzles; 05.11.2012

Часть ошибки not supported for standalone code generation подсказывает мне, что вы пытаетесь использовать такой продукт, как Matlab Coder, для создания исполняемого или собственного кода. Если это так, есть много наивных вызовов, которые нельзя использовать напрямую как в ядре Matlab, так и в наборах инструментов. Продукты для кодирования поддерживают только часть языка. Более подробную информацию можно найти здесь . . .

http://www.mathworks.co.uk/products/matlab-coder/description2.html

Что касается вашего вызова rms, он только вычисляет корень среднего квадратов. Попробуйте создать альтернативу, используя что-нибудь вроде. . .

sqrt(mean(x.^2))

... где x - сигнал.

person learnvst    schedule 31.10.2012