miércoles, 30 de enero de 2013

Librería RS485 C# / Python

Presentamos en esta oportunidad una librería desarrollada por el laboratorio a partir de la librería para RS232 de Teunis van Beelen.
Nuestra librería nos brinda un manejo del puerto serial de la PC para poder conectarlo a un bus RS485.

La conversión RS232 a RS485 puede realizarse mediante el siguiente circuito, en el cual se utiliza el pin RTS del puerto serie para controlar la Transmisión/Recepción sobre el bus RS485.
RS485


El proyecto consiste en una librería dinámica ( ".dll" para Windows y ".so" para Linux ) escrita en lenguaje C la cual maneja el puerto serie de la PC y controla el pin RST para controlar la condición de transmisor / receptor del bus RS485.

La librería puede compilarse sobre Windows con MinGW y sobre Linux con GCC.

Esta librería dinámica puede ser utilizada en cualquier lenguaje que soporte exportar este tipo de librerías, se da como ejemplo, una clase wrapper de nuestra librería en  C# ( exportando la dll sobre Windows ) y en lenguaje Python ( exportando la shared library sobre Linux )


Ejemplo uso en Python


Para utilizar la librería desde python, solo basta copiar a nuestro proyecto los dos archivos:

  • librs485_linux_i386.so
  • Rs485.py

Luego importamos la clase y abrimos el puerto serial (en este caso ttyUSB0) creando un objeto del tipo Rs485: 
from Rs485 import *

port = Rs485(0,115200) #ttyUSB0 - 115200
if port.openPort() == False :
    print("Error opening serial port")

Luego podemos enviar una trama creando un objeto bytarray de python:
ba = bytearray()
ba.append(1)
ba.append(2)
ba.append(3)
ba.append(4)
port.sendPacket(ba,4) #Enviamos 4 bytes

Para recibir bytes, utilizaremos el método "receivePacketWithTimeout"
while True:
 ba = port.receivePacketWithTimeout(5000) # Esperamos 5 segundos
 if len(ba) > 0 :
  print("Bytes received:"+str(len(ba)))

Para descargar el proyecto, click aquí