Skift och Rotation
Bitmanipulering
Optimera din registerbearbetning. Från ultrasnabb matematisk beräkning till komplex hantering av kommunikationsprotokoll — bemästra bitrörelser.
Varför skifta eller rotera bitar?
Skift- (Shift) och rotationsoperationer (Rotate) gör det möjligt att flytta bitarna i ett ord åt vänster eller höger. Inom industrin används de för att extrahera exakt information från ett kommunikationstelegram, skapa skiftregister för att spåra delar på en transportör, eller utföra multiplikationer/divisioner med potenser av 2 med extrem prestanda.
Den största skillnaden ligger i hanteringen av 'utgående' bitar: medan skiftning (Shift) kastar bort dem och ersätter dem med nollor, matar rotation (Rotate) in dem igen på andra sidan av ordet, vilket skapar en kontinuerlig cirkulär loop.
Skift (Shift)
Linjär rörelse med bitförlust
SHL / SHR — Skift Vänster/Höger
SHLVad den gör
Flyttar bitarna åt vänster (SHL) eller höger (SHR) ett antal positioner som definieras av ingången N. Bitar som lämnar registret går förlorade, och nya inkommande bitar sätts till 0.
När den ska användas
Snabb multiplikation med 2 (SHL), division med 2 (SHR), eller isolering av en specifik byte i ett 32-bitars ord.
Proffstips
Att skifta ett heltal 1 bit åt vänster motsvarar att multiplicera det med 2 utan att använda den matematiska enheten.
För tecknade typer (Int, DInt) behåller SHR ofta teckenbiten (aritmetiskt skift).
Om N är större än ordstorleken (t.ex. N=20 för ett WORD), blir resultatet 0.
Rotation (Rotate)
Cirkulär rörelse utan förlust
ROL / ROR — Rotation Vänster/Höger
ROLVad den gör
Roterar bitarna cirkulärt. Biten som går ut på ena sidan (t.ex. vänster för ROL) kommer omedelbart in på den andra sidan (höger). Ingen data går förlorad.
När den ska användas
Skapa roterande ljusmönster, enkel datakryptering eller hantering av cirkulära buffertar (FIFO).
Proffstips
Idealisk för att växla prioriteringar i en grupp pumpar eller motorer.
Till skillnad från skiftning ger en fullständig rotation (t.ex. 16 bitar för ett WORD) tillbaka det ursprungliga värdet.
Använd ROL/ROR för att ändra byte-ordningen (Endianness) vid datautbyte.
Shift vs Rotate: Matchen
Förstå inverkan på din data
| Egenskap | Skift (SHL/SHR) | Rotation (ROL/ROR) |
|---|---|---|
| Struktur | Linjär | Cirkulär |
| Utgående bitar | Kastade (Förlorade) | Återinförda på motsatt sida |
| Inkommande bitar | Alltid 0 | Återanvända utgående bitar |
| Matematisk användning | Multiplikation / Division | Bitpermutation |
| Praktiskt exempel | Delspårning (Transportör) | Ljusmönster / Sekvenserare |
| Risk | Tömning av register | Ingen (data bevaras) |
Vanliga frågor
Varför använda SHL istället för multiplikation med 2?
SHL-instruktionen utförs mycket snabbare av PLC-processorn än en MUL-operation eftersom den arbetar direkt på registret utan att gå via den komplexa ALU:n.
Hur skapar man ett skiftregister för en transportör?
Använd SHR vid varje pulsgivarimpuls. Om en del detekteras vid inloppet, tvinga bit 0 till 1. Genom att skifta ordet spårar du delens position bit för bit.
Vad är inverkan av datatypen (Byte, Word, DWord)?
Instruktionen anpassar sig till storleken. En ROR på en Byte gör att bit 7 återkommer på position 0 efter 1 skiftning. På ett Word kommer bit 15 tillbaka till 0.
Kan variabler skiftas i SCL?
Ja, via SHL(IN:=var, N:=n) funktioner eller genom att använda standard bitvisa operatorer om din TIA Portal-version tillåter det.