plc4x icon indicating copy to clipboard operation
plc4x copied to clipboard

[Feature Request]: plc4j-driver-opcua - Implement browsing

Open takraj opened this issue 2 years ago • 2 comments

What would you like to happen?

The OPC-UA protocol supports browsing, but the driver does not. Please implement it, in order to be able to recursively fetch data with the library.

Example code to browse the value tree:

DefaultPlcDriverManager driverManager = new DefaultPlcDriverManager();
try (PlcConnection opcuaConnection = driverManager.getConnection("opcua:tcp://opcuaserver.com:48010")) {
    PlcBrowseRequest request = opcuaConnection.browseRequestBuilder()
            .addQuery("Folder","ns=2;s=Demo.Static")
            .build();

    PlcBrowseResponse response = request.execute().get();
    System.out.println(response.getValues("Folder"));
}

The above program throws the exception below:

org.apache.plc4x.java.api.exceptions.PlcUnsupportedOperationException: The connection does not support browsing
	at org.apache.plc4x.java.spi.connection.AbstractPlcConnection.browseRequestBuilder(AbstractPlcConnection.java:159)
	at org.apache.plc4x.java.opcua.ManualOpcuaFolderNode.main(ManualOpcuaFolderNode.java:32)

Example output of another software, that supports browsing:

$ uabrowse -u "opc.tcp://opcuaserver.com:48010" -n "ns=2;s=Demo.Static"
WARNING:asyncua.client.client:Requested session timeout to be 3600000ms, got 600000ms instead
Browsing node ns=2;s=Demo.Static at opc.tcp://opcuaserver.com:48010

DisplayName                    NodeId                    BrowseName                Value                    

LocalizedText(Locale='', Text='Arrays') ns=2;s=Demo.Static.Arrays 2:Arrays                 
LocalizedText(Locale='', Text='Scalar') ns=2;s=Demo.Static.Scalar 2:Scalar                 
LocalizedText(Locale='', Text='VariableWithNumericNodeId') ns=2;i=4294967294         2:VariableWithNumericNodeId, 12 
LocalizedText(Locale='', Text='VariableWithGuidNodeId') ns=2;g=5ce9dbce-5d79-434c-9ac3-1cfba9a6e92c 2:VariableWithGuidNodeId , 0  
LocalizedText(Locale='', Text='VariableWithByteStringNodeId') ns=2;b=0x61626364         2:VariableWithByteStringNodeId, 0  
LocalizedText(Locale='', Text='Matrix') ns=2;s=Demo.Static.Matrix 2:Matrix

Wireshark capture of the above browsing request

Programming Languages

  • [X] plc4j
  • [ ] plc4go
  • [ ] plc4c
  • [ ] plc4net

Protocols

  • [ ] AB-Ethernet
  • [ ] ADS /AMS
  • [ ] BACnet/IP
  • [ ] CANopen
  • [ ] DeltaV
  • [ ] DF1
  • [ ] EtherNet/IP
  • [ ] Firmata
  • [ ] KNXnet/IP
  • [ ] Modbus
  • [X] OPC-UA
  • [ ] S7

takraj avatar Sep 24 '23 10:09 takraj

Hi @takraj

thanks for all the work on the OPC-UA driver you are currently working on ... highly appreciated. Could you do us a favor and sign up on our mailing list [email protected] (by sending an empty email to [email protected]) and tell us a bit about you, what you're working on ... we'd love to get you in touch with the rest of our community.

Chris

chrisdutz avatar Sep 25 '23 06:09 chrisdutz

@chrisdutz I have subscribed to the mailing list, thanks for inviting me. Although I don't plan to do frequent contributions, because I don't really have the time for that. The reason I have been involved is, that I had to troubleshoot a product, that was built on this library at the company I'm working at. I don't think I'll add/fix things having large impact, only low hanging ones maybe.

takraj avatar Oct 10 '23 12:10 takraj