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