Hola elreypic2, gracias por responder.
Paso a responder tus preguntas:
- Otro posible problema es la forma en que estás procesando los datos mediante el USART del microcontrolador (por hardware o por software).
- Todo el programa funciona por interrupción. #int_rda
- ¿cómo es que discriminas los datos de un esclavo a otro, además de la dirección? .
- El esclavo lo que hace es recibir toda la trama, pregunta por el stx, id y etx, si stx y etx coincide, entonces compara su dirección con id. Si es igual procesa, de lo contrario borra el buffer de recepción.
- ¿Cómo sabes que es dirección al recibirla o el STX (para el caso del esclavo 2)? ¿Cómo discriminas el commando 01 de la dirección 01?
- El protocolo de comunicación que "utilizo (está basado en modbus RTU)", siempre lleva el número de esclavo en el 2 byte. La trama siempre tiene la misma longitud, si el esclavo detecta menos o más datos, entonces la trama se descarta.
Ahora, sé que el dato llegó bien por la comparación del CRC. El esclavo calcula el crc y lo compara con el crc que le llegó, si coinciden, entonces el dato llegó bien, de lo contrario lo descarta ya que el master no tiene implementado control de errores- ¿El esclavo rompe la recepción y regresa a esperar el STX? Si es así, entonces aquí es donde se produce el problema.
- Si entiendo lo que planteas, es que, como el dato no va dirigido al esclavo 2, por ejemplo, el descarta el dato, pero sigue recibiendo, hasta que le llegan otros 8 bytes, pero le llegan en desorden porque no se ha limpiado el buffer de recepción, entonces en la posición de la dirección tiene basura y no entra a la rutina .... Siii... creo que ese es el problema, por eso cuando reinicio un esclavo y le mando un dato con su dirección, el otro deja de responde. Tiene basura en el Buffer....
Mejoraré la rutina de recepción y lo comento.
Muchas gracias.
[/list]