5 <报表制作> <报表查询的实现过程是通过脚本查询数据库,把查询结果填充到 excel 模板并另存为 htm 文件,在 WinCC 画面中添加 web 控件显示 htm 报表文件。> 5.1 <创建报表模板> <创建 excel 模板,如图 14 所示:
模板文件存放在 WinCC 项目文件夹\report\模板下,如图 15 所示。
5.2 <制作报表画面> <在 WinCC 报表查询画面上,可以按照设备编号和日期来查询报表。需要在画面中添加日期选择控件、选项组控件和 web 控件, 如图 16 所示
按如下步骤添加 Microsoft Date and Timer Picker Control 和 Microsoft Web Browser。 第一步,在 ActiveX 控件上右键,选择“添加/删除”,然后在 OCX 控件列表中选择Microsoft Date and Timer Picker Control 和 Microsoft Web Browser。如图 17 所示。
第二步,添加控件到画面 分别拖拽 Microsoft Date and Timer Picker Control 和 Microsoft Web Browser 控件到画面中。如图 18 所示。
第三步,添加组合框控件 在画面上添加组合框控件,用来选择设备。可以从智能对象下拖拽组合框控件直接添加到画面,并设置属性。步骤如图 19 所示。
也可以直接从 excel 中拖拽文本到 WinCC 直接生成组合框。如图 20 所示。
首先在 excel 输入需要的文本,选择所有文本,移动鼠标到选中区域的右下角, 直到鼠标变成十字光标形状。 然后按着鼠标右键拖拽文本到 WinCC 画面,松开鼠标,在弹出对话框中选择“插入组合框”。最后,具有三项文本的组合框被插入到 WinCC 画面。 第四步,创建生成报表的脚本 在画面中添加按钮用来生成报表并显示在 Microsoft Web Browser 控件中,为按钮编写如下 VBS 脚本:
On Error Resume Next
item.Enabled = False
'获取设备编号和报表日期
Dim dev_ID,timepicker
Dim date_select,strStartTime,strEndTime
Set dev_ID = ScreenItems("组合框 2")'获取设备编号。"组合框 2"为组合框名称
Set timepicker = ScreenItems("控件 2")'获取报表日期。"控件 2"为时间控件名称
date_select = FormatDateTime(timepicker.Value,2)
strStartTime = date_select & " 00:00:00"
strEndTime = date_select & " 23:59:59"
'查询数据库
Dim Conn,adors,SQL
Set conn = CreateObject("ADODB.Connection")
Set adors = CreateObject("ADODB.Recordset")
Conn.ConnectionString = "Provider=microsoft.ace.oledb.12.0;" & "Data Source=" &
HMIRuntime.ActiveProject.Path & "\report\dev_data.accdb"
Conn.Open
'dev_ID.SelIndex:设备编号,时间范围:strStartTime~strEndTime
SQL = "select * from dev" & dev_ID.SelIndex & " Where EN_T >= #" &
strStartTime & "# and EN_T <= #" & strEndTime & "# Order By EN_T ASC"
adors.Open SQL,Conn,1,3
'查询结果写到 excel
Dim xlApp,xlBook,xlSheet
Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = False
xlApp.DisplayAlerts = False
Set xlBook = xlApp.Workbooks.Open( HMIRuntime.ActiveProject.Path & "\report\
模板\日报表模板.xlsx")
Set xlSheet = xlBook.Worksheets(1)
xlSheet.Cells(1, 1) = dev_ID.SelIndex & "号设备日报表" '报表标题
xlSheet.Cells(2, 1) = "报表日期:" & date_select
adors.MoveFirst
Dim i
For i = 1 To adors.RecordCount
xlSheet.Cells(i + 3, 2) = FormatDateTime(adors.Fields(2).Value, 4) '启动时间
xlSheet.Cells(i + 3, 3) = FormatDateTime(adors.Fields(3).Value, 4) '停止时间
xlSheet.Cells(i + 3, 4) = DateDiff("n", adors.Fields(2).Value,
adors.Fields(3).Value) '运行时长
xlSheet.Cells(i + 3, 5) =adors.Fields(7).Value - adors.Fields(6).Value '运行数据 1
xlSheet.Cells(i + 3, 6) =adors.Fields(5).Value - adors.Fields(4).Value '运行数据 2
adors.MoveNext
Next
xlBook.SaveAs HMIRuntime.ActiveProject.Path & "\report\日报表\web\日报
表.htm",44
xlBook.Close
xlApp.Quit
Set xlSheet = Nothing
Set xlBook = Nothing
Set xlApp = Nothing
Set Conn = Nothing
Set adors = Nothing
'报表显示
Dim wbCtrl
Set wbCtrl = ScreenItems("控件 1") '"控件 1"为 Web 控件名称
wbCtrl.Navigate HMIRuntime.ActiveProject.Path & "\report\日报表\web\日报表.htm"
item.Enabled=True
结果如图 21 所示:
5.3 <运行结果> <激活 WinCC 运行系统,分别选择要查看报表的设备名称和日期,如图 22 所示。
然后点击“生成报表”按钮, WinCC 从数据库读取设定日期的相应设备的数据,显示在 WinCC 画面中。如图 23 所示。