Когда это необходимо, чтобы визуализировать данные, хранимые в данных или формате файла, Инспектор Данных моделирования не поддерживает, можно использовать io.reader
класс записи ваше собственное средство чтения файлов для Инспектора Данных моделирования. Этот пример объясняет части определения класса для пользовательского средства чтения файлов и демонстрирует, как указать читателя с Инспектором Данных моделирования. Откройте ExcelFirstColumnTimeReader.m
файл, чтобы просмотреть полное определение класса.
Запишите определение класса, которое задает, как ваш пользовательский читатель извлекает соответствующие данные и метаданные из файлов и переменных, которые используют пользовательские форматы. Сохраните файл определения класса в месте на пути MATLAB™.
Пользовательский читатель в этом примере использует readtable
функционируйте, чтобы загрузить данные из файла Microsoft Excel™ и использования первый столбец в файле как данные времени.
Определение класса запускается путем наследования io.reader
класс, сопровождаемый определениями метода, которые возвращают требуемые и соответствующие данные и метаданные.
classdef ExcelFirstColumnTimeReader < io.reader
Каждый пользовательский читатель должен задать getName
, getTimeValues
, и getDataValues
методы. Дополнительные методы доступны, чтобы получить доступ к определенным метаданным, которые могут существовать в пользовательском файле. Определение класса для этого примера задает абстрактные методы, а также supportsFile
и getChildren
методы.
supportsFile
метод проверяет содержимое файла, чтобы убедиться, что файл содержит данные сигнала.
function supported = supportsFile(~,filename) try t = readtable(filename); supported = height(t) > 0 && numel(t.Properties.VariableNames) > 1; catch supported = false; end end
Чтобы импортировать несколько сигналов из файла, обработайте данные как иерархические с файлом, являющимся главным узлом. Читатель использует getChildren
метод, чтобы создать ExcelFirstColumnTimeReader
объект для каждого сигнала в файле.
function childObj = getChildren(obj) childObj = {}; if isempty(obj.VariableName) t = readtable(obj.FileName); vars = t.Properties.VariableNames; vars(1) = []; childObj = cell(size(vars)); for idx = 1:numel(vars) childObj{idx} = ExcelFirstColumnTimeReader; childObj{idx}.FileName = obj.FileName; childObj{idx}.VariableName = vars{idx}; end end end
getTimeValues
метод считывает данные в файле с помощью readtable
функционируйте и возвращает данные в первом столбце для Инспектора Данных моделирования, чтобы использовать в качестве данных времени.
function timeVals = getTimeValues(obj) timeVals = []; if ~isempty(obj.VariableName) t = readtable(obj.FileName); timeName = t.Properties.VariableNames{1}; timeVals = t.(timeName); end end
getName
метод использует имя файла в качестве имени для узла верхнего уровня импортированных данных. Сигналы называют с помощью VariableName
свойство для соответствующего ExcelFirstColumnTimeReader
объект возвращен getChildren
метод.
function retName = getName(obj) if isempty(obj.VariableName) fullName = obj.FileName; [filepath,name,ext] = fileparts(fullName); retName = strcat(name,ext); else retName = obj.VariableName; end end
getDataValues
метод возвращает данные в каждом столбце, который имеет данные помимо первого как данные сигнала. К данным для каждого сигнала получают доступ с помощью VariableName
свойство для соответствующего объекта, возвращенного getChildren
метод.
function dataVals = getDataValues(obj) dataVals = []; if ~isempty(obj.VariableName) t = readtable(obj.FileName); dataVals = t.(obj.VariableName); end end
После того, как вы записываете файл определения класса для пользовательского средства чтения данных, необходимо указать читателя с Инспектором Данных моделирования, прежде чем можно будет использовать его, чтобы импортировать данные. Инспектор Данных моделирования не хранит указанных читателей между сеансами работы с MATLAB, таким образом, необходимо указать пользовательского читателя в начале каждого нового сеанса работы с MATLAB. Можно указать пользовательского читателя, чтобы считать данные из рабочей области или считать данные из файла. Чтобы указать средство чтения файлов в этом примере, используйте registerFileReader
метод.
registerFileReader(ExcelFirstColumnTimeReader,[".xlsx" "xls"]);
Чтобы подтвердить, что средство чтения файлов указано, используйте io.reader.getRegisteredFileReaders
метод.
io.reader.getRegisteredFileReaders
ans = 1x2 string
"ExcelFirstColumnTimeReader" "ExcelFirstColumnTimeReader"
Если вы указываете пользовательское средство чтения файлов, можно импортировать данные из файла в пользовательском формате с помощью Инспектора Данных моделирования пользовательский интерфейс или с помощью Simulink.sdi.createRun
функция. Этот пример импортирует простой набор данных из файла, который содержит четыре столбца данных. Пользовательское средство чтения файлов в этом примере всегда загружает первый столбец в этом случае a
, как данные времени.
Чтобы импортировать данные с помощью пользовательского интерфейса, откройте Инспектора Данных моделирования. Можно использовать Simulink.sdi.view
функционируйте, чтобы открыть Инспектора Данных моделирования от командного окна MATLAB. Затем нажмите кнопку Import.
В диалоговом окне Импорта выберите опцию Файла и импортируйте данные из файла в новый запуск. Кликните по папке, чтобы просмотреть файловую систему и выбрать файл, который вы хотите импортировать. Файл для этого примера называется CustomFile.xlsx
.
После того, как вы выбираете файл с расширением, которое соответствует одному или нескольким зарегистрированным пользовательским читателям, опция, чтобы выбрать читателя, которого вы хотите использовать, появляется в диалоговом окне. В этом примере можно выбрать между встроенным средством чтения файлов Microsoft Excel или пользовательским средством чтения, записанным для этого примера. По умолчанию пользовательский читатель выбран, когда каждый доступен для расширения выбранного файла.
Можно выбрать, какие сигналы вы хотите импортировать из файла. После делания вашего выбора нажмите Import. Данные импортированы к новому запуску под названием Imported_Data
.
Чтобы импортировать данные программно, можно использовать Simulink.sdi.createRun
функция. У Инспектора Данных моделирования есть встроенный читатель для файлов Microsoft Excel. Можно задать который читатель использовать, чтобы импортировать данные в вызове Simulink.sdi.createRun
функция. Когда вы не задаете читателя, вы хотите использовать, чтобы импортировать данные, Инспектор Данных моделирования использует первого пользовательского читателя, который поддерживает расширение файла.
Simulink.sdi.createRun('Custom File Run','file','CustomFile.xlsx','ExcelFirstColumnTimeReader');
После импортирования ваших данных можно использовать Инспектора Данных моделирования, чтобы смотреть и анализировать импортированные данные самостоятельно или вместе со связанными данными моделирования.