紫金橋?qū)崟r數(shù)據(jù)庫二次開發(fā)包及手冊等歷史數(shù)據(jù)存儲_第1頁
紫金橋?qū)崟r數(shù)據(jù)庫二次開發(fā)包及手冊等歷史數(shù)據(jù)存儲_第2頁
紫金橋?qū)崟r數(shù)據(jù)庫二次開發(fā)包及手冊等歷史數(shù)據(jù)存儲_第3頁
紫金橋?qū)崟r數(shù)據(jù)庫二次開發(fā)包及手冊等歷史數(shù)據(jù)存儲_第4頁
紫金橋?qū)崟r數(shù)據(jù)庫二次開發(fā)包及手冊等歷史數(shù)據(jù)存儲_第5頁
已閱讀5頁,還剩32頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、目錄概述1第一章第二章第三章第四章第五章第六章指定歷史. 2歷史插值4歷史保存參數(shù)5數(shù)據(jù)恢復功能6歷史數(shù)據(jù)檢索8標準統(tǒng)計數(shù)據(jù)9第七章 歷史數(shù)據(jù)控件11歷史數(shù)據(jù)控件11SPC數(shù)據(jù)控件16摘要數(shù)據(jù)對象22第八章 歷史數(shù)據(jù)相關(guān)控件和函數(shù)29與歷史數(shù)據(jù)有關(guān)的控件29歷史趨勢29趨勢分析30歷史報表304)報表33開始時間34時間長度342與歷史數(shù)據(jù)有關(guān)的函數(shù)341)函數(shù)342)API接口352)控件接口36第 1 頁大慶紫金橋:技術(shù)辦事處傳真:第一章 概述是實時數(shù)據(jù)庫的功能之一。在工業(yè)控制中,常常要從一些數(shù)據(jù)的歷史趨勢中分析問題和發(fā)現(xiàn)問題,保存歷史數(shù)據(jù)就顯得十分重要。支持歷史數(shù)據(jù)的快速保存和檢索,它按

2、照一定的條件把數(shù)據(jù)保存到歷史庫中,用戶需要時可隨時從歷史數(shù)據(jù)庫中歷史數(shù)據(jù)。歷史數(shù)據(jù)一般是點的某個參數(shù)在過去某一時刻的瞬時值,是與時間有關(guān)的數(shù)據(jù),每一個歷史數(shù)據(jù)上都有一個時間戳,歷史數(shù)據(jù)的采樣時間。位號是否保存歷史數(shù)據(jù),歷史數(shù)據(jù)的保存條件都由用戶進行數(shù)據(jù)組態(tài)時決定。實時數(shù)據(jù)庫按照用戶指定的采樣條件在庫中進行采樣,如果采樣的條件滿足,就將采樣數(shù)據(jù)加上時間戳,記入歷史庫中。歷史數(shù)據(jù)庫是磁盤文件,為了防止頻繁的寫磁盤,在內(nèi)存中開辟了歷史數(shù)據(jù)緩沖區(qū)。歷史數(shù)據(jù)從實時數(shù)據(jù)庫中以后,首先放在內(nèi)存緩沖區(qū)中,當存盤時間到達或緩沖區(qū)已滿時的寫入磁盤歷史庫文件。用戶歷史數(shù)據(jù)時,系統(tǒng)首先檢查歷史數(shù)據(jù)緩沖區(qū)中是否有用戶需

3、要的歷史數(shù)據(jù),如果沒有然后在檢查歷史數(shù)據(jù)庫文件中是否有用戶需要的歷史數(shù)據(jù)。歷史數(shù)據(jù)緩沖區(qū)的設(shè)立大大加快了歷史數(shù)據(jù)的存取速度。紫金橋歷史數(shù)據(jù)庫具有如下特點:能夠?qū)⑷魏吸c的任何參數(shù)存盤。無論數(shù)據(jù)來源于現(xiàn)場設(shè)備、人工錄入數(shù)據(jù)、還是計算結(jié)果都能存入歷史數(shù)據(jù)庫。具有先進的數(shù)據(jù)壓縮算法,能夠充分利用有限的盤空間具有歷史插值功能。長期的歷史數(shù)據(jù)另外提供了豐富的歷史數(shù)據(jù)統(tǒng)計工具,幫助用戶進行各種數(shù)據(jù)分析。下面介紹、檢索、顯示方法,以及與歷史數(shù)據(jù)相關(guān)的控件。第 1 頁大慶紫金橋:技術(shù)辦事處傳真:第二章 指定歷史在缺省情況下不對點的任何參數(shù)進行歷史。要想保存歷史,在點組態(tài)框中選擇歷史組態(tài)頁,如下所示:在上面框中,

4、選中“保存歷史”復選框,并選擇歷史保存策略。除了能對 PV 值保存歷史外,您還可以對其他參數(shù)保存歷史。單擊“其他可以保存歷史的參數(shù)。參數(shù)”將列出歷史保存方式根據(jù)實際情況,需要不同的歷史保存方式,的歷史保存方式有兩種,定時保存和變化保存。定時保存最簡單的保存方式是“定時保存”,即不管數(shù)據(jù)變化與否,周期性的將實時數(shù)據(jù)保存下來。如果周期較小,數(shù)據(jù)變化小于保存周期的情況,會造成一定的浪費,因為經(jīng)常保存的是重復的數(shù)值。當然有時只想要準確某些時刻的數(shù)據(jù),如正點時數(shù)值,而不關(guān)心期間的變化過程,可以選擇周期。如果您指定保存周期是 1 分鐘,那么只有時間為正好是整分鐘,如 8:00:00,8:01:00 時才會

5、進行數(shù)據(jù)。同樣如果指定保存周期是 1 小時,那么只有在整點時才會保存歷史數(shù)據(jù)。但是如果是歷史插值,那么將不能保證數(shù)據(jù)是時間對齊的。變化保存數(shù)據(jù)只有變化了,并且變化超出了一定范圍時才保存。如果數(shù)據(jù)在很小的范圍內(nèi)波動(允許的誤差之內(nèi))并不對其進行歷史,因為數(shù)值的微小變化對數(shù)據(jù)分析往往是沒有實際意義的,而將這些數(shù)據(jù)全部保存將會浪費大量的盤空間。變化保存克服了周期保存的缺點,但是帶來了一定的精度損失。下面是一段時間內(nèi)數(shù)據(jù)的變化過程:第 2 頁X 軸是時間,Y:軸是數(shù)值大小。在圖中 A 到 B 區(qū)間,數(shù)據(jù)變化在兩條蘭線所表示的狹小區(qū)域之內(nèi),如果只下A,B 兩個端點,期間任何一點的數(shù)據(jù)可由時間在A 與B

