ポーリングをするには?(マスタのみ)

[マスタのみ]

shortCount;

DWORD Pstb[2];

 

for(Count = 0 ; Count < 2 ; Count++){       //ポーリングする相手機器の数+1です。

Pstb[Count] = 0x00;                     //値の初期化をしています。

}

 

Cmd[0] = 1;                                //ポーリングする相手機器の数

Cmd[1] = GetDlgItemInt(IDC_YRADRBOX);      //どの機器(アドレス)に対してポーリングするか指定します。

Ret = GpPoll(Cmd, Pstb);                      //シリアルポールを実行します。

 

image\Line.gif

説明:まずポーリングとは何かを簡単に説明します。ポーリングとは(マスタが)指定した相手機器から要求の有無を調べることをいいます。

変数Pstbにはポーリングした値(ステータスバイト)が入ります。

 

戻り値Retが0または1の場合、いずれかの機器からSRQが出されていたことになります。この時の機器アドレス・ステータスバイトは以下の記述で得ることができます。

long Adr;

long Stb;

Adr = Cmd[Pstb[0]];    //SRQを出していた機器のアドレス

Stb = Pstb[Pstb[0]];   //ステータスバイト

つまり、Pstb[0]にはSRQを発見した機器アドレス、およびステータスバイトが、配列Cmd・配列Pstbの何番目に入っているかを示します。

 

戻り値Retが128の場合、いずれの機器からもSRQは出されていなかったことになります。

また、SRQは出されていなくてもステータスバイトは配列Pstbの各要素に格納されています。

例)

Cmd[1] = 2;   ・・・・・・・Pstb[1]:機器アドレス2のステータスバイト

Cmd[2] = 0;   ・・・・・・・Pstb[2]:機器アドレス0のステータスバイト

このように配列Cmdと配列Pstbは(2番目の引数以降)1対1の関係になります。

 

以上でポーリングでの作成は終りです。

サンプルではCheckRet関数(戻り値を日本語(文字列)にするための関数)を使って日本語表示でエラーが出るようにしています。これらは標準モジュールといわれるものにコードが書かれています。この関数を標準 モジュールとすることにより、汎用性を高めています。もしこの関数を他のプログラムにもって使用するのであれば、ファイルの追加で使用可能となります。(CheckRet関数のコードは「SubFunc.cpp」に入っています。)