Tutorial de programación en Simatic S5-90U


INDICE                                                                                                    volver

Introducción

Estructura interna del autómata

Operaciones

Ejemplo



OBJETIVOS

Con este pequeño tutorial no se pretende enseñar todo lo referente al autómata Simatic S5-90U, más bien se debe tomar como guía base para iniciarse en la programación básica de este aparato y de los autómatas en general. Por lo tanto nos limitaremos a las operaciones, datos, entradas, y salidas básicas.

Por supuesto lo aquí expuesto también vale para el S5-95U, ya que este último contiene al S5-90U, y para toda la serie Simatic S5 (ya que todos emplean el mismo lenguaje AWL). Las únicas diferencias estarán en el número de módulos, contadores, etc.

Es necesario que el lector esté familiarizado con el álgebra de Boole, y si se está familiarizado con algún otro lenguaje de programación (como basic o ensamblador) será mucho más sencillo y rápido.

INTRODUCCION A LA AUTOMATIZACION

Todo proceso industrial se compone de secuencias de acciones que deben ser controladas. En los procesos sencillos un operario es el que se encarga de este control y de vigilar la marcha correcta del sistema, pero en la mayoría de las ocasiones esto no es posible debido al tamaño del proceso.

Una de las alternativas son los procesos automáticos discretos, en los que los operarios son sustituidos por un sistema de control secuencial y las variables de entrada y salida son del tipo todo-nada.

Características de los controladores secuenciales:

- El proceso a controlar se puede descomponer en una seria de fases o estados que se suceden de forma secuencial.

- A cada uno de los estados del proceso se le asigna una variable interna que es la encargada de memorizar el estado actual del proceso.

- Cada uno de los estados, cuando está activo, puede realizar una serie de acciones sobre las variables de salida.

- La transición entre estados se controla mediante las señales procedentes de los sensores, a través de las variables de entrada.

- El controlador realiza siempre, y en el mismo orden, la misma secuencia de estados.

CONTROL MEDIANTE AUTOMATAS PROGRAMABLES

La mejor opción para el control de procesos industriales es el empleo de autómatas programables.

Estos aparatos se basan en el empleo de un microcontrolador para el manejo de las entradas y salidas. La memoria del aparato contendrá tanto el programa de usuario que le introduzcamos como el sistema operativo que permite ejecutar secuencialmente las instrucciones del programa.

Opcionalmente, en la mayoría de los autómatas, también se incluyen una serie de funciones pre-implementadas de uso general (como reguladores PID).

La mayor ventaja es que si hay que variar el proceso basta con cambiar el programa introducido en el autómata(en la mayoría de los casos). Otra ventaja es que el autómata también nos permite saber el estado del proceso, incluyendo la adquisición de datos para un posterior estudio.

CICLO DE TRABAJO EN UN AUTOMATA

El autómata va a ejecutar nuestro programa de usuario en un tiempo determinado, el cual va a depender sobre todo de la longitud del programa. Esto es debido a que cada instrucción tarda un tiempo determinado en ejecutarse, por lo que en procesos rápidos será un factor crítico.

En un sistema de control mediante autómata programable tendremos los siguientes tiempos:

1. Retardo de entrada.
2. Vigilancia y exploración de las entradas.
3. Ejecución del programa de usuario.
4. Transmisión de las salidas.
5. Retardo en salidas.

Los puntos 2,3 y 4 sumados dan como total el tiempo de ciclo del autómata. Tras este ciclo es cuando se modifican las salidas, por lo que si varian durante la ejecución del programa tomarán como valor el último que se haya asignado.

LENGUAJES DE PROGRAMACION

Para toda la familia de autómatas SIMATIC S5 se emplea el lenguaje STEP 5, en sus 4 posibles representaciones:

- Lista de instrucciones (AWL).

- Esquema de funciones (FUP): se representa gráficamente con símbolos lógicos.

- Esquema de contactos (KOP): se representa gráficamente con símbolos eléctricos.

- GRAPH 5/GRAPH Mini: solo puede emplearse, con limitaciones, en el S5-95U.

