OPC七日谈 点击:25715 | 回复:102



qzhang2

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:9帖 | 28回
  • 年度积分:0
  • 历史总积分:73
  • 注册:2003年3月31日
发表于:2004-02-25 10:45:00
楼主
我从北京买了一本《OPC应用程序入门》,在此之前基本上只是知道有OPC,在五月四日开始,我学了七天。其中有苦有甜。我写下来,权做休息或是练练打字。 第一天 安装了《入门》提供的东西,包括是下面几个文件。还有个批处理文件,是一个注册过程。 opccomn_ps.dll opcproxy.dll opcdaauto.dll OPCTrend.ocx OPCBar.ocx OpcServer.exe OPCJDADemoServer.exe 看了一阵书,知道了前三个是:通用接口,PROXY-STUB,自动化接口。不明白。 后面两个是demo 服务器。 上网,用GOOGLE,查OPC,很自然就找到了www.opcconnect.com.,又下了个free 服务器。安装了(注册)。 到了工控网,看到有人在推荐clienttools,就下了一个,叫WXOPC。运行一下, 点击连接服务器图标,立即出现了三个: OPCJ.SAMPLESERVER.1 OPCJ.DADEMOSERVER.1 HEXATEC.PCDATA 第三个是opcconnect上download的计算机基本情况的简单程序。 点击他们,还出现了一些“item”,“value"的内容还在变,有意思。我就想这 工具还真不错,不知我能不能做到,但一想,如果这些功能都做不到,这OPC就没多少 人敢学,也就没有市场。 有一段时间没用VB了,先热了热身,看了自己过去编过的code。 第二日 今天先看书。 《OPC应用程序入门》,40元,我花了48元,从汇款到收到用了12天,拿到手上,感觉很单薄。我的看书观点是:在看的过程中迷信书,看完后怀疑书,然后忘记书。尽管这本书上我立即就发现有错误。我还是仔细地看下去。 这是一本教人们用VB编应用客户端程序的书,希望让一般工控技术员认识OPC其实不复杂,最起码编用户程序(客户端)不难。 在这之前,我对COM和DCOM技术有所了解,也是很模糊的,OPC以COM和DCOM技术为基础,主要是在服务器端(server),而在用户端并不要很在意它们。 书上对OPC体系有描述,我画了个图。
OPCserver是COM组件,如果安装(注册了)一个OPCserver后,利用WINDOWS的组件工具可以看到,如果这个server安装在别的计算机上,不是本地机,那它就是个DCOM组件(分布式)。 OPC基金会公布了通用接口(用户接口),用C++访问OPCserver只要通过这个接口就可以,并没有必要了解OPCserver是怎么工作的。 对于VB、VBA、EXCEL、DELPHI等编程软件或工具,不能直接访问通用接口,而要通过所谓的自动化接口(automation interface),OPC组织发布了 DATA ACESS 2.0,实际上已经有了3.0版。 而在通用接口和自动化接口之间还有一个东西,是成对使用的,有点象MODEM,在两个接口之间起数据传输作用,有个名字叫PROXY_STUB(代理—占位,翻译还不如不翻译,反正不懂)。 我在第一天中安装的几个DLL中: OPCcomn_ps.dll 通用接口 OPCdaAuto.dll 自动化接口 OPCProxy.dll PROXY-STUB 我们的任务是用VB编写客户端程序,只要知道怎样用自动化接口就行了。其他的不去钻了,要不一年也搞不明白。 我运行VB6.0,新建一个新工程,点击菜单中的“工程”.“引用”,选择”OPC AUTOMATION 2.0”,就可以利用自动化接口。 《入门》没有建议将这些DLL安装在什么目录,我觉得放在WINDOWS的SYSTEM下是比较好的。 按照书上的顺序,先了解OPC的数据组织。我也画了图。
我们要的就是item,翻译成标签,这就是点,我们所谓的点,比如PLC的I/O点,仪表的数值等。编客户端的开始就是找出数据。 根据书的介绍,要访问标签,还有其他工作要做。 我累了。明天再说。 第三天 昨天说到访问标签先要做些事。 首先要找出你要访问的OPC服务器的名字,连接它,建立一个组( GROUP)的集合,在下面建立一个具体的GROUP,在这个组中添加一个或多个标签。才可以访问。 我用第一天下载的WXOPC工具,看到了三个服务器,我选择了其中一个 hexatec.pcdata.1,是一个计算机基本情况的DEMO服务器,我发现服务器的名字都是这种格式。 按《入门》的样子,做了个客户端的架子,一个小时后完成了服务器的连接,新建组集合,建立一个具体的组。下面有些不清楚。干脆拿《入门》的演示程序打开来研究。 直接运行,没问题,看到了数据的变化,决定看其原代码。 它用的是OPCJ.SAMPLESERVER.1这个服务器,没有实际意义,每个数据都可以读写。 我发现标签名可以任意编,好奇怪。但是我用WXOPC看到的标签,数据却不一样。 我在FORM上加了个text 控件,叫text1,我让服务器名等于text1.text,这样我可以自由换服务器,还不错,几个服务器都可以连接上。但是只有它自己的服务器才可以读出数据。是不是骗人。 试一下按服务器自己的ItemID去访问,我用WXOPC找出hexatec.pcdata.1的标签名,比如“version”,发现还是出错。 我又到工控论坛上,问已知标签怎样才可以读出数据。没有人回答。 我给自己留下了两个问题: 1÷怎样获得本机上得所有OPCserver,获得正确的名字。我看到WXOPC可以。论坛上也很多人在问。 2÷如何访问ITEM,取得其数据等。 又看了一会书,看了有关OPCSERVERBROWSER的内容,好像是有用。 今天到此为止, 休息 第四天 熟悉OPCSERVERBROWSER的用法。主要有showbranchs,showleafs,movedown,movetoroot 等等。OPC服务器,实际上是一棵树,有brahchs和leafs组成。我编了一个简单的SUB,实现了两层的树的ITEM的枚举,实现不了第三层。这实际上是树的遍历算法问题。我不知怎么做。我准备去问别人。 从形式上所谓的GROUP/ITEM 和branch/leaf是一样的,实际上并不是。GROUP是用户自己添加的,并不一定要和OPC服务器Branchs一样,每个LEAF是一个Item,它们可以有用户任意放在哪个组中,不必考虑在服务器中是在哪个branch下,也不必考虑在第几层。 既然我知道了每个ITEM的ID,我想我可以得到各自的SEEVERHANDLE(句柄),从而访问到实际的数据。 我添加一个组,在其下面建立标签集合,然后用: 标签组的ADDITEM方法获得句柄。 用同步读方法就可以得到每个标签的数据。 我发现有问题。昨天我就发现有问题。 今天论坛上没有人给我回答,去国外网站看看,www.opcfoundation.org上有个FORUM,内容很多,有真正的专家,其中一个是OPC基金会的技术代表。FAQ上还保留了从1998-2001年的问题及回答。 你相信吗,我真的找到了。有一个叫fullqulifity ItemID的说法,比如下面的情况 bch1(树枝) tag11(叶子) tag12 (叶子) bch2 tag21 (叶子) bch22 (树枝) tag221 (叶子) tag222 (叶子) 通常的ITEMID是tag11,tag12,tag21,tag221,tag222这样的 而Fullqulifity ItemID是bch1.tag11,bcg1.tag12,bch2.bch22.tag221,bch2.bch22.tag222 应该用OPCSERVERBROWSER的GetItemId()获得。 修改程序,OK。 还有什么问题,本机服务器的枚举。 明天再说吧。ZZZzzz 第五天 国外网站上真是有很多有用的东西,不象我们的论坛,原创的少,转载的多,内容也太少了。今天我直奔主题。 上GOOGLE,输入OPC VB SAMPLE CODE ,GO!。很多。 我选择了一个网站: www.kepware.com 下载一个叫KEPSERVEREX-OPC-EXAMPLE的东东,21M。哈哈,带原代码的OPC客户端工具。运行,很不错,那个WXOPC和它比较一下,简直...... 枚举OPCServer的法子: Dim ServerList as Variant Dim i as Integer Serverlist=anOPCServer.getOPcServer(node) List1.clear FOR i=lbound(Serverlist) to ubound(Serverlist) List1.additem serverlist(i) NEXT I 就这么简单,为什么在论坛上有这么多人在问,而我也没搞懂。 找到了枚举服务器的办法,在单机上成功。 其实《入门》也提供了一个DOC文档,



