Сдвиг и Вращение
Манипуляция битами
Оптимизируйте обработку ваших регистров. От сверхбыстрых математических вычислений до сложного управления протоколами связи — освойте движение битов.
Зачем сдвигать или вращать биты?
Операции сдвига (Shift) и вращения (Rotate) позволяют перемещать биты слова влево или вправо. В промышленности они используются для извлечения точной информации из телеграмм связи, создания регистров сдвига для отслеживания деталей на конвейере или выполнения умножения/деления на степени двойки с максимальной производительностью.
Основное различие заключается в обработке 'выходящих' битов: в то время как сдвиг (Shift) отбрасывает их и заменяет нулями, вращение (Rotate) возвращает их с другой стороны слова, создавая непрерывную круговую петлю.
Сдвиг (Shift)
Линейное движение с потерей битов
SHL / SHR — Сдвиг влево/вправо
SHLЧто она делает
Перемещает биты влево (SHL) или вправо (SHR) на количество позиций, определенное входом N. Биты, выходящие из регистра, теряются, а новые входящие биты устанавливаются в 0.
Когда использовать
Быстрое умножение на 2 (SHL), деление на 2 (SHR) или выделение конкретного байта в 32-битном слове.
Советы профи
Сдвиг целого числа на 1 бит влево эквивалентен его умножению на 2 без использования математического блока.
Для знаковых типов (Int, DInt) SHR часто сохраняет знаковый бит (арифметический сдвиг).
Если N больше размера слова (например, N=20 для WORD), результатом будет 0.
Вращение (Rotate)
Круговое движение без потерь
ROL / ROR — Вращение влево/вправо
ROLЧто она делает
Вращает биты по кругу. Бит, выходящий с одной стороны (например, слева для ROL), сразу же входит с другой стороны (справа). Данные не теряются.
Когда использовать
Создание бегущих огней, простое шифрование данных или управление кольцевыми буферами (FIFO).
Советы профи
Идеально подходит для чередования приоритетов в группе насосов или двигателей.
В отличие от сдвига, полный оборот (например, 16 бит для WORD) возвращает исходное значение.
Используйте ROL/ROR для изменения порядка байтов (Endianness) при обмене данными.
Сдвиг против Вращения: Сравнение
Понимание влияния на ваши данные
| Свойство | Сдвиг (SHL/SHR) | Вращение (ROL/ROR) |
|---|---|---|
| Структура | Линейная | Круговая |
| Выходящие биты | Удаляются (Теряются) | Возвращаются с другой стороны |
| Входящие биты | Всегда 0 | Выходящие биты возвращаются |
| Мат. использование | Умножение / Деление | Перестановка битов |
| Пример из жизни | Отслеживание детали | Бегущий огонь / Секвенсор |
| Риск | Опустошение регистра | Нет (данные сохраняются) |
Часто задаваемые вопросы
Почему стоит использовать SHL вместо умножения на 2?
Инструкция SHL выполняется процессором ПЛК гораздо быстрее, чем операция MUL, так как она работает напрямую с регистром, минуя сложные блоки АЛУ.
Как создать регистр сдвига для конвейера?
Используйте SHR при каждом импульсе энкодера. Если на входе обнаружена деталь, установите бит 0 в 1. Сдвигая слово, вы отслеживаете положение детали бит за битом.
Каково влияние типа данных (Byte, Word, DWord)?
Инструкция адаптируется к размеру. ROR для Byte заставит бит 7 снова появиться в позиции 0 после 1 сдвига. Для Word бит 15 вернется в 0.
Можно ли сдвигать переменные в SCL?
Да, через функции SHL(IN:=var, N:=n) или используя стандартные побитовые операторы, если это позволяет ваша версия TIA Portal.