📄 opc技术在工业自动化软件中的应用--《plc&fa》网络版.htm
字号:
Interface)。客户化接口是一个OPC服务器所必须实现的接口,它描述了OPC组件对象的接口和其中的方法,适合C++和PASCAL语言设计,并可实现最佳运行性能的客户应用程序,客户化接口没有项的对象,它对项的操作都是通过包容此项的组对象进行的。自动化接口是可选接口,它提供的是一个自动配置和存取过程控制数据的接口,它方便了Visual
Basic、Excel及其它可以使用OLE自动化的服务器应用程序接口的高级商业软件使用。自动化接口实际上是在客户化接口上的自动化封装,为此,OPC基金会提供了一套标准的自动化包装器(wrapperDLL),这个包装器可用来包装任何客户化服务器,图3给出了客户化接口与自动化接口的关系。
</P>
<P><STRONG><FONT color=#000084>3
OPC技术在自动化软件中的应用实现<BR></FONT></STRONG>
某化工企业的管理一体化方案实施中,要将现场的实时数据采集到上位监控计算机中,存入本地数据库,并将数据传送到管理网络的数据库中,共企业进行管理、调度及工艺优化。除了考虑数据安全性和实时性等因素外,我们主要从提高整个系统的灵活性和开放性方面入手,决定采用OPC这一标准接口实现数据的采集和上传。<BR></P>
<P>系统的软件结构参见图3:</P>
<P align=center><IMG
src="OPC技术在工业自动化软件中的应用--《PLC&FA》网络版.files/200510814401269316.gif"></P>
<P align=center>图3
系统软件结构图<BR></P>
<P><BR>
监控计算机是一台工控计算机,内安装有数据采集卡(通用多串口卡,网卡),软件安装有OPC Server和OPC
Client。OPC
Server连接现场数控制设备,负责数据采集,数据存储,故障报警等功能。集成在客户应用程序(OPC
Client)分别调用各自的服务器接口函数,读取OPC
Server采集过来的实时数据传递给用户界面,完成对现场各个设备检测、监控、调节、诊断等功能。<BR>
OPC软件的设计在系统所需的OPC接口软件中,包括OPC服务器软件和OPC客户软件,均为独立开发,本论题只讨论OPC客户软件的开发<BR>该软件的设计目的,是把OPC服务器的数据写入管理网络的SQL
Server数据库保存起来。考虑到系统对数据的实时性要求较高,开发工具才应用VC++6.0,与OPC服务器的通讯采用OPC定制接口,对SQL
Server数据库的操作采用ADO
API。<BR>该软件包括两个模块:OPC数据采集和数据保存。模块之间采用Win32的多线程技术进行通讯,OPC数据采集作为工作线程在后台运行,数据保存即写系统主线程。工作线程的线程函数循环读取OPC服务器中的数据,数据的变化不断出发主线程的写库事件。此外为了保证数据的安全性,使用了信号灯同步对象,以协调两个线程对共享资源的访问。<BR></P>
<P><STRONG><FONT color=#000084>3.1
OPC数据采集模块的设计</FONT></STRONG><BR>
该模块按照以下步骤写完与OPC服务器的连接,以及对服务器缓冲区数据的读取。该程序在delphi6上编译通过。<BR>Var<BR>Hr:HResult;<BR>Begin<BR>try<BR>//
we will use the custom OPC interfaces, and<BR>//
OPCProxy.dll will handle<BR>// marshaling for us
automatically (if registered)<BR>ServerIf :=
CreateComObject(ProgIDToClassID(ServerProgID)) as
IOPCServer;<BR>except<BR>ServerIf := nil;<BR>end;<BR>if
ServerIf <> nil
then<BR>begin<BR>Writeln('已经连接到OPC服务器Connected to OPC
server');<BR>end<BR>else
begin<BR>Writeln('不能连接OPC服务器Unable to connect to OPC
server');<BR>Exit;<BR>end;<BR>// now add a
group//向OPC服务器中加入组<BR>// Group_My<BR>HR :=
ServerAddGroup(ServerIf, 'Group_My', True, 500, 0,
GroupIf, GroupHandle);<BR>if Succeeded(HR)
then<BR>begin<BR>Writeln('添加组成功!');<BR>end<BR>else
begin<BR>Writeln('添加组失败!');<BR>Exit;<BR>end;<BR>//向组中添加变量Item_0<BR>HR
:= GroupAddItem(GroupIf, Item_0, 0, VT_EMPTY,
Item0Handle,<BR>ItemType);<BR>if Succeeded(HR)
then<BR>begin<BR>Writeln('添加数据项0成功!');<BR>end<BR>else
begin<BR>Writeln('添加数据项0失败!');<BR>ServerIf.RemoveGroup(GroupHandle,
False);<BR>Exit;<BR>end;<BR>// now add a second item to
the group<BR>HR := GroupAddItem(GroupIf, Item_1, 1,
VT_EMPTY, Item1Handle,<BR>ItemType);<BR>if Succeeded(HR)
then<BR>begin<BR>Writeln('添加数据项1成功!');<BR>end<BR>else
begin<BR>Writeln('添加数据项1失败!');<BR>ServerIf.RemoveGroup(GroupHandle,
False);<BR>Exit;<BR>end;<BR>// 同步读取数据项<BR>HR :=
ReadOPCGroupItemValue(GroupIf, Item0Handle, ItemValue_0,
ItemQuality);<BR>if Succeeded(HR) then<BR>begin<BR>if
(ItemQuality and OPC_QUALITY_MASK) = OPC_QUALITY_GOOD
then<BR>begin<BR>Writeln('Item 0 value read
synchronously as ', ItemValue);<BR>end<BR>else
begin<BR>Writeln('Item 0 value was read synchronously,
but quality was not good');<BR>end;<BR>end<BR>else
begin<BR>Writeln('Failed to read item 0 value
synchronously');<BR>end;<BR>//
将数据ItemValue_1写入数据项item_1<BR>HR :=
WriteOPCGroupItemValue(GroupIf, Item1Handle,
ItemValue_1);<BR>if Succeeded(HR)
then<BR>begin<BR>Writeln('Item 1 value written
synchronously');<BR>end<BR>else begin<BR>Writeln('Failed
to write item 1 value synchronously');<BR>end;<BR>//
移除组<BR>HR := ServerIf.RemoveGroup(GroupHandle,
False);<BR>if Succeeded(HR)
then<BR>begin<BR>Writeln('Removed
group');<BR>end<BR>else begin<BR>Writeln('Unable to
remove group');<BR>end;<BR></P><STRONG><FONT
color=#000084></FONT></STRONG>
<P><STRONG><FONT color=#000084>3.2
数据保存模块的设计. <BR></FONT></STRONG>
该模块以独立线程运行,以只读的方式通过ODBC共享OPC数据采集模块创建的数据存储区。对SQL
Server数据库操作采用了基于OLE
DB的模板技术,这种中间件技术也是微软提出的一种开放式的数据库编程技术,它对数据源的格式没有严格的限制,所以可以提供对数据库稳定而灵活的操作。</P>
<P><STRONG><FONT color=#000084>4
结束语<BR></FONT></STRONG>
系统使用该软件后,可以从OPC服务器中按要求实时读取DCS的数据,并保存到管理网络的SQL
Server数据库,供网上的用户进行浏览与查询,目前已完成该企业控制系统与管理网络的信息集成,为企业管控一体化的实施奠定了基础。<BR>OPC技术的成功应用,使得该系统具有良好的灵活性和开放性。由于DCS的数据已引入了OPC服务器,所以用户可以开发自己所需要的OPC客户软件,或者使用任何内置OPC接口的控制、管理软件与服务器连接通讯。此外,我们已在管理网络SQL
Server数据库的基础上,进一步开发了过程管理、设备管理、生产工艺优化和数据挖掘等应用软件,大大提高了企业的综合自动化水平。</P>
<P><BR> </P></TD></TR>
<TR>
<TD colSpan=2> </TD></TR>
<TR>
<TD align=right colSpan=2 height=25><FONT
color=#993333>本文摘自《PLC&FA》</FONT></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD align=middle height=40>
<TABLE cellSpacing=0 cellPadding=4 width="99%" bgColor=#e6f4fb
border=0>
<TBODY>
<TR>
<TD background=OPC技术在工业自动化软件中的应用--《PLC&FA》网络版.files/16.jpg
height=20>共有网友评论3条【<A
href="http://www.plc-fa.hk/comment.asp?topictype=2&topicid=3555"
target=_blank>查看所有评论</A>】【推荐给好友】【<A
href="javascript:window.print()">打印</A>】</TD></TR>
<TR>
<TD>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD height=25>·不错,今天第一次接触这个东西。OPC好啊! (2006-7-7
16:35:05)</TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD height=25>·good (2006-7-1
23:35:57)</TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD height=25>·只是泛泛而谈,如果能再细一点就好了 (2006-5-17
2:43:22)</TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=1 cellPadding=5 width="99%" bgColor=#e7f7ff
border=0>
<TBODY>
<TR>
<TD align=middle><STRONG>发表对此文评论</STRONG></TD></TR>
<TR>
<TD align=middle>
<FORM action=postcomment.asp method=post>
<TABLE cellSpacing=0 cellPadding=3 width=300 border=0>
<TBODY>
<TR>
<TD height=91><TEXTAREA style="BORDER-RIGHT: 1px solid; BORDER-TOP: 1px solid; FONT-SIZE: 9pt; BORDER-LEFT: 1px solid; WIDTH: 250px; BORDER-BOTTOM: 1px solid; HEIGHT: 100px; BACKGROUND-COLOR: #ffffff" name=content rows=6 cols=55></TEXTAREA>
</TD></TR>
<TR>
<TD align=middle><INPUT style="BORDER-RIGHT: 1px solid; BORDER-TOP: 1px solid; FONT-SIZE: 9pt; BORDER-LEFT: 1px solid; WIDTH: 60px; BORDER-BOTTOM: 1px solid; FONT-FAMILY: 宋体; HEIGHT: 20px" type=submit value=提交 name=Submit>
<INPUT type=hidden value=3555 name=topicid> <INPUT
type=hidden value=OPC技术在工业自动化软件中的应用 name=topicname>
</TD></TR></TBODY></TABLE><INPUT type=hidden value=2
name=topictype><BR></FORM></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=2 width=770 border=0>
<TBODY>
<TR>
<TD class=666666 vAlign=bottom align=middle width=171 bgColor=#ebebeb
height=20> </TD>
<TD class=666666 vAlign=bottom align=middle width=397 bgColor=#ebebeb><A
class=666666 href="http://www.plc-fa.hk/about.asp">杂志简介</A> | <A
href="http://www.plc-fa.hk/about1.asp">发行分析</A> | <A class=666666
href="http://www.plc-fa.hk/ad.asp">广告预订</A> | <A class=666666
href="http://www.plc-fa.hk/doonline.asp">在线投稿</A> | <A class=666666
href="http://www.ca800.com/book/showmaga.asp?id=66" target=_blank>在线订阅</A>
</TD>
<TD class=666666 vAlign=bottom align=middle width=190 bgColor=#ebebeb><A
href="http://www.servo.hk/" target=_blank><FONT
color=#ff0000>伺服控制</FONT></A> <A
href="http://www.inverterworld.hk/" target=_blank><FONT
color=#ff0000>变频器世界</FONT></A></TD></TR>
<TR>
<TD bgColor=#666666 colSpan=3 height=1></TD></TR>
<TR>
<TD class=666666 align=middle colSpan=3>©2005 东方国际科技传媒有限公司版权所有
未经许可不得转载</TD></TR>
<TR>
<TD colSpan=3> </TD></TR></TBODY></TABLE>
<SCRIPT language=JavaScript>
var __cc_style = 0;
var __cc_uid="ca800";
</SCRIPT>
<SCRIPT language=JavaScript src="">
</SCRIPT>
</CENTER>
<SCRIPT>document.write(unescape("%3Cscript%3Edocument.oncontextmenu%3Dnew%20Function%28%22event.returnValue%3Dfalse%22%29%0D%0Adocument.onselectstart%3Dnew%20Function%28%22event.returnValue%3Dfalse%22%29%3C/script%3E"))</SCRIPT>
</BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -