Совместное моделирование с Simulink: пошаговое выполнение и обмен параметрами с внешним приложением

Мне нужно реализовать совместное моделирование с помощью Simulink и внешнего приложения (LS-DYNA). Основное моделирование выполняется в Simulink, где я хочу реализовать функциональный блок следующим образом: введите здесь описание изображения

Взаимодействие осуществляется с помощью cmd окон, поэтому блок Simulink должен делать следующее:

function [ x,y ] = ExternalSimlation( u,v )

% open the windows cmd and run the external simulation by passing u and v
[status,cmdout] = system( 'command for executing the external simulation -u -v');

    function [ x,y ] = readcmd( cmdout )
        %algorithm to evaluate the cmd output
    end

    [x,y] = readcmd(cmdout);

end

Точный код здесь НЕ должен иметь значения. Мой вопрос: как я могу реализовать интерфейс в модели simulink? Могу ли я просто использовать один из пользовательских функциональных блоков, использовать мой код выше, и он будет работать? Но какой именно, разницы не вижу.

ИЛИ, моя другая идея состояла в том, чтобы построить что-то вроде следующего: введите описание изображения здесь

А затем используйте цикл while следующим образом:

while ... do
[u,v] = sim('model', 'x',x,'y', y, 'some option just to run a single step');
[x,y] = ExternalSimlation( u,v )
[u,v] = sim('model' .... next step ...)

для пошагового выполнения моделирования Simulink. Как я могу это понять? (Остальная часть моделирования содержит сложные алгоритмы управления, производные и интеграции)

У меня нет опыта написания пакетных файлов, но мне это тоже кажется возможным.

Если вам интересно, почему я не просто тестирую вещи, это потому, что у меня нет доступного внешнего приложения (я просто знаю, как работает ввод и вывод), и я не хочу тратить время на кодирование замещающего приложения. для проверки, если это вообще невозможно.

Любые подсказки и опыт в связанных симуляциях с simulink высоко ценятся! Благодарю вас!


person thewaywewalk    schedule 11.09.2013    source источник
comment
Ваш первый подход должен работать. Системная команда блокирует выполнение по умолчанию, поэтому симуляция должна дождаться ее завершения, прежде чем позволить Simulink продолжить дальнейшую обработку. При использовании блока MATLAB Function вам нужно будет определить систему как функцию coder.extrinsic, чтобы использовать ее, и могут возникнуть проблемы в зависимости от типов данных, возвращаемых системным вызовом. Но если это так, то используйте S-функцию m-кода. Второй подход, хотя и технически осуществимый, будет чрезмерно медленным.   -  person Phil Goddard    schedule 11.09.2013
comment
Итак, вы предлагаете S-функцию как лучшее решение? Я не понимаю вашего утверждения о функциональном блоке Matlab. Можете ли вы указать это? Какую систему мне нужно переопределить?   -  person thewaywewalk    schedule 11.09.2013
comment
Блок MATLAB Function работает лучше всего, когда у вас есть данные, которые не изменяют размер/размеры или тип данных, и любые функции, не входящие во встроенное подмножество MATLAB, должны быть определены как coder.extrinsic. Найдите документ по этому термину (например, coder.extrinsic) для получения дополнительной информации. Вот краткий пример здесь, в котором используется старый синтаксис eml.extrinsic ( который имеет тот же эффект, что и более новый coder.extrinsic). Если у вас возникнут проблемы с этим подходом, то это будет очень легко сделать в S-функции m-кода.   -  person Phil Goddard    schedule 11.09.2013


Ответы (2)


Насколько я знаю, "правильный" способ связать simulink с другими приложениями - написать S-функции. Если внешнее приложение имеет интерфейс C/C++, это также должно быть лучшим решением с точки зрения производительности: http://www.mathworks.de/de/help/simulink/create-cc-s-functions.html

person sebastian    schedule 11.09.2013

Вопрос относится к механизмам совместного моделирования Simulink. я предлагаю http://www.mathworks.in/help/matlab/calling-external-functions.html в качестве первого шага. А чтобы сравнить и понять реализации существующего программного решения, это руководство должно помочь. http://vector.com/portal/medien/cmc/application_notes/AN-IND-1-007_Using_MATLAB_with_CANoe.pdf

Начнем с того, что в основном все программы совместного моделирования, с которыми я работал, используют COM-интерфейсы из Windows (я не работал с Matlab ни в одной другой ОС). Они создают объекты и используют общую память для передачи данных. И в основном это через S- функции они достигают их. Также вы можете рассмотреть генерацию кода из simulink или stateflow и написание оболочки для внешних приложений.

person Community    schedule 24.10.2014
comment
а как насчет использования ДДС? - person guilhermecgs; 10.01.2017