Aquí estudiaremos el formato AWL, el cual representa el programa como sucesión de abreviaturas de instrucciones. En este formato una instrucción tiene la siguiente estructura:

 
               Operación
                |
                | Identificador del operando
                |  |
        002:    U  E  32.0          Operación AND lógica
         |             |             |
         |            Parámetro     Comentarios
         |
        Dirección relativa de la instrucción en el módulo respectivo

La operación indica al autómata lo que debe hacer con el operando. El parámetro indica la dirección del operando.

ENTRADAS Y SALIDAS

Hay 8 entradas (E) normales de 1bit:

E32.0 ... E32.7

Y también dos entradas especiales de 1bit:

E33.0 y E33.1

Estas últimas tienen la peculiaridad de funcionar como entradas digitales o como entrada de alarma (E33.0) y entrada rápida (E33.1).

Hay 6 salidas (A), de 1bit cada una:

A32.0 ... A32.5

MARCAS DE MEMORIA

También son denominadas como variables de memoria. Son de propósito general, es decir, podremos emplearlas en lo que deseemos. Se distinguen dos tipos de marcas de memoria:

- Remanentes: Estas marcas permanecerán en memoria aunque apaguemos el autómata. En total hay 64 bytes de memoria para estas marcas, por lo que tendremos 512 marcas remanentes de 1 bit cada una:

M0.0 ... M63.7.

- No remanentes: Estas marcas se borrarán en cuanto apaguemos el autómata. También tenemos 64 bytes destinados a estas marcas, por lo que tendremos 512 marcas no remanentes de 1 bit cada una:

M64.0 ... M127.7.

Hay que destacar que las marcas se ponen a cero cada vez que reseteamos el autómata. Esta característica nos puede ser de mucha utilidad en algunos casos (ver el programa de ejemplo al final del tutorial).

REGISTROS Y ACUMULADORES

Todas las operaciones que hagamos con las entradas y las salidas se deben efectuar en algún sitio. En este caso tendremos:

- Registro de estado (VKE):

Su tamaño es de 1 bit.
Aquí es donde efectuaremos las instrucciones combinacionales, la carga de entradas y la asignación de salidas a nivel de bit.

- Acumuladores (AKKU1 y AKKU2):

Sus tamaños son de 16 bits cada uno.
Cada vez que carguemos un dato en los acumuladores se seguirá la siguiente secuencia:

Contenido de AKKU2 ===> Se pierde el contenido
Contenido de AKKU1 ===> AKKU2
DATO ===> AKKU1

A su vez, cuando realicemos una operación entre AKKU's (como suma o resta) el resultado se introducirá en el AKKU1, perdiéndose el valor antes allí contenido.

TEMPORIZADORES Y CONTADORES

En el S5-90U tenemos 32 temporizadores:

T0 ... T31

y 32 contadores:

Z0 ... Z31

De los 32 contadores hay 8 que no se borran al desconectar el autómata (son remanentes), dichos contadores son Z0 a Z7.

Para consultar el estado de cada uno de ellos podremos usarlos como si fueran entradas (mediante operaciones combinacionales) o introduciendo su valor en los AKKU.

CONSTANTES

A la hora de cargar datos en acumuladores, temporizadores, etc... tendremos varias posibilidades en la forma de introducir el dato:

- KB: 8 bits (0 a 255 en decimal).
- KC: 8 bits (2 caracteres alfanuméricos).
- KF: 16 bits (nº en coma fija, +32768 a -32768).
- KH: 16 bits (nº hexadecimal, 0000 a FFFF).
- KM: 16 bits (binario natural).
- KY: 16 bits (2 bytes, 0 a 255 en decimal cada uno).
- KT: 16 bits (valor de preselección de temporizadores, 0.0 a 999.3 en decimal).
- KZ: 16 bits (valor de preselección de contadores, 0 a 999 en decimal).

ESTRUCTURA DEL PROGRAMA

Vamos a tener dos opciones para escribir el programa:

- Lineal: Se emplea un único módulo de programa (OB1). Este módulo se procesa cíclicamente, es decir, tras la última instrucción se volverá a ejecutar la primera. Si la tarea a controlar es simple esta es la mejor forma.

