发表于:2003-05-27 09:59:00
楼主
关于OPC yykk 2002.12.24
OPC是基于COM方法实现的。所以它的运行等和COM相似。
现在,组态王6.0可以作为OPC服务器。并且它带的kingvewcliend.dll中定义好了一系列函数可被OPC客户端调用。客户端可以由第三房厂商提供也可自己编程实现。现在我的OPC客户端是一个VC程序,将调用kingvewcliend.dll中的函数实现和OPC服务软件通信。
OPC的实现成功好象和环境配置很有关,象COM一样。
现在实现的只是在同一台机器上OPC客户(VC)和OPC服务器(组态王6.0演示版)通讯成功。系统WIN98SE,客户VC6。0,服务组态王6。0演示版
关于运行OPC的环境配置
1。注册regsvr32 opcproxy.dll (没注册它我的VC做的OPC客户程序和组态王OPC服务程序连接上了,它到底什么用?)
opccomn_ps.dll (不注册它找不到OPC SERVER的PROGID)
opcae_ps.dll (没注册它我的VC做的OPC客户程序和组态王OPC服务程序连接上了,它到底什么用?)
opchda_ps.dll。 (没注册它我的VC做的OPC客户程序和组态王OPC服务程序连接上了,它到底什么用?)
以上这些是不是类似com的代理/存根。
2。确定系统中有actxprxy.dll否则安装 (它是干吗的)
3。opcenum /regserver (它好象可以用来列举OPC服务器)
4。把组态王目录下的Touchvew.exe "F:\Program Files\Kingview\Touchvew.exe" /regserver (注册OPC服务器组件。不这样的话找不到OPC SERVER的PROGID)
关于VC程序调试
1。组态王提供了一整套与组态王的OPC服务器连接的函数接口,这些函数可通过提供的动态库KingvewCliend.dll来实现。用户使用该动态库可以自行用VB、VC等编程语言编制组态王的OPC客户端程序。把KingvewCliend.dll放在自己的VC程序目录下,但是经过调试直接使用 KingvewCliend.dll中的引出函数int StartCliend(char* node);总是返回-2,意思为找不到OPC SERVER的PROGID 。
2。从网上下载了某公司的OPC服务和客户程序的测试版开发包。在它的VC做的OPC客户程序中,是通过测试版的KOCRDK.dll和OPC服务器通讯。其中KOCRDK.dll的引出函数包括BOOL KOC_Init(),KOC_Connect等。
3。觉得KingvewCliend.dll中的引出函数int StartCliend(char* node)很象KOCRDK.dll中的引出函数KOC_Connect。但在某公司的VC做的OPC客户程序中先是调用了KOCRDK.dll中的引出函数KOC_Init才进行KOC_Connect等操作。且KOC_Connect函数中将弹出意味着限制版的对话框。
4。把KOCRDK.dll也放在自己的VC程序目录下,只调用KOCRDK.dll的KOC_Init()函数。再调用KingvewCliend.dll中的引出函数int StartCliend(char* node),返回为0,成功,且组态王程序自动启动。所以感觉上KOCRDK.dll中的KOC_Init()函数是不是类似于COM客户程序,用来初始化COM库。然后
KingvewCliend.dll中的引出函数int StartCliend(char* node)找到注册组件,这里就是组态王OPC SERVER的PROGID,再调用类似COM的CoCreateInstanceEx()连接函数?
5。在自己的VC做的OPC客户程序中用::CoInitialize(NULL)代替KOCRDK.dll的KOC_Init()函数,成功。说明KOCRDK.dll的KOC_Init()函数确实是用来初始化COM库的。推测没错。
6。目前只能在一台机器上实现OPC客户和OPC服务的通讯。两台机器上没有成功。可能的原因大概是:1、OPC Server在客户端及服务器端是否正确配置(用DCOMCNFG.exe工具);2、安全设置权限是否设置正确。这就象我以前练习的COM程序一样,也只实现了一台机器上的调用。
yykk 2002.12.25
两台机子上实现OPC客户和服务。连接成功。具体通讯还没实验。
测试环境1。客户机WIN98SE,分别使用了rockwell组态软件的OPC TEST CLIENT和网上下载的KOCDemo软件作为OPC客户端。
服务器为Win2000AdvanceServer。网上下载的KOSDemo做OPC服务软件。
服务器为Sied域管理机,客户机以zy登陆Sied域。服务器以Administrator登陆。
关于运行OPC的环境配置
1。客户机服务器都注册regsvr32 opcproxy.dll (没注册它我的VC做的OPC客户程序和组态王OPC服务程序连接上了,它到底什么用?)
opccomn_ps.dll (不注册它找不到OPC SERVER的PROGID)
opcae_ps.dll (没注册它我的VC做的OPC客户程序和组态王OPC服务程序连接上了,它到底什么用?)
opchda_ps.dll。 (没注册它我的VC做的OPC客户程序和组态王OPC服务程序连接上了,它到底什么用?)
以上这些是不是类似com的代理/存根。
2。客户机服务器确定系统中有actxprxy.dll否则安装 (它是干吗的)
3。客户机服务器opcenum /regserver (它好象可以用来列举OPC服务器)
4。客户机服务器都需要注册KOSDemo.exe。KOSDemo.exe自带了注册方式(服务器组件不仅要在服务器安装注册,也要在客户端安装注册,COM中的代理/存根也是这样吧?)
开始调试
1。DCOM的实现成功两点很重要,即服务器端的DCOM的配置和WINDOW的权限。(因为客户端是WIN98SE,几乎不需要什么配置。本来说你要调用的服务程序在哪台机子 上,你就在DCOM配置中指定。但现在我的OPC客户程序都允许在程序中指定,所以。。。不过也要注意一下DCOM的默认配置有没有不对)在服务器上运行 dcomcnfg.exe。对KOSDemo.exe进行配置。配置见“DCOM配置--2”。总之把服务器和你的客户机套近乎。在这里我一般都加了客户机zy和服务器自己的 Administrator用户。(因为客户机zy登陆sied,服务器Administrator登陆sied?)其它的设置也不知是否必须。总之按“DCOM配置--2”改。
2。直接在客户机上分别运行rockwell组态软件的OPC TEST CLIENT和网上下载的KOCDemo软件,服务器端软件自动运行。OPC TEST CLIENT软件连接,加组,加列都 没问题,KOCDemo软件连接可以,加组,加列报错,不知何故?
测试环境2。客户机WIN98SE,分别使用了rockwell组态软件的OPC TEST CLIENT和网上下载的KOCDemo软件作为OPC客户端。
服务器为WIN98SE。网上下载的KOSDemo做OPC服务软件。
服务器以jyq登陆Sied域,客户机以zy登陆Sied域。
关于运行OPC的环境配置同上。
开始调试
1。因为WIN98SE的DCOM配置和WINNIT以上的配置选项不同,且几乎没有什么要配置的,但不配置的话两台机器的软件始终不能连通。基于从服务器端的DCOM的配置 和WINDOW的权限考虑,原因放在服务器的配置上。
2。发现网上邻居的属性表中的访问控制中的选项有点奇怪。把共享级访问控制选成用户级访问控制,下面的“获取用户及组的列表”文本框中自动显示sied。确定 后。再打开DCOM配置一看,爽,原来灰色的用户默认存取许可等选项可以编辑了。马上把用户zy加上。重启,还是不行。
3。想一想,客户机是zy登陆,服务器是jyq登陆,把jyq,Administrator都加上,(administrator可以不要吧?)重启,直接在客户机上分别运行rockwell组态软 件的OPC TEST CLIENT和网上下载的KOCDemo软件,怎么还是连接不上。实在是没有办法了。。。。。。在服务器上手动启动KOSDemo,然后再在客户机上运行客 户端软件,成功。难道是WIN2000AdvanceServer作为服务器时服务器软件可自动启动,Win98做服务器却不可以???
4。OPC TEST CLIENT软件连接,加组,加列都没问题,KOCDemo