OPC服务器使用OPCDA.NET工具远程访问

我在Windows C#中开发OPC客户端。 我已经开发了代码并读取采样上的OPC项目以及基于事件(OnDataChange)。 当我使用本地机器时,我的代码可以正常使用Sampling和OnDataChange,但是当我尝试从远程OPC服务器读取数据时,Sampling工作正常,但我无法获取基于事件的进程的数据。 我能够连接到OPC服务器但是当我添加订阅它然后我收到错误。

HRESULT:0x80040202。

group1.DataChanged += new DataChangeEventHandler(this.DataChangeHandler); group1.AdviseIOPCDataCallback();//exception HRESULT : 0x80040202. 

OPC服务器已连接然后注册该组,但我在读取数据时遇到exception。

问题通常是当您使用Advise() ,服务器将DCOM连接回客户端(标准DCOM连接点)。 需要正确设置客户端以允许这种情况发生(即允许服务器在客户端上执行代码的正确安全设置)。

您应该阅读此页面: http : //www.softwaretoolbox.com/xpsp2/ ,它涵盖了有关如何正确设置DCOM以用于OPC使用的许多建议。 这里有很多安全问题。 Software Toolbox网站有很多很棒的信息(以及video)。 如果您仍然无法使其工作,我建议您投资使用OPC隧道产品,该产品将允许您进行远程OPC,而无需跳过所有DCOM循环。

您不必使用OPCDA.NET来解决相同的问题。 您可以使用任何OPC客户端,让它首先与您的远程服务器一起工作,然后专注于弄清楚如何将它全部连接到OPCDA.NET中。 我推荐OPC Quick Client(附带Software Toolbox TOP Server演示)。

你实际遇到的问题是回调。 换句话说,它不是你失败的建议调用,它是来自OPC服务器的回调(它建议触发器)。 此错误通常是由用户身份validation问题引起的(即两台计算机上的用户帐户不匹配)。 查看远程计算机上OPC服务器的用户帐户。 如果您的本地计算机上不存在,则表明您遇到了问题!

有一个自动化的应用程序可以帮助您找出问题所在。 我建议你下载OPC Expert(Google it)。 它是一个免费的应用程序,不需要安装,也不会更改Windows注册表。 它已经多次拯救了我。 此外,供应商(OPCTI)非常有帮助,所以检查出来。

这个问题是因为当你连接到服务器时,你可能会使用第一个connect函数,即server.connect();

相反,尝试:

 server.connect(new Opc.ConnectData(new System.Net.NetworkCredential())); 

这对我有用。 希望能帮助到你:)