Это зависит от того, как ваши данные представлены. В Modbus вам нужно два регистра для хранения поплавка. Затем вам необходимо проверить в руководстве по вашему устройству порядковый номер этих регистров и порядок битов внутри.
Если вы читаете два регистра одновременно, вы можете использовать вспомогательную функцию, предоставляемую с phpModbus :
PhpType::bytes2float($recData, $endianness)
Или:
PhpType::bytes2float(array_reverse($recData), $endianness)
Где $endianness
может быть 0 или 1.
РЕДАКТИРОВАТЬ: Зная ваше устройство и то, что вы пытаетесь прочитать тип long
, форматом является 32-разрядное целое число без знака Верхние 16-разрядные (MSW) в младшем пронумерованный регистр (4001/4000 = тсв / лсв), поэтому вы вообще не можете использовать функцию bytes2float()
.
Вы были на правильном пути с PhpType::bytes2unsignedint($bytes)
, но, похоже, вам нужно изменить порядковый номер по умолчанию:
PhpType::bytes2unsignedint($bytes, 1)
Извиняюсь за путаницу, я предполагаю, что вы читаете поплавок.