Когда вы хотите визуализировать данные, хранящиеся в формате данных или файла, Данные Моделирования Inspector не поддерживает, можно использовать io.reader
класс, чтобы записать свой собственный пользовательский инструмент чтения файлов для Данные Моделирования Inspector. Этот пример объясняет части определения класса для пользовательского средства чтения файлов и демонстрирует, как зарегистрировать устройство чтения в Данные Моделирования Inspector. Откройте ExcelFirstColumnTimeReader.m
файл для просмотра полного определения класса.
Напишите определение класса, которое задает, как ваш пользовательский считыватель извлекает соответствующие данные и метаданные из файлов и переменных, которые используют пользовательские форматы. Сохраните файл определения класса в расположении на MATLAB™ пути.
Пользовательская программа чтения в этом примере использует readtable
функция для загрузки данных из файла Microsoft Excel™ и использует первый столбец в файле в качестве временных данных.
Определение класса начинается с наследования от io.reader
класс, за которым следуют определения методов, которые возвращают требуемые и релевантные данные и метаданные.
classdef ExcelFirstColumnTimeReader < io.reader
Каждый пользовательский считыватель должен задать getName
, getTimeValues
, и getDataValues
методы. Дополнительные методы доступны для доступа к некоторым метаданным, которые могут существовать в пользовательском файле. Определение класса для этого примера задает абстрактные методы, а также supportsFile
и getChildren
методы.
The 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
The getTimeValues
метод считывает данные в файле с помощью readtable
и возвращает данные в первом столбце для использования Данных моделирования Inspector в качестве временных данных.
function timeVals = getTimeValues(obj) timeVals = []; if ~isempty(obj.VariableName) t = readtable(obj.FileName); timeName = t.Properties.VariableNames{1}; timeVals = t.(timeName); end end
The 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
The getDataValues
метод возвращает данные в каждом столбце, который имеет данные, кроме первого, как данные о сигнале. Доступ к данным для каждого сигнала осуществляется с помощью VariableName
свойство для соответствующего объекта, возвращенного getChildren
способ.
function dataVals = getDataValues(obj) dataVals = []; if ~isempty(obj.VariableName) t = readtable(obj.FileName); dataVals = t.(obj.VariableName); end end
После записи файла определения класса для пользовательского устройства чтения данных необходимо зарегистрировать устройство чтения в Данные Моделирования Inspector, прежде чем использовать его для импорта данных. Данные моделирования Inspector не хранит зарегистрированные считыватели между сеансами работы с MATLAB, поэтому необходимо зарегистрировать пользовательский считыватель в начале каждого нового сеанса работы с MATLAB. Можно зарегистрировать пользовательский считыватель, чтобы считать данные из рабочей области или чтобы считать данные из файла. Чтобы зарегистрировать средство чтения файлов в этом примере, используйте registerFileReader
способ.
registerFileReader(ExcelFirstColumnTimeReader,[".xlsx" "xls"]);
Чтобы подтвердить, что программа чтения файлов зарегистрирована, используйте io.reader.getRegisteredFileReaders
способ.
io.reader.getRegisteredFileReaders
ans = "ExcelFirstColumnTimeReader"
После регистрации пользовательского средства чтения файлов можно импортировать данные из файла в пользовательском формате с помощью пользовательского интерфейса Данные Моделирования Inspector или с помощью Simulink.sdi.createRun
функция. Этот пример импортирует простой набор данных из файла, который содержит четыре столбца данных. Средство чтения пользовательских файлов в этом примере всегда загружает первый столбец, в этом случае a
, как временные данные.
Чтобы импортировать данные с помощью пользовательского интерфейса, откройте Данные моделирования Inspector. Можно использовать Simulink.sdi.view
чтобы открыть Данные моделирования Inspector из Командного окна MATLAB. Затем нажмите кнопку Импорт.
В диалоговом окне Import выберите опцию File и импортируйте данные из файла в новый запуск. Щелкните папку, чтобы просмотреть файловую систему и выбрать файл, который вы хотите импортировать. Файл для этого примера называется CustomFile.xlsx
.
После выбора файла с расширением, соответствующим одному или нескольким зарегистрированным пользовательским считывателям, в диалоговом окне появится опция выбора считывателя, который необходимо использовать. В этом примере можно выбрать между встроенным средством чтения файлов Microsoft Excel или пользовательским средством чтения, написанным для этого примера. По умолчанию настраиваемая программа чтения выбирается, когда она доступна для расширения выбранного файла.
Можно выбрать сигналы, которые вы хотите импортировать из файла. После выбора нажмите кнопку Импорт. Данные импортируются в новый запуск с именем Imported_Data
.
Для программного импорта данных можно использовать Simulink.sdi.createRun
функция. В Данные моделирования Inspector встроена программа чтения файлов Microsoft Excel. Можно указать, какой считыватель использовать для импорта данных в вызове в Simulink.sdi.createRun
функция. Когда вы не задаете считыватель, который хотите использовать для импорта данных, Данные Моделирования Inspector используют первый пользовательский считыватель, поддерживающий расширение файла.
Simulink.sdi.createRun('Custom File Run','file','CustomFile.xlsx','ExcelFirstColumnTimeReader');
После импорта данных можно использовать Simulation Data Inspector, чтобы проверить и проанализировать импортированные данные самостоятельно или вместе со связанными данными моделирования.