Работа с незавершенными и неотсортированными MDF-файлами

В этом примере показано, как работать с незавершенными и неотсортированными MDF-файлами. Незавершенный MDF-файл используется в этом примере, MDFUnfinalized.MF4, был зарегистрирован регистратором данных шины CAN CANedge2 от CSS Electronics.

Введение в незавершенные и неотсортированные MDF-файлы

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

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

Незавершенный MDF-файл может быть или отсортирован или не отсортирован. С другой стороны неотсортированный MDF-файл может быть или завершен или не завершен.

Используйте незавершенные MDF-файлы в MATLAB

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

try
    m = mdf("MDFUnfinalized.MF4")
catch ME
    disp(ME.message)
end
Cannot perform operation on unfinalized file. Use mdfFinalize to create a finalized file.

Можно завершить незавершенный MDF-файл с помощью функционального mdfFinalize. Если MDF-файл и не завершен и не отсортирован, mdfFinalize также попытки отсортировать файл как часть процесса завершения.

Используйте завершенные но неотсортированные MDF-файлы в MATLAB

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

Можно отсортировать завершенный, но неотсортированный MDF-файл с помощью функционального mdfSort. Если неотсортированный MDF-файл также не завершен, с помощью mdfSort на файле вызывает ошибку. Вместо этого используйте mdfFinalize завершить и отсортировать файл одновременно.

Этот пример продолжает демонстрировать использование mdfFinalize с незавершенными MDF-файлами. Однако можно следовать за подобным рабочим процессом, чтобы использовать mdfSort функция на завершенных но неотсортированных MDF-файлах.

Завершите оперативный MDF-файл

mdfFinalize функция позволяет вам завершать незавершенный MDF-файл на месте путем перезаписи исходного файла с завершенной копией.

В демонстрационных целях сделайте копию исходного файла с помощью copyfile, и используйте дополнительную копию MDFFinalizedInPlace.MF4 в последующей операции завершения.

copyfile("MDFUnfinalized.MF4", "MDFFinalizedInPlace.MF4")

Используйте mdfFinalize только с именем исходного файла MDFFinalizedInPlace.MF4 заданный, чтобы создать завершенную копию, которая перезаписывает себя. Функция возвращает полный путь завершенного файла.

finalizedPath1 = mdfFinalize("MDFFinalizedInPlace.MF4")
finalizedPath1 = 
'C:\Users\michellw\Documents\MATLAB\Examples\vnt-ex16754708\MDFFinalizedInPlace.MF4'

MDFFinalizedInPlace.MF4 теперь завершен и может быть открыт с помощью mdf функция. Можно задать полный путь, возвращенный mdfFinalize. В качестве альтернативы задайте имя файла, если оно расположено на пути MATLAB.

m1 = mdf(finalizedPath1)
m1 = 
  MDF with properties:

   File Details
                 Name: 'MDFFinalizedInPlace.MF4'
                 Path: 'C:\Users\michellw\Documents\MATLAB\Examples\vnt-ex16754708\MDFFinalizedInPlace.MF4'
               Author: ''
           Department: ''
              Project: ''
              Subject: ''
              Comment: ''
              Version: '4.11'
             DataSize: 2596814
     InitialTimestamp: 2021-04-12 10:06:43.000000000

   Creator Details
    ProgramIdentifier: 'CE     '
              Creator: [1×1 struct]

   File Contents
           Attachment: [0×1 struct]
         ChannelNames: {8×1 cell}
         ChannelGroup: [1×8 struct]

   Options
           Conversion: Numeric

Смотрите Sorted поле каждого struct группы канала. Обратите внимание на то, что все группы канала сортируются теперь.

[m1.ChannelGroup.Sorted]
ans = 1×8 logical array

   1   1   1   1   1   1   1   1

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

Завершите неуместный MDF-файл

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

finalizedPath2 = mdfFinalize("MDFUnfinalized.MF4", "MDFFinalizedOutOfPlace.MF4")
finalizedPath2 = 
'C:\Users\michellw\Documents\MATLAB\Examples\vnt-ex16754708\MDFFinalizedOutOfPlace.MF4'

MDFFinalizedOutOfPlace.MF4 недавно созданная завершенная копия и может быть открыта с помощью mdf функция.

m2 = mdf(finalizedPath2)
m2 = 
  MDF with properties:

   File Details
                 Name: 'MDFFinalizedOutOfPlace.MF4'
                 Path: 'C:\Users\michellw\Documents\MATLAB\Examples\vnt-ex16754708\MDFFinalizedOutOfPlace.MF4'
               Author: ''
           Department: ''
              Project: ''
              Subject: ''
              Comment: ''
              Version: '4.11'
             DataSize: 2596814
     InitialTimestamp: 2021-04-12 10:06:43.000000000

   Creator Details
    ProgramIdentifier: 'CE     '
              Creator: [1×1 struct]

   File Contents
           Attachment: [0×1 struct]
         ChannelNames: {8×1 cell}
         ChannelGroup: [1×8 struct]

   Options
           Conversion: Numeric

Смотрите Sorted поле каждого struct группы канала. Обратите внимание на то, что все группы канала сортируются теперь.

[m2.ChannelGroup.Sorted]
ans = 1×8 logical array

   1   1   1   1   1   1   1   1

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

Закройте и удалите созданные MDF-файлы

Закройте доступ к завершенным MDF-файлам, созданным в этом примере путем очищения их переменных из рабочей области.

clear m1 m2

Удалите MDF-файлы, созданные в этом примере, чтобы очистить рабочую директорию.

delete MDFFinalizedInPlace.MF4 MDFFinalizedOutOfPlace.MF4

Заключение

Подобно mdfFinalize, mdfSort функционируйте операции сортировки поддержек, и оперативные и неуместные. Можно применить тот же рабочий процесс, чтобы отсортировать неотсортированные MDF-файлы.

Подводить итог:

  • Если MDF-файл завершен и отсортирован, он может быть открыт с помощью mdf и данные могут быть считаны с помощью read.

  • Если MDF-файл завершен и не отсортирован, он может быть открыт с помощью mdf но данные не могут быть считаны с помощью read. Используйте mdfSort отсортировать файл.

  • Если MDF-файл не завершен и отсортирован, он не может быть открыт с помощью mdf. Используйте mdfFinalize завершить файл.

  • Если MDF-файл не завершен и не отсортирован, он не может быть открыт с помощью mdf. Используйте mdfFinalize завершить и отсортировать файл.