exponenta event banner

Использование файлов MDF через хранилище данных MDF

В этом примере показано, как использовать функцию хранилища данных MDF панели инструментов сети транспортных средств для быстрой и эффективной обработки набора данных, распределенного по коллекции нескольких файлов MDF. Этот рабочий процесс также полезен, когда слишком много данных не может поместиться в доступную память.

Доступ к файлам MDF в хранилище данных

Найдите коллекцию файлов MDF, представляющих записанную в журнал информацию из нескольких тестовых последовательностей. Обратите внимание, что файлы MDF, используемые хранилищем данных MDF в качестве набора, должны иметь одну и ту же группу каналов и структуру содержимого канала.

dir('File*.mf4')
File01.mf4  File02.mf4  File03.mf4  File04.mf4  File05.mf4  

Создание хранилища данных MDF

Хранилище данных MDF создается путем выбора папки, содержащей коллекцию файлов MDF. В этом случае укажите все файлы в текущей рабочей папке.

mds = mdfDatastore(pwd)
mds = 

  MDFDatastore with properties:

                         Files: {
                                ' ...\home\jpyle\documents\MATLAB\examples\vnt-ex10761765\File01.mf4';
                                ' ...\home\jpyle\documents\MATLAB\examples\vnt-ex10761765\File02.mf4';
                                ' ...\home\jpyle\documents\MATLAB\examples\vnt-ex10761765\File03.mf4'
                                 ... and 2 more
                                }
                 ChannelGroups: 
                                ChannelGroupNumber    AcquisitionName        Comment        ... and 4 more columns
                                __________________    _______________    _______________        

                                        1                   ''           'Integer Types'      
                                        2                   ''           'Float Types'        


                      Channels: 
                                ChannelGroupNumber                ChannelName                 DisplayName    ... and 9 more columns
                                __________________    ____________________________________    ___________        

                                        1             'Sigend_Int16_LE_Offset_32'                 ''           
                                        1             'Unsigend_UInt32_LE_Master_Offset_0'        ''           
                                        2             'Float_32_LE_Offset_64'                     ''           

                                ... and 1 more rows
          SelectedChannelNames: {
                                'Sigend_Int16_LE_Offset_32';
                                'Unsigend_UInt32_LE_Master_Offset_0'
                                }
    SelectedChannelGroupNumber: 1
                      ReadSize: 'file'

Конфигурирование хранилища данных MDF

Несколько опций позволяют управлять тем, какие данные считываются из файлов MDF и как выполняются чтения. В этом случае по умолчанию используется первая группа каналов. Следует отметить, что одновременно хранилище данных может выбирать только одну группу каналов. Можно также указать определенные каналы в выбранной группе каналов для чтения. В этом случае все каналы считываются по умолчанию.

mds.SelectedChannelGroupNumber
mds.SelectedChannelNames
ans =

     1


ans = 

  2×1 string array

    "Sigend_Int16_LE_Offset_32"
    "Unsigend_UInt32_LE_Master_Offset_0"

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

Использование preview можно получить быстрый просмотр данных, доступных в наборе файлов. Предварительный просмотр всегда возвращает до восьми точек данных из первого файла в хранилище данных.

preview(mds)
ans =

  8×2 timetable

    Time     Sigend_Int16_LE_Offset_32    Unsigend_UInt32_LE_Master_Offset_0
    _____    _________________________    __________________________________

    0 sec                0                                0                 
    1 sec                1                                1                 
    2 sec                2                                2                 
    3 sec                3                                3                 
    4 sec                4                                4                 
    5 sec                5                                5                 
    6 sec                6                                6                 
    7 sec                7                                7                 

Использование readall хранилища данных MDF

Вы можете использовать readall функция для считывания всего содержимого данных в одном вызове. Это эффективный способ чтения из многих файлов, когда набор данных помещается в доступную память. После выполнения readall, хранилище данных сбрасывается в начало набора данных.

