domingo, 24 de junio de 2012

Implementaciones de Modbus para python

En python existen módulos o librerías casi para cualquier cosa que se necesite, un caso es realizar comunicaciones desde python a sistemas SCADA por medio del protocolo Modbus.

Existen varias librerías:
  • MinimalModbus: Implementación de Modbus RTU para python.
  • modbus-tk: Permite crear aplicaciones Modbus facilmente con python.
  • pymodbus: Es una implementación completa del protocolo Modbus en python usando twisted para comunicaciones asincronas.

Un ejemplo del uso de pymodbus lo pueden encontrar en el blog de Juanjo Conti.

En el caso de modbus-tk se encuentra un ejemplo de pruebas con modbus escrito por Thiago Freitas en su blog. Un vídeo de la demostración de lo escrito por Thiago lo pueden ver en el vídeo a continuación:

1 comentario:

  1. Buenas, soy Ángel y me gustaría comentarle una duda a ver si me puede echar una mano.

    He implementado un script usando pymodbus que lee registros de un PLC. Hasta ahí todo perfecto. El problema es que la lectura se efectúa cada cierto tiempo, y de vez en cuando se me aborta la ejecución del programa mostrando por terminal el siguiente error:

    Traceback (most recent call last):
    File "lectura_reg.py", line 107, in
    hora_plc = client.read_holding_registers(read_register, read_qty)
    File "build/bdist.linux-armv7l/egg/pymodbus/client/common.py", line 110, in read_holding_registers
    File "build/bdist.linux-armv7l/egg/pymodbus/client/sync.py", line 79, in execute
    File "build/bdist.linux-armv7l/egg/pymodbus/transaction.py", line 66, in execute
    File "build/bdist.linux-armv7l/egg/pymodbus/client/sync.py", line 159, in _send
    AttributeError: 'NoneType' object has no attribute 'send'


    Me gustaría saber como puedo controlar este error para que cuando se efectúe no se aborte el programa, sino que siga ejecutándose y efectuando lecturas de registros.

    Muchas gracias por adelantado.

    Un saludo =D

    ResponderEliminar