4 de mayo de 2017

Una función de bloque (FB) para el registro de datos en PLC Siemens

En la entrada anterior expliqué cómo dibujar una gráfica en HMI con los datos almacenados en un bloque de datos (DB) en un PLC. Ahora voy a centrarme en la captura de datos en el propio PLC y para ello he desarrollado una función de bloque que recoge todo el proceso de captura.

Realizar la captura de datos de un proceso puede resultar un tema complejo ya que debemos tener en cuenta todos los factores en juego, tales como la velocidad de adquisición o la capacidad de almacenamiento disponible. La forma óptima y con la que obtendremos el mejor rendimiento es usar bloques de organización (OB) de interrupción por tiempo "Cyclic interrupt", en los que a intervalos regulares se leen las señales a analizar. En los nuevos PLC de la gama 1500 de Siemens he visto que se pueden programar OB de interrupción por tiempo con periodos de 500 μs en adelante.

En los veteranos S7-300 estos OB tienen un periodo de interrupción más largo, pueden empezar, según modelo, en el rango de 100 o 200 ms en adelante.

Sin embargo esta no es la estrategia que voy a seguir en este ejemplo, ya que el FB que he programado se llamará en el ciclo principal del PLC. Por tanto lo primero de lo que debemos asegurarnos es que el tiempo de ciclo de nuestro programa es suficiente para registrar los datos del sistema. Por ejemplo si tenemos una señal analógica proveniente de una célula de carga cuyo conversor analógico/digital tiene un tiempo de actualización de 100 ms y el tiempo de ciclo de nuestro PLC es de unos 15 ms, entonces no habrá problemas con la captura de datos.

NOTA: es importante señalar que el tiempo de ciclo de un PLC no es un valor constante y depende de la carga de programa en cada ciclo. Por lo general será suficiente asegurarse de que, mientras esté la captura de datos en marcha, no se requieran tareas pesadas al PLC tales como bucles FOR o WHILE largos.

Otro elemento a tener en cuenta es la cantidad máxima de datos a almacenar. Mi objetivo es la representación de los datos en una gráfica en un panel de Siemens y el número máximo de elementos que puede tener una tabla para ser enlazada desde el panel al PLC es de 1600 valores. Si se toma un dato en cada ciclo de scan del PLC las tablas de datos se llenan en pocos segundos, así que es necesario discriminar los datos a guardar cada cierto intervalo o el máximo valor de cada intervalo, por ejemplo.

Teniendo todo esto en cuenta he preparado un FB que utilizo cuando tengo que hacer un registro de datos. Una llamada a dicho FB tiene el siguiente aspecto:


El funcionamiento es el siguiente: cuando la señal de habilitación está activa y la Señal X se encuentra entre el Valor mínimo (X) y Valor máximo (X) se procede a la captura de datos, indicado con la salida Capturando. Cada vez que la Señal X se incremente en un Paso mínimo (X) se almacenará un nuevo dato en la tabla, salvo que esté activada la opción Guardar máximos (Y), en cuyo caso el valor que se guardará será el máximo para la Señal Y dentro del intervalo definido por el Paso mínimo (X). Una vez finalizada la captura de datos, bien porque la Señal X haya salido de la ventana de valores mínimo y máximo o porque haya caído la señal de habilitación, se activará la salida Listo durante el tiempo especificado en Tiempo pulso fin lectura. El número de puntos almacenados en las tablas lo tenemos en la salida Puntos y si se alcanza el límite de datos posible se activa la señal Desbordamiento. Para repetir una captura de datos será necesario dar un pulso a la señal de Reinicialización antes de volver a habilitar la captura.

Los datos se almacenan en tablas que deberemos crear en un bloque de datos (DB) aparte y deberán tener el formato Array[0..1599] of Real. Se pasan al FB como parámetros InOut, y al ser un tipo de datos estructurado se pasan como puntero, con lo que no se desperdicia memoria duplicando las tablas, tal y como viene explicado en la documentación:

24 de abril de 2017

Gráfica X/Y en HMI Siemens a partir de puntos almacenados en un bloque de datos (DB)

Si utilizamos un PLC Siemens para realizar una captura de datos y después pretendemos realizar una gráfica con estos datos en un panel táctil de Siemens (un Comfort Panel por ejemplo), veremos que la cosa no es tan sencilla.

Los controles para mostrar gráficas en los sistema HMI de Siemens parecen estar pensados para que el propio sistema HMI haga la captura de datos para su representación, como queriendo liberar al PLC de esta tarea. Sin embargo el limitado ciclo de adquisición que tienen estos sistemas nos limitan a procesos con una dinámica lenta, en los que registrando un punto cada varios segundos sea suficiente. Si es necesario registrar un proceso más rápido deberá ser el PLC el que se haga cargo, guardando, por ejemplo, los datos en tablas en un bloque de datos (DB), pero entonces se plantea el problema de cómo llevar estos datos al control de visualización de gráficas.

