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:

11 de abril de 2013

Primer contacto con un Simotion D435-2 DP/PN


Estoy involucrado en el proyecto de una máquina que va a llevar como control un Simotion D435-2 DP/PN. Aprovechando que me acaba de llegar la CPU voy a escribir una serie de entradas sobre como realizar su conexión, configuración y programación.

El manual de referencia que he consultado para la elaboración de esta entrada es el llamado SIMOTION D4x5-2 Commissioning and Hardware Installation Manual, disponible en formato PDF aquí. Para buscar más manuales sobre Simotion se puede seguir el siguiente enlace.

Para realizar estas pruebas el único material que voy a necesitar es una fuente de 24VDC, la tarjeta Compact-Flash que trae el firmware y las licencias, un cable ethernet, y la propia CPU.

Coloco la CPU sobre mi mesa y le instalo en la parte inferior el ruidoso ventilador que viene en el mismo embalaje, sin el cual el Simotion dará error. Quito la tapa azul inferior y alojo la tarjeta Compact-Flash en su ranura. Levanto la carcasa y en el conector X124 alimento a 24VDC. Finalmente conecto un cable ethernet entre la toma marcada con PN/IE X127 P1 en el frontal de la CPU y mi portátil. Doy tensión a la fuente y ya tengo todo lo necesario para hacer mis pruebas. El conjunto tiene sobre mi mesa el siguiente aspecto:


Para programar esta CPU voy a utilizar el software de ingeniería Simotion Scout V4.3.1.3 que tengo instalado en una máquina virtual bajo VirtualBox.

21 de enero de 2013

Una aplicación para importar tags de Step 7-Micro/WIN a WinCC Flexible

Actualmente estoy implicado en automatizar una máquina en la que vamos a montar un PLC Siemens S7-200, concretamente una CPU 224, y como HMI un panel también Siemens modelo OP73.

A diferencia de la gama S7-300, no es posible tener integrado en un mismo proyecto el programa del PLC y el programa de la pantalla, con lo que los tags (variables) que deben compartir se deben introducir manualmente. Para hacer esta tarea más sencilla, y aprovechando las opciones para importar tags que tiene el software de programación de paneles WinCC Flexible, he hecho una sencilla aplicación en Visual Basic que me permitirá copiar y pegar tags desde Step 7-Micro/WIN y guardarlos en un fichero en formato CSV que aceptará sin problemas WinCC Flexible.

Al ejecutar la aplicación veremos la siguiente ventana:


7 de octubre de 2012

Comunicación entre un PLC Beckhoff BC8150 y un panel Pro-face GP4105

En las entradas anteriores me preparé para la programación de un PLC Beckhoff BC8150. Al puerto serie de este PLC, haciendo la función de HMI, voy a conectar un panel táctil Pro-Face GP4105. En esta entrada voy a explicar los pasos que he dado para comunicar ambos dispositivos.


El protocolo de comunicación que se va a utilizar es Modbus RTU. En el PLC simplemente hay que darle una dirección entre 40 y 59 en los interruptores rotatorios que tiene en el frontal (con una dirección superior a 40 el PLC se configura automáticamente en Modbus RTU).

El cable de comunicación tendrá por un extremo un conector DB9 macho para el PLC y el otro lo embornaremos en el panel, con el siguiente conexionado:

4 de octubre de 2012

Mapeado de entradas/salidas y configuración para un PLC Beckhoff 8150

En la entrada anterior preparé la comunicación con el PLC y, partiendo de ahí, voy a realizar el mapeado de entradas/salidas y la configuración del PLC para dejarlo listo para empezar a programar.

NOTA: La versión de TwinCAT que estoy utilizando es la 2.11.2220

El primer paso será ejecutar el TwinCAT PLC Control y generar un nuevo proyecto.


Nos pedirá el tipo de comunicación con el PLC y, según la tenemos configurada, deberemos marcar BCxx50 or BX a través de AMS.

3 de octubre de 2012

Preparativos para programar un PLC Beckhoff BC8150

