Если требуется визуализировать данные, сохраненные в формате данных или файла, который не поддерживается инспектором данных моделирования, можно использовать 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 = "ExcelFirstColumnTimeReader"
После регистрации пользовательского средства чтения файлов можно импортировать данные из файла в пользовательском формате с помощью пользовательского интерфейса инспектора данных моделирования или с помощью Simulink.sdi.createRun функция. В этом примере выполняется импорт простого набора данных из файла, содержащего четыре столбца данных. Пользовательское средство чтения файлов в этом примере всегда загружает первый столбец, в данном случае a, в качестве временных данных.

Чтобы импортировать данные с помощью пользовательского интерфейса, откройте инспектор данных моделирования. Вы можете использовать Simulink.sdi.view для открытия инспектора данных моделирования из окна команд MATLAB. Затем нажмите кнопку Импорт.

В диалоговом окне «Импорт» выберите параметр «Файл» и импортируйте данные из файла в новый прогон. Щелкните папку для просмотра файловой системы и выберите файл, который требуется импортировать. Файл для этого примера называется CustomFile.xlsx.
После выбора файла с расширением, соответствующим одному или нескольким зарегистрированным пользовательским устройствам чтения, в диалоговом окне появится опция выбора устройства чтения, которое требуется использовать. В этом примере можно выбрать встроенную программу чтения файлов Microsoft Excel или пользовательскую программу чтения, созданную для этого примера. По умолчанию настраиваемое средство чтения выбирается, если оно доступно для расширения выбранного файла.

Можно выбрать сигналы, которые требуется импортировать из файла. После выбора нажмите кнопку Импорт. Данные импортируются в новый прогон с именем Imported_Data.
Для программного импорта данных можно использовать Simulink.sdi.createRun функция. Инспектор данных моделирования имеет встроенную программу чтения для файлов Microsoft Excel. Можно указать, какой модуль чтения использовать для импорта данных в вызове Simulink.sdi.createRun функция. Если не указать устройство чтения, которое требуется использовать для импорта данных, инспектор данных моделирования использует первое пользовательское устройство чтения, поддерживающее расширение файла.
Simulink.sdi.createRun('Custom File Run','file','CustomFile.xlsx','ExcelFirstColumnTimeReader');
После импорта данных можно использовать инспектор данных моделирования для проверки и анализа импортированных данных самостоятельно или вместе со связанными данными моделирования.