6、間直線的交叉點對應的Y 坐標近似得到。如圖中紅線所示。在上面的圖形中,出數(shù)據(jù)的變化規(guī)律。可以只A、B、C、D、E、F 幾處數(shù)據(jù),就能較全面的表示通過調(diào)整精度參數(shù),可以控制誤差大小。精度值越小,直線就越能反映真實情況。確省精度值為 1,表示最大的誤差是數(shù)值的。第 3 頁大慶紫金橋:技術(shù)辦事處傳真:第三章 歷史插值一般是將當前的數(shù)值保存到歷史庫中,歷史插值功能允許您將過去的數(shù)到歷史庫中。該功能特別適合于具有歷史的 I/O 設(shè)備,據(jù),如昨天的數(shù)據(jù)能表支持歷史些智功能,當其發(fā)現(xiàn)與上位機(機)通信中斷時,能夠?qū)嗑€期間的數(shù)據(jù)保存起來,當恢復通信后,可以將保存在緩存的數(shù)據(jù)轉(zhuǎn)儲到上位機中。對于具有歷史功能的

7、 I/O 設(shè)備,紫金橋驅(qū)動程序不但能夠?qū)崟r數(shù)據(jù),同時也能夠從設(shè)備歷史數(shù)據(jù),并將歷史數(shù)據(jù)到實時數(shù)據(jù)庫中。除了設(shè)備驅(qū)動能夠向?qū)崟r數(shù)據(jù)庫歷史數(shù)據(jù)外,您也可以通過數(shù)據(jù)庫、畫面、調(diào)用 API 接口、COM 控件來完成。參見后面的歷史數(shù)據(jù)相關(guān)控件、函數(shù)。第 4 頁第四章 歷史保存參數(shù)有兩個與歷史相關(guān)的系統(tǒng)參數(shù):保存天數(shù)和歷史數(shù)據(jù)塊大小。單擊導航樹“數(shù)據(jù)庫/數(shù)據(jù)庫設(shè)置/系統(tǒng)參數(shù)”,將出現(xiàn)如下所示框:保存天數(shù):即歷史數(shù)據(jù)保存的最大天數(shù)。超過該天數(shù)的歷史數(shù)據(jù)將被刪除,以便節(jié)省盤空間。數(shù)據(jù)塊大?。喝笔?600 字節(jié),該大小適合于保存數(shù)據(jù)變化周期為 250 毫秒的實時數(shù)據(jù),如果數(shù)據(jù)變化很快,可以適當加大該參數(shù),注

8、意加大一倍保存空間加大兩倍,這樣 1200 就適合于數(shù)據(jù)變化周期為 60 毫秒的數(shù)據(jù)了。當然如果數(shù)據(jù)變化較慢,也可以減小該參數(shù),如數(shù)據(jù)變化周期為 1000 毫秒,可以指定塊大小為 300。第 5 頁大慶紫金橋:技術(shù)辦事處傳真:第五章 數(shù)據(jù)恢復功能數(shù)據(jù)庫間進行通訊時,如果網(wǎng)絡(luò)出現(xiàn)故障,或者數(shù)據(jù)庫退出后重新啟動,服務(wù)端能夠暫存斷線期間的歷史數(shù)據(jù),并將之自動恢復到客戶端。數(shù)據(jù)恢復的設(shè)定在缺省情況下,該功能被(在數(shù)據(jù)請求方定義)。要啟動該功能,要在數(shù)據(jù)源定義中進行如下設(shè)置。單擊高級選項按鈕,出現(xiàn)如下框:1)故障數(shù)據(jù)恢復:選中“故障數(shù)據(jù)恢復”復選框。在數(shù)據(jù)恢復時間中輸入服務(wù)器斷線期間數(shù)據(jù)的最長時間。超過

9、該時限,服務(wù)器將放棄保存的數(shù)據(jù)。這樣可以避免服務(wù)器因故障時間過長而保存大量的數(shù)據(jù)。第 6 頁注意:該值過大可能造成系統(tǒng)較大開銷,如果數(shù)據(jù)庫間連接的點數(shù)較多,且數(shù)據(jù)變化速度較快,該值不要過大。2)更新方式更新方式有兩種,變化通知和周期查詢。變化通知即將所有的數(shù)據(jù)變化都通知給客戶;而周期查詢是按照周期中指定的時間進行查詢。周期查詢的缺點是,客戶的不到一個查詢周期內(nèi)的數(shù)值連續(xù)變化過程。 變化通知的缺點是可能數(shù)據(jù)變化太快,造成通信開銷過大。在斷線情況下,兩種方式的數(shù)據(jù)恢復處理是有差別的。在變化通知方式下,服務(wù)器會將所有數(shù)據(jù)變化都保存下來,而周期查詢是按照指定的周期保存數(shù)據(jù)。對于數(shù)據(jù)量大(歷史的點較多,

10、不保存歷史的點不計)、且變化速度較快的情況,建議使用周期查詢方式;反之可以使用變化通知方式。3)超時時間對服務(wù)器的請求可能由于網(wǎng)絡(luò)傳輸?shù)脑颍蛻舳苏埱蟮臄?shù)據(jù)和服務(wù)器端應答的數(shù)據(jù)能確保數(shù)據(jù)一定每次都能準確及時傳輸。這時可以設(shè)定一個時間范圍,如果大于該時間范圍沒有返回,則認為當前的請求已經(jīng)無效。這個時間設(shè)定應該在一個合理的范圍之內(nèi),一般的,網(wǎng)絡(luò)傳輸速度較快,時間可以較短如 3 秒,而串口和撥號方式相對時間要長一些如 30秒。時間太長或太短,都會導致刷新速度較慢。服務(wù)器只有檢測到客戶斷線時間超出該值之后,才為其保存數(shù)據(jù),以待恢復。服務(wù)器的保護因為客戶可能長期處于停止狀態(tài),所以服務(wù)器不可能無休止的為

