Przesuwanie i Rotacja
Manipulacja bitami
Zoptymalizuj przetwarzanie swoich rejestrów. Od ultraszybkich obliczeń matematycznych po złożone zarządzanie protokołami komunikacyjnymi — opanuj ruch bitów.
Dlaczego warto przesuwać lub obracać bity?
Operacje przesuwania (Shift) i rotacji (Rotate) pozwalają na przemieszczanie bitów słowa w lewo lub w prawo. W przemyśle są one używane do wyodrębniania precyzyjnych informacji z telegramu komunikacyjnego, tworzenia rejestrów przesuwnych do śledzenia części na przenośniku lub wykonywania mnożenia/dzielenia przez potęgi 2 w sposób niezwykle wydajny.
Główna różnica polega na traktowaniu bitów 'wychodzących': podczas gdy Przesunięcie (Shift) odrzuca je i zastępuje zerami, Rotacja (Rotate) wprowadza je z powrotem z drugiej strony słowa, tworząc ciągłą pętlę kołową.
Przesunięcie (Shift)
Ruch liniowy z utratą bitów
SHL / SHR — Przesunięcie w lewo/prawo
SHLCo robi
Przesuwa bity w lewo (SHL) lub w prawo (SHR) o liczbę pozycji zdefiniowaną przez wejście N. Bity wychodzące z rejestru są tracone, a nowe bity wchodzące są ustawiane na 0.
Kiedy używać
Szybkie mnożenie przez 2 (SHL), dzielenie przez 2 (SHR) lub izolowanie konkretnego bajtu w 32-bitowym słowie.
Porady Pro
Przesunięcie liczby całkowitej o 1 bit w lewo jest równoważne pomnożeniu jej przez 2 bez obciążania jednostki matematycznej.
Dla typów ze znakiem (Int, DInt), SHR często zachowuje bit znaku (przesunięcie arytmetyczne).
Jeśli N jest większe niż rozmiar słowa (np. N=20 dla WORD), wynikiem będzie 0.
Rotacja (Rotate)
Ruch kołowy bez utraty bitów
ROL / ROR — Rotacja w lewo/prawo
ROLCo robi
Obraca bity w sposób kołowy. Bit wychodzący z jednej strony (np. z lewej dla ROL) natychmiast wchodzi z drugiej strony (z prawej). Żadne dane nie są tracone.
Kiedy używać
Tworzenie wirujących wzorów świetlnych, proste szyfrowanie danych lub zarządzanie buforami cyklicznymi (FIFO).
Porady Pro
Idealne do naprzemiennego ustalania priorytetów w grupie pomp lub silników.
W przeciwieństwie do przesuwania, pełna rotacja (np. 16 bitów dla WORD) przywraca wartość początkową.
Użyj ROL/ROR do zmiany kolejności bajtów (Endianness) w wymianie danych.
Shift vs Rotate: Pojedynek
Zrozumienie wpływu na Twoje dane
| Właściwość | Przesunięcie (SHL/SHR) | Rotacja (ROL/ROR) |
|---|---|---|
| Struktura | Liniowa | Kołowa |
| Bity wychodzące | Odrzucone (Utracone) | Wprowadzone ponownie |
| Bity wchodzące | Zawsze 0 | Bity wychodzące odzyskane |
| Zastosowanie matematyczne | Mnożenie / Dzielenie | Permutacja bitów |
| Przykład z życia | Śledzenie części (Przenośnik) | Sekwencer / Biegnące światło |
| Ryzyko | Opróżnienie rejestru | Brak (dane zachowane) |
Często Zadawane Pytania
Dlaczego używać SHL zamiast mnożenia przez 2?
Instrukcja SHL jest wykonywana znacznie szybciej przez procesor PLC niż operacja MUL, ponieważ pracuje bezpośrednio na rejestrze bez przechodzenia przez złożone ALU.
Jak stworzyć rejestr przesuwny dla przenośnika?
Użyj SHR przy każdym impulsie encodera. Jeśli na wejściu wykryto część, wymuś bit 0 na 1. Przesuwając słowo, śledzisz pozycję części bit po bicie.
Jaki jest wpływ typu danych (Byte, Word, DWord)?
Instrukcja dostosowuje się do rozmiaru. ROR na Byte sprawi, że bit 7 pojawi się ponownie na pozycji 0 po 1 przesunięciu. Na Wordzie bit 15 powróci na 0.
Czy można przesuwać zmienne w SCL?
Tak, poprzez funkcje SHL(IN:=var, N:=n) lub używając standardowych operatorów bitowych, jeśli pozwala na to Twoja wersja TIA Portal.