sábado, 21 de noviembre de 2009

Otro OB útil en los PLC's S7-300

SI-300-004

Como comentaba en el artículo precedente, a la hora de programar un PLC desde cero, por lo regular lo hacemos sin muchas consideraciones de seguridad. Más de alguna vez nos entusiasmamos con el desarrollo de nuestra programación, viendo como un punto lejano el momento en que mandemos a "Run" nuestra CPU y todo trabaje a la perfección. Movidos por este deseo, nos apresuramos a escribir líneas de código y más código, sin reparar mucho en los detalles. De cualquier forma, los detalles los atacaremos una vez que hayamos dado por terminada la estructura principal de nuestra lógica de control. O podemos también estar atrapados por el tiempo: este programa que controla en su totalidad el proceso de una línea de producción, tiene que estar terminado a más tardar el día lunes... y hoy es viernes... El reto de finalizar a tiempo la programación nos lleva de igual forma a omitir detalles, y sabemos que no descansará nuestra fatigada mente hasta no ver a los jefes satisfechos con nuestro trabajo. Las prisas, siempre las prisas, nos hacen volvernos bastante miopes ante las cosas que nos rodean y nos demandan de nuestra atención.

Es Domingo ya, y nuestro programa apenas va tomando forma. La fatiga hace estragos en nuestra mente. Lo único que se hace presente en nuestra conciencia es el que el día de mañana tenemos que entregar funcionando este cacharro viejo con un PLC de última generación. No atinamos a concentrarnos. Y nuestros compañeros de batalla ya se han retirado a descansar, al fin y al cabo, los problemas mecánicos y eléctricos ya los tienen dominados, más no sabiendo que una válvula está dañada y fuga aire, producto de haber forzado la compuerta para fijarla en su lugar, y que un sensor de temperatura quedó quebrado, luego que una persona de mantenimiento lo usara como escalón cuando hizo el cambio de tubería eléctrica que ya estaba bastante deteriorada. En fin. Sólo queda luchar contra el reloj.

Pero estamos tan fatigados que, aquello que vislumbrábamos con claridad al momento de abordar la programación, lo que habíamos concebido como nuestra ruta de viaje para saber qué cosas van en cada lugar, aquello que veíamos al inicio tan sencillo e integrado, en estos momentos se vuelve confuso y surgen miles de dudas en momentos tan críticos. Hasta llegamos a pensar si no habría sido más sencillo programar como nos sugería nuestro jefe. Si no queda, qué buena rociada me va esperar el día de mañana. Volvemos al programa. Escribimos que queremos leer la DBW48 del DB110. Sin embargo, producto del cansancio físico y la fatiga mental, en vez de DB110 escribimos DB119 (este DB119 no ha sido creado todavía). Me dirán que está súper difícil no notar que en vez de "0" pusimos un "9". Sí, cuando estamos lúcidos y bien despiertos, no se nos pasa nada, pero en las condiciones que aquí describimos, hasta un volcho lo confundimos con un Bora. Sólo exagero un poco. Pero bueno, ya escribimos 119 en vez de 100.

Pensé que no lo iban a notar. Sólo quería ver si estaban atentos a lo que escribía. Arriba puse 100, pero más bien era 110. Igual, pongo el pretexto de que ya ando bastante enfadado y cansado. Bueno, continuemos. Entonces decía que en el programa escribí 119 en lugar de 110. El editor de programas del Simatic Manager no me dice nada, así que sigo tecleando más y más líneas de instrucciones hasta completar la rutina que deseaba. Como veo que todo va funcionar correctamente, decido descargar el bloque de programa en el PLC. Apenas termina la carga de programa y, desastre. La CPU se ha ido a "Stop". No me gano nada con ponerme a maldecir una y mil veces... de todos modos lo hago. Ya que me tranquilicé, busco en el búffer de diagnóstico de la CPU la causa del fallo, y descubro que aparece un mensaje donde dice que no encontró el OB121. Rayos, lo que me faltaba.

