第一篇:紫金橋軟件讀取歷史數(shù)據(jù)的方法小結(jié)
紫金橋軟件讀取歷史數(shù)據(jù)的方法小結(jié)
摘要:本文簡述了紫金橋軟件讀取歷史數(shù)據(jù)的三種方式,重點說明了取批量歷史的不同操作方法以及各方法間的區(qū)別。正文: 紫金橋軟件自帶了過程數(shù)據(jù)庫,可以高效的保存相關(guān)數(shù)據(jù)點的歷史記錄,同時提供了豐富的方法讀取所需的歷史記錄。筆者使用紫金橋做了多個工程,僅就個人經(jīng)驗進行簡單小結(jié),這里和大家分享,還望能起到拋磚引玉的作用,如有不對之處,還望指正。
關(guān)于保存歷史記錄
通過紫金橋組態(tài)軟件自身的過程數(shù)據(jù)庫,可以通過兩種方式自動保存數(shù)據(jù)點的歷史記錄,定時保存和變化率保存,定時保存適合保存變化不是很快,或者比較有規(guī)律的數(shù)據(jù)點,變化率保存的應(yīng)用范圍相對更廣,適合變化較快或者較慢的情形,這里要注意兩點內(nèi)容:
? 對于定時保存的歷史記錄一般不做壓縮的,所以不建議對于較多的數(shù)據(jù)庫點設(shè)置為保存間隔較短的定時保存,否則歷史記錄的文件體積會增加相對較快;
? 對于變化率保存的數(shù)據(jù),系統(tǒng)會自動壓縮保存,要注意的是其變化率是相對于該點的量程而言的,而不是相對于上次保存的歷史值。數(shù)據(jù)點的量程可以在“點組態(tài)”基本參數(shù)中修改;
個人覺得過程數(shù)據(jù)庫很適合保存現(xiàn)場連續(xù)的采集值,對于一些字符型的數(shù)據(jù),可能還需要借助關(guān)系數(shù)據(jù)庫來保留歷史值了。而關(guān)系數(shù)據(jù)庫在保存連續(xù)數(shù)值方面也遠不如過程數(shù)據(jù)庫方便。關(guān)于紫金橋?qū)﹃P(guān)系數(shù)據(jù)庫的各種操作,筆者將在其它文檔中進行說明,這里不再贅述。
歷史數(shù)據(jù)的讀取
紫金橋軟件提供了多種方式讀取歷史數(shù)據(jù),這里僅就一些常用的方法進行說明。一般有三種方式讀取歷史記錄,分別是:歷史曲線、讀取單點歷史、讀取批量歷史。在說明各種方式之前先要解釋下“壞值”的概念,數(shù)據(jù)點只有在系統(tǒng)運行時才能保存歷史記錄,對于系統(tǒng)沒有運行時的歷史值,如果該時刻早于當(dāng)前時刻,紫金橋軟件通常會賦一個壞值,-9999。而對于未到時間的歷史值可以在“系統(tǒng)參數(shù)”進行設(shè)置,如圖所示:
下面簡述下讀取歷史記錄的三種操作: 通過歷史曲線
通過歷史曲線或者趨勢分析曲線可以直接查詢相關(guān)點的歷史值,這種方法的優(yōu)點在于數(shù)據(jù)很直觀,便捷、曲線可以任意放大。歷史曲線:
趨勢分析:
歷史曲線和趨勢分析曲線的不同在于,歷史曲線可以通過“打散單元”的操作將該組件分解,自行根據(jù)需要重新組合;而趨勢分析組件功能更強,提供了歷史曲線沒有的統(tǒng)計數(shù)據(jù)、全屏顯示等功能,但是不支持分解操作,不能自行組合。讀取單點歷史記錄
單獨采集某點某時刻的歷史值或某段時間的統(tǒng)計值一般通過腳本函數(shù)實現(xiàn): ? 讀取某刻歷史值一般使用三種函數(shù):GetHisData(Var,Year,Month,Day,Hour,Minute,Second,MilliSec);
GetHisData2(Var,StartTime, MilliSec);
GetHisDataEx(DataSource, VarName ,StartTime,MilliSecond);
GetHisData和GetHisData2前者適合讀取具體時刻的歷史值,后者通過一個時間值來獲取歷史記錄,該值是一個整數(shù),表示相對于1970年1月1日08:00時過去的秒數(shù),這個秒數(shù)在紫金橋軟件中非常常用。實際工程中,這個秒數(shù)可以通過函數(shù)LongTime(“2001/01/01 14:50:48”)得到,該函數(shù)可以自動得到某時刻過去的秒數(shù)。秒數(shù)也可以通過一些組件得到,比如起始時間組件,如圖所示:
圖中有一個起始時間組件,其下是該組件的time屬性所對應(yīng)的相對于1970/1/1/08:00:00 過去的秒數(shù)。比如該組件被命名為EndTime,在腳本中通過#EndTime.time即可得到相應(yīng)的秒數(shù)。
? 讀取某段時間內(nèi)的統(tǒng)計值可以通過函數(shù)GetStatisDataEx(DataSource,VarName,StartTime,TimeSpan,F(xiàn)lag,Time)或GetStatisData(Var, Year, Month, Day, Hour, TimeSpan, Flag,Time)得到一段時間內(nèi)的最大值、最小值或者平均值。
val = GetStatisDataEx(“",”FQ101.PV“, LongTime(”2007/09/04 14:30:00"), 2,0,strTime)示例中Val變量可以得到FQ101.pv值在2007年9月4日14點30分起2個小時內(nèi)的平均值。這里要注意的是,GetStatisData 和GetStatisDataEx函數(shù)會自動過濾掉壞值。在使用統(tǒng)計函數(shù)時,要確保對應(yīng)的點在組態(tài)時選擇上統(tǒng)計設(shè)置,如圖所示:
此外還要注意的是,由于紫金橋系統(tǒng)是每小時自動統(tǒng)計下歷史記錄,對于剛保存的歷史記錄,比如1小時內(nèi)的歷史值,通過統(tǒng)計函數(shù)可能無法得到最新的統(tǒng)計值。如果需要得到即時的統(tǒng)計值,需要借助紫金橋軟件提供的SPC歷史組件進行統(tǒng)計。關(guān)于該組件的一些操作可以參看紫金橋軟件相關(guān)幫助文檔。讀取批量歷史
讀取批量歷史通常以報表的形式顯示出來。對于歷史報表,依據(jù)不同的標(biāo)準(zhǔn)有不同的分法,按照行數(shù)區(qū)分可以分為固定行列和不固定行數(shù),按顯示的類型可以分為統(tǒng)計和非統(tǒng)計歷史報表。所謂統(tǒng)計報表通常是對一些累加值的點進行統(tǒng)計,比如最大值、最小值、或者平均值等,非統(tǒng)計報表就是直接查詢某時刻的歷史值。不同情況下具體實現(xiàn)的方法也各不同,這里僅就筆者熟悉的方法進行簡述。
行數(shù)固定的非統(tǒng)計歷史報表
對于需要獲取某段時間內(nèi),固定時間間隔的歷史記錄,通常其行數(shù)是固定的,比如需要對一天內(nèi)的整點數(shù)值采樣,其行數(shù)是24,時間間隔一小時。這種情況下,使用自由報表的“取批量歷史”功能最為簡單。具體操作方式簡述如下:
首先選中自由報表中需要顯示歷史記錄的一列,然后點擊自由報表工具欄中右側(cè)的公式選擇按鈕,如圖所示:
點擊后選擇“取批量歷史”,如圖所示:
系統(tǒng)彈出對話框:
在“數(shù)據(jù)庫變量”中填寫所關(guān)聯(lián)的數(shù)據(jù)點,比如“A1.pv”,根據(jù)實際情況設(shè)定“采集個數(shù)”和“時間間隔”,“采集個數(shù)”不能填寫為變量。這里的“時間表達式”是指批量歷史中首個采集點的時間,可以是一個整形變量,其值是前文中提到的1970年1月1日08:00時過去的秒數(shù)。
優(yōu)點:通過取批量歷史的功能,可以輕松的獲取某點采集個數(shù)固定,時間間隔固定的歷史記錄。
缺點:無法實現(xiàn)采集時間不固定、采集歷史記錄個數(shù)不固定的要求,無法采集統(tǒng)計值。
小技巧:通常顯示歷史記錄的時候,往往需要在另一行顯示該記錄相對應(yīng)的時間,可以選擇一列,將該列的輸入輸出設(shè)置為“日期和時間”,然后將該列關(guān)聯(lián)和歷史值對應(yīng)的秒數(shù)即可。
行數(shù)不固定的非統(tǒng)計報表
有時需要用戶自行設(shè)置歷史記錄查詢的開始時間和結(jié)束時間,查詢的歷史記錄的間隔時間,這時往往需要借助歷史數(shù)據(jù)對象來獲取記錄。
在紫金橋的圖庫中“歷史數(shù)據(jù)”選擇“歷史數(shù)據(jù)對象”,如圖所示:
將其拖拽置窗口,系統(tǒng)自動增加一歷史數(shù)據(jù)對象,如圖所示:
雙擊該對象,可以在屬性對話框中進行參數(shù)設(shè)置,如圖所示:
該組件通常運行時是隱藏的。可以在屬性設(shè)置對話框中增加所需查詢的歷史點(可以同時查詢多個)。通過點擊“事件腳本”,可以在此編寫所需的腳本語句,如圖所示:
通常是通過按鈕等事件調(diào)用歷史數(shù)據(jù)對象的Start(BeginTime, Cycle, Count)函數(shù),通過該函數(shù)可以設(shè)置查詢的開始時間,查詢的時間周期和查詢的歷史個數(shù),并進行查詢。當(dāng)查詢結(jié)束后,會執(zhí)行“檢索完成時”腳本。一般在“檢索完成時”的腳本中通過一個循環(huán)語句,把查詢到的結(jié)果更新到自由報表中。例如腳本: num=#his.GetColCount();//得到查詢的行數(shù)
for k=1to num+1step1 #report.settxt(1,k+1,#his.GetTimeText(k-1,0));//得到時間
#report.settxt(2,k+1,#his.GetCellText(0,k-1));//得到變量1的歷史值 #report.settxt(3,k+1,#his.GetCellText(1,k-1));//得到變量2的歷史值
Next 該腳本首先獲得歷史數(shù)據(jù)對象查詢的數(shù)據(jù)行數(shù),然后逐行賦值給自由報表中指定的單元格。關(guān)于該組件的更詳細操作可以參看紫金橋軟件的說明書。優(yōu)點:可以方便的采集行數(shù)固定或不固定的歷史值。
統(tǒng)計報表
對于有些報表,需要統(tǒng)計一些歷史值,比如一段時間的最大值、最小值、平均值或者某段時間內(nèi),歷史值的最大值和最小值的差值(比如產(chǎn)量)。這類報表可以通過SPC控件或者歷史摘要控件進行讀取統(tǒng)計值,然后再寫入自由報表中,也可以直接使用統(tǒng)計函數(shù)獲取統(tǒng)計值。關(guān)于SPC控件和歷史摘要控件的操作方法和上文中提到了歷史數(shù)據(jù)對象比較類似,具體內(nèi)容和相關(guān)函數(shù)可以參看紫金橋軟件說明書。其中SPC控件可以從任意時段的歷史數(shù)據(jù)中進行抽樣統(tǒng)計,進行SPC統(tǒng)計的點是否選擇了“是否統(tǒng)計”都不影響SPC分析;而歷史摘要控件選擇的是該點的統(tǒng)計值,進行歷史摘要的點必須選擇“統(tǒng)計”,而統(tǒng)計往往是以小時為單位的,所以相對于SPC控件,摘要控件統(tǒng)計的結(jié)果更為準(zhǔn)確,但是時間跨度需要大于一小時。
這里要說明的是,對于一些累加的值而言,比如產(chǎn)量等,有時需要得到一段時間內(nèi)的差值,有些用戶往往會用結(jié)束時刻的歷史值減去開始時刻的歷史值,這種做法是有隱患的,因為開始時刻或者結(jié)束時刻系統(tǒng)可能處于未運行狀態(tài),這時,歷史值會是壞值-9999。所以建議的做法是選取這段時間內(nèi)的最大統(tǒng)計值減去這段時間內(nèi)的最小統(tǒng)計值(系統(tǒng)會自動過濾壞值),不過獲取統(tǒng)計值的速度會比獲取歷史值的速度稍慢一點,如果該段時間跨度很大,可以適當(dāng)縮小統(tǒng)計值的時間范圍。
其他歷史報表
有時可能需要統(tǒng)計一些離散的歷史值,比如在檢測行業(yè),每次測量的時間間隔可能不固定,測量次數(shù)可能也不確定,這時想查詢歷史檢測記錄,使用前面提到的方法都難以實現(xiàn)。這里推薦兩種做法:
? 設(shè)置一個標(biāo)記點,該標(biāo)記點使用變化率保存歷史記錄,每測量結(jié)束后,都改變一次標(biāo)記點的值,其他測量值同樣保持歷史記錄,查詢時使用“取全部歷史數(shù)據(jù)對象”組件(在圖庫中“歷史數(shù)據(jù)”中調(diào)用),如圖所示:
通過該組件可以查詢這個標(biāo)記點指定范圍內(nèi)的所有歷史記錄,同時可以查詢到該時刻時其他測量值的歷史值。比如,工程中有A1和A2兩個位號,A1是標(biāo)記點,現(xiàn)在希望查詢A1的在當(dāng)天的所有歷史數(shù)據(jù)。比如查到的結(jié)果是12:23:18.102時刻有一個歷史數(shù)據(jù),18:43:25.358時刻有一個歷史數(shù)據(jù)。這時希望同時查詢A2在12:23:18.102時刻和18:43:25.358時刻的歷史數(shù)據(jù)。進入“取全部歷史數(shù)據(jù)”對象的報表設(shè)置界面:
可以看到,報表的前3列分別是時間、毫秒和查詢的位號的數(shù)據(jù),可以在后面增加一列,比如A2.PV,見上圖。并在下面輸入如下的腳本=GetHisData2(A2.PV, Val(1,$R), Val(2,$R))。這段腳本的意義是取A2.PV的歷史數(shù)據(jù),其中時間采用左側(cè)第一列的時間,毫秒數(shù)采用左側(cè)第二列的時間。當(dāng)組件查詢到A1.PV的歷史數(shù)據(jù)的時候,會自動地增加報表的行數(shù)來存放相應(yīng)的數(shù)據(jù)。同時也會自動地復(fù)制上面輸入的腳本,這樣后面的列就能顯示A2.PV的相應(yīng)時刻的歷史數(shù)據(jù)了。
優(yōu)點:無需借助關(guān)系數(shù)據(jù)庫,即可查詢離散的無規(guī)律變化的歷史記錄; 缺點:受過程數(shù)據(jù)庫自身的局限,無法保存字符型歷史記錄。? 每次測量結(jié)束后,將測量數(shù)據(jù)保存到關(guān)系數(shù)據(jù)庫中,然后通過自由報表查詢關(guān)系數(shù)據(jù)庫中的歷史記錄。
優(yōu)點:可以方便的保存字符型或非字符型的離散歷史記錄; 缺點:需要關(guān)系庫的支持;
本文簡述了讀取紫金橋軟件歷史數(shù)據(jù)庫的三種方式:曲線、函數(shù)、報表,并詳細介紹了各種情況下使用報表讀取歷史數(shù)據(jù)的不同操作方法,當(dāng)然具體操作中,還有更多其他的方法可以選擇。希望以上介紹能對各位操作紫金橋軟件有所幫助,也希望起到拋磚引玉的作用,歡迎提出更好操作方法,彼此討論提高。
第二篇:組態(tài)王紫金橋--輸煤控制系統(tǒng)工藝分析
控制系統(tǒng)綜合實驗
第1章 輸煤控制系統(tǒng)工藝分析
1.1 輸煤控制系統(tǒng)的目的
在我國大型熱電廠中所采用的絕大部分燃料是燃煤。由于煤產(chǎn)地與電廠間地理位置或地域不同,就需通過汽車、火車、或輪船把煤運往火電廠煤廠,通過由卸煤系統(tǒng)、堆煤系統(tǒng)、上煤系統(tǒng)和配煤系統(tǒng)等組成的輸煤程控系統(tǒng)輸送到指定的煤倉或煤筒?;痣姀S輸煤控制系統(tǒng)的主要任務(wù)就是卸煤、堆煤、上煤和配煤,以達到按時保質(zhì)保量為機組(原煤倉)提供燃煤的目的。整個輸煤控制系統(tǒng)是火電廠十分重要的支持系統(tǒng),它是保證機組穩(wěn)發(fā)滿發(fā)的重要條件?;谳斆嚎刂葡到y(tǒng)在整個火電廠中的重要性,且煤場面積大、工作環(huán)境惡劣、人工作業(yè)通訊難以暢通,利用組態(tài)王及其他先進技術(shù)實現(xiàn)其控制功能。
1.2 輸煤控制系統(tǒng)的組成
輸煤控制系統(tǒng)由原煤倉,往復(fù)給煤機,皮帶機、拉線開關(guān),電磁分離器,滾軸篩,緩沖滾筒,碎煤機和犁煤器組成。
輸煤程控系統(tǒng)是實現(xiàn)輸煤過程自動化的計算機控制及監(jiān)視系統(tǒng)??梢詫崿F(xiàn)皮帶自動上煤、自動配煤、計算機監(jiān)控管理、畫面參數(shù)提示、語音報警、報表自動打印等功能。能夠?qū)崿F(xiàn)對整個輸煤系統(tǒng)包括皮帶機、除鐵器、犁煤器、跑偏信號、打滑信號、拉繩信號、堵煤信號、煤位信號在內(nèi)的多套裝置、信號的控制與監(jiān)測包括:輸煤運行方式選擇(自動控制、集中手動控制、就地手動控制),皮帶機啟停。給煤機及除鐵器啟停,除塵器的啟停,自動配煤加倉,設(shè)備故障報警、聯(lián)鎖保護,現(xiàn)場信號采集、處理與顯示。
1.3 輸煤控制系統(tǒng)概述
輸煤系統(tǒng)的主要任務(wù)是由料斗和皮帶的傳遞將煤由貯煤場輸送到配煤場,由給煤機給煤,再經(jīng)由皮帶機傳送到鍋爐?;痣姀S輸煤程控系統(tǒng)主要控制的對象包括:給煤機、三通擋板、皮帶機、碎煤機、除鐵器、犁式卸煤器等設(shè)備。在此次設(shè)計中主要概述了輸煤系統(tǒng)的卸煤和上煤的皮帶傳輸控制。系統(tǒng)總體設(shè)計先進可靠,設(shè)備選型合理,監(jiān)控功能齊全,投資少、操作簡單、實用性強,能提高電廠輸煤系統(tǒng)的綜合自動化水平,改善勞動條件,提高勞動生產(chǎn)率和安全經(jīng)濟運行水平。
控制系統(tǒng)綜合實驗
第2章 輸煤控制系統(tǒng)設(shè)計
2.1 輸煤控制系統(tǒng)儀表的選擇
編程控制器(簡稱PLC)由于其將系統(tǒng)的繼電器技術(shù),計算機技術(shù)和通信技術(shù)融為一體,以其可靠性高,穩(wěn)定性好、抗干擾能力強,以及編程簡單,維護方便,通訊靈活等眾多優(yōu)點,廣泛應(yīng)用于工業(yè)生產(chǎn)過程和裝置的自動控制中。PLC不僅能實現(xiàn)復(fù)雜的邏輯控制,還能完成定時、計算和各種閉環(huán)控制功能。設(shè)置性能完善、質(zhì)量可靠、技術(shù)先進的可編程控制器PLC控制皮帶運輸機監(jiān)控系統(tǒng),可以實現(xiàn)高自動化的皮帶機群的集中控制及保護。此次課程設(shè)計的課題內(nèi)容即為輸煤控制系統(tǒng),.煤在配煤場經(jīng)碾碎去渣和鐵硝石,由給煤機給煤通過一系列過程傳送進鍋爐,方案要求用一臺PLC控制卸煤、給煤,PLC與PC之間不通訊。系統(tǒng)具備很多自動化控制的功能:(1)系統(tǒng)啟動前各臺設(shè)備預(yù)警;(2)地面輸煤生產(chǎn)線上各設(shè)備按逆煤流方向順序延時起動,按順煤流方向順序延時停車;(3)輸煤線上任一設(shè)備因故障或其它原因停車時,來煤方向各設(shè)備立即停車,順煤方向順序延時停車,以避免堆煤,減少皮帶壓煤;(4)在緊急情況下,任一設(shè)備都可通過現(xiàn)場急停按鈕實現(xiàn)緊急停車;(5)對各臺設(shè)備的運轉(zhuǎn)狀態(tài)實時自動檢測,并將信息傳輸給PLC;(6)各臺設(shè)備的運轉(zhuǎn)情況及故障報警等信息都可以在總控室由顯示燈顯示出來。
可編程控制器是為工業(yè)控制應(yīng)用而設(shè)計制造的。早期的可編程控制器稱作可編程邏輯控制器,簡稱PLC,它主要用來代替繼電器實現(xiàn)邏輯控制。隨著技術(shù)的發(fā)展,這種裝置的功能已經(jīng)大大超過了邏輯控制的范圍,因此,今天這種裝置稱作可編程控制器,簡稱PC。但是為了避免與個人計算機的簡稱混淆,所以將可編程控制器簡稱PLC。
PLC實質(zhì)是一種專用于工業(yè)控制的計算機,其硬件結(jié)構(gòu)基本上與微型計算機相同,基本構(gòu)成為: 電源、中央處理單元(CPU)、存儲器、輸入輸出接口電路、功能模塊、通信模塊。
PLC的特點:
1.可靠性高,抗干擾能力強; 2.配套齊全,功能完善,適用性強; 3.易學(xué)易用,深受工程技術(shù)人員歡迎;
4.系統(tǒng)的設(shè)計、建造工作量小,維護方便,容易改造; 5.體積小,重量輕,能耗低。2.2 輸煤控制系統(tǒng)傳感器的選型
現(xiàn)代傳感器在原理與結(jié)構(gòu)上千差萬別,如何根據(jù)具體的測量目的、測量對象以及測量環(huán)境合理地選用傳感器,是在進行某個量的測量時首先要解決的問題。
控制系統(tǒng)綜合實驗
當(dāng)傳感器確定之后,與之相配套的測量方法和測量設(shè)備也就可以確定了。測量結(jié)果的成敗,在很大程度上取決于傳感器的選用是否合理。
傳感器選擇的原則:
1.根據(jù)測量對象與測量環(huán)境確定傳感器的類型
2.靈敏度的選擇 3.頻率響應(yīng)特性 4.線性范圍 5.穩(wěn)定性
6.精度
7.對某些特殊使用場合,無法選到合適的傳感器,則需自行設(shè)計制造傳感器。2.3 控制方案分析
PID(比例-積分-微分)控制器作為最早實用化的控制器已有50多年歷史,現(xiàn)在仍然是應(yīng)用最廣泛的工業(yè)控制器。PID控制器簡單易懂,使用中不需精確的系統(tǒng)模型等先決條件,因而成為應(yīng)用最為廣泛的控制器。
PID控制器由比例單元(P)、積分單元(I)和微分單元(D)組成。在工程實際中,應(yīng)用最為廣泛的調(diào)節(jié)器控制規(guī)律為比例、積分、微分控制,簡稱PID控制,又稱PID調(diào)節(jié)。PID控制器問世至今已有近70年歷史,它以其結(jié)構(gòu)簡單、穩(wěn)定性好、工作可靠、調(diào)整方便而成為工業(yè)控制的主要技術(shù)之一。當(dāng)被控對象的結(jié)構(gòu)和參數(shù)不能完全掌握,或得不到精確的數(shù)學(xué)模型時,控制理論的其它技術(shù)難以采用時,系統(tǒng)控制器的結(jié)構(gòu)和參數(shù)必須依靠經(jīng)驗和現(xiàn)場調(diào)試來確定,這時應(yīng)用PID控制技術(shù)最為方便。即當(dāng)我們不完全了解一個系統(tǒng)和被控對象,或不能通過有效的測量手段來獲得系統(tǒng)參數(shù)時,最適合用PID控制技術(shù)。PID控制,實際中也有PI和PD控制。PID控制器就是根據(jù)系統(tǒng)的誤差,利用比例、積分、微分計算出控制量進行控制的。
1.比例(P)控制:
比例控制是一種最簡單的控制方式。其控制器的輸出與輸入誤差信號成比例關(guān)系。當(dāng)僅有比例控制時系統(tǒng)輸出存在穩(wěn)態(tài)誤差(Steady-state error)。
2.積分(I)控制:
在積分控制中,控制器的輸出與輸入誤差信號的積分成正比關(guān)系。對一個自動控制系統(tǒng),如果在進入穩(wěn)態(tài)后存在穩(wěn)態(tài)誤差,則稱這個控制系統(tǒng)是有穩(wěn)態(tài)誤差的或簡稱有差系統(tǒng)(System with Steady-state Error)。為了消除穩(wěn)態(tài)誤差,在控制器中必須引入“積分項”。積分項對誤差取決于時間
控制系統(tǒng)綜合實驗 的積分,隨著時間的增加,積分項會增大。這樣,即便誤差很小,積分項也會隨著時間的增加而加大,它推動控制器的輸出增大使穩(wěn)態(tài)誤差進一步減小,直到等于零。因此,比例+積分(PI)控制器,可以使系統(tǒng)在進入穩(wěn)態(tài)后無穩(wěn)態(tài)誤差。
3.微分(D)控制:
在微分控制中,控制器的輸出與輸入誤差信號的微分(即誤差的變化率)成正比關(guān)系。自動控制系統(tǒng)在克服誤差的調(diào)節(jié)過程中可能會出現(xiàn)振蕩甚至失穩(wěn)。其原因是由于存在有較大慣性組件(環(huán)節(jié))或有滯后(delay)組件,具有抑制誤差的作用,其變化總是落后于誤差的變化。解決的辦法是使抑制誤差的作用的變化“超前”,即在誤差接近零時,抑制誤差的作用就應(yīng)該是零。這就是說,在控制器中僅引入 “比例”項往往是不夠的,比例項的作用僅是放大誤差的幅值,而目前需要增加的是“微分項”,它能預(yù)測誤差變化的趨勢,這樣,具有比例+微分的控制器,就能夠提前使抑制誤差的控制作用等于零,甚至為負(fù)值,從而避免了被控量的嚴(yán)重超調(diào)。所以對有較大慣性或滯后的被控對象,比例+微分(PD)控制器能改善系統(tǒng)在調(diào)節(jié)過程中的動態(tài)特性。2.4 輸送機的選擇
帶式輸送機是連續(xù)運輸機中效率最高、使用最普遍的一種機型。在我國建設(shè)的大、中型燃煤火力發(fā)電廠中,從受卸裝置向儲煤場及鍋爐原煤倉輸煤所用的運送設(shè)備,主要就是帶式輸送機。
帶式輸送機是以撓性輸送帶作為物料承載物件和牽引構(gòu)件的連續(xù)輸送設(shè)備。根據(jù)摩擦原理,由驅(qū)動滾筒帶動輸送帶,將物料輸送到所需的地方。帶式輸送機與其他類型的輸送設(shè)備相比,具有良好的性能,在連續(xù)裝載的情況下能連續(xù)運輸,生產(chǎn)率高,運行平穩(wěn)可靠,輸送連續(xù)均勻,工作過程中噪音小,結(jié)構(gòu)簡單,能量消耗小,運行維護費用低,維修方便,易于實現(xiàn)自動控制及遠方操作等優(yōu)點,因此,在輸煤運行中得到于廣泛的應(yīng)用。
控制系統(tǒng)綜合實驗
第3章 基于組態(tài)王的輸煤控制系統(tǒng)監(jiān)控程序設(shè)計
3.1 主控界面
圖3-1 主控界面圖像
3.2 趨勢界面
圖3-2 歷史曲線運行前的圖
控制系統(tǒng)綜合實驗
圖3-3 歷史曲線運行后的圖
控制系統(tǒng)綜合實驗
第4章 結(jié)論與體會
通過為期一周的課程設(shè)計,我深刻體會到了自己知識的匱乏。我深深的感覺到自己知識的不足,自己原來所學(xué)的東西只是一個表面性的,理論性的,而且是理想化的。根本不知道在現(xiàn)實中還存在有很多問題。真正的能將自己的所學(xué)知識轉(zhuǎn)化為實際所用才是最大的收獲,也就是說真正的能夠做到學(xué)為所用才是更主要的。設(shè)計一個很簡單的電路,所要考慮的問題,要比考試的時候考慮的多的多。
在課程設(shè)計中我充分的應(yīng)用了課本的基礎(chǔ)知識,把所學(xué)的知識應(yīng)用到實踐中,補充了一些知識的不足。在設(shè)計的過程中遇到的問題,能通過老師的幫助和自己的努力基本了解組態(tài)王的軟件的使用,了解輸煤控制系統(tǒng)的基本原理,我了解到先進技術(shù)的重要性。
總之,通過這次課程設(shè)計,不僅使我對所學(xué)過的知識有了一個新的認(rèn)識。而且提高了我考慮問題,分析問題的全面性以及動手操作能力。使我的綜合能力有了一個很大的提高。
控制系統(tǒng)綜合實驗
參考文獻
[1]鮑林.PLC在放電廠輸煤系統(tǒng)中的應(yīng)用[J].電站系統(tǒng)工程,2000 [2]馬敏濤.PLC與上位計算機的自由通信[J].電氣時代,2002 [3]李友善.自動控制原理[M].北京:國防工業(yè)出版社,2005 [4]賴壽宏.微型計算機控制技術(shù)[M].北京:機械工業(yè)出版社,2004 [5]蔡自興.智能控制-基礎(chǔ)與應(yīng)用[M].北京:國防工業(yè)出版社,1999 [6]李仁.電器控制[M].北京:機械工業(yè)出版社,1998
目 錄
第1章 輸煤控制系統(tǒng)工藝分析..................................................................................1 1.1 輸煤控制系統(tǒng)的目的...........................................................................................................1 1.2 輸煤控制系統(tǒng)的組成...........................................................................................................1 1.3 輸煤控制系統(tǒng)概述................................................................................................................1 第2章 輸煤控制系統(tǒng)設(shè)計..........................................................................................2 2.1 輸煤控制系統(tǒng)儀表的選擇.................................................................................................2 2.2 輸煤控制系統(tǒng)傳感器的選型.............................................................................................2 2.3 控制方案分析.........................................................................................................................3 2.4 輸送機的選擇.........................................................................................................................4 第3章 基于組態(tài)王的輸煤控制系統(tǒng)監(jiān)控程序設(shè)計..................................................5 3.1 主控界面...................................................................................................................................5 3.2 趨勢界面...................................................................................................................................5 第4章 結(jié)論與體會......................................................................................................7 參考文獻........................................................................................................................8
第三篇:VC環(huán)境下讀取顯示.bmp圖像方法
總結(jié)顯示bmp圖像的方法,列出四種顯示方法。通過SetPixel()函數(shù)畫出每個像素點來顯示圖像。2 通過讀取位圖資源中bmp資源顯示圖像。通過讀取本地文件,利用位圖結(jié)構(gòu)信息,定義HGLOBAL,再采用固定的顯示方式顯示位圖。通過讀取本地文件,利用位圖結(jié)構(gòu)信息,定義buffer,再采用SetDIBitsToDevice()函數(shù)。下面分別對這四種方法進行詳細描述:
首先新建VC工程ShowBmpImage->MFC->單文檔模式。將顯示的操作都是放在CShowBmpImageView下進行的,并且沒有定義成員變量。1 第一種方法
通過SetPixelShow()函數(shù)循環(huán)畫出每個像素點,從而顯示圖像。操作如下: 增加成員函數(shù)SetPixelShow(),編輯代碼如下:
int x,y;
//定義像素位置 CClientDC dc(this);
//獲取dc,也可以用CDC *pDC for(x=0;x<200;x++)
for(y=0;y<200;y++)
dc.SetPixel(x,y,RGB(x,y,255));
//畫一個像素點,RGB是顏色 調(diào)用函數(shù)后,顯示的是一幅彩色圖像,可以根據(jù)需要改變RGB的值來顯示一幅完整的圖像。2 第二種方法
通過讀取位圖資源中的位圖顯示圖像,選擇菜單欄->插入->資源,彈出對話框,選擇導(dǎo)入按鈕,將文件類型改成所有文件,選擇想要顯示bmp位圖,導(dǎo)入。這樣工程的資源位圖中,導(dǎo)入的位圖默認(rèn)的ID是IDB_BITMAP1。而顯示這種位圖有一個固定的顯示模式,非常方便。方法如下:
a 定義一個CBitmap對象,使其加載位圖資源。b 定義一個CDC對象,用于裝載位圖 ;
使其創(chuàng)建兼容DC,相當(dāng)于初始化;
與CBitmap對象關(guān)聯(lián)起來,相當(dāng)于獲取位圖。
c 定義BITMAP對象,使其與CBitmap對象綁定,可以獲取寬度和高度。d 創(chuàng)建DC,畫圖像。e 選擇回原來的資源。操作如下:
增加成員函數(shù)LoadResShow(),編輯代碼如下: CBitmap bmp;
//1.定義一個CBitmap對象
bmp.LoadBitmap(IDB_BITMAP1);
// 使其加載位圖資源
CDC memDC;
//2.定義一個CDC對象,用于裝載位圖
memDC.CreateCompatibleDC(NULL);
// 使其創(chuàng)建兼容DC,相當(dāng)于初始化
CBitmap* pOldBmp = memDC.SelectObject(&bmp);// 與CBitmap對象關(guān)聯(lián)起來,就獲取位圖了
BITMAP bm;
//3.定義BITMAP對象
bmp.GetBitmap(&bm);
// 使其與CBitmap對象綁定 int nWidth = bm.bmWidth;
// 獲取寬度 int nHeight = bm.bmHeight;
// 獲取高度
//CClientDC dc(this);//dc.StretchBlt(0,0,nWidth,nHeight,&memDC,0,0,nWidth,nHeight,SRCCOPY);CDC *pDC=GetDC();
//4.創(chuàng)建DC pDC->BitBlt(0,0,nWidth,nHeight,&memDC,0,0,SRCCOPY);
// 畫圖像
//pDC->StretchBlt(0,0,nWidth,nHeight,&memDC,0,0,nWidth,nHeight,SRCCOPY);
memDC.SelectObject(pOldBmp);
//5.選擇回原來的資源 調(diào)用函數(shù)后,顯示載入的位圖。3 第三種方法
通過讀取本地的位圖文件,再用固定的模式顯示圖像。操作如下:
增加成員函數(shù)FileLoad1(),ReadBmpFile1(CString filepathname),編輯代碼如下: void CShowBmpImageView::FileLoad1(){ CString filename;CFileDialog dlg(true,“*.bmp”,NULL,NULL,“(Bmp File)*.bmp|*.bmp||”);if(IDOK==dlg.DoModal()){
filename=dlg.GetPathName();
ReadBmpFile1(filename);
//獲取到文件路徑,加載bmp文件 } else {
MessageBox(“您取消操作”);} } void CShowBmpImageView::ReadBmpFile1(CString filepathname){ CFile file;
//定義CFile對象
if(!file.Open(filepathname, CFile::modeRead))
MessageBox(“該文件打開出錯”);long nFileLen;
//定義文件長度 nFileLen = file.GetLength();BITMAPFILEHEADER bmfHeader;
//定義位圖文件頭 //讀取位圖文件頭,大小為文件頭的大小
if(file.Read((LPSTR)&bmfHeader, sizeof(bmfHeader))!= sizeof(bmfHeader))
MessageBox(“讀取文件錯誤”);//判斷文件的類型是否為bmp文件
if(bmfHeader.bfType!=((WORD)('M' <<8)| 'B'))
MessageBox(“該文件不是BMP文件”);//定義hDIB,并GlobalAlloc分配內(nèi)存,用完后需要GlobalFree釋放 HGLOBAL hDIB = ::GlobalAlloc(GMEM_FIXED, nFileLen);
//將文件讀入到hDIB,大小為總長度減去文件頭的長度 if(file.ReadHuge((LPSTR)hDIB, nFileLensizeof(BITMAPFILEHEADER))
MessageBox(“讀取文件錯誤”);//定義位圖信息,并與hDIB捆綁
BITMAPINFO &bmInfo = *(LPBITMAPINFO)::GlobalLock(hDIB);//定義位圖信息頭,并連接hDIB BITMAPINFOHEADER *pInfoHead =(BITMAPINFOHEADER *)hDIB;//計算bmp文件Buffer大小 BYTE *pBmpPixelBuffer=(BYTE *)&bmInfo+bmfHeader.bfOffBits-sizeof(BITMAPFILEHEADER);//創(chuàng)建dc,并初始化 CDC dc;dc.CreateDC(“DISPLAY”,NULL,NULL,NULL);//定義HBITMAP對象,并與dc和位圖關(guān)聯(lián),此對象就是現(xiàn)有的位圖資源 HBITMAP hBitmap;hBitmap=CreateDIBitmap(dc.m_hDC,(BITMAPINFOHEADER *)&bmInfo,CBM_INIT,(VOID *)pBmpPixelBuffer,&bmInfo,DIB_RGB_COLORS);
//下面即是位圖顯示的固定思路
//****************************************************************************** CBitmap bmp;bmp.Attach(hBitmap);
CDC memDC;memDC.CreateCompatibleDC(NULL);CBitmap* pOldBmp = memDC.SelectObject(&bmp);
BITMAP bm;bmp.GetBitmap(&bm);int nWidth = bm.bmWidth;int nHeight = bm.bmHeight;
CDC* pDC = GetDC();pDC->BitBlt(0,0,nWidth,nHeight,&memDC,0,0,SRCCOPY);
memDC.SelectObject(pOldBmp);//**************************************************************************
::GlobalUnlock(hDIB);
//解鎖hDIB ::GlobalFree(hDIB);
//釋放hDIB } 調(diào)用函數(shù)后,彈出對話框,選擇要顯示的本地位圖文件,顯示。4 第四種方法
通過讀取本地位圖文件,再采用SetDIBitsToDevice()函數(shù)顯示圖像,操作如下:
在頭文件中定義位圖結(jié)構(gòu),在ShowBmpImageView.h文件的開頭,在定義類CShowBmpImageView之前加入
//**************定義位圖文件結(jié)構(gòu)******************************* struct BMPFILE { tagBITMAPINFO *pInfo;BITMAPFILEHEADER *pFileHeader;BYTE *buffer;BYTE *PToData;};//***********將文件頭和位圖信息封裝**************************** 增加成員函數(shù)FileLoad2(),ReadBmpFile2(CString filepathname),編輯代碼如下: void CShowBmpImageView::FileLoad2(){ CString filename;CFileDialog dlg(true,“*.bmp”,NULL,NULL,“(BmpFile)*.bmp|*.bmp||”);if(dlg.DoModal()==IDOK){
filename=dlg.GetPathName();
ReadBmpFile2(filename);
//獲取到文件路徑,加載bmp文件
} else {
MessageBox(“您取消操作”);} } void CShowBmpImageView::ReadBmpFile2(CString filepathname){
BMPFILE *bmpfile;
//定義BMPFILE指針
bmpfile=(BMPFILE *)malloc(sizeof(BMPFILE));
//并分配內(nèi)存
bmpfile->pFileHeader=new BITMAPFILEHEADER;
//初始化結(jié)構(gòu)中的成員 bmpfile->pInfo=new tagBITMAPINFO;CFile file;
//定義CFile對象
if(!file.Open(filepathname,CFile::modeRead))
MessageBox(“打開文件錯誤”);
long Filelen;
//定義文件長度
Filelen=file.GetLength();//讀取位圖文件頭,大小為文件頭的大小
if(!file.Read(bmpfile->pFileHeader,sizeof(BITMAPFILEHEADER)))
MessageBox(“讀取文件錯誤”);//判斷文件的類型是否為bmp文件
if(bmpfile->pFileHeader->bfType!=((WORD)('M' <<8)| 'B'))
MessageBox(“該文件不是BMP文件”);//定義儲存位圖文件的buffer bmpfile->buffer=new byte[Filelen];//將文件讀取到buffer中,大小為長度減去文件頭
if(!file.ReadHuge(bmpfile->buffer,Filelen-sizeof(BITMAPFILEHEADER)))
MessageBox(“讀取文件錯誤”);//創(chuàng)建位圖信息,并與buffer綁定
bmpfile->pInfo=(tagBITMAPINFO *)(bmpfile->buffer);//計算位圖數(shù)據(jù)大小
bmpfile->PToData=bmpfile->buffer+bmpfile->pFileHeader->bfOffBits-sizeof(BITMAPFILEHEADER);
file.Close();
//關(guān)閉文件
//**********************顯示位圖*************************************** CDC *pDC=GetDC();HDC hdc=pDC->GetSafeHdc();SetDIBitsToDevice(hdc,//設(shè)備環(huán)境句柄
0,//目標(biāo)區(qū)域的左上角x
0,//目標(biāo)區(qū)域的左上角y
bmpfile->pInfo->bmiHeader.biWidth,//資源文件的寬度
bmpfile->pInfo->bmiHeader.biHeight,//資源文件的高度
0,//源文件左下角的x
0,//源文件左下角的y
0,//開始掃描的行號
bmpfile->pInfo->bmiHeader.biHeight,//總共掃描行數(shù)
bmpfile->PToData,//字節(jié)形數(shù)組的顏色數(shù)據(jù)指針
bmpfile->pInfo,//包含位圖信息的位圖信息指針
DIB_RGB_COLORS
//RGB顏色表);
//************************************************************************ free(bmpfile);
//釋放所有內(nèi)存 } 調(diào)用函數(shù)后,彈出對話框,選擇要顯示的本地位圖文件,顯示。
第四篇:軟件測試小結(jié)
第二階段學(xué)習(xí)小結(jié)
1.白盒測試需要了解其內(nèi)部結(jié)構(gòu)和運行機制。白盒測試,也稱之為結(jié)構(gòu)測試和邏輯驅(qū)動測試。黑盒測試不需了解程序內(nèi)部結(jié)構(gòu)和內(nèi)部特征。主要著眼于程序外部的用戶界面,關(guān)注軟件的輸入和輸出,關(guān)注用戶的需求,從用戶的角度來驗證軟件的功能。黑盒測試也稱之為功能測試和數(shù)據(jù)驅(qū)動測試。
2.黑盒測試技術(shù)主要有:等價類劃分法、邊界值分析法、判定表方法、因果圖法、錯誤推測法。
3.白盒測試主要技術(shù)有:語句覆蓋、判定覆蓋、條件覆蓋、判定-條件覆蓋、條件組合覆蓋、路徑覆蓋。
4.測試用例的定義:測試用例就是一個文檔,描述輸入、動作、或者時間和一個期望的結(jié)果,其目的是確定應(yīng)用程序的某個特性是否正常的工作。
軟件測試的基本格式:軟件測試用例的基本要素包括測試用例編號、測試標(biāo)題、重要級別、測試輸入、操作步驟、預(yù)期結(jié)果。{系統(tǒng)測試用例的編號這樣定義規(guī)則: PROJECT1-ST-001,命名規(guī)則是項目名稱+測試階段類型(系統(tǒng)測試階段)+編號。定義測試用例的優(yōu)先級別,可以籠統(tǒng)的分為 “ 高 ” 和 “ 低 ” 兩個級別。測試用例設(shè)計方法:(1)逐級細分法(2)輸入域測試法(3)輸出域分析法(4)正交試驗設(shè)計法(5)業(yè)務(wù)流程分析法(6)狀態(tài)遷移法(7)因果圖法(8)判定表法(9)錯誤猜測法(10)等價類劃分法(11)邊界值分析法}。
5.Bug的描述:
① 和 bug 產(chǎn)生對應(yīng)的軟件版本。
② 開發(fā)的接口人員。
③ bug 的優(yōu)先級。
④ bug 的嚴(yán)重程度。
⑤ bug 可能屬于的模塊,如果不能確認(rèn),可以用開發(fā)人員來判斷。
⑥ bug 標(biāo)題,需要清晰的描述現(xiàn)象。
⑦ bug 描述,需要盡量給出重新 bug 的步驟。
⑧ bug 附件中能給出相關(guān)的日志和截圖。
6.軟件測試環(huán)境的主要要素:配置測試環(huán)境是測試實施的一個重要階段,測試環(huán)境適合與否會嚴(yán)重影響測試結(jié)果的重要性和真實性。一般來說,配置測試環(huán)境要滿足五個基本元素:硬件、軟件、網(wǎng)絡(luò)環(huán)境、數(shù)據(jù)準(zhǔn)備、測試工具。
7.測試環(huán)境的搭建:單機版測試環(huán)境搭建,b/s架構(gòu)測試環(huán)境的搭建,c/s架構(gòu)測試環(huán)境的搭建。
8.測試環(huán)境的管理:設(shè)置專門的測試環(huán)境管理員角色、明確測試環(huán)境管理所需的各種文檔、測試環(huán)境訪問權(quán)限的管理、測試環(huán)境的變更管理、測試環(huán)境的備份和恢復(fù)。
9.自動化測試工具介紹:性能測試—Loadrunner、Robot、Silk performer,功能測試—QTP、Winrunner、Robot、Silk test,其他測試—Xenu、AiRoboForm。
第五篇:軟件課程設(shè)計小結(jié)
軟件課程設(shè)計小結(jié)
在我們整個軟件工程過程中,我體會到了許多,也學(xué)到了許多。
我們班由16名同學(xué)組成,在相互商量后我們確定了我們班的項目,是做一個計算器程序。在老師的指導(dǎo)下我們的項目也正式開始了。
在整個項目開發(fā)過程中,我們也同時遇到了許多程序代碼問題,頁面和功能相結(jié)合的問題,這些問題都是源于我們對程序的認(rèn)識不足、以及沒有將老師所講的知識點融會貫通。我深刻認(rèn)識到,在項目開發(fā)時,老師的指導(dǎo)以及同學(xué)之間的交流非常重要的。如果我們要在功能方面作出修改,那么有些代碼以及復(fù)制的區(qū)間都不能有誤差,這需要老師的幫助、指導(dǎo),以及同學(xué)之間交流研究共同對整個程序作出相應(yīng)的設(shè)計,這樣才能避免最終整合時出現(xiàn)問題。
在這段時間的學(xué)習(xí)里,我還對軟件工程有了新的理解。在我以前的理解當(dāng)中,軟件工程,無非就是一個人或者幾個人或一個團隊集中在一起進行編寫代碼的工作,以實現(xiàn)開發(fā)出所用的軟件。但現(xiàn)在我明白了,軟件工程的作用,就是告訴人們怎樣去開發(fā)軟件和管理軟件。具體地講,它表現(xiàn)在與軟件開發(fā)和管理有關(guān)的人員和過程上。所以,軟件工程就不僅僅是單一的編程過程了。它包括了系統(tǒng)分析->建模->概要設(shè)計->詳細設(shè)計->編碼->測試->維護。編碼可以理解為編程,這個只占總時間的20%左右。編程只是其中的一小部分。
在這次項目里我完成了許多工作,在界面設(shè)計上我完成了“頁面設(shè)計、讀代碼、記代碼、代碼編輯”等制作,在后期項目整合過程中修改了功能和界面結(jié)合時出現(xiàn)的bug,還有程序外觀設(shè)計、美觀度。這些工作我都順利完成了,雖然并不能算是非常的出色,但也算是盡力了?,F(xiàn)在看到自己辛勞的成果,我感到很欣慰。
當(dāng)然,在這次項目過程中我也發(fā)現(xiàn)了自己的一些問題。如現(xiàn)在的軟件制作技術(shù)還不夠強,在和小組成員相互溝通上還不夠積極、出現(xiàn)問題沒有及時尋求老師的幫助等。我希望以此為契機,在將來的項目開發(fā)中能做得更好。
Xxx
2013/1/7