최근에서 빙빙 돌고, OPC UA 라이브러리의 다양한보고, 특히 OPC 재단의 라이브러리는 예를 들어 마일로 서버 데이터베이스를 통해 앉아 때까지, 특히 혼란, 후 모습, 어떻게 OPC UA 서버를 작성하는 마지막으로 우리는 어떤 이해를 가지고있다.
마일로는 이클립스 오픈 소스 프로젝트 중 하나 GitHub의 주소 : 마일로
우리가 직접 서버 루틴을 통해 전체 서버를 실행하는 방법을 알아 보려면 :
1. 주 기능
public static void main(String[] args) throws Exception {
ExampleServer server = new ExampleServer();
server.startup().get();
final CompletableFuture<Void> future = new CompletableFuture<>();
Runtime.getRuntime().addShutdownHook(new Thread(() -> future.complete(null)));
future.get();
}
이것은 신체의 서버의 주요 기능, 그것은 다음과 같은 주요 사항을 포함 :
- 서버 객체를 생성하고, 서버를 시작합니다
- 비동기 쓰기 모드의 정의 (CompletableFuture 라이브러리는 어떻게 볼 수 없습니다)
2.Server 정의 방법
우리는 주로 서버를 정의하는 방법을 보려면 다음으로
인증서를 가져옵니다
SelfSignedHttpsCertificateBuilder httpsCertificateBuilder = new SelfSignedHttpsCertificateBuilder(httpsKeyPair);
httpsCertificateBuilder.setCommonName(HostnameUtil.getHostname());
HostnameUtil.getHostnames("0.0.0.0").forEach(httpsCertificateBuilder::addDnsName);
X509Certificate httpsCertificate = httpsCertificateBuilder.build();
이것은 구체적으로 참조, OPC UA 암호화 송신을 요구 X509 인증서 파일로서 생성 될 인증서를 생성한다 .
인증서의 검증 후 관련이있다.
OPC UA 서버 구성
String applicationUri = CertificateUtil
.getSanUri(certificate)
.orElseThrow(() -> new UaRuntimeException(
StatusCodes.Bad_ConfigurationError,
"certificate is missing the application URI"));
Set<EndpointConfiguration> endpointConfigurations = createEndpointConfigurations(certificate);
URI 주소는 인증서를 획득하고 구성 방법의 방법에 의해 엔드 포인트 구성을 달성 마일로 ExampleServer 상세한
OpcUaServerConfig serverConfig = OpcUaServerConfig.builder()
.setApplicationUri(applicationUri)
.setApplicationName(LocalizedText.english("Eclipse Milo OPC UA Example Server"))
.setEndpoints(endpointConfigurations)
.setBuildInfo(
new BuildInfo(
"urn:eclipse:milo:example-server",
"eclipse",
"eclipse milo example server",
OpcUaServer.SDK_VERSION,
"", DateTime.now()))
//设置对应的证书管理器
.setCertificateManager(certificateManager)
//获取信任列表 --- 用于信任Application
.setTrustListManager(trustListManager)
.setCertificateValidator(certificateValidator)
// 这个还不太明白
.setHttpsKeyPair(httpsKeyPair)
.setHttpsCertificate(httpsCertificate)
//验证身份
.setIdentityValidator(new CompositeValidator(identityValidator, x509IdentityValidator))
//s设定生成的服务器URI
.setProductUri("urn:eclipse:milo:example-server")
.build();
server = new OpcUaServer(serverConfig);
구성 OPCUA 서버, 코드의 특정 정보를 설명하고, 마지막으로 예 serrver 클래스에 정의 된 서버에 할당 된
private final OpcUaServer server;
3. 서버 구성 네임 스페이스 - 서버의 속성
ExampleServerfang 프로세스 정의 상세한 구성.
- 에 필요한 팔로우 예에서 큰 덩어리를 맨 앞에
super.onStartup()
자신의 노드 정보 서버를 생성, 부모 클래스를 사용하여이 시작 방법
// Create a "HelloWorld" folder and add it to the node manager
NodeId folderNodeId = newNodeId("HelloWorld");
UaFolderNode folderNode = new UaFolderNode(
getNodeContext(),
folderNodeId,
newQualifiedName("HelloWorld"),
LocalizedText.english("HelloWorld")
);
getNodeManager().addNode(folderNode);
// Make sure our new folder shows up under the server's Objects folder.
folderNode.addReference(new Reference(
//产生引用的结点ID
folderNode.getNodeId(),
//引用的类型
Identifiers.Organizes,
//引用连接的对象
Identifiers.ObjectsFolder.expanded(),
//Reference的指向
false
));
루트 파일 및 ObjectsFolder 천국에 대한 참조를 생성하고,이 개체 바로 아래에 생성 된 객체 말했다.
여기에 참고 기준의 잘못된 점, 사실 앞으로, 거짓 역의 대표자가.
FolderNode는 객체이며, 결과는해야한다, 그래서 여기에 대한 참조를 추가하는 것입니다 :