Можно запустить симуляции Simulink® с помощью MATLAB® Engine API для C++. Вот основные шаги, чтобы запустить симуляцию программно:
Запустите сеанс работы с MATLAB.
Загрузите модель Simulink в MATLAB с помощью функции load_system MATLAB.
Запустите симуляцию с определенными параметрами симуляции с помощью функции sim MATLAB.
Доступ к результатам методов использования симуляции возвращенного объекта Simulink.SimulationOuput.
Для получения информации о рабочих симуляциях программно из MATLAB, смотрите Симуляции Человека Выполнения (Simulink).
Блок-схема vdp Simulink моделирует уравнение Ван дер Поля, которое является дифференциальным уравнением второго порядка. Simulink решает уравнения с помощью начальных условий и параметров конфигурации, заданных моделью.

Этот код 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.
Загрузите модель vdp Simulink с помощью асинхронного вызова MATLABEngine::evalAsync. Выполнение ожидает MATLAB, чтобы загрузить модель.
Запустите симуляцию с помощью другого асинхронного вызова MATLABEngine::evalAsync. Выполнение ожидает симуляции, чтобы закончиться.
Извлеките данные моделирования от объекта Simulink.SimulationOutput в рабочем пространстве MATLAB.
Изобразите данные в виде графика и экспортируйте изображение 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 | matlab::engine::MATLABEngine | matlab::engine::connectMATLAB