次の方法で共有


Visual FoxPro で MScomm32.ocx を使用してシリアル ポートから受信する

この記事では、Visual FoxPro で Mscomm32.ocx コントロールを使用してシリアル ポートからデータを受信するために使用する 2 つの方法について説明します。

元の製品バージョン: Visual FoxPro
元の KB 番号: 140525

まとめ

この記事では、Mscomm32.ocx コントロールを使用してシリアル ポートからデータを受信するために使用できる 2 つの手法について説明します。 1 つ目はイベント ドリブン メソッドを使用し、シリアル ポートをポーリングして受信した文字の有無を確認する必要はありません。 この手法により、最も柔軟性が高く、バッファーのオーバーランを防ぐために広範なコーディングは必要ありません。 2 番目の手法では、受信した文字の有無を確認するために、入力バッファーを定期的にポーリングする必要があります。 この記事では、これら 2 つの手法について説明し、それぞれの例を示します。

詳細

使用する手法に関係なく、次のプロパティを設定します。

  • CommPort property: この数値プロパティを目的の通信ポートに設定します。 有効な値は、使用可能なシリアル ポートと個々のコンピューターの構成に応じて、1、2、3、または 4 です。 これらの値は、それぞれ Com1、Com2、Com3、および Com4 に対応します。

  • Settings property: シリアル ポートに接続されているデバイスで必要なボー レート、パリティ、データ ビット、およびストップ ビットに、この文字プロパティを設定します。 このプロパティは、コンマ区切りの文字リストです。 たとえば、シリアル ポートを 14,400 ボー、偶数パリティ、7 データ ビット、および 1 ストップ ビットに設定するには、文字列を 14400,E,7,1 に設定します。

  • PortOpen property: シリアル ポートへの通信を開くには、この論理プロパティを true に設定します。 このプロパティを調べて、ポートが正しく開いているかどうかを確認することもできます。

手法 1: イベント駆動型受信

イベント ドリブン手法では、入力バッファーで待機している文字がある場合に、 OnComm イベントが生成されます。 また、CommEvent プロパティには数値 2 が含まれます。 OnComm イベントをトリガーするには、Rthreshold プロパティを 0 以外の値 (既定値) に設定する必要があります。 Rthreshold プロパティの最も一般的な設定は 1 です。つまり、少なくとも 1 文字が入力バッファーで待機している場合、OnComm イベントがトリガーされます。

たとえば、 OnComm イベントに次のコードを配置して、受信したデータを mybuffer というフォームのプロパティに追加できます。

Procedure MyCom.OnComm
    IF This.CommEvent = 2
        ThisForm.mybuffer = ThisForm.mybuffer + This.Input
    ENDIF
ENDPROC

方法 2: 入力バッファーのポーリング

入力バッファーをポーリングするには、プログラムが実行していることを定期的に停止し、入力バッファーで待機している文字があるかどうかを確認する必要があります。 この手法を使用する場合は、 Rthreshold プロパティを 0 (既定値) のままにし、 InBufferCount プロパティが 0 より大きいかどうかを確認します。これは、バッファー内で待機している文字があることを示します。

注記

Input プロパティの長さを確認するなどの手法を使用すると、Input プロパティにアクセスするとすぐに入力バッファーが空になるため、文字が失われます。 代わりに InBufferCount プロパティを使用してください。

Mscomm コントロールがフォーム上にあり、名前が MyCom で、 mybufferという名前のフォーム プロパティがあると仮定すると、次のコードは待機中の文字をポーリングする方法を示しています。

Procedure myform.myproc
    IF Thisform.MyCom.InBufferCount > 0
        Thisform.mybuffer = Thisform.mybuffer + Thisform.MyCom.Input
    ENDIF
ENDPROC

プロシージャ コードをタイマー メソッドで呼び出して、半一定間隔で文字のチェックを容易にすることができます。 ただし、シリアル ポートから大量のデータを受信することが予想される場合は、Technique One によって入力バッファーが過剰に実行される可能性が低くなります。