11、客戶保存故障期間的數(shù)據(jù)。為了避免服務(wù)器數(shù)據(jù)量過大,一是可以減小客戶端中故障恢復時限,二是在服務(wù)器數(shù)據(jù)庫系統(tǒng)參數(shù)中指定“數(shù)據(jù)恢復文件的最大容量”,見下圖所示:第 7 頁大慶紫金橋:技術(shù)辦事處傳真:第六章 歷史數(shù)據(jù)檢索無論是周期,還是變化保存,也不管保存周期是多大,都可以用同樣的方法檢可以以 1 秒為采樣周期,取歷史數(shù)據(jù)。例如保存的方式是 “周期”,周期為 60 秒,也可以用 1 小時為采樣周期檢索歷史數(shù)據(jù),歷史庫會幫您找到最相近時刻的數(shù)據(jù)。歷史數(shù)據(jù)庫提供了豐富的檢索方式,來幫助您進行歷史數(shù)據(jù)分析。下面對各種方式予以說明:周期采樣以固定周期查詢過去某一時段的歷史數(shù)據(jù),如以 1 分鐘為采樣周期,查詢

12、前 1 小時的歷史數(shù)據(jù)。數(shù)據(jù)類型分為瞬時值、平均值、最大/最小值三種。瞬時值即采樣時刻的值。一般情況下,歷史庫不會恰巧在采樣時刻保存數(shù)據(jù),這時歷史庫會給出是與采樣時刻最接近時間的數(shù)據(jù),一般為與采樣點最所示:的上一時刻保存的數(shù)據(jù)。如下圖圖中曲線上的小矩形代表一段時間內(nèi)歷史數(shù)據(jù)保存點。t 表示要檢取的采樣點,a,b分別表示位于采樣點前一時刻與后一時刻的歷史數(shù)據(jù)保存點。如果 a 與b 間沒有進行數(shù)據(jù)壓縮處理,那么 t 時刻的值將采用 a 時刻的歷史值。如果進行了壓縮處理,則 t 時刻的值將 a,b兩點的值計算得到,公式如下:Vt = Va + (Vb Va) /(Tb- Ta) * (Tt Ta)在

13、上面公式中 Vt,Va,Vb 分別表示在時間點 t,a,b 時刻的數(shù)值Tt,b 則分別表示在時間點 t,a,b 時刻的時間。平均值即采樣周期內(nèi)的平均值。例如采樣周期為 1 分鐘,那么每個采樣值就是分鐘平均值。最大/最小值即采樣周期內(nèi)的最大和最小值。例如采樣周期為 1 分鐘,那么采樣值就是分鐘內(nèi)的最大值和最小值。第 8 頁所有數(shù)據(jù)得到某一時段內(nèi)的歷史庫中保存的所有數(shù)據(jù)。邊界查詢得到某一時段內(nèi)偏離指定數(shù)值的時間點。例如得到前 60 分鐘內(nèi),數(shù)值剛好超過 90 和小于 10 的臨界點。如下圖所示:圖中的大于 10 和小于 90 的邊界數(shù)據(jù)如紅圈所示。統(tǒng)計數(shù)據(jù)歷史數(shù)據(jù)庫能夠?qū)θ我粫r段的歷史數(shù)據(jù)進行統(tǒng)計

14、,如對歷史數(shù)據(jù)可以進行小時統(tǒng)計、也可以進行分鐘統(tǒng)計。統(tǒng)計內(nèi)容包括:平均值、最大值、最小值、方差值。統(tǒng)計數(shù)據(jù)可以通過函數(shù)、API 接口、歷史數(shù)據(jù)控件得到。標準統(tǒng)計數(shù)據(jù)標準統(tǒng)計數(shù)據(jù)也稱作摘要信息。標準統(tǒng)計數(shù)據(jù)的最小時間是小時。統(tǒng)計內(nèi)容包括:平均值、最大值、最小值。統(tǒng)計數(shù)據(jù)是數(shù)據(jù)庫根據(jù)實時值實時計算得出的,所以比從歷史數(shù)據(jù)計算得出的值要準確。利用統(tǒng)計數(shù)據(jù)可以進行小時統(tǒng)計、班統(tǒng)計、日統(tǒng)計、月統(tǒng)計、年統(tǒng)計。標準統(tǒng)計數(shù)據(jù)只是針對點的 PV 值進行統(tǒng)計,如果要對其他參數(shù)進行統(tǒng)計,可以將參數(shù)通過 連接,連接到其他點的 PV 值上,然后對被連接點的 PV 值進行統(tǒng)計即可。統(tǒng)計的指定在點的基本屬性頁中(只有模擬量

15、類型的點有該選項),選中是否統(tǒng)計復選框即可,如下圖所示:第 9 頁大慶紫金橋:技術(shù)辦事處傳真:SIS 參數(shù)SIS 是統(tǒng)計標志,該參數(shù)為 1,表示對 PV 值進行統(tǒng)計,為 0 表示不進行統(tǒng)計。對于自定義點類型,如果需要統(tǒng)計功能,必須選擇統(tǒng)計標志參數(shù) S獲取統(tǒng)計數(shù)據(jù)IS。統(tǒng)計數(shù)據(jù)可以通過函數(shù)、API 接口、摘要數(shù)據(jù)控件得到。第 10 頁第七章 歷史數(shù)據(jù)控件1歷史數(shù)據(jù)控件歷史數(shù)據(jù)是為了查詢歷史數(shù)據(jù)用的,該表一般不單獨使用,而是配合表格或歷史報表使用的。通過歷史數(shù)據(jù)控件可以得到某一位號在過去某一時刻的數(shù)值。 歷史數(shù)據(jù)控件可以同時對多個位號,多個時刻的數(shù)據(jù)進行檢索。使用步驟1) 在組態(tài)環(huán)境中添加歷史數(shù)據(jù)

