Считайте и запишите параметры блоков в Excel

Если вы управляете данными модели во внешних файлах, можно использовать скрипты, чтобы передать данные между файлом данных и моделью Simulink®. Этот пример показывает вам, как считать данные о параметрах блоков из и данные о параметре записи к файлу данных Excel®. А именно, пример обеспечивает функции, которые читают и пишут Сопоставленные данные о параметре Двигателя с искровым зажиганием. Можно адаптировать функции, чтобы считать и записать параметры для дополнительных блоков.

Открытый сопоставленный блок двигателя с искровым зажиганием

Откройте блок Mapped SI Engine в гибридном электромобиле пример готовых узлов P2.

Откройте гибридный электромобиль пример готовых узлов 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 Engine> 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.

Смотрите также

Похожие темы