Durante todo el año recibimos muchos mail, pidiéndonos información para realizar trabajos sobre autómatas. Así que ahora es el momento para recordaros que necesitamos de vuestra colaboración enviándonos los que ya habéis presentado.
|
Funcionamiento de
los flancos en PL7 (Micro y Junior)
Consideraciones
previas:
Cada bit interno %M , entrada %I y salida %Q
tiene asociado un registro de 3 bits donde se guarda
el
histórico de estados del bit :
Forz = Estado de forzado del bit.
Ant = Estado anterior del bit.
Act = Estado actual del bit.
%M ò %Q
Cada vez que el PLC ejecuta una instrucción ----(
) o
cualquier otra inst. de asignación sobre el bit , se
efectua el desplazamiento del valor Act al valor
Ant de tal forma que al ejecutar una instrucción del tipo
------| P |------
se hace una comparación entre los bits Ant y Act determinando así
si hay flanco. Como por
lo general las asignaciones solo se programan
una vez , el flanco dura 1 scan .
!!OJO!! Los
SET / RESET , %Mx:=.... NO se ejecutan si no se cumple la condición . Las
----( ) siempre
se ejecutan .
%M0
A modo de ejemplo si se programa lo siguiente : ---------------| P
|--------------------- INC %MW0
y se activa el bit %M0 externamente al programa
(desde un XBT, un PC etc) , o
sea no se ejecuta ninguna
instrucción de asignación sobre %M0 , el
registro histórico no desplaza el estado Act al Ant , con lo cual
ambos bits son siempre diferentes (Ant=0 y Act=1)
. Esto implica que siempre se produce
el flanco y
en este caso la palabra %MW0 se incrementa continuamente (funcionamiento indeseado).
Esta situación NO es un defecto de funcionamiento , sino que se
trata simplemente de una forma de tratar
los bits. Esto permite ahorrar tiempo de proceso
ya que solo se actualiza el histórico de los bits que estan
programados y no de todos los bits configurados
.
En el caso de los bits de entrada %I que esten
configurados , su registro históricose actualiza durante el
refresco de las entradas (antes de ejecutar
programa ) .
Soluciones:
En
el caso de tener que detectar el flanco de un bit que se activa externamente
desde un terminal exterior ,
hay varias soluciones :
1.- Pasar por un bit intermedio .
%M0
%M1
---------------| |--------------------- ( )
%M1
---------------|
P |--------------------- INC %MW0
2.- Asignar al final del programa , el bit a
sí mismo:
Esto obliga a actualizar el
registro histórico del bit.
%M0
---------------|
P |--------------------- INC %MW0
Resto del
programa
%M0
%M0
---------------| |--------------------- ( )
Ejemplo 1
:
El objetivo de los siguientes ejemplos es únicamente
familiarizarse con el uso de flancos.
%I1.0
%M0
---------------| |--------------------- ( )
Si se activa %I1.0, activación de %M0.Actualización
de
histórico: Bit Ant=0, Bit Act=1.
%M0
---------------|
P |--------------------- INC %MW0
Se detecta flanco . Se Incrementa %MW0 una sola
vez
por cada paso de 0 a 1 de la entrada.
%M0
%M0
---------------| |--------------------- ( )
Se vuelve a actualizar el histórico de %M0 .
Bit Ant=1,
Bit
Act =1 por tanto no hay flanco .
%M0
---------------|
P |--------------------- INC %MW1
No hay incremento.
En este ejemplo , el funcionamiento es diferente
al esperado ya que se han programado 2 asignaciónes
sobre el mismo bit %M0 .
Ejemplo
2:
%I1.0
%M0
---------------| |--------------------- ( )
Si se activa %I1.0, activación de %M0.Actualización
de
histórico: Bit Ant=0, Bit Act=1 (siempre que
%M20=0 ).
%M0
---------------|
P |--------------------- INC %MW0
Se detecta flanco . Se Incrementa %MW0
%M20
%M0
---------------| |--------------------- ( )
Se vuelve a actualizar el histórico de %M0 .En
función del
estado
de %M20 ocurre que si M20=0 Bit Ant=1,
Bit
Act =0 por tanto hay flanco
descendente.
Si M20=1 Bit Ant=1, Bit Act =1 por tanto no hay
flanco.
%M0
---------------|
P |--------------------- INC %MW1
No hay incremento en ningun caso
%M0
---------------|
N |--------------------- INC %MW2
Si %M20=0 se incrementa MW2 continuamente a cada
scan .Si %M20=1 no hay incremento.
En este ejemplo , el funcionamiento es diferente
al esperado ya que se han programado 2 asignaciónes
sobre el mismo bit %M0 .
Ejemplo 3:
%I1.0
%M0
---------------| |--------------------- ( SET )
Si se activa %I1.0, activación de %M0.Actualización
de
histórico: Bit Ant=0, Bit Act=1 . Hay flanco
ascendente.
%I1.1
%M0
---------------| |--------------------- ( RESET )
Suponiendo desactivada %I1.1 , la instrucción
Reset no se
ejecuta , pero se actualiza el registro
historico . Por tanto:
Bit Ant=1, Bit Act=1 .Se pierde el flanco que
había .
Si %I1.1 está activada , se detecta flanco
descendente.
%M0
---------------|
P |--------------------- INC %MW0
No se detecta el flanco.No incrementa en ningun
caso.
%M0
---------------|
N |--------------------- INC %MW0
Hay incremento a cada scan si I1.0=1 y I1.1=1
En este ejemplo , el funcionamiento es diferente
al esperado ya que se han programado 2 asignaciónes
sobre el mismo bit %M0 .
Ejemplo
4:
%I1.0
%M0
---------------| |--------------------- ( )
Si se activa %I1.0, activación de %M0.Actualización
de
histórico: Bit Ant=0, Bit Act=1 (Si %M20=0).
%M0
---------------|
P |--------------------- INC %MW0
Se detecta flanco . Se Incrementa %MW0
%M20
%M0
---------------| |--------------------- ( SET )
Se vuelve a actualizar el histórico de %M0 .En
función del
estado de %M20 ocurre que si M20=0 Bit Ant=1,
Bit Act =1 ya que no ejecuta SET , por tanto NO
hay flanco .
Si M20=1 Bit Ant=1, Bit Act =1 por tanto no hay
flanco si
%I1.0=1.Si %I1.0=0 se produce flanco ascendente.
%M0
---------------|
P |--------------------- INC %MW1
Hay incremento a cada scan si I1.0=0 y M20=1
%M0
---------------|
N |--------------------- INC %MW2
No hay incremento en ningun caso
En este ejemplo , el funcionamiento es diferente
al esperado ya que se han programado 2 asignaciónes
sobre el mismo bit %M0 .
|
|
Todos los nombres comerciales que se utilizan en esta web están o pueden estar registrados por sus respectivos fabricantes. 2000, 2006 Última modificación: 02/03/2006 |