|
|
发表于 2008-8-1 16:28:18
|
显示全部楼层
来自: 中国河南新乡
转载 (飘在北京的云~~)3 F! E: A* \% K1 q4 X; |- ]( ?
' U6 f$ B) q" y
我从北京买了一本《OPC应用程序入门》,在此之前基本上只是知道有OPC,在五月四日开始,我学了七天。其中有苦有甜。我写下来,权做休息或是练练打字。
" \2 \- Y1 T/ R5 f2 b! B* Y " z" S2 s/ {9 B4 ?) N
第一天
\; s+ _( C0 o: N ' z- x: i5 h6 U; R
安装了《入门》提供的东西,包括是下面几个文件。还有个批处理文件,是一个注册过程。8 R3 q5 W) W$ G
opccomn_ps.dll2 O1 e* N! Z1 d) w2 W! I
opcproxy.dll& R+ H# ]3 a; @3 w* Y( B! N; V
opcdaauto.dll: A/ M* E3 h- x# K. ^
OPCTrend.ocx
1 c. b: q% h+ a' L' k OPCBar.ocx
- p+ \2 B N" }2 {, K9 M. [9 b; u OpcServer.exe
7 E Q6 f5 I$ Q) u: E4 l9 y OPCJDADemoServer.exe5 W. V6 E7 @; R& z: R0 g
* }: K! z& k* k$ a
看了一阵书,知道了前三个是:通用接口,PROXY-STUB,自动化接口。不明白。" {3 }0 B( j% c2 |- O
后面两个是demo 服务器。
: Z" N1 t4 T, @2 L
: E$ r* J) _0 {. S' l5 h- E 上网,用GOOGLE,查OPC,很自然就找到了www.opcconnect.com.,又下了个free: h# e1 X" O9 t* C* X" {" v
服务器。安装了(注册)。
+ U* [/ B) O8 u+ d$ D$ Q# g& s
- g# N9 J+ u$ T& N: N$ t2 F 到了工控网,看到有人在推荐clienttools,就下了一个,叫WXOPC。运行一下,
9 [7 G% e1 h: s, e* H' o ( i/ m$ a' W" n0 C2 A) G" u
点击连接服务器图标,立即出现了三个:1 S( Z/ O- B- t( M M
OPCJ.SAMPLESERVER.1
$ d7 m6 f Q9 G OPCJ.DADEMOSERVER.1
% `/ i& Y/ B% o- R9 Y0 z HEXATEC.PCDATA3 M3 f! M/ x6 b( s; d% G) N
0 G( s# u k9 c# M& a 第三个是opcconnect上download的计算机基本情况的简单程序。; r$ i2 ^( h6 f" Q+ p( U
( e t1 M6 n8 {9 ^& d0 r% M9 y 点击他们,还出现了一些“item”,“value"的内容还在变,有意思。我就想这
8 J; ]6 B {! L6 m: h e 工具还真不错,不知我能不能做到,但一想,如果这些功能都做不到,这OPC就没多少! m' B# x; A T6 A6 V& ^$ C" u% r
人敢学,也就没有市场。
0 P( p d( c- U& {0 B2 Q 1 E( \$ _ O8 x: R" K& P/ ?+ {
有一段时间没用VB了,先热了热身,看了自己过去编过的code。) {# x% v2 x9 R2 k7 P1 \4 i: o
第二日
0 N p8 u! U4 v 今天先看书。, N- K7 U; r- F. l! ^
《OPC应用程序入门》,40元,我花了48元,从汇款到收到用了12天,拿到手上,感觉很单薄。我的看书观点是:在看的过程中迷信书,看完后怀疑书,然后忘记书。尽管这本书上我立即就发现有错误。我还是仔细地看下去。* u! t& e# v. i9 _& D0 E e3 T
0 ^3 ?0 ~1 u5 ^. i6 A9 v c
这是一本教人们用VB编应用客户端程序的书,希望让一般工控技术员认识OPC其实不复杂,最起码编用户程序(客户端)不难。/ O7 {! m) V) j* m0 h, N4 v
7 E& y# t9 d# H1 d
在这之前,我对COM和DCOM技术有所了解,也是很模糊的,OPC以COM和DCOM技术为基础,主要是在服务器端(server),而在用户端并不要很在意它们。" \5 R$ W+ \% a* b. ~2 [
; C/ `3 J0 K" x& v* W$ F7 { 书上对OPC体系有描述,我画了个图。
2 J! A: r& ]( f/ V: V
7 H- f* x" T( Y4 \3 x A* m4 s) c3 G7 ~; J# h8 ?
% h) Z, ~' t9 ?# k OPCserver是COM组件,如果安装(注册了)一个OPCserver后,利用WINDOWS的组件工具可以看到,如果这个server安装在别的计算机上,不是本地机,那它就是个DCOM组件(分布式)。$ W! ]/ x7 Z, `2 [/ d: V
1 T2 d$ t' h8 O7 V0 }8 [ OPC基金会公布了通用接口(用户接口),用C++访问OPCserver只要通过这个接口就可以,并没有必要了解OPCserver是怎么工作的。) B8 H- a- z( d f( m
- s7 \ c% _+ Y1 ^) H) L: u4 L
对于VB、VBA、EXCEL、DELPHI等编程软件或工具,不能直接访问通用接口,而要通过所谓的自动化接口(automation interface),OPC组织发布了 DATA ACESS 2.0,实际上已经有了3.0版。) V: o: u6 z! G- f+ M# O
* W! a) Y9 H5 S, B$ \1 s
而在通用接口和自动化接口之间还有一个东西,是成对使用的,有点象MODEM,在两个接口之间起数据传输作用,有个名字叫PROXY_STUB(代理—占位,翻译还不如不翻译,反正不懂)。+ \7 T* t+ _( N7 ]
9 n& a& u9 O5 `! G" ]$ S& w/ p
我在第一天中安装的几个DLL中:
' U( T% A: \% N/ E2 Q8 R+ R OPCcomn_ps.dll 通用接口
! |- q# O) c# w: Z OPCdaAuto.dll 自动化接口# V* J- s1 ?4 p4 ~, D k
OPCProxy.dll PROXY-STUB, ~9 D$ a) x9 r2 S" _
6 R! Z1 F1 y! c* E. @3 x 我们的任务是用VB编写客户端程序,只要知道怎样用自动化接口就行了。其他的不去钻了,要不一年也搞不明白。
+ A# E0 p; a5 y+ d$ P $ Z% b. G. [, V" q$ p0 N/ t
我运行VB6.0,新建一个新工程,点击菜单中的“工程”.“引用”,选择”OPC AUTOMATION 2.0”,就可以利用自动化接口。
" D0 V1 N* W/ R8 \& F$ s/ ] " R4 J" J1 o5 v& r
《入门》没有建议将这些DLL安装在什么目录,我觉得放在WINDOWS的SYSTEM下是比较好的。
6 z/ U5 g( j/ v+ W; V8 w) t2 C: l
8 R# B3 T$ n2 ? 按照书上的顺序,先了解OPC的数据组织。我也画了图。
+ ?$ [2 p3 v' ?& [& L$ ` 1 I2 h) @+ h1 m( u& b- c8 x. O
7 w3 j1 d8 c5 k
1 k( v* g8 X4 K( ` M; i7 C* M: A8 R3 S" Y7 H' I% I/ `6 L
我们要的就是item,翻译成标签,这就是点,我们所谓的点,比如PLC的I/O点,仪表的数值等。编客户端的开始就是找出数据。
, ?/ V- \6 u G9 z1 T% E l 0 v# C+ i: E/ C- G& d
根据书的介绍,要访问标签,还有其他工作要做。) g' |# }% S+ I! {! o: G
我累了。明天再说。: K3 J$ t! u+ x* n8 d9 d) v8 v7 B
) u# j: `) V! M' x) v 第三天
- {' U5 T. G0 C: b. S 昨天说到访问标签先要做些事。. \6 {, P' U# Y
( L6 I' v! {# w' w+ {1 B+ W2 r! y
首先要找出你要访问的OPC服务器的名字,连接它,建立一个组( GROUP)的集合,在下面建立一个具体的GROUP,在这个组中添加一个或多个标签。才可以访问。
E& N$ N- k$ ^* c ( q9 a: d! \) _# h7 h$ p0 e- j
我用第一天下载的WXOPC工具,看到了三个服务器,我选择了其中一个+ i. e1 h4 K1 A9 K$ i! o ]
hexatec.pcdata.1,是一个计算机基本情况的DEMO服务器,我发现服务器的名字都是这种格式。0 l4 h; h, t% O4 w# p) }
) G! h q/ n9 c* ?( I3 l 按《入门》的样子,做了个客户端的架子,一个小时后完成了服务器的连接,新建组集合,建立一个具体的组。下面有些不清楚。干脆拿《入门》的演示程序打开来研究。
+ z: Q0 d' r+ \4 N+ i+ p! x 直接运行,没问题,看到了数据的变化,决定看其原代码。
$ q8 }% M9 q2 f$ g4 Q) E: a) f# ]2 I0 o ' [1 s% j/ m* @( s8 q! e- [- T! \! ?5 [
它用的是OPCJ.SAMPLESERVER.1这个服务器,没有实际意义,每个数据都可以读写。' _/ z" c+ u& D
我发现标签名可以任意编,好奇怪。但是我用WXOPC看到的标签,数据却不一样。
0 n- _9 o& S" F0 y H 0 V% W% [' ?$ I0 o3 C' u0 Q5 O
我在FORM上加了个text 控件,叫text1,我让服务器名等于text1.text,这样我可以自由换服务器,还不错,几个服务器都可以连接上。但是只有它自己的服务器才可以读出数据。是不是骗人。3 G+ v$ H. U- n: m, F' k! q
1 K+ W& M; T1 a; [$ w8 d# \' \! Z" s
试一下按服务器自己的ItemID去访问,我用WXOPC找出hexatec.pcdata.1的标签名,比如“version”,发现还是出错。
" @/ ^5 G( t0 ^$ | 我又到工控论坛上,问已知标签怎样才可以读出数据。没有人回答。7 B9 [0 n+ }8 n f4 [
' x( H, F% p+ i2 b& l) f
我给自己留下了两个问题:
2 a* x1 a# j. _+ @7 O6 Q- d# w! a2 l 1÷怎样获得本机上得所有OPCserver,获得正确的名字。我看到WXOPC可以。论坛上也很多人在问。
7 X' \1 m/ @( H 2÷如何访问ITEM,取得其数据等。
. S8 y4 J; g+ O& l- b" C * o! v, g$ y- S) `5 I+ {1 P% B0 A
又看了一会书,看了有关OPCSERVERBROWSER的内容,好像是有用。
6 U5 K: y8 k+ f9 N/ q 今天到此为止,: `0 V; u0 r; l
休息
9 P ]. @$ q: g: [4 @' j * A. |* Z: P; m% R
第四天" x3 t: [; D5 c' @: k
熟悉OPCSERVERBROWSER的用法。主要有showbranchs,showleafs,movedown,movetoroot" b6 N' e7 R( V$ K) x
等等。OPC服务器,实际上是一棵树,有brahchs和leafs组成。我编了一个简单的SUB,实现了两层的树的ITEM的枚举,实现不了第三层。这实际上是树的遍历算法问题。我不知怎么做。我准备去问别人。; I+ ~8 M) W X# z1 }' i
4 y7 V$ g, }& p" t7 {5 a2 A4 A 从形式上所谓的GROUP/ITEM 和branch/leaf是一样的,实际上并不是。GROUP是用户自己添加的,并不一定要和OPC服务器Branchs一样,每个LEAF是一个 Item,它们可以有用户任意放在哪个组中,不必考虑在服务器中是在哪个branch下,也不必考虑在第几层。% J( w; d" v* B: H
' l% \0 J+ ]! _) e0 I6 i2 Q/ M4 l" c 既然我知道了每个ITEM的ID,我想我可以得到各自的SEEVERHANDLE(句柄),从而访问到实际的数据。, |2 j$ N* j3 w" z+ X
2 Z& W6 O" V8 a' r4 L 我添加一个组,在其下面建立标签集合,然后用:! J3 j8 i2 X; S8 m/ x3 j+ G
标签组的ADDITEM方法获得句柄。
) ~' y7 [$ S0 |4 H" c: ^6 q. D 用同步读方法就可以得到每个标签的数据。
2 q# u; J8 k$ G0 x
& X7 j6 l5 J! r0 q. D, n$ _ 我发现有问题。昨天我就发现有问题。+ J( F0 P2 J; k' t) w/ A& E. K4 E3 _- z
今天论坛上没有人给我回答,去国外网站看看,www.opcfoundation.org上有个FORUM,内容很多,有真正的专家,其中一个是OPC基金会的技术代表。FAQ上还保留了从1998-2001年的问题及回答。. ?/ Z2 {3 m7 l( g
! C8 f. G" d2 t& z 你相信吗,我真的找到了。有一个叫fullqulifity ItemID的说法,比如下面的情况
. `* m" y- N! |/ ^- f8 R- [6 a bch1(树枝)6 I; {8 }5 L3 Q* }( w
tag11(叶子)
) }+ r1 p& Y$ v2 v; L tag12 (叶子)+ \3 g+ A& y2 e7 {5 K" C: y
bch2. Z' ]- D. f5 o7 V
tag21 (叶子)9 i% N& R( a; b- S
bch22 (树枝)+ Q P- v/ M4 T+ T) E" f$ T
tag221 (叶子); M% I. M+ g1 L% B- Z0 m" @7 o
tag222 (叶子)$ I7 q+ U& ]' G, o# A) }+ |
" S% A9 y) v0 C. @' U
9 Q- E- ]/ w/ j p4 M" b 通常的ITEMID是tag11,tag12,tag21,tag221,tag222这样的+ g- g, Z5 u# p5 e2 X/ U
而Fullqulifity ItemID是bch1.tag11,bcg1.tag12,bch2.bch22.tag221,bch2.bch22.tag222
; L3 \) B/ O5 i8 j. o 应该用OPCSERVERBROWSER的GetItemId()获得。4 z% `3 U4 c" T4 A
1 j7 J: {+ Y3 ~ 修改程序,OK。
" d( _4 X8 N; |" v% I
, O9 I6 x- T4 Y3 n O 还有什么问题,本机服务器的枚举。! s0 Q8 y- r6 ]
明天再说吧。ZZZzzz$ F* n$ ^9 a+ d4 Y ]
( Z) D% W/ N! F, ~' u4 E9 f4 P7 e 第五天
; V: a0 J3 D! }7 t% X+ }
h& o5 C' k/ n( a2 A- k 国外网站上真是有很多有用的东西,不象我们的论坛,原创的少,转载的多,内容也太少了。今天我直奔主题。
; ^& I+ G% c* z. Y, E8 o
1 T% |$ T" h N5 B 上GOOGLE,输入OPC VB SAMPLE CODE ,GO!。很多。
X; W3 ]9 C6 T3 l5 ]5 N3 i 我选择了一个网站:
! e. C9 {: M+ \. ~- b www.kepware.com
! {: Q- M+ h0 k* a. ~ 下载一个叫KEPSERVEREX-OPC-EXAMPLE的东东,21M。哈哈,带原代码的OPC客户端工具。运行,很不错,那个WXOPC和它比较一下,简直......
4 q' m7 Q* C1 Y; B- n
4 C8 L7 E' v7 i! S; R, y2 p 枚举OPCServer的法子:$ Z' A5 D) s5 h u* \
Dim ServerList as Variant
" j0 u9 _ S: {* c& {/ Z Dim i as Integer& H' {% @( r- s4 _. y, v7 ^6 z) I
Serverlist=anOPCServer.getOPcServer(node)& U# X6 }9 e& X! B J9 V7 ~
List1.clear
$ z6 d, y+ ]% k* r2 c6 c" O: W* v* t FOR i=lbound(Serverlist) to ubound(Serverlist)! n; a+ D+ j& t# f
List1.additem serverlist(i)
) [, j$ t9 [' S" } NEXT I) Y' i4 U5 X) i. g5 a1 e Y2 c0 p
* B2 [, ? n+ k0 \4 }+ o% C+ S
就这么简单,为什么在论坛上有这么多人在问,而我也没搞懂。3 F3 w: d' b* o* V2 f) }4 V3 l- S
找到了枚举服务器的办法,在单机上成功。
1 a# {* E9 _$ h/ n; E 其实《入门》也提供了一个DOC文档,是OPC提供的:
5 @/ r' M$ J: f5 M4 _ Data Access Automation Interface Standard Version 2.02
) K$ j0 I1 r1 n* k% Q9 F L0 O & N% Y6 D* X7 v, J4 N6 C
是一个必须的手册,只是有一些错误。错误总是难免的。! p3 L1 Q# b2 R% q- `: U: f
入门如果有人指点,实际上不难,没有指点,实际不容易。好在有网络。1 j3 e9 X, E3 z
5 m1 g, a4 c( X8 K3 g/ a
上班时,我借了本《数据结构》,里面有算法,不知为什么,我却没找到未知层树的遍历算法。上班可能脑袋不清楚吧。
! v3 p/ {3 _) b4 t: h1 J* w " R$ g6 A- K2 a5 u; W( q
第六天. t; t9 `1 _. p) `2 C" e5 [
: q7 D- b" H* C' I! z# ] Q& @+ o
上午,想解决树的问题。昨天的KEPWARE的例子,用了TREEVIEW控件和OPCSERVERBROWSER。) A0 f/ e( I( A+ ~/ C. D1 n
7 }, S% m' @ @5 I! k
我用GOOGLE查找“treeview” “树的遍历”,有了答案,好几个地方。仔细一看都是一个。是利用TREEVIEW和递归算法实现计算机文件目录系统的展开。递归,怎么忘记了。) F8 B" h( C$ V3 w! u
( L" {4 i# w" f6 Y8 m
采用递归算法实现了枚举所有ITEM的过程。用了3个小时。( T4 Q( j2 M6 V7 S) `) n
: ]/ T' o$ c( k& P9 X# R1 l) E
下午休息。
) I l6 i4 n8 w3 q6 {$ X- I t / [- c( \- u! h9 `# R/ m
第七天' Q6 k4 n5 s# p! E" j/ p3 Y
6 ~& H. [, x; D# T$ O9 h/ c
将自己的第一个程序,转成EXE文件,在不同的地方试运行,都正常。6 U8 H: x5 R) {) }3 \, B1 e
! O! I5 X. y8 P 我想起了第一天安装的那些DLL,还要么。试一下/ k, r4 w8 T% N0 Y* ~9 s) B
将一个改名,运行,出错。再试另一个,出错。一个都不能少。记住。. S+ x/ |5 Q* D9 k' ~
OPCcom_pas.dll 通用接口/ R6 p- {, _& G/ w0 z' r! S3 I
OPCAutoda.dll 自动化接口$ X' w' R$ Y5 e: L/ G' M
OPCProxy.dll PROXY-STUB
/ o& | Q% n: J- t' h3 j- u & Q5 w- Z/ y4 m3 S0 L
想起组态软件支持OPC,就用组态王试了一下,发现用OPC和用其他方式没有什么两样。一般设备是先找硬件端口,找设备,找I/O点。而OPC是先找OPC服务器,在找出标签(也是点)。真正的组态没有什么两样。
& d- M) S! ]* I3 r4 c% A0 O
, E9 I" O M9 V; n; w 下午,想做个总结。更想休息,七天了,每天6小时以上。好累。
4 ^: n( j F k * l$ T$ Y5 p4 @" j5 Y
后记& b+ @% I- A7 B H& \& W9 C$ _
这是一次入门的学习,本身没有什么。我却有些感想。
! M ~# \% S# Q; t ; |& P, A+ t0 y. T2 ~7 v# b
OPC还是很难的,最起码,要自己编客户端已经不易,何况还有
8 m8 ^$ f# n m0 @( \/ Z OPC ALARM & EVENT 报警和事件! ~# I5 {, ^: J- J% F* [* p: D C
OPC DX 服务器间数据交换
6 @( ] m0 n) V! c9 x" K OPC SECURITY 安全
2 B% y) B; h3 E* K OPC HISTIRDATA 历史数据库- }/ H: L7 ^) {
OPC XML XML
: ?5 ^7 q0 H6 I7 q5 d OPC .NET FOR .net
& p1 U* b1 t: ~: U6 @ 这些对于一种工控软件是比不可少的。0 }+ k0 n& J- Q7 Q- u
+ e( ?7 F2 y5 j8 T3 x! r$ W 工控行业的发展日新月异,我们这个专业要不断学习。真羡慕医生,白头发代表经验,代表水平。我们呢,白头发代表落后。苦。. B% z F# m9 a8 j* z. P$ y4 w
中国工控落后,我们用的95%以上都是外国货,说明书都是外文。还要学好外文。苦。- ~5 Z: h2 R& z! f8 J7 _
0 E* a s8 h! I% B! ]& t' y
这次有多问题的解决都是在国外网站上找到办法的。有种感觉,在网上什么都可以找到,只要你知道你到底要什么。甜。0 F. H/ o8 S% I7 h2 S
% ]. G* e) H, N" b: C* ?
总算对OPC有了些感觉,累,也甜。 |
|