zhangqian
2023-09-05 799a22cda35de94ad5658aa6283f1d80db132ba4
service/plc.go
@@ -8,7 +8,6 @@
   "encoding/binary"
   "errors"
   "fmt"
   "sync"
)
func PlcRead(plcConfig *model.DevicePlc, fieldType constvar.PlcStartAddressType) (val interface{}, err error) {
@@ -59,62 +58,30 @@
      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
}
type CacheStore struct {
   cache map[string]interface{}
   mu    sync.Mutex
}
var defaultCacheStore *CacheStore
func init() {
   defaultCacheStore = newCacheManager()
}
func newCacheManager() *CacheStore {
   return &CacheStore{
      cache: make(map[string]interface{}),
   }
}
func (cm *CacheStore) Get(key string) (interface{}, bool) {
   cm.mu.Lock()
   defer cm.mu.Unlock()
   conn, ok := cm.cache[key]
   return conn, ok
}
func (cm *CacheStore) Add(key string, value interface{}) {
   cm.mu.Lock()
   defer cm.mu.Unlock()
   cm.cache[key] = value
}
func PlcCacheGet(key string) (interface{}, bool) {
   return defaultCacheStore.Get(key)
}
func PlcCacheSet(key string, value interface{}) {
   defaultCacheStore.Add(key, value)
}