From 72721bf221e6f90fb830bf28133c7588e30e1d30 Mon Sep 17 00:00:00 2001
From: zhangqian <zhangqian@123.com>
Date: 星期四, 26 十月 2023 17:41:19 +0800
Subject: [PATCH] fix

---
 service/plc.go |   16 +++++++++++++---
 1 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/service/plc.go b/service/plc.go
index a0240ab..183cb00 100644
--- a/service/plc.go
+++ b/service/plc.go
@@ -97,7 +97,9 @@
 			if len(value) == 2 {
 				val = binary.BigEndian.Uint16(value)
 			} else if len(value) == 4 {
-				val = binary.BigEndian.Uint32(value)
+				low16Val := uint32(binary.BigEndian.Uint16(value[:2]))
+				high16 := uint32(binary.BigEndian.Uint16(value[2:])) << 16
+				val = low16Val + high16
 			} else {
 				logx.Errorf("plc read get an unknown int value: %v, address:%v", value, address)
 				return nil, errors.New(fmt.Sprintf("unknown int value锛�%v", value))
@@ -118,13 +120,21 @@
 
 func ReadHoldingRegister(ipAddr string, address, length int) ([]byte, error) {
 	if conf.Conf.PLC.Package == constvar.PlcPackageApache {
-		return apacheplc4x.ReadHoldingRegister(ipAddr, address, length)
+		newLength := length / 2
+		if newLength == 0 {
+			newLength = 1
+		}
+		return apacheplc4x.ReadHoldingRegister(ipAddr, address, newLength)
 	} else if conf.Conf.PLC.Package == constvar.PlcPackageApacheLongConnection {
 		conn, err := plc.GetModbusConnection(ipAddr)
 		if err != nil {
 			return nil, err
 		}
-		return plc.ReadHoldingRegister(conn, address, length)
+		newLength := length / 2
+		if newLength == 0 {
+			newLength = 1
+		}
+		return plc.ReadHoldingRegister(conn, address, newLength)
 	} else {
 		return modbusx.Read(ipAddr, uint16(address), uint16(length))
 	}

--
Gitblit v1.8.0