外部インタフェース/API | ![]() ![]() |
例題の説明
serialexample
が行う主な作業は、以下の通りです。
1. シリアルポートの設定と出力に対する変数の定義
最初の5個のステートメントは、シリアルポートの設定用の変数を定義します。最初のステートメントはボーレートを9600に定義し、2番目はデータのビット数を8に定義し、3番目は終了ビット数を1に定義します。4番目のステートメントはパリティをオフに定義し、5番目のステートメントはフローコントロール(handshaking)をオフに定義します。
SerialPort_BAUD_9600 = 9600; SerialPort_DATABITS_8 = 8; SerialPort_STOPBITS_1 = 1; SerialPort_PARITY_NONE = 0; SerialPort_FLOWCTRL_NONE = 0;
最後の変数定義は、シリアルポートへの書き込み用の終了キャラクタをキャリッジリターンに設定します。
terminator = char(13);
2. CommPortIdentifierオブジェクトの作成
javax.comm.CommPortIdentifier
クラスは、コンストラクタの代わりに、クラスのインスタンスを出力するstatic
メソッドを持ちます。例題は、これらのうちの1つgetPortIdentifier
を呼び出して、ポートCOM1
に対してCommPortIdentifier
オブジェクトを出力します。
commPort = ... javax.comm.CommPortIdentifier.getPortIdentifier('COM1');
3. シリアルポートのオープン
例題は、CommPortIdentifier
オブジェクトcommPort
についてopen
を呼び出すことにより、シリアルポートをオープンします。open
の呼び出しは、serialPort
に割り当てるserialPort
オブジェクトを出力します。open
の第一引数はポート名(オーナ)で、第二引数はポート名、第三引数はオープンの待ち時間(ミリ秒)です。
serialPort = open(commPort, 'serial', 1000);
4. シリアルポートの設定
つぎの3つのステートメントは、SerialPort
オブジェクトserialPort
についての設定メソッドを呼び出します。最初のステートメントは、setSerialPortParams
を呼び出してボーレート、データビット、終了ビット、パリティを設定します。つぎの2つのステートメントは、setFlowControlMode
を呼び出してフローコントロールを設定し、その後enableReceiveTimeout
を呼び出して受信データに対するタイムアウトを設定します。
setSerialPortParams(serialPort, SerialPort_BAUD_9600,... SerialPort_DATABITS_8, SerialPort_STOPBITS_1,... SerialPort_PARITY_NONE); setFlowControlMode(serialPort, SerialPort_FLOWCTRL_NONE); enableReceiveTimeout(serialPort, 1000);
5. 出力ストリームライタの設定
例題は、つぎにコンストラクタを呼び出してjava.io.OutputStreamWriter
を作成してオープンします。コンストラクタの呼び出しは、 getOutputStream
メソッドserialPort
の呼び出しによって出力されるjava.io.OutputStream
オブジェクトを渡して、OutputStreamWriter
オブジェクトをout
に割り当てます。
out = java.io.OutputStreamWriter(getOutputStream(serialPort));
6. シリアルポートにデータを書き出し出力ストリームをクローズ
例題は、オブジェクトout
についてwrite
を呼び出すことにより、シリアルポートに文字列を書き出します。文字列は、機器が要求するコマンドターミネータを使ってオシロスコープのコントラストを45に設定するコマンドを(MATLABの[ ]により)結合することにより作成されます。つぎのステートメントは、out
についてflush
を呼び出して、出力ストリームをフラッシュします。
write(out, ['Display:Contrast 45' terminator]); flush(out);
その後、例題は再度out
についてwrite
を呼び出して、他の文字列をシリアルポートに送信します。この文字列は、コマンドターミネータによって連結されたオシロスコープのコントラスト設定を決定するためのqueryコマンドです。その後例題は、出力ストリームについてclose
を呼び出します。
write(out, ['Display:Contrast?' terminator]); close(out);
7. 入力ストリームをオープンし、読み込むバイト数を決定
コントラストのクエリーに応じてオシロスコープから予想されるデータを読み込むために、例題は、static
メソッドInputStream.getInputStream
を呼び出してシリアルポートに対するInputStream
オブジェクトを取得することによって、入力ストリームをオープンします。その後、例題は、InputStream
オブジェクトin
についてメソッドavailable
を呼び出し、出力されたバイト数をnumAvail
に設定します。
in = getInputStream(serialPort); numAvail = available(in);
8. シリアルポートに対する入力ストリームリーダの作成
例題は、その後InputStream
オブジェクトin
を使ってコンストラクタjava.io.InputStreamReader
を呼び出し、新規オブジェクトをreader
に割り当てます。
reader = java.io.InputStreamReader(in);
9. シリアルポートからデータを読み込みリーダをクローズ
例題は、各バイトに対するInputStreamReader
オブジェクトリーダについてread
メソッドを呼び出すことによって、シリアルポートから読み込みます。read
ステートメントは、MATLABの配列結合を利用して、新規に読み込んだバイトを既に読み込んだバイトの配列に付加します。データを読み込んだ後で、例題はreader
についてclose
を呼び出して入力ストリームリーダをクローズします。
result = []; for i = 1:numAvail result = [result read(reader)]; end close(reader);
10. シリアルポートのクローズ
例題は、serialPort
オブジェクトについてclose
を呼び出してシリアルポートをクローズします。
close(serialPort);
11. 入力引数をMATLABキャラクタ配列に変換
例題の最後のステートメントは、MATLAB関数char
を使って、配列の入力バイト(整数)をキャラクタの配列に変換します。
result = char(result);
![]() | 例題 - シリアルポートによる通信 | serialexampleプログラムの実行 | ![]() |