En esta entrada voy a explicar cómo representar en un control "Visor de curvas f(x)" datos almacenados en un bloque de datos en un PLC. Me he basado en un ejemplo que me facilitó un técnico de Siemens, aunque yo lo he elaborado un poco más.

La idea general será que el control "Visor de vurvas f(x)" permite ser configurado para obtener los datos de un fichero de texto en formato CSV, y como desde un script podemos crear ficheros de texto y además tenemos acceso a las variables del PLC, programaremos uno que vaya leyendo los datos almacenados en el bloque de datos y escribiéndolos en un fichero CSV digerible por el control "Visor de curvas f(x)".

11 de abril de 2017

Unas notas sobre las novedades para programar controladores S7-1500 en TIA Portal

En estos últimos años me he dedicado casi en exclusiva a programar PLC de Siemens con el software de ingenería TIA Portal, desde la versión 12 a la última 14. Al principio controladores de la gama S7-300 pero, además, he empezado a utilizar la nueva gama S7-1500, que traen un cambio importante de tecnología. Aunque la programación de los antiguos S7-300/400 sirve para los nuevos S7-1500, mantener las mismas constumbres de programación nos hará desaprovechar muchas de las importantes mejoras que traen estos últimos.

Para ponernos al día sobre todas las posibilidades Siemens pone a nuestra disposición abundante documentación que nos servirá de orientación. En esta entrada haré un resumen de las ideas y conceptos que más me han llamado la atención y que me han parecido más interesantes. A continuación tenéis una serie de enlaces donde podemos acceder a la fuente de esta documentación en la propia página de Siemens:
Lo primero que tengo que decir es que si tenemos un proyecto en TIA Portal con un S7-300 y tenemos que migrarlo a un S7-1500 el proceso es muy sencillo. Yo habré migrado media docena de proyectos con distintas configuraciones y no he tenido ningún problema, ya que todas las capacidades de un S7-300 están soportadas por un S7-1500. Sin embargo, al hacer ésto estamos desaprovechando las nuevas características que nos ofrece el 1500, como son, por ejemplo, los bloques optimizados.

1 de febrero de 2014

Realizar un autotuning de los parámetros de un regulador con Simotion Scout

Para que un servomotor funcione correctamente y con la máxima eficiencia se debe realizar un ajuste de los parámetros del lazo de regulación. Para facilitar esta operación, el software de ingeniería Simotion Scout (supongo que en Starter será similar) viene preparado para realizar un ajuste automático de estos parámetros, operación también llamada autotuning.

En esta entrada voy a detallar los pasos que he dado para realizar un autotuning en un motor controlado por un Simotion D435.

El primer paso será poner la máquina donde está instalado nuestro servomotor en orden de trabajo, puertas cerradas, setas de emergencia desenclavadas, barreras inmateriales libres y demás seguridades listas y rearmadas. En mi caso el servomotor está acoplado a un husillo, así que manejando la máquina desde el panel de operador (o el método de manejo que tenga) llevo el eje a la mitad de su recorrido, aproximadamente. Esto es necesario ya que durante el autotuning el servomotor va a dar varias vueltas y si lo dejamos cerca del límite de recorrido es posible que lo sobrepase. 

20 de abril de 2013

Configuración de periferia distribuida por Profibus en un Simotion

En esta entrada voy a mostrar un ejemplo de cómo realizar la configuración de periferia distribuida en un sistema Simotion. A uno de los puertos Profibus de mi CPU D435-2 DP/PN voy a conectar una cabecera de 16 entradas digitales referencia 6ES7 131-1BH01-0XB0, es una referencia antigua pero ha funcionado perfectamente.

Cabecera Profibus referencia 6ES7 131-1BH01-0XB0

El conjunto CPU + cabecera sobre mi mesa
Empezaremos por abrir el proyecto y sobre la CPU, con el botón derecho del ratón, seleccionaremos Open HW Configuration

13 de abril de 2013

Un vistazo al entorno de programación Simotion Scout - El árbol de proyecto


En la entrada anterior dejamos nuestra CPU D435-2 DP/PN con una configuración mínima. Ahora, antes de entrar a preparar ejes y realizar la programación, voy a hacer un repaso (no muy exhaustivo) del entorno Simotion Scout.


A la derecha está el árbol de proyecto (Project navigator) donde tendremos acceso a los diferentes componentes. Desplegando la CPU D435 podemos ver en primer lugar el conector de entradas/salidas digitales X142. Haciendo doble clic sobre él podemos cambiar su direccionamiento: