SlideShare una empresa de Scribd logo
1 de 38
Descargar para leer sin conexión
1 /
Rackio Framework
Un Framework de Python para el desarrollo de
aplicaciones de automatización y control
2 /
¿Quien soy?
● Ingeniero Químico (UCV-2015)
● Desarrollador Senior Python
● Docente UCV
● Arquitecto de Sistemas
3 /
Índice TIOBE – Ranking IEEE
Indice TIOBE: Medida de popularidad de los lenguajes de programación
4 /
Agenda
● Introducción
● ¿Que es un Framework?
● Rackio Framework
● Componentes de Rackio
● Ejemplos
5 /
Introducción
● Automatización: La automatización industrial es el
uso de sistemas o elementos computarizados y
electromecánicos para fines industriales.
Sensores
+ Actuadores
+ Cerebros
=============
Automatización
6 /
Introducción
7 /
Cerebros
8 /
PLCs y PACs Software
SIMATIC STEP7 Basic (Siemens)
Studio 5000 Logix Designer (Rockwell)
9 /
Conceptos Teóricos
● Ambiente de Desarrollo Integrado (IDE)
Interfaz grafica de usuario en algún sistema
operativo que tiene la capacidad de conectarse con
los dispositivos PLC/PAC y mediante un conjunto de
herramientas permitir la programación adecuada de
una aplicación de automatización
● Entorno de Trabajo (Framework)
Conjunto de herramientas, lenguajes, conceptos,
practicas y criterios para lograr un propósito
especifico, que en nuestro caso es automatización
industrial
10 /
Herramientas prefabricadas
● Bloques
● Etiquetas
● Alarmas
● Gráficos HMI
● Objetos gráficos
● Editores de Programación
1)Lista de Instrucciones
2)Diagrama funcional de bloques
3)Lenguaje de escalera
11 /
¿Y ahora que?
12 /
Revolución 4.0
13 /
IoT - IIoT
14 /
IoT - Avances en Hardware
Beaglebone Black Raspberry PI
15 /
Automatización – Nuevo Enfoque
Sensores
+ Actuadores
+ Cerebros
=============
Automatización
¿PERO?
16 /
Demo de ejemplo
Jonas Neubert: https://www.youtube.com/watch?v=cEyVfiix1Lw
17 /
Código Ejemplo
Medición
Cerebro
Actuación
Actuación
18 /
SMoRES – Principios de Código
● Escalable
● Modular
● Reusable
● Extensible
● Simple
19 /
Rackio Framework
Python
Automatización y Control
Enfoque Tradicional
Tecnologías IoT
Entorno de Trabajo
Herramientas
Patrones de Diseño
Constructores Declarativos
20 /
Herramientas de Rackio
● Etiquetas
● Modelos
● Registro Automático
● Historial y Tendencias
● Definición de Rutinas
(condiciones y acciones)
● Alarmas
● Maquinas de Estado
● Historiador de Eventos
● RESTful API
21 /
Como funciona de Rackio
22 /
Código Ejemplo
● Semáforo Inteligente
– Densidad de transito
– Tiempo
parametrizado
– Indicación de Color y
Tiempo
23 /
Código Ejemplo
● Modulos
– tags.py
– controls.py
– machines.py
– tasks.py
– resources.py
– main.py
24 /
Código Ejemplo – tags.py
from rackio import Rackio, TagEngine
app = Rackio()
tag_engine = TagEngine()
tag_engine.set_tag("red_timer", "float")
tag_engine.set_tag("green_timer", "float")
tag_engine.set_tag("red_dist", "float")
tag_engine.set_tag("green_dist", "float")
tag_engine.set_tag("red_low", "float")
tag_engine.set_tag("green_low", "float")
tag_engine.set_tag("RED_MAX", "float")
tag_engine.set_tag("GREEN_MAX", "float")
app.set_db("tags.db")
# Tags to log
db_record = [
"red_timer",
"green_timer",
]
app.set_dbtags(db_record, 1)
app.set_log(file="app.log")
25 /
Código Ejemplo – controls.py
from rackio.controls import MathAction, Condition, Control
# Condition definitions
cond1 = Condition("red_dist",">=", "red_low")
cond2 = Condition("green_dist",">=", "green_low")
# Action definitions
act1 = MathAction("red_timer", "red_dist * RED_MAX")
act2 = MathAction("green_timer", "green_dist * GREEN_MAX")
# Control Definitions
control1 = Control("C1", cond1, act1)
control2 = Control("C2", cond2, act2)
26 /
Código Ejemplo – machines.py
# machines.py
from rackio.models import IntegerField
from rackio import RackioStateMachine, State
from rackio import TagEngine
class Semaphore(RackioStateMachine):
# States
green = State('Green', initial=True)
yellow = State('Yellow')
red = State('Red')
# Transitions
slowdown = green.to(yellow)
stop = yellow.to(red)
go = red.to(green)
# Parameters
counter = IntegerField(default=0) # Seconds
27 /
Código Ejemplo – machines.py
def on_slowdown(self):
self.counter = 3
def on_stop(self):
tag_engine = TagEngine()
self.counter = tag_engine.read_tag("red_timer")
def on_go(self):
tag_engine = TagEngine()
self.counter = tag_engine.read_tag("green_timer")
28 /
Código Ejemplo – machines.py
def while_green(self):
self.counter -= 1
if self.counter <= 0:
self.slowdown()
def while_yellow(self):
self.counter -= 1
if self.counter <= 0:
self.stop()
def while_red(self):
self.counter -= 1
if self.counter <= 0:
self.go()
29 /
Código Ejemplo – tasks.py
from rackio import Rackio, TagEngine
app = Rackio()
tag_egine = TagEngine()
@app.rackit(1)
def init():
tag_egine.write_tag("red_low", 10)
tag_egine.write_tag("green_low", 10)
tag_egine.write_tag("RED_MAX", 30)
tag_egine.write_tag("GREEN_MAX", 60)
30 /
Código Ejemplo – tasks.py
@app.rackit_on(period=1)
def density():
def traffic_density():
import cv2
# Taking pictures
from sklearn import linear_model
# A lot of machine learning
return density # Value between 0 and 1
S1 = app._machine_manager.get_machine("S1")
if S1.current_state.identifier == "green":
tag_egine.write_tag("red_dist", traffic_density())
elif S1.current_state.identifier == "red":
tag_egine.write_tag("green_dist", traffic_density())
31 /
Código Ejemplo – tasks.py
import RPi.GPIO as GPIO
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
GPIO.setup(1, GPIO.OUT) # Green
GPIO.setup(2, GPIO.OUT) # Red
GPIO.setup(3, GPIO.OUT) # Yellow
@app.rackit_on(period=1)
def lights():
S1 = app._machine_manager.get_machine("S1")
if S1.current_state.identifier == "green":
GPIO.output(1, GPIO.HIGH)
GPIO.output(2, GPIO.LOW)
GPIO.output(3, GPIO.LOW)
elif S1.current_state.identifier == "red":
GPIO.output(1, GPIO.LOW)
GPIO.output(2, GPIO.HIGH)
GPIO.output(3, GPIO.LOW)
else:
GPIO.output(1, GPIO.LOW)
GPIO.output(2, GPIO.LOW)
GPIO.output(3, GPIO.HIGH)
32 /
Código Ejemplo – resources.py
import json
from rackio.api import RackioResource
from rackio import status_code
class SemaphoreResource(RackioResource):
def on_get(self, req, resp, s_id):
app = self.get_app()
sem = app._machine_manager.get_machine("s_id")
doc = sem.serialize()
# Create a JSON representation of the resource
resp.body = json.dumps(doc, ensure_ascii=False)
resp.status = status_code.HTTP_200
33 /
Código Ejemplo – main.py
from rackio import Rackio, TagEngine
from machines import Semaphore
from resources import SemaphoreResource
from controls import control1, control2
from tags import
app = Rackio()
# System machines
semaphore = Semaphore("S1")
app.append_machine(semaphore)
# Controls
app.append_control(control1)
app.append_control(control2)
# API Resources
_sem = SemaphoreResource()
app.add_route('/api/semaphores/{s_id}', _sem)
if __name__ == "__main__":
app.run()
34 /
Limitaciones de Rackio
● Reloj en Tiempo Real
● Sistema Operativo en
Tiempo Real
● Resistencia al cambio
35 /
¿Qué hacemos ahora con
Rackio?
36 /
Futuro de Rackio
● Sistema Administrativos
● Protocolos de Comunicación IOT – IIOT
● Autenticación de Usuarios
● Observadores Personalizados
● Modelos persistentes
● Comandos de gestión del Sistema Operativo
● Finalizar Documentación
● Dominio Propio
● Muchas características mas
37 /
Como conseguir Rackio?
● pip install Rackio
● https://pypi.org/project/Rackio/
● https://github.com/rack-io/rackio-framework
●PREGUNTAS?
¡Gracias!

