From a699ff979c84d024ca33fb1139224258f278319f Mon Sep 17 00:00:00 2001
From: zhangqian <zhangqian@123.com>
Date: 星期五, 20 十月 2023 11:32:23 +0800
Subject: [PATCH] debug
---
pkg/plc/modbusx/modbus.go | 36 ++++++++++++++++++++++++++++--------
1 files changed, 28 insertions(+), 8 deletions(-)
diff --git a/pkg/plc/modbusx/modbus.go b/pkg/plc/modbusx/modbus.go
index 796aa17..2d323ec 100644
--- a/pkg/plc/modbusx/modbus.go
+++ b/pkg/plc/modbusx/modbus.go
@@ -1,26 +1,42 @@
package modbusx
import (
- "encoding/json"
+ "encoding/binary"
"sync/atomic"
)
func Read(ipAddr string, address uint16, quantity uint16) (data []byte, err error) {
+ address--
cli := getModbusConnection(ipAddr)
data, err = cli.ReadHoldingRegisters(address, quantity)
dealErr(err, ipAddr)
+ if err != nil {
+ cli = getModbusConnection(ipAddr)
+ data, err = cli.ReadHoldingRegisters(address, quantity)
+ dealErr(err, ipAddr)
+ }
return
}
-func Write(ipAddr string, address uint16, value interface{}) (err error) {
- bytesVal, err := json.Marshal(value)
- if err != nil {
- return err
- }
+func Write(ipAddr string, address uint16, value int) (err error) {
+ address--
+ var bytesVal []byte
+ bytesVal = intToBytes(value)
cli := getModbusConnection(ipAddr)
_, err = cli.WriteMultipleRegisters(address, uint16(len(bytesVal)), bytesVal)
dealErr(err, ipAddr)
return err
+}
+
+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) {
@@ -53,7 +69,11 @@
}
func FailureRemainingOpportunitiesReset() {
- failureRemainingOpportunities.Store(defaultFailureRemainingOpportunities)
- connectionStatus.Store(true)
+ if failureRemainingOpportunities.Load() < defaultFailureRemainingOpportunities {
+ failureRemainingOpportunities.Store(defaultFailureRemainingOpportunities)
+ }
+ if connectionStatus.Load() == false {
+ connectionStatus.Store(true)
+ }
return
}
--
Gitblit v1.8.0