Если вы управляете данными модели во внешних файлах, можно использовать скрипты, чтобы передать данные между файлом данных и моделью Simulink®. Этот пример показывает вам, как считать данные о параметрах блоков из и данные о параметре записи к файлу данных Excel®. А именно, пример обеспечивает функции, которые читают и пишут Сопоставленные данные о параметре Двигателя с искровым зажиганием. Можно адаптировать функции, чтобы считать и записать параметры для дополнительных блоков.
Откройте блок Mapped SI Engine в гибридном электромобиле пример готовых узлов P2.
workDir = pwd; autoblkHevP2Start; cd(workDir);
Установите переменную, равную блоку path.
bp = 'SiMappedEngine/Mapped SI Engine'; % block path
В HevP2ReferenceApplication
модель, перейдите к Passenger Vehicle
> Ideal Mapped Engine
> SiMappedEngine
. Откройте блок Mapped SI Engine. Точки останова для крутящего момента, которым управляют, Точки останова для входа скорости вращения двигателя, Количества цилиндров, оборотов Заводной рукоятки на диапазон степени и Общих перемещенных параметров объема установлены в переменные рабочей области.
Функции в примере перезаписывают переменные рабочей области со значениями в файле данных.
Во-первых, задайте имя файла. Этот файл в качестве примера SiEngineData.xlsx
содержит три листа. Первый лист содержит скалярные значения для точек останова крутящего момента, которыми управляют, точек останова для входных точек останова скорости вращения двигателя, количества цилиндров, оборотов заводной рукоятки и общего перемещенного объема. Второй лист содержит табличные значения для карты момента привода. Третий лист содержит табличные значения для топливной карты крутящего момента.
fileName = 'SiEngineData.xlsx';
Обратите внимание на то, что первый лист в файле задает Количество цилиндров, параметр Ncyl как 6
.
Затем задайте данные конфигурации для подсистем двигателей. Этот пример устанавливает настройку для двойных переменных скаляра размера, вектора или 2D массива.
Скалярная структура данных задает данные по первому листу.
Векторная структура данных задает данные по второму листу.
Структура данных массива задает данные по третьему листу.
engData = struct(); % engine parameter data % Scalar data engData.Ncyl = struct('xlSheet','Main', 'xlRange','C7:C7', 'slBlockPath',bp, 'slBlockParam','Ncyl'); engData.Cps = struct('xlSheet','Main', 'xlRange','C8:C8', 'slBlockPath',bp, 'slBlockParam','Cps'); engData.Vd = struct('xlSheet','Main', 'xlRange','C9:C9', 'slBlockPath',bp, 'slBlockParam','Vd'); % Vector data engData.t_bpt = struct('xlSheet','Main', 'xlRange','C3:R3', 'slBlockPath',bp, 'slBlockParam','f_tbrake_t_bpt'); engData.n_bpt = struct('xlSheet','Main', 'xlRange','C4:R4', 'slBlockPath',bp, 'slBlockParam','f_tbrake_n_bpt'); % 2D array data engData.torque = struct('xlSheet','Brake Torque', 'xlRange','B2:Q17', 'slBlockPath',bp, 'slBlockParam','f_tbrake'); engData.fuel = struct('xlSheet','Fuel Map', 'xlRange','B2:Q17', 'slBlockPath',bp, 'slBlockParam','f_fuel');
Обновите блок Mapped SI Engine к значениям, заданным в файле данных.
Используйте этот код, чтобы считать файл данных и обновить Сопоставленные параметры блоков Двигателя с искровым зажиганием.
f = fields(engData); for idx = 1:length(f) try var = getfield(engData, f{idx}); % read value from Excel val = readmatrix(fileName, 'Sheet',var.xlSheet, 'Range',var.xlRange); % open Simulink model mdl = fileparts(var.slBlockPath); open_system(mdl); % set parameter value and save model set_param(var.slBlockPath, var.slBlockParam, mat2str(val)); save_system(mdl); catch ME % return any error info disp(getReport(ME, 'extended', 'hyperlinks', 'on')) fprintf('\nContinuing to next variable...\n\n'); end end fprintf('Done writing values to Simulink\n')
Done writing values to Simulink
В HevP2ReferenceApplication
модель, перейдите к Passenger Vehicle
> Ideal Mapped Engin
e> SiMappedEngine
. Откройте блок Mapped SI Engine. Точки останова для крутящего момента, которым управляют, Точки останова для входа скорости вращения двигателя, Количества цилиндров, оборотов Заводной рукоятки на диапазон степени и Общих перемещенных параметров объема установлены в значения, заданные в файле данных. Подтвердите что карта Момента привода и Топливные параметры блок-схемы
совпадают со значениями, заданными в файле данных.
В блоке Mapped SI Engine измените Количество цилиндров, параметра NCyl от 6 до 8. Нажмите Apply. Сохраните модель.
В качестве альтернативы используйте этот код, чтобы обновить параметр и сохранить модель.
set_param(bp,'Ncyl','8'); save_system('SiMappedEngine');
Во-первых, создайте копию файла данных. Запишите модифицированные данные о параметре в копию файла данных.
copyfile('SiEngineData.xlsx','SiEngineDataCopy.xlsx','f'); fileName = 'SiEngineDataCopy.xlsx';
Затем используйте этот код, чтобы записать Точки останова блока Mapped SI Engine для крутящего момента, которым управляют, Точки останова для входа скорости вращения двигателя, Количества цилиндров, оборотов Заводной рукоятки на диапазон степени, Общий перемещенный объем, карту Момента привода и Топливные параметры блок-схемы к файлу данных.
% Read data from Simulink model then write to Excel f = fields(engData); for idx = 1:length(f) try var = getfield(engData, f{idx}); % open Simulink model mdl = fileparts(var.slBlockPath); open_system(mdl); % read value from Simulink val = str2num(get_param(var.slBlockPath, var.slBlockParam)); % write value to Excel writematrix(val, fileName, 'Sheet',var.xlSheet, 'Range',var.xlRange); catch ME % return any error info disp(getReport(ME, 'extended', 'hyperlinks', 'on')) fprintf('\nContinuing to next variable...\n\n'); end end fprintf('Done writing values to Excel\n')
Done writing values to Excel
Откройте файл с модифицированными данными. Подтвердите, что количеством цилиндров в файле данных является 8
.