From a335f66c4c520728be640ca4e7029ce6f45b8f3d Mon Sep 17 00:00:00 2001
From: zhangzengfei <zhangzengfei@smartai.com>
Date: 星期五, 11 八月 2023 11:21:32 +0800
Subject: [PATCH] web 接口添加token

---
 collector/plc4x.go |   59 ++++++++++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 48 insertions(+), 11 deletions(-)

diff --git a/collector/plc4x.go b/collector/plc4x.go
index e35edfb..8d5cb1b 100644
--- a/collector/plc4x.go
+++ b/collector/plc4x.go
@@ -9,7 +9,7 @@
 	"github.com/apache/plc4x/plc4go/pkg/api/transports"
 )
 
-func NewModbusConnection(ipAddr string) (error, plc4go.PlcConnection) {
+func NewModbusConnection(ipAddr string) (plc4go.PlcConnection, error) {
 	// 鍒涘缓椹卞姩绠$悊鍣�
 	driverManager := plc4go.NewPlcDriverManager()
 
@@ -29,37 +29,74 @@
 
 	// 鍒ゆ柇鏄惁杩炴帴鎴愬姛
 	if err := connectionResult.GetErr(); err != nil {
-		return err, nil
+		return nil, err
 	}
 
-	return nil, connectionResult.GetConnection()
+	return connectionResult.GetConnection(), nil
 }
 
-func ReadHoldingRegister(connection plc4go.PlcConnection, address int) (error, []byte) {
-	tagAddress := fmt.Sprintf("holding-register:%d:DINT", address)
+func ReadHoldingRegister(connection plc4go.PlcConnection, address, length int) ([]byte, error) {
+	if length > 1 {
+		return ReadHoldingRegisterList(connection, address, length)
+	}
+
+	return ReadHoldingRegisterSingle(connection, address)
+}
+
+func ReadHoldingRegisterSingle(connection plc4go.PlcConnection, address int) ([]byte, error) {
+	tagAddress := fmt.Sprintf("holding-register:%d:UINT", address)
 
 	// 璇绘ā寮�
 	readRequest, err := connection.ReadRequestBuilder().AddTagAddress("tag", tagAddress).Build()
 	if err != nil {
-		fmt.Printf("Error preparing read-request:%s\n", err.Error())
-		return err, nil
+		fmt.Printf("preparing read-request:%s\n", err.Error())
+		return nil, err
 	}
 
 	// 鎵ц
 	readResult := <-readRequest.Execute()
 	if err := readResult.GetErr(); err != nil {
-		fmt.Printf("Error execting read-request:%s\n", err.Error())
-		return err, nil
+		fmt.Printf("execting read-request:%s\n", err.Error())
+		return nil, err
 	}
 
 	// 鍒ゆ柇鍝嶅簲鐮佹槸鍚︽纭�
 	if readResult.GetResponse().GetResponseCode("tag") != apiModel.PlcResponseCode_OK {
 		fmt.Printf("error an non-ok return code: %s", readResult.GetResponse().GetResponseCode("tag").GetName())
-		return err, nil
+		return nil, nil
 	}
 
 	value := readResult.GetResponse().GetValue("tag")
 
-	return nil, value.GetRaw()
+	return value.GetRaw(), err
+
+}
+
+func ReadHoldingRegisterList(connection plc4go.PlcConnection, address, length int) ([]byte, error) {
+	tagAddress := fmt.Sprintf("holding-register:%d:UINT[%d]", address, length)
+
+	// 璇绘ā寮�
+	readRequest, err := connection.ReadRequestBuilder().AddTagAddress("tag", tagAddress).Build()
+	if err != nil {
+		fmt.Printf("preparing read-request:%s\n", err.Error())
+		return nil, err
+	}
+
+	// 鎵ц
+	readResult := <-readRequest.Execute()
+	if err := readResult.GetErr(); err != nil {
+		fmt.Printf("execting read-request:%s\n", err.Error())
+		return nil, err
+	}
+
+	// 鍒ゆ柇鍝嶅簲鐮佹槸鍚︽纭�
+	if readResult.GetResponse().GetResponseCode("tag") != apiModel.PlcResponseCode_OK {
+		fmt.Printf("error an non-ok return code: %s", readResult.GetResponse().GetResponseCode("tag").GetName())
+		return nil, nil
+	}
+
+	value := readResult.GetResponse().GetValue("tag")
+
+	return value.GetRaw(), err
 
 }

--
Gitblit v1.8.0