Entre 485 y 232

Atendiendo a la pregunta de :

> Hola, estoy leyendo el foro buscando información sobre programar una rutina en Visual Basic, para conectar con unos dispositivos que trabajan con RS485.

En una conexión serie, estamos intercambiando información a través de una conexión de Tu a Tu (Peer To Peer) en Ingles. Ello significa que cada trama enviada por un DCE es recibida en el otro extremo por un DCE o DTE y viceversa, electrónicamente las señales estan diseñadas como entradas/salidas, por lo que una salida de un extremo se corresponde a la entrada en el otro, en una topología 485 la primera distinción es la característica de utilizar dos hilos conectados a la electrónica a través de unas Entradas/Salidas triestado, ello significa que utilizando las mismas patillas podemos enviar y recibir datos. La señal del puerto serie trasmite la información por diferencial de voltaje entre el GND y el correspondiente transmisor/receptor, el 485 distingue los niveles por diferencial de voltaje entre sus dos hilos (+) y (-), por lo que es mas inmune a las interferencias, su comportamiento es mucho mejor que el 232 en entornos industriales y evidentemente su cableado mucho mas sencillo.

Por sus características de impedancia, el 485 permite la conexión de hasta 32 dispositivos y creo que hasta 100m, mientras el 232 solo permite la conexión de 1 dispositivo y creo que el máximo según la especificación es de 15m.

La primera particularidad de cualquier dispositivo 485 es que debe estar preparado para configurarse como un único dispositivo dentro de la red y además solo uno de los dispositivos deberá disponer del rol de “Host” o anfitrión de manera que el resto de dispositivos solo participaran en el intercambio de datos respondiendo a las solicitudes del anfitrión.

Por poner un ejemplo, imaginemos un PC con un conversor USB/485 configurado a través de un puerto serie, y este tiene conectadas 4 basculas numeradas del  ’01’ al ‘04’… el software del PC, para leer el peso de todas las basculas deberá componer las tramas direccionando a cada una de ellas y recibiendo la información de una en una…

Imaginemos el formato de la trama de petición : PPUN
Donde PP = “Pedir Peso” y UN = Numero Unidad de Bascula

PC -> enviara : PP01
PP01 -> Respondera :  RB011,500

Donde RB = “Resultado Bascula”, 01 es la unidad de bascula que responde y 1,500 los Kilos.

En la siguiente operación el PC deberá enviar : PP02.. Para recibir el peso de la segunda bascula y así sucesivamente.

Espero vuestras preguntas para ir matizando sobre el tema… pues es mas amplio y espefico de lo que parece.

Saludos,
Pep Lluis,

