2017-07-20 139 views
0

任何人都有OPC UA的模擬器示例,我正在使用OPC UA項目https://github.com/OPCFoundation/UA-Java使用OPCFoundation/UA-Java項目工作OPC UA Simulator示例

我已經嘗試過這個git hub頁面上提到的所有服務器,但是他們都沒有爲我工作https://github.com/node-opcua/node-opcua/wiki/publicly-available-OPCUA-servers

我使用org.opcfoundation.ua.examples.SampleClient實用程序檢查連接和樣本值,但無法這樣做。如果任何人有工作考試w.r.t請與代碼一起分享。一旦這個工作,我需要在apache Nifi中配置這個設置來製作數據管道。

代碼:

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(); 
     ////////////////////////////////////// 

    } 

} 

例外:

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) 
+0

PROSYS樹莓裨演示天氣:opc.tcp://212.68.9.58:48401 –

+0

@ CamilleG。你好,我已經取代了opc.tcp://212.68.9.58:48401網址在SampleClient.java上面貼,我得到這個例外Bad_SecurityChecksFailed(代碼= 0x80130000,說明=「Bad_SecurityChecksFailed(代碼= 0x80130000,說明=」發生錯誤驗證安全性。「)」)。請問您可以檢查SampleClient java程序,看看我是否遺漏了任何東西 – nilesh1212

+0

看起來與OPC UA證書有關的錯誤。最好的辦法是下載一個OPC UA服務器並在本地PC上運行,然後連接到您的JAVA程序。 (一個來自統一自動化應該沒問題:https://www.unified-automation.com/downloads/opc-ua-servers.html) –

回答

1

的例子被寫入,使得其總是選擇最安全的連接,這在另一方面要求服務器接受該應用實例證書的客戶端應用程序,然後啓用連接。 Bad_SecurityChecksFailed是服務器的標準錯誤代碼,當它不接受客戶端連接時。

既然你無法控制這些公開可用的服務器,使他們相信自己的客戶端應用程序,你唯一的選擇就是儘量沒有安全連接,如果服務器允許。

爲此,您需要更改代碼以便選擇不安全的端點。

替換

SessionChannel mySession = myClient.createSessionChannel(url); 

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的線)

+0

非常感謝你@Jouni Aro,它現在正在工作..還有1個問題如果我想禁用OPCFoundation/UA-Java項目的安全,在哪個文件,我應該conigure MessageSecurityMode.None,以使其在阿帕奇Nifi運行 – nilesh1212

+0

有一個在OPC UA Java堆棧沒有配置文件。不幸的是,我不知道Nifi,所以我不能對此發表評論。 –