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/apacheplc4x/modbus.go |   67 ++++++++++++++++++---------------
 1 files changed, 37 insertions(+), 30 deletions(-)

diff --git a/pkg/plc/apacheplc4x/modbus.go b/pkg/plc/apacheplc4x/modbus.go
index 7555866..a6138eb 100644
--- a/pkg/plc/apacheplc4x/modbus.go
+++ b/pkg/plc/apacheplc4x/modbus.go
@@ -1,7 +1,6 @@
 package apacheplc4x
 
 import (
-	"apsClient/conf"
 	"apsClient/pkg/logx"
 	"context"
 	"errors"
@@ -14,31 +13,35 @@
 	"time"
 )
 
+var driverManager plc4go.PlcDriverManager
+
+func init() {
+	// 鍒涘缓椹卞姩绠$悊鍣�
+	driverManager = plc4go.NewPlcDriverManager()
+	// 娉ㄥ唽TCP浼犺緭
+	transports.RegisterTcpTransport(driverManager)
+	// 娉ㄥ唽涓插彛浼犺緭
+	transports.RegisterSerialTransport(driverManager)
+	// 娉ㄥ唽椹卞姩
+	drivers.RegisterModbusTcpDriver(driverManager)
+	drivers.RegisterModbusRtuDriver(driverManager)
+}
+
 func GetModbusConnection(ipAddr string) (plc4go.PlcConnection, error) {
 	// 鍒涘缓涓�涓笂涓嬫枃锛屽苟璁剧疆 3 绉掕秴鏃�
 	ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
 	defer cancel()
-	conn, err := newGetModbusConnection(ctx, ipAddr)
+	conn, err := newModbusTCPConnection(ctx, ipAddr)
 	if err != nil {
 		logx.Errorf("new modbus connection err: %v", err.Error())
 		return nil, err
 	}
 	return conn, nil
 }
