From 965799f48aa96881f8bcef1f06dc75ab83a7e8fc Mon Sep 17 00:00:00 2001 From: andig Date: Wed, 28 Feb 2024 22:07:22 +0100 Subject: [PATCH] Reapply "Modbus: fix int to float conversion for int setter" This reverts commit f9538eddedbdb24a5af8fe002b35a1a1ea858cd7. --- util/modbus/register.go | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/util/modbus/register.go b/util/modbus/register.go index 3f7c8096a..4f7b95c30 100644 --- a/util/modbus/register.go +++ b/util/modbus/register.go @@ -1,6 +1,7 @@ package modbus import ( + "encoding/binary" "errors" "fmt" "math" @@ -137,11 +138,18 @@ func (r Register) Operation() (RegisterOperation, error) { } } else { switch strings.ToLower(r.encoding()) { - case "int32s", "uint32s", "float32s", "ieee754s": + case "int32s", "uint32s": op.Encode = func(v uint64) uint64 { return v&0xFFFF<<16 | v&0xFFFF0000>>16 } + case "float32s", "ieee754s": + op.Encode = func(v uint64) uint64 { + b := make([]byte, 4) + encoding.PutFloat32LswFirst(b, float32(v)) + return uint64(binary.BigEndian.Uint32(b)) + } + default: op.Encode = func(v uint64) uint64 { return v