ФБ №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] | массив |