1 背景
随着企业管理现代化与企业信息化水平的不断提高,企业管理信息系统需要共享工业现场的实时信息,成为全面综合的信息系统;在企业内,除了值班人员需要通过操作站或监控中心对现场设备进行监控管理以外,管理层人员同样需要浏览工业现场的生产运行状况,以便管理和决策。
管理人员可通过企业局域网采用WEB浏览的方式,将中央控制室的操作员站作为WEB服务器,将要浏览生产状况的计算机作为WEB客户端。要实现这样的功能,可以考虑采用组态软件商提供的集成软件进行发布,不过这样的软件、比较昂贵,且有严格的用户数限制,所以应用成本相当高。
当然现代工业组态软件的开放性为我们对过程数据的获得与处理提供了极大的便利,我们可以利用其提供的广泛的开放接口,如OPC接口获取实时过程数据。采用上述第二种方式实现工业控制层与企业信息层的结合,把生产现场数据保存记录、汇总综合,并让企业管理人员通过公司局域网使用浏览器对现场的生产状况进行监视是一种灵活低成本的实现方式。
本文研究开发了一套基于某企业现有西门子 WinCC监控系统的实时过程数据集成到企业信息层的方案。该方案应用OPC接口技术把WinCC的实时过程数据集成到公司管理信息系统的数据库中实现信息资源共享,并弥补了B/S结构的不足,使用XML方式通过FLASH把实时数据发布到公司局域网上供管理人员随时使用浏览器获知生产过程的重要数据。此方案在某化工企业得到了成功的应用,从运行效果可知此方案是完全可行并且是优秀的。2应用OPC技术把WinCC过程数据集成到SOLServer OPC是OLE for Process Control的缩写,即用于过程控制的OLE。OPC是一个工业标准,它是一种利用微软的COM/DCOM技术来达成自动化控制的协定,由一些世界上著名的自动化系统和硬件、软件公司和微软公司紧密合作而建立的。
WinCC是西门子公司在自动化领域采用最先进的技术与微软公司共同开发的居于世界领先地位的工控软件。WinCC是一个功能强大的全面开
放的监控系统,既可以用来完成小规模的简单的过程监控应用,也可以用来完成复杂的应用。在任何情况下WinCC都可以生成漂亮而便捷的人机对话接口,使操作员能够清晰地管理和优化生产过程。它集成的OPC(OLE for Process Control)服务器使得过程数据可由其它应用程序(OPC客户机)访问。WinCC作为西门子自动化系统的一员,在我国工业自动化领域中得到非常广泛的应用。
我们将会用VB编写OPC客户端连接WinCC获得过程数据,并使用VB中的ADO控件把获得的实时数据记录到SQLServer数据库中。WinCC在安装时提供了OPC的客户端控件,即Siemens OPC DAAutomation 2.0,这个控件就是我们在VB中要用到的控件。
2.1 用VB编写OPC客户端连接WinCC获得过程数据
OPC Server透过一组一组的接口(Interface)提供服务,在具体架构上,OPC Server共分为三层:分别是OPCServer(OPC服务器)、OPCGroup(OPC组)、OPCItem(OPC标签组)先在"32程 - >引用”把Siemens OPC DAAutomation 2.0加入,然后开始定义全局变量。在本示例程序中为便于说明,我们仅定义一个OPC组(OPCGroup)进行OPC访问一个WINCC过程变量(即OPCItem)。
我们要首先定义OPC服务类型与计算机结点名。定义OPC组与OPC标签组。并定义OPC的标签数组与值数,注意,值数组一定要设为Vari ant。StartClient()函数用于启动OPC客户端服务,StopClient()函数用于断开OPC连接,当不需要使用OPC时,我们把连接断开以释放OPC客户端连接后占用的服务器资源。我们可以在VB窗体添加两个按钮并组态相应的点击属性实现以上两个函数的调用。对OPC标签的读可以通过定义的MyOPCGroup组的DataChange事件来读取。
在OPC连接过程中只有数据发生变化时才会触发该事件,也只会传输发生了变化的数据,没有变化的数据不会出现在本事件的ItemValues中。具体程序代码给出如下:
全局变量的定义:
Dim WithEvents MyOPCServer As OPCServer
Dim WithEvents MyOPCGroup As OPCGroup
Dim MyOPCGroupColl As OPCGroups
Dim MyOPCItemColl As 0PCItems
Dim MyOPCItems As OPCItems
Dim MyOPCItem As OPCItem
Dim ClientHandles(1) As Long
Dim ServerHandles() As Long
Dim Values() As Variant
Dim Errors() As Long
Dim ItemIDs(1) AS String
Dim GroupName As String
Dim NodeName As String
Dim itemv(1) As Variant
StartClient()函数的定义:
Sub StartClient()’- - - 目的:连接至OPC-server,创建组和添加条目
ClientHandles(1)=1
GroupName=“MyGroup”
NodeName=“TQwPC”’- - -结点名,即计算机名
ItemtDs(1)=“WinCC-Tag”’- - -WinCC的一个变量
Set MyOPCServer=New OPCServer
MyOPCServer.Connect ServerName,NodeName
Set MyOPCGroupCoU=MyOPCServer.OPCGroups ’- - - 为添加组设置缺省的激活状态
MyOPCGroupColl.DefaultGroupIsActive=True’- - 添加组至收集
Set MyOPCGroup=MyOPCGroupcoll.Add(GroupName)
Set MyOPCItemcoll:MyOPCGroup.OPCItems
’- - -添加一个条目、返回ServerHandles
MyOPCItemC01I.AddItems 6,ItemIDs(),ClientHandles(),ServerHandles(),Errors
’- - -用于接受不同的信息组
MyOPCGroup.IsSubscribed:True
Exit Sub
ErrorHandler:
MsgBox“Error:”&Err.De
End Sub
StopClient()函数的定义:
Sub StopClient()’- - - 目的:从服务器释放对象并且断开连接
MyOPCGroupColl.RemoveAll’- - -释放组和服务器对象
MyOPCserver.Disconnect’- - -与服务器断开连接并且清除
Set MyOPCItemcoll=Nothing
Set MyOPCGroup=Nothing
Set MyOPCGroupColl=Nothing
Set MyOPCServer=Nothing
End Sub
Sub MyOPCGroup-DataChange()函数的定义:
Sub MyOPCGroup-DataChange(ByVal TransactionID As Long,ByVal Numltems As Long,Clen tHandles()As Long,itemvalues()As Variant,Qualities()As Long,TimeStamps()As Date) ’- - - 目的:组中的数值、质量或时间标志改变时,该事件激活
itemv(ClientHandles(1))=itemvalues(1)’- - -设置数据表单元值为数值读
Textl.Text=CStr(itemv(1))’- - -在VB窗体添加文本框以显示读取的WinCC变量值End Sub
2.2 使用ADO连接SQLServer存储从WinCC获得的实时数据
微软的数据库产品SQLserver2000无论是在系统性能还是易用性方面都具有突出的优势而受到人们的青睐,开发人员与管理人员对它都相当的熟悉,它是现今公司企业首选采用的数据库管理系统。
WinCC采用标准Sybase数据库进行生产数据的归档,公司管理信息系统已采用SQLServer2000数据库进行公司各项数据的管理,为满足本公司信息化的需求,便于企业对生产过程的重要数据进行集中而系统的管理,把WinCC的过程数据整合到
公司信息系统的SQLServer2000数据库的需求是很明显的。
上面我们已经把WinCC里的实时数据用OPC接口成功获取,接下来我们将使用数据库绑定控件 Adodc把数据记录到数据库中。这一控件不包括在常用的工具框中,我们需要通过“工程- >组件”添加Microsoft ADO Data Control6.0,添加完成后我们即可以在工具框中找到相应的控件。对添加的ADO控件设置几个重要属性:ConnectionString、 CommankType、RecordSource,通过Recordset与 Recordset.AddNew指定相应的字段即可把从OPC中获取的数据添加到SQLServer2000数据库中。
3 应用XML发布实时数据并通过Flash监控生产过程
工业企业中反映生产现场的数据与画面不但需要由值班与操作人员所掌握,同时也需要具有 Web浏览功能,可使经理、厂长等管理人员在办公室内就可掌握生产过程,从而更好的调度指挥生产,故生产流程具有Web浏览功能是工业企业中 CIMS和ERP系统中不可或缺的组成部分。
我们综合考虑了生产流程在WEB页面中编辑方式与生产流程在WEB浏览的实现手段,我们决定采用Flash。因为Flash能轻易的实现生产流程画面的编辑并且它内置的XMLSocket对象提供了一个实现WEB浏览的手段,能够解决B/S结构本身的弊端。
Flash现在已经成为制作高压缩、基于矢量的网络内容的行业标准,据统计有98.3%的网站用户使用Macromedia Flash Player。随着新版本 Flash MX(含Flash Player 6.0)的发布,Flash的应用领域得到了极大的扩展,使用Flash设计的内容可以在任意浏览器、系统平台和支持Macromedia
Flash Player的设备上使用。
用于Web浏览的生产流程通常需要我们在画面上把极为重要的关键流程以简单明了的图形或线条作示意表达,而把过程数据嵌到其中或者列表显示即可达到目的,次要的细节枝末无需添加进来。使用Flash设计供Web浏览的生产流程画面,将会借助Flash强大的图形绘制编辑特性与柔性的矢量图形的显示而轻易的完成设计并能获得良好的效果。
3.1 XMLSocket技术解决了B/s体系结构的被动性与滞后性
在软件设计中,软件体系结构最基本地可以分为C/S(客户端/服务器)与B/S(浏览器/且艮务器)两种。由于后者有着许多显著的优点,近几年B/S体系结构在软件设计中,得到了广泛的应用。使用 B/S体系结构,充分利用了Web技术,客户端已经统一为Web浏览程序的单一平台。应用程序处理的结果,一律通过Web浏览程序显示出来。作为最终用户,只要操纵Web浏览程序,各种各样的处理任务都可以通过Web浏览程序调用系统资源来完成。
可是B/S体系结构也不是完美的,由于其工作机制的限制,在某些领域,以前采用B/S体系结构就很难实现要求功能。典型情况下,Web页面和大多数Web应用使用了一种称为请求/响应的
工作机制:
(1)使用者点击一个超级链接,或是提交一个表单等。
(2)浏览器向服务器发送请求。
(3)服务器启动一个会话。
(4)服务器经过处理后,把数据发送给浏览器。
(5)服务器关闭会话,浏览器显示数据
我们可以看出,使用B/S体系结构设计软件时,无法回避两个限制:被动性与滞后性。首先,使用者必须通过浏览器请求,服务端才能进行响应,在某些领域,如及时监控中,需要服务端在特定情况下,主动发送数据给客户端,而使用传统B/S体系结构技术,实现该目的就很困难。其次,服务端每次请求都必须启动一个会话,加上服务端处理与网络传送所消耗的时间,这自然就形成了客户端的滞后性。
自从Flash 5发布后,其中内置的XMLSocket技术很好地解决了B/S体系结构被动性与滞后性的限制,同时没有了Java的安全限制,新的FlashMX中对此又有了很大的增强。Flash新版本的 XMLSoeket对象实现了客户端socket(套接字),允许包含Flash应用的浏览器与服务端建立socket连接,之后Flash应用与服务端就可以相互发送 XML数据,而且在一个socket连接建立之后,在该连接上传送的数据量是没有限制的,直到socket连接关闭。有了XML服务器,就可以实时地与客户机相连,将数据主动发送出去,而不需要客户机向服务器请求。当前的热点“在线聊天”或“实时消息发布”系统,它们正作为通信媒介以惊人的速度发展着。而XML服务器恰好能完成这样的事情。
我们在此将会使用Flash MX提供的XML- Socket对象以实现浏览器端获得服务器端的实时生产数据。3.2使用Flash MX提供的XMLSocket技术对生产系统进行实时监控
FlashMX的Action
建立一个Socket连接,必须先建立一个服务器方的程序来等待Socket连接请求,并将反馈的信息发送给Flash动画。这种服务器程序可用Java来编写。我们可以依照以下步骤即可完成此程序
try {
ServerSocket server = new ServerSocket(Inte- ger. parseInt (args[0])) ;
while(true) {
System. out. println (" Start Listenning the TCP port " + Integer. parseInt(args[0])) ;
Socket client = server, accept() ;
System. out. println (" Remote Host is " + client, getInetAddress()) ;
new ServerThread (client). start() ;
}
} catch (IOException ex) {
ex. printStackTrace() ;
}
以上语句中,先是通过启动Java程序时传进来的端口参数,建立一个服务端套接字(Server- Socket)对象server,在随后的死循环中,调用其ac cept()方法监听指定的端口,如果有客户端连接请求时,生成一个套接字对象client,并用其作为参数生成并启动一个新的线程与客户端交互。
启动一个新的线程后,基于本例实际功能需求编程,只要往客户端发送SQLServer中的最新的记录即可。
在客户端,我们可以对已定义的一个XML- Socket对象进行参数设置,使用其connect方法建立与服务器的连接。当调用XMLSocket对象的 connect方法时,Flash播放器打开一个服务器的 TCP/IP连接,并保持这种连接直到调用close方法或关掉Flash播放器。
当连接建立成功之后,客户端与服务端就可以相互发送XML数据了。使用XMLSocket对象的 send方法可向服务端发送数据,以下代码创建一个 XML Socket连接并处理与服务器的交互:
Sock=new XML Socket();/健立一个新的 XMLSocket
Sock.connect(IP,1024);//调用connect方法与指定的服务器的1024端口建立连接
Function onSockConnect(success){//定义一个函数来控制sock对象,处理服务器的应答If(success){
//处理与服务器的交互部分
}else{
Msg="Error when connecting to the host":
}
}
Sock.onConnect=onsockconnect;//设定 onsockconnect函数为onConnect使用的函数在客户端编辑相应的过程示意画面
4 结束语
在现今的工业自动化中,我们需要一套整合的信息系统,由底层的各项装置采集信息,中层的控制系统或图控应用程序进行程序的控制,再由最上层的整合软件将这些信息整合起来以供企业决策或效能提升。我们使用OPC与Flash提供的 XMLSocket技术实现了供企业决策或效能提升的
最上层的信息整合部分,实际应用证明,这样的实现方法是可行并且是优秀的,相比某些HMI软件商提供的相关软件,除需要牵涉到较多的知识面并且编程量会稍大之外,仅需更少的投入并能获得极大的灵活性与运行效能,此方案具有很大的适应性,在大多数使用通用组态软件的工业企业均可采用这样方式实现企业控制层与信息层的集成。
参考文献
[1] 程良伦.基于Profibus的过程自动化网络系统的设计与实现[J].世界仪表与自动化,2004,8(4).
[2] Wincc5.0软件在线帮助.
[3] 陈卫.B/S结构应用程序开发秘笈[M].北京:国防工业出版社.
[4] 李刚,陈海波.Flash MX高级应用[M].北京科海电子出版社.
[5] 赖建荣,李思伟.Flash XML实用开发技术[M].北京:清华出版社.
共0条 [查看全部] 网友评论