メインコンテンツ

このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。

未ファイナライズおよび未ソートのMDFファイルを扱う

この例では、ファイナライズされていない、またはソートされていない MDF ファイルを操作する方法を示します。この例で使用されている未完成の MDF ファイル (MDFUnfinalized.MF4) は、CSS Electronics の CANedge2 CAN バス データ ロガーによって記録されました。

未ファイナライズおよび未ソートのMDFファイルの概要

予期しない電源切断やアプリケーション エラーにより、MDF ファイル作成ツールが早期に終了することがあります。このような場合、MDF ファイルは 未確定 状態のままになる可能性があり、ASAM MDF 規格の特定の形式ルールに違反したり、読み取り操作中にデータが失われたりする可能性があります。

一般に、データ グループはソートすることも、ソートしないこともできます。一部の記録ツールでは、記録の完了後にソートせずに、ソートされていない MDF ファイルを書き込みます。ソートされたデータ グループには複数のチャネル グループを含めることはできませんが、ソートされていないデータ グループには複数のチャネル グループを含めることができます。MDF ファイル内のすべてのデータ グループがソートされている場合、MDF ファイルは ソート済み になります。少なくとも 1 つのデータ グループがソートされていない場合、MDF ファイル全体が ソートされていない になります。

ファイナライズされていない MDF ファイルは、ソート済みまたは未ソートのいずれかになります。逆に、ソートされていない MDF ファイルは、ファイナライズ済みまたは未ファイナライズのいずれかになります。

MATLAB で未ファイナライズ MDF ファイルを使用する

ファイナライズされていないファイルには形式の問題があり、操作の信頼性が低下する可能性があるため、mdfInfo 関数を使用してファイナライズされていない MDF ファイルのメタデータにアクセスしようとするとエラーがスローされます。

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

関数 mdfFinalize を使用して、未確定の MDF ファイルを確定することができます。MDF ファイルがファイナライズされておらず、ソートもされていない場合、mdfFinalize はファイナライズ プロセスの一環としてファイルのソートも試みます。

MATLAB でファイナライズされているがソートされていない MDF ファイルを使用する

MDF ファイルがファイナライズされているがソートされていない場合は、mdfInfo 関数を使用してファイルのメタデータにアクセスできますが、mdfRead 関数を使用してソートされていないファイルからデータを読み取ろうとするとエラーが発生する可能性があります。

関数 mdfSort を使用して、完成したがソートされていない MDF ファイルをソートできます。ソートされていない MDF ファイルもファイナライズされていない場合、そのファイルで mdfSort を使用するとエラーが発生します。代わりに、mdfFinalize を使用して、同時にファイルのファイナライズとソートを行います。

この例では、ファイナライズされていない MDF ファイルでの mdfFinalize の使用法を引き続き示します。ただし、同様のワークフローに従って、最終処理済みだがソートされていない MDF ファイルで mdfSort 関数を使用することができます。

MDF ファイルをその場でファイナライズする

mdfFinalize 関数を使用すると、ソース ファイルをファイナライズされたコピーで上書きすることで、ファイナライズされていない MDF ファイルをその場でファイナライズできます。

デモンストレーションの目的で、copyfile を使用して元のファイルのコピーを作成し、後続のファイナライズ操作で追加のコピー MDFFinalizedInPlace.MF4 を使用します。

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

ソース ファイル名 MDFFinalizedInPlace.MF4 のみを指定して mdfFinalize を使用し、自分自身を上書きする最終的なコピーを作成します。この関数は、完成したファイルの完全なパスを返します。

finalizedPath1 = mdfFinalize("MDFFinalizedInPlace.MF4")
finalizedPath1 = 
"/tmp/Bdoc25a_2864802_1974203/tp6f7be44e/vnt-ex16754708/MDFFinalizedInPlace.MF4"

MDFFinalizedInPlace.MF4 は完成しており、mdfInfo 関数を使用してアクセスできるようになりました。mdfFinalize によって返される完全なパスを指定できます。あるいは、MATLAB ® パス上にある場合はファイル名を指定します。

info1 = mdfInfo(finalizedPath1)
info1 = 
  MDFInfo with properties:

   File Details
                  Name: "MDFFinalizedInPlace.MF4"
                  Path: "/tmp/Bdoc25a_2864802_1974203/tp6f7be44e/vnt-ex16754708/MDFFinalizedInPlace.MF4"
                Author: ""
            Department: ""
               Project: ""
               Subject: ""
               Comment: ""
               Version: "4.11"
      InitialTimestamp: 2021-04-12 10:06:43.000000000

   Creator Details
     ProgramIdentifier: "CE     "
     CreatorVendorName: ""
       CreatorToolName: "CE"
    CreatorToolVersion: "01.04.01"
       CreatorUserName: ""
        CreatorComment: "Creation and logging of data."

   File Contents
            Attachment: [0×7 table]
     ChannelGroupCount: 8
                 Event: [0×8 eventtable]

mdfChannelGroupInfo 関数を使用して、完成したファイル内のすべてのチャネル グループに関する情報を取得します。各チャネル グループの Sorted 値を検査します。すべてのチャネル グループがソートされていることに注意してください。

