Xbee API を介して Xbee モジュールと通信するアプリケーションを構築しています。
現在、何かが機能していますが、かなり単純で、かなりの制限があります。
Sub processPackets() ' this runs as its own thread
'remove data from serial buffer and format in to packet
'if IO response generated remotely, not requested put in IOQueue
'Otherwise put in CMDQueue (response generate from request, ie cmd response or packet Ack
End Sub
次に、典型的なコマンド要求の例として、データをシリアル ポートに送信する ループ (タイムアウトあり) パケットの CMDQueue をチェックし、デキューして、一致するかどうかをチェックします。それ以外の場合はタイムアウトします
これで、この方法の潜在的な問題が明らかになりました。特に、Xbee モジュールはスリープできるため、Ack をかなり長時間待たなければならない場合があります。さらに、注文などに依存します。
ノンブロッキングのアプローチを取りたいと思います。この場合、ほとんどの場合、Ack/response パケットに対処するには、応答として送信された元のパケットを知る必要があります。
いくつかのスレッドを作成することを考えています。SendPacket は、パケットを送信し、送信されたパケット、送信された時間、およびタイムアウトをメモリにロードし、コールバック関数も含めますか? (配列?) PacketProc はパケットを解析し、応答を待っているパケットの配列をチェックして、コールバック関数を呼び出します。また、タイムアウトした待機中のパケットをチェックし、コールバックを呼び出してタイムアウトを示しますか?
最終的に、複数のデバイスにパケットを送信し (任意の順序で応答する可能性があります)、それらの応答に基づいて行動するか、タイムアウトに基づいて行動する機能を探しています。
私は.NETに特に精通していません.誰かがこのアプローチについてコメントしたり、調べるためのより良いパターンを推奨したりできますか? 私が調べる必要がある.Netメソッドはありますか?