From 07db2029d66a028a2d2256d2c158693c3a42b5f8 Mon Sep 17 00:00:00 2001 From: zhangqian <zhangqian@123.com> Date: 星期四, 26 十月 2023 16:43:21 +0800 Subject: [PATCH] update --- service/plc.go | 18 ++++++++++++++---- 1 files changed, 14 insertions(+), 4 deletions(-) diff --git a/service/plc.go b/service/plc.go index 1d9d5e9..183cb00 100644 --- a/service/plc.go +++ b/service/plc.go @@ -97,13 +97,15 @@ 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)) } } - logx.Infof("plc read ok, address: %v, result: %v", address, val) + logx.Infof("plc read ok, address: %v, result: %v, dataLength: %v, valueLength: %v", address, val, dataLength, len(value)) return val, nil } else if plcConfig.Method == constvar.PlcMethodSerial { ipAddr = conf.Conf.Services.Serial @@ -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