-
-func newGetModbusConnection(ctx context.Context, ipAddr string) (plc4go.PlcConnection, error) {
-	// 鍒涘缓椹卞姩绠$悊鍣�
-	driverManager := plc4go.NewPlcDriverManager()
-	// 娉ㄥ唽TCP浼犺緭
-	transports.RegisterTcpTransport(driverManager)
-	// 娉ㄥ唽椹卞姩
-	//drivers.RegisterKnxDriver(driverManager)
-	drivers.RegisterModbusTcpDriver(driverManager)
-
+func newModbusTCPConnection(ctx context.Context, ipAddr string) (plc4go.PlcConnection, error) {
 	// 閫氳繃TCP杩炴帴PLC璁惧
 	connectionString := fmt.Sprintf("modbus-tcp://%s", ipAddr)
 	connectionRequestChanel := driverManager.GetConnection(connectionString)
-
 	// 绛夊緟杩炴帴鍝嶅簲锛屽悓鏃惰�冭檻涓婁笅鏂囩殑瓒呮椂
 	select {
 	case connectionResult := <-connectionRequestChanel:
@@ -51,9 +54,9 @@
 	}
 }
 
-func readHoldingRegisterSingle(connection plc4go.PlcConnection, address int) ([]byte, error) {
+func readHoldingRegisterSingle(connection plc4go.PlcConnection, address int, intType string) ([]byte, error) {
 	tag := fmt.Sprintf("tag:%v", address)
-	tagAddress := getTagAddress(address)
+	tagAddress := getTagAddress(address, 1, intType)
 
 	// 璇绘ā寮�
 	readRequest, err := connection.ReadRequestBuilder().AddTagAddress(tag, tagAddress).Build()
@@ -81,9 +84,9 @@
 
 }
 
-func readHoldingRegisterList(connection plc4go.PlcConnection, address, length int) ([]byte, error) {
+func readHoldingRegisterList(connection plc4go.PlcConnection, address, length int, intType string) ([]byte, error) {
 	tag := fmt.Sprintf("tag:%v:%v", address, length)
-	tagAddress := getTagAddress(address)
+	tagAddress := getTagAddress(address, length, intType)
 
 	// 璇绘ā寮�
 	readRequest, err := connection.ReadRequestBuilder().AddTagAddress(tag, tagAddress).Build()
@@ -95,13 +98,13 @@
 	// 鎵ц
 	readResult := <-readRequest.Execute()
 	if err := readResult.GetErr(); err != nil {
-		logx.Errorf("execting read-request:%s\n", err.Error())
+		logx.Errorf("plc4x execute read-request:%s\n", err.Error())
 		return nil, err
 	}
 
 	// 鍒ゆ柇鍝嶅簲鐮佹槸鍚︽纭�
 	if readResult.GetResponse().GetResponseCode(tag) != apiModel.PlcResponseCode_OK {
-		logx.Errorf("error an non-ok return code: %s", readResult.GetResponse().GetResponseCode(tag).GetName())
+		logx.Errorf("plc4x response error code: %s", readResult.GetResponse().GetResponseCode(tag).GetName())
 		return nil, errors.New("error  code: " + readResult.GetResponse().GetResponseCode(tag).GetName())
 	}
 
@@ -116,7 +119,7 @@
 	return result, nil
 }
 
-func ReadHoldingRegister(ipAddr string, address, length int) ([]byte, error) {
+func ReadHoldingRegister(ipAddr string, address, length int, intType string) ([]byte, error) {
 	connection, err := GetModbusConnection(ipAddr)
 	dealErr(err, ipAddr)
 	if err != nil {
@@ -124,21 +127,24 @@
 	}
 	defer connection.Close()
 	if length > 1 {
-		return readHoldingRegisterList(connection, address, length)
+		return readHoldingRegisterList(connection, address, length, intType)
 	}
 
-	return readHoldingRegisterSingle(connection, address)
+	return readHoldingRegisterSingle(connection, address, intType)
 }
 
-func getTagAddress(address int) string {
-	intType := conf.Conf.PLC.ModbusIntType
+func getTagAddress(address int, length int, intType string) string {
 	if intType == "" {
 		intType = "DINT"
 	}
-	return fmt.Sprintf("holding-register:%d:%v", address, intType)
+	if length == 1 {
+		return fmt.Sprintf("holding-register:%d:%v", address, intType)
+	} else {
+		return fmt.Sprintf("holding-register:%d:%v[%d]", address, intType, length)
+	}
 }
 
-func WriteHoldingRegister(ipAddr string, address int, value any) (string, error) {
+func WriteHoldingRegister(ipAddr string, address int, value any, intType string) (string, error) {
 	connection, err := GetModbusConnection(ipAddr)
 	dealErr(err, ipAddr)
 	if err != nil {
@@ -146,25 +152,26 @@
 	}
 	defer connection.Close()
 	tag := fmt.Sprintf("tag:%v:w", address)
-	tagAddress := getTagAddress(address)
+	var tagAddress string
+	tagAddress = getTagAddress(address, 1, intType)
 
 	// 鍐欐ā寮�
 	writeRequest, err := connection.WriteRequestBuilder().AddTagAddress(tag, tagAddress, value).Build()
 	if err != nil {
-		logx.Errorf("preparing read-request:%s\n", err.Error())
+		logx.Errorf("plc4x preparing read-request:%s\n", err.Error())
 		return "", err
 	}
 
 	// 鎵ц
 	writeResult := <-writeRequest.Execute()
 	if err := writeResult.GetErr(); err != nil {
-		logx.Errorf("execting read-request:%s\n", err.Error())
+		logx.Errorf("plc4x execute write-request:%s\n", err.Error())
 		return "", err
 	}
 
 	// 鍒ゆ柇鍝嶅簲鐮佹槸鍚︽纭�
 	if writeResult.GetResponse().GetResponseCode(tag) != apiModel.PlcResponseCode_OK {
-		logx.Errorf("error an non-ok return code: %s", writeResult.GetResponse().GetResponseCode(tag).GetName())
+		logx.Errorf("plc4x  response error code: %s", writeResult.GetResponse().GetResponseCode(tag).GetName())
 		return "", errors.New("error  code: " + writeResult.GetResponse().GetResponseCode(tag).GetName())
 	}
 

--
Gitblit v1.8.0