Middleware S7-300 – Java

SISTEMA: PLC Siemens S7-315 y Windows Server 2016
PROGRAMACION: PLC programado en AWL,  Middleware programado en C# 

El proyecto surgió cuando por necesidades de producción (se crean nuevos modelos de piezas) el cliente decide sustituir el sistema de gestión de un almacén automático de 6 años de antigüedad por otro más moderno y con más funcionalidades.
Esta nueva plataforma la desarrolla de forma excelente Movicoders, empresa especializada en aplicaciones de movilidad.

El problema surgió cuando hubo que recuperar los datos del PLC Siemens S7-315. Nos encontramos con que la separación entre un sistema de alto nivel como el gestor de almacén y uno de bajo nivel como un PLC no permitía una conexión directa. Y por otro lado, el desarrollo futuro del proyecto para poder controlar el comportamiento del almacén desde la nueva aplicación hacía prever que el sistema se iba a volver bastante más complejo.

Ambos factores determinaron la solución final adoptada. Inicialmente se consideró instalar un PLC más moderno (S7-1200) que permitiera un acceso mediante página web, pero las restricciones desde IT hicieron inviable este camino.

También se consideró modificar el programa del PLC del almacén y crear un servidor de Socket para atender las peticiones del sistema de gestión, pero su ocupación de memoria al 99% no permitió desarrollar esta opción.

Finalmente se optó por crear un servidor stand-alone que por un lado se conectara al PLC y recuperara los datos del almacén, y por otro lado atendiera peticiones RESTful desde la aplicación. Se ejecutará en un servidor Windows Server 2016 del cliente.

Esta aplicación se ha desarrollado en C# por permitir una ejecución rápida, acceso completo al PLC y generar un servidor RESTful sin ninguna dependencia externa (es autocontenido).

Una vez que se está ejecutando, se atienden las solicitudes en el puerto 5000. Cuando se accede a la orden GET del API en:

http://10.160.60.55:5000/api/celdas

se responde con los datos recopilados del PLC en formato JSON:

[{"NCelda":0,"Bloqueada":true,"Desconocida":false,"Expedita":false,"Estado":0,"NumMaquina":0,"TipoPieza":0,"Inhibido":0,"NumMolde":0,"FechaHora":"1990-01-01T00:00:00"},{"NCelda":1,"Bloqueada":true,"Desconocida":false,"Expedita":false,"Estado":0,"NumMaquina":0,"TipoPieza":0,"Inhibido":0,"NumMolde":0,"FechaHora":"1990-01-01T00:00:00"},{"NCelda":2,"Bloqueada":true,"Desconocida":false,"Expedita":false,"Estado":0,"NumMaquina":0,"TipoPieza":0,"Inhibido":0,"NumMolde":0,"FechaHora":"1990-01-01T00:00:00"},{"NCelda":3,"Bloqueada":true,"Desconocida":false,"Expedita":false,"Estado":0,"NumMaquina":0,"TipoPieza":0,"Inhibido":0,"NumMolde":0,"FechaHora":"1990-01-01T00:00:00"},{"NCelda":4,"Bloqueada":false,"Desconocida":false,"Expedita":false,"Estado":1,"NumMaquina":1,"TipoPieza":3,"Inhibido":0,"NumMolde":4,"FechaHora":"2020-02-26T06:51:12"},{"NCelda":5,"Bloqueada":false,"Desconocida":false,"Expedita":false,"Estado":1,"NumMaquina":1,"TipoPieza":3,"Inhibido":0,"NumMolde":4,"FechaHora":"2020-02-26T06:26:53"},{"NCelda":6,"Bloqueada":false,"Desconocida":false,"Expedita":false,"Estado":1,"NumMaquina":2,"TipoPieza":3,"Inhibido":0,"NumMolde":2,"FechaHora":"2020-02-26T06:25:32"},{"NCelda":7,"Bloqueada":false,"Desconocida":false,"Expedita":false,"Estado":1,"NumMaquina":2,"TipoPieza":3,"Inhibido":0,"NumMolde":2,"FechaHora":"2020-02-26T06:01:29"},{"NCelda":8,"Bloqueada":false,"Desconocida":false,"Expedita":false,"Estado":1,"NumMaquina":1,"TipoPieza":3,"Inhibido":0,"NumMolde":4,"FechaHora":"2020-02-25T22:11:01"},{"NCelda":9,"Bloqueada":false,"Desconocida":false,"Expedita":false,"Estado":1,"NumMaquina":2,"TipoPieza":3,"Inhibido":0,"NumMolde":2,"FechaHora":"2020-02-25T21:27:02"},{"NCelda":10,"Bloqueada":false,"Desconocida":false,"Expedita":false,"Estado":1,"NumMaquina":1,"TipoPieza":3,"Inhibido":0,"NumMolde":4,"FechaHora":"2020-02-25T21:21:18"},
.......
....... ]

Estos datos son procesados por la nueva aplicación del almacén.

En un futuro se ampliará la funcionalidad para que el sistema de gestión pueda enviar comandos al PLC para gestionar el almacén. Principalmente será solicitar la extracción de piezas del tipo que se está produciendo en línea (este dato lo obtienen desde SAP). Esta nueva gestión se llevará a cabo mediante comandos POST del protocolo RESTful.