シリアル ポート データの書き込みと読み取り
書き込みと読み取りの操作を完了するためのルール
書き込み操作の完了
write
または writeline
を使用した書き込み操作は、次の条件のいずれかが満たされると完了します。
指定したデータが書き込まれる。
Timeout
プロパティで指定した時間が経過する。
テキスト コマンドは、必要な終端文字を機器が受け取ったときにのみ処理されます。シリアル ポート オブジェクトの場合、ASCII コマンドで \n
が出現するごとに、Terminator
プロパティの値に置き換えられます。Terminator
の既定値は改行文字です。機器で必要とされる終端文字を判別するには、その機器のドキュメンテーションを参照してください。
読み取り操作の完了
read
または readline
による読み取り操作は、次の条件のいずれかが満たされると完了します。
指定数の値が読み取られる。
Timeout
プロパティで指定した時間が経過する。Terminator
プロパティにより指定された終端文字が読み取られる。
テキスト データの書き込みと読み取り
この例では、テキスト データの書き込みおよび読み取り操作によって、シリアル ポートの機器と通信する方法について説明します。
機器は、シリアル ポート COM1 に接続されている Tektronix® TDS 210 2 チャネル オシロスコープです。したがって、例にあるコマンドの多くはこの機器に固有のものです。正弦波がオシロスコープのチャネル 2 への入力であり、入力信号のピークツーピーク電圧を測定します。
以下の関数とプロパティは、テキストの読み取りと書き込みに際して使用されます。
関数 | 目的 |
---|---|
readline | テキスト データを機器から読み取る。 |
writeline | テキスト データを機器に書き込む。 |
Terminator | 機器に送信されるコマンドを終了させるために使用する文字。 |
メモ
この例は Windows® に特定的なものです。
シリアル ポート オブジェクトの作成 — シリアル ポート COM1 に関連付けられたシリアル ポート オブジェクト
s
を作成します。s = serialport("COM1",9600);
データの書き込みと読み取り —
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"
切断とクリーンアップ — 作業が終了したら、シリアル ポート オブジェクト
s
を MATLAB® ワークスペースからクリアします。clear s
バイナリ データの書き込みと読み取り
この例では、シリアル ポート オブジェクトでのバイナリの読み取り操作と書き込み操作を調べます。使用する機器は Tektronix® TDS 210 オシロスコープです。
関数とプロパティ
以下の関数は、バイナリ データの読み取りと書き込みに使用されます。
シリアル オブジェクトの構成と接続
シリアル オブジェクトを作成する必要があります。この例では、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