zhangqian
2023-09-01 f4c6c982a275fcdead46a7bdb5704fc39b4f1bb0
service/plc.go
@@ -43,7 +43,12 @@
   case constvar.PlcStartAddressValueTypeString:
      return string(rawData), nil
   case constvar.PlcStartAddressValueTypeInt:
      return int(binary.BigEndian.Uint16(rawData)), nil
      if len(rawData) == 2 {
         return int(binary.BigEndian.Uint16(rawData)), nil
      } else {
         logx.Errorf("plc read get an unknown int value: %v, address:%v", rawData, startAddress)
         return nil, errors.New(fmt.Sprintf("unknown int value:%v", rawData))
      }
   }
   return nil, errors.New("undefined value type")
}
@@ -54,23 +59,29 @@
      ipAddr       string
   )
   if plcConfig.CurrentTryTimes > plcConfig.MaxTryTimes {
      return plcConfig.CurrentErr
   }
   plcConfig.CurrentTryTimes++
   for _, pc := range plcConfig.Details {
      if pc.FieldName == fieldType {
         startAddress = pc.StartAddress
      }
   }
   ipAddr = fmt.Sprintf("%s:%v", plcConfig.Address, plcConfig.Port)
   conn, err := plc.GetModbusConnection(ipAddr)
   if err != nil {
      logx.Errorf("PlcWrite 连接plc失败: %v", err.Error())
      return
      logx.Errorf("plc write failed, 连接plc失败: %v", err.Error())
      plcConfig.CurrentErr = err
      return PlcWrite(plcConfig, fieldType, value)
   }
   result, err := plc.WriteHoldingRegister(conn, startAddress, value)
   if err != nil {
      logx.Infof("plc write failed, address: %v, value: %v, err: %v", startAddress, value, err.Error())
      return
      logx.Errorf("plc write failed, address: %v, value: %v, err: %v", startAddress, value, err.Error())
      plcConfig.CurrentErr = err
      return PlcWrite(plcConfig, fieldType, value)
   }
   logx.Infof("plc write ok, address: %v, value: %v, result: %v", startAddress, value, result)
   return