Creando un SCADA con Python y HTML5

6,140 views
5,720 views

Published on

Breve descripción del proyecto txscada como prueba de concepto de P

Published in: Education

Creando un SCADA con Python y HTML5

  1. 1. Creando un SCADA con Python y HTML5 Defoss´ Nahuel e PyConAr 2012
  2. 2. Qui´n soy yo? e $ whoami Licenciado en Inform´tica de UNPSJB a Integrante del grupo de investigaci´n Microcontroladores o e Internet Evangelizador Python en la universidad hace 5 a˜os n Co-desarrollador de Prymatex Desarrollador web en Machinalis Donde encontrarme @D3f0 nahuel (punto) defosse (at) gmail (dot) com d3f0 en #freenode
  3. 3. Por que deber´ estar en esta charla ıas 1. Sos un hobbista electr´nico y quer´s aprender a usar o e Python para integrar y aprovechar tu hardware 2. Tenes un Ardruino, Raspbbery Pi, BeageBone o alguna otra computadora peque˜a y quer´s aprender sobre n e comunicaciones 3. Tenes conocimiento de SCADAs en el ´mbito industrial y a estas buscando una alternativa libre, robusta y adaptable. 4. Te gustar´ saber como automatizar tu casa de manera ıa escalable y abierta (dom´tica) o 5. Te interesa brindar un servicio basado en lo anterior SaaS (SCADA as a Service)
  4. 4. Que es un SCADA Seg´n la Wikipedia... es un software que permite controlar y u supervisar procesos industriales a distancia. Facilita retroalimentaci´n en tiempo real con los dispositivos de campo o (sensores y actuadores) y controlando el proceso autom´ticamente. Provee de toda la informaci´n que se a o genera en el proceso productivo (supervisi´n, control calidad, o control de producci´n, almacenamiento de datos, etc.) y o permite su gesti´n e intervenci´n. o o
  5. 5. Esquema General de un Sistema SCADA
  6. 6. Dispositivos de Control Son conocidos con varios nombres 1. RTU Remote Terminal Unit 2. IED Inteligent Electronic Device 3. PLC Programable Logical Unit
  7. 7. IED/RTU/PLC Son dispositivos electr´nicos que atienden un proceso, y o que toman decisiones con tiempos cortos. A diferencia de un sistema asilado se comunican mediante alg´n protocolo y enviar y recibir mensajes que en general u est´n orientados a: a 1. Consultar el estado de valores anal´gicos y/o digitales o 2. Env´ de alertas (eventos) con bastante precisi´n ıo o temporal dependiendo del caso 3. Comandos de configuraci´n o
  8. 8. Protocolos SCADA 1. RS-485 (serial con inmunidad al ruido y pensado para uso M/S) 2. Modbus 3. DNP (Distributed Network Protocol) Link 4. MOSCAD (Propietario motorola, deprecated) 5. IEC 61850 5.1 ANS1 5.2 GOOSE
  9. 9. ¿Qu´ hicimos? e En el contexto del proyecto de investigaci´n o Sistema SCADA con dispositivos de bajo costo (PIC) Protocolo de comunicaciones basado en RS485 Software de adquisici´n de datos basado en Twisted o Como actividad de extensi´n o Desarrollo de sistema de control de sem´foros a Desarrollo de sistema de control de variables el´ctricas e (en desarrollo).
  10. 10. Protocolo Mara El protocolo Mara es un protocolo abierto especializado en aprovechar dispositivos de bajo coste (en un principio PIC). Cada comando puede o no llevar payload. El checksum y el n´mero de secuencia permiten cierto control de integridad. u
  11. 11. Estructura de Mara Basica 1.0 Cabecera Un byte que identifica el comienzo de un mensaje Length El largo total del mensaje en bytes Source La direcci´n del emisor del mensaje, suele usarse 0 para el o SCADA Destination El destino del mensaje. Al estar basado en RS485, no suele superar Sequence El n´mero de secuencia del mensaje u
  12. 12. Comandos de Mara Actualmente Mara est´ siendo utilizado mediante polling a y en cascada. El centro de control env´ un mensaje con un comando de ıa consulta 0x10 Un RTU especial llamado concentrador responde con los valores de todos sus esclavos
  13. 13. Que variables recoge mara? Digitales (DIS) Variables de sistema y diagn´stico (VarSys) o Anal´gicas 16 bits sigandas (AIS) o Eventos con precisi´n de 1/32K segundos (Eventos) o
  14. 14. Que es un concentrador? En nuestro caso, una placa de desarrollo llamada Explorer 16 con un shield de comunicaciones Ethernet. Se programa en C (Stack TCP/IP).
  15. 15. Scada con Python ¿Como escribimos el centro de control para dialogar con los concentradores? Elegimos Twisted como framework de red debido a que ya se han implementado algunos protocolos como ModBus Utilizamos el paquete bitfield para manejar bits como si fuesen arreglos Mediante Construct obtenemos un DSL para describir mara o cualquier otro portocolo. Metemos diccionarios y sacamos tramas Metemos tramas y obtenemos diccionarios Peewee como mapeador objeto-relacional por simplicidad Flask como presentaci´n web o
  16. 16. Base de Datos Mediante Peewee podemos definir de manera sencilla la estructura de los datos class Concentrador(peewee.Model): direccion_ip = models.CharField() activada = models.BooleanField() class IED(peewee.Models): concentrador = models.ForeignKey(Concentrador) nombre = peewee.CharField() class DI(peewee.Model): ied = peewee.ForeignKey(IED) valor = peewee.IntegerField()
  17. 17. Recolecci´n de datos o El concentrador brinda un socket TCP, sobre el cual nos comunicamos con mara. Creamos una sub-clase de Protocol en Twisted que utilice nuestro Construct de mara para enviar y recibir datos Por cada concentrador establecer una conexi´n atendida o por una instancia del protocolo Cuando la comunicaci´n es compleja, el aut´mata se o o concentra en los derivados de Protocol class MaraProtocol(Protocol): def dataReceived(self, data): TramaMara.parse(data) # Guarda en base de datos
  18. 18. Estructura de HMI El HMI es la GUI con el usuario. Permite la supervisi´n, configuraci´n y control o o Implementada con Flask por sencillez Utilizando Jinja2 como motor de templates @app.route("/") def index(): return render_template("index.html")
  19. 19. HMI como aplicaci´n del cliente o jQuery + jQueryUI GUI general del HMI jQuery DataTable Grids de datos HighCharts Gr´ficos bonitos a jQuerySVG Hace que el manejo de SVG sea tan sencillo como el del DOM de una p´gina a $(’.interruptor’).style(’background’:’red’) .click(mostrarDialogo);
  20. 20. Desarrollo del sistema
  21. 21. Capturas de pantalla (1)
  22. 22. Capturas de pantalla (1)
  23. 23. Capturas de pantalla (1)
  24. 24. Futuro Servidor IEC 16850 (normalizaci´n) o Utilizar socket.io de alguna manera para evitar polling (Tornado / Node.JS) Fortalcer el client side con Backbone.JS Mejorar la implementaci´n de comandos o Generaci´n de reportes (relatorio) o Cambiar de event-loop?
  25. 25. El c´digo fuente o https://github.com/D3f0/txscada Est´s invitado a fokear el proyecto y adaptarlo a tus a necesidades! El c´digo fuente de la aplicaci´n del Explorer 16 no es o o libre, pero ser´ interesante realizar ports sobre open ıa hardware
  26. 26. Otros sitios donde chusmear Linkidoky Un scada hecho en Python http://www.likindoy.org/es/Inicio youSCADA Un scada hecho con NodeJS con un concepto muy parecido a txscada http://isolasoftware.it/2012/09/14/youscada-presented- at-graphical-web-2012/
  27. 27. The End Muchas Gracias!

×