Autor Tema: Cuando la trama no es fija en comunicaciones  (Leído 1908 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2976
Cuando la trama no es fija en comunicaciones
« en: 04 de Abril de 2020, 07:36:47 »
Buenas, pues eso, tenia la duda de como lo haceis cuando trabajáis con una trama de comunicación que no tiene un número fijo de bytes en el mensaje, como por ejemplo Modbus.

Estoy con un STM32 y cuando mandas, pues muy bien formas la trama de los bytes que sean lo mandas y ya esta.

Pero cuando recibes no salta la interrupción de recepción de la uart hasta que no recibes el numero esperado de bytes y ese numero esperado no lo sabes.
¿Poneis el numero maximo que pueden llegar y si pasa el tiempo de recepción procesais el mensaje?

¿recepcionais los bytes de uno en uno?

un saludo
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw

Desconectado Yoshua

  • PIC16
  • ***
  • Mensajes: 200
Re:Cuando la trama no es fija en comunicaciones
« Respuesta #1 en: 04 de Abril de 2020, 10:00:26 »
Si es variable sin caracter de "fin de trama" se reciben uno por uno y se espera un tiempo antes de procesar la trama. Si lo tiene, se recibe uno por uno hasta que llegue ese caracter.

Desconectado jansuini

  • Moderadores
  • PIC24F
  • *****
  • Mensajes: 565
Re:Cuando la trama no es fija en comunicaciones
« Respuesta #2 en: 04 de Abril de 2020, 10:10:32 »
Hola:
No se si lo que querés es verificar en modbus ,pero si vos transmitis como maestro modbus ,sabés la cantidad de caracteres que tendrá la respuesta ,ya que en la pregunta le decís cuantos registros leeras.-
Adicionalmente modbus consifera que si el tiempo de silencio es mayor a 3,5 caracteres es porque terminó la trama.-
En otros protocolos ,ej DNP hay un byte que te dice la cantidad de caracteres del mensaje.-
Espero te haya ayudado el comentario
Jorge

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Cuando la trama no es fija en comunicaciones
« Respuesta #3 en: 04 de Abril de 2020, 10:25:04 »
Como te comentan, es esperar un tiempo de 3,5 caracteres para determinar cuando comienza o finaliza la trama.

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2976
Re:Cuando la trama no es fija en comunicaciones
« Respuesta #4 en: 04 de Abril de 2020, 11:04:33 »
Entonces la mejor manera de hacerlo seria recepcionar los bytes de uno a uno con una interrupción y los voy acumulando, cuando pasen el tiempo de 3 bytes sin recibir lo proceso.

es decir, si estoy trabajando a 9600 bps son 3,5*8 = 28bits seria una espera de =~3 milisegundos ¿así sería correcto verdad? ¿no me producirá mucho retraso tantas interrupciones?

vamos que si el mensaje es de 10 bytes en realidad seria un tiempo equivalente a 13,5 bytes.

un saludo y gracias
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Cuando la trama no es fija en comunicaciones
« Respuesta #5 en: 04 de Abril de 2020, 12:51:39 »
Citar
¿no me producirá mucho retraso tantas interrupciones?

Retraso en que cosa?

Si es optimo recibir algo fijo y que lo maneje el hardware (si posee una FIFO), pero en este caso que no podes determinar la longitud, entonces no te queda otra que llevarlo de esa forma.
Ademas la interrupcion del puerto serie seria: Se recibio algo, guardo, reseteo el Timer.
Y la del Timer, copiando el array o lo que sea que tengas antes de que aparezca otro...

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2976
Re:Cuando la trama no es fija en comunicaciones
« Respuesta #6 en: 04 de Abril de 2020, 14:03:38 »
Es un micro pequeños y también manejo por interrupciones algunas cosas mas, un I2C, otra uart,... pero vamos que lo unico que debe hacer es guardar un byte por interrupción, supongo que no habrá problemas.
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw

Desconectado jansuini

  • Moderadores
  • PIC24F
  • *****
  • Mensajes: 565
Re:Cuando la trama no es fija en comunicaciones
« Respuesta #7 en: 04 de Abril de 2020, 14:05:50 »
Bueno ,entonces según parece será una comunicación modbus ya que consideras esperar 3,5 caracteres de silencio.-
Insisto ,siendo modbus y si el micro es el maestro ,sabes perfectamente la cantidad de bytes que tendrá la respuesta.-
Sds.

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2976
Re:Cuando la trama no es fija en comunicaciones
« Respuesta #8 en: 04 de Abril de 2020, 14:10:38 »
Bueno ,entonces según parece será una comunicación modbus ya que consideras esperar 3,5 caracteres de silencio.-
Insisto ,siendo modbus y si el micro es el maestro ,sabes perfectamente la cantidad de bytes que tendrá la respuesta.-
Sds.

Si es modbus, pero no es maestro, en este caso sera el esclavo. Por eso lo de la trama variable.

un saludo
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw