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

GETAR - чтение до 4 байт из массива в INTEGER


Назначение.
Функциональный блок применяется для чтения до 4 байтов из массива с последующим их преобразованием в целое число. Содержимое массива не изменяется.
 
Состав структурной переменной.
Переменная со структурным типом GETAR будет добавлена в локальный словарь автоматически при добавлении блока в редактор.
Описание алгоритма.
  • На вход INP передается ссылка на массив (тип данных BYTE, INTEGER или REAL), из которого будут прочитаны байты в количестве CNT (до 4), начиная с элемента INP[OFF].
  • Если параметр SEQ=0 (по умолчанию), порядок следования выбранных в массиве байт не изменяется: байт из элемента INP[OFF] будет скопирован в нулевой (младший) байт параметра OUT, из элемента INP[OFF+1] в первый байт OUT и т.д., как показано на следующем изображении.
  • При необходимости изменения порядка байт в выбранной из массива группе, указывается требуемое значение параметра SEQ:
    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.
//вызов функционального блока для массива байт:
//INP=[5, 10, 15, 20, 25, 30, 35, 40, 45, 50]
Block.GETAR(INP, 2, 3, 0);
//чтение возвращаемого значения (OUT = 1 643 535) и кода ошибки
OUT := Block.OUT;
FAULT := Block.FAULT;
Список возможных ошибок на выходе FAULT.
Код ошибки
Краткое описание
1
Некорректные входные параметры (OFF / CNT / SEQ)
2
Некорректный тип массива (должен быть байт/цел/вещ.)
3
Несоответствие между CNT и SEQ
4
Ошибка проверки массива (например, OFF+CNT-1 выходит за границы)
5
Ошибка доступа к массиву (обратитесь к разработчику)