From 208b87f5ca5ae803bd7b539ad27414fa5891c056 Mon Sep 17 00:00:00 2001
From: zhangzengfei <zhangzengfei@smartai.com>
Date: 星期二, 25 七月 2023 16:12:14 +0800
Subject: [PATCH] 添加命令行参数

---
 main.go |  135 ++++++++++++++++++++++++++++++--------------
 1 files changed, 92 insertions(+), 43 deletions(-)

diff --git a/main.go b/main.go
index c6945db..612c125 100644
--- a/main.go
+++ b/main.go
@@ -1,15 +1,48 @@
 package main
 
 import (
+	"encoding/binary"
+	"flag"
 	"fmt"
 
 	plc4go "github.com/apache/plc4x/plc4go/pkg/api"
 	"github.com/apache/plc4x/plc4go/pkg/api/drivers"
 	apiModel "github.com/apache/plc4x/plc4go/pkg/api/model"
 	"github.com/apache/plc4x/plc4go/pkg/api/transports"
+	//"github.com/apache/plc4x/plc4go/spi/options"
+	"github.com/rs/zerolog"
 )
 
+var (
+	ipAddr  string
+	address int
+	length  int
+	format  string
+)
+
+func init() {
+	flag.StringVar(&ipAddr, "ip", "", "璁惧ip")
+	flag.StringVar(&format, "format", "hex", "鏍煎紡鍖�: hex, 鍗佸叚杩涘埗, dec 鍗佽繘鍒�, str, 瀛楃涓�")
+	flag.IntVar(&address, "addr", 100, "璧峰鍦板潃")
+	flag.IntVar(&length, "len", 1, "闀垮害")
+}
+
 func main() {
+	flag.Parse()
+
+	if ipAddr == "" {
+		flag.PrintDefaults()
+		return
+	}
+
+	// 寮哄埗璇讳竴涓湴鍧�
+	if length == 0 {
+		length = 1
+	}
+
+	// 鎺у埗鏃ュ織鎵撳嵃绾у埆
+	zerolog.SetGlobalLevel(zerolog.FatalLevel)
+
 	// 鍒涘缓椹卞姩绠$悊鍣�
 	driverManager := plc4go.NewPlcDriverManager()
 
@@ -27,7 +60,8 @@
 	drivers.RegisterModbusTcpDriver(driverManager)
 
 	// 閫氳繃TCP杩炴帴PLC璁惧
-	connectionRequestChanel := driverManager.GetConnection("modbus-tcp://192.168.1.88")
+	connectionString := fmt.Sprintf("modbus-tcp://%s", ipAddr)
+	connectionRequestChanel := driverManager.GetConnection(connectionString)
 
 	// 绛夊緟杩炴帴鍝嶅簲
 	connectionResult := <-connectionRequestChanel
@@ -43,48 +77,63 @@
 	defer connection.Close()
 
 	// 娴嬭瘯鏄惁鍙互姝e父閫氫俊
-	pingResult := <-connection.Ping()
-	if err := pingResult.GetErr(); err != nil {
-		fmt.Printf("Couldn't ping device: %s\n", err.Error())
+	//pingResult := <-connection.Ping()
+	//if err := pingResult.GetErr(); err != nil {
+	//	fmt.Printf("Couldn't ping device: %s\n", err.Error())
+	//}
+	//
+	//// 楠岃瘉鏄惁鍙
+	//if !connection.GetMetadata().CanRead() {
+	//	fmt.Printf("This connection doesn't support read operations\n")
+	//	return
+	//}
+
+	// 灏嗛暱搴︽寜60鍒囧壊, 澶暱浜唌odbus涓嶈繑鍥�
+	for i, len := 0, 60; i < length; i = i + 60 {
+		if i+len > length {
+			len = length - i
+		}
+
+		tagAddress := fmt.Sprintf("holding-register:%d:DINT[%d]", address+i, len)
+
+		// 璇绘ā寮�
+		readRequest, err := connection.ReadRequestBuilder().AddTagAddress("tag0", tagAddress).Build()
+		if err != nil {
+			fmt.Printf("Error preparing read-request:%s\n", err.Error())
+			return
+		}
+
+		// 鎵ц
+		readResult := <-readRequest.Execute()
+		if err := readResult.GetErr(); err != nil {
+			fmt.Printf("Error execting read-request:%s\n", err.Error())
+			return
+		}
+
+		// 鍒ゆ柇鍝嶅簲鐮佹槸鍚︽纭�
+		if readResult.GetResponse().GetResponseCode("tag0") != apiModel.PlcResponseCode_OK {
+			fmt.Printf("error an non-ok return code: %s", readResult.GetResponse().GetResponseCode("tag0").GetName())
+			return
+		}
+
+		// 娴嬭瘯鑾峰彇鍙橀噺鍚嶇О
+		//names := readResult.GetResponse().GetTagNames()
+		//fmt.Printf("Got tag names %+v", names)
+
+		value := readResult.GetResponse().GetValue("tag0")
+
+		//// 鎸夊瓧绗︿覆鎵撳嵃鍙橀噺
+		//fmt.Printf("val data: %s\n", value.GetRaw())
+		for idx, val := range value.GetList() {
+			raw := val.GetRaw()
+			if format == "hex" {
+				fmt.Printf("%d:%X\t", address+i+idx, raw)
+			}
+			if format == "dec" {
+				fmt.Printf("%d:%d\t", address+i+idx, binary.BigEndian.Uint16(raw))
+			}
+		}
 	}
-
-	// 楠岃瘉鏄惁鍙
-	if !connection.GetMetadata().CanRead() {
-		fmt.Printf("This connection doesn't support read operations\n")
-		return
-	}
-
-	// 璇绘ā寮�
-	readRequest, err := connection.ReadRequestBuilder().AddTagAddress("count", "holding-register:1230:DINT[20]").Build()
-	if err != nil {
-		fmt.Printf("Error preparing read-request:%s\n", err.Error())
-		return
-	}
-
-	// 鎵ц
-	readResult := <-readRequest.Execute()
-	if err := readResult.GetErr(); err != nil {
-		fmt.Printf("Error execting read-request:%s\n", err.Error())
-		return
-	}
-
-	// 鍒ゆ柇鍝嶅簲鐮佹槸鍚︽纭�
-	if readResult.GetResponse().GetResponseCode("count") != apiModel.PlcResponseCode_OK {
-		fmt.Printf("error an non-ok return code: %s", readResult.GetResponse().GetResponseCode("count").GetName())
-		return
-	}
-
-	// 娴嬭瘯鑾峰彇鍙橀噺鍚嶇О
-	//names := readResult.GetResponse().GetTagNames()
-	//fmt.Printf("Got tag names %+v", names)
-
-	value := readResult.GetResponse().GetValue("count")
-	fmt.Printf("Got result length %d\n", value.GetLength())
-
-	// 鎸夊瓧绗︿覆鎵撳嵃鍙橀噺
-	fmt.Printf("val data: %s\n", value.GetRaw())
-	for _, val := range value.GetList() {
-		fmt.Printf("%d ", val.GetUint16())
-	}
+	fmt.Printf("\n")
 
 }

--
Gitblit v1.8.0