16、控件。2) 通過其屬性框指定要查詢的位號,也可以通過該控件數(shù))。動態(tài)增加位號(AddTag 函3) 在中調(diào)用歷史數(shù)據(jù)控件的函數(shù),啟動查詢(調(diào)用 Start 函數(shù))。通過狀態(tài)函數(shù) IsReady 檢測檢索是否完成。通過 GetGetTextGetCellGetCellText 等函數(shù)得到歷史數(shù)據(jù)中的數(shù)據(jù)。這些數(shù)據(jù)可以用于報表顯示。添加控件歷史數(shù)據(jù)控件是一圖形對象,可以通過子圖選擇框添加到窗口中。在窗口中雙擊歷史數(shù)據(jù)控件將出現(xiàn)如下屬性框:第 11 頁大慶紫金橋:技術(shù)辦事處傳真:在框中輸入要查詢歷史數(shù)據(jù)的位號名,操作步驟如下:1) 選擇數(shù)據(jù)源,在下拉框中選擇要的數(shù)據(jù)源。小數(shù)位數(shù):輸入要顯示的小數(shù)位數(shù)

17、。數(shù)據(jù)類型:可以是時間間隔內(nèi)(由 Start 函數(shù)指定)的瞬時值或平均值。增加:在位號輸入框:輸入位號,或通過位號選擇按鈕選取位號。單擊“增加”按鈕,將位號加入到左面位號列表。刪除:單擊“刪除”按鈕,將位號從左面位號列表中刪除。修改:在左面位號列表中選擇好要修改的位號,在位號輸入框中輸入修改內(nèi)容,單擊“修改”按鈕。運行時可見:選中該復選框,運行時將顯示歷史數(shù)據(jù)(這樣可以調(diào)試),一般情況下,不用選擇該復選框。8) 單擊“”按鈕將出現(xiàn)定義框:在定義框中可以指定控件進入時動作,以及數(shù)據(jù)檢索完成時動作。函數(shù)說明:Start(Beg說明ime, Cycle, Count)開始檢索,通過函數(shù) IsRead

18、y 來檢測檢索是否完成。參數(shù)Begime : 整型,開始時間,該時間為從 1970 年 1 月 1 日零時過去的秒數(shù)。Cycle:周期,即同一位號每個數(shù)據(jù)之間的間隔時間。 Count:每個位號要取的數(shù)據(jù)個數(shù)??偟臅r間長度為 Cycle * Count。為秒。第 12 頁示例:#HisData.Start(LongTime(2001/01/01 14:50:48), 60, 10);/#HisData.為控件名稱。AddTag(TagName, Decimal, IsAverage)說明添加位號。參數(shù)TagName:位號名稱,字符串類型。 Decimal: 整型,小數(shù)位數(shù),0 表示無小數(shù)。 Is

19、Average:是否為平均值。示例:#HisData. AddTag (“A1.PV”, 2, 0);/#HisData.為控件名稱。ClearAllTag ()說明刪除所有位號。參數(shù)無。示例:#HisData. ClearAllTag ();/#HisData.為控件名稱。Get (TagName, Index)說明得到指定位號的數(shù)值。參數(shù)TagName:位號名稱,字符串型。Index:整型,指定的是數(shù)據(jù)序號,0 表示第一個周期的數(shù)據(jù)。序號從 0 開始。返回值:返回指定位號指定序號的值,為實型數(shù)。示例:Val = #HisData.Get (“TI1001.PV”, 0);/ Val 為實型

20、變量。GetText (TagName, Index)說明得到指定位號的字符串。參數(shù)TagName:位號名稱,字符串型。Index:整型,指定的是數(shù)據(jù)序號,0 表示第一個周期的數(shù)據(jù)。序號從 0 開始。返回值:返回指定位號指定序號的字符串,類型為字符串。示例:Str = #HisData.GetText (“TI1001.PV”, 0);第 13 頁大慶紫金橋:技術(shù)辦事處傳真:/Str 為字符串型變量。GetCell(Row,Col)說明得到指定單元格的數(shù)值??梢哉J為返回的數(shù)據(jù)擺放在一表格中,每列對應一個位號。參數(shù)Row:整型,指定的是行號,也就是數(shù)據(jù)的序號。序號從 0 開始。Col:整型,指定

21、的是列號,也就是位號的序號。序號從 0 開始。返回值:返回指定位號指定序號的值,為實型數(shù)。示例:Val = #HisData.GetCell(0, 0);/ Val 為實型變量。GetCellText(Row,Col)說明得到指定單元格的文本??梢哉J為返回的數(shù)據(jù)擺放在一表格中,每列對應一個位號。參數(shù)Row:整型,指定的是行號,也就是數(shù)據(jù)的序號。序號從 0 開始。Col:整型,指定的是列號,也就是位號的序號。序號從 0 開始。返回值:返回指定位號指定序號的字符串,類型為字符串。示例:Str = #HisData.GetCellText(0, 0);/Str 為字符串型變量。GetTagName(

22、TagIndex)說明得到指定序號的位號名稱。參數(shù)TagIndex:位號序號。序號從 0 開始。返回值:返回指定序號的位號名稱,類型為字符串。示例:Str = #HisData. GetTagName (0);/Str 為字符串型變量。GetTimeText (DataIndex,F(xiàn)ormat)說明得到指定數(shù)據(jù)序號的時間字符串。參數(shù)DataIndex:數(shù)據(jù)序號。序號從 0 開始。Format:時間格式。 0:YYYY/MM/DD hh:mm:ss 1:YYYY/MM/DD2:hh:mm:ss第 14 頁3:YYYY/MM/DD hh:mm4:YYYY/MM/DD hh 5:MM/DD hh:m

23、m其中 YYYY:表示年; MM:表示月; DD:表示日; hh:表示時; mm:表示分;ss:表示秒;返回值:返回指定數(shù)據(jù)序號的時間,類型為字符串。示例:Str = #HisData.GetTimeText (0,0);/Str 為字符串型變量。IsReady()說明檢測檢索是否完成。參數(shù)返回值:為整型數(shù)。1:完成;0:未完成。示例:IF(#HisData.IsReady () THEN/得到數(shù)據(jù)。 ENDIFGetColCount()說明得到列數(shù),即位號個數(shù)。參數(shù)返回值:列數(shù),為整型數(shù)。示例:TagCount = #HisData.GetRowCount();GetRowCount()說明

