Conectando dispositivos RS-485 de forma transparente

1

Tengo una computadora principal que tiene una placa RS-485. Se comunica con sus subsistemas a través de esta placa de comunicación.
También tengo una computadora de prueba que está conectada a la placa principal a través del canal RS-485. Se utilizará para probar y actualizar los subsistemas utilizando estos canales RS-485.

Quiero que la computadora principal se comporte de manera transparente para probarla, de modo que la computadora principal no sepa sobre el algoritmo de prueba. No quiero actualizar la computadora principal cuando cambian los algoritmos de prueba.
Si hubiera diseñado mi hardware, usaría un FPGA para conectar la computadora de prueba a los subsistemas físicamente, de modo que la computadora de prueba conectaría los subsistemas directamente y la computadora principal no conocería las pruebas, pero uso una computadora estándar y una comunicación tarjeta.

¿Qué haría para conectar la computadora de prueba y los subsistemas sin agregar algoritmos relacionados con la prueba a la computadora principal?

    
pregunta zontragon

1 respuesta

3

Bueno, hay muchas soluciones posibles ... pero no ha proporcionado suficiente información realmente sobre cómo se ve la comunicación entre la computadora de prueba y los subsistemas. ¿Esto depende totalmente de usted sobre qué implementar? Voy a asumir que lo es, pero la solución probablemente cambiaría si el protocolo sobre RS485 ya está definido o seleccionado.

La mayoría de los protocolos de comunicaciones en este tipo de nivel contendrán algún tipo de direccionamiento integrado.

Si te sientes cómodo enviando estructuras binarias, entonces simplemente define una estructura con la que cada mensaje comience que contenga:

  • La longitud en bytes de todo el mensaje
  • La dirección del subsistema al que intenta comunicarse
  • La dirección del subsistema del que está hablando DESDE (opcional)
  • El comando que está intentando emitir al subsistema

Comenzaría cada mensaje con este encabezado, luego pasaría los datos necesarios y finalmente, opcionalmente (pero se recomienda encarecidamente en los enlaces de estilo RS485) enviará una suma de comprobación o CRC del encabezado y los datos.

La computadora principal en ese punto no necesita hacer nada más que leer el encabezado del mensaje, ver la longitud y pasarla al subsistema apropiado. Ni siquiera tiene que saber dónde están las direcciones ... simplemente puede transmitir el mensaje a los tres subsistemas. A medida que los comandos cambian y los datos cambian, el formato del mensaje no ... por lo que la lógica de la computadora principal puede permanecer igual.

La respuesta del subsistema debe estar en el mismo formato.

Es útil colocar la dirección del nodo FROM para que el subsistema sepa a quién responder. En algunas situaciones eso nunca va a cambiar, así que puedes codificar eso. Por lo general, prefiero colocar la dirección de nodo FROM de todos modos, ya que nunca se sabe cómo la topología de la red puede cambiar más adelante.

En la última cosa. Ya que estás llamando a esta "computadora principal", asumo que puedes estar hablando de una PC real. Con las PC reales que ejecutan un sistema operativo moderno como Windows, OS / X o Linux, tendrá una latencia en la rapidez con la que la aplicación en esa computadora puede responder ... así que cree grandes tiempos de espera en su protocolo. Muchos protocolos basados en serie son un verdadero problema para las PC modernas debido a los tiempos de espera ajustados en las respuestas, etc. Probablemente no pueda pasar MODBUS a través de una PC moderna de la manera que describe, por ejemplo ... al menos no sin controladores de dispositivos seriales especiales ni violar la sincronización (lo que a veces es correcto para soluciones fijas) En el momento en que la computadora principal lee la respuesta de la computadora de prueba, transmítala a los subsistemas, obtén las respuestas y reenvía la transmisión a la computadora de prueba varios cientos de milisegundos podrían transcurrir.

    
respondido por el darron

Lea otras preguntas en las etiquetas