Consejos para programar secuencias (1)

En esta serie de entradas me gustaría recopilar varios consejos relacionados con la programación de secuencias. Están orientados específicamente a la programación de autómatas, aunque no es una limitación, y aplican a cualquier proceso que se pretenda controlar siguiendo una serie de pasos.
En la literatura abundan manuales para aprender el lenguaje SFC. Quien quiera iniciarse, puede empezar, por ejemplo, con IEC 61131–3: Programming Industrial Automation Systems de John y Tiegelkamp. En la mayoría se describe cómo se crean secuencias, cómo se estructuran sus pasos, la diferencia entre secuencias únicas y paralelas, etc. Mi intención no es repetir este tipo de contenidos, sino apuntar lo que no figura en estos textos. Me refiero a conocimientos adquiridos por la experiencia, que suelen asimilarse tarde y a veces tras haber cometido un error. Para que el interesado sepa esquivarlos a tiempo, van estas recomendaciones:

  • Evitar las secuencias
    Parece un sinsentido, pero tiene su razón. Tendemos a concebir los procesos como listados de tareas, y esta visión no siempre responde a la realidad. A veces las actuaciones se derivan de la situación instantánea de la planta o el sistema, y no de su historia pasada. En dicho caso, embutir una secuencia es introducir una complejidad innecesaria y una posible fuente de errores.
    Pongamos un ejemplo sencillo: una bomba con una válvula en su impulsión, y vamos a pedir que ésta no abra con bomba parada para no descargar la tubería. Nuestra tendencia natural es concebir la actuación en una serie de pasos:

    1. Cuando se quiere aportar, arrancar bomba
    2. Cuando la bomba esté arrancada, abrir válvula
    3. Cuando se quiere dejar de aportar, cerrar válvula
    4. Cuando la válvula está cerrada, parar bomba

    evitar-las-secuencias-1
    Por supuesto, es legítimo plantear el funcionamiento con una secuencia semejante. Pero un programa correcto debería contemplar muchas más posibilidades. En particular, tiene que responder a las siguientes situaciones:

    • ¿Qué sucede si la bomba no arranca? La secuencia se quedaría detenida en el primer paso, sin posibilidad a priori de retroceder.
    • Si se da la posibilidad de salir de la secuencia en cualquier paso, el sistema quedará normalmente en un estado anómalo.
    • Si en el primer paso el operador decide no suministrar, la secuencia debe realizar todo su recorrido para poder terminar.

    Un programa correcto debería estudiar todas las posibles anomalías durante la evolución de la secuencia. Otra opción, más sencilla, sería resolverlo de la siguiente forma:
    evitar-las-secuencias-2
    El comportamiento es el correcto ante fallos, cambios de consigna sin haber completado acciones, etc. Es la ventaja de evitar una secuencia innecesaria.
    Por supuesto, hay circunstancias que las requieren de forma obligada; por ejemplo, las limpiezas in situ (cleaning in place) en las que un mismo equipo suele cumplir diferentes funciones según la fase del proceso. Una regla para discriminar ambas situaciones es preguntarse si, sin conocer la historia pasada del proceso, sólo con la información que procede de campo, es posible inferir las actuaciones siguientes. En tal caso, la secuencia es superflua.

  • Evitar aun más los biestables
    Este es un consejo general, pero más significativo cuando se programa en SFC. Un set o reset dentro de un paso es un fallo en potencia. Peor, de los que sobreviven a la puesta en marcha y lanzan su puñalada al cabo de meses o años. La razón es simple: supongamos que un motor se arranca en el paso tres y se para en el cinco. Llegará un día en que habrá que interrumpir la secuencia en el paso cuatro y el motor quedará en marcha, con todos los perjuicios que pueda ocasionar.
    evitar-biestables-1
    El porqué se suele desarrollar de esta forma responde al mismo motivo que el punto anterior. Tendemos a pensar así, a concebir el funcionamiento como una serie de acciones, y no como situaciones. La alternativa, simple, es sustituir biestables por contactos.
    evitar-biestables-2

Esta entrada continuará en Consejos para programar secuencias (2)

Facebooktwitterlinkedin