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