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

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

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

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

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


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

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

Вход «Начальный элемент» задаёт индекс (с 0) элемента входного массива, начиная с которого ФБ будет копировать элементы.

Вход «Количество элементов» указывает ФБ, сколько элементов нужно скопировать.

Входной и выходной массивы могут быть любого типа, но типы их должны быть одинаковыми.


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

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

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

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


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

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

Максимальное кол-во элементов массива = 256.


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

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

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