Bloco que executa uma operação de deslocamento aritmético à direita em um valor passado por Value, armazenando o resultado em Result.
Representação Ladder

Estrutura do Bloco
Tipo de Variável |
Nome |
Tipo de Dado |
Descrição |
VAR_INPUT |
EN |
BOOL |
Habilitação do bloco |
Value |
SINT INT DINT |
Variável a sofrer deslocamento |
|
Shift |
BYTE USINT |
Indice de deslocamento |
|
VAR_OUTPUT |
ENO |
BOOL |
Fim de operação |
Result |
SINT INT DINT |
Variável que armazena o resultado da operação |
Funcionamento
Este bloco, quando tem um valor TRUE em EN, envia para a saída Result o valor da variável Value após realizar um determinado número de deslocamentos aritméticos à direita, de acordo com o valor de Shift.
|
NOTA! Todos os deslocamentos aritméticos implementados mantém o sinal da variável |
Quando EN possui valor FALSE, Result permanece inalterado.
O valor de ENO repassa para o próximo bloco Ladder o valor de EN após finalizada a operação.
Fluxograma do Bloco

Exemplo em Ladder

O exemplo acima realiza um deslocamento aritmético à direita de três posições na variável VALUE, cujo valor inicial é 52 (0011 0100 em binário). Os bits à direita vão sendo descartados, e à esquerda são inseridos novos zeros. O resultado final (0000 0110 em binário) é armazenado em RESULT.

O exemplo acima realiza um deslocamento aritmético à direita de duas posições na variável VALUE, cujo valor inicial é -79 (1011 0001 em binário). Os bits à direita vão sendo descartados, e à esquerda são inseridos novos uns, visto que os deslocamentos aritméticos à direita preservam o sinal da variável. O resultado final (1111 0110 em binário) é armazenado em RESULT.

O exemplo acima realiza um deslocamento aritmético à direita de treze posições na variável VALUE, cujo valor inicial é -128 (1000 0000 em binário). Os bits à direita vão sendo descartados, e à esquerda são inseridos novos uns. O resultado final (1111 1111 em binário) é armazenado em RESULT.
Exemplo em ST
O exemplo abaixo, exibe as instruções para aplicação do exemplo acima na linguagem ST.
VAR VALUE : SINT := -79; SHIFT : BYTE := 2; RESULT : INT; END_VAR
RESULT := FB_ASHR( EN:=DI1, Value:=VALUE, Shift:=SHIFT, ENO=>DO1);
|
|---|