Можно запустить моделирования Simulink® с помощью MATLAB® Engine API для C++. Вот основные шаги, чтобы запустить моделирование программно:
Запустите сеанс работы с MATLAB.
Загрузите модель Simulink в MATLAB с помощью функции load_system
MATLAB.
Запустите моделирование с определенными параметрами моделирования с помощью функции sim
MATLAB.
Доступ к результатам методов использования моделирования возвращенного объекта Simulink.SimulationOuput
.
Для получения информации о рабочих моделированиях программно от MATLAB, смотрите Моделирования Человека Выполнения (Simulink).
Блок-схема vdp
Симулинка моделирует уравнение Ван дер Поля, которое является дифференциальным уравнением второго порядка. Симулинк решает уравнения с помощью начальных условий и параметров конфигурации, заданных моделью.
Этот код MATLAB показывает команды, чтобы запустить моделирование программно. Объект Simulink.SimulationOuput
метод get
возвращает результаты и временной вектор.
load_system('vdp'); parameterStruct.SaveOutput = 'on'; parameterStruct.OutputSaveName = 'yOut'; parameterStruct.SaveTime = 'on'; parameterStruct.TimeSaveName = 'tOut'; simOut = sim('vdp',parameterStruct); y = simOut.get('yOut'); t = simOut.get('tOut');
Этот код MATLAB создает график моделирования вывод и экспорт график к файлу изображения JPEG.
plot(t,y) print('vdpSimulation','-djpeg')
Этот пример кода запускает моделирование Simulink для модели vdp
. Код выполняет эти операции:
Соединитесь с именованным сеансом работы с MATLAB, которому установили Simulink.
Создайте matlab::data::ArrayFactory
и создайте StructArray
, который содержит параметры моделирования.
Передайте структуру параметра моделирования MATLAB workspace.
Загрузите модель Simulink vdp
использование асинхронного вызова MATLABEngine::evalAsync
evalAsync. Выполнение ожидает MATLAB, чтобы загрузить модель.
Запустите моделирование с помощью другого асинхронного вызова MATLABEngine::evalAsync
evalAsync. Выполнение ожидает моделирования, чтобы закончиться.
Извлеките данные моделирования от объекта Simulink.SimulationOutput
в MATLAB workspace.
Изобразите в виде графика данные и экспорт изображение JPEG к текущей папке MATLAB с помощью MATLABEngine::eval
, чтобы выполнить команды MATLAB.
#include "MatlabDataArray.hpp" #include "MatlabEngine.hpp" #include <chrono> #include <iostream> void runSimulation() { using namespace matlab::engine; // Connect to named shared MATLAB session started as: // matlab -r "matlab.engine.shareEngine('myMatlabEngine')" String session(u"myMatlabEngine"); std::unique_ptr<MATLABEngine> matlabPtr = connectMATLAB(session); // Create MATLAB data array factory matlab::data::ArrayFactory factory; // Create struct for simulation parameters auto parameterStruct = factory.createStructArray({ 1,4 }, { "SaveOutput", "OutputSaveName", "SaveTime", "TimeSaveName" }); parameterStruct[0]["SaveOutput"] = factory.createCharArray("on"); parameterStruct[0]["OutputSaveName"] = factory.createCharArray("yOut"); parameterStruct[0]["SaveTime"] = factory.createCharArray("on"); parameterStruct[0]["TimeSaveName"] = factory.createCharArray("tOut"); // Put simulation parameter struct in MATLAB matlabPtr->setVariable(u"parameterStruct", parameterStruct); // Load vdp Simulink model FutureResult<void> loadFuture = matlabPtr->evalAsync(u"load_system('vdp')"); std::cout << "Loading Simulink model... " << std::endl; std::future_status loadStatus; do { loadStatus = loadFuture.wait_for(std::chrono::seconds(1)); } while (loadStatus != std::future_status::ready); std::cout << "vdp model loaded\n"; // Run simulation FutureResult<void> simFuture = matlabPtr->evalAsync(u"simOut = sim('vdp',parameterStruct);"); std::cout << "Running simulation... " << std::endl; std::future_status simStatus; do { simStatus = loadFuture.wait_for(std::chrono::seconds(1)); } while (simStatus != std::future_status::ready); std::cout << "vdp simulation complete\n"; // Get simulation data and create a graph matlabPtr->eval(u"y = simOut.get('yOut');"); matlabPtr->eval(u"t = simOut.get('tOut');"); matlabPtr->eval(u"plot(t,y)"); matlabPtr->eval(u"pause(10)"); matlabPtr->eval(u"print('vdpSimulation','-djpeg')"); }
Для получения информации о том, как установить и создать программы механизма C++, видит Сборку Программы Engine C++.
matlab::data:: ArrayFactory
| mATLABEngine:: MATLABEngine
| mATLAB engine.connect_matlab