Este OB121 es llamado por la CPU cuando cometemos, como en este caso, un error de programación. Si la CPU encuentra cargado en su memoria al OB121, en errores de programa, evita que la CPU se vaya a Stop. Pero si no está cargado, ya sabremos en el búffer de diagnóstico por qué rayos se salió del modo Run. Cabe aclarar que, aunque el OB121 esté cargado en la CPU y así esta no se va falla, de cualquier modo, el error persiste y tenemos que eliminarlo manualmente. Al eliminarlo, eliminamos la falla de la CPU.

Por último indicar que basta con que creemos el OB121 y lo transfiramos a la CPU. No es necesario cargar una sóla instrucción en este OB para evitar que la CPU se vaya a Stop. El único requisito es que el OB121 exista en la memoria del PLC para que nos salve de generar situaciones comprometedoras. Ahora sí, a programar con más confianza.
    

miércoles, 18 de noviembre de 2009

Para evitar que los PLC's S7-300 se vayan a Stop por error de I/O

SI-300-003

Una de las tareas que he realizado con cierta frecuencia es la de programar equipos Siemens de la familia S7-300. Cuando tienes el proyecto en tus manos (de programación), puedes invertar gran cantidad de bloques de programa, imaginar cómo se integrarán los equipos, qué entradas y salidas emplear, cuáles timers y banderas asignar para cada grupo de tareas, etc.

Durante esta etapa de diseño es común cometer algunas equivocaciones que traen como consecuencia, a parte de que la máquina no hace lo que esperabas, que mandes la CPU al modo "Stop". Errores de programación son cometidos constantemente; algunos de estos errores los detectamos rápidamente, y otros sólo al cargarlos a la memoria y verlos correr... claro, eso si no mandamos a falla la CPU.

Sin embargo, una vez que terminamos nuestra programación y dejamos lista la máquina, podemos encontrarnos con ciertas sorpresas que no habíamos considerado. Y esto puede suceder tras meses o años de que trabaja bien el control.

Y esto lo menciono porque hace unos días recibí una llamada de un cliente, quien me comentaba de que tenía una falla en su PLC S7-300. Me comentaba que la CPU se iba a "Stop". Al leer el búffer de diagnóstico decía que le aparecía que no encontraba el OB122.

Generalmente, este OB122 se carga desde el inicio de la programación, precisamente en el estado de diseño de programa, como una precaución y evitar mandar a Stop la CPU cuando se comenten errores o se tiene el hardware incompleto.

Para este caso específico, el OB122 lo cargamos por si a la hora de programar intentamos cargar en la CPU instrucciones que hacen referencia a entradas (I) o salidas (O) que no existen físicamente en nuestro hardware. Cuando programamos off-line, no pasa nada; escribrimos líneas de código con las mencionadas direcciones y no nos marca ningún error el software. Sin embargo, el riesgo de mandar la CPU a falla surge a la hora de descargar este programa con las direcciones inexistentes físicamente. Por ejemplo, si en nuestro programa off-line escribimos que queremos leer la PIW 312, pero esta dirección no corresponde a ninguna tarjeta en nuestro hardware físico, a la hora que mandemos este programa a la CPU, de inmediato se nos irá a Stop... A menos que tengamos cargado este OB122.

Y es justamente con este OB con el que eliminamos detener la máquina (y con ello meternos en líos de producción) cuando la CPU trata de leer desde o escribir en una dirección que no existen en el hardware.

Entonces, estando off-line, creamos desde el Simatic Manager el OB122. Una vez creado, lo descargamos directamente a nuestra CPU, y no es necesario que tenga instrucción alguna. Podemos mandarlo a nuestro PLC sin que exista un solo segmento. Pero una vez en la CPU, ésta se dará cuenta de que existe el OB122 buscado, y, al encontrarlo, dejará de caprichosamente irse al modo Stop.

