| 外部インタフェース/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プログラムの実行 | ![]() |