Deslocamento e Rotação
Manipulação de Bits
Otimize o processamento dos seus registos. Do cálculo matemático ultra-rápido à gestão de protocolos de comunicação complexos, domine o movimento dos bits.
Porque deslocar ou rodar bits?
As operações de deslocamento (Shift) e rotação (Rotate) permitem mover os bits de uma palavra para a esquerda ou para a direita. Na indústria, são utilizadas para extrair informações precisas de um telegrama de comunicação, criar registos de deslocamento para o rastreio de peças num transportador, ou efetuar multiplicações/divisões por potências de 2 de forma extremamente eficiente.
A diferença principal reside no tratamento dos bits 'saída': enquanto o deslocamento (Shift) os descarta e substitui por zeros, a rotação (Rotate) volta a injetá-los do outro lado da palavra, criando um loop circular contínuo.
Deslocamento (Shift)
Movimento linear com perda de bits
SHL / SHR — Deslocamento Esquerda/Direita
SHLO que faz
Move os bits para a esquerda (SHL) ou para a direita (SHR) por um número de posições definido pela entrada N. Os bits que saem do registo são perdidos, e os novos bits de entrada são colocados a 0.
Quando usar
Multiplicação rápida por 2 (SHL), divisão por 2 (SHR), ou isolamento de um byte específico numa palavra de 32 bits.
Dicas Pro
Deslocar um inteiro 1 bit para a esquerda equivale a multiplicá-lo por 2 sem usar a unidade de cálculo matemático.
Para tipos com sinal (Int, DInt), o SHR frequentemente conserva o bit de sinal (deslocamento aritmético).
Se N for superior ao tamanho da palavra (ex: N=20 para um WORD), o resultado será 0.
Rotação (Rotate)
Movimento circular sem perda
ROL / ROR — Rotação Esquerda/Direita
ROLO que faz
Faz rodar os bits de forma circular. O bit que sai de um lado (ex: esquerda para ROL) entra imediatamente pelo outro lado (direita). Nenhum dado é perdido.
Quando usar
Criação de padrões luminosos rotativos, encriptação simples de dados ou gestão de buffers circulares (FIFO).
Dicas Pro
Ideal para alternar prioridades num grupo de bombas ou motores.
Ao contrário do deslocamento, uma rotação completa (ex: 16 bits para um WORD) devolve o valor inicial.
Utilize ROL/ROR para reorganizar a ordem dos bytes (Endianness) em trocas de dados.
Shift vs Rotate: O duelo
Compreender o impacto nos seus dados
| Propriedade | Deslocamento (SHL/SHR) | Rotação (ROL/ROR) |
|---|---|---|
| Estrutura | Linear | Circular |
| Bits de saída | Descartados (Perdidos) | Reinjetados no oposto |
| Bits de entrada | Sempre 0 | Bits de saída reciclados |
| Uso Matemático | Multiplicação / Divisão | Permutação de bits |
| Exemplo real | Rastreio de peça | Sequenciador / Luzes |
| Risco | Esvaziamento do registo | Nenhum (dados preservados) |
Perguntas Frequentes
Porque usar SHL em vez de uma multiplicação por 2?
A instrução SHL é executada muito mais rapidamente pelo processador do PLC do que uma operação MUL, pois trabalha diretamente sobre o registo sem passar pela ALU complexa.
Como criar um registo de deslocamento para um transportador?
Utilize o SHR a cada pulso de um encoder. Se uma peça for detetada na entrada, force o bit 0 a 1. Ao deslocar a palavra, segue a posição da peça bit a bit.
Qual é o impacto do tipo de dados (Byte, Word, DWord)?
A instrução adapta-se ao tamanho. Um ROR num Byte fará reaparecer o bit 7 na posição 0 após 1 deslocamento. Num Word, será o bit 15 que voltará a 0.
Pode-se deslocar variáveis em SCL?
Sim, através das funções SHL(IN:=var, N:=n) ou usando os operadores bitwise padrão se a sua versão do TIA Portal o permitir.