6 Replies to “Entre 485 y 232”

  1. Hola PepLuis… he estado siguiendo el blog desde hace días, sobretodo viendo los posts referentes a la comunicación serial =D creeme que me han servido de mucho.

    Ahora bien, tengo unas cuantas dificultades técnica y quisiera saber si podrías, si no explicarme tan ampliamente como queda demostrado que lo haces, al menos medio orientarme en que pudiera estar mi error.

    En mi proyecto estoy realizando una aplicación de Control y Monitoreo, la cual se enlaza a un dispositivo vía RS485. Constantemente tiene que estar enviando solicitudes de información del estado de dispositivo y recibiendo y ordenando/interpretando dicha información.

    El problema radica en que, como hay que estar enviando/recibiendo datos muy seguido, no se por que razón, al ‘x’ tiempo de estar funcionando la aplicación, esta se congela y ya no da señales de vida.

    Habia implementado que, a base de Timers, cada ‘x’ tiempo solicitara la información, pero pues, llegaba a un punto en que las diferentes consultas coincidían en tiempo y pues la aplicación ‘tronaba’, después decidí unificar todo en un solo Timer y bajo condicionales (IF…) ir desplegando los demás métodos cuando fuera necesario (cada 45 segundos, cada 3 minutos, etc…) y además detener y reiniciar el ciclo del contador para evitar una congestión en el proceso de Envío/Recepción, pero aun así (y ante mi incredulidad absoluta, ya que, según yo, eso proporcionaría un mayor control al ciclo de consultas del que ya existía) la aplicación, después de algunos cuantos ciclos, se daba el lujo de tronar.

    Así que pues, viendo el panorama, que seria lo que, dado tu ojo experto, me esta dando problemas? O que recomendación tienes para tales situaciones =S ya que la verdad, pues aun soy bastante inexperto en esto y no creo que (honestamente hablando) a estas alturas haga bien las cosas xD

    Pero bueno, agradezco de antemano toda la ayuda que has brindado con tus posts y tambien la atencion recibida =D para cualquier cosa quedo a tus ordenes.

    Saludos!

  2. Hola Araxhiel Khy,

    Por favor enviame una nota a traves de [Contact] y revisamos tu tema en privado.

    Saludos,
    Pep Lluis,

  3. Hola Pep Lluis:
    Primero disculpá mi ingenuidad…
    Te comento mi problema ya que por lo que he leido aquí tenés mucho conocimiento.
    Lo que estoy necesitando es, utilizando visual basic 6.0, hacer un software para controlar 3 pistas de scalextriz(o como se escriba) las cuales dos tiene 6 carriles y la otra 2, cada pista tiene un controlador de tiempo el cual muestra al cliente los minutos que le restan, y quiero manejarlo por el puerto serie (de hecho ya está hecha la conexión y funcionando actualmente con un software, pero debo crear uno nuevo) Esve leyendo para ver si utilizo rs232 o rs485, por lo que tu comentario dice debo utilizar 485, ya que yo tengo conectado todo los controladores de tiempo al puerto serie. Y aquí va mi incoveniente, no termino de entender cómo identificar en vb cada controlador de tiempo para habilitar(porque el software me debe dar corriente a la pista, lo que está armado para que se habilite al mandarle tensión y el tiempo al controlador) la pista corespondiente. Lo que estaría necesitando sería, cómo identificar los los “PP”(según tu posteo) de cada controlador.
    Espero me haya explicado bien y te agradecería muchísimo tu ayuda.
    Dejo mi mail por si puedes responder por ese medio.

    Saludos y desde ya gracias,
    Mauro!

  4. Hola Pep Llius!
    He estado leyendo el foro y seguramente por el conocimiento que se ve que tenés me puedas ayudar.
    He buscado mucho y no encuentro cómo hacer lo siguiente, tengo una pista de scalectrix en la cual tengo 14 carriles, para cada carril tengo un controlardor de tiempo, al cual desde mi software debo enviarle el tiempo que debe habilitarme la pista, osea darle tensión. Tengo conectado cada controlador con el rs485 (No estoy seguro si es rs232 o rs485, pero por lo que lei que con 485 podés conectar más de un dispositivo debe de estar conectado con este). La cuestión, yo estoy realizando el software con vb 6.0 y no encuentro cómo identificar cada disposivo desde vb, para poder enviarle los datos al controlador correcto. Sserian los “PP” de tu comentario, a cada váscula le has puesto ’01, 02, 03…’ yo no sé como desde visual identificar a cada controlador de tiempo con el ’01, 02, 03, 04…’

    Desde ya te agredecería tu ayuda muchísimo.
    Saludos,
    Mauro!

  5. Hola, soy novato en esto de la programación y tengo unas dudillas con el asunto de la comunicación serie. Se me ha encargado comunicar el PC con un equipo mediante puerto serie rs485. Para comunicarme con dicho equipo debo enviarle una trama con la siguiente estructura:

    Inicio|Longitud|Aparato|Comando|Datos|Suma de chequeo

    Un ejemplo de la trama rellena sería:
    Inicio: 0x80 (3 byts iguales)
    Longitud: 0x03 (Nº de byts en campo – Datos)
    Aparato: 0x01 (1byt)
    Comando: 0xBF (1byt)
    Datos: Según el datasheete del fabricante “Contiene el valor del comando consultado (máx. 127 bytes)” – Aun no sé muy bien de que va esto y cómo sacar su longitud.
    Suma de Chequeo: ¿Cómo hago para sumar todos los campos de la trama? y que se actualice en la trama.

    En resumen, necesito enviar esa trama y mirando los ejemplo de otros hílos, de su blogs, podría hacer lo del array buffer, pero como hago si quiero cambiar el contenido de dicha trama durante el proceso de ejecucón del programa. ¿y en cuanto a la recepción de la información desde el equipo?

    Si conoce alguna web o tutorial que me pueda ayudar le agradecería que me la facilitara.

    Un saludo y gracias por todo.
    Enhorabuena por su web.

    PD: En principio se va a emplear Visual Basic.

  6. Hola Leo!
    Creo que como en otras ocasiones, lo mas adecuado es aconsejarte el libro gratuito que tengo para descargar en :
    http://msmvps.com/blogs/peplluis/archive/2007/06/18/robot-dispensador-de-msdn-video.aspx

    Tambien disponenes de un ajemplos para enviar/recibir tramas variables asi como realizar las tareas de suma de chequeo en :

    http://msmvps.com/blogs/peplluis/archive/tags/Puertos+Serie/default.aspx

    No dues en contactar de nuevo si tienes alguna pregunta concreta.

    Saludos,
    Pep lluis,

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.