Categorías
Linux

SCADA + TCP/IP + Modbus

INTRODUCCIÓN SCADA se trata de la supervisión de procesos automáticos de una forma tan completa y clara como sea posible con SCADA TCP/IP Modbus SCADA ya se aplica al nivel más bajo de automatización. Por ejemplo, los datos se recopilan por medio de sensores y dispositivos de medición, se solicita la configuración. Para la comunicación con […]

INTRODUCCIÓN

SCADA se trata de la supervisión de procesos automáticos de una forma tan completa y clara como sea posible con SCADA TCP/IP Modbus

SCADA ya se aplica al nivel más bajo de automatización. Por ejemplo, los datos se recopilan por medio de sensores y dispositivos de medición, se solicita la configuración.

Para la comunicación con distintas máquinas, dispositivos y productos de software, los sistemas SCADA deben dominar una gama de tecnologías. Desde conexiones de serie sencillas a sistemas de campo de bus a construcciones de red redundante complejas.

../../../../../Desktop/Captura%20de%20pantalla%202018-10-09%20a%20las%208.01.3

Modbus es un protocolo industrial que fue desarrollado en 1979 para hacer posible la comunicación entre dispositivos de automatización. Originalmente implementado como un protocolo al nivel de la aplicación con la finalidad de transferir datos por una capa serial, Modbus se ha expandido para incluir implementaciones a través de protocolo serial, TCP/IP y el User Datagram Protocol (UDP). Este documento ofrece una perspectiva detallada de la implementación del protocolo.

DIAGRAMA de la comunicación

El presente diagrama muestra la comunicación que se utiliza en esta practica. Donde se tiene un raspberry en un sitio y a través de una VPN se conecta al sistema SCADA.

Captura de pantalla 2018-10-11 a las 1.37.36 p.m.

PREREQUISITOS EN RASPBERRY

Antes de correr el codigo en python, se debe instalar los paquetes para la funcion correcta de python.

sudo apt-get install python-pymodbus python-twisted-conch

../../../../../Desktop/Captura%20de%20pantalla%202018-10-06%20a%20las%2011.01.2

CÓDIGO en python

Este codigo se debe correr en python dentro de una raspberry.

**************************************************

from pymodbus.server.async import StartTcpServer

from pymodbus.datastore import ModbusSequentialDataBlock

from pymodbus.datastore import ModbusSlaveContext, ModbusServerContext

from twisted.internet.task import LoopingCall

import RPi.GPIO as GPIO

LED=26

BZ=19

SW=21

GPIO.setmode(GPIO.BCM)

GPIO.setwarnings(False)

GPIO.setup(LED,GPIO.OUT)

GPIO.setup(BZ,GPIO.OUT)

GPIO.setup(SW, GPIO.IN, pull_up_down=GPIO.PUD_UP)

GPIO.output(LED, GPIO.LOW)

GPIO.output(BZ, GPIO.HIGH)

store = ModbusSlaveContext(

di = ModbusSequentialDataBlock(0, [0]*100),

co = ModbusSequentialDataBlock(0, [0]*100),

hr = ModbusSequentialDataBlock(0, [0]*100),

ir = ModbusSequentialDataBlock(0, [0]*100))

context = ModbusServerContext(slaves=store, single=True)

def updating_writer(a):

context = a[0]

register = 3

slave_id = 0

address = 0

values = [1]

if GPIO.input(SW):values = [0]

context[slave_id].setValues(register,address,values)

print values

def read_context(a):

context = a[0]

register = 3

slave_id = 0

address = 10

value = context[slave_id].getValues(register,address,10)

if value[0]==0:GPIO.output(LED, GPIO.LOW)

if value[0]==1:GPIO.output(LED, GPIO.HIGH)

if value[1]==0:GPIO.output(BZ, GPIO.LOW)

if value[1]==1:GPIO.output(BZ, GPIO.HIGH)

print value[0]

print value[1]

read = LoopingCall(f=read_context, a=(context,))

read.start(.2)

write = LoopingCall(f=updating_writer, a=(context,))

write.start(.2)

StartTcpServer(context)

Impresiones de pantalla de READ and Write

Cuando El sistema está conectado, marca un mensaje de read = OK

../../../../../Desktop/Captura%20de%20pantalla%202018-10-06%20a%20las%2012.54.0

Cuando El sistma esta conectado, marca un mensaje de write = OK

../../../../../Desktop/Captura%20de%20pantalla%202018-10-06%20a%20las%2012.53.0

Cuando existe un error en la conexión , el sistema marcara un mensaje llamado “ERROR”

../../../../../Desktop/Captura%20de%20pantalla%202018-10-06%20a%20las%2012.52.2

TRAFICO CAPTURADO CON WIRESHARK para SCADA TCP/IP Modbus

Se tienen los siguientes paquetes capturados con wireshark. Estos paquetes nos muestran el trafico que existe entre SCADA y la raspberry.

../../../../../Desktop/Captura%20de%20pantalla%202018-10-09%20a%20las%2010.01.2

Si abrimos a detalle un paquete podemos ver que dentro del paquete TCP/IP , solo una pequeña parte contiene datos.

../../../../../Desktop/Captura%20de%20pantalla%202018-10-09%20a%20las%2010.02.3

../../../../../Desktop/Captura%20de%20pantalla%202018-10-09%20a%20las%2010.03.4

CONCLUSIONES

El protocolo Modbus es un sistema maestro-esclavo; que tiene todas las ventajas de un sistema informatico denominado Cliente-Servidor.

Esto genera una gran ventaja ya que permite monitorear y dar control a sistemas mediante servicios remotos. Sumando las ventajas del protocolo SCADA TCP/IP Modbus  nos permite aun mas llevar estos servicios a aplicaciones o tableros con mejor desempeño.

Gracias cris por tu desmadre

REFERENCIAS

https://www.copadata.com/es/soluciones-hmi-scada/control-de-supervision-y-adquisicion-de-datos-scada/

https://paradiso-fp7.eu/scada/

https://idboxrt.com/scada/

OTROS TEMAS

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.