- Estructurada: Para el caso de tareas complejas es más conveniente dividir el programa en módulos. Mediante esta forma logramos un programa más claro y adquirimos la posibilidad de poder llamar a un módulo desde distintas partes del programa (lo que evita repetir código).

 
                      +-----+
                      |     | ===> +-----+
                      |     |      |     |
                      |     | <=== +-----+
                      | OB1 |
                      |     | ===> +-----+
                      |     |      |     | ===> +-----+
                      |     |      |     |      |     |
                      |     |      |     | <=== +-----+
                      |     | <=== +-----+
                      +-----+

En la programación estructurada se comienza y termina en el módulo OB1, desde el cual saltaremos y retornaremos a los módulos que nos interesen. Por supuesto se podrá saltar desde un módulo a otro (anidado), siempre que no superemos los 16 niveles de salto que permite como máximo el autómata. Otras limitaciones son:

- El salto de un módulo a otro debe ser siempre hacia adelante (ej. Se podrá saltar de PB1 a PB2, pero no a la inversa).

- No se pueden dar dos saltos a un mismo módulo desde el módulo actual. (ej. No se podrá saltar dos veces a PB3 desde PB2, pero si puede saltarse a PB3 desde distintos módulos).

Tanto en la programación lineal como en la estructurada los módulos acabarán mediante la instrucción BE.

La memoria del autómata S5-90U está limitada a 2K bytes. Cada instrucción ocupa generalmente 2 bytes, por lo que dispondremos de 1000 lineas de programa aproximadamente.

TIPOS DE MODULOS

Existen cuatro tipos de módulos en el S5-90U (5 en el S5-95U):

- Módulos de organización (OB):
Son los que gestionan el programa de usuario.

OB1, OB3, OB21 y OB22.

Destacar el OB1, que es el módulo del programa principal, el OB3, que es el que contiene el programa controlado por alarma, y el OB13, que es el módulo para programas controlados por tiempo. El OB22 es empleado por el sistema operativo.

- Módulos de programa (PB):
Son los que incluyen el programa de usuario dividido, normalmente, según aspectos funcionales o tecnológicos.

PB0 ... PB63

- Módulos funcionales (FB):
Son módulos de programa especiales. Aquí se introducen las partes de programa que aparecen con frecuencia o poseen gran complejidad. Poseen un juego de instrucciones ampliado.

FB0 ... FB63

- Módulos de datos (DB):
En ellos se almacenan datos para la ejecución del programa, como valores reales, textos, etc...

DB0 ... DB63

Los módulos DB1 y DB2 se emplean para definir las condiciones internas del autómata, por lo que no deben emplearse.

256 palabras de datos.

Para emplear un módulo de datos es necesario activarlo previamente (como se verá más adelante).

INHIBICION

En adelante mencionaremos varias veces que el VKE es inhibido.
Esto quiere decir que el VKE no puede operarse (salvo dos operaciones de memoria seguidas) y que la próxima instrucción combinacional será de carga.

En cada ciclo de programa siempre se comienza con el VKE inhibido, es decir, la primera instrucción combinacional empleada será siempre de carga.

Hay que señalar también que la operación de carga se podrá negar si empleamos una operación combinacional negada (como un NOR o un NAND).

Ejemplos (se supone el VKE inhibido):

 
UN E 32.0       Hace que el VKE valga la entrada 32.0 negada (0=>1, 1=>0).
 
O  E 32.5       Hace que el VKE valga la entrada 32.5 directamente.

