zhangqian
2023-11-27 89e641d91e5e7bb3e77db7e066e32db68139868e
plc连接状态存储按设备存储
1个文件已修改
32 ■■■■■ 已修改文件
service/plc.go 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/plc.go
@@ -15,7 +15,6 @@
    "fmt"
    "github.com/spf13/cast"
    "sync"
    "sync/atomic"
)
// 串口不支持并行读写,所以需要加个锁,防止timeout和资源不可用报错
@@ -211,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
}