From 2d6875c93b25d0b7336c7fa11e066d213259fe2e Mon Sep 17 00:00:00 2001
From: zhangqian <zhangqian@123.com>
Date: 星期四, 25 四月 2024 10:02:01 +0800
Subject: [PATCH] 更改定时任务时区设置

---
 pkg/plc/modbusx/modbus.go |   93 ++++++++++++++++------------------------------
 1 files changed, 33 insertions(+), 60 deletions(-)

diff --git a/pkg/plc/modbusx/modbus.go b/pkg/plc/modbusx/modbus.go
index e1af28c..3040c81 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) {
@@ -18,75 +17,49 @@
 	return
 }
 
-func Write(ipAddr string, address uint16, value int) (err error) {
+func Write(ipAddr string, address uint16, value int, endian string, length int) (err error) {
+	address--
 	var bytesVal []byte
-	if value <= 1<<16 {
-		uint16ToBytes(uint16(value))
-	} else {
-		bytesVal = intToBytes(value)
-	}
+	bytesVal = intToBytes(value, endian, length)
 	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, endian string, length int) (data []byte) {
+	if endian == "mix" {
+		data = make([]byte, 0, 4)
+		highVal := value / (1 << 16)
+		highBts := make([]byte, 2)
+		binary.BigEndian.PutUint16(highBts, uint16(highVal))
+		lowValue := value % (1 << 16)
+		lowBts := make([]byte, 2)
+		binary.BigEndian.PutUint16(lowBts, uint16(lowValue))
+		data = append(data, lowBts...)
+		data = append(data, highBts...)
+	} else {
+		if length == 1 {
+			data = make([]byte, 2)
+			if endian == "big" {
+				binary.BigEndian.PutUint16(data, uint16(value))
+			} else {
+				binary.LittleEndian.PutUint16(data, uint16(value))
+			}
+		} else {
+			data = make([]byte, 4)
+			if endian == "big" {
+				binary.BigEndian.PutUint32(data, uint32(value))
+			} else {
+				binary.LittleEndian.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