Tengo entre manos un proyecto para el que hemos seleccionado un PLC Beckhoff BC8150. Es un PLC económico de gama baja que lleva incorporado un puerto serie RS232. En esta entrada voy a describir los pasos que tuve que dar para configurar la comunicación para programarlo.


En esta ocasión he instalado el software de programación TwinCAT (descargable gratuitamente desde aquí) en una máquina virtual. La conexión con el PLC será a través de un cable de programación serie, que ya tenía de proyectos anteriores. Mi portátil viene con puerto serie integrado, pero he notado que de vez en cuando pierde la comunicación, no recuperándola hasta reiniciar la máquina virtual. Sin embargo, usando un adaptador serie/USB con chipset Prolific el funcionamiento ha sido óptimo.

El BC8150 tiene dos ruedas numeradas donde se selecciona el protocolo y la dirección de comunicación. Si la dirección está entre 0 y 39 el protocolo será autoconfigurable. Entre 40 y 59 el protocolo será Modbus RTU. Para programar será necesario que la dirección sea inferior a 40 (más información aquí).

NOTA: Aunque físicamente hay dos conectores serie (el superior para programación con el cable de Beckhoff y el inferior para la conexión de dispositivos), internamente deben ser el mismo. Esto implica que si tenemos un dispositivo conectado al puerto DB9, para poder programar deberemos desconectarlo.

Con mi PLC alimentado y el cable serie conectado puedo empezar a configurar la comunicación. Sobre el icono de TwinCAT, con el botón derecho, pulso sobre Properties.

6 de julio de 2012

Midiendo el tiempo de arranque de una máquina con un script en WinCC Flexible

Hace ya unas semanas un lector me hizo una consulta sobre cómo medir el tiempo de arranque de una máquina con un script en WinCC Flexible. En su momento no tuve tiempo de responderle, pero he hecho una prueba y aprovecho para publicarla en el blog.

Lo que se pretende es visualizar en una pantalla el tiempo de arranque de una máquina. No existe la posibilidad de modificar el programa PLC, con lo que toda la programación deberá hacerse sobre WinCC Flexible.

Con este planteamiento lo primero es localizar dos variables en el programa PLC que nos sirvan para identificar los momentos de inicio y fin de arranque. Para mi ejemplo he enlazado dos variables llamadas INICIO_CICLO y FIN_CICLO que cumplirán esta función y mediante dos botones desde el HMI simularé su activación. También crearé con formato Long tres variables internas, una para el tiempo de inicio (TIEMPO_INICIAL), otra para el tiempo final (TIEMPO_FINAL) y la tercera para la diferencia entre ambos (TIEMPO_MEDIDO), que será el tiempo de arranque buscado.


Estas variables deberemos enlazarlas desde el HMI, seleccionando en su configuración Ciclo continuo y ajustando el Tiempo de adquisición al más bajo posible: 100 ms. Así el panel estará leyendo cada 100 ms el valor de estas variables desde el PLC. Por lo tanto es importante que estas variables en el PLC estén activadas durante más de 100 ms.

27 de junio de 2012

Ajustando una fibra de detección de color Keyence CZ-V21AP con cabezal CZ-H32

En un proyecto reciente hemos tenido la necesidad de colocar un sensor para distinguir entre varios tipos de piezas a través de su color. Las piezas tenían formas similares pero su acabado superficial era plástico verde o azul, o metálico brillante. El sensor elegido para realizar esta función fue una fibra óptica de Keyence, compuesta por un amplificador referencia CZ-V21AP y un cabezal referencia CZ-H32. En esta entrada voy a explicar, a modo de guía, cómo he realizado la configuración y su calibración.

Imagen del amplificador (disculpad la mala calidad de las fotos)

Imagen del cabezal

29 de mayo de 2012

Trends en RSLogix5000

Una de las herramientas que se han vuelto imprescidibles en mi trabajo diario con RSLogix5000 son los Trends (tendencias). Sirven para representar gráficamente a modo de osciloscopio o analizador lógico cualquier variable a la que tengamos acceso en nuestro programa PLC. Los Trends se guardan en el proyecto de RSLogix5000 sin que afecten al PLC. Las capturas de datos que hagamos podremos almacenarlas en un formato propio o exportarlas a formato CSV, aceptable por cualquier programa de hoja de cálculo.

