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