Bloque que ejecuta una operación de desplazamiento aritmético hacia la izquierda en un valor pasado por Value, almacenando el resultado en Result.
Representación Ladder

Estructura del Bloque
Tipo de Variable |
Nombre |
Tipo de Dato |
Descripción |
VAR_INPUT |
EN |
BOOL |
Habilitación del bloque |
Value |
SINT INT DINT |
Variable a sufrir desplazamiento |
|
Shift |
BYTE USINT |
Indice de desplazamiento |
|
VAR_OUTPUT |
ENO |
BOOL |
Fin de operación |
Result |
SINT INT DINT |
Variable que almacena el resultado de la operación |
Operación
Este bloque, cuando tiene un valor TRUE en EN, envía a la salida Result el valor de la variable Value tras realizar un determinado número de desplazamientos aritméticos hacia la izquierda, de acuerdo con el valor de Shift.
|
¡NOTA! Todos los desplazamientos aritméticos implementados mantienen la señal de la variable |
Cuando EN tiene valor FALSE, Result 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 realiza un desplazamiento aritmético a la izquierda de cuatro posiciones (0100 en binario) en la variable VALUE, cuyo valor inicial es -12 (1111 0100 en binario). Los bits a la izquierda van siendo descartados, y son insertados nuevos ceros a la derecha, visto que los desplazamientos aritméticos a la izquierda preservan la señal de la variable. El resultado final (1100 0000 en binario) es almacenado en RESULT.

El ejemplo de arriba realiza un desplazamiento aritmético a la izquierda de cuatro posiciones (0100 en binario) en la variable VALUE, cuyo valor inicial es 12 (0000 1100 en binario). Los bits a la izquierda van siendo descartados, y son insertados nuevos ceros a la derecha, visto que los desplazamientos aritméticos a la izquierda preservan la señal de la variable. El resultado final (0100 0000 en binario) es almacenado en RESULT.
Ejemplo en ST
El siguiente ejemplo muestra las instrucciones para aplicar el ejemplo anterior en el lenguaje ST.
VAR VALUE : SINT := -12; SHIFT : USINT := 4; RESULT : SINT; END_VAR
RESULT := FB_ASHL( EN:=DI1, Value:=VALUE, Shift:=SHIFT, ENO=>DO1);
|
|---|