Para crear un Trend vamos al árbol de nuestro proyecto y con el botón derecho sobre la carpeta Trends seleccionamos New Trend...

A continuación nos pedirá un nombre, una descripción y un periodo de muestreo (modificables más adelante).

27 de abril de 2012

Comandando variadores Sew Movidrive MDX61B a través de DeviceNet

Recientemente he tenido que poner en marcha unos variadores Sew Movidrive MDX61B para comandar unos motores acoplados a husillos, para realizar movimientos de traslación y elevación en una máquina. Para este uso la configuración que hay que hacer es muy sencilla, lejos de las posibilidades que se le pueden exprimir a estos variadores: control vectorial o modo servo. Como van a estar integrados en una red DeviceNet, les he instalado la correspondiente tarjeta de comunicaciones DFD11B. En estas notas voy a resumir los pasos que he dado para comandarlo desde un PLC CompactLogix.

Variadores Sew Movidrive MDX61B (perdón por la calidad de las fotos)
La instalación de los variadores está bien explicada en el completo manual de instrucciones de funcionamiento (en español). Si seguimos sus recomendaciones no tendremos la más mínima complicación, así que me voy a centrar en la manera en la que los he configurado.

La tarjeta de comunicaciones DFD11B tiene una serie de interruptores DIP para configurarla. Con ellos le asignaremos una dirección de nodo en la red DeviceNet (interruptores NA), la velocidad de comunicación (interruptores DR) y la longitud de los datos que se transmitirán (interruptores PD). En mi caso tengo tres variadoes que les he asigando las direcciones 10, 15 y 20. La velocidad de comunicación la he fijado en 250 kbps y he asignado un 3 a los datos de proceso.

6 de abril de 2012

Mapeando una red DeviceNet en un controlador Logix5000

Cuando insertamos un escáner DeviceNet en un proyecto de RSLogix 5000, en las variables de ámbito del controlador (Controller tags) aparecen tres tags que nos servirán para establecer el diálogo con todos los elementos de la red. Local:1:I se refiere a los datos que leemos de la red, Local:1:O a los datos que vamos a escribir y Local:1:S a variables que nos van a permitir diagnosticar el estado de nuestra red (el 1 después de Local quiere decir que nuestro escáner está en el slot 1 del bastidor).

Tags para un escáner DeviceNet 1756-DNB
Los distintos dispositivos que hayamos configurado en nuestra red se mapearán en Local:1:I.Data para los datos de entrada (lo que leemos de los dispositivos) y en Local:1:O.Data para los datos de salida (lo que vamos a escribir). Estas variables son tablas de tipo DINT de tamaño máximo prefijado para cada tipo de escáner. Por ejemplo, para un escáner 1769-SDN de la gama CompactLogix tenemos 90 DINT (360 bytes) para entrada y 90 DINT para la salida, y para el escáner 1756-DNB de la gama ControlLogix esta capacidad se amplía a 124 DINT (496 bytes) para la entrada y 123 DINT (492 bytes) para la salida.

29 de marzo de 2012

Unas notas sobre redes DeviceNet

Recientemente he estado trabajando en instalaciones donde he tenido que poner a punto varias redes DeviceNet. Esta entrada es una recopilación de las acciones que he tenido que realizar, así como de las dificultades que surgieron y cómo las he solucionado.

DeviceNet es un bus de campo desarrollado por Allen-Bradley basado en el estándar CAN (Controller Area Network). Físicamente se compone de cuatro o cinco hilos de color rojo (CAN_V+), negro (CAN_GND), azul (CAN_HIGH), blanco (CAN_LOW) y, opcionalmente, la malla de color verde (CAN_SHLD). El cableado puede tener una longitud de 100, 250 o 500 metros, dependiendo inversamente de la velocidad de comunicación (500, 250 o 125 kbps) y del tipo de cable que usemos. En cada red DeviceNet se pueden colocar hasta un máximo de 64 nodos (numerados del 0 al 63). El protocolo DeviceNet da mayor prioridad a los nodos con una numeración más baja.

