[マスタのみ]
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); //シリアルポールを実行します。
説明:まずポーリングとは何かを簡単に説明します。ポーリングとは(マスタが)指定した相手機器から要求の有無を調べることをいいます。
変数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」に入っています。)