王福東
摘要: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.