Если ваша s-функция имеет расширение .mexw32
, то это скомпилированная S-функция уровня 2. Это , а не S-функция m-кода.
Я думаю, вы обнаружите, что нет никакого способа вызвать S-функцию M-кода уровня 2 или S-функцию C-кода уровня 2 из чего-либо, кроме модели Simulink. S-функция m-кода уровня 2 имеет один вход: объект block
, созданный и переданный ему механизмом выполнения Simulink, в то время как S-функция c-кода уровня 2 состоит из ряда функций. каждому из которых передается структура simStruct
(c-code), которая также создается механизмом исполнения Simulink.
Вам нужно будет создать модель с вашей S-функцией, предположительно вместе с соответствующими блоками inport
и outport
, а затем использовать sim
для вызова модели.
Обратите внимание, что указанная вами ссылка (т. Е. open('sfuntmpl.m')
) - это шаблон для S-функции Level-1 m-code. Их можно вызывать из MATLAB, так как они просто обычная функция m-кода. Если у вас есть S-функция m-кода Уровня 1 (которая, по-видимому, отсутствует), то вы должны вызывать ее так, как вы пытаетесь это сделать. в вопросе.
Шаблон для S-функции m-кода уровня 2: edit('msfuntmpl.m');
Шаблон для S-функции c-кода уровня 2: edit(fullfile(matlabroot,'simulink','src','sfuntmpl_basic.c'));