WINCC用變量歸檔實(shí)現(xiàn)報(bào)表 一
?
4、用變量歸檔實(shí)現(xiàn)報(bào)表
4.1 前言
?一直以來(lái)很想寫個(gè)關(guān)于報(bào)表的文章,但是給自己的理由是沒(méi)有碰到需求,其實(shí)是太懶的原因,一直沒(méi)有寫,最近碰到了兩個(gè)需求,于是根據(jù)朋友的要求,用項(xiàng)目上的歸檔數(shù)據(jù)進(jìn)行測(cè)試,做了個(gè)簡(jiǎn)單的報(bào)表,說(shuō)是報(bào)表,要求都是比較簡(jiǎn)單的,其實(shí)都類似于定時(shí)記錄數(shù)據(jù),然后根據(jù)日期把數(shù)據(jù)給顯示出來(lái)。都是日?qǐng)?bào)表的形式,需求有點(diǎn)小的區(qū)別,一個(gè)是一個(gè)小時(shí)記錄一次,一個(gè)是4個(gè)小時(shí)記錄一次,數(shù)據(jù)用了兩種方式來(lái)實(shí)現(xiàn)的:一是在項(xiàng)目的SQL數(shù)據(jù)庫(kù)上新建了一個(gè)數(shù)據(jù)表,是用全局腳本把報(bào)表相關(guān)的數(shù)據(jù)定時(shí)插入數(shù)據(jù)庫(kù),顯示的時(shí)候再是用腳本查詢出來(lái);另一個(gè)是用WinCC自帶的變量記錄功能,按小時(shí)進(jìn)行歸檔,數(shù)據(jù)查詢的時(shí)候,直接按日期把每天的數(shù)據(jù)查詢出來(lái),顯示在表格里面,然后第三種,又測(cè)試了是用在線表格控件實(shí)現(xiàn),也是用變量歸檔的方式,結(jié)果效果也挺好的,是用控件自帶的打印和導(dǎo)出功能。在比較早的時(shí)候,大約在12年左右吧,那個(gè)時(shí)候我還在處于對(duì)WinCC的摸索學(xué)習(xí)過(guò)程中,也做了一個(gè)報(bào)表項(xiàng)目,其實(shí)算是定時(shí)抄表功能,當(dāng)時(shí)領(lǐng)導(dǎo)要求操作工,每個(gè)小時(shí)把設(shè)備運(yùn)行的數(shù)據(jù)記錄一遍,并簽字形成紙質(zhì)的存檔,為了讓操作工更專心的進(jìn)行操作,同時(shí)也保證數(shù)據(jù)的準(zhǔn)確,利用VBS全局腳本,每個(gè)班組開(kāi)始的時(shí)候,使用報(bào)表模板文件,創(chuàng)建Excel文件,然后每個(gè)小時(shí)執(zhí)行一次,把需要抄表的設(shè)備數(shù)據(jù)對(duì)應(yīng)的變量值填入Excel文件中,到了班組結(jié)束時(shí)間,再自動(dòng)打印出來(lái),同時(shí)為了防止操作人員修改報(bào)表內(nèi)容,還對(duì)每個(gè)班組的報(bào)表文件設(shè)置了只讀密碼。當(dāng)時(shí)腳本邏輯做的雖然不是很簡(jiǎn)潔,但是18年我調(diào)離生產(chǎn)線之前,這個(gè)抄表系統(tǒng)運(yùn)行還算穩(wěn)定,只是有時(shí)候打印機(jī)有問(wèn)題的時(shí)候可能自動(dòng)打印會(huì)出錯(cuò)。最近好像有的網(wǎng)友也有這種需求。報(bào)表的實(shí)現(xiàn)方法很多,還有利用用戶歸檔實(shí)現(xiàn),或者購(gòu)買第三方報(bào)表控件等等,這里主要是介紹一下使用WinCC自帶的變量歸檔實(shí)現(xiàn)日?qǐng)?bào)表的方式。
?
4.2 項(xiàng)目組態(tài)
?先介紹是用變量歸檔的方式,這個(gè)是在一個(gè)項(xiàng)目?jī)?nèi)測(cè)試的,原來(lái)客戶要求的數(shù)據(jù)就是一個(gè)小時(shí)記錄一次,所以數(shù)據(jù)也就用的原來(lái)的項(xiàng)目組態(tài),基本沒(méi)有改變,這里也就截圖大體介紹一些。項(xiàng)目原來(lái)組態(tài)的歸檔時(shí)間都設(shè)置的為1個(gè)小時(shí)歸檔一次,歸檔為當(dāng)前值,