Más contenido relacionado

Similar a Rackio Framework: Un entorno de trabajo Python para automatización y control industrial

Java Script Frame Works
Java Script Frame WorksJava Script Frame Works
Java Script Frame Workshectorguedea
 
Modelo de estimación de proyectos david v
Modelo de estimación de proyectos david vModelo de estimación de proyectos david v
Modelo de estimación de proyectos david vOzzy Rocker
 
Modelo de estimación de proyectos david v
Modelo de estimación de proyectos david vModelo de estimación de proyectos david v
Modelo de estimación de proyectos david vOzzy Rocker
 
Framework .NET 3.5 06 Operativa básica del framework .net
Framework .NET 3.5 06 Operativa básica del framework .netFramework .NET 3.5 06 Operativa básica del framework .net
Framework .NET 3.5 06 Operativa básica del framework .netAntonio Palomares Sender
 
Rendimiento y consumo energético con python
Rendimiento y consumo energético con pythonRendimiento y consumo energético con python
Rendimiento y consumo energético con pythonpythoncanarias
 
MODELO COCOMO (INGENIERA DE SOFTWARE)
MODELO COCOMO (INGENIERA DE SOFTWARE)MODELO COCOMO (INGENIERA DE SOFTWARE)
MODELO COCOMO (INGENIERA DE SOFTWARE)Yadith Miranda Silva
 
