From 208b87f5ca5ae803bd7b539ad27414fa5891c056 Mon Sep 17 00:00:00 2001
From: zhangzengfei <zhangzengfei@smartai.com>
Date: 星期二, 25 七月 2023 16:12:14 +0800
Subject: [PATCH] 添加命令行参数
---
go.mod | 5 +
main.go | 135 ++++++++++++++++++++++++++++++--------------
README.md | 21 ++++++
3 files changed, 116 insertions(+), 45 deletions(-)
diff --git a/README.md b/README.md
index 992c4f1..027b9f6 100644
--- a/README.md
+++ b/README.md
@@ -8,4 +8,23 @@
go build
```
####澶囧繕
-SubscriptionRequestBuilder 涓嶆敮鎸乵odbus
\ No newline at end of file
+SubscriptionRequestBuilder 涓嶆敮鎸乵odbus
+
+####骞垮崌娴嬭瘯
+姹囧窛 H5U
+<br>
+榛樿IP 192.168.1.88
+<br>
+鐢熶骇璁℃暟: D1230, 鐢熶骇鎬婚噺: D1234
+
+涓夎彵 FX-5U
+<br>
+榛樿IP 192.168.3.250, 绗簩鍙板凡淇敼涓� 192.168.3.251
+<br>
+鐢熶骇璁℃暟: D831, 鐢熶骇鎬婚噺: D832
+
+ETH-FX-2P妯″潡
+<br>
+IP鍦板潃榛樿涓� 192.168.1.188, 宸蹭慨鏀逛负192.168.1.150
+<br>
+鐢熶骇璁℃暟: 42382, 鐢熶骇鎬婚噺: 42384(E0FF) 鍜� 42385(05F5)
\ No newline at end of file
diff --git a/go.mod b/go.mod
index 3942bd9..4ff34d0 100644
--- a/go.mod
+++ b/go.mod
@@ -2,4 +2,7 @@
go 1.14
-require github.com/apache/plc4x/plc4go v0.0.0-20230714120555-05ec3da87ebe
+require (
+ github.com/apache/plc4x/plc4go v0.0.0-20230714120555-05ec3da87ebe
+ github.com/rs/zerolog v1.29.1 // indirect
+)
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