搬家第四天-91.Wincc V7.3 使用用户归档实现报表1-用户归档+Activex控件


 曾经写过一篇博客,记录使用MSHFGrid控件生成报表以及导出到excel的方法,里面有一段VBS脚本是定期把变量值存入一个自定义的sql数据表,然后在MSHFGrid显示查询到的记录集,最后把MSHFGrid结果导出到excel中。使用用户归档后,实际上定期存入变量值这一步可以变得更加简单,不需要写那么多sql脚本了,重点控制好id=-1和job=6就行了。本文简单介绍用户归档结合MSHFGrid控件实现报表的方法。我们假设下位机已经设置完毕并且变量已经上载到Wincc。

1. 先定义和配置一个用户归档,具体方法参考其他博客。

2. 由于没有实际硬件,我们可以使用随机函数的方法模拟产生现场来的数据,随机函数可以写在项目模板里面,具体方法参考其他博客。

3. 新建vbs全局动作,把随机函数赋给各变量

Option Explicit
Function action
Dim FT101,FT102,FT103,PT101,PT102,PT103,TT101,TT102,TT103,LT101,LT102,LT103
Set FT101=HMIRuntime.Tags("S7$程序(1)/FT101")
Set FT102=HMIRuntime.Tags("S7$程序(1)/FT102")
Set FT103=HMIRuntime.Tags("S7$程序(1)/FT103")
Set PT101=HMIRuntime.Tags("S7$程序(1)/PT101")
Set PT102=HMIRuntime.Tags("S7$程序(1)/PT102")
Set PT103=HMIRuntime.Tags("S7$程序(1)/PT103")
Set TT101=HMIRuntime.Tags("S7$程序(1)/TT101")
Set TT102=HMIRuntime.Tags("S7$程序(1)/TT102")
Set TT103=HMIRuntime.Tags("S7$程序(1)/TT103")
Set LT101=HMIRuntime.Tags("S7$程序(1)/LT101")
Set LT102=HMIRuntime.Tags("S7$程序(1)/LT102")
Set LT103=HMIRuntime.Tags("S7$程序(1)/LT103")
FT101.Write MyRnd(100,200)
FT102.Write MyRnd(110,220)
FT103.Write MyRnd(120,230)
PT101.Write MyRnd(100,200)
PT102.Write MyRnd(110,220)
PT103.Write MyRnd(120,230)
TT101.Write MyRnd(100,200)
TT102.Write MyRnd(110,220)
TT103.Write MyRnd(120,230)
LT101.Write MyRnd(100,200)
LT102.Write MyRnd(110,220)
LT103.Write MyRnd(120,230)
End Function

4. 新建全局动作,把数据定期存入用户归档数据表

Option Explicit
Function action
Dim CurDate,CurTime
Dim id,job
Set CurDate=HMIRuntime.Tags("CurDate")
Set CurTime=HMIRuntime.Tags("CurTime")
Set id=HMIRuntime.Tags("@UA_ID")
Set JOB=HMIRuntime.Tags("@UA_JOB")
CurDate.Write Date()
CurTime.Write Time()
id.Write -1
job.Write 6
End Function

5. 画面上放一个DTPicker控件,名字修改为DTP,放一个MSHFGrid控件,名字修改为Report,放一个按钮,按钮鼠标点击VBS脚本为

Sub OnClick(ByVal Item)                
Dim DT,Report,DBName,PCName
Dim conn,ssql,ors,ocom,scon
Dim sYear,sMonth,sDay,sDate
Set DT=ScreenItems("DTP")
Set Report=ScreenItems("Report")
Set DBName=HMIRuntime.Tags("@DatasourceNameRT")
Set PCName=HMIRuntime.Tags("@LocalMachineName")
sYear=Year(DTP.Value)
sMonth=Month(DTP.Value)
sDay=Day(DTP.Value)
sDate=sYear & "/" & sMonth & "/" & sDay
'Msgbox sDate
scon="Provider = SQLOLEDB.1;Integrated Security=SSPI;Persist SecurityInfo=False;Initial Catalog ='" _
     & DBName.Read & "';Data Source = " & PCName.Read  & "\WINCC"
ssql="select Curdate as '日期',Curtime as '时间',FT101 as '流量1',FT102 as '流量2',FT103 as '流量3'," _
    & "PT101 as '压力1',PT102 as '压力2',PT103 as '压力3',TT101 as '温度1',TT102 as '温度2',TT103 as '温度3'," _
    & "LT101 as '液位1',LT102 as '液位2',LT103 as '液位3' from UA#UA where Curdate='" & sDate & "'"
Set conn=CreateObject("ADODB.Connection")
conn.ConnectionString=scon
conn.Cursorlocation=3
conn.open
Set ors=CreateObject("ADODB.RecordSet")
Set ocom=CreateObject("ADODB.Command")
ocom.commandtype=1
Set ocom.ActiveConnection=conn
ocom.CommandText=ssql
Set ors=ocom.Execute
Set Report.DataSource=ors
Report.Refresh
Set ors=Nothing
conn.close
Set conn=Nothing
End Sub

 从MSHFGrid控件导出到Excel的脚本就不在这里写了,请参考其他的博客。

保存,计算机属性-启动项目勾选“全局脚本”,运行后就可以看到效果了。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM