Manejo de comandos de longitud variable con pausas en la transmisión

1

Tengo mi sistema integrado y le envío muchos comandos diferentes mediante PC a través de RS232. El problema es que cada comando consta de una cantidad diferente de bytes. Además, existe la posibilidad de que el comando no se envíe de una vez. Me pregunto cuál es la buena práctica y si existen normas sobre cómo debe manejarse. ¿Debo hacer todos los comandos iguales en longitud? ¿Debo comenzar a ejecutar el comando si es posible aunque no se hayan enviado todavía todos los bytes de información de ese comando o debo esperar hasta que mi sistema reciba todos los bytes del comando?

    
pregunta Al Bundy

1 respuesta

2

A menos que esté haciendo algo particularmente crítico en el tiempo, entonces probablemente deba esperar hasta que se reciban todos los bytes de comando antes de intentar procesarlos.
Esto obviamente requiere que su sistema sepa cuántos bytes contiene el comando.

Hay diferentes maneras de lograr esto. Una forma perfectamente válida es como ya lo has pensado: hacer que todos tus paquetes de comando tengan la misma longitud (por lo general, rellenando los cortos con bytes adicionales). Esta es probablemente la forma más sencilla, pero podría volverse problemática en algunas situaciones.
Podría significar que necesita enviar muchos bytes de relleno para un comando simple, y también significa que podría haber demoras innecesarias según el tiempo que demore la transferencia de todos los bytes a través de su enlace de comunicaciones.

Un método alternativo sería codificar el tamaño del comando en el comando mismo, ya sea agregando un byte de 'longitud' al principio del paquete de comandos o cerca de él, o bien proporcionando a su sistema integrado una tabla de búsqueda para poder para verificar cuántos bytes esperar para cada comando.
De esta manera, sabe cuántos bytes debe contener el comando antes de que se complete la transferencia del comando y luego puede decidir cuánto tiempo debe esperar los bytes restantes antes de que se agote el tiempo de espera e ignorar el comando no finalizado y / o devolver un mensaje de error o Lo que sea apropiado para su sistema.

Hay muchos montones de "errores" al escribir sus propios protocolos de comunicaciones (como lo que sucede si "pierde" el inicio de su paquete y luego interpreta los bytes de manera incorrecta), verificando la integridad del paquete con sumas de comprobación o CRC, marcadores especiales &erio; byte / bit-stuffing, etc ... Pero los requisitos de su sistema determinarán la cantidad de cosas de las que debe preocuparse.

    
respondido por el brhans

Lea otras preguntas en las etiquetas