С помощью операций сдвига можно побитно сдвигать содержимое входа IN влево или вправо. Сдвиг на n битов влево умножает содержимое входа IN на 2n; сдвиг на n битов вправо делит содержимое входа IN на 2n.
Следовательно, если Вы, например, сдвигаете двоичный эквивалент десятичного значения 3 на 3 бита влево, то получается двоичный эквивалент десятичного значения 24. Если Вы сдвигаете двоичный эквивалент десятичного значения 16 на 2 бита вправо, то получается двоичный эквивалент десятичного значения 4. Число, задаваемое Вами для входного параметра N, показывает, на сколько битов должен производиться сдвиг. Разряды, освобождающиеся вследствие операции сдвига, заполняются нулями или состоянием сигнала бита знака (”0” в случае положительного числа, ”1” в случае отрицательного числа). Бит, сдвигаемый последним, загружается в бит СС1 слова состояния . Биты CC0 и OV сбрасываются в “0”. Можно оценивать бит СС1 слова состояния с помощью операций перехода.
Step7 предоставляет следующие операции сдвига:
- сдвиг влево 16 битов, сдвиг влево 32 битов
- сдвиг вправо 16 битов, сдвиг вправо 32 битов
- сдвиг вправо целого числа (16 битов), сдвиг вправо целого числа (32 бита).
Сдвиг влево 16 бит
Операция Сдвиг влево 16 битов активизируется состоянием сигнала “1” на разрешающем входе (EN) и побитно сдвигает влево биты входа IN, имеющие номера с 0 по 15.
Вход N задает, на сколько битов происходит сдвиг. Если N больше, чем 16, то команда записывает 0 на выходе OUT и сбрасывает биты CC0 и OV слова состояния в ”0”. Освобождающиеся справа битовые позиции заполняются нулями. Результат операции сдвига может опрашиваться на выходе OUT.
Операция, запущенная при не равном нулю N, сбрасывает биты CC0 и OV слова состояния в ”0”. Когда операция выполняется (EN = 1), ENO показывает состояние сигнала последнего сдвинутого бита (соответствует CC1 и RLO в слове состояния). Другие операции после этого блока, подключенные через ENO (каскадное включение), не обрабатываются, если последний сдвинутый бит имеет состояние сигнала ”0”.
При размещении блока Сдвиг влево 16 битов необходимо соблюдать определенные ограничения
Элемент FBD | Параметры | Тип данных | Область памяти | Описание |
![]() |
IN | WORD | I, Q, M, D, L | Сдвигаемое значение |
N | WORD | I, Q, M, D, L | Количество битовых разрядов, на которое производится сдвиг | |
OUT | WORD | I, Q, M, D, L | Результат операции | |
EN | BOOL | I, Q, M, D, L | Деблокировка входа | |
ENO | BOOL | I, Q, M, D, L | Деблокировка выхода |
Пример и биты слова состояния операции сдвиг влево 16 бит
Сдвиг влево 32 бита
Команда сдвиг влево 32 бита выполняется также как и команда сдвиг влево 16 бит с разницей что обрабатывает она двойные слова. Хочу напомнить что сдвиг идет с 0 по 31 бит ( здесь исчисление идет от нуля). N не должно превышать значения 32 в противном случае команда запишет 0 на выходе.
Элемент FBD | Параметры | Тип данных | Область памяти | Описание |
![]() |
IN | WORD | I, Q, M, D, L | Сдвигаемое значение |
N | WORD | I, Q, M, D, L | Количество битовых разрядов, на которое производится сдвиг | |
OUT | WORD | I, Q, M, D, L | Результат операции | |
EN | BOOL | I, Q, M, D, L | Деблокировка входа | |
ENO | BOOL | I, Q, M, D, L | Деблокировка выхода |
Пример сдвига влево 32 бита и биты слова состояния
Сдвиг вправо 16 бит
Эта команда побитно сдвигает вправо биты входа IN, имеющие номера с 0 по 15. Биты с номерами с 16 по 31 воздействия не испытывают. Вход N задает, на сколько битов происходит сдвиг. Если N больше, чем 16, то команда записывает 0 на выходе OUT и сбрасывает биты CC0 и OV в ”0”. Освобождающиеся слева битовые позиции заполняются нулями. Результат операции сдвига можно узнать на выходе OUT.
Операция, запущенная при не равном нулю N, всегда сбрасывает биты СС0 и OV слова состояния в ”0”. Когда операция выполнится (EN = 1), ENO показывает состояние сигнала последнего сдвинутого бита (соответствует СС1 и RLO в слове состояния). Другие операции после этого блока, подключенные через ENO (каскадное включение), не обрабатываются, если последний сдвинутый бит имеет состояние сигнала ”0”. При размещении блока Сдвиг вправо 16 битов необходимо соблюдать определенные ограничения по битам слова состояния.
Элемент FBD | Параметры | Тип данных | Область памяти | Описание |
![]() |
IN | WORD | I, Q, M, D, L | Сдвигаемое значение |
N | WORD | I, Q, M, D, L | Количество битовых разрядов, на которое производится сдвиг | |
OUT | WORD | I, Q, M, D, L | Результат операции | |
EN | BOOL | I, Q, M, D, L | Деблокировка входа | |
ENO | BOOL | I, Q, M, D, L | Деблокировка выхода |
Пример cдвига вправо 16 бит и биты слова состояния для контроллеров SIMATIC
Сдвиг вправо 32 бит
Команда сдвиг вправо 32 бита выполняется также как и команда сдвиг вправо 16 бит с разницей что обрабатывает она двойные слова. Хочу напомнить что сдвиг идет с 0 по 31 бит и Если N больше 32 то команда записывает 0 на выходе.
Элемент FBD | Параметры | Тип данных | Область памяти | Описание |
![]() |
IN | DWORD | I, Q, M, D, L | Сдвигаемое значение |
N | WORD | I, Q, M, D, L | Количество битовых разрядов, на которое производится сдвиг | |
OUT | DWORD | I, Q, M, D, L | Результат операции | |
EN | BOOL | I, Q, M, D, L | Деблокировка входа | |
ENO | BOOL | I, Q, M, D, L | Деблокировка выхода |
Пример cдвига вправо 32 бит и биты слова состояния для контроллеров SIMATIC
Сдвиг вправо целого числа(16 бит)
Команда Сдвиг вправо целого числа (16 битов) активизируется состоянием сигнала “1” на разрешающем входе (EN) и побитно сдвигает вправо биты входа IN, имеющие номера с 0 по 15. Вход N задает, на сколько битов происходит сдвиг. Если N больше, чем 16, то команда работает так, как будто N = 16. Битовые позиции слева заполняются состоянием сигнала бита 15 (разряд знака целого числа), то есть нулем, если число положительное, и 1, если число отрицательное. Результат операции сдвига Вы можете опрашивать на выходе OUT.
Операция, запущенная при не равном нулю N, всегда сбрасывает биты СС0 и OV слова состояния в ”0”. Когда операция выполнится (EN = 1), ENO показывает состояние сигнала последнего сдвинутого бита (соответствует СС1 и RLO в слове состояния). Другие операции после этого блока, подключенные через ENO (каскадное включение), не обрабатываются, если последний сдвинутый бит имеет состояние сигнала ”0”. При размещении блока Сдвиг вправо целого числа 16 битов необходимо соблюдать определенные ограничения по битам слова состояния.
Элемент FBD | Параметры | Тип данных | Область памяти | Описание |
![]() |
IN | INT | I, Q, M, D, L | Сдвигаемое значение |
N | WORD | I, Q, M, D, L | Количество битовых разрядов, на которое производится сдвиг | |
OUT | INT | I, Q, M, D, L | Результат операции | |
EN | BOOL | I, Q, M, D, L | Деблокировка входа | |
ENO | BOOL | I, Q, M, D, L | Деблокировка выхода |
Сдвиг вправо целого числа 32 бита
Команда Сдвиг вправо целого числа (32 бита) работает по принципу сдвига вправо целого числа 16 бит. Единственная разница что работаем мы со словами 32 бита, а не 16. Кроме того если N больше, чем 32, то команда работает так, как будто N = 32.
Элемент FBD | Параметры | Тип данных | Область памяти | Описание |
![]() |
IN | DINT | I, Q, M, D, L | Сдвигаемое значение |
N | WORD | I, Q, M, D, L | Количество битовых разрядов, на которое производится сдвиг | |
OUT | DINT | I, Q, M, D, L | Результат операции | |
EN | BOOL | I, Q, M, D, L | Деблокировка входа | |
ENO | BOOL | I, Q, M, D, L | Деблокировка выхода |
Пример и биты слова состояния операции cдвига вправо целого числа 32 бит для SIMATIC
Операции циклического сдвига
С помощью операций циклического сдвига можно побитно циклически сдвигать вправо или влево все содержимое входа IN. Освобождающиеся разряды заполняются состояниями сигналов тех битов, которые выталкиваются из входа IN. Число, задаваемое Вами для входного параметра N, показывает, на сколько битов должен производиться циклический сдвиг. В зависимости от выбранной операции циклический сдвиг происходит через бит СС1. Бит CC0 слова состояния сбрасывается в “0”.
Вы можете воспользоваться следующими операциями циклического сдвига:
- циклический сдвиг влево 32 бита
- циклический сдвиг вправо 32 бита
Циклический сдвиг влево
Операция Циклический сдвиг влево 32 бита активизируется состоянием сигнала “1” на разрешающем входе (EN) и побитно циклически сдвигает влево все содержимое входа IN. Вход N задает, на сколько битов происходит циклический сдвиг. Если N больше, чем 32, то двойное слово циклически сдвигается на число битов, равное (((N-1) по модулю 32) +1). Освобождающиеся справа битовые позиции заполняются состояниями сигналов циклически сдвигаемых битов. Результат операции циклического сдвига Вы можете опрашивать на выходе OUT.
Операция, запущенная при не равном нулю N, всегда сбрасывает биты CC0 и OV слова состояния в ”0”. Когда операция выполнится (EN = 1), ENO показывает состояние сигнала последнего циклически сдвинутого бита (соответствует СС1 и RLO в слове состояния). Другие операции после этого блока, подключенные через ENO (каскадное включение), не обрабатываются, если последний циклически сдвинутый бит имеет состояние сигнала ”0”.
При размещении блока Циклического сдвига влево 32 бит, необходимо соблюдать определенные ограничения по битам слова состояния.
Элемент FBD | Параметры | Тип данных | Область памяти | Описание |
![]() |
IN | DWORD | I, Q, M, D, L | Сдвигаемое значение |
N | WORD | I, Q, M, D, L | Количество битовых разрядов, на которое производится сдвиг | |
OUT | DWORD | I, Q, M, D, L | Результат операции | |
EN | BOOL | I, Q, M, D, L | Деблокировка входа | |
ENO | BOOL | I, Q, M, D, L | Деблокировка выхода |
Пример и биты слова состояния операции циклического cдвига влево для SIMATIC
Циклический сдвиг вправо
Эта команда побитно циклически сдвигает вправо все содержимое входа IN. Вход N задает, на сколько битов происходит циклический сдвиг. Если N больше, чем 32, то двойное слово циклически сдвигается на число битов, равное (((N-1) по модулю 32) +1). Значение N может находиться между 0 и 15. Освобождающиеся слева битовые позиции заполняются состояниями сигналов циклически сдвигаемых битов. Результат операции циклического сдвига Вы можете опрашивать на выходе OUT
Во всём остальном команда похожа на команду циклический сдвиг слево.
Элемент FBD | Параметры | Тип данных | Область памяти | Описание |
![]() |
IN | DWORD | I, Q, M, D, L | Сдвигаемое значение |
N | WORD | I, Q, M, D, L | Количество битовых разрядов, на которое производится сдвиг | |
OUT | DWORD | I, Q, M, D, L | Результат операции | |
EN | BOOL | I, Q, M, D, L | Деблокировка входа | |
ENO | BOOL | I, Q, M, D, L | Деблокировка выхода |
Пример и биты слова состояния операции циклического cдвига вправо для SIMATIC
<—Предыдущая глава |