24、得到行數(shù),即數(shù)據(jù)個數(shù)。參數(shù)返回值:行數(shù),為整型數(shù)。示例:Dount = #HisData.GetRowCount();第 15 頁大慶紫金橋:技術(shù)辦事處傳真:2SPC 數(shù)據(jù)控件SPC 數(shù)據(jù)是為了查詢 SPC 數(shù)據(jù)用的,該表一般不單獨使用,而是配合表格或歷史報表使用的。SPC 數(shù)據(jù)指的是一段時間內(nèi)位號的最大值、最小值、平均值、方差值。SPC 數(shù)據(jù)能夠反映數(shù)據(jù)的穩(wěn)定性。通過 SPC 數(shù)據(jù)控件可以得到某一位號在過去某時段的統(tǒng)計信息。SPC 數(shù)據(jù)控件可以同時對多個位號,多個連續(xù)時段的數(shù)據(jù)進行統(tǒng)計。使用步驟6) 在組態(tài)環(huán)境中添加 SPC 數(shù)據(jù)控件。7) 通過其屬性框指定要查詢的位號,也可以通過該控件數(shù))

25、。動態(tài)增加位號(AddTag 函8) 在中調(diào)用 SPC 數(shù)據(jù)控件的函數(shù),啟動查詢(調(diào)用 Start 函數(shù))。9) 通過“ 檢索完成時”或周期調(diào)用狀態(tài)函數(shù) IsReady 來檢查檢索是否完成。10)通過GetAverGetMinGetMaxGetDevGetCellGetCellText 等函數(shù)得到SPC 數(shù)據(jù)控件中的數(shù)據(jù)。這些數(shù)據(jù)可以用于報表顯示。添加控件SPC 數(shù)據(jù)控件是一圖形對象,可以通過子圖選擇框添加到窗口中。在窗口中雙擊 SPC 數(shù)據(jù)控件將出現(xiàn)如下屬性框:在框中輸入要查詢 SPC 數(shù)據(jù)的位號名,操作步驟如下:9) 選擇數(shù)據(jù)源,在下拉框中選擇要的數(shù)據(jù)源。小數(shù)位數(shù):輸入要顯示的小數(shù)位數(shù)。忽

26、略壞值:選中該項,將剔除超過量程范圍的數(shù)據(jù)。第 16 頁增加:在位號輸入框:輸入位號,或通過位號選擇按鈕選取位號。單擊“增加”按鈕,將位號加入到左面位號列表。刪除:單擊“刪除”按鈕,將位號從左面位號列表中刪除。修改:在左面位號列表中選擇好要修改的位號,在位號輸入框中輸入修改內(nèi)容,單擊“修改”按鈕。運行時可見:選中該復選框,運行時將顯示 SPC 數(shù)據(jù)(這樣可以調(diào)試),一般情況下,不用選擇該復選框。16)單擊“”按鈕將出現(xiàn)定義框:在定義框中可以指定控件進入時動作,以及數(shù)據(jù)檢索完成時動作。函數(shù)說明:Start(Beg說明ime, Cycle, Count)開始檢索,通過函數(shù) IsReady 來檢測檢

27、索是否完成。參數(shù)Begime : 整型,開始時間,該時間為從 1970 年 1 月 1 日零時過去的秒數(shù)。Cycle:周期,即同一位號每個數(shù)據(jù)之間的間隔時間。 Count:每個位號要取的數(shù)據(jù)個數(shù)。總的時間長度為 Cycle * Count。示例:#SpcCtrl.Start(LongTime(2001/01/01 14:50:48), 60, 10);/#SpcCtrl.為 SPC 控件名稱。為秒。第 17 頁大慶紫金橋:技術(shù)辦事處傳真:AddTag(TagName, Decimal, IsAverage)說明添加位號。參數(shù)TagName:位號名稱,字符串類型。 Decimal: 整型,小數(shù)位

28、數(shù),0 表示無小數(shù)。 IsAverage:是否為平均值。示例:#SpcCtrl. AddTag (“A1.PV”, 2, 0);/#SpcCtrl.為控件名稱。ClearAllTag ()說明刪除所有位號。參數(shù)無。示例:#SpcCtrl. ClearAllTag ();/#SpcCtrl.為控件名稱。GetAver (TagName, Index)說明得到指定位號的平均值。參數(shù)TagName:位號名稱,字符串型。Index:整型,指定的是數(shù)據(jù)序號,0 表示第一個周期的數(shù)據(jù)。序號從 0 開始。返回值:返回指定位號指定序號的值,為實型數(shù)。示例:Val = #SpcCtrl.GetAver(“TI1

29、001.PV”, 0);/ Val 為實型變量。GetMax (TagName, Index)說明得到指定位號的最大值。參數(shù)及示例與 GetAver 類似,參見 GetAvert。GetMin (TagName, Index)說明得到指定位號的最小值。參數(shù)及示例與 GetAver 類似,參見 GetAvert。GetDev (TagName, Index)說明得到指定位號的方差值。第 18 頁參數(shù)及示例與 GetAver 類似,參見 GetAvert。GetAverText (TagName, Index)說明得到指定位號的平均值字符串。參數(shù)TagName:位號名稱,字符串型。Index:整型

30、,指定的是數(shù)據(jù)序號,0 表示第一個周期的數(shù)據(jù)。序號從 0 開始。返回值:返回指定位號指定序號的字符串,類型為字符串。示例:Str = #SpcCtrl.GetAverText (“TI1001.PV”, 0);/Str 為字符串型變量。GetMaxText (TagName, Index)說明得到指定位號的最大值字符串。參數(shù)及示例與 GetAverText 類似,參見 GetAverText。GetM說明ext (TagName, Index)得到指定位號的最小值字符串。參數(shù)及示例與 GetAverText 類似,參見 GetAverText。GetDevText (TagName, Inde

