![]() |
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.
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.
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.
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.
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.
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
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).
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.
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.
A la hora
de cargar datos en acumuladores, temporizadores, etc... tendremos
varias posibilidades en la forma de introducir el dato:
- KB: 8 bits (
- KC: 8 bits (2 caracteres alfanuméricos).
- KF: 16 bits (nº en coma fija, +
- KH: 16 bits (nº hexadecimal,
- KM: 16 bits (binario natural).
- KY: 16 bits (2 bytes,
- KT: 16 bits (valor de preselección de temporizadores,
- KZ: 16 bits (valor de preselección de contadores,
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.
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).
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.
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
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.
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.
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.
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.
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.
!=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.
+F Se suman los AKKUs y el resultado se introduce en AKKU1.
-F
AKKU1 = AKKU2
- AKKU1
Dependiendo del resultado
se activan los indicadores.
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.
STP Produce la parada del autómata.
NOP0
Operación nula
(16 bits a cero en
NOP1
Operación nula
(16 bits a uno en
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).
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.
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.
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.