data = readall(mds);
data(1:5,:)
ans =

  5×2 timetable

    Time     Sigend_Int16_LE_Offset_32    Unsigend_UInt32_LE_Master_Offset_0
    _____    _________________________    __________________________________

    0 sec                0                                0                 
    1 sec                1                                1                 
    2 sec                2                                2                 
    3 sec                3                                3                 
    4 sec                4                                4                 

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

Вы можете использовать read для получения данных из набора файлов. По умолчанию операции чтения из хранилища данных MDF обеспечивают считывание всего объема данных файла за один вызов. Мощность хранилища данных зависит от последовательного чтения нескольких файлов в наборе файлов. При чтении хранилище данных автоматически выполняет переход от одного файла к другому до тех пор, пока не будут считаны все данные из всех файлов.

for ii = 1:3
    data = read(mds);
    whos('data')
    data(1:5,:)
end
  Name          Size             Bytes  Class        Attributes

  data      10000x2             241767  timetable              


ans =

  5×2 timetable

    Time     Sigend_Int16_LE_Offset_32    Unsigend_UInt32_LE_Master_Offset_0
    _____    _________________________    __________________________________

    0 sec                0                                0                 
    1 sec                1                                1                 
    2 sec                2                                2                 
    3 sec                3                                3                 
    4 sec                4                                4                 

  Name          Size             Bytes  Class        Attributes

  data      10000x2             241767  timetable              


ans =

  5×2 timetable

    Time     Sigend_Int16_LE_Offset_32    Unsigend_UInt32_LE_Master_Offset_0
    _____    _________________________    __________________________________

    0 sec                0                                0                 
    1 sec                1                                1                 
    2 sec                2                                2                 
    3 sec                3                                3                 
    4 sec                4                                4                 

  Name          Size             Bytes  Class        Attributes

  data      10000x2             241767  timetable              


ans =

  5×2 timetable

    Time     Sigend_Int16_LE_Offset_32    Unsigend_UInt32_LE_Master_Offset_0
    _____    _________________________    __________________________________

    0 sec                0                                0                 
    1 sec                1                                1                 
    2 sec                2                                2                 
    3 sec                3                                3                 
    4 sec                4                                4                 

Сброс хранилища данных MDF

В любое время можно позвонить по телефону reset для повторного запуска в начале набора данных.

reset(mds)

Настройка хранилища данных MDF для чтения по записи данных

Вы можете использовать ReadSize для указания объема данных, считываемых при каждом вызове. ReadSize может быть задано как числовое значение для считывания фиксированного числа точек данных. ReadSize позволяет управлять объемом данных, загружаемых в память, если набор данных превышает объем доступной памяти. Мы рекомендуем использовать пользовательские размеры чтения, которые достаточно малы для размещения в памяти, но все же как можно больше, чтобы сократить затраты на обработку и повысить производительность.

mds.ReadSize = 5
for ii = 1:3
    data = read(mds)
end
mds = 

  MDFDatastore with properties:

                         Files: {
                                ' ...\home\jpyle\documents\MATLAB\examples\vnt-ex10761765\File01.mf4';
                                ' ...\home\jpyle\documents\MATLAB\examples\vnt-ex10761765\File02.mf4';
                                ' ...\home\jpyle\documents\MATLAB\examples\vnt-ex10761765\File03.mf4'
                                 ... and 2 more
                                }
                 ChannelGroups: 
                                ChannelGroupNumber    AcquisitionName        Comment        ... and 4 more columns
                                __________________    _______________    _______________        

                                        1                   ''           'Integer Types'      
                                        2                   ''           'Float Types'        


                      Channels: 
                                ChannelGroupNumber                ChannelName                 DisplayName    ... and 9 more columns
                                __________________    ____________________________________    ___________        

                                        1             'Sigend_Int16_LE_Offset_32'                 ''           
                                        1             'Unsigend_UInt32_LE_Master_Offset_0'        ''           
                                        2             'Float_32_LE_Offset_64'                     ''           

                                ... and 1 more rows
          SelectedChannelNames: {
                                'Sigend_Int16_LE_Offset_32';
                                'Unsigend_UInt32_LE_Master_Offset_0'
                                }
    SelectedChannelGroupNumber: 1
                      ReadSize: 5


