From 8324f872ef3a4d0c978a9b1d062800c6a1701c12 Mon Sep 17 00:00:00 2001 From: zhangqian <zhangqian@123.com> Date: 星期五, 01 十二月 2023 09:58:17 +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