Cabe aclarar que con este OB sólo evitamos que la CPU falle y se vaya a Stop, pero no habremos eliminado el error. Una vez cargado el OB122 en la CPU, si revisamos el búffer de diagnóstico, encontraremos que el estado operativo es "Run", pero no aparecerá en la lista de fallas el error de lectura o escritura en la entrada o salida que no existen.

Así que, para concluir, el OB122 nos evita se vaya a falla la CPU por error en lectura o escritura I/O (de entradas o salidas) que no existen en nuestro hardware. Esta falla puede ser debido a que estamos programando nuevo código y queremos leer desde una entrada que no existe, o quizá queremos escribir en una salida que tampoco aparece en nuestro equipo. En cualquiera de estos dos casos, la CPU llamará al OB122. Pero también puede suceder no estemos programando, sino que la máquina estuvo trabajando por un buen tiempo. Sin embargo, si hubo un corto circuito y alguna tarjeta de entrada o salida quedó dañada, entonces la CPU no la verá, y como consecuencia, no podrá accesar sus direcciones correspondientes y nos indicará la falla.

Finalmente, es recomendable cargar el OB122 para evitar que nuestra CPU se vaya a Stop, y posteriormente revisar la causa del problema, o, incluso, con este mismo OB, indicar la tarjeta en falla.
    

lunes, 9 de noviembre de 2009

Cómo respaldar programa en Flash en PLC's Siemens S7-300

SI-300-002

En esta línea de respaldos de programa en memoria flash, describiremos la forma de hacerlo en las CPU's de la línea S7-300 de los PLC's Siemens.

Como requisitos para hacer este respaldo, tenemos que estar conectados a nuestra CPU, y ésta ha de tener su cartucho de memoria flash ya insertado. Una vez que hemos hecho la conexión con nuestro software Simatic Manager, estamos listos para iniciar el procedimiento. Por supuesto, esto lo podemos hacer sólo si la máquina no está en operación o en producción, ya que por unos momentos será necesario pasar a "Stop" la CPU. Así que, cuidado al realizar este respaldo. De igual forma, al terminar el proceso de carga en la memoria flash, cuidemos que al poner el sistema en "Run", no haya nadie interviniendo el equipo, ya la máquina puede arrancar ciertos equipos de improviso, con lo cual podemos causar accidentes y sus consecuentes daños materiales o personales. No está de más tomar nuestras precauciones.

Bien, ahora estamos frente a nuestra PC, con nuestro Simatic Manager (Administrador Simatic) abierto, así como también tenemos abierto el programa de la CPU a la que estamos conectados.

1. Vamos a la opción "Sistema de destino" de nuestro menú principal del Simatic Manager.
2. En la lista de submenús, seleccionamos haciendo click en "Cargar programa de usuario en Memory Card", como se muestra a continuación:

3. Una vez que seleccionamos esta opción, el programa examina el sistema y evalúa si es posible la transferencia del programa a la memoria flash. Si no hay inconsistencias, nos aparecerá una ventana que nos preguntará si estamos seguros de realizar la carga, a lo que daremos click en "Sí" para continuar. De lo contrario, podemos cancelar el proceso seleccionando la opción "No":

4. Por si fuera poco, luego de que damos click en "Sí", nos aparece un nuevo cuadro de diálogo en el que se nos aclara que para realizar la carga del programa, la CPU necesita cambiar al modo "Stop". De estar listos, oprimimos la opción "Sí"...

¡Y con esto dejamos muerto nuestro PLC, así como dejamos muerta nuestra máquina! Claro, esto sólo dura unos cuantos segundos, mientras el Simatic Manager realizar su labor de borrar la CPU y cargar el programa a la flash.