dachuan

  • 精华:1帖
  • 求助:0帖
  • 帖子:4帖 | 11回
  • 年度积分:0
  • 历史总积分:108
  • 注册:2003年7月14日
发表于:2003-09-03 21:34:00
41楼
请问 OPCProxy.dll 1.0 与 OPCProxy.dll 2.0 区别 谁有OPCProxy.dll 1.0 请发至 dachuan11@yahoo.com.cn xie xie

qzhang2

  • 精华:1帖
  • 求助:0帖
  • 帖子:10帖 | 28回
  • 年度积分:0
  • 历史总积分:73
  • 注册:2003年3月31日
发表于:2003-09-04 12:07:00
42楼
http://www.opcfoundation.org/Downloads/Data Access/OPC DA 1.00a Specification.zip

summer8029538

  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 3回
  • 年度积分:0
  • 历史总积分:12
  • 注册:2003年9月04日
发表于:2003-09-05 10:25:00
43楼
我是一个新手,请问如果我的目的是用c++编写服务器端的程序,我在最初的时候应该做些什么,应该看些什么书? 谢谢!

qzhang2

  • 精华:1帖
  • 求助:0帖
  • 帖子:10帖 | 28回
  • 年度积分:0
  • 历史总积分:73
  • 注册:2003年3月31日
