zhangqian
2023-09-05 799a22cda35de94ad5658aa6283f1d80db132ba4
service/plc.go
@@ -27,23 +27,27 @@
   }
   ipAddr = fmt.Sprintf("%s:%v", plcConfig.Address, plcConfig.Port)
   conn, err := plc.NewModbusConnection(ipAddr)
   conn, err := plc.GetModbusConnection(ipAddr)
   if err != nil {
      logx.Errorf("GetProductProgress 连接plc失败: %v", err.Error())
      logx.Errorf("PlcRead 连接plc失败: %v", err.Error())
      return
   }
   defer conn.Close()
   rawData, err := plc.ReadHoldingRegister(conn, startAddress, dataLength)
   if err != nil {
      logx.Errorf("GetProductProgress 获取plc数据失败: %v", err.Error())
      logx.Errorf("PlcRead 获取plc数据失败: %v", err.Error())
      return
   }
   switch valueType {
   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,24 +58,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.NewModbusConnection(ipAddr)
   conn, err := plc.GetModbusConnection(ipAddr)
   if err != nil {
      logx.Errorf("GetProductProgress 连接plc失败: %v", err.Error())
      return
      logx.Errorf("plc write failed, 连接plc失败: %v", err.Error())
      plcConfig.CurrentErr = err
      return PlcWrite(plcConfig, fieldType, value)
   }
   defer conn.Close()
   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