5. Cuando el Simatic Manager concluye su proceso, de improviso nos aparece una ventana que nos informa que la carga del programa ya fue realizada, por lo que podemos proceder a rearrancar nuestro PLC al poner la CPU en modo "Run". Si, luego de analizar que no se corre riesgo alguno, damos en "Sí" para mandar la CPU a ejecutar su nuevo programa, y con este paso finalizamos.


Fue sencillo, no les parece?
    

jueves, 5 de noviembre de 2009

Respaldo del programa de los PLC's en memoria Flash

TyC-007

Como complemento al tema anterior acerca de las baterías de respaldo de programa en CPU's, comentaremos el uso de memorias tipo Flash para guardar en ellas nuestro programa.
En el artículo precedente hablamos acerca de cómo prevenir la pérdida de nuestros programas en las CPU's que utilizan una batería. Cuando esta pila se encuentra con carga suficiente, podemos estar seguros que nuestra CPU mantendrá su programa a pesar de que quitemos la alimentación eléctrica del tablero. Pero cuando la batería está agotada, y si por error desenergizamos nuestra CPU, una vez que reestablezcamos la alimentación principal, nos llevaremos la desagradable sorpresa de que el programa de la CPU se perdió de manera irremediable. Es lo malo de confiar en la baterías.
Para no llegar a estas desastrosas situaciones, lo mejor es haber respaldado el programa de nuestros PLC's, quemarlos en un disco compacto, y mantener estos respaldos en un lugar seguro para utilizarlos en casos urgentes.
Otra alternativa que nos garantiza la permanencia de nuestro programa en nuestro PLC, es la utilización de memorias Flash. Estas memorias tienen la característica de que cuando se les carga información, ésta se mantiene, a pesar de que la batería se agote o desenergicemos nuestro tablero. Debido a que este tipo de memorias sólo se modifican (con el propósito de borrarlas, o de agregarles o quitarles información) mediante un proceso de aplicación de voltajes eléctricos, y sólo de esta manera, lo que grabemos en la memoria flash no podrá ser borrado o modificado de ningún otro modo, ni aunque quitemos la fuente de alimentación eléctrica. Una vez grabada la información en la memoria flash, podemos llevar este cartucho a cualquier parte, o podemos dejarlo en su cajita y colocarlo en nuestro estante de respaldos y allí guardarlo durante mucho tiempo, y la información no se alterará en lo más mínimo ni se borrará. Claro, si tomamos la memoria flash y la sometemos a procedimientos destructivos, tales como golpearla o exponerla a altas temperaturas, por supuesto que la dañaremos parcial o totalmente y con esto afectar a la información en ella almacenada.
Finalmente, una vez que hemos tomado la decisión de respaldar el programa de la CPU en una memoria flash apropiada, tomemos en cuenta lo siguiente:

