.net vb.net xbee

.net - Cómo manejar el paquete enviado/ack



vb.net xbee (1)

Estoy construyendo una aplicación para comunicarme con un módulo de Xbee a través de la API de Xbee.

Actualmente tengo algo que funciona, pero es bastante simple y tiene bastantes limitaciones.

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

A continuación, como ejemplo de una solicitud de comando típica Enviar datos al puerto serie Loop (con tiempo de espera) verificando CMDQueue para el paquete, dequeue y verifica si coincide. De lo contrario, se agota el tiempo de espera

Ahora es bastante obvio los posibles problemas con este método. En particular, dado que los módulos Xbee pueden dormir, es posible que tenga que esperar un tiempo considerablemente prolongado para obtener un Ack. Además, depende del orden, etc.

Me gustaría adoptar un enfoque no bloqueante. En este caso, para actuar sobre el paquete Ack / response en la mayoría de los casos, necesito saber el paquete original en el que se envió.

Estoy pensando en crear algunos hilos. SendPacket enviará el paquete, cargará el paquete enviado, el tiempo enviado y el tiempo de espera en la memoria, ¿también incluirá la función de devolución de llamada? (¿matriz?) PacketProc analizará paquetes, comprobará la matriz de paquetes esperando respuesta y llamará a la función de devolución de llamada. También verificará si hay paquetes en espera que hayan expirado y llamará a la devolución de llamada para indicar el tiempo de espera.

En última instancia, estoy buscando la capacidad de enviar paquetes a múltiples dispositivos (puede responder en cualquier orden) y actuar en esas respuestas o actuar en el tiempo de espera.

No estoy particularmente familiarizado con .NET ¿alguien puede comentar sobre este enfoque o recomendar un mejor patrón para mirar? ¿Algún método .Net que debería ver?


Use la clase Tarea.

Imports System.Threading Imports System.Threading.Tasks ... Dim buffer As StringBuilder; Sub processPackets() '' this runs as its own thread '' Wait for packet '' put here command/loop that waits packet buffer.Append(packet); ''remove data from serial buffer and format in to packet ''if IO response generated remotely, not requested put in IOQueue If buffer.ToString() = "REMOTELY" Then '' Put IOQueuo buffer.Clear() Else ''Otherwise put in CMDQueue (response generate from request, ie cmd response or packet Ack '' Put in CMDQueue buffer.Clear() End If End Sub

...

'' Create and execute the Task that will process the packets Dim t = Task.Factory.StartNew(Sub() processPackets())

http://www.dotnetcurry.com/ShowArticle.aspx?ID=491