搬家第四天-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