VBA实现SE的多用户记录
2017-01-11王福东
王福东
摘要:FactoryTalk View SE在画面数据监控及控制等方面具有强大的功能,提供适用于工业的实时数据采集、显示、数据的归档、报警以及报表等功能模块,但在操作的用户记录方面尤显不足,然而在一些双重身份验证的系统中,往往需要同时记录操作用户及监护用户,以方便事故追忆和历史查询。本文利用FactoryTalk View SE内嵌VBA,通过ODBC接口链接SQL Server数据库,实现操作的双重身份验证与记录。
关键词:SE;VBA;多用户;数据库
中图分类号:TP311文献标识码:A
Abstract:FactoryTalk View SE has powerful function in the picture data monitoring and control area. It provides function modules suitable for industry such as realtime data acquisition, display, data archiving, alarm, report and so on, but in aspect of user record it is especially inadequate. However, it often needs to record user operation and to monitor the user at the same time in some dual authentication system,so as to facilitate the accident tracing and history inquiry. This paper used the FactoryTalk View SE embedded VBA to link SQL Server database by the ODBC to realize dual authentication and records of operation.
Key words:SE;VBA;Multiuser;database
1引言
FactoryTalk View SE是用于开发者监控管理级人机交互界面(HMI)应用项目的组态软件,具有强大的画面编辑、数据监控能力,方便开发多用户、分布式服务器应用。它所拥有的分布式和扩展架构特性使得其支持多个分布式服务器/客户端的应用。可以从网络上的任何地方组态应用项目,能够以远程、多用户方式对运行的应用项目进行更改。然而在系统用户记录方面稍显不足,FactoryTalk View SE自带的数据记录模型,其生成表的方式以及记录内容具有很大局限性,满足不了特殊场合用户的管理与记录。FactoryTalk View SE内嵌VBA开发平台,为自定义功能及扩展需求提供了开发环境。
2实现原理
用户记录的目的是方便以后的事故追忆与查询,通过记录报表了解某一用户在事故发生前后所进行的操作。所以在SE中需要将记录的操作数据与当前用户匹配。操作数据的采集通过SE内部的HMI标签完成,当前用户的判断通过SE内部函数CurrentUserName实现。
FactoryTalk View SE自带的数据记录存储格式有文件集和ODBC数据库。文件集是把数据记录为专有的文件集,只能在SE中通过功能块调用且不能存储用户信息;ODBC数据库把数据记录到 ODBC 数据库(使用 Microsoft SQL Server 或 Oracle 等 ODBC 数据源)中的表,表的格式固定且无法更改,也不能存储用户信息。ODBC 备份文件存储为二进制文件且无法查看。
由于SE常规的数据存储格式不能满足需求,而SE内嵌的VBA又提供了自定义的开发平台,在FactoryTalk View SE组态软件中,通过HMI内部标签与外部PLC变量的关联来采集有效的操作反馈信息,利用功能函数来获取当前时间与用户信息,并将信息标签加入VBA内创建的标签组,以集合访问的方式引用。在VBA开发系统中,利用用户操作数据的触发,匹配当前用户并通过ODBC数据源与SQL Server 数据库建立链接,将数据与用户信息记录到数据库中。数据记录框图如下:
3HMI标签在VBA中的引用
在SE中建立标志有效操作的HMI标签,而在SE的VBA中,我们要想引用标签,需要先创建标签组,标签组是一组标签的集合体。然后将本地HMI标签加入标签组,之后通过集合访问的方式引用标签组中的标签[1]。需要注意的是,SE中的标签类型并不是变量而是对象,我们需要用标签对象而不是普通变量去引用标签组中的单个标签。而且当一个运行时错误发生时,控件转到紧接着发生错误的语句之后的语句,并在此继续运行而不是退出。
4数据库的链接与操作
操作数据与当前用户的匹配是利用SQL Server数据库中的动态表完成的,由操作数据标签的上升沿触发数据记录,并将匹配的标签描述与当前用户记录到数据表中。
在SQL Server中新建SX_bdz数据库,之后在SX_bdz下新建CmdTable表。数据表的数据类型与结构如下表所示:
SE通过VBA与数据库建立链接后,就可以把数据按表的形式存储到数据库中,ADO是微软公司提供的一个用于存取数据源的COM组件。它提供了编程语言和统一数据访问方式OLE DB的一个中间层,允许开发人员编写访问数据的代码而不用关心数据库是如何实现的,而只用关心到数据库的链接[2]。在VBA编辑器中选择“工具”之后点击“引用”在弹出的对话框中“Microsoft ActiveX Data Objects *.*”、“Microsoft SQL Server Data Conversion Transform*.* Tape Library(其中*.*号代表版本号,选择最新版本即可)[4]。编写程序创建ADO的Connection对象建立与数据库的链接。
5实现过程
以三峡升船机变电站10KV系统的双用户身份验证控制分合闸操作为例,阐述SE利用VBA实现操作数据的多用户记录过程。三峡升船机变电站10KV系统开关柜分合闸操作需要同时验证操作员与监护人的身份,利用SE自带的数据记录模型无法将操作数据与用户信息完整的记录到数据库中。
5.1用户的创建与引用
在FactoryTalk View SE单机开发系统左侧浏览视图中双击System文件夹,通过User 新建操作员用户op1、op2和监护人用户mon1、mon2,用于分合闸操作时的身份确认。在SE中新建HMI标签SE\\user,用于存储用户信息;新建HMI标签SE\\QR\\OP,用于操作员身份确认标志;新建HMI标签SE\\QR\\MON,用于监护人身份确认标志。
5.2操作与记录
用户的操作需要有相应的人机交互接口,利用FactoryTalk View SE组态软件开发分合闸控制人机交互画面。用户在分合闸控制画面下发控制指令,SE控制画面弹出操作员确认对话框,待验证操作员身份后提示操作员是否确认当前操作,当操作员确认操作后,操作员的当前用户信息暂时缓存在SE\\user标签内,代码如下:
VBA代码的实现是在画面下加载的,当画面被关闭时,要及时释放标签组里的数据。通过上述方案既可以实现将操作记录数据以及用户信息记录到SQL server数据库中,然后生成报表,实现数据的查询与打印。数据记录结果如下图所示:
6结束语
FactoryTalk View SE自带的数据记录模型,无论是文件集还是ODBC数据源的格式,都无法记录SE的操作用户信息,而且生成表的格式是固定且不可改变的。本文较详细地论述了通过SE内嵌的VBA将控制操作数据以及用户信息记录到了SQL Server数据库中的方法,为记录FactoryTalk View SE用户信息提供了一种有益的方案。
参考文献
[1]Factory Talk View SE 用户手册,美国AB公司.
[2]牛正光,张五一,王东云.用VBA在RSView32中实现报表的方法[J].中原工学院学报,2008,19(4):6-10.
[3]赵井文,蒋腾旭,Visual Basic 程序设计案例教程[M].北京:北京交通大学出版社,2007.
[4]孙云辉,谢辉辉,王挺.Factory Talk View SE 组态环境下报表系统的开发[J].制造业自动化,2011,33(4):4-9.