1,检查相同的用户名和密码是否都具有管理员权限;
2,检查两台机器是否防火墙已经关闭;
3,检查两台机器的访问模式是否是经典形式;
4,检查DCOM配置中的权限设置。
可以去网上搜索下载个matrikonopcsimulation,来帮助你进行DCOM配置。运行VBSimaticNetexe,然后进行设置。
1、运行VBSimaticNetexe,右键单击OPCDA。
2、从OPC-DA服务器标签中选择新建。
3、在服务器属性对话框中,勾选运行服务器,设置服务器名称,并选择相应的数据源。
4、单击确定,完成WinCCOPCDA设置 *** 作。<meta name="source" content="lake">
1、打开Kepware软件
2、右键连接性,新建通道,添加通道向导中选择OPC DA Client或者OPC UA Client均可,选择下一步。
3、通道名字起个自己可以识别的名字,如果是工业互联网现场实施需要预先制定驱动命名规范。
4、Server Browse中选择需要连接的OPC服务
5、添加设备,设备名字按照要求设置,其他默认,在Import Items中选择需要连接的点位。
6、到这一步OPC服务的连接就建好了,下一步可以用OPC Client监视模拟的点位的状态了。不宜生搬硬套,理解这些语句的含义,你就明白怎么做了。
你的语句是添加条目的,用法是:组名集合名additem(条目名称)。
连wincc的服务器也是一样的写法,确认好名称就好了。不同系统间通过远程桌面登陆的用户和在本机上登陆的同一账户的权限是不一样的,所以可能出现能浏览计算机及OPCServer,但不能连接OPCServer,要把OPCServer的DCOM中的配置的改为Interactive的启动方式。第三方是远程读取吗?
你们用OPC客户端测试软件读取IFIX OPC的数据是远程读取吗?
本地读取不需要DCOM设置,远程则必须设置。
ifix opc服务器在DCOM下的文件名称啥的,都是不需要的,你的第三方水平有限吧。第62行的代码,DCOM既然是远程服务器,那它就应该是可以运行在另外一台机器上,然后被其他机器的客户端所使用。所以C++的客户端代码里,你可以通过编程的方式指定服务器的名称,但是对于C#来说,因为连接到DCOM服务器并激活COM对象的 *** 作是由CLR完成的,没有办法在代码里指定。不过不用着急,指定DCOM服务器还有另外一个方式,就是修改注册表的键值,告诉本机的COM运行库,服务器在另外一台机器上,请把下面的键值添加到客户端机器的注册表里:
HKEY_CLASSES_ROOT\APPID\{5e9ddec7-5767-11cf-beab-00aa006c3606}\RemoteServerName=<机器名>
下面的是我的代码
public void ListAll(Guid catid, out OpcServers[] serverslist)
{
serverslist = null;
Dispose();
Guid guid = new Guid("13486D51-4821-11D2-A494-3CB306C10000");
Type typeoflist = TypeGetTypeFromCLSID(guid);
OPCListObj = ActivatorCreateInstance(typeoflist);
ifList = (IOPCServerList)OPCListObj;
if (ifList == null)
MarshalThrowExceptionForHR(HRESULTSE_ABORT);
ifListEnumClassesOfCategories(1, ref catid, 0, ref catid, out EnumObj);
if (EnumObj == null)
MarshalThrowExceptionForHR(HRESULTSE_ABORT);
ifEnum = (IEnumGUID)EnumObj;
if (ifEnum == null)
MarshalThrowExceptionForHR(HRESULTSE_ABORT);
int maxcount = 300;
IntPtr ptrGuid = MarshalAllocCoTaskMem(maxcount 16);
int count = 0;
ifEnumNext(maxcount, ptrGuid, out count);
if (count < 1)
{ MarshalFreeCoTaskMem(ptrGuid); return; }
serverslist = new OpcServers[count];
byte[] guidbin = new byte[16];
int runGuid = (int)ptrGuid;
for (int i = 0; i < count; i++)
{
serverslist[i] = new OpcServers();
MarshalCopy((IntPtr)runGuid, guidbin, 0, 16);
serverslist[i]ClsID = new Guid(guidbin);
ifListGetClassDetails(ref serverslist[i]ClsID,
out serverslist[i]ProgID, out serverslist[i]ServerName);
runGuid += 16;
}
MarshalFreeCoTaskMem(ptrGuid);
Dispose();
}
用此代码连接本地OPC服务器是没有问题的,但是通过上面对注册表的编辑,将服务器换成远程服务器,就不能访问,代码运行起来还是连接的是本地OPC服务器。请教各位我该如何设置才能连接远程OPC服务器
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)