Excel中通过VBA脚本访问Wincc数据库读取多变量脚本的方法
摘要通过Excel中的VBA(Visual Basic for Application)脚本读取Wincc数据库SQL server2005中的变量数据,实现了多时间段、各变量多数据类型的读取。
【关键词】EExcel VBA Wincc SQL server2005
Wincc是西门子公司与微软公司在工业自动化领域共同开发的人机界面软件(Human Machine Interface,简称HMI)。广泛用于在工业自动化系统中与PLC等基础自动化设备连接,提供操作员对自动化系统的监视、操作、报警、报表等人机对话功能。同时Wincc将变量归档的结果存储于SQL server中,便于其他程序对SQL server的操作。本文中Wincc的版本为6.2,附加的数据库版本是SQL Server 2005。
Microsoft SQL Server 2005 是一个全面的数据库平台,使用集成的商业智能 (BI)工具提供了企业级的数据管理。Microsoft SQL Server 2005数据库引擎为关系型数据和结构化数据提供了更安全可靠的存储功能。在本文中,SQL Server 2005是联系Wincc与Excel的桥梁和纽带。
Wincc在西门子工业自动化领域已经得到广泛的应用,各种各样的报表要求几乎都能满足。本文中从实际角度出发,提供一种直接使用Excel VBA编写客户端访问Wincc数据库SQL Server 2005的方法,针对用户对变量的要求,从数据库中同时挑选多个变量,不同的时间段、时间间隔,实现了不同要求的数据采集。本实例中提供了关键的Excel示例代码,有一定的实用价值。
1 数据采集软件的编写
本文中,Wincc作为上位机组态软件,将发出的指令与采集回来的数据经过变量归档实时地存入数据库SQL server2005中,为了便于不同专业科研人员对于数据的处理,利用Excel内嵌的VBA编程语言,对数据库内的数据进行采集。
打开excel,在视图选项栏下,首先录制一个空的宏,保存在当前工作簿中,然后选择查看宏,点击编辑,进入了VBA(Microsoft Visual Basic for Applications)界面,在ThisWorkBook中,写入Excel文件打开预代码Private Sub Workbook_Open()。
在Sheet1中写入数据库变量读取、写入代码
Sheets(1).Unprotect '工作表1解保护
dblStartTimeReadout = Now'将当前时间记录
Rows("9:65536").Select
Selection.Delete Shift:=xlUp
Sheets(1).Cells(10,1).Select
Sheets(1).Rows(9).HorizontalAlignment = 3
Sheets(1).Rows(9).VerticalAlignment = 2
Sheets(1).Rows(9).RowHeight = 1 / 0.035
Sheets(1).Range("A:IV").ColumnWidth = 20
'删除所有的以前记录的信息,本例中从第9行到65536行全部选中
'删除所选单元格的内容,单元格或者区域以下内容向上移动
'选中单元格第10行第一列表格
'确定第九行的居中模式以及高度、宽度
Application.Calculation = xlManual
Application.Cursor = xlWait
'关闭自动重算,这样就不会把时间浪费在每次改变单元格内容而引起的重算
'鼠标显示为漏斗等待状态
strSQLServer = cmbTagServer.Text '.List(cmbTagServer.ListIndex)
'获取当前下拉列表中的标签值
Set objSQLServer = CreateObject("SQLDMO.SQLServer")
'创建一个数据库服务器的应用程序名
objSQLServer.LoginSecure = True
objSQLServer.Connect ServerName:=strSQLServer & "\WinCC"
Set objSQLDB = CreateObject("SQLDMO.Database")
For Each objSQLDB In objSQLServer.Databases
If ((Right(objSQLDB.Name, 1) = "R") And (Left(objSQLDB.Name, 2) = "CC")) Then
strDatabase = objSQLDB.Name
Exit For
End If
Next
'查询实时数据库的名称,如果名称最右面是"R",最左边是"CC",则将这个数据库名称赋值给STRDATABASE。本例中数据库名称为"CC_DDQH102_13_08_27_15_32_31R"
strConn = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;" & "Initial Catalog=" & strDatabase & ";" & "Data Source=" & strSQLServer & "\WINCC" '定义连接字符串
strSQL = "SELECT ValueName FROM Archive"
'命令字符串为从Archive表中选中ValueName
Set objConn = CreateObject("ADODB.Connection")
'创建一个数据库连接
objConn.ConnectionString = strConn
objConn.Open
'打开数据库
Set objRecSet = CreateObject("ADODB.Recordset")
'创建一个数据库记录集
With objRecSet
.ActiveConnection = objConn
.Source = strSQL
.Open
End With
Dim K As Integer
K = 0
Do While Not objRecSet.EOF '本例中从10行向下第一列填充位号名称
For Each fielD In objRecSet.Fields
Sheets(1).Cells(10 + K, 1) = fielD.Value
K = K + 1
Next
objRecSet.MoveNext
Loop
以上代码详细表述了打开数据库、Excel各项属性等重要过程。在做多变量查询的过程中,我们还需要依次做几个数据集的循环,用如下数据库连接字符串读取相关变量的数据。
strSQL = "TAG:R," & "'" & strTag & "','" & strStartTime & ".001','" & strEndTime & ".000'" & ",TimeStep=" & strInterval & "," & CStr(5)
最后一个数字要求选出的数据类型,5代表平均值,1代表第一个值,2代表最后一个值,3为最小值,4为最大值,6为总和,7为区间数据采集数量,512为质量代码。TimeStep表示数据区间内的采集时间间隔。
我们还需要注意的是strStartTime和strEndTime一定要通过函数先转换成UTC时间。
2 程序运行步骤与结果
首先选择主机为本机,填写要读取的时间段,时间段内的读取间隔,以及要选取的数据类型,点击read按键,可依次读取各变量各时间段相应数据。
3 结束语
本文通过Excel访问Wincc数据库SQL server2005,实现对各变量多类型数据的读取,为后续的基础报表、科研研究提供了有效全面的数据。文章中提供了程序编制所需的主要过程以及代码,更加有利于人们对数据库的访问和读取。
作者简介
何基成(1980-),男,安徽省庐江市人。电子工程师。现在安徽江淮汽车股份有限公司从事设备自动化工作。
作者单位
江准汽车乘用车制造公司三工厂总装分厂安徽省合肥市230000