From ad1c4ff9255e1a19567a7df11231bc7173c21a81 Mon Sep 17 00:00:00 2001
From: zhangqian <zhangqian@123.com>
Date: 星期二, 21 十一月 2023 18:28:36 +0800
Subject: [PATCH] fix
---
pkg/plc/modbusx/modbus.go | 71 ++++++-----------------------------
1 files changed, 12 insertions(+), 59 deletions(-)
diff --git a/pkg/plc/modbusx/modbus.go b/pkg/plc/modbusx/modbus.go
index e1af28c..1a779c3 100644
--- a/pkg/plc/modbusx/modbus.go
+++ b/pkg/plc/modbusx/modbus.go
@@ -2,7 +2,6 @@
import (
"encoding/binary"
- "sync/atomic"
)
func Read(ipAddr string, address uint16, quantity uint16) (data []byte, err error) {
@@ -19,74 +18,28 @@
}
func Write(ipAddr string, address uint16, value int) (err error) {
+ address--
var bytesVal []byte
- if value <= 1<<16 {
- uint16ToBytes(uint16(value))
- } else {
- bytesVal = intToBytes(value)
- }
+ bytesVal = intToBytes(value)
cli := getModbusConnection(ipAddr)
_, err = cli.WriteMultipleRegisters(address, uint16(len(bytesVal)), bytesVal)
dealErr(err, ipAddr)
return err
}
-func uint16ToBytes(value uint16) []byte {
- // 鍒涘缓涓�涓暱搴︿负2鐨勫瓧鑺傚垏鐗�
- bytes := make([]byte, 2)
-
- // 灏� uint16 鐨勫�煎啓鍏ュ瓧鑺傚垏鐗囷紝鍙互閫夋嫨浣跨敤澶х鎴栧皬绔瓧鑺傚簭
- bytes[0] = byte(value >> 8) // 鑾峰彇楂�8浣�
- bytes[1] = byte(value) // 鑾峰彇浣�8浣�
-
- return bytes
-}
-
-func intToBytes(value int) []byte {
- // 鍒涘缓涓�涓暱搴︿负4鐨勫瓧鑺傚垏鐗囷紝鐢ㄤ簬瀛樺偍 int 鍊�
- bytes := make([]byte, 4)
-
- // 浣跨敤 binary 鍖呭皢 int 鍊艰浆鎹负瀛楄妭鍒囩墖
- binary.BigEndian.PutUint32(bytes, uint32(value))
-
- return bytes
+func intToBytes(value int) (data []byte) {
+ if value <= 1<<16 {
+ data = make([]byte, 2)
+ binary.BigEndian.PutUint16(data, uint16(value))
+ } else {
+ data = make([]byte, 4)
+ binary.BigEndian.PutUint32(data, uint32(value))
+ }
+ return
}
func dealErr(err error, ipAddr string) {
if err != nil {
- unsetModbusConnection(ipAddr) //澶辫触鍒欏垹闄ょ紦瀛樼殑杩炴帴
- FailureRemainingOpportunitiesDecr() //鍑忓皯澶辫触鍓╀綑鏈轰細
- } else {
- FailureRemainingOpportunitiesReset() //閲嶇疆澶辫触鍓╀綑鏈轰細
+ unsetModbusConnection(ipAddr) //澶辫触鍒欏垹闄ょ紦瀛樼殑杩炴帴
}
-}
-
-var connectionStatus atomic.Bool
-
-var failureRemainingOpportunities atomic.Int64
-
-const (
- defaultFailureRemainingOpportunities = 20
-)
-
-func IsConnect() bool {
- return connectionStatus.Load()
-}
-
-func FailureRemainingOpportunitiesDecr() {
- newValue := failureRemainingOpportunities.Add(-1)
- if newValue <= 0 {
- connectionStatus.Store(false)
- }
- return
-}
-
-func FailureRemainingOpportunitiesReset() {
- if failureRemainingOpportunities.Load() < defaultFailureRemainingOpportunities {
- failureRemainingOpportunities.Store(defaultFailureRemainingOpportunities)
- }
- if connectionStatus.Load() == false {
- connectionStatus.Store(true)
- }
- return
}
--
Gitblit v1.8.0