exponenta event banner

hasdata

Класс: matlab.io.datastore.SimulationDatastore
Пакет: matlab.io.datastore

Определение доступности данных для чтения

Синтаксис

tf = hasdata(dst)

Описание

tf = hasdata(dst) возвращает логический 1 (true), если имеются данные, доступные для чтения из хранилища данных (matlab.io.datastore.SimulationDatastore объект), указанный dst. В противном случае возвращается логическое значение 0 (false).

Входные аргументы

развернуть все

Хранилище входных данных, указанное как matlab.io.datastore.SimulationDatastore объект. Создание SimulationDatastore объект, см. matlab.io.datastore.SimulationDatastore.

Примеры

развернуть все

В этом примере показано, как регистрировать большие данные из моделирования, а также проверять и анализировать части этих данных, взаимодействуя с matlab.io.datastore.SimulationDatastore объект.

Вести журнал больших данных из модели

Открыть пример модели sldemo_fuelsys.

open_system('sldemo_fuelsys')

Выберите Параметры конфигурации > Импорт/экспорт данных > Данные набора данных журнала для файла.

set_param('sldemo_fuelsys','LoggingToFile','on')

Моделирование модели.

sim('sldemo_fuelsys')

Файл MAT out.mat отображается в текущей папке. Файл содержит данные для зарегистрированных сигналов, таких как fuel (который находится на корневом уровне модели).

В командной строке создайте DatasetRef объект, который ссылается на переменную регистрации по имени, sldemo_fuelsys_output.

DSRef = Simulink.SimulationData.DatasetRef('out.mat','sldemo_fuelsys_output');

Предварительный просмотр больших данных

Использовать фигурные скобки ({ и }) для извлечения сигнального элемента fuel, который является десятым элементом в DSRef, как Simulink.SimulationData.Signal объект, содержащий SimulationDatastore объект.

SimDataSig = DSRef{10};

Для упрощения взаимодействия с SimulationDatastore объект, который находится в Values имущества Signal объект, сохранение дескриптора в переменной с именем DStore.

DStore = SimDataSig.Values;

Используйте preview способ проверки первых пяти образцов зарегистрированных данных для fuel сигнал.

preview(DStore)
ans =

  10x1 timetable

         Time          Data 
    ______________    ______

    0 sec              1.209
    0.00056199 sec     1.209
    0.0033719 sec      1.209
    0.01 sec          1.1729
    0.02 sec          1.1409
    0.03 sec          1.1124
    0.04 sec          1.0873
    0.05 sec          1.0652
    0.055328 sec      1.0652
    0.055328 sec      1.0652

Проверка конкретного образца

Осмотреть 603-й образец зарегистрированного fuel данные.

Установите ReadSize имущество DStore к числу, которое, принимая во внимание ресурсы памяти, может переноситься компьютером. Например, установить ReadSize кому 200.

DStore.ReadSize = 200;

Прочитайте из хранилища данных три раза. Каждая операция считывания продвигает положение считывания на 200 выборок.

read(DStore);
read(DStore);
read(DStore);

Теперь, когда вы очень близко к 603-й выборке, набор ReadSize на меньшее число. Например, установить ReadSize кому 5.

DStore.ReadSize = 5;

Повторите чтение из хранилища данных.

read(DStore)
ans =

  5x1 timetable

      Time       Data 
    ________    ______

    5.79 sec    1.6097
    5.8 sec     1.6136
    5.81 sec    1.6003
    5.82 sec    1.5904
    5.83 sec    1.5832

Третья выборка считанных данных - 603-я выборка в хранилище данных.

Проверить более ранний образец

Осмотреть 403-й образец зарегистрированного fuel данные. Из-за предыдущих операций чтения хранилище данных теперь считывается начиная с 606-го образца, поэтому необходимо сбросить хранилище данных. Затем можно прочитать от первого образца до 403-го образца.

Используйте reset метод для сброса DStore.

reset(DStore);

Набор ReadSize кому 200 снова.

DStore.ReadSize = 200;

Дважды считывайте из хранилища данных, чтобы переместить положение считывания в 401-й образец.

read(DStore);
read(DStore);

Набор ReadSize кому 5 снова.

DStore.ReadSize = 5;

Чтение из хранилища данных.

read(DStore)
ans =

  5x1 timetable

      Time       Data  
    ________    _______

    3.85 sec      0.999
    3.86 sec    0.99219
    3.87 sec    0.98538
    3.88 sec    0.97858
    3.89 sec    0.97179

Извлечь несколько образцов

Извлекают образцы с 1001 по 1020 (всего 20 образцов).

Сбросьте хранилище данных.

reset(DStore)

Переход к выборке 1001.

DStore.ReadSize = 200;

for i = 1:5
    read(DStore);
end

Подготовьтесь к извлечению 20 образцов из хранилища данных.

DStore.ReadSize = 20;

Извлеките образцы с 1001 по 1020. Сохранение извлеченных данных в переменной с именем targetSamples.

targetSamples = read(DStore)
targetSamples =

  20x1 timetable

      Time       Data 
    ________    ______

    9.7 sec     1.5828
    9.71 sec    1.5733
    9.72 sec    1.5664
    9.73 sec    1.5614
    9.74 sec    1.5579
    9.75 sec    1.5553
    9.76 sec    1.5703
    9.77 sec     1.582
    9.78 sec    1.5913
    9.79 sec    1.5988
    9.8 sec      1.605
    9.81 sec    1.6101
    9.82 sec    1.6145
    9.83 sec    1.6184
    9.84 sec    1.6049
    9.85 sec     1.595
    9.86 sec    1.5877
    9.87 sec    1.5824
    9.88 sec    1.5785
    9.89 sec    1.5757

Найти максимальное значение данных в хранилище данных

Сбросьте хранилище данных.

reset(DStore)

Написать while цикл, с использованием hasdata способ для инкрементного анализа данных в порциях из 200 выборок.

DStore.ReadSize = 200;
runningMax = [];
while hasdata(DStore)
    tt = read(DStore);
    rawChunk = tt.Data;
    runningMax = max([rawChunk; runningMax]);
end

Теперь переменная runningMax сохраняет максимальное значение во всем хранилище данных.

runningMax
runningMax =

    1.6423

Представлен в R2017a