回复:技术专题探讨-WinCC实现报表的不同方法及其应用

虚心+学习

  • 帖子

    110
  • 精华

    6
  • 被关注

    3

论坛等级:游侠

注册时间:2003-11-05

普通 普通 如何晋级?

发布于 2009-03-09 22:12:04

0楼

再说说年报,在图形编辑器里制作年报画面,插入一输入输出域:用以输入年份,再加入一个按钮,按钮文本:导出到EXCEL,按钮代码:
Dim objExcelApp
Dim i,n,tagstr
Dim writeRiQi,ksrq,jsrq,max
Dim baobiao,jls,tabname
Dim blm,sj,zhi
Dim ReportYear,ReportMonth

Dim rb(17,12) '17表示18列数据 12表示12月2
Dim TagNameSerial,TagNameArray

'欲显示在EXCEL中的变量名序列
TagNameSerial="AI_HY1_LGh;AI_HY2_LGh;AI_GF1_LGh;AI_GF2_LGh;AI_LF1_LGh;AI_LF2_LGh;AI_BY1_LGh;AI_GZ1_LGh;AI_RL1_LGh;AI_RL2_LGh;AI_SH1_LGh;AI_SH2_LGh;AI_SC1_LGh"
TagNameArray=Split(TagNameSerial,";")
max=UBound(TagNameArray)
' For i=0 To 17
' For n=0 To 23
' rb(i,n)="-"
' Next
' Next

ReportYear=GetTag("ReportYear")
' ReportMonth=GetTag("ReportMonth")

db_open


tabname="UA#ZDGD"

'23点即为当天保存的累计值,可以配合整点归档保存脚本,将保存时间调整到例如23:59:50

sql="SELECT SUM(ZHI) AS 累计值, Tag_name, MONTH(RQ) AS 月 "
sql=sql & "FROM UA#ZDGD "
sql=sql & "WHERE (YEAR(RQ) = " & ReportYear & ") AND ({ fn HOUR(SJ) } = 23) "
sql=sql & "GROUP BY Tag_name, MONTH(RQ) "
'结果集
'累计值 Tag_name 月
'30 AI_BY1_1 1
'5 AI_BY1_1 2
'0 AI_GF1_1 2
'0 AI_GF2_1 2
'0 AI_GZ1_1 2
'0 AI_HY1_1 2
'0 AI_HY2_1 2
'0 AI_LF1_1 2
'0 AI_LF2_1 2
'0 AI_RL1_1 2
'24 AI_RL2_1 2
'12 AI_SC1_1 2
'0 AI_SH1_1 2
'44 AI_SH2_1 2

Set rs=CreateObject("adodb.recordset")
rs.open sql,conn,1,1
if not rs.eof and not rs.bof then
rs.MoveFirst
Do While Not rs.EOF
'sj= Hour(rs("LastAccess") )
'sj= Hour(rs("sj") )
sj=rs(2) '取day值
blm=rs(1)
zhi=rs(0)
i=0
for i=0 to max
If blm=TagNameArray(i) Then
rb(i,sj)=FormatNumber(zhi,2)
End If
Next
rs.movenext
loop
End If

Set objExcelApp = CreateObject("Excel.Application")
objExcelApp.Visible = True
objExcelApp.Workbooks.Open "F:\india\wincc\YearReport.xls"

For i=0 To 17
For n=0 To 12
objExcelApp.Cells(n+4, 2+i).Value = rb(i,n)
Next
Next

'特殊单元格赋值
objExcelApp.Cells(1, 2).Value = ReportYear & "Year"
' objExcelApp.Cells(1, 3).Value = ReportMonth & "Month"
objExcelApp.Cells(1, 13).Value = Now

'objExcelApp.Cells(1, 5).Value = WeekdayRturn(Weekday(ksrq))
' objExcelApp.Cells(32, 1).Value = tank_A_kg
' objExcelApp.Cells(32, 2).Value = tank_A_Q
' objExcelApp.Cells(32, 3).Value = tank_B_kg
' objExcelApp.Cells(32, 4).Value = tank_B_Q

' objExcelApp.ActiveWorkbook.Save


这段代码的精髓在于那段SQL语句,是将每个月的合计输出到一个结果集中供报表使用。报表里的合计累计、判断无效数据等还需要EXCEL的配合,但这对经常使用EXCEL的人应该不算是困难。
论坛不然上传附件,否则可以将该项目的源文件上载以供大家斧正,在这里我只是提出一种报表的思路,且是切实可行的。

管理员注:本帖已被纳入此次探讨发帖整理之方案汇总,请点此详阅
让学习成为一种习惯
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC WinCC / Panel

共有32576条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。