fix
zhangqian
2023-10-26 72721bf221e6f90fb830bf28133c7588e30e1d30
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))
   }