|
发表于 2008-8-1 16:28:18
|
显示全部楼层
来自: 中国河南新乡
转载 (飘在北京的云~~)' m! V9 t/ ~5 _+ z0 N
, Q4 u4 {( |' k7 L7 m我从北京买了一本《OPC应用程序入门》,在此之前基本上只是知道有OPC,在五月四日开始,我学了七天。其中有苦有甜。我写下来,权做休息或是练练打字。" q2 P. T- y2 r+ j* T6 x- P- T d
, I: f6 p" [" n) L! y 第一天
: z8 J; J; K; M, Z: ~; {0 [ 7 `% f9 ^0 ^" ]; y! H3 L: Z
安装了《入门》提供的东西,包括是下面几个文件。还有个批处理文件,是一个注册过程。* A# [ _) m8 ]8 V
opccomn_ps.dll
& ~' H: j1 E5 X: [ opcproxy.dll
5 G T. Z$ V4 Y j+ c1 ] opcdaauto.dll+ `: J3 Z" J8 Q/ Z5 ?! \# w
OPCTrend.ocx
% Z, D* s" z) k5 k% K; j. P5 E" C# { OPCBar.ocx& Q- i) P, x- U7 w g% L5 C* D! e
OpcServer.exe
4 R; }/ m( U+ X* H6 P/ o OPCJDADemoServer.exe! \# B8 A6 y. E7 _# x$ t- `
& {' Y: a3 G o$ Q* P 看了一阵书,知道了前三个是:通用接口,PROXY-STUB,自动化接口。不明白。
, S8 t; i3 y7 F8 I/ L6 L 后面两个是demo 服务器。
5 ^: z1 z @/ r- h* u/ `( { 8 H3 x6 V8 o4 [) B7 H1 u
上网,用GOOGLE,查OPC,很自然就找到了www.opcconnect.com.,又下了个free4 g; d1 k" r7 I; u4 e6 |' W
服务器。安装了(注册)。4 h% y: m" D+ B5 O& a7 \. T% D
" R( F% h0 [2 c! o 到了工控网,看到有人在推荐clienttools,就下了一个,叫WXOPC。运行一下,
. y$ n3 s2 j* p
8 s6 \; Y6 R/ m5 J- [1 F 点击连接服务器图标,立即出现了三个:
2 ~$ |$ }4 h6 c/ v! V OPCJ.SAMPLESERVER.1
7 m& u0 @% d. l. y1 y OPCJ.DADEMOSERVER.1; S- I! O' l7 z4 }: _
HEXATEC.PCDATA m' ?6 V7 l9 u. f) W! l) V5 U
# d9 a1 E6 v1 ?" Q6 O s 第三个是opcconnect上download的计算机基本情况的简单程序。
. U* o! M+ P" j " G0 ]: C8 d3 }9 n4 D% X
点击他们,还出现了一些“item”,“value"的内容还在变,有意思。我就想这, u1 a( g- `- `5 x
工具还真不错,不知我能不能做到,但一想,如果这些功能都做不到,这OPC就没多少
4 ?: `$ m; g+ ^3 } 人敢学,也就没有市场。9 z* u" v6 B4 a7 W+ v
* \, n0 r- R: `0 f( n7 A) l
有一段时间没用VB了,先热了热身,看了自己过去编过的code。; V0 w1 L2 y8 f
第二日- H& K+ {( a+ @ b3 ?" l
今天先看书。
5 Y- g$ {( O6 f$ N0 O6 x$ k- A 《OPC应用程序入门》,40元,我花了48元,从汇款到收到用了12天,拿到手上,感觉很单薄。我的看书观点是:在看的过程中迷信书,看完后怀疑书,然后忘记书。尽管这本书上我立即就发现有错误。我还是仔细地看下去。
3 k' ]/ W* r- R0 ~5 c' W
( E Y! X" ~% x" V* I D O 这是一本教人们用VB编应用客户端程序的书,希望让一般工控技术员认识OPC其实不复杂,最起码编用户程序(客户端)不难。
8 h- H% M1 D6 g- ?1 N% y
. D8 l! C5 z1 P5 C 在这之前,我对COM和DCOM技术有所了解,也是很模糊的,OPC以COM和DCOM技术为基础,主要是在服务器端(server),而在用户端并不要很在意它们。
; o1 p; k8 O/ j" d" z8 `( H
* a( R4 |0 U" X" I. y( O 书上对OPC体系有描述,我画了个图。) k, d0 s) G: U1 K# v3 A
& ^$ n3 H& s& D8 I) |+ I. H
$ O0 L' d! N1 d: l B4 @5 u
2 r: R0 E/ d; A8 k( E OPCserver是COM组件,如果安装(注册了)一个OPCserver后,利用WINDOWS的组件工具可以看到,如果这个server安装在别的计算机上,不是本地机,那它就是个DCOM组件(分布式)。
: J" m; Y5 r6 g- l
$ I' v% r1 b* S7 c OPC基金会公布了通用接口(用户接口),用C++访问OPCserver只要通过这个接口就可以,并没有必要了解OPCserver是怎么工作的。9 j+ U4 F3 z z- \
0 M; @+ z7 X( _1 r3 ?6 _ b6 j+ _
对于VB、VBA、EXCEL、DELPHI等编程软件或工具,不能直接访问通用接口,而要通过所谓的自动化接口(automation interface),OPC组织发布了 DATA ACESS 2.0,实际上已经有了3.0版。0 A8 q# i1 z% @2 Y) B* q
, U4 c! J. n% S% x( s* f9 O/ P 而在通用接口和自动化接口之间还有一个东西,是成对使用的,有点象MODEM,在两个接口之间起数据传输作用,有个名字叫PROXY_STUB(代理—占位,翻译还不如不翻译,反正不懂)。
) _. x: w1 \: @% t! e4 P2 W( u D
7 Z# I2 r* y2 ]* o6 U 我在第一天中安装的几个DLL中:
0 G3 p; B( Z+ Q! W2 a OPCcomn_ps.dll 通用接口4 c( X2 _# ~: G9 M
OPCdaAuto.dll 自动化接口
# p% D. [- t- R( f0 G/ n OPCProxy.dll PROXY-STUB3 D, w9 P* Y, o0 d1 z
. C+ h* d3 ?2 F, Q. \ 我们的任务是用VB编写客户端程序,只要知道怎样用自动化接口就行了。其他的不去钻了,要不一年也搞不明白。
2 d) `3 ?# a) i$ L1 I0 p
/ w% T( R, e- H/ A# V) w5 P 我运行VB6.0,新建一个新工程,点击菜单中的“工程”.“引用”,选择”OPC AUTOMATION 2.0”,就可以利用自动化接口。
4 w- u9 t% U7 n* a! [ n" E; W
J0 @4 \9 d- A& p4 l, e- l+ B 《入门》没有建议将这些DLL安装在什么目录,我觉得放在WINDOWS的SYSTEM下是比较好的。: s) u, I1 x& j) J7 O( r# K
* f; W' k& J l M
按照书上的顺序,先了解OPC的数据组织。我也画了图。
: k- H: P( z% P$ W& ?' j' f9 A0 v
( V/ Z. T5 X$ L. O1 v! E" |8 A& N; R& V
+ R, T5 ]! m- {$ |; j* _# @* @
6 Y. U5 K( }1 d! j4 L& y 我们要的就是item,翻译成标签,这就是点,我们所谓的点,比如PLC的I/O点,仪表的数值等。编客户端的开始就是找出数据。& L* [( [8 H5 W) C( @
; i0 ^$ l% N/ W y* _/ D2 i8 q 根据书的介绍,要访问标签,还有其他工作要做。
% x$ E) J; K6 Y) W 我累了。明天再说。- J; I" { Q. j8 r- R, j
. B. R# n+ A n9 v
第三天
) v- C6 k G: Z, ]" F X 昨天说到访问标签先要做些事。; z; H5 U( S5 w4 t v' Q. {" D: v/ J$ E0 a
, ^1 Y! T! w3 b; }. }. } 首先要找出你要访问的OPC服务器的名字,连接它,建立一个组( GROUP)的集合,在下面建立一个具体的GROUP,在这个组中添加一个或多个标签。才可以访问。- C4 ], n, O& p3 q0 Z( a
8 _) E) }. q7 b
我用第一天下载的WXOPC工具,看到了三个服务器,我选择了其中一个
, R0 {9 m R! e$ R; K7 q- U hexatec.pcdata.1,是一个计算机基本情况的DEMO服务器,我发现服务器的名字都是这种格式。" A" s$ q' O" W2 V
8 v* T a9 G9 ^+ `- H8 g: \9 {( n8 F
按《入门》的样子,做了个客户端的架子,一个小时后完成了服务器的连接,新建组集合,建立一个具体的组。下面有些不清楚。干脆拿《入门》的演示程序打开来研究。0 S2 F+ z, Z9 ^* `* M. u" t' I6 p
直接运行,没问题,看到了数据的变化,决定看其原代码。
1 K: Q' h4 l: O4 r0 M' z ! L* s' l. C2 h2 q0 B7 ^8 z* s
它用的是OPCJ.SAMPLESERVER.1这个服务器,没有实际意义,每个数据都可以读写。: \; y- S, R" G1 r, u. h6 [/ B+ J
我发现标签名可以任意编,好奇怪。但是我用WXOPC看到的标签,数据却不一样。$ K: I) D& B, o/ `+ @8 r2 z
& x' y; i3 U, f4 K4 F& u
我在FORM上加了个text 控件,叫text1,我让服务器名等于text1.text,这样我可以自由换服务器,还不错,几个服务器都可以连接上。但是只有它自己的服务器才可以读出数据。是不是骗人。
5 f4 E( X2 h# a( w1 i
- m% ]4 ]# Z' o7 Y" Q! e' G4 L 试一下按服务器自己的ItemID去访问,我用WXOPC找出hexatec.pcdata.1的标签名,比如“version”,发现还是出错。# ]. N( V% C& x
我又到工控论坛上,问已知标签怎样才可以读出数据。没有人回答。. a% g0 W/ y2 V& r! n) V
+ \5 X8 I1 h& C4 h. g0 | 我给自己留下了两个问题:* f- H, {9 Z( U# [+ r- N( M
1÷怎样获得本机上得所有OPCserver,获得正确的名字。我看到WXOPC可以。论坛上也很多人在问。
" o7 K4 s- z6 j/ X 2÷如何访问ITEM,取得其数据等。
- C) e3 T: P x2 Z / c# t( B/ F( @2 N5 |# _0 P `
又看了一会书,看了有关OPCSERVERBROWSER的内容,好像是有用。
3 G4 {7 S# Q7 f; [+ }0 l1 B 今天到此为止,3 d# W9 e6 G8 I, Q8 V. ?. n
休息
* Q+ k- Q: K& C' I( i. ^
8 y4 S- _( D& q; i5 h! w 第四天
# e! A& h+ Y4 a9 x 熟悉OPCSERVERBROWSER的用法。主要有showbranchs,showleafs,movedown,movetoroot
: O/ c0 T) p0 b% K; E$ ~; P: V1 O 等等。OPC服务器,实际上是一棵树,有brahchs和leafs组成。我编了一个简单的SUB,实现了两层的树的ITEM的枚举,实现不了第三层。这实际上是树的遍历算法问题。我不知怎么做。我准备去问别人。2 ~) `1 C. x3 X- s6 G* G8 p
4 D& B, }9 p% i9 L1 A+ W$ k
从形式上所谓的GROUP/ITEM 和branch/leaf是一样的,实际上并不是。GROUP是用户自己添加的,并不一定要和OPC服务器Branchs一样,每个LEAF是一个 Item,它们可以有用户任意放在哪个组中,不必考虑在服务器中是在哪个branch下,也不必考虑在第几层。: M3 H; a# v6 Z( } T/ ?1 y; K5 E$ ]; q
0 N3 v P1 G+ |$ B' ~- Q/ j# \
既然我知道了每个ITEM的ID,我想我可以得到各自的SEEVERHANDLE(句柄),从而访问到实际的数据。
7 L0 E* d$ c1 ?) a( ` - g* A$ g% V6 j- Z* d5 ~7 |9 k3 `
我添加一个组,在其下面建立标签集合,然后用:
, T8 T3 v5 V, \ K$ | 标签组的ADDITEM方法获得句柄。1 v# ]1 y. h6 @9 e# n" V! g$ Y8 p6 n
用同步读方法就可以得到每个标签的数据。
8 N0 e8 `5 Z9 ]# @. l. L' g 7 Y0 q2 V+ m1 l X9 Z. s
我发现有问题。昨天我就发现有问题。. G2 }5 A! v$ q- V' h' |( Y
今天论坛上没有人给我回答,去国外网站看看,www.opcfoundation.org上有个FORUM,内容很多,有真正的专家,其中一个是OPC基金会的技术代表。FAQ上还保留了从1998-2001年的问题及回答。
& _3 i0 _) s/ @# A 6 Y7 x5 {6 U$ R- K
你相信吗,我真的找到了。有一个叫fullqulifity ItemID的说法,比如下面的情况$ |1 [, _2 B: v- V& w
bch1(树枝), h( d& p9 E1 L3 i
tag11(叶子)
4 p1 C3 x: p, |% H( x Y1 e8 ~! } tag12 (叶子)8 d( p: b7 d" Z3 t8 h' V
bch2
+ F* ^* N4 f* M tag21 (叶子)
- ^2 i8 B- E3 g, F: U% ?+ u6 W bch22 (树枝)
" @' I1 Y# J) e6 z% [6 _ tag221 (叶子)7 x: H" C( Y4 l$ {( x, X
tag222 (叶子)1 @. R" ]" f' P, K+ }4 t5 C# u
$ @7 B8 ~. l" z3 O4 I
* @: Q( |5 h9 r, y 通常的ITEMID是tag11,tag12,tag21,tag221,tag222这样的. k8 ?' @& w8 E8 E
而Fullqulifity ItemID是bch1.tag11,bcg1.tag12,bch2.bch22.tag221,bch2.bch22.tag2221 a' z+ Z: o$ }3 }: W4 N( n
应该用OPCSERVERBROWSER的GetItemId()获得。5 u7 g; f: o: E
+ y: r* Y: _ e p
修改程序,OK。) _% n9 \. d8 F9 { a/ E+ C5 V" o
% b6 M: b6 z- w/ g5 @
还有什么问题,本机服务器的枚举。
b9 F( O! K) r! S0 } 明天再说吧。ZZZzzz4 y9 Q6 g- R5 l8 g* ^) U9 p. H+ k# O& u
, {6 U* M ]5 F' B 第五天7 ^4 T) N5 z* B$ b2 o
8 W5 s4 U C- f! p4 F 国外网站上真是有很多有用的东西,不象我们的论坛,原创的少,转载的多,内容也太少了。今天我直奔主题。' S0 e$ F: W- ~" @3 @4 z1 g
: w" @5 [( A7 i+ K4 s# L7 C 上GOOGLE,输入OPC VB SAMPLE CODE ,GO!。很多。
+ k. j9 i$ _3 ]( U R2 X( h 我选择了一个网站:
' |- T# s; [# f. j' T0 j www.kepware.com/ T; a; a7 M5 `4 s& ~/ h
下载一个叫KEPSERVEREX-OPC-EXAMPLE的东东,21M。哈哈,带原代码的OPC客户端工具。运行,很不错,那个WXOPC和它比较一下,简直......
: ?+ I4 {9 D/ T* p% R: z. ]% `* s; O 5 ] P. K1 _- ?3 f. \! y
枚举OPCServer的法子:
5 _$ B5 v4 j n9 b h8 K) _* P3 q Dim ServerList as Variant
9 d9 A4 L; V( G+ W Dim i as Integer* w7 ^* Q: P3 Q/ e0 l
Serverlist=anOPCServer.getOPcServer(node)
- W' }, I7 B; ] E List1.clear0 i, {# u/ L( {* F
FOR i=lbound(Serverlist) to ubound(Serverlist); F% Z% R T6 n" V2 |+ u9 G
List1.additem serverlist(i)' z; r) E9 n+ d( r3 l3 i: N
NEXT I! }1 f+ @- z- j" V1 a6 K: B6 r
. E$ q6 \2 [; w# `4 C" a+ E# f# |
就这么简单,为什么在论坛上有这么多人在问,而我也没搞懂。5 n- G# f6 T L! t( W
找到了枚举服务器的办法,在单机上成功。( \) d1 F5 @& Q7 e, F
其实《入门》也提供了一个DOC文档,是OPC提供的:
# \1 }3 T8 n& u7 w! B Data Access Automation Interface Standard Version 2.02
+ C1 [( y, \& g0 _2 i2 F, \4 c ; @! v P/ d2 O5 J+ E+ U# m
是一个必须的手册,只是有一些错误。错误总是难免的。9 B8 T% S- n& L
入门如果有人指点,实际上不难,没有指点,实际不容易。好在有网络。
# a& f% _: D0 O8 R8 \ * n b7 m4 p4 f: l; |' S* _
上班时,我借了本《数据结构》,里面有算法,不知为什么,我却没找到未知层树的遍历算法。上班可能脑袋不清楚吧。
1 F: T& a0 I3 |4 @ ( A+ H) x# }0 E) N2 F! ]
第六天
/ {0 p- @" ~' X! i# j+ [! _ ; p2 q1 q: _: p# V4 N) s
上午,想解决树的问题。昨天的KEPWARE的例子,用了TREEVIEW控件和OPCSERVERBROWSER。
: \5 x. x; W5 E0 @- b7 l & s A3 T/ ^" L# M5 ?
我用GOOGLE查找“treeview” “树的遍历”,有了答案,好几个地方。仔细一看都是一个。是利用TREEVIEW和递归算法实现计算机文件目录系统的展开。递归,怎么忘记了。
! L n M2 x3 r+ ^ $ k p; p8 R1 s, \% r1 j& n( O s$ p: x! N
采用递归算法实现了枚举所有ITEM的过程。用了3个小时。
; A8 p. C( @9 b8 s & O; _- A- N8 y! A* Q
下午休息。0 ~: Q3 S. D7 l4 G0 Q
3 [, V$ i, m$ k; j4 I {1 Q; S
第七天
6 ^3 e7 R9 N; i2 d1 c; a0 o 1 b, ^; p6 W2 e0 R- D5 j
将自己的第一个程序,转成EXE文件,在不同的地方试运行,都正常。
& s, a# w2 Z. v# `3 f0 n Q- o6 W9 g6 O
我想起了第一天安装的那些DLL,还要么。试一下
- M1 |) Z, ?5 s" f, E 将一个改名,运行,出错。再试另一个,出错。一个都不能少。记住。) b" Y9 X+ L5 _
OPCcom_pas.dll 通用接口# G+ I. Z9 v9 J5 I+ Y" T& G8 J
OPCAutoda.dll 自动化接口
* o/ ~; n+ r& N2 ] OPCProxy.dll PROXY-STUB5 D% H4 e/ P. }
4 L/ C) c3 E4 q+ U5 C. a 想起组态软件支持OPC,就用组态王试了一下,发现用OPC和用其他方式没有什么两样。一般设备是先找硬件端口,找设备,找I/O点。而OPC是先找OPC服务器,在找出标签(也是点)。真正的组态没有什么两样。' C; ]' n1 b% n- F8 m, ~. ]
) G' Z: G7 S* J6 {! M2 C
下午,想做个总结。更想休息,七天了,每天6小时以上。好累。1 l2 J6 X! C* a) G: J2 J0 u/ E+ L
! W8 ] h* q. y* d, f9 I* P 后记7 c* C6 Z! K6 H9 R, C
这是一次入门的学习,本身没有什么。我却有些感想。
6 ^" @+ F" [( f ( H; O# b+ `: O' a
OPC还是很难的,最起码,要自己编客户端已经不易,何况还有5 s4 y' p2 x0 Q7 M* r; z
OPC ALARM & EVENT 报警和事件) x8 ~4 t" _+ D: P: `
OPC DX 服务器间数据交换
/ @( H N$ D, {3 J7 d9 ]) | OPC SECURITY 安全1 j, l3 i7 p+ f; {9 m: o l
OPC HISTIRDATA 历史数据库: q R3 T7 M2 h4 A B: Z3 b+ i! \
OPC XML XML
' X6 j9 K8 M- H7 k: r OPC .NET FOR .net2 ]. ?/ ^" w7 D5 F \" z+ U) t# Q
这些对于一种工控软件是比不可少的。
, k1 q+ w8 J3 n5 j . G* B; y8 A7 ^9 A6 `9 A
工控行业的发展日新月异,我们这个专业要不断学习。真羡慕医生,白头发代表经验,代表水平。我们呢,白头发代表落后。苦。
/ G( B- Z6 u( x 中国工控落后,我们用的95%以上都是外国货,说明书都是外文。还要学好外文。苦。: _. r; ]/ y! `) Q8 T x x1 }% W
k. J ^# c% M4 M) Z% j3 u3 t 这次有多问题的解决都是在国外网站上找到办法的。有种感觉,在网上什么都可以找到,只要你知道你到底要什么。甜。
$ `, x- e/ v: T1 y7 _
% p) L+ n4 Z+ r/ h6 I* N 总算对OPC有了些感觉,累,也甜。 |
|