日本在线www-日本在线播放一区-日本在线不卡免费视频一区-日本在线不卡视频-成人影院久久久久久影院-成人影院一区二区三区

ABB25年10月
關(guān)注中國(guó)自動(dòng)化產(chǎn)業(yè)發(fā)展的先行者!
工業(yè)智能邊緣計(jì)算2025年會(huì)
2025工業(yè)安全大會(huì)
CAIAC 2025
OICT公益講堂
當(dāng)前位置:首頁(yè) >> 案例 >> 案例首頁(yè)

案例頻道

鍋爐自動(dòng)抄表系統(tǒng)實(shí)現(xiàn)
一種用WinCC實(shí)現(xiàn)自定義報(bào)表的方法
  • 企業(yè):《自動(dòng)化博覽》     領(lǐng)域:儀器儀表     行業(yè):鍋爐供暖    
  • 點(diǎn)擊數(shù):7540     發(fā)布時(shí)間:2011-08-23 09:42:36
  • 分享到:

    摘要:本文以鍋爐自動(dòng)抄表系統(tǒng)為例,探討了在WINCC中實(shí)現(xiàn)自定義報(bào)表的方法,核心是巧妙利用了WINCC選件用戶(hù)歸檔(User Archive)的各種功能,實(shí)現(xiàn)了報(bào)表的存儲(chǔ)、查詢(xún)、顯示及打印的全過(guò)程。

    關(guān)鍵詞:報(bào)表;WinCC;用戶(hù)歸檔

    Abstract: Taking automatic checking meter system forbioler as an example, this paper introduces a technicalroute to achieve WinCC user defined report, The kernal isto implement the whole process of data storing, checking,displaying and printing by clever use of the functions ofUser Archive of WinCC.

    Key words: WinCC; Report; User achive

    1 概述

    在小型取暖鍋爐運(yùn)行中,許多重要運(yùn)行參數(shù)需要定期記錄,在手工年代,需要工人定期讀表并記錄在表格上,而在自動(dòng)控制實(shí)現(xiàn)之后,則需要用報(bào)表來(lái)實(shí)現(xiàn),其中包含的內(nèi)容有:每一個(gè)小時(shí)整點(diǎn)記錄的數(shù)據(jù)列表,每個(gè)工作日,每個(gè)班組內(nèi)對(duì)這些數(shù)據(jù)的統(tǒng)計(jì),統(tǒng)計(jì)方法有平均值及累加值,即為日?qǐng)?bào)表或班報(bào)表。

    例如,有業(yè)主要求的理想的報(bào)表結(jié)構(gòu)如表1中所示。 

                                    表1鍋爐運(yùn)行班報(bào)表  
              
            
     除了日?qǐng)?bào)表,另外還有月報(bào)表,就是可以查詢(xún)?nèi)我粋€(gè)月的運(yùn)行情況,其中包含這個(gè)月中每一天的數(shù)據(jù)統(tǒng)計(jì)表,以及最終對(duì)整個(gè)月所有數(shù)據(jù)做的數(shù)據(jù)統(tǒng)計(jì),同理如表2所示。

    這種應(yīng)用需求的報(bào)表,無(wú)法用WinCC或其它組態(tài)軟件簡(jiǎn)單地用組態(tài)的方式實(shí)現(xiàn),因而必須或多或少地進(jìn)行一些編程,通過(guò)腳本,控制訪(fǎng)問(wèn)數(shù)據(jù)庫(kù),得到查詢(xún)結(jié)果。在WinCC應(yīng)用中,常把此類(lèi)報(bào)表稱(chēng)做為自定義報(bào)表。

    西門(mén)子論壇 http://www.ad.siemens.com.cn/club/bbs/ 曾于2009年5月至7月間,組織了大型的專(zhuān)題討論,針對(duì)此類(lèi)自定義報(bào)表進(jìn)行了一個(gè)全面的探討,眾多網(wǎng)友提供了各種各樣的要求和素材,定時(shí)抄表類(lèi)型的報(bào)表是其中的一個(gè)大類(lèi)型,好多報(bào)表應(yīng)用都與此或相同或相關(guān)。

    這次專(zhuān)題討論,作者作為版區(qū)版主在其中承擔(dān)了牽線(xiàn)引導(dǎo)的職責(zé),引領(lǐng)網(wǎng)友從提供素材開(kāi)始,面對(duì)對(duì)象,整理思路,積極發(fā)表看法。而西門(mén)子官方的工程師,則在此次討論過(guò)程中及討論結(jié)束后分別整理了技術(shù)報(bào)告,并制作了簡(jiǎn)單示范程序,兩篇最重要的文獻(xiàn)就是《A0296 使用用戶(hù)歸檔實(shí)現(xiàn)報(bào)表簡(jiǎn)介》和《A0300 WinCC數(shù)據(jù)報(bào)表實(shí)現(xiàn)方法介紹》,配套的例子程序則是叫做ForTest.mcp。這兩篇技術(shù)文獻(xiàn)還主要是從原理方面進(jìn)行的分析,例子程序也著重強(qiáng)調(diào)了實(shí)現(xiàn)的原理,而對(duì)實(shí)際應(yīng)用過(guò)程中的細(xì)節(jié),則沒(méi)有側(cè)重考慮。
         
                                       表2  鍋爐運(yùn)行月報(bào)表
            
 
    本文是在A0296基礎(chǔ)上完善而來(lái)的,因而是對(duì)A0296的補(bǔ)充,本文實(shí)現(xiàn)的過(guò)程,也同樣有配套例子實(shí)現(xiàn),但與A0296已有極大的不同,表現(xiàn)在:

    (1)A0296強(qiáng)調(diào)的是西門(mén)子產(chǎn)品的使用方法,本例則著重強(qiáng)調(diào)報(bào)表實(shí)現(xiàn)技術(shù)路線(xiàn)和細(xì)節(jié),強(qiáng)調(diào)在報(bào)表實(shí)現(xiàn)過(guò)程中的細(xì)節(jié)。特別是包含報(bào)表系統(tǒng)實(shí)現(xiàn)的WinCC項(xiàng)目的可移植性,強(qiáng)調(diào)用戶(hù)對(duì)例子演示操作的首次體驗(yàn)。

    (2)A0296著重強(qiáng)調(diào)的是報(bào)表的打印環(huán)節(jié),與作者持觀點(diǎn)不同。作者認(rèn)為,報(bào)表最重要的方面不是打印,而是查詢(xún)。就是說(shuō),最終需要實(shí)現(xiàn)的是隨時(shí)隨地均可調(diào)用查詢(xún)功能,并分析查詢(xún)結(jié)果。引導(dǎo)用戶(hù)養(yǎng)成低碳環(huán)保的操作習(xí)慣,一般操作只進(jìn)行查詢(xún),不需要落實(shí)到紙面上。而如果確實(shí)需要打印時(shí),則在查詢(xún)完成之后繼續(xù)操作打印功能,將結(jié)果輸出到打印機(jī)。

    2 實(shí)現(xiàn)原理

    報(bào)表的實(shí)現(xiàn),最重要的是要有一條清晰的數(shù)據(jù)走向路線(xiàn)圖,并要盡量依托數(shù)據(jù)庫(kù)的思路來(lái)實(shí)現(xiàn),在其基礎(chǔ)上,將整個(gè)報(bào)表路線(xiàn)分割成相對(duì)獨(dú)立的幾個(gè)單元,一方面,將每一個(gè)單元的具體細(xì)節(jié)實(shí)現(xiàn)之后,串聯(lián)起來(lái),就可以構(gòu)成整個(gè)報(bào)表的實(shí)現(xiàn)過(guò)程。另一方面,每一個(gè)獨(dú)立的單元如果有備選的技術(shù)方法實(shí)現(xiàn),則只需將相應(yīng)部分替換,可以輕松地實(shí)現(xiàn)升級(jí),而不影響整個(gè)路線(xiàn)全局。

    建立在數(shù)據(jù)庫(kù)視角的自定義報(bào)表實(shí)現(xiàn)路線(xiàn)需要的步驟分別為:

    (1)數(shù)據(jù)存儲(chǔ):報(bào)表所需數(shù)據(jù)素材存儲(chǔ)到數(shù)據(jù)庫(kù)。

    (2)數(shù)據(jù)查詢(xún):前臺(tái)用戶(hù)通過(guò)操作界面接口設(shè)定查詢(xún)條件,后臺(tái)程序生成查詢(xún)所需SQL語(yǔ)句,并對(duì)數(shù)據(jù)庫(kù)中執(zhí)行查詢(xún)操作。

    (3)查詢(xún)結(jié)果顯示:選擇合適的表格控件將步驟2查詢(xún)得到的結(jié)果顯示在運(yùn)行畫(huà)面上。

    (4)打印報(bào)表或報(bào)表導(dǎo)出:將查詢(xún)結(jié)果輸出到打印機(jī)或?qū)С龅睫k公文件格式。如果步驟3選擇的控件能夠直接支持打印機(jī)和導(dǎo)出,則由表格控件實(shí)現(xiàn),否則從步驟2的查詢(xún)結(jié)果直接輸出實(shí)現(xiàn)。

    3 技術(shù)方法選擇的原則

    在明確了報(bào)表實(shí)現(xiàn)的原理之后,下一步就是選擇每一個(gè)節(jié)點(diǎn)上可行的技術(shù)方法,最后拼接成一整條可行的技術(shù)路線(xiàn)。不過(guò)在確定技術(shù)路線(xiàn)之前,有幾個(gè)細(xì)節(jié)的原則問(wèn)題需要確定,選擇技術(shù)路線(xiàn)時(shí)應(yīng)以不違背這些原則為標(biāo)準(zhǔn),如果原則有所違背,則要么更換技術(shù)點(diǎn),要么通過(guò)給這個(gè)技術(shù)方法打補(bǔ)丁的方法繞過(guò)缺陷。

    • 運(yùn)行:只要WinCC項(xiàng)目有報(bào)表要求,報(bào)表功能應(yīng)盡量無(wú)縫嵌入在WinCC項(xiàng)目?jī)?nèi),除非大規(guī)模運(yùn)行的項(xiàng)目,有上層MES系統(tǒng)支持,報(bào)表是由MES來(lái)實(shí)現(xiàn)的。

    無(wú)縫嵌入WinCC項(xiàng)目的好處在于操作者在操作時(shí)不必來(lái)回切換運(yùn)行程序。尤其對(duì)組態(tài)軟件來(lái)說(shuō),如果被切換出去,則原本的全屏方式及對(duì)計(jì)算機(jī)運(yùn)行權(quán)限管理都成為難題。

    • 安裝:當(dāng)一個(gè)項(xiàng)目被移植到另外一臺(tái)新電腦時(shí),除了WinCC軟件本身的安裝要求外,應(yīng)盡量少的附加安裝軟件,尤其是盡量減少對(duì)付費(fèi)軟件的需求。否則會(huì)導(dǎo)致維護(hù)人員極度反感。

    • 配置:在項(xiàng)目移植過(guò)程中或系統(tǒng)崩潰后的重新恢復(fù)過(guò)程中,報(bào)表功能應(yīng)盡量避免要求手工的設(shè)置操作。如要求手工建立一個(gè)數(shù)據(jù)庫(kù)表或一個(gè)ODBC接口等。這些操作一方面對(duì)維護(hù)人員水平的要求提高了,另一方面也導(dǎo)致系統(tǒng)的健壯性難以保證。

    4 本文的技術(shù)路線(xiàn)

    在綜合考慮報(bào)表實(shí)現(xiàn)的路線(xiàn),遵循上述的原則,結(jié)合本案例的實(shí)際要求及WinCC的實(shí)際功能,本文提出了實(shí)現(xiàn)的解決方法,仍舊按照實(shí)現(xiàn)原理中的四個(gè)步驟分別描述如下:

    (1)數(shù)據(jù)存儲(chǔ)

    數(shù)據(jù)存儲(chǔ)使用用戶(hù)歸檔(以下均簡(jiǎn)稱(chēng)UA)實(shí)現(xiàn),如A0296中所描述,使用UA歸檔的ID和JOB配合來(lái)實(shí)現(xiàn)。由于UA這段功能實(shí)在太重要了,是本文的精華所在,所以仍需著重描述一下。

    UA中的每一個(gè)歸檔都可以建立4個(gè)控制變量,分別叫做ID,JOB,F(xiàn)ield,Value。按照WinCC的幫助系統(tǒng)的描述,JOB=6時(shí),為讀作業(yè)。讀作業(yè)是WinCC站在UA的視角內(nèi)描述問(wèn)題,從UA的角度,當(dāng)JOB=6時(shí),把運(yùn)行的實(shí)時(shí)變量的值讀取并保存在數(shù)據(jù)庫(kù)相應(yīng)的位置,位置按照ID的設(shè)定。而我們站在外部的角度觀察這個(gè)操作,其實(shí)就是我們通常所說(shuō)的寫(xiě)數(shù)據(jù)庫(kù)的操作。而相應(yīng)的JOB=7時(shí)則為讀取數(shù)據(jù)庫(kù)的值到Tag變量中。案例要求的每小時(shí)整點(diǎn)時(shí)記錄數(shù)據(jù),則只需每判斷到整點(diǎn)到來(lái)時(shí)運(yùn)行ID=-1,JOB=6即完成一條數(shù)據(jù)記錄行為。

    首先是在UA中建立名字為Boiler的歸檔,然后編制腳本判斷在整點(diǎn)時(shí)產(chǎn)生一次增加新條目的操作,及ID=-1,JOB=6。具體可以實(shí)現(xiàn)的方法很多,如在全局腳本中通過(guò)Hour變量的變化觸發(fā),也可以在1S的循環(huán)周期的腳本中讀取當(dāng)前時(shí)間,當(dāng)判斷時(shí)間為整點(diǎn)時(shí)記錄。或者在PLC中編程以實(shí)現(xiàn)可控制的觸發(fā)。最簡(jiǎn)單的,可以參考A0296中描述的實(shí)現(xiàn)。這些方法都差別不大。

    需要注意的細(xì)節(jié):

    • 歸檔中的日期和時(shí)間域可以在建立之后重新修改格式為日期/時(shí)間格式,便于在查詢(xún)時(shí)條件匹配。如果以文本方式記錄的日期時(shí)間變量,在查詢(xún)時(shí)是以字符方式比較的,有可能出錯(cuò)。

    • 日期和時(shí)間是分成兩個(gè)變量域分別存儲(chǔ),但也可以用一個(gè)變量來(lái)存儲(chǔ),各有利弊。

    • 如果選擇用一個(gè)變量來(lái)存儲(chǔ)時(shí)間,可以直接使用UA表本身帶的最后修改選項(xiàng),自動(dòng)建立一個(gè)LastAccess的域,保存了數(shù)據(jù)寫(xiě)入時(shí)的時(shí)間值。同樣與通過(guò)WinCC變量來(lái)保存相比,各有利弊。

    • 最后一個(gè)域,班次(Turn),是用來(lái)記錄班次信息,唯有將班次信息正確完整記錄,才有可能做出成功的班報(bào)表。實(shí)時(shí)運(yùn)行班次的確定,需要根據(jù)運(yùn)行現(xiàn)場(chǎng)業(yè)主的倒班原則來(lái)確定,可以用編程實(shí)現(xiàn)倒班表的切換。但最簡(jiǎn)單的方法是通過(guò)WinCC用戶(hù)管理來(lái)實(shí)現(xiàn),相應(yīng)的班組接班時(shí)登入各自的班組用戶(hù)名,報(bào)表系統(tǒng)中自然得到正確的班組名稱(chēng)。

    • 關(guān)于WinCC啟動(dòng)時(shí)會(huì)觸發(fā)一次腳本并產(chǎn)生一個(gè)未在整點(diǎn)的數(shù)據(jù)記錄的問(wèn)題,可以通過(guò)腳本中增加判斷來(lái)繞過(guò)一次寫(xiě)操作,但從實(shí)際設(shè)備運(yùn)行的角度,如果由于電腦設(shè)備的原因,導(dǎo)致長(zhǎng)時(shí)間的停機(jī),必然導(dǎo)致數(shù)據(jù)記錄的缺失,那么在系統(tǒng)恢復(fù)之時(shí),如果能夠盡快地補(bǔ)錄一次數(shù)據(jù),相比之下,時(shí)間是否在整點(diǎn)則相對(duì)不那么重要了。

    (2)數(shù)據(jù)查詢(xún)

    數(shù)據(jù)查詢(xún)的核心是面向數(shù)據(jù)的SQL查詢(xún)語(yǔ)言。包括:查詢(xún)條件輸入,查詢(xún)語(yǔ)句生成以及調(diào)用數(shù)據(jù)庫(kù)接口進(jìn)行數(shù)據(jù)查詢(xún)的操作。

    一個(gè)完整的自定義的報(bào)表一般至少分為兩個(gè)部分,比如班日?qǐng)?bào)表,首先是當(dāng)前班次的所有數(shù)據(jù)的一個(gè)排列列表,然后是對(duì)這些數(shù)據(jù)的數(shù)學(xué)統(tǒng)計(jì)結(jié)果。統(tǒng)計(jì)方法可能是平均值或者累加值等,但最后的表現(xiàn)形式都是以表格形式體現(xiàn)的。或許有些特殊的結(jié)果輸出要求為多個(gè)表格部分組成,會(huì)超過(guò)兩部分,但原理上來(lái)說(shuō),要么是簡(jiǎn)單條件查詢(xún)的,本文稱(chēng)為A類(lèi)查詢(xún),要么就是帶統(tǒng)計(jì)的,本文稱(chēng)為B類(lèi)查詢(xún)。自定義報(bào)表最大的難題在于B類(lèi)查詢(xún)。

    一個(gè)典型的A類(lèi)SQL查詢(xún)的語(yǔ)法如下:

    Select ThisDay, F1, F2, F3, F4, F5, F6, F7, F8, F9

    From UA#Boiler

    Where ThisDay = '10-9-16' and Turn=,A,

    查詢(xún)功能提供給用戶(hù)的操作界面,主要的目的就是來(lái)產(chǎn)生這樣的查詢(xún)語(yǔ)法。其中,Select語(yǔ)句之后的為查詢(xún)需要顯示的列,一般為固定的內(nèi)容,程序中則為固定的字符串。From語(yǔ)法之后為UA中建立的表的名字,同樣也為固定的。所以最終要的是Where之后的條件的產(chǎn)生。

    為方便用戶(hù)使用,查詢(xún)條件的輸入日期時(shí)間部分使用專(zhuān)用時(shí)間控件,而班次則使用下拉菜單實(shí)現(xiàn)。盡可能避免手工鍵盤(pán)輸入,一方面實(shí)現(xiàn)輸入直觀快捷,最大程度地提高用戶(hù)的操作體驗(yàn);另一方面避免了使用過(guò)程中容易發(fā)生的格式錯(cuò)誤,從而在項(xiàng)目交工時(shí)也少了專(zhuān)門(mén)的培訓(xùn)環(huán)節(jié)。

    本文選擇的報(bào)表顯示形式為UA控件本身,通過(guò)將其工具欄和狀態(tài)欄禁用之后其表格部分就是一個(gè)功能完整的Grid控件的主體。而且非常幸運(yùn)的是,控件本身有一個(gè)Filter屬性,即用來(lái)設(shè)定過(guò)濾所顯示的數(shù)據(jù)條件。所以在腳本程序中不必生成完整的SQL查詢(xún)語(yǔ)句,而只需要生成where之后的條件部分即可。

    具體的實(shí)現(xiàn),控件的Filter屬性綁定一個(gè)文本型的tag,查詢(xún)腳本中將拼接起來(lái)的過(guò)濾條件類(lèi)似 ThisDay = '10-9-16' and Turn=,A, 的字符傳送給tag即可。

    B類(lèi)查詢(xún),對(duì)上述的9個(gè)變量,F(xiàn)1-F7求平均值,F(xiàn)8,F(xiàn)9求累加值的統(tǒng)計(jì)結(jié)果,SQL語(yǔ)句如下:

    Select ThisDay,AVG(F1) As F1,AVG(F2) As F2,AVG(F3)As F3,AVG(F4) As F4,AVG(F5) As F5,AVG(F6) As F6,AVG(F7) As F7,SUM(F8) As F8,SUM(F9) AS F9

    FROM UA#Boiler

    Where ThisDay = '10-9-16' and Turn =,A,

    Group BY ThisDay

    由于條件部分與A查詢(xún)完全相同,所以用戶(hù)接口部分使用同一接口,字符串拼接,得到如上的SQL語(yǔ)句。

   由于UA控件未提供數(shù)據(jù)分析的功能,B查詢(xún)的實(shí)現(xiàn)相對(duì)麻煩些,需要幾個(gè)步驟:

    • UA中建立一個(gè)空的表S,用于存放查詢(xún)結(jié)果

    • 通過(guò)ADO或者ODBC ADO直接對(duì)SQL數(shù)據(jù)庫(kù)進(jìn)行查詢(xún),得到統(tǒng)計(jì)結(jié)果的RecordSet。• 刪除S表中的原有數(shù)據(jù)。可以通過(guò)S表的控制變量,ID=-6,JOB=8來(lái)實(shí)現(xiàn)。多行數(shù)據(jù)則循環(huán)實(shí)現(xiàn)。

    • 仍舊通過(guò)S表的控制變量,遍歷RecordSet的結(jié)果,通過(guò)ID=-1,JOB=6的方式新增數(shù)據(jù)記錄,寫(xiě)入到UA表中。

    • 畫(huà)面增加第2個(gè)UA控件,指定到S表,不再指定過(guò)濾條件。

    核心代碼如下:

    Dim Adodc1

    Set Adodc1 = ScreenItems("Adodc1")

    Adodc1.ConnectionString="DSN=" & HMIRuntime.Tags("@DatasourceNameRT").Read

    Adodc1.RecordSource=SQL

    Adodc1.Refresh

    HMIRuntime.Trace vbCrLf & SQL

    Dim taglist

    taglist="ThisDay_Gr,F1_AVG,F2_AVG,F3_AVG,F4_AVG,"

    taglist=taglist & "F5_AVG,F6_AVG,F7_AVG,F8_SUM,F9_SUM"

    Dim TagName

    TagName=Split(taglist,",",-1,1)

    Dim i, Temp1

    If Adodc1.Recordset.recordcount<>0 Then

    For i=0 To UBound(TagName)

    HMIRuntime.Trace vbCrLf & TagName(i) & "="& Adodc1.Recordset.Fields(i)

    HMIRuntime.Tags(TagName(i)).Write Adodc1.Recordset.Fields(i)

    Next

    HMIRuntime.Tags("@UA_S_ID").Write -1

    HMIRuntime.Tags("@UA_S_Job").Write 6

   ElseHMIRuntime.Trace vbCrLf & "no data found!!!!"
 
    End If 
  
                    
                                 圖1 實(shí)際運(yùn)行后的效果圖

    注:由于例子程序以分鐘為單位定時(shí)歸檔,所以圖示數(shù)據(jù)均為整分鐘的。

    月報(bào)表的準(zhǔn)確描述是月度日?qǐng)?bào)表,與前面的班日?qǐng)?bào)表形式上類(lèi)似,都是分成兩部分的查詢(xún)內(nèi)容,但內(nèi)容上有所區(qū)別。第一部分的查詢(xún)內(nèi)容也為統(tǒng)計(jì)后的結(jié)果,即A類(lèi)查詢(xún)。本例中,在查詢(xún)部分一需要將某一個(gè)月內(nèi)所有的工作日的數(shù)據(jù)統(tǒng)計(jì)計(jì)算,并將結(jié)果按日期羅列起來(lái),而查詢(xún)部分二中的內(nèi)容則是以這個(gè)月份為對(duì)象的整體統(tǒng)計(jì)計(jì)算。

    月報(bào)表查詢(xún)一的SQL查詢(xún)語(yǔ)法為:

    Select ThisDay,AVG(F1) As F1,AVG(F2) As F2,AVG(F3) As F3,AVG(F4)As F4,AVG(F5) As F5,AVG(F6) As F6,AVG(F7) As F7,SUM(F8) As F8,SUM(F9) AS F9

    From UA#Boiler

    Where CONVERT(varchar(10), ThisDay, 120) like '2010-09%'

    Group By ThisDay

    查詢(xún)的主體部分與日?qǐng)?bào)表中的查詢(xún)二相似,也都同為B類(lèi)查詢(xún),但Where后的語(yǔ)法則相差很大。這是因?yàn)門(mén)hisDay列中保存的是日期數(shù)據(jù),而查詢(xún)條件則是年月,即需要將數(shù)據(jù)中年月條件符合的數(shù)據(jù)挑選出來(lái)。返回結(jié)果為每日一條數(shù)據(jù),計(jì)算的是當(dāng)日的統(tǒng)計(jì)值。

    這里使用轉(zhuǎn)換方法,把日期數(shù)據(jù)的格式轉(zhuǎn)換為YYYY-MM-DD格式的字符串,然后通過(guò)字符串比較的like語(yǔ)法來(lái)實(shí)現(xiàn)。

    查詢(xún)二的月統(tǒng)計(jì)數(shù)據(jù)的SQL語(yǔ)法:

    Select CONVERT(varchar(7),ThisDay,120),AVG(F1) As F1,AVG(F2) As F2,AVG(F3) As F3,AVG(F4) As F4,AVG(F5)As F5,AVG(F6) As F6,AVG(F7) As F7,SUM(F8) As F8,SUM(F9) AS F9

    FROM UA#Boiler

     WHERE CONVERT(varchar(10), ThisDay,120) like '2010-09%'

    GROUP BY CONVERT(varchar(7),ThisDay,120)

    這里的WHERE條件與查詢(xún)一相同,但Group語(yǔ)法又有所不同,因?yàn)樾枰獙⒄麄€(gè)月的所有數(shù)據(jù)統(tǒng)一統(tǒng)計(jì)為一個(gè)結(jié)果。所以通過(guò)轉(zhuǎn)換方式,把日期數(shù)據(jù)YYYY-MM-DD的前7個(gè)字符輸出,得到了YYYY-MM的年+月格式。然后既要在統(tǒng)計(jì)結(jié)果中顯示這個(gè)年月值,還需要用此作為Group的分組依據(jù)。

    (3)查詢(xún)結(jié)果顯示

    查詢(xún)結(jié)果顯示在WinCC運(yùn)行畫(huà)面上,前文已經(jīng)透露過(guò),本文主要的方法即使用UA控件,通過(guò)禁用工具欄、狀態(tài)欄并將屬性設(shè)置為只讀,則成為一個(gè)簡(jiǎn)單表格控件的模式,可以用來(lái)顯示查詢(xún)結(jié)果。其中查詢(xún)班日?qǐng)?bào)表部分,直接使用源記錄數(shù)據(jù)的歸檔,通過(guò)Filter屬性設(shè)置過(guò)濾條件,而日?qǐng)?bào)表的查詢(xún)統(tǒng)計(jì)則通過(guò)單獨(dú)建立的UA中的歸檔來(lái)實(shí)現(xiàn)。而月報(bào)表的兩部分查詢(xún)則都是使用和班日?qǐng)?bào)表的統(tǒng)計(jì)查詢(xún)部分一樣的手法,通過(guò)建立一個(gè)空表,在查詢(xún)到結(jié)果時(shí)填入數(shù)據(jù)到歸檔中,則畫(huà)面的表格中自動(dòng)充滿(mǎn)數(shù)據(jù)。

    (4)打印報(bào)表

    客戶(hù)在查詢(xún)運(yùn)行數(shù)據(jù)后,如需打印,則隨時(shí)可將查詢(xún)的結(jié)果打印出來(lái)。由于本文使用的
  
               
             
                                    圖2 打印效果圖

    UA控件直接支持打印功能,因而可以直接調(diào)用系統(tǒng)的打印模板實(shí)現(xiàn)。唯一差別的是,我們的報(bào)表里面包含2個(gè)表格 ,因而需在布局中設(shè)計(jì)2個(gè)“用戶(hù)歸檔 DLL運(yùn)行系統(tǒng)表格”,即可實(shí)現(xiàn)完整打印功能,如圖2所示。

    5 結(jié)論

    • 在WinCC中使用UA配合做報(bào)表,可以實(shí)現(xiàn)較為完善的功能。

    • 本文在數(shù)據(jù)記錄、數(shù)據(jù)查詢(xún)、顯示、打印輸出各方面都充分利用UA內(nèi)置提供功能,取得較好的效果。

    • 用UA來(lái)實(shí)現(xiàn)報(bào)表,優(yōu)點(diǎn)是需要較少的程序腳本,尤其是數(shù)據(jù)庫(kù)操作代碼。UA控件對(duì)數(shù)據(jù)格式的自動(dòng)適應(yīng)與處理,也簡(jiǎn)化了程序的工作量。

    • 此技術(shù)方法的缺點(diǎn)在于查詢(xún)時(shí)的效率較低,特別是一個(gè)月報(bào)表查詢(xún),需要先將UA表內(nèi)的數(shù)據(jù)逐行清空,然后再將查詢(xún)結(jié)果逐行寫(xiě)入。由于使用ID和JOB控制變量來(lái)實(shí)現(xiàn)讀寫(xiě)操作,需要等待確認(rèn)前步驟操作完成之后方可繼續(xù)腳本,導(dǎo)致程序運(yùn)行周期較長(zhǎng)。同時(shí)程序也不是特別健壯。

    • 自定義報(bào)表除本文所論及方向和思路之外,還有大量的細(xì)節(jié)工作要做并且很難用文字來(lái)描述。為此作者同時(shí)還專(zhuān)門(mén)制作了詳盡的WinCC例程,并發(fā)布在網(wǎng)絡(luò)上,地址為:http://goo.gl/Mze1

    • 例程中除使用UA控件實(shí)現(xiàn)之外,還演示了另外兩種直接支持ADO方法的表格控件的實(shí)現(xiàn)方法。

    摘自《自動(dòng)化博覽》2011年第八期
 

