From 5a9e2e97e78a05209a57a75a75678d67c32c58d5 Mon Sep 17 00:00:00 2001 From: zhangqian <zhangqian@123.com> Date: 星期六, 21 十月 2023 11:25:20 +0800 Subject: [PATCH] debug over --- 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