31、x)說明得到指定位號的方差字符串。參數(shù)及示例與 GetAverText 類似,參見 GetAverText。GetCell(Row,Col, Type)說明得到指定單元格的數(shù)值。可以認為返回的數(shù)據(jù)擺放在一表格中,每列對應一個位號。參數(shù)Row:整型,指定的是行號,也就是數(shù)據(jù)的序號。序號從 0 開始。Col:整型,指定的是列號,也就是位號的序號。序號從 0 開始。 Type:整型,值類型,0:平均;1:最?。?:最大;3:方差。返回值:返回指定位號指定序號的值,為實型數(shù)。示例:Val = #SpcCtrl.GetCell(0, 0,0);/ Val 為實型變量。GetCellText(Row,Co

32、l, Type)說明得到指定單元格的文本。可以認為返回的數(shù)據(jù)擺放在一表格中,每列對應一個位號。第 19 頁大慶紫金橋:技術(shù)辦事處傳真:參數(shù)Row:整型,指定的是行號,也就是數(shù)據(jù)的序號。序號從 0 開始。Col:整型,指定的是列號,也就是位號的序號。序號從 0 開始。 Type:整型,值類型,0:平均;1:最小;2:最大;3:方差。返回值:返回指定位號指定序號的字符串,類型為字符串。示例:Str = #SpcCtrl.GetCellText(0, 0, 0);/Str 為字符串型變量。GetTagName(TagIndex)說明得到指定序號的位號名稱。參數(shù)TagIndex:位號序號。序號從 0

33、開始。返回值:返回指定序號的位號名稱,類型為字符串。示例:Str = #SpcCtrl. GetTagName (0);/Str 為字符串型變量。GetTimeText (DataIndex,F(xiàn)ormat)說明得到指定數(shù)據(jù)序號的時間字符串。參數(shù)DataIndex:數(shù)據(jù)序號。序號從 0 開始。Format:時間格式。 0:YYYY/MM/DD hh:mm:ss 1:YYYY/MM/DD2:hh:mm:ss 3:YYYY/MM/DD hh:mm4:YYYY/MM/DD hh 5:MM/DD hh:mm其中 YYYY:表示年; MM:表示月; DD:表示日; hh:表示時; mm:表示分;ss:表示

34、秒;返回值:返回指定數(shù)據(jù)序號的時間,類型為字符串。示例:Str = #SpcCtrl.GetTimeText (0,0);/Str 為字符串型變量。第 20 頁GetM說明imeText (TagName, Index)得到指定位號在指定周期內(nèi)達到最小值的時間。參數(shù)TagName:位號名稱,字符串型。Index:整型,指定的是數(shù)據(jù)序號,0 表示第一個周期的數(shù)據(jù)。序號從 0 開始。返回值:返回指定位號在指定周期達到最小值的時間,類型為字符串。示例:Str = #SpcCtrl. GetM/Str 為字符串型變量。imeText (“TI1001.PV”, 0);GetMaxTimeText (T

35、agName, Index)說明得到指定位號在指定周期內(nèi)達到最大值的時間。參數(shù)TagName:位號名稱,字符串型。Index:整型,指定的是數(shù)據(jù)序號,0 表示第一個周期的數(shù)據(jù)。序號從 0 開始。返回值:返回指定位號在指定周期達到最大值的時間,類型為字符串。示例:Str = #SpcCtrl. GetMaxTimeText (“TI1001.PV”, 0);/Str 為字符串型變量。IsReady()說明檢測檢索是否完成。參數(shù)返回值:為整型數(shù)。1:完成;0:未完成。示例:IF(#SpcCtrl.IsReady () THEN/得到數(shù)據(jù)。 ENDIFGetColCount()說明得到列數(shù),即位號個

36、數(shù)。參數(shù)返回值:列數(shù),為整型數(shù)。示例:TagCount = #SpcCtrl.GetRowCount();GetRowCount()說明第 21 頁大慶紫金橋:技術(shù)辦事處傳真:得到行數(shù),即數(shù)據(jù)個數(shù)。參數(shù)返回值:行數(shù),為整型數(shù)。示例:Dount = #SpcCtrl.GetRowCount();3摘要數(shù)據(jù)對象摘要數(shù)據(jù)是為了查詢摘要數(shù)據(jù)用的,該表一般不單獨使用,而是配合表格或歷史報表使用的。摘要數(shù)據(jù)指的是以小時為最小的一段時間內(nèi)位號的最大值、最小值、平均值、方差值。摘要數(shù)據(jù)能夠反映數(shù)據(jù)的穩(wěn)定性。如果要看任意時間段的統(tǒng)計數(shù)據(jù)(小于一小時的)請使用統(tǒng)計數(shù)據(jù)對象(SPC)。通過摘要數(shù)據(jù)控件可以得到某一位

37、號在過去某時段的統(tǒng)計信息。摘要數(shù)據(jù)控件可以同時對多個位號,多個連續(xù)時段的數(shù)據(jù)進行統(tǒng)計。使用步驟11)在組態(tài)環(huán)境中添加摘要數(shù)據(jù)控件。12)通過其屬性框指定要查詢的位號,也可以通過該控件數(shù))。動態(tài)增加位號(AddTag 函在通過中調(diào)用摘要數(shù)據(jù)控件的函數(shù),啟動查詢(調(diào)用 Start 函數(shù))。“ 檢索完成時”或周期調(diào)用狀態(tài)函數(shù) IsReady 來檢查檢索是否完成。15)通過GetAverGetMinGetMaxGetDevGetCellGetCellText 等函數(shù)得到摘要數(shù)據(jù)控件中的數(shù)據(jù)。這些數(shù)據(jù)可以用于報表顯示。添加控件摘要數(shù)據(jù)控件是一圖形對象,可以通過子圖選擇框添加到窗口中。在窗口中雙擊摘要數(shù)據(jù)

38、控件將出現(xiàn)如下屬性框:第 22 頁在框中輸入要查詢摘要數(shù)據(jù)的位號名,操作步驟如下:17)選擇數(shù)據(jù)源,在下拉框中選擇要的數(shù)據(jù)源。小數(shù)位數(shù):輸入要顯示的小數(shù)位數(shù)。忽略壞值:選中該項,將剔除超過量程范圍的數(shù)據(jù)。增加:在位號輸入框:輸入位號,或通過位號選擇按鈕選取位號。單擊“增加”按鈕,將位號加入到左面位號列表。刪除:單擊“刪除”按鈕,將位號從左面位號列表中刪除。修改:在左面位號列表中選擇好要修改的位號,在位號輸入框中輸入修改內(nèi)容,單擊“修改”按鈕。運行時可見:選中該復選框,運行時將顯示摘要數(shù)據(jù)(這樣可以調(diào)試),一般情況下,不用選擇該復選框。24)單擊“”按鈕將出現(xiàn)定義框:第 23 頁大慶紫金橋:技術(shù)

