Среда разработки Unimod PRO 2 (версия 2.3.40)
 Руководство по программированию
×

SETAR - запись в массив до 4 байт из целого числа


Назначение.
Функциональный блок SETAR применяется для записи в массив до 4 байтов из целого числа. Содержимое остальных элементов массива не изменяется.
 
Состав структурной переменной.
Переменная со структурным типом SETAR будет добавлена в локальный словарь автоматически при добавлении блока в редактор.
Описание алгоритма.
  • На вход VAL передается целое число, состоящее из 4 байт данных, а на вход INP - ссылка на массив байтов.
  • Параметр CNT определяет количество байтов (до 4), значения которых будут скопированы из числа VAL в массив. Отсчет начинается с младшего байта.
  • Если параметр SEQ=0 (по умолчанию), порядок следования выбранных на предыдущем этапе байт не изменяется: нулевой (младший) байт числа VAL будет скопирован в элемент массива INP[OFF], первый байт в элемент INP[OFF+1] и т.д., как показано на следующем изображении.
    4. При необходимости изменения порядка выбранных байт, значение параметра SEQ выбирается в зависимости от значения параметра CNT согласно следующей таблице:
    CNT
    SEQ
    Порядок байт
    Замена байт
    Замена слов
    1
    0
    Для CNT=1 значение SEQ всегда должно равняться 0
    2
    1
    0-1        (по умолчанию)
    -
    -
    2
    1-0
    Да
    -
    3
    3
    0-1-2     (по умолчанию)
    -
    -
    4
    2-1-0
    Да
    -
    4
    5
    0-1-2-3 (по умолчанию)
    -
    -
    6
    1-0-3-2
    Да
    -
    7
    2-3-0-1
    -
    Да
    8
    3-2-1-0
    Да
    Да
    Процесс копирования байт с изменением их порядка (CNT=3 и SEQ=4) представлен на следующем изображении.
    При этом копируемые байты данных с учетом смещения OFF должны умещаться в массив (OFF>=0 и OFF+CNT<=длине массива), иначе возникнет ошибка.
     
Пример синтаксиса на языке ST.
//вызов функционального блока
Block.SETAR(VAL, INP, OFF, CNT, SEQ);
//чтение кода ошибки
FAULT := Block.FAULT;
Список возможных ошибок на выходе FAULT.
Код ошибки
Краткое описание
1
Некорректные входные параметры (OFF / CNT / SEQ)
2
Некорректный тип массива (должен быть байт/цел/вещ.)
3
Несоответствие между CNT и SEQ
4
Ошибка проверки массива (например, OFF+CNT-1 выходит за границы)
5
Ошибка доступа к массиву (обратитесь к разработчику)