Autor Tema: Problema con red RS485  (Leído 249 veces)

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

Desconectado jhonastad

  • PIC10
  • *
  • Mensajes: 34
Problema con red RS485
« en: 09 de Septiembre de 2019, 00:51:48 »
Hola amigos del foro, tengo un problema al crear una red RS-485. Diseñe una tarjetas de control con un max485, el esquemático lo adjunto en la imagen de abajo. Para hacer las pruebas utilizo el terminal.exe. Cada tarjeta slave, tiene un numero de esclavo que se selecciona con un dip switch. Al hacer la consulta por separado a los esclavos, estos responden bien, pero al juntar los 2 esclavos no responden. Si presiono el MCLR de un esclavo, este responde pero el otro no, es como que solo puedo hablar con uno solo. Los esclavos usan un pic 18F2520 con un crystal externo de 8Mhz. Por favor, si alguien ha tenido este problema que me pueda orientar ya que no entiendo cual es el problema. Estoy comunicandome hacia los esclavos a traves de un conversor USB a RS485 y le solde la resistencia de 120 ohms. El esquema del rs485 en los esclavos lo adjunto en la imagen.

Saludos.   

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 7357
Re:Problema con red RS485
« Respuesta #1 en: 09 de Septiembre de 2019, 06:26:38 »
Citar
Al hacer la consulta por separado a los esclavos, estos responden bien, pero al juntar los 2 esclavos no responden.

Es que ese es el problema... Es el maestro quien arbitra el bus y decide quien debe enviar o no... si responden los dos juntos van a hacer cualquier cosa sobre el bus.

Desconectado jhonastad

  • PIC10
  • *
  • Mensajes: 34
Re:Problema con red RS485
« Respuesta #2 en: 09 de Septiembre de 2019, 08:58:28 »
Hola killerjc, los esclavos poseen un protocolo de capa de enlace, por lo que, poseen ID de esclavo, no responden si la petición no es para el en específico.

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1041
Re:Problema con red RS485
« Respuesta #3 en: 09 de Septiembre de 2019, 09:11:11 »
Que tal jhonastad,

Tu problema reside en que estás conectando tres resistencias de 120 ohms sobre el bus rs485. Solo debe haber dos, una en cada extremo de tu bus Rs485. Si tu master está en un extremo, ahí colocas una resistencia de 120 ohms y en el otro extremo donde está el esclavo colocas otra resistencia de 120 ohms. El segundo esclavo no lleva la resistencia de 120 ohms

Elreypic

Desconectado jhonastad

  • PIC10
  • *
  • Mensajes: 34
Re:Problema con red RS485
« Respuesta #4 en: 09 de Septiembre de 2019, 09:55:41 »
Hola elreypic2, acabo de quitar la resistencia del esclavo del medio, y siguen sin contestar. Lo raro es que, cuando presiono el boton de MCLR, y envío la trama al esclavo 1, el contesta, pero deja de contestar el esclavo 2. Si presiono el boton de MCLR del esclavo 2, y envío la trama a él, contesta pero deja de contestar el esclavo 1.

Las tramas que envío son las siguientes:

STX  ID ESCLAVO FUN COMMAND CRC   ETX
 02          01         0B       0001     DAB1 03   -> Esclavo 1
 02          02         0B       0001     9EB1  03  -> Esclavo 2   

// Estos comandos ejecutan la misma acción en los esclavos.

Desconectado jhonastad

  • PIC10
  • *
  • Mensajes: 34
Re:Problema con red RS485
« Respuesta #5 en: 09 de Septiembre de 2019, 10:38:16 »
Quité todas las resistencias de 120 ohm y las de 470 que están de pull up en Ra y pull down en Rb, pero no consigo mejora del problema. Creo que debe ser problema de impedancia de la linea de transmision, pero no se como resolverlo

Desconectado jhonastad

  • PIC10
  • *
  • Mensajes: 34
Re:Problema con red RS485
« Respuesta #6 en: 09 de Septiembre de 2019, 12:15:16 »
Desconecté el circuito de la corriente, medí la resistencia entre A y B desde el conversor USB a rs485 y es de 54K. Conecté un esclavo y ahora la impedancia cayó a 11,4k, al conectar el 2o esclavo la impedancia cayó a 6k.

Como mantengo estable la impedancia??.

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1041
Re:Problema con red RS485
« Respuesta #7 en: 09 de Septiembre de 2019, 12:48:19 »
Que tal jhonastad,

Otro posible problema es la forma en que estás procesando los datos mediante el USART del microcontrolador (por hardware o por software). ¿como es que discriminas los datos de un esclavo a otro, además de la dirección? ¿Cómo sabes que es dirección al recibirla o el STX (para el caso del esclavo 2)? ¿Como discriminas el commando 01 de la dirección 01?
Una cosa importante es que obviamente todos los esclavos reciben el STX (02h), después de eso esperan la dirección y el esclavo direccionado recibe y rpocesa los siguientes datos (comando, CRC, ETX), ¿como es que el otro esclavo discrimina los datos después de recibir la dirección? El esclavo continua recbiiendo los datos (todo el frame) y luego regresa a esperar el STX? ¿El esclavo rompe la recepción y regresa a esperar el STX? Si es así, entonces aquí es donde se produce el problema.

elreypic.

Desconectado jhonastad

  • PIC10
  • *
  • Mensajes: 34
Re:Problema con red RS485
« Respuesta #8 en: 09 de Septiembre de 2019, 13:21:32 »

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]

Desconectado jhonastad

  • PIC10
  • *
  • Mensajes: 34
Re:Problema con red RS485
« Respuesta #9 en: 09 de Septiembre de 2019, 17:34:02 »
Hola a todos, efectivamente es un problema con el buffer de recepción, el cual, no lo estaba limpiando en el momento adecuado y quedaba con basura. Por fin, he logrado conectar 2 esclavos a la red rs485.

Aunque ahora tengo problemas de que me llegan algunos datos corruptos, pero supongo que le deberé dar mas tiempo cuando habilito el pin de transmisión en el max485.

Saludos.