1. La memoria flash depende del tipo de CPU que manejemos. Para las diferentes marcas de PLC's hay diferentes tipos de memorias flash. Tendremos que seleccionar la memoria flash adecuada.
2. Las memorias flash varían en capacidad. Así que, si tenemos un programa muy grande en nuestro PLC, elijamos aquella memoria que podrá contener ese programa.
3. Cada memoria flash sólo puede alojar un programa de una CPU. Aunque nuestra memoria flash sea de 8 KBytes, y nuestro programa en ella almacenado sea de sólo 1 KByte, no podemos utilizar el resto de la memoria para almacenar más programas de otras CPUs. Es una memoria flash para un sólo programa y una sóla CPU.
4. Es importante que antes de instalar la memoria flash en la CPU correspondiente, se haga un respaldo en una computadora del programa que está corriendo en el PLC, con el fin de evitar que la CPU se bloquee al colocarle la memoria flash, y se pierda el programa. En algunos casos, se requiere desenergizar la CPU y desmontarla, con lo cual se corre el riesgo de perder el programa.
5. Una vez instalada la memoria flash en su CPU correspondiente, se le cargará el programa deseado mediante el procedimiento indicado por el fabricante del PLC.
5. Cuando se haya transferido el programa de usuario a la memoria flash, este programa ya no se borrará al desenergizar el tablero o al agotarse la batería de la CPU.
6. En caso de que nuestra CPU (la cual cuenta con un cartucho de memoria flash, y esta memoria con el programa adecuado) perdiera el programa almacenado en la memoria RAM (ya sea porque se agotó la batería y se le retiró la alimentación eléctrica, o por alguna otra razón), al energizar la CPU automáticamente el programa de la memoria flash se transferirá a la memoria RAM. Esta transferencia se realiza de manera casi imperceptible, por lo que ni siquiera nos daremos cuenta de que se perdió el programa de la memoria RAM.
7. Recordemos que la memoria flash transfiere el programa que tiene almacenado directamente a la memoria RAM sólo cuando ésta se queda sin programa, y que todos los datos dinámicos de nuestra máquina se perderán, tales como el conteo de piezas, los set-points que, valores de los temporizadores y contadores, por lo que sería necesario ajustar nuevamente los valores para que la máquina trabaje correctamente. En otras palabras, en caso de transferirse el programa de la memoria flash a la memoria RAM, los temporizadores se van a cero (o a su valor de pre-set), al igual que los contadores. Los valores almacenados en los bloques de datos también regresan a su valor de pre-ajuste con los que se grabó la memoria flash. Así, si nuestra máquina tenía que luego de 10 horas de trabajo entrara un ciclo de lubricación, pero si perdemos el programa de la RAM, y se carga el programa de la flash, y en ésta tenemos que la lubricación se hace cada 18 horas, entonces es así como quedará trabajando desde ese momento nuestra máquina. Y esto se hace extensivo para todas las otras variables que almacenan datos dinámicos. Lo que nunca perderemos, será la lógica del programa.
    

lunes, 2 de noviembre de 2009

Cambio de Batería en las CPU's de los PLC

TyC-006

