2016-06-09 15 views
1

OPC NET API 2.00을 사용하는 OPC 클라이언트 응용 프로그램에 문제가있어서 ABB Freelance OPC Server Opc.Server.Connect(Opc.ConnectData) 메서드를 호출 할 때 예외를 throw합니다.ABB Freelance OPC 서버에 연결할 수 없습니다. [해당 인터페이스가 지원되지 않습니다 (HRESULT : 0x80004002 (E_NOINTERFACE)에서 예외)]

예외 :

Unable to cast COM object of type 'System.__ComObject' to interface type 'OpcRcw.Comn.IOPCServerList2'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{9DD0B56C-AD9E-43EE-8305-487F3188BF7A}' failed due to the following error: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE)).

될 수 있습니다 문제는 IOPCServerList2 인터페이스 관련 : 여기

#region Assembly OpcRcw.Comn.dll, v1.10.2.0 
// C:\Windows\assembly\GAC_MSIL\OpcRcw.Comn\1.10.2.0__9a40e993cbface53\OpcRcw.Comn.dll 
#endregion 

using System; 
using System.Runtime.InteropServices; 

namespace OpcRcw.Comn 
{ 
    [Guid("9DD0B56C-AD9E-43EE-8305-487F3188BF7A")] 
    [InterfaceType(1)] 
    public interface IOPCServerList2 
    { 
     void CLSIDFromProgID(string szProgId, out Guid clsid); 
     void EnumClassesOfCategories(int cImplemented, Guid[] rgcatidImpl, int cRequired, Guid[] rgcatidReq, out IOPCEnumGUID ppenumClsid); 
     void GetClassDetails(ref Guid clsid, out string ppszProgID, out string ppszUserType, out string ppszVerIndProgID); 
    } 
} 

답변

0

E_NOINTERFACE가 (실제 문제가 있음을 나타냅니다 그렇게 유용하지) 일반 COM 오류입니다.

확인 : 클라이언트에

  • "OPC 핵심 구성 요소 재배포"를 RCWS가 설치 mergemodule?

  • 클라이언트의 방화벽 설정은 무엇입니까?

  • 서버 : abc opc 서버에 대한 dcom 설정이 정확한가요?

그냥 IOPCCServerList2의 소스 코드에서 찾고, 내 IOPCServerList2는 당신보다 다른 버전이 있습니다. OPC DA 1.0 (아주 오래되고 obsolate 한 opc 표준) 용으로 설계된 오래된 병합 모듈/api를 사용하려고하면 대부분의 opc 서버는 OPC DA 2.0 클라이언트 연결을 기대합니다.

#region Assembly OpcComRcw, Version=2.0.105.1, Culture=neutral, PublicKeyToken=9a40e993cbface53 
// C:\WINDOWS\assembly\GAC_MSIL\OpcComRcw\2.0.105.1__9a40e993cbface53\OpcComRcw.dll 
#endregion 

using System; 
using System.Runtime.InteropServices; 

namespace OpcRcw.Comn 
{ 
    [Guid("9DD0B56C-AD9E-43ee-8305-487F3188BF7A")] 
    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 
    public interface IOPCServerList2 
    { 
     void CLSIDFromProgID(string szProgId, out Guid clsid); 
     void EnumClassesOfCategories(int cImplemented, Guid[ ] rgcatidImpl, int cRequired, Guid[ ] rgcatidReq, out IOPCEnumGUID ppenumClsid); 
     void GetClassDetails(ref Guid clsid, out string ppszProgID, out string ppszUserType, out string ppszVerIndProgID); 
    } 
} 
+0

예, Yokogawa 또는 Matrikon과 같은 다른 OPC 서버 브랜드에 연결할 때 예상대로 작동하지만 ABB OPC 서버에서는 작동하지 않습니다. –

+0

일부 opc 테스트 클라이언트에서 연결을 시도 했습니까? – apr

+0

예, Matrikon 및 일부 상용 opc 클라이언트는 데이터를 연결하고 읽을 수 있지만 .Net API는 연결에 실패했습니다. –

1

IOPCCServerList2가 OPCEnum 서비스, 서버 자체의 일부의 일부입니다 : 여기

은 내 꺼야.

리모컨에서 연결하는 경우 응용 프로그램이 서버와 동일한 컴퓨터에서 실행중인 OPCEnum 서비스에 액세스하고 있습니다.

IOPCCServerList2는 IOPCCServerList의 새 버전이며 ABB Freelance와 함께 설치된 OPCEnum 서비스 버전이 너무 오래되었을 가능성이 큽니다.

OPC Foundation website에서 제공되는 최신 OPC 핵심 구성 요소를 설치하여 OPCEnum 서비스를 업데이트 할 수 있습니다.

+0

그래, 그게 내 질문이야.하지만 대답은 OPC 서버 스테이션에 소프트웨어를 설치하거나 업데이트 할 수 없다는 점이다. –

+0

그런 다음 IOPCServerList2 대신 IOPCServerList를 사용하도록 OPCEnum을 사용하거나 .NET API를 수정하지 않아야합니다. ProgID 대신 서버의 CLSID를 사용하면이 문제를 피할 수 있습니다. 하지만 .NET API의 100 % 확신 할 수는 없습니다. –

+0

감사합니다 Jouni Aro, 부작용을 무시하는 순서에서'IOPCServerList2'는'IOPCServerList'를 사용하기 위해 변경할 수없는 내부 인터페이스입니다. OPC API를 .NET API에서 다른 Python 기반 API로 바꾸는 문제를 해결했습니다. . –