1、NX主程序安装完成后有没有替换XX文件。
2、NX许可服务程序安装完以后,ugslmdexe文件有没有替换。
3、NX软件全部安装完成后有没有重新启动电脑。
4、电脑上是否存在多个版本的NX许可服务,NX2~NX4共用,NX6~NX12共用,若重复安装之间的许可服务,应卸载版本低的NX许可服务,再重启电脑。
楼主你这种问题是因为 在 MatrikonOPC Explorer 添加组时默认的是异步传输,异步传输建立组时, 客户端向服务端发起组建立申请后,服务端马上会反向建立一个端口是135的连接。你这个报错是Could not establish data callback connection on group 因为客户端的DCOM没有配置好,相信你用MatrikonOPC Explorer 添加组是选用同步传输模式,就不会报错,我也是OPC小白,最近刚研究,你的问题我也遇到过,表述的也不好,大概就是这个意思
------------------------------------------------------
过去3年多了,早就不搞OPC了。发现还陆续有人咨询,最后我的环境定位原因是 两台电脑的计算机名一样。 因为使用的虚拟环境,测试机都是直接克隆过来的。 当计算机名相同时不能异步通信,改名就正常了
第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 = Type.GetTypeFromCLSID(guid)
OPCListObj = Activator.CreateInstance(typeoflist)
ifList = (IOPCServerList)OPCListObj
if (ifList == null)
Marshal.ThrowExceptionForHR(HRESULTS.E_ABORT)
ifList.EnumClassesOfCategories(1, ref catid, 0, ref catid, out EnumObj)
if (EnumObj == null)
Marshal.ThrowExceptionForHR(HRESULTS.E_ABORT)
ifEnum = (IEnumGUID)EnumObj
if (ifEnum == null)
Marshal.ThrowExceptionForHR(HRESULTS.E_ABORT)
int maxcount = 300
IntPtr ptrGuid = Marshal.AllocCoTaskMem(maxcount * 16)
int count = 0
ifEnum.Next(maxcount, ptrGuid, out count)
if (count <1)
{ Marshal.FreeCoTaskMem(ptrGuid)return}
serverslist = new OpcServers[count]
byte[] guidbin = new byte[16]
int runGuid = (int)ptrGuid
for (int i = 0i <counti++)
{
serverslist[i] = new OpcServers()
Marshal.Copy((IntPtr)runGuid, guidbin, 0, 16)
serverslist[i].ClsID = new Guid(guidbin)
ifList.GetClassDetails(ref serverslist[i].ClsID,
out serverslist[i].ProgID, out serverslist[i].ServerName)
runGuid += 16
}
Marshal.FreeCoTaskMem(ptrGuid)
Dispose()
}
用此代码连接本地OPC服务器是没有问题的,但是通过上面对注册表的编辑,将服务器换成远程服务器,就不能访问,代码运行起来还是连接的是本地OPC服务器。请教各位我该如何设置才能连接远程OPC服务器
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)