亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        鍋爐自動(dòng)抄表系統(tǒng)實(shí)現(xiàn)
        —— 一種用WinCC實(shí)現(xiàn)自定義報(bào)表的方法

        2011-05-29 09:40:38煙臺(tái)龍?jiān)措娏夹g(shù)股份有限公司王前厚
        自動(dòng)化博覽 2011年8期
        關(guān)鍵詞:數(shù)據(jù)庫(kù)方法

        煙臺(tái)龍?jiān)措娏夹g(shù)股份有限公司 王前厚

        張家港市繁昌機(jī)械有限公司 王炳輝

        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)表,就是可以查詢?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ò)腳本,控制訪問(wèn)數(shù)據(jù)庫(kù),得到查詢結(jié)果。在WinCC應(yīng)用中,常把此類報(bào)表稱做為自定義報(bào)表。

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

        這次專題討論,作者作為版區(qū)版主在其中承擔(dā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 使用用戶歸檔實(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ù)路線和細(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)用戶對(duì)例子演示操作的首次體驗(yàn)。

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

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

        報(bào)表的實(shí)現(xiàn),最重要的是要有一條清晰的數(shù)據(jù)走向路線圖,并要盡量依托數(shù)據(jù)庫(kù)的思路來(lái)實(shí)現(xiàn),在其基礎(chǔ)上,將整個(gè)報(bào)表路線分割成相對(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è)路線全局。

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

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

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

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

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

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

        在明確了報(bào)表實(shí)現(xiàn)的原理之后,下一步就是選擇每一個(gè)節(jié)點(diǎn)上可行的技術(shù)方法,最后拼接成一整條可行的技術(shù)路線。不過(guò)在確定技術(shù)路線之前,有幾個(gè)細(xì)節(jié)的原則問(wèn)題需要確定,選擇技術(shù)路線時(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ù)路線

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

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

        數(shù)據(jù)存儲(chǔ)使用用戶歸檔(以下均簡(jiǎn)稱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í)間格式,便于在查詢時(shí)條件匹配。如果以文本方式記錄的日期時(shí)間變量,在查詢時(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用戶管理來(lái)實(shí)現(xiàn),相應(yīng)的班組接班時(shí)登入各自的班組用戶名,報(bào)表系統(tǒ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ù)查詢

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

        一個(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)單條件查詢的,本文稱為A類查詢,要么就是帶統(tǒng)計(jì)的,本文稱為B類查詢。自定義報(bào)表最大的難題在于B類查詢。

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

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

        From UA#Boiler

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

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

        為方便用戶使用,查詢條件的輸入日期時(shí)間部分使用專用時(shí)間控件,而班次則使用下拉菜單實(shí)現(xiàn)。盡可能避免手工鍵盤(pán)輸入,一方面實(shí)現(xiàn)輸入直觀快捷,最大程度地提高用戶的操作體驗(yàn);另一方面避免了使用過(guò)程中容易發(fā)生的格式錯(cuò)誤,從而在項(xiàng)目交工時(shí)也少了專門(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查詢語(yǔ)句,而只需要生成where之后的條件部分即可。

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

        B類查詢,對(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查詢完全相同,所以用戶接口部分使用同一接口,字符串拼接,得到如上的SQL語(yǔ)句。

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

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

        ? 通過(guò)ADO或者ODBC ADO直接對(duì)SQL數(shù)據(jù)庫(kù)進(jì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

        Else

        HMIRuntime.Trace vbCrLf & "no data found!!!!"

        End If

        圖1 實(shí)際運(yùn)行后的效果圖

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

        月報(bào)表查詢一的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 CONVERT(varchar(10), ThisDay, 120) like '2010-09%'

        Group By ThisDay

        查詢的主體部分與日?qǐng)?bào)表中的查詢二相似,也都同為B類查詢,但Where后的語(yǔ)法則相差很大。這是因?yàn)門(mén)hisDay列中保存的是日期數(shù)據(jù),而查詢條件則是年月,即需要將數(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)。

        查詢二的月統(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條件與查詢一相同,但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)查詢結(jié)果顯示

        查詢結(jié)果顯示在WinCC運(yùn)行畫(huà)面上,前文已經(jīng)透露過(guò),本文主要的方法即使用UA控件,通過(guò)禁用工具欄、狀態(tài)欄并將屬性設(shè)置為只讀,則成為一個(gè)簡(jiǎn)單表格控件的模式,可以用來(lái)顯示查詢結(jié)果。

        其中查詢班日?qǐng)?bào)表部分,直接使用源記錄數(shù)據(jù)的歸檔,通過(guò)Filter屬性設(shè)置過(guò)濾條件,而日?qǐng)?bào)表的查詢統(tǒng)計(jì)則通過(guò)單獨(dú)建立的UA中的歸檔來(lái)實(shí)現(xiàn)。

        而月報(bào)表的兩部分查詢則都是使用和班日?qǐng)?bào)表的統(tǒng)計(jì)查詢部分一樣的手法,通過(guò)建立一個(gè)空表,在查詢到結(jié)果時(shí)填入數(shù)據(jù)到歸檔中,則畫(huà)面的表格中自動(dòng)充滿數(shù)據(jù)。

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

        圖2 打印效果圖

        客戶在查詢運(yùn)行數(shù)據(jù)后,如需打印,則隨時(shí)可將查詢的結(jié)果打印出來(lái)。由于本文使用的UA控件直接支持打印功能,因而可以直接調(diào)用系統(tǒng)的打印模板實(shí)現(xiàn)。唯一差別的是,我們的報(bào)表里面包含2個(gè)表格 ,因而需在布局中設(shè)計(jì)2個(gè)“用戶歸檔 DLL運(yùn)行系統(tǒng)表格”,即可實(shí)現(xiàn)完整打印功能,如圖2所示。

        5 結(jié)論

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

        ? 本文在數(shù)據(jù)記錄、數(shù)據(jù)查詢、顯示、打印輸出各方面都充分利用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)在于查詢時(shí)的效率較低,特別是一個(gè)月報(bào)表查詢,需要先將UA表內(nèi)的數(shù)據(jù)逐行清空,然后再將查詢結(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í)還專門(mén)制作了詳盡的WinCC例程,并發(fā)布在網(wǎng)絡(luò)上,地址為:http://goo.gl/Mze1

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

        猜你喜歡
        數(shù)據(jù)庫(kù)方法
        學(xué)習(xí)方法
        數(shù)據(jù)庫(kù)
        數(shù)據(jù)庫(kù)
        可能是方法不對(duì)
        數(shù)據(jù)庫(kù)
        用對(duì)方法才能瘦
        Coco薇(2016年2期)2016-03-22 02:42:52
        數(shù)據(jù)庫(kù)
        數(shù)據(jù)庫(kù)
        四大方法 教你不再“坐以待病”!
        Coco薇(2015年1期)2015-08-13 02:47:34
        賺錢(qián)方法
        99久久久69精品一区二区三区| 中文在线а√天堂官网| 粉嫩极品国产在线观看| 精品女同av一区二区三区| 蜜臀av一区二区三区免费观看| 水蜜桃视频在线观看入口| 免费国产线观看免费观看| 亚洲av永久无码国产精品久久| 亚洲AⅤ无码片一区二区三区| 久久精品国产亚洲5555| 国产午夜福利av在线麻豆| 精品亚洲一区二区三区四| 台湾无码av一区二区三区| 无码人妻精品一区二区三区66| 老熟女一区二区免费| 最新日本免费一区二区三区| 日本二一三区免费在线| 蜜桃无码一区二区三区| 无码国产精品一区二区免费97| 亚洲日本一区二区在线观看 | 亚洲av精品一区二区| 蜜桃18禁成人午夜免费网站| 色一情一乱一乱一区99av| 成黄色片视频日本秘书丝袜| 免费人成黄页在线观看国产| 欧美亚洲一区二区三区| 天天干夜夜操| 日本午夜国产精彩| 亚洲人妻精品一区二区三区| 久久中文骚妇内射| 国产精品视频一区二区三区四| 中文字幕精品亚洲无线码二区 | 中文乱码字幕精品高清国产 | 中文字幕一区二区区免| 亚洲精品国产精品乱码视色| 黄色视频免费在线观看| 中文字幕人妻系列一区尤物视频| 久久亚洲精品国产av| 欧美一区二区三区久久综| 国内无遮码无码| 亚洲av男人的天堂在线|