外部インタフェース/API | ![]() ![]() |
データの書き出し
本節は、データのシリアルポートデバイスへの書き出しを3つの部分に分けて説明します。
関数名 |
説明 |
fprintf |
テキストをデバイスに書き出します。 |
fwrite |
バイナリデータをデバイスに書き出します。 |
stopasync |
非同期の読み込みおよび書き出し操作を終了します。 |
プロパティ名 |
説明 |
BytesToOutput |
現在出力バッファにあるバイト数を示します。 |
OutputBufferSize |
出力バッファのサイズをバイト単位で指定します。 |
Timeout |
読み込みまたは書き出し操作を終了するまでの待ち時間を指定します。 |
TransferStatus |
進行中の同期読み込みあるいは書き出し操作を示します。 |
ValuesSent |
デバイスに書き出される値の総数を示します。 |
出力バッファとデータフロー
出力バッファは、デバイスに書き出されるデータを格納するためにシリアルポートオブジェクトによって割り当てられるコンピュータメモリです。データをデバイスに書き出す際に、データフローはつぎの2つのステップに従います。
OutputBufferSize
プロパティは、出力バッファに格納可能な最大バイト数を指定します。BytesToOutput
プロパティは、出力バッファに現在あるバイト数を示します。これらのプロパティのデフォルト値は、以下のように与えられます。
s = serial('COM1');
get(s,{'OutputBufferSize','BytesToOutput'})
ans =
[512] [0]
出力バッファの容量以上のデータを書こうとした場合は、エラーが出力され、データは書き出されません。
たとえば、関数fprintf
を使って文字列コマンド*IDN?
をTDS 210オシロスコープに書くと仮定します。下記のように、文字列は最初に6個の値として出力バッファに書き出されます。
*IDN?
コマンドは、ターミネータが自動的に書き出されるため、6個の値で構成されます。さらに、関数fprintf
に対するデフォルトのデータフォーマットは、1つの値が1バイトに対応すると指定します。バイトと値に関する詳しい情報は、バイトと値を参照してください。fprintf
とターミネータについては、テキストデータの書き出しで説明しています。
下記のように、文字列は出力バッファに書き出された後で、シリアルポートによってデバイスに書き出されます。
テキストデータの書き出し
テキストデータをデバイスに書き出すためには、関数fprintf
を使います。多くのデバイスに対して、テキストデータの書き出しは、デバイスの設定を変更したり、データや状態の情報の出力のためにデバイスを準備する等のコマンド文字列の書き出しを意味します。
たとえば、Display:Contrast
コマンドはオシロスコープの表示のコントラストを変更します。
s = serial('COM1'); fopen(s) fprintf(s,'Display:Contrast 45')
デフォルトでは、fprintf
は多くのシリアルポートデバイスがテキストベースのコマンドしか受け取らないため、%s\n
フォーマットを使ってデータを書き出します。しかし、fprintf
リファレンスページで説明するように、その他の多くのフォーマットを指定することが可能です。
デバイスに送信される値の数をValuesSent
プロパティを使って確認することができます。
s.ValuesSent ans = 20
ValuesSent
プロパティの値は、デバイスに送信されるコマンド内の\n
がTerminator
プロパティの値で置き換えられるため、ターミネータを含みます。
s.Terminator ans = LF
Terminator
のデフォルト値は、ラインフィードキャラクタです。デバイスに対して必要なターミネータは、デバイスのドキュメントに記述されています。
同期と非同期の書き込み操作 デフォルトでは、fprintf
は同期的に実行されて実行が終了するまでMATLABコマンドラインをブロックします。テキストデータを非同期的にデバイスに書き出すには、fprintf
の最後の入力引数としてasync
を指定する必要があります。
fprintf(s,'Display:Contrast 45','async')
非同期操作は、MATLABコマンドラインへのアクセスをブロックしません。さらに、非同期の書き出し操作が進行中には、以下を行うことができます。
どの非同期操作が進行中かをTransferStatus
プロパティを使って決定することができます。非同期操作が進行中でない場合は、TransferStatus
はidle
です。
s.TransferStatus ans = idle
fprintfによる書き出し操作の終了の規則 fprintf
を使った同期あるいは非同期の書き出し操作は、以下のときに終了します。
Timeout
プロパティで指定した時間が経過したとき。さらに、関数stopasync
を使って非同期操作を終了することができます。
バイナリデータの書き出し
バイナリデータをデバイスに書き出すためには、関数fwrite
を使います。バイナリデータを書き出すことは、数値を書き出すことを意味します。バイナリデータの書き出しの典型的なアプリケーションは、任意波形発生器のような機器にキャリブレーションデータを書き出すことです。
注意
シリアルポートデバイスの中には、テキストベースのコマンドのみを受け取るものがあります。これらのコマンドは、SCPI言語あるいはベンダー固有の言語を利用する場合があります。そのため、すべての書き出し操作に対して関数fprintf を使う必要があります。 |
デフォルトでは、fwrite
はuchar
フォーマットを使って値を変換します。しかし、この関数のリファレンスページで説明するように、他の多くのフォーマットを指定することが可能です。
デフォルトでは、fwrite
は同期的に動作します。バイナリデータを非同期的にデバイスに書き出すには、fwrite
の最終入力引数としてasync
を指定する必要があります。同期および非同期の書き出し操作に関する詳しい情報は、テキストデータの書き出しを参照してください。書き出し操作を終了するためにfwrite
で用いる規則については、リファレンスページを参照してください。
![]() | MATLABコマンドラインへのアクセスの制御 | データの読み込み | ![]() |