exponenta event banner

Чтение и запись параметров блока в Excel

При управлении данными модели во внешних файлах можно использовать сценарии для передачи данных между файлом данных и моделью Simulink ®. В этом примере показано, как считывать данные параметров блоков и записывать их в файл данных Excel ®. В частности, в этом примере представлены функции, которые считывают и записывают данные параметра Mapped SI Engine. Функции можно адаптировать к параметрам чтения и записи для дополнительных блоков.

Открыть сопоставленный блок модуля SI

Откройте блок «Mapped SI Engine» в приложении двухполосных ссылок на изменения.

Открытие приложения «Ссылка на изменение двухполосного движения»

workDir = pwd;
vdynblksDblLaneChangeStart;
cd(workDir);

Задайте переменную, равную пути блока.

bp = 'SiMappedEngineV/Mapped SI Engine'; % block path

Открыть сопоставленный блок модуля SI

В DLCReferenceApplication модель, перейдите к Passenger Vehicle > Ideal Mapped Engine > SiMappedEngineV. Откройте блок Сопоставленный механизм СИ. Для параметров «Точки останова» для управляемого крутящего момента, «Точки останова» для входного значения частоты вращения двигателя, «Число цилиндров», «Обороты кривошипа на силовой ход» и «Общий смещенный объем» устанавливаются переменные рабочего пространства.

Функции в примере заменяют переменные рабочей области значениями в файле данных.

Укажите конфигурацию файла данных

Сначала укажите имя файла. Этот пример файла 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');

Считывание сопоставленных параметров блока модуля SI

Обновите блок сопоставленного модуля СИ до значений, указанных в файле данных.

Чтение файла данных и обновление параметров

Этот код используется для чтения файла данных и обновления параметров блока «Сопоставленный механизм СИ».

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

Открыть сопоставленный блок модуля SI

В DLCReferenceApplication модель, перейдите к Passenger Vehicle > Ideal Mapped Engine > SiMappedEngineV. Откройте блок Сопоставленный механизм СИ. Значения «Точки останова» для заданного крутящего момента, «Точки останова» для входного значения частоты вращения двигателя, «Число цилиндров», «Обороты кривошипа на силовой ход» и «Общий объем перемещений» устанавливаются в значения, указанные в файле данных. Подтвердить, что параметры карты тормозного момента и карты расхода топлива совпадают со значениями, указанными в файле данных.

Запись измененных параметров в файл данных

В блоке Сопоставленный механизм СИ измените значение параметра Количество цилиндров NCyl с 6 кому 8. Нажмите кнопку «Применить». Сохраните модель.

Этот код можно также использовать для обновления параметра и сохранения модели.

set_param(bp,'Ncyl','8');
save_system('SiMappedEngineV');

Запись данных параметров в файл

Создайте копию файла данных. Запишите измененные данные параметров в копию файла данных.

copyfile('SiEngineData.xlsx','SiEngineDataCopy.xlsx','f');
fileName = 'SiEngineDataCopy.xlsx';

Затем используйте этот код, чтобы записать точки останова отображенного блока двигателя SI для командного крутящего момента, точки останова для входного значения частоты вращения двигателя, число цилиндров, обороты кривошипа на силовой ход, общий смещенный объем, карту крутящего момента тормоза и параметры карты расхода топлива в файл данных.

% 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.

См. также

Связанные темы