ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

デバッグ: 情報をディスクに記録

はじめに

情報をディスクに保存するとシリアル ポート セッションを永続的に記録できるため、アプリケーションを簡単にデバッグできます。シリアル ポート オブジェクトがデバイスに接続されている場合は、次の情報をディスク ファイルに記録できます。

  • デバイスに書き込まれる値の数、デバイスから読み取られる値の数、値のデータ型

  • デバイスに書き込まれるデータ、デバイスから読み取られるデータ

  • イベント情報

記録プロパティ

関数 record を使用してディスク ファイルに情報を記録します。以下の表に、情報をディスクに記録する操作に関連するプロパティを示します。

記録プロパティ

プロパティ名説明

RecordDetail

レコード ファイルに保存される情報量

RecordMode

データとイベント情報が 1 つのレコード ファイルに保存されるか、複数のレコード ファイルに保存されるかを指定します

RecordName

レコード ファイル名

RecordStatus

データとイベント情報がレコード ファイルに保存されるかどうかを示します

例: 情報の記録について

この例では、デバイスへの書き込み値とデバイスからの読み取り値の数を記録し、ファイル myfile.txt に情報を保存します。

s = serial('COM1');
fopen(s)
s.RecordName = 'myfile.txt';
record(s)
fprintf(s,'*IDN?')
idn = fscanf(s);
fprintf(s,'RS232?')
rs232 = fscanf(s);

シリアル ポート セッションを終了します。

fclose(s)
delete(s)
clear s

コマンド ラインに myfile.txt を表示するには、type コマンドを使用します。

複数のレコード ファイルの作成

関数 record を使用して記録を開始する場合、RecordMode プロパティは新しいレコード ファイルが作成されるか、新しい情報が既存のレコード ファイルに追加されるかを決定します。

RecordModeoverwriteappend または index に設定できます。RecordModeoverwrite の場合、レコード ファイルは記録が開始されるたびに上書きされます。RecordModeappend の場合は、新しい情報が RecordMode で指定されたファイルに追加されます。RecordModeindex の場合は、記録が開始されるたびに別のディスク ファイルが作成されます。レコード ファイル名を指定するための規則については、次の節で説明します。

ファイル名の指定

RecordName プロパティを使用してレコード ファイル名を指定します。ファイル名がオペレーティング システムによってサポートされている限り、ディレクトリ パスを含む任意の値を RecordName に対して指定できます。さらに、RecordModeindex の場合、ファイル名は次の規則に従います。

  • インデックス付きのファイル名は、数字によって識別されます。この数字は、ファイル名の拡張子の前にあり、連続するレコード ファイルに対して 1 ずつ増加します。

  • 数字が初期のファイル名の一部として指定されていない場合、最初のレコード ファイルには関連する数字がありません。たとえば、RecordNamemyfile.txt の場合、myfile.txt は最初のレコード ファイルの名前で、myfile01.txt は 2 番目のレコード ファイルの名前となります。

  • RecordName は、レコード ファイルが閉じた後に更新されます。

  • 指定したファイル名が既に存在する場合は、既存のファイルが上書きされます。

レコード ファイル形式

レコード ファイルは、1 つまたは複数のシリアル ポート セッションの記録を含んだ ASCII ファイルです。RecordDetail プロパティを使用してレコード ファイルに保存される情報量を指定します。

RecordDetail は、compact または verbose になります。コンパクトなレコード ファイルには、デバイスに書き込まれる値の数、デバイスから読み取られる値の数、値のデータ型およびイベント情報が含まれます。詳細な (verbose) 記録ファイルには、デバイスとの間でやり取りしたデータとその前の情報が含まれます。

ucharschar、(u)int8、(u)int16、または (u)int32 で与えられた精度をもつバイナリ データは、16 進数形式で記録されます。たとえば、整数値 255 が 16 ビット整数として機器から読み取られた場合は、16 進数 00FF がレコード ファイルに保存されます。単精度浮動小数点数および倍精度の浮動小数点数は %g 形式で 10 進数値、および IEEE® Standard 754-1985 for Binary Floating-Point Arithmetic の指定形式で 16 進数値として記録されます。