?
報(bào)表的變量比較多,這里只截取了一小部分,其他的組態(tài)都是一樣的。這里的歸檔可以選擇當(dāng)前值、最大值、最小值、平均值,如果你的報(bào)表需要選擇最大或者平均值的話,可以再填一條歸檔,設(shè)置為最大值或者平均值就行,一個(gè)變量可以歸檔N次,只要名稱不同就行。為了使歸檔時(shí)間統(tǒng)一,后期的數(shù)據(jù)查詢顯示方便,還要統(tǒng)一在一個(gè)時(shí)刻里面進(jìn)行記錄,在定時(shí)器->周期時(shí)間里面設(shè)置定時(shí)器“1小時(shí)”的開(kāi)始時(shí)間為為0分0秒進(jìn)行歸檔。您也可以根據(jù)您的需要?jiǎng)?chuàng)建自己的歸檔周期,默認(rèn)在

4.3 在線表格顯示數(shù)據(jù)
?如果對(duì)表格界面要求不高的話,用WinCC自帶的在線表格控件顯示數(shù)據(jù)不失為一個(gè)很好的選擇,其實(shí)表格控件設(shè)置一下,顯示效果也是不錯(cuò)的,用在線表格控件有個(gè)最好的優(yōu)點(diǎn)就是,刷新速度較快。如果根據(jù)畫面的全局樣式,對(duì)表格的背景顏色等做些設(shè)計(jì),其實(shí)顯示效果也很好,這里在論壇里面了個(gè)壇友做好的樣式,帖子里面有分享的詳細(xì)做法,可能比我的還要好一些,如果想要的話,可以點(diǎn)擊文檔左下方的閱讀原文,到西門子官方論壇進(jìn)行查看,截個(gè)圖效果如下

下面還是要簡(jiǎn)單介紹一下自帶表格控件的一些設(shè)置
?
4.3.1 控件組態(tài)
表格數(shù)據(jù)的顯示,還是要對(duì)控件進(jìn)行一定的設(shè)置,主要的設(shè)置有下面幾個(gè):
?常規(guī)選項(xiàng)卡里面的 打開(kāi)畫面->開(kāi)始刷新取消勾選,如果勾選了之后,在顯示其他其他的時(shí)候,還需要用腳本控制停止刷新,如果不需要自動(dòng)刷新的功能,這里最好取消勾選。

?
?數(shù)值列選項(xiàng)卡,是設(shè)置報(bào)表內(nèi)容,長(zhǎng)度可以設(shè)置這一列表格顯示的寬度,小數(shù)位可以根據(jù)你需要設(shè)置顯示數(shù)值的精確小數(shù)點(diǎn)位數(shù),或者不要設(shè)置成0

?
?時(shí)間列的設(shè)置,這里主要設(shè)置時(shí)間范圍,改為1-開(kāi)始到結(jié)束的時(shí)間,這樣才能使用腳本設(shè)置報(bào)表的起止時(shí)間,然后根據(jù)需要可以設(shè)置時(shí)間的格式,這里我設(shè)置成年-月-日 時(shí):分:秒的樣式,都帶前導(dǎo)0,如果顯示不完整,修改長(zhǎng)度,改的大一些就能顯示出來(lái)了。

?
組態(tài)到這里就差不多了,然后就是按鈕腳本的編輯
4.3.2 按鈕腳本及執(zhí)行效果
按鈕根據(jù)選擇的日期,修改表格控件的起止時(shí)間,時(shí)間的選擇是使用的DTPicker控件,控件的使用這里暫時(shí)不進(jìn)行介紹。按鈕通過(guò)選擇日期,查詢選擇日期的時(shí)間0:0:0到第二天的0:0:0的數(shù)據(jù)。按鈕完成腳本如下
Dim sStartTime,sEndTime
Dim DT,CO_EX
Set CO_EX = ScreenItems("AxOnlineTable1") '設(shè)置在線表格控件
Set DT = ScreenItems("DATA_ST") '設(shè)置DTPicker控件對(duì)象
sStartTime = DateValue(DT.Value) & " 00:00:00"'查詢起始時(shí)間
sEndTime = ?DateADD("d",1,sStartTime)'查詢結(jié)束時(shí)間
CO_EX.Visible = True ? ?'報(bào)表控件我默認(rèn)設(shè)置為隱藏,如果直接顯示的話,該行可以省略。
co_ex.TimeColumnRangeType = 1 ? '如果時(shí)間列沒(méi)有設(shè)置成開(kāi)始到結(jié)束時(shí)間,也可以使用該屬性修改。
CO_EX.TimeColumnBeginTime = sStartTime
co_ex.TimeColumnEndTime = sEndTime
執(zhí)行效果如下,報(bào)表
?

