Bloque que lee el valor de pulsos de un encoder, de acuerdo con un tipo de lectura escogido, interpretándolo como fracción de vueltas.
Representación Ladder

Estructura del Bloque
Tipo de Variable |
Nombre |
Tipo de Dato |
Descripción |
VAR_INPUT |
EN |
BOOL |
Habilitación del bloque |
Source# |
BYTE |
Fuente de conteo |
|
Pulses |
DWORD UDINT |
Número de pulsos máximo, relativo al fin de vuelta |
|
VAR_OUTPUT |
ENO |
BOOL |
Habilitación de salida |
Value |
DINT DWORD UDINT |
Valor de conteo |
|
VAR |
READENC2_INST_0 |
READENC2 |
Instancia de acceso a la estructura del bloque |
Operación
Este bloque, cuando tiene un valor TRUE en EN, obtiene el número de pulsos contados en el encoder, conforme es seleccionado en Source#, y los transfiere a Value. A cada flanco de subida, Value es reinicializado en cero. Cuando Value se incrementa y alcanza el valor de Pulses, recibe cero. Cuando Value disminuye y tiende a alcanzar el valor de -1, recibe el valor en Pulses. De esa forma, Value siempre presenta el resultado en fracción de vueltas.
Cuando EN tiene valor FALSE, Value permanece inalterado.
El valor de ENO pasa al próximo bloque Ladder el valor de EN, luego de finalizada la operación.
Diagrama de Flujo del Bloque

Ejemplo en Ladder

El ejemplo de arriba, al identificar un flanco de subida en DI1, comienza a contar el número de pulsos en el encoder conectado en conformación de cuadratura AB. PULSES_IN_TURN es el valor de pulsos para completar una vuelta. En caso de que el valor leído sea superior, retornará al conteo a partir de cero. En caso de que el valor leído sea negativo, retornará el conteo a partir de PULSES_IN_TURN. El valor resultante será almacenado en VALUE. El bloque finalizará exitosamente y será activada la salida ENO.
Ejemplo en ST
El siguiente ejemplo muestra las instrucciones para aplicar el ejemplo anterior en el lenguaje ST.
VAR PULSES_IN_TURN : DINT; VALUE : UDINT; READENC2_INST_0 : FB_READENC2; END_VAR
READENC2_INST_0.EN := DI1; READENC2_INST_0(Source:=0, Pulses:=PULSES_IN_TURN); VALUE := READENC2_INST_0.Value; DO1 := READENC2_INST_0.ENO;
|
|---|