我目前使用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'。客棧例外 包含有關該問題的詳細信息。內部例外:訪問被拒絕。
我代表OPCOPs,一個QuickOPC製造商。正如其他用戶在這裏的回答和評論中所指出的,這是一個DCOM安全問題。要解釋原始錯誤消息,如果OPCEnum方法不起作用,QuickOPC還會嘗試使用所謂的Remote Registry來解析ProgID。如果沒有方法成功,您會收到此錯誤消息。如果您的管理員不願意啓用DCOM,他很可能不願意啓用遠程註冊表 - 而且,您仍然可以通過DCOM進行實際的OPC通信。 – ZbynekZ
@ZbynekZ感謝您的回覆。儘管我們決定將OPC客戶端安裝在服務器的同一臺計算機上,但您的答案絕對有意義。因此,如果不啓用DCOM,它現在可以正常工作。 – Christopher