zhangqian
2023-10-26 07db2029d66a028a2d2256d2c158693c3a42b5f8
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))
   }