El modo de funcionamiento más habitual es maestro/esclavo con un único maestro por red, aunque puedan coexistir varios o establecerse comunicaciones de igual a igual (peer to peer). Entre los cables rojo y negro deberemos suministrar alimentación de 24 V. Es importante que provenga de una fuente de alimentación de calidad y es muy recomendable que usemos una fuente independiente para alimentar el bus. Esta misma alimentación puede usarse para alimentar dispositivos en el bus de campo (finales de carrera, detectores de proximidad, fotocéluas, etc).

El sistema de cableado DeviceNet usa una topología de línea de troncal/línea de derivación:

Imagen sacada del Manual de planificación e instalación DeviceNet de Allen-Bradley

2 de marzo de 2012

Comunicación por puerto serie a través de DeviceNet: ArmorPoint RS-232 ASCII

En la entrada anterior programé la comunicación serie de un lector de códigos de barras con un PLC CompactLogix a través de su puerto serie integrado. Ahora la aplicación ha cambiado y debo hacer la comunicación utilizando una tarjeta ArmorPoint RS-232 ASCII a través de DeviceNet.

Los ArmorPoint de Rockwell son módulos de periferia distribuida disponibles para buses de campo DeviceNet, ControlNet, EtherNet/IP o Profibus DP. A la cabecera DeviceNet que tengo disponible, referencia 1738-ADN18, le voy a acoplar una tarjeta de comunicaciones 1738-232ASCM12, que es una versión más robusta de una tarjeta 1734-232ASC, compartiendo la misma electrónica, por ello la documentación de referencia será la de esta última tarjeta: POINT I/O ASCII Modules 1734-232ASC, 1734-485ASC (PDF). El conjunto ensamblado de la cabecera ArmorPoint con mi tarjeta de comunicación serie tiene el siguiente aspecto:

Cabecera ArmorPoint con inteface serie sobre mi mesa, lista para hacer pruebas
(disculpad la calidad de las conexiones, a pesar del mal aspecto el conjunto funcionó sin problemas).

13 de febrero de 2012

Probando el puerto serie integrado en los PLC Logix5000

Recientemente he estado probando la comunicación entre un PLC Rockwell CompactLogix L35E y un lector de códigos de barras por puerto serie RS-232 en modo ASCII. En esta entrada voy resumir la configuración del puerto serie y la programación necesaria.

Todos los PLC de la gama CompactLogix vienen con un puerto serie incorporado. Para controlarlo existen instrucciones específicas Logix5000 que simplifican mucho el trabajo y que vienen detalladas en el documento de Rockwell "Instrucciones generales de los controladores Logix5000" (en español, en formato PDF), en el capítulo 17. Para hacer la configuración del puerto, el documento de referencia es "Cadenas ASCII de controladores Logix5000" (también en español y en PDF).

Controlador CompactLogix L35E con puerto serie incorporado
El lector del código de barras determina que voy a leer cadenas con el carácter de terminación CR (Carry Return), representado como '$r' o también como el código ASCII 13; la longitud de la trama a recibir o enviar no será superior a 256 caracteres y los parámetros de comunicación serie serán 9600 baudios, 8 bits, sin paridad y un bit de parada.

17 de enero de 2012

Probando un adaptador USB/MPI chino

Recientemente, en el foro de Siemens en infoPLC, me enteré de la existencia de un adaptador USB/MPI muy económico que se vende a través de ebay, total que hemos comprado uno. El pedido tardó unas tres semanas en llegar (dentro del plazo que especifica el vendedor). En el paquete venía el adaptador y un mini CD con los controladores:

(pulsar encima para ampliar)

La primera impresión es bastante lamentable, leer For SEMIES S7-300 no hace presagiar nada bueno. El cable mide unos tres metros y el adaptador en sí apenas tiene peso. La carcasa tampoco parece muy sólida y lo primero que he hecho es abrirla para curiosear la electrónica: