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