Main Content

シリアル ポート データの書き込みと読み取り

書き込みと読み取りの操作を完了するためのルール

書き込み操作の完了

write または writeline を使用した書き込み操作は、次の条件のいずれかが満たされると完了します。

  • 指定したデータが書き込まれる。

  • Timeout プロパティで指定した時間が経過する。

テキスト コマンドは、必要な終端文字を機器が受け取ったときにのみ処理されます。シリアル ポート オブジェクトの場合、ASCII コマンドで \n が出現するごとに、Terminator プロパティの値に置き換えられます。Terminator の既定値は改行文字です。機器で必要とされる終端文字を判別するには、その機器のドキュメンテーションを参照してください。

読み取り操作の完了

read または readline による読み取り操作は、次の条件のいずれかが満たされると完了します。

  • 指定数の値が読み取られる。

  • Timeout プロパティで指定した時間が経過する。

  • Terminator プロパティにより指定された終端文字が読み取られる。

テキスト データの書き込みと読み取り

この例では、テキスト データの書き込みおよび読み取り操作によって、シリアル ポートの機器と通信する方法について説明します。

機器は、シリアル ポート COM1 に接続されている Tektronix® TDS 210 2 チャネル オシロスコープです。したがって、例にあるコマンドの多くはこの機器に固有のものです。正弦波がオシロスコープのチャネル 2 への入力であり、入力信号のピークツーピーク電圧を測定します。

以下の関数とプロパティは、テキストの読み取りと書き込みに際して使用されます。

関数目的
readlineテキスト データを機器から読み取る。
writelineテキスト データを機器に書き込む。
Terminator機器に送信されるコマンドを終了させるために使用する文字。

メモ

この例は Windows® に特定的なものです。

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

    s = serialport("COM1",9600);
  2. データの書き込みと読み取りwriteline を使用して *IDN? コマンドを機器に書き込み、readline を使用してコマンドの結果を読み戻します。

    writeline(s,"*IDN?")
    s.NumBytesAvailable
    
    ans =
    
         56
    idn = readline(s)
    
    idn =
    
         "TEKTRONIX,TDS 210,0,CF:91.1CT FV:v1.16 TDS2CM:CMV:v1.04"

    測定のソースを決定する必要があります。使用可能な測定ソースには、オシロスコープのチャネル 1 およびチャネル 2 があります。

    writeline(s,"MEASUREMENT:IMMED:SOURCE?")
    source = readline(s)
    source =
    
         "CH1"

    チャネル 1 からの測定結果を返す範囲が構成されます。入力信号はチャネル 2 に接続されるため、このチャネルからの測定結果を返す機器を構成しなければなりません。

    writeline(s,"MEASUREMENT:IMMED:SOURCE CH2")
    writeline(s,"MEASUREMENT:IMMED:SOURCE?")
    source = readline(s)
    
    source =
    
         "CH2"

    ここで、ピークツーピーク電圧を返す範囲を構成して、この測定結果の値を要求することができます。

    writeline(s,"MEASUREMENT:MEAS1:TYPE PK2PK")
    writeline(s,"MEASUREMENT:MEAS1:VALUE?")

    関数 readline を使用して結果を読み戻します。

    ptop = readline(s)
    ptop =
    
         "2.0199999809E0"
  3. 切断とクリーンアップ — 作業が終了したら、シリアル ポート オブジェクト s を MATLAB® ワークスペースからクリアします。

    clear s

バイナリ データの書き込みと読み取り

この例では、シリアル ポート オブジェクトでのバイナリの読み取り操作と書き込み操作を調べます。使用する機器は Tektronix® TDS 210 オシロスコープです。

関数とプロパティ

以下の関数は、バイナリ データの読み取りと書き込みに使用されます。

関数目的
read機器からバイナリ データを読み取る。
write機器にバイナリ データを書き込む。

シリアル オブジェクトの構成と接続

シリアル オブジェクトを作成する必要があります。この例では、COM1 ポートに関連付けられたシリアル ポート オブジェクトを作成します。

s = serialport("COM1",9600);

バイナリ データの書き込み

バイナリ データを機器に書き込むには、関数 write を使用します。バイナリの書き込み操作は、次の条件のいずれかが満たされると完了します。

  • すべてのデータが書き込まれる。

  • Timeout プロパティでの指定どおりにタイムアウトが発生する。

メモ

書き込み操作を実行する際は、送信データをバイトとしてではなく、値として考えます。値は、1 つ以上のバイトで構成されます。たとえば、1 つの値 uint32 は、4 つのバイトで構成されます。

Int16 バイナリ データの書き込み

波形を int16 配列として書き込みます。

write(s,"Data:Destination RefB","string");
write(s,"Data:Encdg SRPbinary","string");
write(s,"Data:Width 2","string");
write(s,"Data:Start 1","string");
t = (0:499) .* 8 * pi / 500;
data = round(sin(t) * 90 + 127);
write(s,"CURVE #3500","string");

1 つの int16 値が 2 バイトで構成されていることに注意してください。したがって、次のコマンドは 1000 バイトを書き込みます。

write(s,data,"int16")

バイナリ データの読み取り

バイナリ データを機器から読み取るには、関数 read を使用します。バイナリの読み取り操作は、次の条件のいずれかが満たされると完了します。

  • Timeout プロパティでの指定どおりにタイムアウトが発生する。

  • 指定数の値が読み取られる。

メモ

読み取り操作を実行する際には、受け取るデータをバイトとしてではなく、値として考えます。値は、1 つ以上のバイトで構成されます。たとえば、1 つの値 uint32 は、4 つのバイトで構成されます。

int16 バイナリ データの読み取り

同じ波形をチャネル 1 で int16 配列として読み取ります。

write(s,"Data:Source CH1","string");
write(s,"Data:Encdg SRPbinary","string");
write(s,"Data:Width 2","string");
write(s,"Data:Start 1","string");
write(s,"Data:Stop 2500","string");
write(s,"Curve?","string")

1 つの int16 値が 2 バイトで構成されていることに注意してください。したがって、次のコマンドは 512 バイトを読み取ります。

data = read(s,256,"int16");

切断とクリーンアップ

シリアル ポート オブジェクトの使用が終了したら、オブジェクトをワークスペースからクリアします。

clear s