刷新效果根據(jù)計(jì)算機(jī)性能和硬盤,如果配置高一些應(yīng)該是基本上秒刷。
?
4.3.4 數(shù)據(jù)的導(dǎo)出到EXCEL
對(duì)于數(shù)據(jù)的導(dǎo)出,如果要求不高的話,控件自帶的導(dǎo)出功能就可以實(shí)現(xiàn),在控件工具欄里面有導(dǎo)出按鈕,或者使用控件的Export函數(shù)也能彈出導(dǎo)出的對(duì)話框。
?如果在工具欄里面沒(méi)有,可以在控件屬性里面的工具欄選項(xiàng)卡里面勾選"導(dǎo)出數(shù)據(jù)"后即可顯示出來(lái)

點(diǎn)擊導(dǎo)出按鈕之后,默認(rèn)就可以彈出導(dǎo)出數(shù)據(jù)選項(xiàng)卡,在選項(xiàng)卡里面可以設(shè)置導(dǎo)出數(shù)據(jù)的路徑,范圍,格式(目前WinCC好像是只能導(dǎo)出為csv格式),還有就是csv格式的分隔符,然后點(diǎn)擊確定.

?
?就能在你選擇的路徑找到你設(shè)置的文件名的文件,你可以使用office或者wps軟件打開(kāi),這里使用的是免費(fèi)版的wps軟件打開(kāi),然后設(shè)置一下數(shù)據(jù)分裂,顯示效果還是可以的

?
?如果您不想導(dǎo)出的顯示對(duì)話框,那可以在,控件屬性的導(dǎo)出選項(xiàng)卡進(jìn)行設(shè)置

?
如果這種導(dǎo)出csv格式的文件,不是很喜歡,感覺(jué)打開(kāi)的時(shí)候或者打開(kāi)之后的樣式都不是很滿意,那么就只能用腳本獲取表格里面數(shù)據(jù)的內(nèi)容,然后打開(kāi)EXCEL模板,把數(shù)據(jù)復(fù)制到Excel表格里面去,復(fù)制的過(guò)程研究了幾天,也沒(méi)有什么很好的辦法,從控件里面挨個(gè)單元格的進(jìn)行讀取然后對(duì)應(yīng)的填充到EXCEL表格里面。從幫助里面找了一段腳本,然后添加上寫入到EXCEL的部分,完整的腳本如下:
Dim oExcel,oWBook,co
Dim lCellIndex,lCellCount
Dim lRowIndex,lRowCount
Dim headingRow,selectedRow,selectedRows
Set co = ScreenItems("AxOnlineTable1")
Set headingRow = co.GetRow(0)
co.SelectAll()
Set selectedRows = co.GetSelectedRows
Set oExcel = CreateObject("Excel.Application")
Set oWBook = oExcel.workbooks.open(HMIRuntime.ActiveProject.Path & "\template.xls")
oExcel.visible = True
lCellCount = headingRow.CellCount
lRowCount = selectedRows.Count
For lRowIndex = 1 To lRowCount
Set selectedRow = selectedRows(lRowIndex)
For lCellIndex = 1 To lCellCount
oWBook.Sheets("Sheet1").cells(lRowIndex+1,lCellIndex).value=selectedRow.CellText(lCellIndex)
Next
Next
oWBook.saveas "E:\1.xls"
oWBook.close()
Set oWBook=Nothing
Set oExcel=Nothing
執(zhí)行完成后,導(dǎo)出的表格部分截圖如下:

由于表格模板我沒(méi)有做特殊的設(shè)置,所以效果和上面導(dǎo)出的效果倒是差不很多,如果模板做好的話,可以保持模板的樣式,打開(kāi)之后效果更好一些,設(shè)置好打印的頁(yè)面設(shè)置,需要打印的話,也可以使用腳本執(zhí)行打印動(dòng)作,實(shí)現(xiàn)報(bào)表導(dǎo)出后,自動(dòng)打印功能。?