发表于:2003-09-06 08:00:00
44楼
summer: 你好,既然你用c++,我想你对COM原理和技术应该很好。在这种情况下,国内出版的书并没有合适的书,看来你只好到国外的OPC网站上去找东西了。我的文章中提到的几个网站,资料非常多。在上面可以找到答案。

一个

  • 精华:0帖
  • 求助:0帖
  • 帖子:7帖 | 13回
  • 年度积分:0
  • 历史总积分:86
  • 注册:2002年9月10日
发表于:2003-09-06 11:54:00
45楼
qzhang2: 只能从Client向Sever中加点吗? Sever是如何找到下位机中的点? 希望能得到你的回答!谢谢!

qzhang2

  • 精华:1帖
  • 求助:0帖
  • 帖子:10帖 | 28回
  • 年度积分:0
  • 历史总积分:73
  • 注册:2003年3月31日
发表于:2003-09-07 16:16:00
46楼
一个: 从工控用户来说,OPC解决了数据的采集和传输问题,包括本机和远程的。 server是产品供应商或者软件商提供的。它可以让用户程序访问哪些数据是在server编制时确定的,用户挑着用就可以了。server如何找到下位机的数据我也不清楚,但我想必须由供应商提供通讯协议吧。 不知道哪位高手会知道?请帮大家讲解。

tuolin

  • 精华:0帖
  • 求助:0帖
  • 帖子:11帖 | 117回
  • 年度积分:0
  • 历史总积分:134
  • 注册:2004年3月01日
发表于:2003-09-08 10:57:00
47楼
server 内有Client建点的COM指针,当数据刷新时会用指针通知Client的函调函数。

一个

  • 精华:0帖
  • 求助:0帖
  • 帖子:7帖 | 13回
  • 年度积分:0
  • 历史总积分:86
  • 注册:2002年9月10日
发表于:2003-09-09 11:50:00
48楼
qzhang2: 1、客户端程序(自己编的) >>> OPC Sever >>> HMI >>> PLC 2、客户端程序(自己编的) >>> OPC Sever >>> PLC 这两种方式的主要区别是什么?谢谢!!!

qzhang2

  • 精华:1帖
  • 求助:0帖
  • 帖子:10帖 | 28回
  • 年度积分:0
  • 历史总积分:73
  • 注册:2003年3月31日
发表于:2003-09-09 18:14:00
49楼
一个: HMI一般是直接从PLC中获得数据,从过去的情况来看,HMI和PLC通常还是同一公司的产品。 但是,HMI从本身的含义来说,完全可以从OPCserver获得数据,也就是可以不同公司的产品。 另外,一个自己编写得客户端程序加上其运行平台也可以是一个标准HMI。 所以,就我的看法,这两种方式并没有什么本质的差别。 不知你认为如何? 请大家发表意见。

gongkongedit

  • 精华:1099帖
  • 求助:0帖
  • 帖子:14392帖 | 54470回
  • 年度积分:0
  • 历史总积分:622
  • 注册:2008年9月08日
发表于:2003-09-23 14:19:00
50楼
我用的dOPC的delphi控件,似乎就可以不用那几个DLL了。我对OPC的ALERM和EVENT现在还不是很理解,有人可以讲解一下么?

qzhang2

  • 精华:1帖
  • 求助:0帖
  • 帖子:10帖 | 28回
  • 年度积分:0
  • 历史总积分:73
  • 注册:2003年3月31日
发表于:2003-10-27 19:15:00
51楼
10月16-18日的北京FA/PA展览会上居然,没有OPC的任何展示.是不是OPC华而不实.各位有什么看法?

gongkongedit

  • 精华:1099帖
  • 求助:0帖
  • 帖子:14392帖 | 54470回
  • 年度积分:0
  • 历史总积分:622
  • 注册:2008年9月08日
发表于:2003-10-29 11:44:00
52楼
偶觉得OPC是趋势,至少上位机的程序就统一了嘛。

xwxwxw

  • 精华:0帖
  • 求助:0帖
  • 帖子:18帖 | 69回
  • 年度积分:0
  • 历史总积分:136
  • 注册:2002年12月02日
发表于:2003-10-29 15:35:00
53楼
可是实在是相关的资料太少,要大力发展,可能很困难. 相关的推广机构应该加大中文的开发力度,毕竟中国的程序员的薪金的门槛最低。

cszxh

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 18回
  • 年度积分:0
  • 历史总积分:64
  • 注册:2003年3月01日
发表于:2003-11-17 22:40:00
54楼
qzhang2: 你好。请问《OPC应用程序入门》是由哪个出版社出版。我想在长沙本地买。

mufeng02

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 22回
  • 年度积分:0
  • 历史总积分:26
  • 注册:2003年1月23日
发表于:2003-11-21 12:16:00
55楼
好贴!我也买了本研究了一番,只是我软件水平有限,还有许多东西不清楚。但是opc确实是好东西,因为我是做应用的,用过fix和intouch,对plc很熟悉,以前做hmi只能用fix之类的咚咚,且如果是不同厂家的控制器组网很麻烦,需要不同的driver。但现在我用的一个国外的软件,可以很方便地连接各种控制硬件,它提供了一个modbus opc和一个sever,我就可以将各种dcs和plc用modbus通讯,然后用同一个hmi显示。

仪表新兵

  • 精华:1帖
  • 求助:0帖
  • 帖子:38帖 | 387回
  • 年度积分:0
  • 历史总积分:508
  • 注册:2003年4月14日
发表于:2003-11-23 11:52:00
56楼
hao

w俄eww

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 15回
  • 年度积分:0
  • 历史总积分:28
  • 注册:2003年7月07日
发表于:2003-11-25 16:51:00
57楼
qzhang2: 我也下载了KEPSERVEREX,安装,注册后运行“Simple VB OPC Automation Example”,按下"LIST OPC SERVERS"后便死机,且列表为空,请问你是怎么运行“Simple VB OPC Automation Example”的,望赐教!!

qzhang2

  • 精华:1帖
  • 求助:0帖
  • 帖子:10帖 | 28回
  • 年度积分:0
  • 历史总积分:73
  • 注册:2003年3月31日
发表于:2003-12-07 08:45:00
58楼
to wang_qzh: 只要正确地注册了OPC的几个DLL,应该不会错的。不知你解决了没有

w俄eww

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 15回
  • 年度积分:0
  • 历史总积分:28
  • 注册:2003年7月07日
发表于:2003-12-08 09:04:00
59楼
配置COM-DCOM后OK

w俄eww

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 15回
  • 年度积分:0
  • 历史总积分:28
  • 注册:2003年7月07日
发表于:2003-12-09 13:38:00
60楼
在编译“Simple VB OPC Automation Example”时,使用OPC Automation 2.0,则运行正常

热门招聘
相关主题

官方公众号

智造工程师