fix
zhangqian
2023-12-01 8324f872ef3a4d0c978a9b1d062800c6a1701c12
pkg/plc/modbusx/connection_manager.go
@@ -2,6 +2,7 @@
import (
   "apsClient/conf"
   "apsClient/model/common"
   "github.com/goburrow/modbus"
   "sync"
   "time"
@@ -11,6 +12,8 @@
   connections map[string]modbus.Client
   mu          sync.Mutex
}
var handler *modbus.TCPClientHandler
func newPlcConnectionManager() *ConnectionManager {
   return &ConnectionManager{
@@ -47,7 +50,7 @@
   if conn, ok := connectionManager.GetConnection(ipAddr); ok {
      return conn
   }
   conn := newGetModbusConnection(ipAddr)
   conn := newModbusConnection(ipAddr)
   connectionManager.AddConnection(ipAddr, conn)
   return conn
}
@@ -58,11 +61,48 @@
      return
   }
   connectionManager.RemoveConnection(ipAddr)
   if handler != nil {
      handler.Close()
   }
}
func newGetModbusConnection(ipAddr string) modbus.Client {
   handler := modbus.NewTCPClientHandler(ipAddr)
func newModbusConnection(ipAddr string) modbus.Client {
   handler = modbus.NewTCPClientHandler(ipAddr)
   handler.Timeout = 10 * time.Second
   handler.SlaveId = byte(conf.Conf.PLC.SlaveId)
   return modbus.NewClient(handler)
}
var rtuHandler *modbus.RTUClientHandler
func getModbusRTUConnection(c *common.RTUConfig) modbus.Client {
   if conn, ok := connectionManager.GetConnection(c.SerialName); ok {
      return conn
   }
   conn := newModbusRTUConnection(c)
   connectionManager.AddConnection(c.SerialName, conn)
   return conn
}
func unsetModbusRTUConnection(serialName string) {
   _, ok := connectionManager.GetConnection(serialName)
   if !ok {
      return
   }
   connectionManager.RemoveConnection(serialName)
   if handler != nil {
      handler.Close()
   }
}
func newModbusRTUConnection(c *common.RTUConfig) modbus.Client {
   // Modbus RTU/ASCII
   rtuHandler = modbus.NewRTUClientHandler(c.SerialName)
   rtuHandler.BaudRate = c.BaudRate
   rtuHandler.DataBits = c.DataBit
   rtuHandler.Parity = c.Parity.ToString()
   rtuHandler.StopBits = c.StopBit
   rtuHandler.SlaveId = 1
   rtuHandler.Timeout = 5 * time.Second
   return modbus.NewClient(rtuHandler)
}