| 外部インタフェース/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コマンドラインへのアクセスの制御 | データの読み込み | ![]() |