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

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

Описание алгоритма.
-
На вход INP передается 32-битное целое число, группу бит которого требуется заменить. Границы группы бит определяются параметрами LSM (индекс младшего бита из группы) и MSB (индекс старшего бита из группы).
-
Вычисляется количество заменяемых бит Q = MSB - LSB + 1.
-
Из 32-битного целого числа VAL копируется группа младших бит в количестве Q (индексы от 0 до Q - 1).
-
В числе INP группа бит с индексами от LSB до MSB заменяется группой скопированных младших бит из числа VAL.
-
Результат преобразования передается на выход OUT в виде 32-битного целого числа.Например, для числа INP=2024 требуется заменить с 5 (LSB) по 8 (MSB) биты. В качестве источника заменяемых бит передается целое число VAL = 589. В процессе преобразования значения четырех бит с индексами 5, 6, 7 и 8 в числе INP будут заменены на значения четырех бит с индексами 0, 1, 2 и 3 из числа VAL. Итоговая битовая маска соответствует целочисленному значению 1960, которое передается на выход OUT.Процесс преобразования по рассмотренному примеру представлен на следующем изображении.
При отрицательных значениях параметров LSB и MSB, выход OUT = INP.
Пример синтаксиса на языке ST.
//вызов функционального блока
Block.SETFIELD(2024, 5, 8, 589);
//чтение выходного параметра
OUT := Block.OUT; //OUT = 1960
|
