C# 远程OPC已连接,但可以';看不懂

C# 远程OPC已连接,但可以';看不懂,c#,dcom,plc,opc,C#,Dcom,Plc,Opc,我正在用C#编写一个定制的OPC客户端应用程序,支持从RSLinx服务器读取数据 首先,我无法远程连接到RSLINX Opc服务器。拒绝访问的异常继续发生 然后,我更改了MyComputer->Com Security->Access Permissions和Launch and Activation Permissions的DCOM设置,为用户“Everyone”启用了所有功能 这允许我连接,但在读取服务器时,我会遇到以下异常- [System.Runtime.InteropServices.

我正在用C#编写一个定制的OPC客户端应用程序,支持从RSLinx服务器读取数据

首先,我无法远程连接到RSLINX Opc服务器。拒绝访问的异常继续发生

然后,我更改了MyComputer->Com Security->Access Permissions和Launch and Activation Permissions的DCOM设置,为用户“Everyone”启用了所有功能

这允许我连接,但在读取服务器时,我会遇到以下异常-

[System.Runtime.InteropServices.COMException]   {"Exception from HRESULT: 0x80040202"}  System.Runtime.InteropServices.COMException
我已经尽可能多地浏览了网络,它们都归结为与Dcom相关的问题。我只是尝试了Dcom设置的一切。我已确保为MyComputer和RSLinx服务器启用了设置

我正在使用OPCFoundation中的两个.dll文件-opcNetApi.dll,opcNetApi.Com.dll

这是我的代码,(可能很方便)

private void readplc()
{
Opc.URL URL=新的Opc.URL(“opcda://48.5.0.05/RSLinx OPC服务器);
Opc.Da.Server服务器=null;
OpcCom.Factory事实=新的OpcCom.Factory();
server=new Opc.Da.server(事实,空);
尝试
{
server.Connect(url,新的Opc.ConnectData(新的System.Net.NetworkCredential());
}
捕获(异常exy)
{
MessageBox.Show(exy.Message);
}
//创建一个组
Opc.Da.Subscription组;
Opc.Da.SubscriptionState groupState=新建Opc.Da.SubscriptionState();
groupState.Name=“组”;
groupState.Active=true;
group=(Opc.Da.Subscription)server.CreateSubscription(groupState);
//将项目添加到组中。
Opc.Da.Item[]items=新的Opc.Da.Item[6];
items[0]=新的Opc.Da.Item();
项[0]。项名称=“[ALARM]F20:9”;
items[1]=新的Opc.Da.Item();
项目[1]。项目名称=“[ALARM]F22:30”;
items[2]=新的Opc.Da.Item();
项目[2]。项目名称=“[ALARM]F22:6”;
items[3]=新的Opc.Da.Item();
项目[3]。项目名称=“[ALARM]F18:8”;
items[4]=新的Opc.Da.Item();
项目[4]。项目名称=“[ALARM]F22:32”;
items[5]=新的Opc.Da.Item();
项目[5]。项目名称=“[ALARM]F22:5”;
项目=组。附加项目(项目);
尝试
{
group.DataChanged+=new Opc.Da.DataChangedEventHandler(OnTransactionCompleted);//此处引发COM异常
Console.ReadLine();
}
捕获(例外情况除外)
{
MessageBox.Show(例如Message);
Console.ReadKey();
}
}
私有void OnTransaction已完成(对象组、对象hReq、Opc.Da.ItemValueResult[]项)
{
for(int i=0;i
我确信,当我尝试在我试图远程连接的PC上构建作为本地主机连接的应用程序时,代码可以正常工作,它可以愉快地读取数据


希望有人能知道发生了什么,在过去的4个工作日里,我花了12个多小时试图解决这个问题

这对我有用:

_opcServer = new Server(_comFactory, null) { Url = new Opc.URL("opcda://localhost/FactoryTalk Gateway") };
_opcServer.Connect();

可能存在一个重复的问题和。
_opcServer = new Server(_comFactory, null) { Url = new Opc.URL("opcda://localhost/FactoryTalk Gateway") };
_opcServer.Connect();