吳勝華,田海波
(國電南京自動(dòng)化股份有限公司研究院,江蘇 南京 210003)
事件順序記錄(SOE)系統(tǒng)在電廠分散控制系統(tǒng)中用于異常事件的記錄,它所記錄的事件發(fā)生時(shí)間、首發(fā)事件和連鎖發(fā)生事件的間隔順序,是系統(tǒng)故障和異常分析的最重要依據(jù)。目前,電廠中的分散控制系統(tǒng)(DCS)一般都具有SOE功能,對SOE事件記錄的分辨率一般要求達(dá)到毫秒級,不同DCS其SOE的實(shí)現(xiàn)方法也不同,若要保證不同過程控制站內(nèi)SOE模件的時(shí)間同步,SOE模件之間的時(shí)間同步就顯得尤為重要。
SOE模件通常在2次授時(shí)之間由自身的定時(shí)中斷計(jì)數(shù)來模擬時(shí)鐘,因此,對模擬時(shí)鐘造成影響的因素有2個(gè)。其一,模件一般采用石英晶體振蕩器。石英晶體振蕩器是由晶振體連續(xù)產(chǎn)生一定頻率的時(shí)鐘脈沖,計(jì)數(shù)器則對這些脈沖進(jìn)行累計(jì)得到時(shí)間值。由于時(shí)鐘振蕩器的脈沖受環(huán)境溫度、激勵(lì)電平等多種不穩(wěn)定性因素的影響,時(shí)鐘本身存在誤差。例如,某精度為±0.002%的時(shí)鐘,其每分鐘的誤差為1.2 ms,若其工作的環(huán)境溫度有較大變化,還會(huì)增加額外的誤差,此誤差不可能隨晶振制造技術(shù)的發(fā)展而完全消除。其二,單片機(jī)中斷的誤差。定時(shí)器產(chǎn)生中斷請求以后,并不一定能馬上響應(yīng)這個(gè)中斷,若單片機(jī)正處理其他的中斷(同級或更高級),要等其執(zhí)行完其他中斷,再執(zhí)行一條主程序指令,才會(huì)響應(yīng)定時(shí)器中斷。因?yàn)槌绦蚯Р钊f別,所以這類影響是隨機(jī)的,很難糾正。
可見,SOE模件中的模擬時(shí)鐘若不經(jīng)定期同步校準(zhǔn),其自由運(yùn)行一段時(shí)間后的累計(jì)誤差會(huì)很大。
當(dāng)不同位置SOE模件的起始模擬時(shí)刻一致時(shí),可使不同SOE模件在同一時(shí)刻所產(chǎn)生的累計(jì)誤差一致,從而使不同SOE模件所記錄的SOE事件順序與實(shí)際產(chǎn)生的事件順序之間不會(huì)有差異。上述分析基于所有的SOE模件都是同一公司生產(chǎn)的類型相同的模件。由于同步校準(zhǔn)后期誤差增大,特別是在對時(shí)前后會(huì)達(dá)到最大(如圖1所示),在對時(shí)時(shí)刻,SOE模件產(chǎn)生的累計(jì)誤差為零,隨著時(shí)間變化,累計(jì)誤差越來越大,在下一次對時(shí)之前,此差值達(dá)到最大。若用1 ms間隔的SOE測試儀來測試SOE模件,會(huì)發(fā)現(xiàn)原本相差1ms的時(shí)間會(huì)有重疊或跳變。這樣,對于某一不同時(shí)發(fā)生的事件,SOE模件可能會(huì)記錄成相同的時(shí)間,從而造成事件順序與實(shí)際發(fā)生的事件順序不一致。
圖1 SOE模件內(nèi)部時(shí)鐘示意圖
對于一般的SOE模件而言,要求事件分辨率在1 ms以內(nèi),即要求用1 ms間隔的脈沖測量SOE模件,SOE模件記錄的事件時(shí)間不允許有重疊或跳變。這樣,在對時(shí)前后使SOE模件在對時(shí)周期內(nèi)產(chǎn)生的時(shí)間最大累計(jì)誤差越小越好。
在對時(shí)周期內(nèi),SOE模件都是利用CPU的定時(shí)器中斷計(jì)數(shù)來模擬時(shí)鐘的,SOE模擬時(shí)間累計(jì)誤差是隨著時(shí)間的增加而線性累加的,在沒有累計(jì)誤差的理想情況下,SOE模件記錄的連續(xù)事件發(fā)生的時(shí)刻之間的差值都應(yīng)該為1 ms,由于晶體振蕩器本身有一個(gè)周期,晶體振蕩器本身問題造成的誤差很難去除。例如11.059 2 M Hz的晶振,其1個(gè)周期為9×10-5ms,假設(shè)不考慮處理器分頻、倍頻等因素,若1 min對時(shí)1次,誤差為5.4 ms,即定時(shí)寄存器值每改變±1,1 min后時(shí)間會(huì)與原來時(shí)間相差±5.4 ms。這樣大的一個(gè)差值,很難在1 min的定時(shí)周期里通過改變定時(shí)寄存器值,使模件內(nèi)部時(shí)鐘的讀數(shù)達(dá)到一個(gè)最理想的值。
當(dāng)誤差達(dá)到正負(fù)個(gè)定時(shí)周期時(shí),若采用減去或加上定時(shí)周期的方法來修正該誤差(上述例子中采用每10s減去±1ms的方法來修正),可在一定程度上緩解該問題,但此方法若用標(biāo)準(zhǔn)脈寬的方波脈沖去觸發(fā)SOE事件,在產(chǎn)生修正誤差的時(shí)刻,仍可能發(fā)生事件重疊或跳變的現(xiàn)象。
本文所要解決的問題正是在盡量不增加成本的情況下,用軟件方法消除模件最大累計(jì)誤差,讓其在用標(biāo)準(zhǔn)脈寬為1 ms的方波脈沖測試時(shí)SOE事件基本無重疊或跳變,因?yàn)樵诿總€(gè)定時(shí)中斷產(chǎn)生時(shí)可以通過修改定時(shí)寄存器來減小誤差。例如,在1 min對時(shí)1次的情況下,若在某一個(gè)定時(shí)寄存器值M時(shí)測量時(shí)長多出A ms,而改變成M+1定時(shí)寄存器值時(shí)測量時(shí)長少Bms,則采用X次M寄存器值后Y次M+1寄存器值,X和Y的取值由計(jì)算公式X×A=Y×B來確定,此時(shí)調(diào)整1 ms最多相差9×10-5ms。
在測試時(shí),可盡量放長間隔時(shí)間,如調(diào)整對時(shí)周期至工程應(yīng)用周期的10倍對SOE模件進(jìn)行測量。例如:當(dāng)定時(shí)寄存器設(shè)定為8848時(shí),SOE記錄時(shí)間為2011-01-31 T 11:22:33.444和2011-01-31 T 11:32:33.414,比實(shí)際時(shí)間慢了 30 ms,當(dāng)減小計(jì)數(shù)器值至8847時(shí),SOE記錄時(shí)間為2011-01-31 T 11:22:33.444和2011-01-31 T 11:32:33.454,比實(shí)際時(shí)間快了10 ms,此時(shí)就可以在定時(shí)中斷中設(shè)定3次寄存器設(shè)定值為8 847,1次寄存器設(shè)定值為8848,這樣,每分鐘對時(shí)的對時(shí)瞬間誤差基本可以忽略不計(jì)。通過此方法可以使SOE模件在一個(gè)完整的對時(shí)周期內(nèi)所產(chǎn)生的時(shí)間最大累計(jì)誤差減小到最小。其效果如圖2、圖3所示。
用HS-128 SOE測試信號發(fā)生器,設(shè)置1 ms間隔脈沖,對珙縣電廠2×600 MW機(jī)組分散控制系統(tǒng)SOE模件的通道進(jìn)行測試。修改程序前測試跨越對時(shí)時(shí)刻SOE狀態(tài)如圖4所示,序號1279及以下的時(shí)間整體推遲了1 ms。而在修改之后,未再出現(xiàn)此種情況。
找出SOE模件模擬時(shí)間比實(shí)際準(zhǔn)確時(shí)間偏小的模式,再找出SOE模件模擬時(shí)間比實(shí)際準(zhǔn)確時(shí)間偏大的模式,每產(chǎn)生m次偏小模式定時(shí)中斷后,再產(chǎn)生n次偏大模式定時(shí)中斷,通過這種方法,可以使得SOE模件在整個(gè)對時(shí)周期內(nèi),模擬時(shí)間與實(shí)際準(zhǔn)確時(shí)間之間的誤差達(dá)到最小。