外部インタフェース/API    

データの書き出し

本節は、データのシリアルポートデバイスへの書き出しを3つの部分に分けて説明します。

データの書き出しに関連する関数は、以下の通りです。

表 8-5: データの書き出しに関連する関数 
関数名
説明
fprintf
テキストをデバイスに書き出します。
fwrite
バイナリデータをデバイスに書き出します。
stopasync
非同期の読み込みおよび書き出し操作を終了します。

データの書き出しに関連するプロパティは、以下の通りです。

表 8-6: データの書き出しに関連するプロパティ 
プロパティ名
説明
BytesToOutput
現在出力バッファにあるバイト数を示します。
OutputBufferSize
出力バッファのサイズをバイト単位で指定します。
Timeout
読み込みまたは書き出し操作を終了するまでの待ち時間を指定します。
TransferStatus
進行中の同期読み込みあるいは書き出し操作を示します。
ValuesSent
デバイスに書き出される値の総数を示します。

出力バッファとデータフロー

出力バッファは、デバイスに書き出されるデータを格納するためにシリアルポートオブジェクトによって割り当てられるコンピュータメモリです。データをデバイスに書き出す際に、データフローはつぎの2つのステップに従います。

  1. 書き出し関数によって指定されたデータは、出力バッファに送られます。
  2. 出力バッファ内のデータは、デバイスに送られます。

OutputBufferSizeプロパティは、出力バッファに格納可能な最大バイト数を指定します。BytesToOutputプロパティは、出力バッファに現在あるバイト数を示します。これらのプロパティのデフォルト値は、以下のように与えられます。

出力バッファの容量以上のデータを書こうとした場合は、エラーが出力され、データは書き出されません。

たとえば、関数fprintfを使って文字列コマンド*IDN?をTDS 210オシロスコープに書くと仮定します。下記のように、文字列は最初に6個の値として出力バッファに書き出されます。

*IDN? コマンドは、ターミネータが自動的に書き出されるため、6個の値で構成されます。さらに、関数fprintfに対するデフォルトのデータフォーマットは、1つの値が1バイトに対応すると指定します。バイトと値に関する詳しい情報は、バイトと値を参照してください。fprintfとターミネータについては、テキストデータの書き出しで説明しています。

下記のように、文字列は出力バッファに書き出された後で、シリアルポートによってデバイスに書き出されます。

テキストデータの書き出し

テキストデータをデバイスに書き出すためには、関数fprintfを使います。多くのデバイスに対して、テキストデータの書き出しは、デバイスの設定を変更したり、データや状態の情報の出力のためにデバイスを準備する等のコマンド文字列の書き出しを意味します。

たとえば、Display:Contrastコマンドはオシロスコープの表示のコントラストを変更します。

デフォルトでは、fprintfは多くのシリアルポートデバイスがテキストベースのコマンドしか受け取らないため、%s\n フォーマットを使ってデータを書き出します。しかし、fprintfリファレンスページで説明するように、その他の多くのフォーマットを指定することが可能です。

デバイスに送信される値の数をValuesSentプロパティを使って確認することができます。

ValuesSentプロパティの値は、デバイスに送信されるコマンド内の\nTerminatorプロパティの値で置き換えられるため、ターミネータを含みます。

Terminatorのデフォルト値は、ラインフィードキャラクタです。デバイスに対して必要なターミネータは、デバイスのドキュメントに記述されています。

同期と非同期の書き込み操作   デフォルトでは、fprintfは同期的に実行されて実行が終了するまでMATLABコマンドラインをブロックします。テキストデータを非同期的にデバイスに書き出すには、fprintfの最後の入力引数としてasyncを指定する必要があります。

非同期操作は、MATLABコマンドラインへのアクセスをブロックしません。さらに、非同期の書き出し操作が進行中には、以下を行うことができます。

どの非同期操作が進行中かをTransferStatusプロパティを使って決定することができます。非同期操作が進行中でない場合は、TransferStatusidleです。

fprintfによる書き出し操作の終了の規則   fprintfを使った同期あるいは非同期の書き出し操作は、以下のときに終了します。

さらに、関数stopasyncを使って非同期操作を終了することができます。

バイナリデータの書き出し

バイナリデータをデバイスに書き出すためには、関数fwriteを使います。バイナリデータを書き出すことは、数値を書き出すことを意味します。バイナリデータの書き出しの典型的なアプリケーションは、任意波形発生器のような機器にキャリブレーションデータを書き出すことです。

デフォルトでは、fwriteucharフォーマットを使って値を変換します。しかし、この関数のリファレンスページで説明するように、他の多くのフォーマットを指定することが可能です。

デフォルトでは、fwriteは同期的に動作します。バイナリデータを非同期的にデバイスに書き出すには、fwriteの最終入力引数としてasyncを指定する必要があります。同期および非同期の書き出し操作に関する詳しい情報は、テキストデータの書き出しを参照してください。書き出し操作を終了するためにfwriteで用いる規則については、リファレンスページを参照してください。


 MATLABコマンドラインへのアクセスの制御 データの読み込み