Que son los flancos?, Como detectarlos? y como usarlos en KOP y SCL TIA Portal.

En esta entrada hablaremos de los muy buenos amigos flancos, los flancos se pueden definir de la siguiente manera:

Es la operación comparativa entre dos bit, en donde el bit de comparación de flanco consulta constantemente el estado anterior del bit comparado para establecer el estado del bit comparado en el presente ciclo de scan del autómata.

Leyéndolo así es un poco enredado pero vamos a explicarlo un poco más grafico mediante la ayuda de algunas imágenes. Vamos a usar algunas entradas y salidas para esto:

 

Segmento Flanco Ascendente KOP.

Segmento Flanco Ascendente KOP.

Como podemos observar en el circuito anterior solo usamos una entrada, una salida y una marca para comparación del estado de la entrada, esta marca le sirve al autómata para comparar el estado de la entrada en el ciclo anterior de scan y de esta manera detectar el cambio de estado lógico (verdadero, falso o “1” o “0”) por lo tanto el flanco, sea ascendente o descendente dependiendo de la instrucción que agreguemos en el segmento.

Ahora la explicación según los ciclos de scan:

Ciclo de Scan Nº1:

  • La entrada está en estado lógico “0”.
  • La marca de memoria compara con el estado lógico anterior.
  • La salida se mantiene sin cambio de estado.

 

Segmento de Scan nº1.

Segmento de Scan nº1.

 

Ciclo de Scan Nº2:

  • La entrada está en estado lógico “1”.
  • La marca de memoria compara el estado lógico anterior detecta un cambio de estado positivo y se activa la salida.
  • La salida se activa.

 

Segmento de Scan nº2.

Segmento de Scan nº2.

 

Ciclo de Scan Nº3:

  • La entrada está en estado lógico “1”.
  • La marca de memoria compara el estado lógico anterior al no haber ningún cambio de estado se deja de activar la salida.
  • La salida se desactiva.

Ciclo de Scan Nº4:

  • La entrada está en estado lógico “0”.
  • La marca de memoria compara el estado lógico anterior se detecta un cambio de estado negativo pero como la función solo es para flancos positivos no ocurre nada que afecte la salida.
  • La salida se desactiva.

Gráficamente se entiende mejor, por lo menos esta función de los flancos que para muchas personas es un poco abstracta ya que hay que imaginarse cada ciclo de scan del autómata como un escenario distinto a los anteriores ciclos. Los flancos pueden ser positivos y negativos ambos tienen sus aplicaciones prácticas, aquí podemos observar un de ellas:

Incremento de variable con la función SUMA “ADD” en el autómata:

Incremento con flanco ascendente.

Incremento con flanco ascendente.

Como apreciamos en el segmento anterior utilizamos una entrada, una marca de estado asociada a la detección de flanco ascendente para realizar un incremento en la variable NUMERO#1, en este caso imaginamos que la ENTRADA#1 está conectada a un pulsador. Cuando pulsemos dicho pulsador este activara la entrada y como nuestra marca de memoria siempre está comparando el estado lógico anterior detectara un flanco positivo y se realizara el incremento en la variable NUMERO#1, como los ciclos de scan de un autómata son tan rápidos es imposible para un ser humano activar el pulsador solo por un ciclo de scan y es aquí donde los flancos nos ayudan. Si ese flanco no estuviera ahí la variable NÚMERO#1 se incrementaría siempre que este pulsado el pulsador lo cual es un problema cuando queremos incrementar de uno en uno dicha variable con la función SUMA “ADD”.

Ahora qué diferencia hay entre usar un flanco positivo y un flanco negativo en esta función, pues según la función que elijamos el incremento se realizaría en el paso del flanco ascendente apenas pulsemos el pulsador en el ciclo de scan siguiente ya severa incrementada la variable NUMERO#1. Pero al contrario usando un flanco descendente la variable solo se incrementara al despulsar o desactivar el pulsador.

Cosas que no se deben hacer con los flancos es colocarlos en serie dependiendo de la misma entrada. En el siguiente ejemplo vemos algo que no debemos hacer a la hora de programar colocar dos flancos en serie y que dependan de la misma entrada o marca según sea el caso. En este caso el incremento nunca se llevara a cabo debido a que es imposible su activación por los dos flancos en serie.

Error al usar Flancos.

Error al usar Flancos.

Estas funciones de flancos también están pre programadas en el firmware del autómata para activación de alarmas e interrupciones de programa, en el S7-300 y 400 las llamamos alarmas de proceso asociadas a los bloques de organización OB55,56 y 57 y en las gamas más nuevas de autómatas como el S7-1200 y 1500 se les llama interrupciones, con una filosofía de funcionamiento muy semejante estas alarmas o interrupciones lo que hacen es mediante un flanco ascendente o descendente parar la ejecución del bloque de organización principal OB1 e ir a correr un OB según la prioridad de la interrupción o alarma.

Ahora que pasa si estamos programando en SCL y deseamos detectar flancos. Pues tenemos dos formas de hacerlo ya sea con sentencia condicional (IF THEN) o con operaciones aritméticas, en ambos casos necesitamos una marca de memoria como lo hacíamos en la lógica de contactos.

Sentencia condicional:

Flanco Ascendente programado en SCL.

Flanco Ascendente programado en SCL.

Como podemos ver en el código anterior usamos un IF que como condición tiene que cuando ENTRADA sea verdadero y el negado de MARCA sea verdadero se ejecutaran las sentencias dentro del IF, he inmediatamente fuera del IF igualamos el marca a entrada para que en el siguiente ciclo de scan del autómata no se cumpla la condición y así no entrar en el IF. Sencillo y limpio.

Para el uso de un flanco descendente en SCL usaremos el mismo código pero esta vez intercalaremos la negación NOT pero en la variable donde queremos ver el flanco descendente, de esta manera:

Flanco descendente programado en SCL.

Flanco descendente programado en SCL.

Detección de flancos con operaciones aritméticas:

Con operaciones aritméticas en este caso de Bits también podemos detectar los flancos, en este ejemplo igualamos la salida que queremos activar con el flanco a una operación de AND negando la marca de memoria para así detectar el flanco ascendente, luego de esto al igual que con la sentencia condicional debemos guardar el valor de la entrada en la marca de memoria para que en el siguiente ciclo de scan desactivar la salida pertinente.

Flanco Ascendente con operación lógica de Bits en SCL.

Flanco Ascendente con operación lógica de Bits en SCL.

Para la detección de flancos descendentes usaremos el mismo código lo único es que intercalaremos la negación NOT en la operación aritmética de la siguiente forma:

Flanco decendente con operación lógica de Bits en SCL.

Flanco decendente con operación lógica de Bits en SCL.

Este método ocupa menos líneas de código y estoy casi seguro que su traducción en AWL es más pequeña, en pocas palabras creo que es más eficiente, aunque las dos formas de hacerlo son igual de válidas y correctas.

Aquí les dejo los enlaces en los cuales me base para realizar el código en SCL:

¿Cómo se puede realizar una evaluación de flanco en STEP 7 (TIA Portal) con SCL?

Evaluación de flanco con ayuda del SIMATIC (TIA Portal) V11 y SCL


Leave a Reply