SPORT_xxx ルーチンは,Fortran プログラマがシリアル・ポートへの基本的な入出力を行うための手助けを行います。ユーザーがファイルを開いたり閉じたりする代わりに,ポートへの接続 (SPORT_CONNECT) と解放 (SPORT_RELEASE) を行うことを除けば,プログラミング・モデルは普通のファイルと非常に似通っています。
読み書き操作の 2 つの形式 (接続呼び出しでのモードで決定) が提供されています。
SPORT_READ_DATA と SPORT_WRITE_DATA を使ったポートへのデータの読み書き
SPORT_READ_LINE と SPORT_WRITE_LINE を使った行単位のデータの読み書き
一度,I/O 操作が要求されると,ポートでの未処理の読み取りを保存する付加的なスレッドが開始されるため,データが失われることはありません.
SPORT_SET_STATE と SPORT_SET_TIMEOUTS ルーチンは,ボーレート,ストップ・ビット,タイムアウトなどの基本ポート・パラメタを設定します。さらに,SPORT_GET_HANDLE ルーチンは,Win32 ハンドルをポートに返すことができます。そのため,付加的な要求を実装するための Win32 コミュニケーション関数を呼び出すことができます。
シリアル・ポート I/O ルーチンの呼び出し
SPORT_xxx ルーチンは,エラー状態を返す関数です。
エラー状態 0 (ゼロ) は,成功を示します。
他の値は,エラーを示す Win32 エラー値です。
これらのルーチンを使用するためには,以下の 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 つあります。
フロー制御シグナルは,データを送信するまたは待機していることをケーブルのもう一方の端に接続されている装置/コンピュータに伝えます。一般的には,RequestToSend/ClearToSend シグナルがこの目的のために使われます。DataSetReady や DataTerminalReady のような他のシグナルも使われます。使用するケーブルが,ハードウェア/ソフトウェアが必要とするすべてのシグナルを実装していることを確認してください。特殊文字 (XON/XOFF など) もまた,ハードウェア・シグナルの代わりまたは追加として,データのフロー制御に使われます。アプリケーションがどのようなケーブルを必要としているかを検証してください。
コンピュータと装置が直接接続され,モデム経由で接続されていない場合,これらのシグナルは必要ないかもしれません.これらのシグナルは,一般的に,キャリアの状態 (CarrierDetect) や電話がなっている状態 (Ring) のような情報を伝達します。使用するケーブルが,アプリケーションが要求するすべてのシグナルを実装していることを確認してください。
物理的な接続が正しく設定された後,プログラマは,リモートの装置/システムと会話するために使用するデータ・プロトコルについて理解しなければなりません。
多くの単純な装置は,記録終了子 (復帰や改行文字) でデータの塊を区切ります。他の装置は,固定長パケット中のデータまたは何らかのカウント情報を含んだパケットを単純に送ります。SPORT_xxx サポートが提供する I/O ルーチンの 2 つの形式 (SPORT_READ_LINE と SPORT_WRITE_LINE を使った行単位または SPORT_READ_DATA と SPORT_WRITE_DATA を使った未処理データ転送) は,これら 2 つのデータ転送の形式を処理できます。プログラマは,どの I/O 形式が使うのに適しているか決定するために,特定のアプリケーションを理解していなければなりません。
シリアル・ポート・ルーチン一覧
SPORT ルーチンには以下のものがあります。
SPORT_xxx ルーチンは,Win32 ルーチンを呼び出します。たとえば,SPORT_SET_STATE ルーチンは,DCB コミュニケーション構造体を使用する SetCommState Win32 ルーチンを呼び出します。
関連情報
Fortran プログラムからの Win32 ルーチンの呼び出し方法については,「Win32 ルーチンの呼び出し」を参照してください。
コミュニケーションと Win32 コミュニケーション・ルーチンの使い方に関する詳細は,オンライン・ヘルプの「Platform SDK」の「Communications」と「Communications Functions」を参照してください。