You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by sr...@apache.org on 2023/08/07 12:40:56 UTC

[plc4x] 02/08: feat(plc4go/plc4xbrowser): add support for opcua

This is an automated email from the ASF dual-hosted git repository.

sruehl pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/plc4x.git

commit 2fea4804601ddcbab52a6235784b36cadf5801cd
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Mon Aug 7 11:43:10 2023 +0200

    feat(plc4go/plc4xbrowser): add support for opcua
---
 plc4go/pkg/api/drivers/drivers.go       | 6 ++++++
 plc4go/tools/plc4xbrowser/ui/actions.go | 8 ++++++++
 plc4go/tools/plc4xbrowser/ui/common.go  | 2 +-
 plc4go/tools/plc4xbrowser/ui/config.go  | 5 +++++
 4 files changed, 20 insertions(+), 1 deletion(-)

diff --git a/plc4go/pkg/api/drivers/drivers.go b/plc4go/pkg/api/drivers/drivers.go
index 8fc164b540..f0e72cc46b 100644
--- a/plc4go/pkg/api/drivers/drivers.go
+++ b/plc4go/pkg/api/drivers/drivers.go
@@ -26,6 +26,7 @@ import (
 	"github.com/apache/plc4x/plc4go/internal/eip"
 	"github.com/apache/plc4x/plc4go/internal/knxnetip"
 	modbus2 "github.com/apache/plc4x/plc4go/internal/modbus"
+	"github.com/apache/plc4x/plc4go/internal/opcua"
 	"github.com/apache/plc4x/plc4go/internal/s7"
 	"github.com/apache/plc4x/plc4go/pkg/api"
 	"github.com/apache/plc4x/plc4go/pkg/api/config"
@@ -75,6 +76,11 @@ func RegisterModbusAsciiDriver(driverManager plc4go.PlcDriverManager, _options .
 	transports.RegisterTcpTransport(driverManager)
 }
 
+func RegisterOpcuaDriver(driverManager plc4go.PlcDriverManager, _options ...config.WithOption) {
+	driverManager.RegisterDriver(opcua.NewDriver(converter.WithOptionToInternal(_options...)...))
+	transports.RegisterTcpTransport(driverManager)
+}
+
 func RegisterS7Driver(driverManager plc4go.PlcDriverManager, _options ...config.WithOption) {
 	driverManager.RegisterDriver(s7.NewDriver(converter.WithOptionToInternal(_options...)...))
 	transports.RegisterTcpTransport(driverManager)
diff --git a/plc4go/tools/plc4xbrowser/ui/actions.go b/plc4go/tools/plc4xbrowser/ui/actions.go
index 9f6531f78c..a836318fbe 100644
--- a/plc4go/tools/plc4xbrowser/ui/actions.go
+++ b/plc4go/tools/plc4xbrowser/ui/actions.go
@@ -24,6 +24,7 @@ import (
 	"github.com/apache/plc4x/plc4go/internal/ads"
 	"github.com/apache/plc4x/plc4go/internal/bacnetip"
 	"github.com/apache/plc4x/plc4go/internal/cbus"
+	"github.com/apache/plc4x/plc4go/internal/opcua"
 	"github.com/apache/plc4x/plc4go/internal/s7"
 	plc4go "github.com/apache/plc4x/plc4go/pkg/api"
 	"github.com/apache/plc4x/plc4go/pkg/api/transports"
@@ -117,6 +118,13 @@ func registerDriver(driverId string) error {
 			transports.RegisterTcpTransport(driverManager)
 			tcpRegistered = true
 		}
+	case "opcua":
+		driver = opcua.NewDriver()
+		driverManager.RegisterDriver(driver)
+		if !tcpRegistered {
+			transports.RegisterTcpTransport(driverManager)
+			tcpRegistered = true
+		}
 	default:
 		return errors.Errorf("Unknown driver %s", driverId)
 	}
diff --git a/plc4go/tools/plc4xbrowser/ui/common.go b/plc4go/tools/plc4xbrowser/ui/common.go
index ee7b61a591..c052901f5d 100644
--- a/plc4go/tools/plc4xbrowser/ui/common.go
+++ b/plc4go/tools/plc4xbrowser/ui/common.go
@@ -29,7 +29,7 @@ import (
 	"time"
 )
 
-const protocols = "ads,bacnetip,c-bus,s7"
+const protocols = "ads,bacnetip,c-bus,opcua,s7"
 
 var protocolList = strings.Split(protocols, ",")
 
diff --git a/plc4go/tools/plc4xbrowser/ui/config.go b/plc4go/tools/plc4xbrowser/ui/config.go
index 4658a97492..47a325b46d 100644
--- a/plc4go/tools/plc4xbrowser/ui/config.go
+++ b/plc4go/tools/plc4xbrowser/ui/config.go
@@ -26,6 +26,7 @@ import (
 	"gopkg.in/yaml.v3"
 	"os"
 	"path"
+	"sync"
 	"time"
 )
 
@@ -83,7 +84,11 @@ func LoadConfig() {
 	}
 }
 
+var saveMutex sync.Mutex
+
 func saveConfig() {
+	saveMutex.Lock()
+	defer saveMutex.Unlock()
 	config.LastUpdated = time.Now()
 	f, err := os.OpenFile(configFile, os.O_RDWR|os.O_CREATE, 0755)
 	if err != nil {