OPC サーバーを Eclipse RCP アプリケーションに組み込む必要がありますが、どこから始めればよいかわかりません。サーバーを作成する例として opcua4j を使用していますが、リモート PLC デバイスに接続する方法がわかりません。
私の質問は、クライアントの IP アドレスを指定して、OPC を使用してサーバーからリモート クライアントと通信する方法です。
Ps: opc ua Java プログラミングに関する最高のチュートリアル/本は何ですか?
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 である必要があります。
クライアントがこれを参照すると、データモデル内で作成した変数、メソッド、イベント、アラームなどを見ることができます。そして、メソッドと多くのさまざまなクールなものを使用できます。