data =

  5×2 timetable

    Time     Sigend_Int16_LE_Offset_32    Unsigend_UInt32_LE_Master_Offset_0
    _____    _________________________    __________________________________

    0 sec                0                                0                 
    1 sec                1                                1                 
    2 sec                2                                2                 
    3 sec                3                                3                 
    4 sec                4                                4                 


data =

  5×2 timetable

    Time     Sigend_Int16_LE_Offset_32    Unsigend_UInt32_LE_Master_Offset_0
    _____    _________________________    __________________________________

    5 sec                5                                5                 
    6 sec                6                                6                 
    7 sec                7                                7                 
    8 sec                8                                8                 
    9 sec                9                                9                 


data =

  5×2 timetable

     Time     Sigend_Int16_LE_Offset_32    Unsigend_UInt32_LE_Master_Offset_0
    ______    _________________________    __________________________________

    10 sec               10                                10                
    11 sec               11                                11                
    12 sec               12                                12                
    13 sec               13                                13                
    14 sec               14                                14                

Настройка хранилища данных MDF, считываемого временной меткой данных

Можно также указать ReadSize как длительность считывания точек данных по прошедшему времени. Обратите внимание, что при изменении типа считывания хранилище данных сбрасывается в начало набора данных.

mds.ReadSize = seconds(5)
for ii = 1:3
    data = read(mds)
end
mds = 

  MDFDatastore with properties:

                         Files: {
                                ' ...\home\jpyle\documents\MATLAB\examples\vnt-ex10761765\File01.mf4';
                                ' ...\home\jpyle\documents\MATLAB\examples\vnt-ex10761765\File02.mf4';
                                ' ...\home\jpyle\documents\MATLAB\examples\vnt-ex10761765\File03.mf4'
                                 ... and 2 more
                                }
                 ChannelGroups: 
                                ChannelGroupNumber    AcquisitionName        Comment        ... and 4 more columns
                                __________________    _______________    _______________        

                                        1                   ''           'Integer Types'      
                                        2                   ''           'Float Types'        


                      Channels: 
                                ChannelGroupNumber                ChannelName                 DisplayName    ... and 9 more columns
                                __________________    ____________________________________    ___________        

                                        1             'Sigend_Int16_LE_Offset_32'                 ''           
                                        1             'Unsigend_UInt32_LE_Master_Offset_0'        ''           
                                        2             'Float_32_LE_Offset_64'                     ''           

                                ... and 1 more rows
          SelectedChannelNames: {
                                'Sigend_Int16_LE_Offset_32';
                                'Unsigend_UInt32_LE_Master_Offset_0'
                                }
    SelectedChannelGroupNumber: 1
                      ReadSize: 5 sec


data =

  5×2 timetable

    Time     Sigend_Int16_LE_Offset_32    Unsigend_UInt32_LE_Master_Offset_0
    _____    _________________________    __________________________________

    0 sec                0                                0                 
    1 sec                1                                1                 
    2 sec                2                                2                 
    3 sec                3                                3                 
    4 sec                4                                4                 


data =

  5×2 timetable

    Time     Sigend_Int16_LE_Offset_32    Unsigend_UInt32_LE_Master_Offset_0
    _____    _________________________    __________________________________

    5 sec                5                                5                 
    6 sec                6                                6                 
    7 sec                7                                7                 
    8 sec                8                                8                 
    9 sec                9                                9                 


data =

  5×2 timetable

     Time     Sigend_Int16_LE_Offset_32    Unsigend_UInt32_LE_Master_Offset_0
    ______    _________________________    __________________________________

    10 sec               10                                10                
    11 sec               11                                11                
    12 sec               12                                12                
    13 sec               13                                13                
    14 sec               14                                14