1

OPC サーバーを Eclipse RCP アプリケーションに組み込む必要がありますが、どこから始めればよいかわかりません。サーバーを作成する例として opcua4j を使用していますが、リモート PLC デバイスに接続する方法がわかりません。

私の質問は、クライアントの IP アドレスを指定して、OPC を使用してサーバーからリモート クライアントと通信する方法です。

Ps: opc ua Java プログラミングに関する最高のチュートリアル/本は何ですか?

4

2 に答える 2

1

ProSys OPC Java SDKの評価版を使用してみてください。これは非常にシンプルな SDK であり、サーバーとクライアントをゼロから作成する方法に関するチュートリアルを提供します。以下は、アドレス空間のないサーバーを作成するのがいかに簡単かを示すコードです。

private String APPNAME = "yourappname";
private String SERVER = "nameoftheserver";
private int PORT = 52000; #choose whatever

public void CreateOPCUAserver() {
    server = new UaServer();

    final PkiFileBasedCertificateValidator validator = new PkiFileBasedCertificateValidator();
    server.setCertificateValidator(validator);
    validator.setValidationListener(validationListener);

    ApplicationDescription appDescription = new ApplicationDescription();
    appDescription.setApplicationName(new LocalizedText(APPNAME, Locale.ENGLISH));
    appDescription.setApplicationUri("urn:localhost:UA:"+SERVER);
    appDescription.setProductUri("urn:snorre.com:UA:"+SERVER);
    appDescription.setApplicationType(ApplicationType.Server);
    try {
        server.setPort(PORT);
        server.setUseLocalhost(true);
        server.setUseAllIpAddresses(true);
        server.setServerName("OPCUA/"+APPNAME);

        final ApplicationIdentity identity = ApplicationIdentity.loadOrCreateCertificate(appDescription, "NTNU",
                /* Private Key Password */"opcua",
                /* Key File Path */new File(validator.getBaseDir(), "private"),
                /* Enable renewing the certificate */true,
                /* Additional host names for the certificate */server.getHostNames());

        server.setApplicationIdentity(identity);
        server.setSecurityModes(SecurityMode.ALL);
        server.addUserTokenPolicy(UserTokenPolicy.ANONYMOUS);
        server.addUserTokenPolicy(UserTokenPolicy.SECURE_USERNAME_PASSWORD);
        server.addUserTokenPolicy(UserTokenPolicy.SECURE_CERTIFICATE);


        server.init();
            String endpoint = String.format("opc.tcp://%s:%s/OPCUA/%s","localhost", PORT, APPNAME);
            server.addEndpoint(endpoint, SecurityMode.NONE, UserTokenPolicy.ANONYMOUS);  
        server.start();

        logger.info("*********important parameters for event transmission**********");
        logger.info("Servername "+endpoint);
        logger.info("Publishing interval: " + server.getSubscriptionManager().getMaxPublishingInterval());
        logger.info("Retransmition queue size: " + server.getSubscriptionManager().getMaxRetransmissionQueueSize());
        logger.info("Session timeout: " + server.getSessionManager().getMaxSessionTimeout());
        logger.info(logger.getClass().getCanonicalName());
        logger.info("****************************end ********************");

    } catch (UaServerException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (SecureIdentityException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

また、かなり基本的な検証リスナーを作成する必要があります。実行するためだけに

public class MyCertificateValidationListener implements CertificateValidationListener {
    @Override
    public ValidationResult onValidate(Cert certificate, ApplicationDescription applicationDescription, EnumSet<CertificateCheck> passedChecks) {
        // Do not mind about URI...
        if (passedChecks.containsAll(EnumSet.of(CertificateCheck.Trusted, CertificateCheck.Validity, CertificateCheck.Signature))) {
            if (!passedChecks.contains(CertificateCheck.Uri)) {
                try {
                    System.out.println("Client's ApplicationURI (" + applicationDescription.getApplicationUri()  + ") does not match the one in certificate: " + PkiFileBasedCertificateValidator.getApplicationUriOfCertificate(certificate));
                } catch (CertificateParsingException e) {
                    throw new RuntimeException(e);
                }
            }
            return ValidationResult.AcceptPermanently;
        }
        return ValidationResult.Reject;
    }
}

これには認証はありませんが、途中で取得するのに役立ちます. これで、無料のクライアント プログラムを使用してサーバーに接続し、閲覧できるようになりました。そこにいくつかのフォルダーがあることがわかりますが、それはサーバーが最初にそれらのフォルダーを持っているためです。

これで、サーバーが起動して実行されます。AddresseSpace を作成してから、現在のサーバーに追加する PLC のデータ モデルを作成する必要があります。次に、このデータ モデルには PLC とその可能なメソッドへの接続があり、OPC-UA クライアントが "opc.tcp://localhost:52000/OPCUA/servername" または http のような単純な uri に基づいてサーバーに接続できるようにします。これは、ローカルで実行することです。それ以外の場合は、これの IP である必要があります。

クライアントがこれを参照すると、データモデル内で作成した変数、メソッド、イベント、アラームなどを見ることができます。そして、メソッドと多くのさまざまなクールなものを使用できます。

于 2013-11-24T19:04:29.510 に答える