GETFIELD - чтение группы бит из целого числа

Назначение.
Функциональный блок используется для чтения группы бит из целочисленного значения с последующим преобразованием в целое число. Значение входной переменной не изменяется.
Состав структурной переменной.
Переменная со структурным типом GETFIELD будет добавлена в локальный словарь автоматически при добавлении блока в редактор.

Описание алгоритма.
-
На вход INP передается 32-битное целое число, из которого требуется прочитать группу бит. Границы группы бит определяются параметрами LSM (индекс младшего бита из группы) и MSB (индекс старшего бита из группы).
-
Если прочитанная группа бит представляет собой беззнаковую положительную величину (SIGN = FALSE), она преобразуется в целое число и передается на выход Q. Например, прочитанная группа с 3 по 7 бит целого числа INP = 2024 содержит битовую маску, равную целому положительному числу 29. Процесс преобразования представлен на следующем изображении.
-
Если прочитанная группа бит представляет собой знаковую отрицательную величину (SIGN = TRUE), она проходит ряд преобразований: инвертируется (0 заменяется на 1, а 1 на 0) → складывается с двоичной единицей → преобразуется в целое число со знаком и передается на выход Q. Например, прочитанная группа с 3 по 7 бит целого числа INP = 2024 содержит битовую маску целого отрицательного числа -7. Процесс преобразования представлен на следующем изображении.
При отрицательных значениях параметров LSB и MSB, выход OUT = 0.
Пример синтаксиса на языке ST.
//вызов функционального блока GETFIELD
Block.GETFIELD(2024, 3, 7, SIGN);
//чтение выходных параметров:
//Q = 29 при SIGN=false,
//Q = -3 при SIGN=true
Q := Block.Q;
|
