2017-07-18 96 views
0

我目前使用OPC Labs的QuickOPC庫。我目前的目的是編寫一個.NET控制檯應用程序來從Matrikon Simulation OPC服務器讀取項目值。使用QuickOPC連接遠程OPC服務器

模擬服務器在IP地址可用的遠程機器上運行,我需要輸入用戶名和密碼才能登錄到此遠程機器。

我當前的代碼如下:

NetworkSecurity networkSecurity = new NetworkSecurity(UserName, Password, MachineName); 
ServerDescriptor serverDescriptor = new ServerDescriptor("\\\\xxx.xxx.xxx.xxx\\Matrikon.OPC.Simulation.1", networkSecurity); 
serverDescriptor.Scheme = "opcda"; 
DAItemDescriptor itemDescriptor = new DAItemDescriptor(ItemID); 

Console.WriteLine(client.ReadItemValue(serverDescriptor, itemDescriptor)); 

例外如下:

例外:錯誤代碼-1073442759 (0xC0049039)OCC urred,源自一個OPC操作故障 'OpcLabs.EasyOpcRaw.DataAccess.RawEasyDAClient'。客棧例外 包含有關該問題的詳細信息。內部例外:沒有方法 可用於將ProgID轉換爲CLSID。

如果我嘗試使用CLSID

ServerDescriptor("\\\\xxx.xxx.xxx.xxx\\{F8582CF2-88FB-11D0-B850-00C0F0104305}", networkSecurity); 

異常變爲:

例外:錯誤代碼的OPC操作失敗-2147024891 (0X80070005)OCC urred,源自 'OpcLabs.EasyOpcRaw.DataAccess.RawEasyDAClient'。客棧例外 包含有關該問題的詳細信息。內部例外:訪問被拒絕。

+1

我代表OPCOPs,一個QuickOPC製造商。正如其他用戶在這裏的回答和評論中所指出的,這是一個DCOM安全問題。要解釋原始錯誤消息,如果OPCEnum方法不起作用,QuickOPC還會嘗試使用所謂的Remote Registry來解析ProgID。如果沒有方法成功,您會收到此錯誤消息。如果您的管理員不願意啓用DCOM,他很可能不願意啓用遠程註冊表 - 而且,您仍然可以通過DCOM進行實際的OPC通信。 – ZbynekZ

+0

@ZbynekZ感謝您的回覆。儘管我們決定將OPC客戶端安裝在服務器的同一臺計算機上,但您的答案絕對有意義。因此,如果不啓用DCOM,它現在可以正常工作。 – Christopher

回答

1

「內部例外:訪問被拒絕」,這意味着您必須啓用服務器和客戶端之間的DCOM通信。用於服務器應用程序和OPCEnum服務(用於將ProgID轉換爲CLSID)。

https://www.google.com/search?q=dcom+configuration+for+opc

+0

感謝您的回答。我聯繫了服務器的管理員。他確認DCOM可能是其原因,儘管他不能將其用於安全策略問題。謝謝你們一樣。 – Christopher

+0

如果無法打開DCOM(這是可以理解的),可以考慮隧道OPC,例如通過[OPC UA網關](https://www.prosysopc.com/products/opc-ua-gateway/)或類似產品。這使您只能在服務器和客戶端之間打開一個專用IP端口,這比打開整個DCOM更安全。 –