En estos días he estado trabajando con PLC Siemens que tiene una CPU S7-315. Es un modelo antiguo de CPU que requiere de una batería para mantener el programa en la memoria RAM. Sin embargo, hay gran cantidad de CPU de diferentes modelos y marcas que también requieren una batería para que el programa almacenado en la memoria RAM no se pierda al desenergizar el equipo. En ocasiones ocurre que la misma CPU nos indica con un led (que por lo regular se ilumina en color rojo) que la batería se ha agotado. Cuando esto ocurra, es el momento de reemplazarla cuanto antes, si no queremos perder el programa que controla a esa máquina o a ese proceso. Pero hemos de tener cuidado al realizar esta sustitución, pues, por muy sencillo que parezca, podemos cometer el error de perder el programa de nuestra CPU.
Antes de detallar cómo realizar la sustitución, explicaré un poco cuál es la función de la batería.
Cuando nosotros adquirimos una CPU nueva (de los modelos que requieren batería), ésta nos es entregada sin su pila y, obviamente, sin programa. De igual forma, cuando sacamos una CPU de nuestros polvorientos estantes, por lo regular la tenemos arrumbada y sin su batería, tampoco esta CPU tendré programa alguno. Una vez que la instalamos en su rack correspondiente, la energizamos y le cargamos un programa. Si a esta CPU no le ponemos su pila correspondiente, una vez que la desenergicemos y nos vayamos a dormir, al día siguiente nos encontraremos con la sorpresa de el programa ha desaparecido nuevamente. Sí, aunque esté conectada a una fuente de alimentación. Y no es que la CPU esté defectuosa, sino simplemente que, al quitar nosotros la energía eléctrica, al no tener batería, perdemos lo almacenado en la memoria RAM. Recordemos que la memoria RAM es una memoria volátil, es decir, es una memoria no permanente, que al quedar desenergizada, pierde todo lo que tenía es sus microtransistores. Entonces, ¿cómo hacer para que no se pierda el programa de esta memoria? Es muy sencillo. La memoria RAM de nuestra CPU puede recibir alimentación eléctrica ya sea conectándola a la fuente de poder de nuestro tablero, o mediante la conexión de una batería (claro, una batería en buen estado, del voltaje que marque el modelo de CPU, no cualquier batería). Incluso, la RAM puede recibir su suministro de energía por cualquiera de las estas dos fuentes al mismo tiempo, tanto de la fuente de alimentación como de la pila. Así, si desconectamos el suministro de energía al tablero donde está alojada esta CPU, el programa se mantiene en su lugar gracias a la batería incorporada en la CPU. En otro caso, podemos quitar la batería de la CPU mientras tengamos el tablero energizado, ya que de esta manera el programa sigue alimentado mediante la fuente de poder. Pero, si quitamos la pila y además apagamos el tablero, puedes decirle adiós al programa de la CPU y tu máquina estará muerta. Tampoco con el procedimiento contrario evitas darle un borrado completo a la memoria de la CPU; es decir, si primero apagas el tablero y luego retiras la batería. Es igualmente mortífero este procedimiento.
Entonces, ¿qué hacer para poder reemplazar la batería de una CPU sin que perdamos el programa de la RAM?
Primeramente, hemos de recordar que la memoria RAM necesita permanecer energizada para que pueda conservar su programa. Así que, si notamos que el foco rojo que indica batería agotada enciende en nuestra CPU, no nos asustemos. Pero, importante, no desenergicemos el tablero. Y, antes que nada, respaldemos el programa de nuestra CPU y pongámoslo en lugar seguro. Enseguida, consigamos una pila apropiada para el modelo de la CPU. Una vez que ya tenemos respaldado el programa, y la pila nueva en nuestras manos, entonces, con el tablero energizado (y, por supuesto, la CPU energizada), extraigamos la batería agotada, e insertemos la nueva. Inmediatamente hemos de notar que el foco rojo de pila agotada se ha eliminado. Y eso fue todo. Nuestra máquina sigue trabajando como si nada hubiera pasado, y tenemos la seguridad de que la nueva batería respaldará durante mucho tiempo el programa aunque desenergicemos el tablero.
Ahora, si lo que queremos es precisamente lo contrario, es decir, queremos borrar lo que tenemos en la memoria de nuestra CPU, ya sea porque el programa será reemplazado por uno nuevo y completamente diferente al actual, o si queremos usar esta CPU en otra máquina que no trabaja con el programa que trae en su memoria, simplemente desenergicemos el tablero y extraigamos la batería y esperemos unos segundos. Cuando volvamos a energizar nuestra CPU, nos daremos cuenta de que no tiene ya programa.
Finalmente, unas recomendaciones. Es importante respaldar todas las CPU's de nuestras máquinas, ya que en el momento menos pensado, falla la batería sin darnos cuenta, llega el fin de semana y apagamos todo, y, para el día lunes... ya no tenemos programa en la CPU. Por esta misma razón, llevemos un control de la vida de cada batería. Los fabricantes nos dirán cuál es la vida útil de cada batería (uno o dos años) y estaremos preparados con los reemplazos correspondientes. No reemplacemos una batería agotada por una de diferente voltaje, pues correríamos el riesgo de dañar la memoria de nuestro PLC, y entonces, tendríamos que reemplazar toda la CPU.
Por último, remitámonos al manual del fabricante de cada CPU para cada caso particular, ya que lo que aquí se ha expuesto, ha sido en líneas generales no aplicables universalmente, y con el fin de acentuar la importancia de mantener en buen estado las baterías de nuestras CPU y tener el cuidado necesario al momento de reemplazarlas.
Ahora, a cargar baterías...

Nota ecológica: No tirar a la basura ningún tipo de baterías, sea de medio uso o totalmente agotada, sino depositarla en su contenedor correspondiente, o entregarlas a las corporaciones encargadas de su manejo.