OPERACIONES COMBINACIONALES

 
U(                  AND del VKE con el resultado de las operaciones entre
                    paréntesis.

 

O(                  OR del VKE con el resultado de la operaciones entre

                    paréntesis.

 

)                   Fin del paréntesis.

 

U  E,A,M,Z,T        AND (multiplicación lógica) del VKE con E, A, M, Z o T.

 

O  E,A,M,Z,T        OR (suma lógica) del VKE con E, A, M, Z o T.

 

UN E,A,M,Z,T        NAND (AND negado) del VKE con E, A, M, Z o T.

 

ON E,A,M,Z,T        NOR (OR negado) del VKE con E, A, M, Z o T.

Ejemplos:

En el siguiente ejemplo la salida se hace uno si la entrada 32.0 es cero y las entradas 32.1 y 32.3 son uno (las asignaciones se ven más adelante):

 
UN E 32.0   Carga la entrada 32.0, negada, en el VKE.
U  E 32.1   Efectua una multipicación lógica AND entre la entrada 32.1 y VKE.
U  E 32.3   Efectua una multipicación lógica AND entre la entrada 32.3 y VKE.
=  A 32.2   Asigna el valor de VKE a la salida 32.2.
BE

Veamos que hemos hecho:

·  En primer lugar se ha efectuado una lectura de la entrada 32.0 y se ha introducido de forma negada en el registro VKE. Esto se ha producido debido a que el VKE se encuentra inhibido (ya que estamos en el principio del programa).

·  A continuación hemos multiplicado el contenido del VKE con las entradas 32.1 y 32.3. Es decir, si las dos entradas son 1 lógico (activadas) el VKE pasará a valer 1, siempre y cuando la entrada 32.0 sea 0 lógico.

·  Después hemos asignado el valor del VKE a la salida 32.2. Por tanto si llegados aquí el VKE es 1 se activará la salida 32.2.

·  Por último hemos terminado el programa con la instrucción BE (que indica al autómata el fin del módulo).

El esquema de contactos equivalente a este programa sería:

 
|-----[/]----[ ]----[ ]----( )-----|
     E32.0  E32.1  E32.3  A32.2

El mismo ejemplo empleando paréntesis sería:

 
UN E 32.0
U(
O  E 32.1   Esta instrucción también puede ser UE 32.1, da lo mismo.
U  E 32.3
)
=  A 32.2
BE

En este caso lo que sucede es que el resultado de las operaciones entre paréntesis se multiplican con el valor previo del VKE.
Como podemos ver, la primera instrucción tras abrir paréntesis se realiza con el VKE inhibido con lo que da igual utilizar una operación AND u OR, ya que el resultado será el mismo.

OPERACIONES DE MEMORIA

 
S  E,A,M            SET (puesta a uno) de E, A, o M, si VKE=1.

 

R  E,A,M            RESET (puesta a cero) de E, A, o M, si VKE=1.

 

=  E,A,M            Asigna a E, A, o M el valor del VKE.

Estas operaciones inhiben el VKE.

Ejemplo (báscula S-R):

 
U  E 32.0   Leemos la entrada 32.0.
S  A 32.2   Si VKE=1 la salida 32.2 se hace 1 (SET).
U  E 32.1   Leemos la entrada 32.1.
R  A 32.2   Si VKE=1 la salida 32.2 se hace 0 (RESET).
BE

Aquí vemos un claro ejemplo de RESET prevalente (RESET sobre SET). Esto quiere decir que la orden RESET prevalece a la de SET si ambas son activadas simultáneamente.

OPERACIONES DE TRANSFERENCIA

 
LDW                 Copia en el AKKU1 el contenido de la palabra de datos
                    del módulo de datos activo (ver ADB).

 

TDW                 Copia el contenido de AKKU1 en la palabra de datos

                    del módulo de datos activo (ver ADB).

 

LKZ                 Transfiere un valor constante (0-999) al AKKU1, este

                    valor es de preselección de contadores.

 

LKB                 Transfiere un valor constante (0-255) al AKKU1.

 

LKT   *             Transfiere un valor constante (0.0-999.3) al AKKU1,

                    este valor es de preselección de temporizadores.

El valor anterior de AKKU1 se pasa a AKKU2, y el valor anterior de AKKU2 se pierde. VKE no varia.

* La base de tiempos es el segundo número: ej. en LKT 40.2 la base es 2.

BASE DE TIEMPOS: 0 (0.01 seg) 1 (0.1 seg) 2 (1 seg) 3 (10 seg)

Para ver con más claridad estas operaciones vea el ejemplo de las instrucciones de tiempo.

OPERACIONES DE TIEMPO

Todas las operaciones de tiempo se reinician con un cambio en el flanco del VKE. Esto quiere decir que si el VKE depende de una entrada (o de varias a través de una operación) un flanco de subida en la señal de entrada reinicia el temporizador (ver ejemplo).

 
SI                  Arranca como impulso una temporización. Con el flanco
                    creciente de VKE se arranca la temporización. Con VKE
                    igual a cero se reinicia la temporización. Durante la
                    temporización la salida es 1.(Inhibe VKE).

 

SV                  Arranca una temporización como impulso prolongado.

                    La temporización comienza con el flanco creciente del

                    VKE. Un VKE=0 no afecta la temporización. Durante la

                    temporización la salida es 1.(Inhibe VKE).

 

SE                  Arranca como retardo a la conexión una temporización.

                    La temporización se arranca con el flanco creciente

                    del VKE. Con VKE=0 se reinicia la temporización. La

                    salida es 1 cuando transcurra la temporización y en

                    la entrada VKE se mantenga a 1. (Inhibe VKE).

 

SA                  Arranca como retardo a la desconexión una temporiz.

                    La temporización arranca con el flanco decreciente

                    del VKE. VKE=1 reinicia la temporización. La salida

                    es 1 si VKE=1 o corre la temporización. (Inhibe VKE).

 

SS                  Arranca como retardo a la conexión memorizada una

                    temporización. La temporización arranca con el flanco

                    creciente del VKE. VKE=0 no afecta la temporización.

                    La salida es 1 tras la temporización y no regresa a

                    cero hasta ejecutar la instrucción RT. (Inhibe VKE).

 

R                   Reponer (borrar) un temporización.

                    La temporización se repone al valor inicial mientras

                    VKE sea 1. VKE=0 no afecta a la temporización.

                    Tras RT la salida del temporizador es cero hasta que

                    que se reinicie. (Inhibe VKE).

Hay que destacar que la temporización, se decrementa internamente en el autómata hasta alcanzar el valor cero.

Otra consideración a tener en cuenta es que la temporización tiene un error igual a la base de tiempos considerada, por lo que se debe emplear la base de tiempos más reducida posible.

Ejemplo (impulso):

 
U  E  32.0      Introducimos en el VKE el valor de la entrada 32.0.
L  KT 500.0     Cargamos en AKKU1 un valor de temporización de 5 segundos.
SI T  1         Si el VKE está a 1 continua la temporización (con un flanco
NOP 0           de subida se reinicia ésta).
NOP 0
NOP 0
U  T  1         Cargamos en el VKE la salida digital del temporizador.
=  A  32.5      Introducimos la salida del temporizador en la salida 32.5.

El cronograma asociado sería:

 
         +------+     +--+
E 32.0: -+      +-----+  +----
 
         +---+        +--+
A 32.5: -+   +--------+  +----
          5seg        menos de 5seg

El motivo de emplear tres instrucciones NOP 0 seguidas tras la instrucción de temporización es para poder pasar a esquema de contactos dentro del programa STEP 5. Si no va a utilizar este sistema de representación puede eliminar sin problemas estas líneas, no afectan al programa.

OPERACIONES DE CONTAJE

 
SZ                  Activa un contador si VKE=1. El contenido de AKKU1
                    pasa a ser el nuevo valor del contador. (Inhibe VKE).

 

RZ                  Borrar un contador (puesta a cero) si VKE=1.

                    (Inhibe VKE).

 

ZV  *               Incrementa el valor de un contador con el flanco

                    creciente de VKE, con VKE=0 no varia.

 

ZR  *               Decrementa el valor de un contador con el flanco

                    creciente de VKE, con VKE=0 no varia.

* El contaje es cíclico, es decir, si el contador es cero y se decrementa pasará a tener valor 999, y viceversa al incrementar.

Siempre que el valor del contador sea diferente de cero, el valor de su salida será uno.

Ejemplo (contador descendente):

 
U  E 32.0
ZR Z 1          Con la entrada 32.0 decrementamos el contador Z1.
NOP 0
U  E 32.1       La entrada 32.1 es para poner el contador Z1 a 7.
LK Z 7          Cargamos en AKKU1 el valor 7 de preselección de contadores.
S  Z 1          Con el flanco creciente de la entrada 32.1 ponemos Z1 a 7.
NOP 0
NOP 0
NOP 0
U  Z 1          Leemos la salida digital del contador.
=  A 32.5       Asignamos la salida del contador a la salida 32.5.
BE

El efecto de las lineas NOP 0 es el mismo que en los temporizadores, solo sirven para poder pasar a esquema de contactos.

OPERACIONES DE COMPARACION

 
!=F                 Si los AKKU son iguales VKE=1, sino VKE=0.

 

><F                 Si los AKKU son diferentes VKE=1, sino VKE=0.

 

>F                  Si AKKU2 > AKKU1 VKE=1, sino VKE=0.

 

>=F                 Si AKKU2 >= AKKU1 VKE=1, sino VKE=0.

 

<F                  Si AKKU2 < AKKU1 VKE=1, sino VKE=0.

 

<=F                 Si AKKU2 <= AKKU1 VKE=1, sino VKE=0.

Para poder comparar dos operandos es necesario cargarlos sucesivamente en los dos AKKU's. La ejecución de operaciones no depende del VKE. El resultado de la operación se introduce en el VKE, si se cumple la comparación el VKE será 1, en caso contario será cero.

También se activan los indicadores ANZ0 y ANZ1 dependiendo del resultado.

OPERACIONES ARITMETICAS

 
+F                  Se suman los AKKUs y el resultado se introduce en AKKU1.

 

-F                  AKKU1 = AKKU2 - AKKU1

Dependiendo del resultado se activan los indicadores.

OPERACIONES DE LLAMADA A MODULO (SALTO)

 
SPA PB,FB           Salto absoluto a otro módulo, sin depender del VKE.

 

SPB PB,FB           Salto absoluto a otro módulo, si el VKE=1.

 

ADB                 Indica el módulo de datos a usar (desde el 2 al 63,

                    los módulos 0 y 1 son usados por el sistema).

 

BE                  Fin del módulo, conservando el valor de VKE.

 

BEA                 Fin del módulo de forma absoluta, conserva el VKE.

 

BEB                 Fin condicional del módulo si VKE=1, si VKE=0 sigue

                    la ejecución del módulo actual pero con VKE=1.

Recordar que el número máximo de anidamientos (saltos sin retorno) son 16, y que el salto simpre debe ser hacia adelante. Hay que tener precaución, ya que el propio autómata puede emplear algún anidamiento en determinadas circunstancias.

OTRAS OPERACIONES

 
STP                 Produce la parada del autómata.

 

NOP0                Operación nula (16 bits a cero en la RAM).

 

NOP1                Operación nula (16 bits a uno en la RAM).

OPERACIONES COMBINACIONALES (MODULOS FB)

 
UW *                AND de AKKU1 con AKKU2, resultado en AKKU1.

 

OW *                OR de AKKU1 con AKKU2, resultado en AKKU1.

 

XOW *               XOR de AKKU1 con AKKU2, resultado en AKKU1.

* Se realizan bit a bit y afectan a ANZ0 y ANZ1 (indicadores).

ACTIVACION DE INDICADORES

El autómata posee tres indicadores:

- ANZ 0.
- ANZ 1.
- OV Desbordamiento (Overflow).

Las siguientes operaciones afectan a las indicaciones:

- Operaciones de comparación.
- Operaciones aritméticas.
- Operaciones de desplazamiento.
- Algunas operaciones de transformación.

El estado de las indicaciones condiciona diferentes operaciones de salto, las cuales no son objeto de este tutorial (ya que entonces sería absurdo no ver el resto de instrucciones que posee el autómata). Por tanto no veremos el resultado de las operaciones en los indicadores, si le es de utilidad vea la página 8-69 del manual de STEP 5.

PROGRAMA DE EJEMPLO

A continuación se verá un programa de ejemplo listo para introducir en el emulador de autómata (disponible gratuitamente en esta Web).

Se ha preferido este sistema, en vez de dar directamente el programa para Step 5, debido a que la mayoría de la gente no posee un autómata en casa con el que practicar. No obstante la sintaxis es casi la misma.

Se aconseja, para no despistarse, ver la ayuda del programa y observar las diferencias entre el autómata y el emulador.

CONTROL DE ESTACION DE BOMBEO CON UN MOTOR M1

Se trata de automatizar la siguiente estación de bombeo:

 
                      +--+
            /========>|M1|=======\
            "         +--+       "
   ---+     "   +---      N3- |  "     |
      |     "   |             |        |
      |     "   |-N1      N2- |        | (grifo de salida)
      +---------+             +---------==
      Depósito A              Depósito B

Disponemos de un selector INT de dos posiciones manual/automático.

En modo manual el motor M1 funciona hasta que se pulsa el pulsador de paro P o hasta que el agua del depósito A está por debajo de N1.

En modo autmático el motor se pone en marcha cuando el nivel del agua en el depósito A está por encima de N1 y en depósito B por debajo de N2, continua funcionando hasta que el nivel alcanza a N3 o se alcanza el nivel N1 en el depósito A.

En ambos modos de funcionamiento el motor está protegido por el térmico F2.

La instalación dispone de dos lámparas que indican:

- L1 motor M1 funcionando.
- L2 disparo del térmico F2.

Entradas y salidas que emplearemos:

Detector de nivel N1 = E32.0
Detector de nivel N2 = E32.1
Detector de nivel N3 = E32.2
Térmico = E32.3
Int. manual/automát. = E32.5
Parada manual = E32.6

Motor M1 = A32.0
Lámpara M1 conectado = A32.2
Lámpara dis. térmico = A32.3

SOLUCION:

 
:ob1
ue 32.3         # Se revisa el térmico
spbpb 2         # Si está activado el térmico salta a PB2
ue 32.5         # Se revisa si está en manual o automático
spbpb 0         # Si está en automático salta a PB0
ue 32.5
om 0.1          # Hacemos VKE=1 si se conectó el pulsador antes
beb
ue 32.0         # Se revisa el nivel N1
une 32.6        # Se revisa la parada
spbpb 1         # Si se cumple lo anterior se conecta el motor
spbpb 3         # Se desconecta el motor
be
***
:pb0            # Modo automático
ue 32.3         # Hacemos VKE=0
=m 0.1          # Borramos la marca del pulsador manual
ue 32.0
une 32.1
une 32.2        # Depósito por debajo de N2 y N3
spbpb 1         # Si N1 está activado y N2 no, se conecta el motor
ue 32.3         # Ponemos VKE=0
oe 32.2
one 32.0
spbpb 3         # Si se alcanza N3 o N1 se desconecta el motor
one 32.3        # Ponemos VKE=1
be
***
:pb1            # Encender el motor
une 32.3        # Si el térmico está apagado VKE=1
=a 32.0         # Encendemos motor
=a 32.2         # Encendemos lámpara
ue 32.3         # Ponemos VKE=0
be
***
:pb2            # Disparo del térmico
ue 32.3
=a 32.3
spapb 3         # Apagamos el motor
stp             # Paramos el autómata
be
***
:pb3            # Apagar motor
ue 32.3         # Si el térmico está apagado VKE=0
=a 32.0         # Apagamos motor
=a 32.2         # Apagamos lámpara
ue 32.6         # Revisamos el pulsador de parada
om 0.1          # Hacemos VKE=1 si se conectó el pulsador
=M 0.1          # Recordamos que se ha usado el pulsador
ue 32.3         # Ponemos VKE=0
be
***

NOTA:

Como puede observarse se ha empleado la entrada del térmico para poner el VKE a 0 o 1. Esto se ha hecho así debido a que esta entrada normalmente es cero, y si es uno se debe parar el programa (por lo que no se incurre en ningún error).

También hay que destacar el uso que se le ha dado a la marca 0.1, que hemos utilizado aprovechándonos de la característica ya mencionada en su momento (el borrado de éstas al resetear el autómata).
Debido a esto podemos asegurar que en la primera ejecución del programa dicha marca es cero y el pulsador no ha sido pulsado previamente.

  volve                                                                                                                                     cabernet                                                                                                                                  homelinux