首页 上一页 1 2 下一页 尾页

请问客户程序怎么样能够知道机器上注册的opc server啊? 点击:14008 | 回复:34



myopc

    
  • 精华:1帖
  • 求助:0帖
  • 帖子:25帖 | 43回
  • 年度积分:0
  • 历史总积分:159
  • 注册:2002年9月05日
发表于:2003-09-16 08:26:00
楼主



tuolin

  • 精华:0帖
  • 求助:0帖
  • 帖子:11帖 | 117回
  • 年度积分:0
  • 历史总积分:134
  • 注册:2004年3月01日
发表于:2003-04-18 16:43:00
1楼
查注册表! HKEY_CLASSES_ROOT |---TUOLIN.TOOLKIT.02 |--CLSID |--OPC RegEnumKey ............................. 自已试试! TUOLIN.TOOLKIT.02 为tuolin opc server的名称!

deng_lp

  • 精华:5帖
  • 求助:0帖
  • 帖子:65帖 | 2669回
  • 年度积分:0
  • 历史总积分:2876
  • 注册:2001年6月19日
发表于:2003-04-19 11:59:00
2楼
有完整的程序吗?

deng_lp

  • 精华:5帖
  • 求助:0帖
  • 帖子:65帖 | 2669回
  • 年度积分:0
  • 历史总积分:2876
  • 注册:2001年6月19日
发表于:2003-04-21 09:36:00
3楼
这两种方法都是可行的! 1. reg 2. opcenum

boy369

  • 精华:0帖
  • 求助:0帖
  • 帖子:5帖 | 72回
  • 年度积分:0
  • 历史总积分:87
  • 注册:2003年3月18日
发表于:2003-04-22 08:14:00
4楼
通常使用opcenum

boy369

  • 精华:0帖
  • 求助:0帖
  • 帖子:5帖 | 72回
  • 年度积分:0
  • 历史总积分:87
  • 注册:2003年3月18日
发表于:2003-04-22 08:15:00
5楼
通常使用opcenum ,要VB原代码找我!

boy369

  • 精华:0帖
  • 求助:0帖
  • 帖子:5帖 | 72回
  • 年度积分:0
  • 历史总积分:87
  • 注册:2003年3月18日
发表于:2003-04-28 17:41:00
6楼
过几天,好吗?我出差了!

bottleping

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 16回
  • 年度积分:0
  • 历史总积分:21
  • 注册:2002年4月16日
发表于:2003-04-28 19:28:00
7楼
我也需要:bottleping@sohu.com,谢谢

cwb_2000

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 4回
  • 年度积分:0
  • 历史总积分:20
  • 注册:2003年1月02日
发表于:2003-05-01 15:02:00
8楼
可以也给我一份吗? 我的E-mail是:cwb_2000@hotmail.com,谢谢! 请问opcenum怎么使用?

haodelong

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 10回
  • 年度积分:0
  • 历史总积分:32
  • 注册:2001年8月28日
发表于:2003-05-06 08:37:00
9楼
给我一份好吗?   我的E-mail是:huozk@vip.sina.com 谢谢!   请问opcenum怎么使用?

yu2018

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 40回
  • 年度积分:0
  • 历史总积分:82
  • 注册:2002年7月25日
发表于:2003-05-06 10:38:00
10楼
其实很简单: 1. 使用OPC服务器浏览器对象 下面一段代码显示了利用IOPCServerList接口浏览本地或远程计算机中已安装的OPC数据访问服务器的方法,省略处理错误返回代码步骤 MULTI_QI mqi; COSERVERINFO sin, *sinptr; DWORD clsctx; unsigned long c; CLSID clsid; IEnumGUID *pEnumGUID; CLSID catid = CATID_OPCDAServer20;//OPC数据访问服务器2.0组件目录 IOPCServerList *gpOPC = NULL; clsid = CLSID_OPCServerList; // set up server info sinptr = &sin; sin.dwReserved1 = sin.dwReserved2 = 0; sin.pwszName = szNodeName; // szNodeName为本地或远程计算机名 sin.pAuthInfo = 0; clsctx = CLSCTX_REMOTE_SERVER; // set up mqi mqi.pIID = &IID_IOPCServerList; mqi.hr = 0; mqi.pItf = 0; HRESULT hr = CoCreateInstanceEx(clsid, NULL, clsctx, sinptr, 1, &mqi);// 创建OPC服务器的浏览器对象 gpOPC =(IOPCServerList*)mqi.pItf; //获得IOPCServerList接口 // 查询OPC DA 2.0 组件目录接口指针 hr = gpOPC->EnumClassesOfCategories(1, &catid, 1, &catid, &pEnumGUID); //获得支持OPC DA2.0数据服务器的CLSID while (S_OK == pEnumGUID->Next(1, &clsid, &c)) { LPOLESTR pszProgID; LPOLESTR pszUserType; hr = gpOPC->GetClassDetails(clsid, &pszProgID, &pszUserType); //打印OPC数据服务器的有关信息 printf("ProgID = %ls, UserType = %ls\n", pszProgID, pszUserType); CoTaskMemFree(pszProgID); CoTaskMemFree(pszUserType); } // Free the interfaces if(gpOPC) gpOPC->Release(); 客户获得的clsid可以用来创建相应的OPC服务器。 2.枚举OPC服务器 在早先的版本里,OPC规范规定了用OPC子健来标识OPC服务器在注册表里的入口。客户必须按这个OPC子健进行浏览。这种方法效率较低,因为它要求浏览所有的CLSID条目,命名冲突也会时常发生。但这个方法比较简单,在OPC客户端程序中也有较多的应用,它不支持远程计算机。 HKEY hk = HKEY_CLASSES_ROOT; TCHAR szKey[MAX_KEYLEN]; WCHAR wszServerName[100]; TCHAR szOPCName[100]; CLSID clsid; USES_CONVERSION; for(int nIndex = 0;::RegEnumKey(hk, nIndex, szKey, MAX_KEYLEN) == ERROR_SUCCESS; nIndex++) { HKEY hProgID; TCHAR szDummy[MAX_KEYLEN]; if(::RegOpenKey(hk, szKey, &hProgID) == ERROR_SUCCESS) { LONG lSize = MAX_KEYLEN; if(::RegQueryValue(hProgID, "OPC", szDummy, &lSize) == ERROR_SUCCESS) wcscpy(wszServerName, T2W(szKey)); //获得OPC数据服务器的CLSID HRESULT hr =::CLSIDFromProgID(wszServerName, &clsid ); ::RegCloseKey(hProgID); } } 一般情况以上代码就可以枚举本机内的所有OPC服务器,还可以通过测试服务器对象是否支持连接点来判断它是否支持OPC DA 2.0。

