В этом примере показано, как работать с незавершенными и неотсортированными 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 завершить и отсортировать файл.