Olimpiada Programación e Informática
Olimpiada Programación e InformáticaOlimpiada Programación e Informática
Olimpiada Programación e Informáticainternetic.edu
 
Efc programación .net-luis fernando aguas - 22012022 1700
Efc programación .net-luis fernando aguas - 22012022 1700Efc programación .net-luis fernando aguas - 22012022 1700
Efc programación .net-luis fernando aguas - 22012022 1700Luis Fernando Aguas Bucheli
 
Sesion 1
Sesion 1Sesion 1
Sesion 11130490
 

Similar a Rackio Framework: Un entorno de trabajo Python para automatización y control industrial (20)

Java Script Frame Works
Java Script Frame WorksJava Script Frame Works
Java Script Frame Works
 
Práctica no1.1
Práctica  no1.1Práctica  no1.1
Práctica no1.1
 
Práctica no1.1
Práctica  no1.1Práctica  no1.1
Práctica no1.1
 
Viernes Tecnicos DTrace
Viernes Tecnicos DTraceViernes Tecnicos DTrace
Viernes Tecnicos DTrace
 
Modelo de estimación de proyectos david v
Modelo de estimación de proyectos david vModelo de estimación de proyectos david v
Modelo de estimación de proyectos david v
 
Modelo de estimación de proyectos david v
Modelo de estimación de proyectos david vModelo de estimación de proyectos david v
Modelo de estimación de proyectos david v
 
Framework .NET 3.5 06 Operativa básica del framework .net
Framework .NET 3.5 06 Operativa básica del framework .netFramework .NET 3.5 06 Operativa básica del framework .net
Framework .NET 3.5 06 Operativa básica del framework .net
 
Rendimiento y consumo energético con python
Rendimiento y consumo energético con pythonRendimiento y consumo energético con python
Rendimiento y consumo energético con python
 
MODELO COCOMO (INGENIERA DE SOFTWARE)
MODELO COCOMO (INGENIERA DE SOFTWARE)MODELO COCOMO (INGENIERA DE SOFTWARE)
MODELO COCOMO (INGENIERA DE SOFTWARE)
 
Dcom visualC++
Dcom visualC++Dcom visualC++
Dcom visualC++
 
Clase 7, 11/9/2007
Clase 7, 11/9/2007Clase 7, 11/9/2007
Clase 7, 11/9/2007
 
Plc variador de velocidad ing k-nt
Plc variador de velocidad   ing k-ntPlc variador de velocidad   ing k-nt
Plc variador de velocidad ing k-nt
 
Plc variador de velocidad ing k-nt
Plc variador de velocidad   ing k-ntPlc variador de velocidad   ing k-nt
Plc variador de velocidad ing k-nt
 
Olimpiada Programación e Informática
Olimpiada Programación e InformáticaOlimpiada Programación e Informática
Olimpiada Programación e Informática
 
Curso de microcontroladores pic18 f4550
Curso de microcontroladores pic18 f4550Curso de microcontroladores pic18 f4550
Curso de microcontroladores pic18 f4550
 
Efc programación .net-luis fernando aguas - 22012022 1700
Efc programación .net-luis fernando aguas - 22012022 1700Efc programación .net-luis fernando aguas - 22012022 1700
Efc programación .net-luis fernando aguas - 22012022 1700
 
Sesion 1
Sesion 1Sesion 1
Sesion 1
 
