ФБ работы с массивами

ФБ №55 «Массив uint8/16/32 -> 1 uint/float»

ФБ «Массив uint8/16 -> 1 bit/uint/float» нужен в тех случаях, когда имеется массив байт (полученный, к примеру, от интерфейсных ФБ), который фактически представляет собой единичное значение типа uint8/16/32 или float32. Поскольку в исходном виде (массивом) это значение нельзя использовать в ФБ, принимающих единичные значения указанных типов, необходимо предварительно преобразовать массив в значение соответствующего типа.

ФБ имеет битовый вход «BigEndian», с помощью которого можно изменять порядок байт, используемый для представления многобайтных значений (Big Endian – от старшего к младшему или Little Endian – от младшего к старшему).

На вход ФБ подаётся массив байт или 2-4 байтных слов, из которых необходимо получить одиночное значение определённого типа. ФБ по типам выходных и выходного значений осуществляет преобразование.

Вх/Вых Имя Тип Назначение
Вход BigEndian bit 1 — BigEndian, 0 — LittleEndian
Вход Вход массив массив uint8 / 2–4-байтных слов
Выход Выход uint8/16/32/float32

ФБ №53 «Часть массива»

ФБ «Часть массива» нужен для выделения во входном массиве его фрагмента в отдельный массив меньшего размера, т. е. ФБ производит простое копирование элементов входного массива в выходной.

Вх/Вых Имя Тип Назначение
Вход Начальный элемент uint Индекс с 0
Вход Кол-во элементов uint
Вход Входной массив массив
Выход Выходной массив массив того же типа

ФБ №54 «Компоновщик данных в блоки»

ФБ «Компоновщик данных в блоки» служит для объединения нескольких разнотипных данных (возможно, нескольких массивов) в блоки данных (т. е. в массивы с элементами типа uint8). При этом ФБ позволяет задать маску включаемых входных байт в выходной блок. Это делается с помощью 10 входов «Маска байт», имеющих тип uint32 и задающих флаги включения в сумме для 320 входов. Если масками флагов включения задаётся невключение определённых входов, то эти элементы в выходные блоки не попадают, а все следующие данные в выходных блоках будут смещены вверх.

Если на вход ФБ подаются типы данных, состоящие из нескольких байт, то порядок байт в этих многобайтных типах данных можно выбрать. Для порядка от старшего байта к младшему (Big Endian) необходимо на вход «BigEndian» подать «1», для порядка от младшего к старшему (Little Endian) – «0».

Вход «Размер входных блоков» указывает ФБ, какого размера должны быть сформированы выходные блоки, т. е. если очередной вход не помещается в блок, то ФБ оставляет оставшиеся в блоке байты нулевыми и переходит к формированию следующего блока данных.

Вх/Вых Имя Тип Назначение
Вход Размер выходных блоков uint
Вход BigEndian bit
Вход Маска байт 1-32 … 289-320 (10 шт.) uint32 Флаги включения входов (суммарно до 320)
Вход Вход массив 1…10 массивы
Выход Блок 1, Блок 2 массив uint8

ФБ №60 «Преобразователь в массив»

ФБ нужен для объединения нескольких однотипных входных значений в выходной массив.

Вх/Вых Имя Тип Назначение
Вход Вход 1…N однотипные Максимум 256
Выход Выходной массив[N] массив

ФБ №65 «Преобразователь массива uint16->массив uint8»

ФБ делит каждый элемент входного массива на 2 байта: младший и старший и собирает из этих байт выходной массив. Порядок следования байт в каждой паре можно изменить с помощью входа «BigEndian» («0» - сначала младший, затем старший байт, «1» - наоборот).

Например, при считывании по протоколу MODBUS (ФБ «MODBUS Master чтение») блока данных функциями 03h или 04h, зачастую MODBUS-устройство упаковывает блок данных в регистры подряд, образуя порядок байт в регистрах LittleEndian, хотя протокол MODBUS использует BigEndian. В этом случае полученный массив 16-битных регистров необходимо разбить на байты, поменяв местами байты в каждой паре. Лог. «1» на входе «BigEndian» заставляет ФБ при сборке выходного массива менять местами байты элементов входного массива. Полученный выходной блок (массив байт) будет иметь правильный порядок байт.

Вх/Вых Имя Тип Назначение
Вход BigEndian bit 0 — младший, затем старший; 1 — наоборот
Вход Массив UINT16[N/2] массив
Выход Массив UINT8[N] массив