39、辦事處傳真:在定義框中可以指定控件進入時動作,以及數(shù)據(jù)檢索完成時動作。函數(shù)說明:Start(Beg說明ime, Cycle, Count)開始檢索,通過函數(shù) IsReady 來檢測檢索是否完成。參數(shù)Begime : 整型,開始時間,該時間為從 1970 年 1 月 1 日零時過去的秒數(shù)。Cycle:周期,即同一位號每個數(shù)據(jù)之間的間隔時間。 Count:每個位號要取的數(shù)據(jù)個數(shù)??偟臅r間長度為 Cycle * Count。示例:#SummCtrl.Start(LongTime(2001/01/01 14:50:48), 60, 10);/#SummCtrl.為摘要控件名稱。為秒。AddTag(Ta

40、gName, Decimal, IsAverage)說明添加位號。參數(shù)TagName:位號名稱,字符串類型。 Decimal: 整型,小數(shù)位數(shù),0 表示無小數(shù)。 IsAverage:是否為平均值。示例:#SummCtrl. AddTag (“A1.PV”, 2, 0);第 24 頁/#SummCtrl.為控件名稱。ClearAllTag ()說明刪除所有位號。參數(shù)無。示例:#SummCtrl. ClearAllTag ();/#SummCtrl.為控件名稱。GetAver (TagName, Index)說明得到指定位號的平均值。參數(shù)TagName:位號名稱,字符串型。Index:整型,指定的

41、是數(shù)據(jù)序號,0 表示第一個周期的數(shù)據(jù)。序號從 0 開始。返回值:返回指定位號指定序號的值,為實型數(shù)。示例:Val = #SummCtrl.GetAver(“TI1001.PV”, 0);/ Val 為實型變量。GetMax (TagName, Index)說明得到指定位號的最大值。參數(shù)及示例與 GetAver 類似,參見 GetAvert。GetMin (TagName, Index)說明得到指定位號的最小值。參數(shù)及示例與 GetAver 類似,參見 GetAvert。GetDev (TagName, Index)說明得到指定位號的方差值。暫時沒有實現(xiàn)。參數(shù)及示例與 GetAver 類似,參見

42、 GetAvert。GetAverText (TagName, Index)說明得到指定位號的平均值字符串。參數(shù)TagName:位號名稱,字符串型。Index:整型,指定的是數(shù)據(jù)序號,0 表示第一個周期的數(shù)據(jù)。序號從 0 開始。返回值:返回指定位號指定序號的字符串,類型為字符串。第 25 頁大慶紫金橋:技術(shù)辦事處傳真:示例:Str = #SummCtrl.GetAverText (“TI1001.PV”, 0);/Str 為字符串型變量。GetMaxText (TagName, Index)說明得到指定位號的最大值字符串。參數(shù)及示例與 GetAverText 類似,參見 GetAverText

43、。GetM說明ext (TagName, Index)得到指定位號的最小值字符串。參數(shù)及示例與 GetAverText 類似,參見 GetAverText。GetDevText (TagName, Index)說明得到指定位號的方差字符串。暫時沒有實現(xiàn)。參數(shù)及示例與 GetAverText 類似,參見 GetAverText。GetCell(Row,Col, Type)說明得到指定單元格的數(shù)值??梢哉J為返回的數(shù)據(jù)擺放在一表格中,每列對應一個位號。參數(shù)Row:整型,指定的是行號,也就是數(shù)據(jù)的序號。序號從 0 開始。Col:整型,指定的是列號,也就是位號的序號。序號從 0 開始。 Type:整型,

44、值類型,0:平均;1:最?。?:最大;3:方差。返回值:返回指定位號指定序號的值,為實型數(shù)。示例:Val = #SummCtrl.GetCell(0, 0,0);/ Val 為實型變量。GetCellText(Row,Col, Type)說明得到指定單元格的文本??梢哉J為返回的數(shù)據(jù)擺放在一表格中,每列對應一個位號。參數(shù)Row:整型,指定的是行號,也就是數(shù)據(jù)的序號。序號從 0 開始。Col:整型,指定的是列號,也就是位號的序號。序號從 0 開始。 Type:整型,值類型,0:平均;1:最??;2:最大;3:方差。返回值:返回指定位號指定序號的字符串,類型為字符串。示例:Str = #SummCtr

45、l.GetCellText(0, 0, 0);/Str 為字符串型變量。第 26 頁GetTagName(TagIndex)說明得到指定序號的位號名稱。參數(shù)TagIndex:位號序號。序號從 0 開始。返回值:返回指定序號的位號名稱,類型為字符串。示例:Str = #SummCtrl. GetTagName (0);/Str 為字符串型變量。GetTimeText (DataIndex,F(xiàn)ormat)說明得到指定數(shù)據(jù)序號的時間字符串。參數(shù)DataIndex:數(shù)據(jù)序號。序號從 0 開始。Format:時間格式。 0:YYYY/MM/DD hh:mm:ss 1:YYYY/MM/DD2:hh:mm:

46、ss 3:YYYY/MM/DD hh:mm4:YYYY/MM/DD hh 5:MM/DD hh:mm其中 YYYY:表示年; MM:表示月; DD:表示日; hh:表示時; mm:表示分;ss:表示秒;返回值:返回指定數(shù)據(jù)序號的時間,類型為字符串。示例:Str = #SummCtrl.GetTimeText (0,0);/Str 為字符串型變量。GetM說明imeText (TagName, Index)得到指定位號在指定周期內(nèi)達到最小值的時間。參數(shù)TagName:位號名稱,字符串型。Index:整型,指定的是數(shù)據(jù)序號,0 表示第一個周期的數(shù)據(jù)。序號從 0 開始。返回值:返回指定位號在指定周期