chanGrpInfo1 = mdfChannelGroupInfo(finalizedPath1)
chanGrpInfo1=8×13 table
    GroupNumber       AcquisitionName         Comment      NumSamples    DataSize    Sorted    SourceName    SourcePath    SourceComment    SourceType    SourceBusType    SourceBusChannelNumber    SourceSimulated
    ___________    _____________________    ___________    __________    ________    ______    __________    __________    _____________    __________    _____________    ______________________    _______________

         1         LIN_TransmissionError    <undefined>           0            0     true         LIN           LIN             LIN            Bus             LIN                   0                    false     
         2         LIN_SyncError            <undefined>           0            0     true         LIN           LIN             LIN            Bus             LIN                   0                    false     
         3         LIN_TransmissionError    <undefined>           0            0     true         LIN           LIN             LIN            Bus             LIN                   0                    false     
         4         LIN_Frame                <undefined>           0            0     true         LIN           LIN             LIN            Bus             LIN                   0                    false     
         5         LIN_ChecksumError        <undefined>           0            0     true         LIN           LIN             LIN            Bus             LIN                   0                    false     
         6         CAN_RemoteFrame          <undefined>           0            0     true         CAN           CAN             CAN            Bus             CAN                   0                    false     
         7         CAN_ErrorFrame           <undefined>           0            0     true         CAN           CAN             CAN            Bus             CAN                   0                    false     
         8         CAN_DataFrame            <undefined>      118037      2596814     true         CAN           CAN             CAN            Bus             CAN                   0                    false     

MDF ファイルが完成してソートされると、mdfRead 関数を使用してデータを抽出するなど、すべての MDF 機能を使用できるようになります。

MDF ファイルを別の場所でファイナライズする

mdfFinalize 関数を使用すると、別の最終コピーを作成して、最終処理されていない MDF ファイルをアウトオブプレースで最終処理することもできます。ソースファイル名と送信先ファイル名の両方を指定して関数を呼び出します。

finalizedPath2 = mdfFinalize("MDFUnfinalized.MF4", "MDFFinalizedOutOfPlace.MF4")
finalizedPath2 = 
"/tmp/Bdoc25a_2864802_1974203/tp6f7be44e/vnt-ex16754708/MDFFinalizedOutOfPlace.MF4"

MDFFinalizedOutOfPlace.MF4 は新しく作成された最終的なコピーであり、mdfInfo 関数を使用してアクセスできます。

info2 = mdfInfo(finalizedPath2)
info2 = 
  MDFInfo with properties:

   File Details
                  Name: "MDFFinalizedOutOfPlace.MF4"
                  Path: "/tmp/Bdoc25a_2864802_1974203/tp6f7be44e/vnt-ex16754708/MDFFinalizedOutOfPlace.MF4"
                Author: ""
            Department: ""
               Project: ""
               Subject: ""
               Comment: ""
               Version: "4.11"
      InitialTimestamp: 2021-04-12 10:06:43.000000000

   Creator Details
     ProgramIdentifier: "CE     "
     CreatorVendorName: ""
       CreatorToolName: "CE"
    CreatorToolVersion: "01.04.01"
       CreatorUserName: ""
        CreatorComment: "Creation and logging of data."

   File Contents
            Attachment: [0×7 table]
     ChannelGroupCount: 8
                 Event: [0×8 eventtable]

mdfChannelGroupInfo 関数を使用して、最終ファイル内のすべてのチャネル グループに関する情報を取得します。各チャネル グループの Sorted 値を検査します。すべてのチャネル グループがソートされていることに注意してください。

chanGrpInfo2 = mdfChannelGroupInfo(finalizedPath2)
chanGrpInfo2=8×13 table
    GroupNumber       AcquisitionName         Comment      NumSamples    DataSize    Sorted    SourceName    SourcePath    SourceComment    SourceType    SourceBusType    SourceBusChannelNumber    SourceSimulated
    ___________    _____________________    ___________    __________    ________    ______    __________    __________    _____________    __________    _____________    ______________________    _______________

         1         LIN_TransmissionError    <undefined>           0            0     true         LIN           LIN             LIN            Bus             LIN                   0                    false     
         2         LIN_SyncError            <undefined>           0            0     true         LIN           LIN             LIN            Bus             LIN                   0                    false     
         3         LIN_TransmissionError    <undefined>           0            0     true         LIN           LIN             LIN            Bus             LIN                   0                    false     
         4         LIN_Frame                <undefined>           0            0     true         LIN           LIN             LIN            Bus             LIN                   0                    false     
         5         LIN_ChecksumError        <undefined>           0            0     true         LIN           LIN             LIN            Bus             LIN                   0                    false     
         6         CAN_RemoteFrame          <undefined>           0            0     true         CAN           CAN             CAN            Bus             CAN                   0                    false     
         7         CAN_ErrorFrame           <undefined>           0            0     true         CAN           CAN             CAN            Bus             CAN                   0                    false     
         8         CAN_DataFrame            <undefined>      118037      2596814     true         CAN           CAN             CAN            Bus             CAN                   0                    false     

MDF ファイルが完成してソートされると、mdfRead 関数を使用してデータを抽出するなど、すべての MDF 機能を使用できるようになります。

作成されたMDFファイルを削除する

この例で作成された MDF ファイルを削除して、作業ディレクトリをクリーンアップします。

delete MDFFinalizedInPlace.MF4 MDFFinalizedOutOfPlace.MF4

まとめ

mdfFinalize と同様に、mdfSort 関数はインプレースとアウトオブプレースの両方のソート操作をサポートします。同じワークフローを適用して、並べ替えられていない MDF ファイルを並べ替えることもできます。

要約すると:

  • MDF ファイルがファイナライズされソートされている場合、そのファイル情報は mdfInfo を使用してアクセスでき、そのデータは mdfRead を使用して読み取ることができます。

  • MDF ファイルがファイナライズされ、ソートされていない場合、ファイル情報にアクセスすることはできますが、データを読み取ることはできません。mdfSort を使用してファイルをソートします。

  • MDF ファイルがファイナライズされていない場合は、ファイル情報もデータもアクセスできません。mdfFinalize を使用してファイルを完成させます。