摘要:本文針對(duì)Profibus總線控制的制動(dòng)器試驗(yàn)臺(tái)控制系統(tǒng)的設(shè)計(jì)中需要對(duì)數(shù)據(jù)進(jìn)行高速采集,而WinCC變量更新周期較長(zhǎng)的問(wèn)題,提出了一種首先利用 S7-300 PLC進(jìn)行高速數(shù)據(jù)采集,然后采用WinCC支持的原始數(shù)據(jù)類型進(jìn)行數(shù)據(jù)打包,接收并歸檔的方法。此方法中將獲取的數(shù)據(jù)經(jīng)過(guò)處理后存儲(chǔ)到自定義的數(shù)據(jù)庫(kù)中,并實(shí)現(xiàn)了測(cè)試過(guò)程中的數(shù)據(jù)實(shí)時(shí)顯示。
關(guān)鍵詞:WinCC,原始數(shù)據(jù)類型,高速數(shù)據(jù)采集,歸檔
引言
Siemens 的監(jiān)控組態(tài)軟件WinCC(Windows Control Center)在生產(chǎn)和過(guò)程自動(dòng)化中對(duì)控制任務(wù)編程并支持可視化,它提供了高性能的過(guò)程耦合、快速的畫面更新、以及可靠的數(shù)據(jù)處理,因此具有高度的適用性。WinCC提供了適用于工業(yè)的圖形顯示、消息、歸檔以及報(bào)表的功能模板,可以通過(guò)ODBC和SQL方式訪問(wèn)歸檔數(shù)據(jù),并通過(guò)OLE2.0和ActiveX控件的對(duì)象和文檔鏈接,這使得WinCC廣泛地應(yīng)用于復(fù)雜自動(dòng)控制的集成方案成為可能。
1 系統(tǒng)簡(jiǎn)介
本系統(tǒng)是為某公司研制的制動(dòng)器臺(tái)架試驗(yàn)臺(tái),試驗(yàn)臺(tái)如圖1所示
主要完成制動(dòng)器磨合試驗(yàn)、效能試驗(yàn)、熱衰退恢復(fù)等一系列試驗(yàn)。其控制系統(tǒng)采用了研華工控機(jī)、西門子公司的S7-300系列PLC、ProfiBus通訊處理卡CP5611和監(jiān)控軟件WinCC V6,組成了PROFIBUS總線控制系統(tǒng)。
系統(tǒng)連接如圖2所示。
2 問(wèn)題的提出
在本試驗(yàn)臺(tái)架上根據(jù)國(guó)標(biāo),制動(dòng)器臺(tái)架試驗(yàn)臺(tái)需要對(duì)制動(dòng)期間的制動(dòng)力矩進(jìn)行采集,同時(shí)對(duì)采集的數(shù)據(jù)進(jìn)行歸檔,以便對(duì)數(shù)據(jù)進(jìn)行實(shí)時(shí)分析和以后對(duì)試驗(yàn)數(shù)據(jù)進(jìn)行分析。一般一個(gè)制動(dòng)周期為2-6s,采樣周期至少為50ms才不至于使數(shù)據(jù)丟失。
WinCC可以通過(guò)MPI、PRrofibus、工業(yè)以太網(wǎng)等與下位機(jī)PLC進(jìn)行通訊,將現(xiàn)場(chǎng)數(shù)據(jù)進(jìn)行收集,歸檔,并顯示在界面上。但是 WinCC的最小刷新周期(250ms)不能滿足試驗(yàn)中對(duì)快速信號(hào)的采樣要求,不能保證試驗(yàn)數(shù)據(jù)的可信度。這一刷新周期遠(yuǎn)遠(yuǎn)大于PLC可能達(dá)到的采樣周期(1ms),不能充分利用PLC的采樣速度。因?yàn)槌R?guī)WinCC組態(tài)不能滿足特殊高速數(shù)據(jù)采集的要求,會(huì)導(dǎo)致數(shù)據(jù)的丟失,因此有必要尋找更好的途徑來(lái)實(shí)現(xiàn)高速數(shù)據(jù)采集的目的。
3 設(shè)計(jì)思想
存儲(chǔ)過(guò)程數(shù)據(jù),并方便快捷的處理數(shù)據(jù)是上位機(jī)基于WinCC的過(guò)程監(jiān)控系統(tǒng)的目標(biāo)。WinCC對(duì)現(xiàn)場(chǎng)數(shù)據(jù)進(jìn)行數(shù)據(jù)采集的過(guò)程可通過(guò)WinCC外部變量按一定周期訪問(wèn)PLC對(duì)應(yīng)地址的數(shù)據(jù)來(lái)實(shí)現(xiàn),但是這種數(shù)據(jù)采集的周期完全是由WinCC定義的更新周期來(lái)決定的。如前所述,WinCC的最小刷新周期(250ms)不能滿足試驗(yàn)中對(duì)快速信號(hào)的采樣要求。S7-400系列PLC的SFB37(AR_Send)塊具有將所采集到的過(guò)程值傳給WinCC歸檔的功能,但是本系統(tǒng)中采用的S7-300系列沒(méi)有這個(gè)功能,因此本文的出發(fā)點(diǎn)就是利用S7-300系列有限的資源實(shí)現(xiàn)數(shù)據(jù)的高速采集。
本方案中在WinCC中實(shí)現(xiàn)高速數(shù)據(jù)采集的方法可歸納如下:
?PLC每個(gè)循環(huán)周期所采集到的過(guò)程值可以以一定的順序存放在具有一定格式的DB塊中;
?WinCC可以定義一種原始數(shù)據(jù)類型變量,可以對(duì)PLC里的DB塊直接讀取。
?WinCC的以數(shù)據(jù)包的形式一次從PLC接收一批數(shù)據(jù),所以這樣就可以獲取完整的高速數(shù)據(jù),實(shí)現(xiàn)對(duì)原始高速數(shù)據(jù)的直接處理。
WinCC的歷史歸檔數(shù)據(jù)對(duì)于工業(yè)生產(chǎn)過(guò)程也極為重要,WinCC在實(shí)現(xiàn)高速數(shù)據(jù)采集后還必須對(duì)數(shù)據(jù)進(jìn)行歸檔。WinCC V6的底層數(shù)據(jù)庫(kù)是 Microsoft SQL 2000,由于WinCC自帶的歸檔數(shù)據(jù)采集周期滿足不了系統(tǒng)性能要求,所以本系統(tǒng)中基于上面介紹的方法是對(duì)過(guò)程值進(jìn)行采集,并通過(guò)編寫腳本使WinCC過(guò)程值數(shù)據(jù)存放在一個(gè)已經(jīng)建立過(guò)的數(shù)據(jù)庫(kù)表格中,然后應(yīng)用軟件可通過(guò)查詢數(shù)據(jù)庫(kù)表格對(duì)歸檔數(shù)據(jù)進(jìn)行訪問(wèn)。
4 WinCC高速數(shù)據(jù)采集歸檔的實(shí)現(xiàn)
由于篇幅問(wèn)題,本文只介紹一個(gè)制動(dòng)周期的高速數(shù)據(jù)采集歸檔,不涉及WinCC是如何實(shí)現(xiàn)對(duì)制動(dòng)器臺(tái)架試驗(yàn)臺(tái)一個(gè)完整試驗(yàn)的數(shù)據(jù)的接收。
下位機(jī)PLC的一個(gè)制動(dòng)周期的高速數(shù)據(jù)采集的流程如下所示
1)一個(gè)新的制動(dòng)周期開始;
2)PLC置位信號(hào)BrkFlag=1(BrkFlag為WinCC定義的一個(gè)二進(jìn)制外部變量),同時(shí)PLC開始采集數(shù)據(jù),此時(shí)PLC將采集到的過(guò)程值以一定的順序存放在具有一定格式的DB塊中;
3)制動(dòng)周期完畢,同時(shí)PLC 置位信號(hào)BrkFlag=0。
上位機(jī)WinCC的一個(gè)制動(dòng)周期的高速數(shù)據(jù)采集通過(guò)編輯一個(gè)動(dòng)作腳本來(lái)實(shí)現(xiàn),此時(shí)動(dòng)作設(shè)置一個(gè)觸發(fā)器,此觸發(fā)器為位信號(hào)BrkFlag,位信號(hào) BrkFlag一旦改變就會(huì)觸發(fā)這個(gè)動(dòng)作,只有位信號(hào)BrkFlag=0時(shí)WinCC才會(huì)對(duì)PLC發(fā)送的過(guò)程值進(jìn)行拆包處理,并做一個(gè)制動(dòng)周期的曲線圖同行對(duì)拆包數(shù)據(jù)存入一個(gè)已經(jīng)預(yù)先建立好的數(shù)據(jù)庫(kù)表格中。上述過(guò)程具體設(shè)計(jì)如下:
1)定義原始數(shù)據(jù)變量ActualStress,長(zhǎng)度為240個(gè)字節(jié)
WinCC提供了消息幀變量,多個(gè)過(guò)程值可以被寫入連續(xù)的數(shù)據(jù)塊并以幀形式發(fā)送到WinCC,存儲(chǔ)在WinCC的原始數(shù)據(jù)變量中,原始數(shù)據(jù)變量的格式和長(zhǎng)度都是固定不變的。
2)用C Script編寫數(shù)據(jù)采集全局動(dòng)作
WinCC不能直接對(duì)原始數(shù)據(jù)變量進(jìn)行處理,但提供了C腳本功能可用于編寫處理數(shù)據(jù)變量的全局動(dòng)作。在本系統(tǒng)中編寫了項(xiàng)目函數(shù) SendStressVar(),此項(xiàng)目函數(shù)通過(guò)調(diào)用內(nèi)部函數(shù)GetTagRaw()來(lái)實(shí)現(xiàn)原始數(shù)據(jù)變量的更新,并對(duì)其中的消息幀內(nèi)容進(jìn)行拆包處理。 GetTagRaw()定義如下:
#define DATA_SIZE 120
WORD byData[DATA_SIZE];
GetTagRaw("ActualStress",byData,DATA_SIZE);
其中ActualStress為指定的原始數(shù)據(jù)變量的名字,參數(shù)byData是一個(gè)指針,只用來(lái)接收原始數(shù)據(jù)變量?jī)?nèi)容的字?jǐn)?shù)組,參數(shù)DATA_SIZE是字型數(shù)組的長(zhǎng)度,函數(shù)返回結(jié)果為TRUE,表明函數(shù)正確的執(zhí)行了,否則為異常,需進(jìn)行相應(yīng)處理。
3)對(duì)采集數(shù)據(jù)進(jìn)行實(shí)時(shí)顯示并對(duì)采集數(shù)據(jù)進(jìn)行歸檔
一個(gè)制動(dòng)周期內(nèi)對(duì)制動(dòng)力矩的分析是十分重要的,通過(guò)制動(dòng)力矩?cái)?shù)據(jù)的采集可以計(jì)算出一個(gè)制動(dòng)周期內(nèi)的最大制動(dòng)力矩、最小制動(dòng)力矩和平均制動(dòng)力矩。本系統(tǒng)要求對(duì)每個(gè)周期的制動(dòng)力矩進(jìn)行顯示。
本系統(tǒng)還同時(shí)要求對(duì)采集的數(shù)據(jù)進(jìn)行歸檔,因?yàn)椴杉芷诘南拗票仨毦帉懭帜_本實(shí)現(xiàn)把采集到的數(shù)據(jù)庫(kù)寫入已經(jīng)建立好數(shù)據(jù)表格中,流程如圖3所示。
5 試驗(yàn)與結(jié)論
利用本系統(tǒng)對(duì)制動(dòng)器進(jìn)行了試驗(yàn),制動(dòng)過(guò)程如圖4 所示,試驗(yàn)過(guò)程記錄數(shù)據(jù)較多,本文只給出了通過(guò)記錄數(shù)據(jù)得到的制動(dòng)力矩和制動(dòng)溫度。
目前大多數(shù)組態(tài)軟件都存在采集歸檔周期長(zhǎng)的問(wèn)題,本文針對(duì)將WinCC從PLC采集過(guò)來(lái)的原始類型數(shù)據(jù)進(jìn)行處理,成功的將WinCC 的采集周期縮短至50ms甚至更小(最小可達(dá)10ms),滿足了數(shù)據(jù)高速采集的要求。該方法已經(jīng)在實(shí)際的工程項(xiàng)目中應(yīng)用,運(yùn)行狀況穩(wěn)定。該方法具有一定的通用性
參考文獻(xiàn):
1 蘇昆哲,深入淺出西門子WinCC 6.0[M],北京,北京航空航天大學(xué)出版社,2004
2 劉玉國(guó)等,基于PLC的現(xiàn)場(chǎng)數(shù)據(jù)采集和自動(dòng)控制,現(xiàn)代機(jī)械 2007
3 姜麗波等,WinCC高速數(shù)據(jù)采集應(yīng)用 電氣傳動(dòng)自動(dòng)化2006.11
4 西門子S7-300/400PLC編程軟件使用手冊(cè)