首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用OPC基金会/ UA -Java项目的OPC UA模拟器示例

使用OPC基金会/ UA -Java项目的OPC UA模拟器示例
EN

Stack Overflow用户
提问于 2017-07-20 03:46:11
回答 1查看 2.6K关注 0票数 0

任何有仿真器示例的OPC,我都在使用OPC项目https://github.com/OPCFoundation/UA-Java

我已经尝试过这个git页面上提到的所有服务器,但是它们都没有为我https://github.com/node-opcua/node-opcua/wiki/publicly-available-OPCUA-servers工作。

我使用org.opcfoundation.ua.examples.SampleClient实用程序来检查连接和示例值,但无法这样做。如果有任何有工作检验的人,请与代码一起分享。一旦此操作正常,我需要在apache中配置此设置,以生成数据管道。

代码:

代码语言:javascript
复制
public class SampleClient {


    public static final Locale ENGLISH = Locale.ENGLISH;
    public static final Locale ENGLISH_FINLAND = new Locale("en", "FI");
    public static final Locale ENGLISH_US = new Locale("en", "US");

    public static final Locale FINNISH = new Locale("fi");
    public static final Locale FINNISH_FINLAND = new Locale("fi", "FI");

    public static final Locale GERMAN = Locale.GERMAN;
    public static final Locale GERMAN_GERMANY = new Locale("de", "DE");

    public static void main(String[] args) 
    throws Exception {
//      if (args.length==0) {
//          System.out.println("Usage: SampleClient [server uri]");
//          return;
//      }
        //String url = /*args[0]*/"opc.tcp://uademo.prosysopc.com:53530/OPCUA/SimulationServer";
        //String url = /*args[0]*/"opc.tcp://uademo.prosysopc.com:53530";
        //String url = /*args[0]*/"opc.tcp://opcua.demo-this.com:51210/UA/SampleServer";
        String url="opc.tcp://mfactorengineering.com:4840";
        //String url="opc.tcp://commsvr.com:51234/UA/CAS_UA_Server";
        //String url="opc.tcp://uademo.prosysopc.com:53530/OPCUA/SimulationServer";
        //String url="opc.tcp://opcua.demo-this.com:51210/UA/SampleServer";
        //String url="opc.tcp://opcua.demo-this.com:51211/UA/SampleServer";
        //String url="opc.tcp://opcua.demo-this.com:51212/UA/SampleServer";
        //String url="opc.tcp://demo.ascolab.com:4841";
        //String url="opc.tcp://alamscada.dynu.com:4096";

        System.out.print("SampleClient: Connecting to "+url+" .. ");

        //////////////  CLIENT  //////////////
        // Create Client
        Application myApplication = new Application();
        Client myClient = new Client(myApplication);
        myApplication.addLocale( ENGLISH );
        myApplication.setApplicationName( new LocalizedText("Java Sample Client", Locale.ENGLISH) );
        myApplication.setProductUri( "urn:JavaSampleClient" );

        CertificateUtils.setKeySize(1024); // default = 1024
        KeyPair pair = ExampleKeys.getCert("SampleClient");
        myApplication.addApplicationInstanceCertificate( pair );        

        // The HTTPS SecurityPolicies are defined separate from the endpoint securities
        myApplication.getHttpsSettings().setHttpsSecurityPolicies(HttpsSecurityPolicy.ALL);

        // Peer verifier
        myApplication.getHttpsSettings().setHostnameVerifier( SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER );
        myApplication.getHttpsSettings().setCertificateValidator( CertificateValidator.ALLOW_ALL );

        // The certificate to use for HTTPS
        KeyPair myHttpsCertificate = ExampleKeys.getHttpsCert("SampleClient"); 
        myApplication.getHttpsSettings().setKeyPair( myHttpsCertificate );

        // Connect to the given uri
        SessionChannel mySession = myClient.createSessionChannel(url);
//      mySession.activate("username", "123");
        mySession.activate();
        //////////////////////////////////////      

        /////////////  EXECUTE  //////////////      
        // Browse Root
        BrowseDescription browse = new BrowseDescription();
        browse.setNodeId( Identifiers.RootFolder );
        browse.setBrowseDirection( BrowseDirection.Forward );
        browse.setIncludeSubtypes( true );
        browse.setNodeClassMask( NodeClass.Object, NodeClass.Variable );
        browse.setResultMask( BrowseResultMask.All );
        BrowseResponse res3 = mySession.Browse( null, null, null, browse );             
        System.out.println(res3);

        // Read Namespace Array
        ReadResponse res5 = mySession.Read(
            null, 
            null, 
            TimestampsToReturn.Neither,                 
            new ReadValueId(Identifiers.Server_NamespaceArray, Attributes.Value, null, null ) 
        );
        String[] namespaceArray = (String[]) res5.getResults()[0].getValue().getValue();
        System.out.println(Arrays.toString(namespaceArray));

        // Read a variable
        ReadResponse res4 = mySession.Read(
            null, 
            500.0, 
            TimestampsToReturn.Source, 
            new ReadValueId(new NodeId(6, 1710), Attributes.Value, null, null ) 
        );      
        System.out.println(res4);

        res4 = mySession.Read(
            null, 
            500.0, 
            TimestampsToReturn.Source, 
            new ReadValueId(new NodeId(6, 1710), Attributes.DataType, null, null ) 
        );      
        System.out.println(res4);


        /////////////  SHUTDOWN  /////////////
        mySession.close();
        mySession.closeAsync();
        //////////////////////////////////////  

    }

}

