From 8324f872ef3a4d0c978a9b1d062800c6a1701c12 Mon Sep 17 00:00:00 2001
From: zhangqian <zhangqian@123.com>
Date: 星期五, 01 十二月 2023 09:58:17 +0800
Subject: [PATCH] fix

---
 service/plc.go |   41 +++++++++++++++++++++++++----------------
 1 files changed, 25 insertions(+), 16 deletions(-)

diff --git a/service/plc.go b/service/plc.go
index 04f6ff7..c577998 100644
--- a/service/plc.go
+++ b/service/plc.go
@@ -15,7 +15,6 @@
 	"fmt"
 	"github.com/spf13/cast"
 	"sync"
-	"sync/atomic"
 )
 
 // 涓插彛涓嶆敮鎸佸苟琛岃鍐欙紝鎵�浠ラ渶瑕佸姞涓攣锛岄槻姝imeout鍜岃祫婧愪笉鍙敤鎶ラ敊
@@ -45,7 +44,9 @@
 	var (
 		ipAddr string
 	)
-	defer dealErr(err)
+	defer func() {
+		dealErr(err)
+	}()
 	if plcConfig.Method == constvar.PlcMethodModbusTCP {
 		ipAddr = fmt.Sprintf("%s:%v", plcConfig.Address, plcConfig.Port)
 		err = WriteByModbusTCP(ipAddr, address, value)
@@ -81,7 +82,9 @@
 	var (
 		ipAddr string
 	)
-	defer dealErr(err)
+	defer func() {
+		dealErr(err)
+	}()
 	if plcConfig.Method == constvar.PlcMethodModbusTCP || plcConfig.Method == constvar.PlcMethodModbusRTU {
 		var value []byte
 		if plcConfig.Method == constvar.PlcMethodModbusTCP {
@@ -200,7 +203,6 @@
 }
 
 func dealErr(err error) {
-	logx.Infof("deal err: %v", err)
 	if err != nil {
 		FailureRemainingOpportunitiesDecr() //鍑忓皯澶辫触鍓╀綑鏈轰細
 	} else {
@@ -208,32 +210,39 @@
 	}
 }
 
-var connectionStatus atomic.Bool
-
-var failureRemainingOpportunities atomic.Int64
+var connectionStatus sync.Map
 
 const (
 	defaultFailureRemainingOpportunities = 20
 )
 
 func IsConnect() bool {
-	return connectionStatus.Load()
+	val, ok := connectionStatus.Load(conf.Conf.CurrentDeviceID)
+	if !ok {
+		return false
+	}
+	failureRemainingOpportunities := val.(int)
+	return failureRemainingOpportunities > 0
 }
 
 func FailureRemainingOpportunitiesDecr() {
-	newValue := failureRemainingOpportunities.Add(-1)
-	if newValue <= 0 {
-		connectionStatus.Store(false)
+	val, ok := connectionStatus.Load(conf.Conf.CurrentDeviceID)
+	if !ok {
+		return
 	}
+	failureRemainingOpportunities := val.(int)
+	if failureRemainingOpportunities > 0 {
+		failureRemainingOpportunities--
+	}
+	connectionStatus.Store(conf.Conf.CurrentDeviceID, failureRemainingOpportunities)
 	return
 }
 
 func FailureRemainingOpportunitiesReset() {
-	if failureRemainingOpportunities.Load() < defaultFailureRemainingOpportunities {
-		failureRemainingOpportunities.Store(defaultFailureRemainingOpportunities)
-	}
-	if connectionStatus.Load() == false {
-		connectionStatus.Store(true)
+	val, ok := connectionStatus.Load(conf.Conf.CurrentDeviceID)
+	if !ok || val.(int) < defaultFailureRemainingOpportunities {
+		connectionStatus.Store(conf.Conf.CurrentDeviceID, defaultFailureRemainingOpportunities)
+		return
 	}
 	return
 }

--
Gitblit v1.8.0