熱點(diǎn)新聞

推薦產(chǎn)品

x
  • 在線(xiàn)反饋
1.我有以下需求:



2.詳細(xì)的需求:
姓名:
單位:
電話(huà):
郵件:
午夜家庭影院| 韩国毛片免费| 二级片在线观看| 999久久66久6只有精品| 欧美18性精品| 免费国产在线观看| 亚洲 欧美 成人日韩| 青青久久精品国产免费看| 精品视频在线观看免费 | 日韩专区第一页| 黄色免费三级| 四虎影视库国产精品一区| 国产伦精品一区二区三区无广告| 黄色免费三级| 精品国产一级毛片| 日本在线www| 国产视频在线免费观看| 国产伦精品一区二区三区在线观看 | 欧美a级成人淫片免费看| 欧美激情一区二区三区视频高清| 精品视频在线看 | 一本高清在线| 日韩av成人| 免费国产一级特黄aa大片在线| 欧美国产日韩久久久| 欧美日本国产| 国产网站免费观看| 欧美国产日韩在线| 美国一区二区三区| 国产伦久视频免费观看 视频| 91麻豆精品国产综合久久久| 天天色成人网| 亚洲精品久久玖玖玖玖| 成人高清视频在线观看| 国产麻豆精品视频| 午夜家庭影院| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 91麻豆国产| 成人影院久久久久久影院| 国产成人精品影视| 欧美另类videosbestsex久久| 免费国产一级特黄aa大片在线| 国产成人精品综合久久久| 日韩欧美一二三区| 91麻豆精品国产自产在线| 国产一区免费观看| 九九精品在线播放| 91麻豆精品国产高清在线| 美女免费精品高清毛片在线视| 超级乱淫黄漫画免费| 午夜在线亚洲男人午在线| 尤物视频网站在线| a级精品九九九大片免费看| 国产a免费观看| 九九免费高清在线观看视频| 日韩欧美一及在线播放| 亚欧成人乱码一区二区| 91麻豆tv| 欧美激情中文字幕一区二区| 美国一区二区三区| 一级女性全黄生活片免费| 四虎影视库| 欧美一区二区三区性| 国产伦精品一区二区三区无广告| 黄色免费三级| 99热视热频这里只有精品| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 久草免费在线观看| 国产极品精频在线观看| 九九精品影院| 精品视频在线看| 日韩在线观看免费完整版视频| 韩国毛片| 人人干人人插| 九九干| 精品国产香蕉在线播出| 精品久久久久久综合网| 亚欧成人乱码一区二区| 欧美大片a一级毛片视频| 亚洲精品影院久久久久久| 亚欧成人乱码一区二区| 91麻豆精品国产自产在线观看一区 | 国产视频一区二区在线播放| 日韩在线观看免费完整版视频| 99久久精品国产免费| 精品国产亚洲人成在线| 一本伊大人香蕉高清在线观看| 99久久精品国产免费| 天天做日日爱| 免费国产在线视频| 欧美爱色| 成人影视在线播放| 亚欧乱色一区二区三区| 色综合久久天天综合绕观看| 日日日夜夜操| 韩国三级一区| 亚洲精品永久一区| 欧美国产日韩在线| 久久成人性色生活片| 亚洲 激情| 精品国产香蕉在线播出| 成人a大片在线观看| 国产成人啪精品| 国产原创中文字幕| 99色视频在线| 日本特黄特色aaa大片免费| 久久精品大片| 国产成a人片在线观看视频| 日韩一级精品视频在线观看| 免费国产在线视频| 欧美另类videosbestsex| 欧美另类videosbestsex久久| 午夜久久网| 四虎影视库| 中文字幕一区二区三区 精品| 高清一级毛片一本到免费观看| 欧美一级视| 亚欧视频在线| 精品国产一级毛片| 一级毛片看真人在线视频| 国产综合成人观看在线| 可以在线看黄的网站| 二级片在线观看| 欧美国产日韩久久久| 精品在线观看国产| 国产激情一区二区三区| 久久成人性色生活片| 国产一区二区精品久久91| 你懂的日韩| 青青青草视频在线观看| 青青久热| 999久久久免费精品国产牛牛| 99久久精品国产免费| 91麻豆精品国产自产在线观看一区 | 黄视频网站在线免费观看| 国产亚洲免费观看| 国产精品1024永久免费视频| 韩国三级一区| 精品国产一区二区三区久久久蜜臀 | 日韩免费在线视频| 韩国三级视频网站| 欧美日本国产| 成人免费观看网欧美片| 日韩免费在线视频| 精品视频在线观看一区二区| 美国一区二区三区| 精品视频一区二区| 国产亚洲精品aaa大片| 国产伦理精品| 国产伦精品一区三区视频| 日本免费看视频| 精品在线观看国产| 久草免费在线观看| 国产麻豆精品视频| 欧美一级视| 国产不卡福利| 台湾美女古装一级毛片| 色综合久久久久综合体桃花网| 黄色短视屏| 日韩avdvd| 欧美1卡一卡二卡三新区| 你懂的福利视频| 99热热久久| 国产成人精品综合在线| 欧美激情一区二区三区在线播放| 九九九网站| 中文字幕一区二区三区 精品| 国产一级生活片| 香蕉视频一级| 四虎影视久久久免费| 久草免费资源| 国产91素人搭讪系列天堂| 久久成人亚洲| 成人a大片在线观看| 美国一区二区三区| 亚洲第一色在线| 美国一区二区三区| 色综合久久天天综合观看| 国产欧美精品午夜在线播放| 尤物视频网站在线| 久久福利影视| 欧美18性精品| 午夜欧美福利| 国产精品12| 国产一区二区精品久久91| 欧美激情一区二区三区在线| 欧美一级视| 999精品在线| 午夜欧美成人久久久久久| 成人免费观看的视频黄页| 免费毛片播放| 香蕉视频亚洲一级| 黄色免费三级| 日本在线不卡免费视频一区| 可以在线看黄的网站| 亚洲爆爽| 日本在线不卡免费视频一区| 日韩免费在线| 黄视频网站在线观看| 日本免费看视频|