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

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

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

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

Откройте окно Double-Lane Change Примера готовых узлов

workDir = pwd;
vdynblksDblLaneChangeStart;
cd(workDir);

Установите переменную, равную пути блока.

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

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

В DLCReferenceApplication моделировать, переходить к Passenger Vehicle > Ideal Mapped Engine > SiMappedEngineV. Откройте блок 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 до значений, заданных в файле данных.

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

Используйте этот код, чтобы считать файл данных и обновить параметры блоков 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

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

В DLCReferenceApplication моделировать, переходить к Passenger Vehicle > Ideal Mapped Engine > SiMappedEngineV. Откройте блок Mapped SI Engine. Значения параметров Breakpoints for commanded torque, Breakpoints for скорости вращения двигателя входа, Number of cylinders, Crank rovtions per степени штриха и Total displaced volume заданы в значениях, заданных в файле данных. Подтвердите, что параметры карты момента привода и карты расхода топлива совпадают со значениями, заданными в файле данных.

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

В блоке Mapped SI Engine измените Количество цилиндров, параметр NCyl с 6 на 8. Нажмите Применить. Сохраните модель.

Также используйте этот код, чтобы обновить параметр и сохранить модель.

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

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

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

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

Затем используйте этот код, чтобы записать Mapped Двигателя с искровым зажиганием block Breakpoints для командного крутящего момента, Breakpoints для скорости вращения двигателя входа, Number of cylinders, Crank rovtions per степени штриха, Total displaced volume, Момент привода map и параметры карты расхода топлива в файл данных.

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

См. также

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте