From d91a802e7aa2ad4075ed803b8ddc7536a91a0ef0 Mon Sep 17 00:00:00 2001
From: zhangqian <zhangqian@123.com>
Date: 星期五, 27 十月 2023 20:33:06 +0800
Subject: [PATCH] update

---
 pkg/plc/modbusx/modbusrtu.go |   63 +++++--------------------------
 1 files changed, 10 insertions(+), 53 deletions(-)

diff --git a/pkg/plc/modbusx/modbusrtu.go b/pkg/plc/modbusx/modbusrtu.go
index 0d40e43..253bc88 100644
--- a/pkg/plc/modbusx/modbusrtu.go
+++ b/pkg/plc/modbusx/modbusrtu.go
@@ -1,80 +1,37 @@
 package modbusx
 
 import (
-	"apsClient/constvar"
 	"apsClient/model/common"
-	"apsClient/pkg/logx"
-	"github.com/goburrow/modbus"
-	"time"
 )
 
 func ReadByRTU(c *common.RTUConfig, address uint16, quantity uint16) (data []byte, err error) {
-	address--
-	cli, err := getModbusRTUConnection(c)
-	if err != nil {
-		return nil, err
-	}
+	cli := getModbusRTUConnection(c)
 	data, err = cli.ReadHoldingRegisters(address, quantity)
+	dealRTUErr(err, c.SerialName)
 	if err != nil {
-		cli, err = getModbusRTUConnection(c)
-		if err != nil {
-			return nil, err
-		}
+		cli = getModbusRTUConnection(c)
 		data, err = cli.ReadHoldingRegisters(address, quantity)
-	}
-	if err != nil {
-		logx.Errorf("ReadByRTU ReadHoldingRegisters err:%v", err)
+		dealRTUErr(err, c.SerialName)
 	}
 	return
 }
 
 func WriteByRTU(c *common.RTUConfig, address uint16, value int) (err error) {
-	address--
 	var bytesVal []byte
 	bytesVal = intToBytes(value)
-
-	cli, err := getModbusRTUConnection(c)
-	if err != nil {
-		return err
-	}
+	cli := getModbusRTUConnection(c)
 	_, err = cli.WriteMultipleRegisters(address, uint16(len(bytesVal)), bytesVal)
+	dealRTUErr(err, c.SerialName)
 	if err != nil {
-		cli, err = getModbusRTUConnection(c)
-		if err != nil {
-			return err
-		}
+		cli = getModbusRTUConnection(c)
 		_, err = cli.WriteMultipleRegisters(address, uint16(len(bytesVal)), bytesVal)
-	}
-	if err != nil {
-		logx.Errorf("WriteByRTU WriteMultipleRegisters err:%v", err)
+		dealRTUErr(err, c.SerialName)
 	}
 	return err
 }
 
-func getModbusRTUConnection(c *common.RTUConfig) (cli modbus.Client, err error) {
-	// Modbus RTU/ASCII
-	h := modbus.NewRTUClientHandler(c.SerialName)
-	h.BaudRate = c.BaudRate
-	h.DataBits = c.DataBit
-	switch c.Parity {
-	case constvar.ParityEven:
-		h.Parity = "E"
-	case constvar.ParityOdd:
-		h.Parity = "O"
-	case constvar.ParityNull:
-		h.Parity = "N"
-	}
-
-	h.StopBits = c.StopBit
-	h.SlaveId = 1
-	h.Timeout = 5 * time.Second
-
-	err = h.Connect()
+func dealRTUErr(err error, serialName string) {
 	if err != nil {
-		logx.Errorf("getModbusRTUConnection  Connect err:%v, config: %+v", err, c)
-		return nil, err
+		unsetModbusRTUConnection(serialName) //澶辫触鍒欏垹闄ょ紦瀛樼殑杩炴帴
 	}
-	defer h.Close()
-	cli = modbus.NewClient(h)
-	return
 }

--
Gitblit v1.8.0