47、達到最小值的時間,類型為字符串。示例:第 27 頁大慶紫金橋:技術(shù)辦事處傳真:Str = #SummCtrl. GetMimeText (“TI1001.PV”, 0);/Str 為字符串型變量。GetMaxTimeText (TagName, Index)說明得到指定位號在指定周期內(nèi)達到最大值的時間。參數(shù)TagName:位號名稱,字符串型。Index:整型,指定的是數(shù)據(jù)序號,0 表示第一個周期的數(shù)據(jù)。序號從 0 開始。返回值:返回指定位號在指定周期達到最大值的時間,類型為字符串。示例:Str = #SummCtrl. GetMaxTimeText (“TI1001.PV”, 0);/Str

48、為字符串型變量。IsReady()說明檢測檢索是否完成。參數(shù)返回值:為整型數(shù)。1:完成;0:未完成。示例:IF(#SummCtrl.IsReady () THEN/得到數(shù)據(jù)。 ENDIFGetColCount()說明得到列數(shù),即位號個數(shù)。參數(shù)返回值:列數(shù),為整型數(shù)。示例:TagCount = #SummCtrl.GetRowCount();GetRowCount()說明得到行數(shù),即數(shù)據(jù)個數(shù)。參數(shù)返回值:行數(shù),為整型數(shù)。示例:Dount = #SummCtrl.GetRowCount();第 28 頁第八章 歷史數(shù)據(jù)相關(guān)控件和函數(shù)1與歷史數(shù)據(jù)有關(guān)的控件除了上面講到的歷史數(shù)據(jù)檢索控件外,還有很多與

49、歷史數(shù)據(jù)顯示有關(guān)的控件包括:歷史趨勢、歷史報表、格式報表、趨勢分析。另外還有與查詢歷史數(shù)據(jù)比較密切的控件是開始時間、時間長度控件,這兩個控件用于定位檢索的時間段。下面分別說明。1)歷史趨勢使用歷史趨勢可以方便的觀察數(shù)據(jù)庫中的歷史點在任意一個時刻的狀態(tài)。歷史趨勢帶有很多功能按鈕用于控制時間范圍或顯示的量程大小。您可以使用趨勢的自帶功能按鈕,也可以把趨勢打散,重新定制自己的按鈕外觀或更改按鈕的功能。創(chuàng)建歷史趨勢選擇菜單命令“工具/子圖”或點擊工具條命令按鈕左側(cè)的瀏覽樹中選中“趨勢分析”項目。如下圖所示:調(diào)出子圖選擇框,在框在右側(cè)列表中雙擊圖中所示圖標或直接拖動此圖標到當前窗口中,可以看到窗口中已經(jīng)

50、創(chuàng)建了歷史趨勢組件,如下圖所示:第 29 頁大慶紫金橋:技術(shù)辦事處傳真:詳細說明請參見畫面使用手冊。2)趨勢分析趨勢分析是圖形化的歷史數(shù)據(jù)分析界面。每個窗口同時可以顯示 8 支趨勢筆,每支筆的起始時間、時間范圍可以隨意指定,因此用戶可以對同一位號在不同時刻進行比較。在趨勢圖中,你可以用鼠標選擇任何區(qū)域,對其進行放大。過程趨勢同時提供統(tǒng)計分析功能,可以對任何一段趨勢曲線的統(tǒng)計值進行計算,幫助工藝技術(shù)員和工程師進行統(tǒng)計分析。窗口中的趨勢筆可以隨意指定,并且可以保存到文件中,以便下次調(diào)用。關(guān)于趨勢分析的詳細說明請參見畫面使用手冊。3)歷史報表歷史報表是一種簡單的瀏覽和打印歷史數(shù)據(jù)的控件。其格式比較簡

51、單,但是使用方便,能夠滿足一般用戶要求。歷史報表從數(shù)據(jù)庫中按照固定的采樣周期獲取歷史數(shù)據(jù),并以表格的形式顯示出來。創(chuàng)建歷史報表在菜單中選擇工具/組件對象/歷史報表,如下圖所示:第 30 頁在窗口中單擊并拖拽到合適大小后鼠標。如下圖所示:雙擊控件,將彈出屬性“一般”頁中各項說明:起始時間 :框。指定起始時刻:選中該項表示開始時間由下面時間輸入項指定。起始時刻決定于打印時間:選中該項表示報表打印開始時間是打印時刻前的一段時間。報表起始時間當在單選按鈕“起始時間”選擇了“指定起始時刻”選項時,該項變?yōu)橛行В駝t為無效狀態(tài)。該項用于指定報表開始時間,指定從前幾天什么時刻開始。規(guī)定如下:0 表示當天,1

52、:表示前一天,依次類推。時、分輸入項表示從前幾天的第幾點鐘(023)和第幾分鐘(059)開始。 例如 1 天 8 時 0 分,表示前一天 8 點整開始。字體單擊該按鈕可以選擇報表的字體和字號。第 31 頁大慶紫金橋:技術(shù)辦事處傳真:顏色有如下五種顏色可以指定:“標題背景”,“工位號/標題”,“序號”,“值”以及“時間”。時間該組共有四項,解釋如下:范圍:報表獲取歷史數(shù)據(jù)的時間長度。間隔:報表歷史數(shù)據(jù)間的時間間隔,即采樣周期。顯示時間:是否顯示時間。格式:報表中時間列所占用的字符數(shù)。注意:當選擇了“指定起始時刻”選項時,“范圍”和“間隔”的時間選擇了“起始時刻決定于打印時間”選項時,“范圍”和“間隔”的時間為小時;當為秒。數(shù)據(jù)源選擇所連接實時數(shù)據(jù)庫的數(shù)據(jù)源。數(shù)據(jù)類型只有在選擇了“指定起始時刻”選項時,該項才變?yōu)橛行?,否則為禁止狀態(tài)。該項用于指定歷史報表采樣的數(shù)據(jù)類型。類型如下:瞬時值得到指定時間段內(nèi),固定采樣點的瞬時值。平均值得到指定時間段內(nèi),每個周期內(nèi)的平均值。最大值得到指定時間段內(nèi),每個周期內(nèi)的最大值。最小值得到指定時間段內(nèi),每個周期內(nèi)的最小值。“變量”

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論