deng_lp

  • 精华:5帖
  • 求助:0帖
  • 帖子:65帖 | 2669回
  • 年度积分:0
  • 历史总积分:2876
  • 注册:2001年6月19日
发表于:2003-05-06 10:40:00
11楼
把CLSCTX_LOCAL_SERVER换为 CLSCTX_REMOTE_SERVER CoCreateInstanceEx(clsid, NULL, CLSCTX_REMOTE_SERVER, sinptr, 1, &mqi);

gongkongedit

  • 精华:1099帖
  • 求助:0帖
  • 帖子:14392帖 | 54470回
  • 年度积分:0
  • 历史总积分:622
  • 注册:2008年9月08日
发表于:2003-07-24 18:46:00
12楼
yu2018: 你好! 我用你介绍的方法来枚举OPC服务器,但在程度编译过程中发现“T2W”这个函数未定义,能否具体说一下,谢谢!!1

小流氓

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 14回
  • 年度积分:0
  • 历史总积分:64
  • 注册:2002年9月15日
发表于:2003-07-24 18:52:00
13楼
yu2018:    你好!    我用你介绍的方法来枚举OPC服务器,但在程度编译过程中发现“T2W”这个函数未定义,能否具体说一下,谢谢!! 还有就是用第一种方法时会出现很多未定义的字符,比如"IOPCServerList",能否告知出现了什么问题。 谢谢!! liuweili1978@sohu.com

deng_lp

  • 精华:5帖
  • 求助:0帖
  • 帖子:65帖 | 2669回
  • 年度积分:0
  • 历史总积分:2876
  • 注册:2001年6月19日
发表于:2003-07-25 08:19:00
14楼
T2W是普通字串转为widechar的函数. 还要有一些头文件. opcda.h....

ldw3432

  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 12回
  • 年度积分:0
  • 历史总积分:23
  • 注册:2004年1月31日
发表于:2003-09-08 16:27:00
15楼
我有个opc server 和client 我实在是他吗的本怎么联不上 请帮帮我具体怎么联 步骤 谢谢 ldw3432@sina.com

周星星

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 32回
  • 年度积分:0
  • 历史总积分:45
  • 注册:2003年8月25日
发表于:2003-09-16 08:26:00
16楼
非常感谢!

刘清

  • 精华:0帖
  • 求助:0帖
  • 帖子:18帖 | 16回
  • 年度积分:0
  • 历史总积分:70
  • 注册:2003年12月10日
发表于:2004-04-12 13:32:00
17楼
yuhui2018,您好! 我看过你2003-05-06号于在工控网上发表的关于使用OPCENUM的编程代码,我试了一下,创建远程服务器上的OPCENUM对象没问题,获取接口IOPCServerList也没问题,但在使用hr=IOPCServerList->EnumClassesOfCategories(1, &catid, 1, &catid, &pEnumGUID)时失败,hr值显示“访问拒绝”的提示,请问什么原因,另外:我用过其他的OPC Client试过可以实现远程访问OPC Server,包括显示指定机器上的所有OPCServer以及同其联接。这表明DCOM的配置不会有问题。如蒙赐教不上感激。

窒息的鱼

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 16回
  • 年度积分:0
  • 历史总积分:22
  • 注册:2003年7月30日
发表于:2004-08-02 09:36:00
18楼
请问,谁知道CLSID_OPCServerList这的东西在那里定义呀?谢谢,郁闷了好几天了!

无知的天才

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 1回
  • 年度积分:0
  • 历史总积分:7
  • 注册:2004年7月15日
发表于:2004-08-22 21:39:00
19楼
EXTERN_C const CLSID CLSID_OpcServerList; #ifdef __cplusplus class DECLSPEC_UUID("13486D51-4821-11D2-A494-3CB306C10000") OpcServerList; #endif #endif /* __OpcEnumLib_LIBRARY_DEFINED__ */ /* Additional Prototypes for ALL interfaces */ /* end of Additional Prototypes */ #ifdef __cplusplus 在Opcenum.h中,实际上由OPCEnum.idl定义

swishine

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 12回
  • 年度积分:0
  • 历史总积分:119
  • 注册:2003年10月17日
发表于:2004-09-10 11:46:00
20楼
VB远程连接访问OPC SERVER,能给我代码吗?

热门招聘
相关主题

官方公众号

智造工程师
    首页 上一页 1 2 下一页 尾页