Algoritmos
Algoritmos Algoritmos
Algoritmos
 
Curso_slc.ppt
Curso_slc.pptCurso_slc.ppt
Curso_slc.ppt
 
Introducción a Angular
Introducción a AngularIntroducción a Angular
Introducción a Angular
 

Rackio Framework: Un entorno de trabajo Python para automatización y control industrial

  • 1. 1 / Rackio Framework Un Framework de Python para el desarrollo de aplicaciones de automatización y control
  • 2. 2 / ¿Quien soy? ● Ingeniero Químico (UCV-2015) ● Desarrollador Senior Python ● Docente UCV ● Arquitecto de Sistemas
  • 3. 3 / Índice TIOBE – Ranking IEEE Indice TIOBE: Medida de popularidad de los lenguajes de programación
  • 4. 4 / Agenda ● Introducción ● ¿Que es un Framework? ● Rackio Framework ● Componentes de Rackio ● Ejemplos
  • 5. 5 / Introducción ● Automatización: La automatización industrial es el uso de sistemas o elementos computarizados y electromecánicos para fines industriales. Sensores + Actuadores + Cerebros ============= Automatización
  • 8. 8 / PLCs y PACs Software SIMATIC STEP7 Basic (Siemens) Studio 5000 Logix Designer (Rockwell)
  • 9. 9 / Conceptos Teóricos ● Ambiente de Desarrollo Integrado (IDE) Interfaz grafica de usuario en algún sistema operativo que tiene la capacidad de conectarse con los dispositivos PLC/PAC y mediante un conjunto de herramientas permitir la programación adecuada de una aplicación de automatización ● Entorno de Trabajo (Framework) Conjunto de herramientas, lenguajes, conceptos, practicas y criterios para lograr un propósito especifico, que en nuestro caso es automatización industrial
  • 10. 10 / Herramientas prefabricadas ● Bloques ● Etiquetas ● Alarmas ● Gráficos HMI ● Objetos gráficos ● Editores de Programación 1)Lista de Instrucciones 2)Diagrama funcional de bloques 3)Lenguaje de escalera
  • 13. 13 / IoT - IIoT
  • 14. 14 / IoT - Avances en Hardware Beaglebone Black Raspberry PI
  • 15. 15 / Automatización – Nuevo Enfoque Sensores + Actuadores + Cerebros ============= Automatización ¿PERO?
  • 16. 16 / Demo de ejemplo Jonas Neubert: https://www.youtube.com/watch?v=cEyVfiix1Lw
  • 18. 18 / SMoRES – Principios de Código ● Escalable ● Modular ● Reusable ● Extensible ● Simple
  • 19. 19 / Rackio Framework Python Automatización y Control Enfoque Tradicional Tecnologías IoT Entorno de Trabajo Herramientas Patrones de Diseño Constructores Declarativos
  • 20. 20 / Herramientas de Rackio ● Etiquetas ● Modelos ● Registro Automático ● Historial y Tendencias ● Definición de Rutinas (condiciones y acciones) ● Alarmas ● Maquinas de Estado ● Historiador de Eventos ● RESTful API
  • 21. 21 / Como funciona de Rackio
  • 22. 22 / Código Ejemplo ● Semáforo Inteligente – Densidad de transito – Tiempo parametrizado – Indicación de Color y Tiempo
  • 23. 23 / Código Ejemplo ● Modulos – tags.py – controls.py – machines.py – tasks.py – resources.py – main.py
  • 24. 24 / Código Ejemplo – tags.py from rackio import Rackio, TagEngine app = Rackio() tag_engine = TagEngine() tag_engine.set_tag("red_timer", "float") tag_engine.set_tag("green_timer", "float") tag_engine.set_tag("red_dist", "float") tag_engine.set_tag("green_dist", "float") tag_engine.set_tag("red_low", "float") tag_engine.set_tag("green_low", "float") tag_engine.set_tag("RED_MAX", "float") tag_engine.set_tag("GREEN_MAX", "float") app.set_db("tags.db") # Tags to log db_record = [ "red_timer", "green_timer", ] app.set_dbtags(db_record, 1) app.set_log(file="app.log")
  • 25. 25 / Código Ejemplo – controls.py from rackio.controls import MathAction, Condition, Control # Condition definitions cond1 = Condition("red_dist",">=", "red_low") cond2 = Condition("green_dist",">=", "green_low") # Action definitions act1 = MathAction("red_timer", "red_dist * RED_MAX") act2 = MathAction("green_timer", "green_dist * GREEN_MAX") # Control Definitions control1 = Control("C1", cond1, act1) control2 = Control("C2", cond2, act2)
  • 26. 26 / Código Ejemplo – machines.py # machines.py from rackio.models import IntegerField from rackio import RackioStateMachine, State from rackio import TagEngine class Semaphore(RackioStateMachine): # States green = State('Green', initial=True) yellow = State('Yellow') red = State('Red') # Transitions slowdown = green.to(yellow) stop = yellow.to(red) go = red.to(green) # Parameters counter = IntegerField(default=0) # Seconds
  • 27. 27 / Código Ejemplo – machines.py def on_slowdown(self): self.counter = 3 def on_stop(self): tag_engine = TagEngine() self.counter = tag_engine.read_tag("red_timer") def on_go(self): tag_engine = TagEngine() self.counter = tag_engine.read_tag("green_timer")
  • 28. 28 / Código Ejemplo – machines.py def while_green(self): self.counter -= 1 if self.counter <= 0: self.slowdown() def while_yellow(self): self.counter -= 1 if self.counter <= 0: self.stop() def while_red(self): self.counter -= 1 if self.counter <= 0: self.go()
  • 29. 29 / Código Ejemplo – tasks.py from rackio import Rackio, TagEngine app = Rackio() tag_egine = TagEngine() @app.rackit(1) def init(): tag_egine.write_tag("red_low", 10) tag_egine.write_tag("green_low", 10) tag_egine.write_tag("RED_MAX", 30) tag_egine.write_tag("GREEN_MAX", 60)
  • 30. 30 / Código Ejemplo – tasks.py @app.rackit_on(period=1) def density(): def traffic_density(): import cv2 # Taking pictures from sklearn import linear_model # A lot of machine learning return density # Value between 0 and 1 S1 = app._machine_manager.get_machine("S1") if S1.current_state.identifier == "green": tag_egine.write_tag("red_dist", traffic_density()) elif S1.current_state.identifier == "red": tag_egine.write_tag("green_dist", traffic_density())
  • 31. 31 / Código Ejemplo – tasks.py import RPi.GPIO as GPIO GPIO.setwarnings(False) GPIO.setmode(GPIO.BOARD) GPIO.setup(1, GPIO.OUT) # Green GPIO.setup(2, GPIO.OUT) # Red GPIO.setup(3, GPIO.OUT) # Yellow @app.rackit_on(period=1) def lights(): S1 = app._machine_manager.get_machine("S1") if S1.current_state.identifier == "green": GPIO.output(1, GPIO.HIGH) GPIO.output(2, GPIO.LOW) GPIO.output(3, GPIO.LOW) elif S1.current_state.identifier == "red": GPIO.output(1, GPIO.LOW) GPIO.output(2, GPIO.HIGH) GPIO.output(3, GPIO.LOW) else: GPIO.output(1, GPIO.LOW) GPIO.output(2, GPIO.LOW) GPIO.output(3, GPIO.HIGH)
  • 32. 32 / Código Ejemplo – resources.py import json from rackio.api import RackioResource from rackio import status_code class SemaphoreResource(RackioResource): def on_get(self, req, resp, s_id): app = self.get_app() sem = app._machine_manager.get_machine("s_id") doc = sem.serialize() # Create a JSON representation of the resource resp.body = json.dumps(doc, ensure_ascii=False) resp.status = status_code.HTTP_200
  • 33. 33 / Código Ejemplo – main.py from rackio import Rackio, TagEngine from machines import Semaphore from resources import SemaphoreResource from controls import control1, control2 from tags import app = Rackio() # System machines semaphore = Semaphore("S1") app.append_machine(semaphore) # Controls app.append_control(control1) app.append_control(control2) # API Resources _sem = SemaphoreResource() app.add_route('/api/semaphores/{s_id}', _sem) if __name__ == "__main__": app.run()
  • 34. 34 / Limitaciones de Rackio ● Reloj en Tiempo Real ● Sistema Operativo en Tiempo Real ● Resistencia al cambio
  • 35. 35 / ¿Qué hacemos ahora con Rackio?
  • 36. 36 / Futuro de Rackio ● Sistema Administrativos ● Protocolos de Comunicación IOT – IIOT ● Autenticación de Usuarios ● Observadores Personalizados ● Modelos persistentes ● Comandos de gestión del Sistema Operativo ● Finalizar Documentación ● Dominio Propio ● Muchas características mas
  • 37. 37 / Como conseguir Rackio? ● pip install Rackio ● https://pypi.org/project/Rackio/ ● https://github.com/rack-io/rackio-framework