シリアル・ポート I/O ルーチンの使用

SPORT_xxx ルーチンは,Fortran プログラマがシリアル・ポートへの基本的な入出力を行うための手助けを行います。ユーザーがファイルを開いたり閉じたりする代わりに,ポートへの接続 (SPORT_CONNECT) と解放 (SPORT_RELEASE) を行うことを除けば,プログラミング・モデルは普通のファイルと非常に似通っています。

読み書き操作の 2 つの形式 (接続呼び出しでのモードで決定) が提供されています。

一度,I/O 操作が要求されると,ポートでの未処理の読み取りを保存する付加的なスレッドが開始されるため,データが失われることはありません.

SPORT_SET_STATESPORT_SET_TIMEOUTS ルーチンは,ボーレート,ストップ・ビット,タイムアウトなどの基本ポート・パラメタを設定します。さらに,SPORT_GET_HANDLE ルーチンは,Win32 ハンドルをポートに返すことができます。そのため,付加的な要求を実装するための Win32 コミュニケーション関数を呼び出すことができます。

シリアル・ポート I/O ルーチンの呼び出し

SPORT_xxx ルーチンは,エラー状態を返す関数です。

これらのルーチンを使用するためには,以下の USE 文を宣言する必要があります。

	USE DFLIB

USE DFLIB 文は,ルーチン定義を含んでいます。一般的に,DFWINTY モジュールで定義されている Win32 定数値が必要になる場合があるため,USE DWINTY 文も宣言する必要があります。

多くの引数は,省略可能です。引数が入力と出力の両方である場所で定数値を使う場合,出力の前に書き込み可能かどうかの検証が行われます。多くの場合,一時的な変数を作成することなく,定数値が使われます。しかしながら,この方法は,Fortran 実装すべてで互換性があるわけではないことに注意してください。

シリアル・ポート I/O ルーチンの実行時動作

データのオーバーランが発生しないことを確かめるために,SPORT_xxx 実行時サポートは,接続したポートへの未処理読み取りを管理する別のスレッドを作成します。関連する読み取り/書き込みルーチンを使って読み取りまたは書き込み操作がポートに対して行われた時,このスレッドが開始されます。そのため,ポートへの読み取りまたは書き取りを開始した後,ポート・パラメタを変更してはなりません。その代わり,ポートに接続した後ポート・パラメタを設定し,ポートを解放するまでそれらを変更しないようにしておくべきです。

ポート・パラメタを動的に変更しなければならない場合,I/O が進行中でないことを確かめるために SPORT_CANCEL_IO ルーチンを使います。さらに,この呼び出しは,ヘルパ・スレッドを停止させるので,次の I/O 操作の間にヘルパ・スレッドが開始される時,新しく正確なパラメタが自動的に取り出されます。

シリアル・ポートの使い方

アプリケーションに依存して,シリアル・ポート・プログラミングは非常に簡単にもなりますし,複雑にもなります。SPORT_xxx は,サポート・レベルを提供しています。これは,ユーザーがより複雑なアプリケーション用に使用することができる機構を提供するのと同様に,簡単なアプリケーションを作成できるような手助けをするということです。完全なシリアル・ポート・プロトコル (たとえば,PPP/SLP 実装,他の複雑なプロトコル) を実装する必要のあるユーザーは,このような場合に必要となる制御の詳細なレベルを達成するために,直接 Win32 コミュニケーション関数を使うべきです。ターミナルや他のデータ収集装置とコミュニケーションするような単純な作業に対しては,SPORT_xxx ルーチンを使った実装が向いています。

まず,プログラマは,シリアル装置へのハードウェア接続について理解しておかなければなりません.今日使われている一般的な接続は,9 ピン/ワイア・コネクタか 25 ピン/ワイア・コネクタを必要としています。多くのケーブルは,価格を下げるために 9 または 25 接続を実装しているわけではありません.あるアプリケーションでは,これらのケーブルが正しく動作するかも知れませんが,他のアプリケーションでは,完全な 9 または 25 接続を必要とするかも知れません.すべてのケーブルは,SignalGround シグナルと同様に Receive/SendData シグナルも実装しています。これらのシグナルがないと,データ転送が行われません.重要なシグナルが他に 2 つあります。

物理的な接続が正しく設定された後,プログラマは,リモートの装置/システムと会話するために使用するデータ・プロトコルについて理解しなければなりません。

多くの単純な装置は,記録終了子 (復帰や改行文字) でデータの塊を区切ります。他の装置は,固定長パケット中のデータまたは何らかのカウント情報を含んだパケットを単純に送ります。SPORT_xxx サポートが提供する I/O ルーチンの 2 つの形式 (SPORT_READ_LINESPORT_WRITE_LINE を使った行単位または SPORT_READ_DATASPORT_WRITE_DATA を使った未処理データ転送) は,これら 2 つのデータ転送の形式を処理できます。プログラマは,どの I/O 形式が使うのに適しているか決定するために,特定のアプリケーションを理解していなければなりません。

シリアル・ポート・ルーチン一覧

SPORT ルーチンには以下のものがあります。

SPORT_xxx ルーチンは,Win32 ルーチンを呼び出します。たとえば,SPORT_SET_STATE ルーチンは,DCB コミュニケーション構造体を使用する SetCommState Win32 ルーチンを呼び出します。

関連情報