IEEE 浮動小数点形式には、符号ビット、指数フィールド、仮数フィールドという 3 つのコンポーネントがあります。単精度浮動小数点型の値は 32 ビットで構成されます。値は以下の式によって求められます。

倍精度浮動小数点の値は 64 ビットで構成されます。値は以下の式によって求められます。

浮動小数点形式のコンポーネントと関連する単精度および倍精度ビットを以下の表に示します。

コンポーネント単精度ビット倍精度ビット

sign

1

1

exp

2–9

2–12

significand

10–32

13–64

ビット 1 は、レコード ファイルに保存される最も左のビットです。

例: 情報をディスクに記録

この例では、シリアル ポート オブジェクトと Tektronix® TDS 210 オシロスコープ間で送信される情報を記録する方法について説明します。さらに、結果のレコード ファイルの構造についても説明します。

  1. シリアル ポート オブジェクトの作成 — シリアル ポート COM1 に関連するシリアル ポート オブジェクト s を作成します。

    s = serial('COM1');
  2. デバイスへの接続 — s をオシロスコープに接続します。ReadAsyncMode プロパティの既定値は continuous であるため、データは機器から読み取り可能になるとすぐに入力バッファーに非同期的に返されます。

    fopen(s)
  3. プロパティ値の構成 — 詳細な形式 (verbose format) で複数のディスク ファイルに情報を記録するように s を構成します。記録は、WaveForm1.txt として定義された最初のディスク ファイルから始まります。

    s.RecordMode = 'index';
    s.RecordDetail = 'verbose';
    s.RecordName = 'WaveForm1.txt';
    record(s)
  4. データの書き込みと読み取り — 機器に書き込まれるコマンドと機器から読み取られるデータは、レコード ファイルに記録されます。オシロスコープ コマンドの説明については、例 — テキスト データの書き込みと読み取りを参照してください。

    fprintf(s,'*IDN?')
    idn = fscanf(s);
    fprintf(s,'MEASUREMENT:IMMED:SOURCE CH2')
    fprintf(s,'MEASUREMENT:IMMED:SOURCE?')
    source = fscanf(s);

    関数 fread を使用してピークツーピーク電圧を読み取ります。関数 fread によって返されるデータは、16 進数形式で記録されます。

    fprintf(s,'MEASUREMENT:MEAS1:TYPE PK2PK')
    fprintf(s,'MEASUREMENT:MEAS1:VALUE?')
    ptop = fread(s,s.BytesAvailable);

    ピークツーピーク電圧を文字配列に変換します。

    char(ptop)'
    ans =
    2.0199999809E0

    記録状態は on から off に切り替えられます。RecordMode の値は index であるため、レコード ファイル名は自動的に更新されます。

    record(s)
    s.RecordStatus
    ans =
    off
    s.RecordName
    ans =
    WaveForm2.txt
  5. 切断とクリーンアップ — s が不要になったら、機器から切断し、メモリおよび MATLAB® ワークスペースから削除します。

    fclose(s)
    delete(s)
    clear s

レコード ファイルの内容

WaveForm1.txt レコード ファイルの内容を、以下に示します。RecordDetail プロパティは verbose であるため、値の数、コマンドおよびデータが記録されています。関数 fread によって返されるデータは、16 進数形式です。

type WaveForm1.txt

Legend: 
  * - An event occurred.
  > - A write operation occurred.
  < - A read operation occurred.
1      Recording on 22-Jan-2000 at 11:21:21.575. Binary data in... 
2    > 6 ascii values.
       *IDN?
3    < 56 ascii values.
       TEKTRONIX,TDS 210,0,CF:91.1CT FV:v1.16 TDS2CM:CMV:v1.04
4    > 29 ascii values.
       MEASUREMENT:IMMED:SOURCE CH2
5    > 26 ascii values.
       MEASUREMENT:IMMED:SOURCE?
6    < 4 ascii values.
       CH2
7    > 27 ascii values.
       MEASUREMENT:MEAS1:TYPE PK2PK
8    > 25 ascii values.
       MEASUREMENT:MEAS1:VALUE?
9    < 15 uchar values.
       32 2e 30 31 39 39 39 39 39 38 30 39 45 30 0a 
10     Recording off.