В этом примере показано, как работать с незавершенными и неотсортированными MDF-файлами. Незавершенный MDF-файл используется в этом примере, MDFUnfinalized.MF4
, был зарегистрирован регистратором данных шины CAN CANedge2 от CSS Electronics.
Иногда инструмент создателя MDF-файла может испытать преждевременное завершение, вызванное неожиданным выключением питания или ошибкой приложения. В таких случаях MDF-файл можно оставить в незавершенном состоянии, возможно нарушив определенные правила формата стандарта ASAM MDF или вызвав потерю данных во время операций чтения.
В общем случае группа данных может быть или отсортирована или не отсортирована. Некоторые инструменты записи пишут неотсортированные MDF-файлы, не сортируя их после того, как запись завершится. Отсортированная группа данных не может содержать больше чем одну группу канала, в то время как неотсортированная группа данных может содержать несколько групп канала. Если все группы данных в MDF-файле сортируются, MDF-файл сортируется; если по крайней мере одна группа данных не отсортирована, целый MDF-файл не отсортирован.
Незавершенный MDF-файл может быть или отсортирован или не отсортирован. С другой стороны неотсортированный MDF-файл может быть или завершен или не завершен.
Поскольку незавершенные файлы могут содержать проблемы формата и привести к ненадежным операциям чтения, ошибка выдана при попытке открыть незавершенный 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-файл завершен, но не отсортирован, можно открыть файл с помощью mdf
функция, но ошибка может произойти, если вы впоследствии пытаетесь считать данные из неотсортированного файла с помощью read
функция.
Можно отсортировать завершенный, но неотсортированный MDF-файл с помощью функционального mdfSort
. Если неотсортированный MDF-файл также не завершен, с помощью mdfSort
на файле вызывает ошибку. Вместо этого используйте mdfFinalize
завершить и отсортировать файл одновременно.
Этот пример продолжает демонстрировать использование mdfFinalize
с незавершенными MDF-файлами. Однако можно следовать за подобным рабочим процессом, чтобы использовать mdfSort
функция на завершенных но неотсортированных 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
функция.
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-файлам, созданным в этом примере путем очищения их переменных из рабочей области.
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
завершить и отсортировать файл.