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

SETAR_D - запись в массив 8 байт из числа DOUBLE


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