2017-02-21 15 views
1

두 개의 Windows 서비스가 하나의 서비스 (service1)가 두 개의 OPC-UA 서버에 연결되어있어 제대로 작동합니다. 다른 Windows 서비스 (service2)는 OPC-UA Foundation의 .NET 참조 스택과 동일한 연결 코드를 사용하는 동일한 두 OPC-UA 서버에 연결됩니다.OPC-UA BadSecureChannelClosed

Service1은 OPC-UA 서버에 모두 연결할 수 있으며 데이터를 성공적으로 폴링합니다. Service2를 배포하는 동안 Service2는 두 OPC-UA 서버의 값을 연결하고 읽을 수도 있습니다. 이 시점에서 모든 것이 잘되었습니다.

그러나 이제는 코드를 변경하지 않고 잠시 후. Service2는 Session.Create를 수행 할 때 더 이상 OPC-UA 서버 중 하나에 연결할 수 없으며 간단히 ServiceResultException BadSecureChannelClosed (2156265472)로 응답합니다.

문제 해결 시작 : 우리 고객 사이트에는 프로덕션 환경에서 동일한 설치 프로그램 설치를 실행하는 테스트 서버가 있습니다. 즉, Service1과 Service2는 테스트 서버에서 실행되고 두 서버와 동일한 방식으로 통신합니다 OPC-UA 서버.

테스트 서버에서 서비스를 끄면 Service2의 BadSecureChannelClosed 오류가 사라집니다 (그러나 Service2는 여전히 두 개의 OPC-UA 서버 중 다른 하나와 통신 할 수 있음). 프로덕션 서버에서 모든 것이 예상대로 작동하도록합니다.

OPC-UA 서버에서 세션과 연결의 한계가 무엇인지 궁금합니다. OPC-UA 서버는 SINUMERIK 840d 유형입니다. Siemens에게 세션 등의 문제를 해결하기 위해 ServerDiagnostics 객체를 활성화 할 수 있는지 물어 봤지만 가능하지 않다고 대답했습니다. 나는이 물체가 가능하게하는 것이 필수적이라고 생각했다.

누구나 내게이 문제를 일으킬 수있는 힌트를 줄 수 있습니까? 예를 들어 연결을 만드는 동안 어떤 한계와 일들에 대해 생각해야할까요? 독특한 무엇이 필요합니까? ApplicationName? SessionName? 겉으로보기에는 - "임의"BadSecureChannelClosed 오류가 발생할 수 있습니다. Create Session 호출에서 updateBeforeConnect = true를 사용하고 있습니다. 그리고 하드 코드 된 사용자 이름과 암호로 UserIdentity를 사용합니다.

16 : 58 :

또 다른 이상한 증상은 (몇 주 전에 존재하지 않는 그 오류) UaExpert로 연결할 때 BadSecureChannelClosed로 응답이 OPC-UA 서버, 그것은 검색 오류를 제공한다는 것입니다 41.806 | 자동 업데이트 | 현재 버전 정보를 가져 오는 동안 오류가 발생했습니다 : 호스트 updates.unified-automation.com을 찾을 수 없음

16 : 58 : 35.404 | DiscoveryWidget | 디스커버리 opc.tcp의 GetEndpoints : //192.168.0.200 : 4840 실패 (BadCommunicationError)

16 : 58 : 35.401 | DiscoveryWidget | Discovery FindServers on opc.tcp : //192.168.0.200 : 4840 failed (BadCommunicationError)

답변

2

현재 Sinumerik OPC UA 서버는 버그가있어 제대로 인코딩 된 ExtensionObject를 제공하지 않습니다. Siemens에서 서버를 사용할 수있게되면 업데이트를 요청해야합니다.

잘못 인코딩 된 ExtesionObject를 디코딩 할 수있는 UaExpert에서 문제없이 액세스 할 수 있습니다. 이것은 방금 처음에 그런 버그가 많은 버전을 공개 할 수있게했습니다.

편집 : ExtensionObject에 대한 참고 사항 : ServerStatus는 전체 구조로 읽으려고하면 ExtensionObject로 전송됩니다. 또한 PublishResponse (구독 데이터 제공에 사용됨)에는 ExtensionObject로 인코딩 된 데이터 변경 내용이 포함됩니다. 따라서 ServerState를 통해서만 상태를 모니터링하면 아마 작동 할 것입니다.그러나 구독은 어쨌든 작동하지 않습니다.

+0

답장을 보내 주셔서 감사합니다. ExtensionObjects에 관해서는 ServerDiagnostics 객체를 읽을 수는 있지만 데이터를보기 위해 활성화 할 수는 없습니다. ServerDiagnostics를 활성화하기 위해 다른 구성을해야하는지 알고 있습니까? 그렇지 않은 경우 어떻게하면 내가 연결 한 세션 수 등을 볼 수 있습니까? enabledFlag에 true로 쓰려고하면 쓸 수 없다고 표시됩니다. 이미지를 참조하십시오. https://cdn.pbrd.co/images/BlFt52NrP.png –

+2

서버는 진단 기능을 지원하는 데 필요하지 않습니다. –

+0

ExtensionObjects에 대한 참고 사항을 추가했습니다. ExtensionObjects는 문제를 좀더 자세히 설명합니다. –