例外情况:

代码语言:javascript
复制
SampleClient: Connecting to opc.tcp://mfactorengineering.com:4840 .. 2017-07-20 11:24:34,909 [main] INFO  CryptoUtil  - SecurityProvider initialized from org.bouncycastle.jce.provider.BouncyCastleProvider
2017-07-20 11:24:34,909 [main] INFO  CryptoUtil  - Using SecurityProvider BC
2017-07-20 11:24:35,549 [main] INFO  TcpConnection  - mfactorengineering.com/184.173.118.46:4840 Connecting
2017-07-20 11:24:36,142 [main] INFO  TcpConnection  - mfactorengineering.com/184.173.118.46:4840 Connected
2017-07-20 11:24:36,753 [main] INFO  SecureChannelTcp  - 1804305022 Closed
2017-07-20 11:24:36,768 [TcpConnection/Read] INFO  TcpConnection  - mfactorengineering.com/184.173.118.46:4840 Closed (expected)
2017-07-20 11:24:36,768 [main] INFO  TcpConnection  - mfactorengineering.com/184.173.118.46:4840 Closed
2017-07-20 11:24:36,768 [main] INFO  TcpConnection  - mfactorengineering.com/184.173.118.46:4840 Connecting
2017-07-20 11:24:37,408 [main] INFO  TcpConnection  - mfactorengineering.com/184.173.118.46:4840 Connect failed
java.net.SocketException: Connection reset
    at java.net.SocketInputStream.read(SocketInputStream.java:209)
    at java.net.SocketInputStream.read(SocketInputStream.java:141)
    at java.net.SocketInputStream.read(SocketInputStream.java:223)
    at org.opcfoundation.ua.utils.bytebuffer.InputStreamReadable._get(InputStreamReadable.java:53)
    at org.opcfoundation.ua.utils.bytebuffer.InputStreamReadable.getInt(InputStreamReadable.java:144)
    at org.opcfoundation.ua.transport.tcp.io.TcpConnection.open(TcpConnection.java:500)
    at org.opcfoundation.ua.transport.tcp.io.SecureChannelTcp.open(SecureChannelTcp.java:565)
    at org.opcfoundation.ua.application.Client.createSecureChannel(Client.java:641)
    at org.opcfoundation.ua.application.Client.createSecureChannel(Client.java:555)
    at org.opcfoundation.ua.application.Client.createSessionChannel(Client.java:370)
    at org.opcfoundation.ua.application.Client.createSessionChannel(Client.java:345)
    at org.opcfoundation.ua.examples.SampleClient.main(SampleClient.java:120)
2017-07-20 11:24:37,464 [main] WARN  SecureChannelTcp  - Connection failed: Bad_CommunicationError (code=0x80050000, description="2147811328, Connection reset")
2017-07-20 11:24:37,464 [main] WARN  SecureChannelTcp  - Bad_CommunicationError: Retrying
2017-07-20 11:24:37,464 [main] INFO  TcpConnection  - mfactorengineering.com/184.173.118.46:4840 Connecting
2017-07-20 11:24:38,056 [main] INFO  TcpConnection  - mfactorengineering.com/184.173.118.46:4840 Connected
2017-07-20 11:24:38,368 [TcpConnection/Read] WARN  TcpConnection  - mfactorengineering.com/184.173.118.46:4840 Error
org.opcfoundation.ua.common.ServiceResultException: Bad_SecurityChecksFailed (code=0x80130000, description="An error occurred verifying security")
    at org.opcfoundation.ua.transport.tcp.io.TcpConnection$ReadThread.run(TcpConnection.java:782)
2017-07-20 11:24:38,368 [TcpConnection/Read] INFO  TcpConnection  - mfactorengineering.com/184.173.118.46:4840 Closed
Exception in thread "main" org.opcfoundation.ua.common.ServiceResultException: Bad_SecurityChecksFailed (code=0x80130000, description="An error occurred verifying security")
    at org.opcfoundation.ua.transport.tcp.io.TcpConnection$ReadThread.run(TcpConnection.java:782)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-20 14:21:53

编写该示例时,它总是选择最安全的连接,另一方面,这要求服务器在启用连接之前接受客户端应用程序的应用程序实例证书。当服务器不接受客户端连接时,Bad_SecurityChecksFailed是来自服务器的标准错误代码。

由于您无法控制这些公开可用的服务器使它们信任您的客户端应用程序,所以如果服务器允许的话,您唯一的选择就是尝试在没有安全性的情况下进行连接。

为此,您需要更改代码,以便它选择一个不安全的端点。

替换

代码语言:javascript
复制
SessionChannel mySession = myClient.createSessionChannel(url);

使用

代码语言:javascript
复制
EndpointDescription[] endpoints = myClient.discoverEndpoints(url);
// Filter out all but opc.tcp protocol endpoints
endpoints = selectByProtocol(endpoints, "opc.tcp");
// Filter out all but Signed & Encrypted endpoints
endpoints = selectByMessageSecurityMode(endpoints, MessageSecurityMode.None);

// Choose one endpoint
if (endpoints.length == 0)
  throw new Exception("The server does not support insecure connections");
EndpointDescription endpoint = endpoints[0];
//////////////////////////////////////
SessionChannel mySession = myClient.createSessionChannel(endpoint);

(根据ClientExample1的线条)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45204769

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档