蔡一磊,李佑文,褚紅健
(南京國(guó)電南自軌道交通工程有限公司,江蘇南京 210032)
夏時(shí)制,又稱“日光節(jié)約時(shí)制”(Daylight Saving Time,DST),是一種為節(jié)約能源而人為規(guī)定地方時(shí)間的制度,在這一制度實(shí)行期間所采用的統(tǒng)一時(shí)間稱為“夏令時(shí)”。一般在天亮早的夏季人為將時(shí)間提前一小時(shí),可以使人早起早睡,減少照明量,以充分利用光照資源,從而節(jié)約照明用電。各個(gè)國(guó)家采納夏時(shí)制的具體規(guī)定不同,全世界有近110 個(gè)國(guó)家每年要實(shí)行夏令時(shí)。在這些國(guó)家和地區(qū)實(shí)行夏令時(shí)制度,在每年進(jìn)入夏令時(shí)時(shí)刻,當(dāng)?shù)貢r(shí)鐘將向前撥快1 個(gè)小時(shí),同時(shí)在離開夏令時(shí)進(jìn)入冬令時(shí)時(shí)刻,再將時(shí)鐘向后回?fù)?個(gè)小時(shí),這就導(dǎo)致在離開夏令時(shí)進(jìn)入冬令時(shí)時(shí)刻會(huì)有1 個(gè)小時(shí)的重復(fù)時(shí)間,分別為夏令時(shí)的最后1 小時(shí)和冬令時(shí)的第1 個(gè)小時(shí)。如某地區(qū)某年夏令時(shí)最后1 個(gè)小時(shí)為 9 月 21 日的 23 點(diǎn)至 24 點(diǎn),那么在夏令時(shí)結(jié)束的一刻進(jìn)入冬令時(shí),時(shí)鐘根據(jù)夏令時(shí)制度回?fù)? 個(gè)小時(shí),就導(dǎo)致當(dāng)?shù)赜袃蓚€(gè)9 月21 日的23 點(diǎn)至24點(diǎn)的時(shí)間。
隨著國(guó)產(chǎn)電力調(diào)度系統(tǒng)國(guó)際化進(jìn)程的推動(dòng),國(guó)產(chǎn)電力調(diào)度化系統(tǒng)走向越來(lái)越多的國(guó)家,上述問(wèn)題已經(jīng)無(wú)法回避,因此如何使系統(tǒng)真正支持多時(shí)區(qū)與夏令時(shí)提上了工作日程。
由于DSC-9000系統(tǒng)后臺(tái)采用GMT時(shí)間,在轉(zhuǎn)換為當(dāng)?shù)貢r(shí)間時(shí)并不區(qū)分該時(shí)間為夏令時(shí)時(shí)間還是冬令時(shí)時(shí)間,本文對(duì)夏令時(shí)制引入的問(wèn)題進(jìn)行探討,并按模塊介紹了DSC-9000 系統(tǒng)針對(duì)夏令時(shí)的整體解決方案[1]。
PSCADA 電力監(jiān)控系統(tǒng)包含控制中心級(jí)和站下設(shè)備級(jí)兩個(gè)層級(jí),針對(duì)站下設(shè)備采用監(jiān)控系統(tǒng)時(shí)間進(jìn)行對(duì)時(shí)的問(wèn)題,在進(jìn)出夏令時(shí)的時(shí)刻,由于設(shè)備的時(shí)間不會(huì)自動(dòng)向前撥或者往回?fù)?,所以需在時(shí)間切換時(shí)進(jìn)行對(duì)時(shí)操作(精度為秒級(jí))。除了系統(tǒng)本地實(shí)時(shí)報(bào)警需要提供系統(tǒng)當(dāng)前時(shí)間所處時(shí)區(qū)的功能,還有時(shí)鐘顯示以及報(bào)警歷史查詢等功能均需判斷當(dāng)前系統(tǒng)所處時(shí)令,所以系統(tǒng)需增加當(dāng)前是處于夏令時(shí)還是處于冬令時(shí)的標(biāo)志來(lái)實(shí)現(xiàn)整體解決方案[2]。
由于設(shè)備上送帶時(shí)標(biāo)的狀態(tài)或遙測(cè)信息時(shí),它上送的信息中的時(shí)標(biāo)沒(méi)有時(shí)令標(biāo)志,系統(tǒng)無(wú)法直接判斷該時(shí)標(biāo)信息屬于冬令時(shí)還是夏令時(shí),而在實(shí)時(shí)報(bào)警和歷史報(bào)警中均需系統(tǒng)能提供該報(bào)警產(chǎn)生時(shí)間的時(shí)令信息,所以系統(tǒng)需要對(duì)上送的時(shí)標(biāo)信息進(jìn)行時(shí)令的判斷。在進(jìn)出夏令時(shí)附近上送的帶時(shí)標(biāo)的報(bào)警信息,該時(shí)標(biāo)有可能是夏令時(shí)也有可能是冬令時(shí),故需對(duì)進(jìn)出夏令時(shí)附近的時(shí)標(biāo)進(jìn)行特殊處理。
另外,客戶端顯示的時(shí)間為當(dāng)?shù)貢r(shí)間,且不帶有夏令時(shí)或冬令時(shí)的標(biāo)志位。當(dāng)時(shí)間在夏令時(shí)/冬令時(shí)切換的過(guò)程中,客戶端無(wú)法立即獲取服務(wù)器時(shí)間并及時(shí)將時(shí)鐘調(diào)整1個(gè)小時(shí)。
而在實(shí)時(shí)報(bào)警顯示窗口中,報(bào)警一般均是按照?qǐng)?bào)警時(shí)間倒序排列,報(bào)警時(shí)間為當(dāng)?shù)貢r(shí)間且不帶有夏令時(shí)或冬令時(shí)的標(biāo)志位。但是由于夏令時(shí)最后1 小時(shí)和冬令時(shí)第1個(gè)小時(shí)在顯示時(shí)完全相同,所以在這兩個(gè)重復(fù)的1 個(gè)小時(shí)范圍內(nèi)報(bào)警依然是按照不帶標(biāo)志位的報(bào)警時(shí)間排序,會(huì)導(dǎo)致某些在冬令時(shí)時(shí)間范圍內(nèi)產(chǎn)生的報(bào)警排在夏令時(shí)內(nèi)發(fā)生的報(bào)警前面。
而對(duì)于歷史報(bào)警查詢功能,由于在DSC-9000 系統(tǒng)報(bào)警數(shù)據(jù)庫(kù)中存儲(chǔ)的歷史報(bào)警記錄都是按照GMT時(shí)間來(lái)進(jìn)行存儲(chǔ)的,所以在實(shí)行夏令時(shí)時(shí)間的地區(qū),在顯示歷史報(bào)警查詢結(jié)果時(shí)需要將查詢到的報(bào)警歷史記錄的GMT時(shí)間轉(zhuǎn)換成當(dāng)?shù)氐腄ST時(shí)間顯示。在轉(zhuǎn)換成當(dāng)?shù)氐腄ST時(shí)間之后,又由于夏令時(shí)最后1小時(shí)和冬令時(shí)第1個(gè)小時(shí)在顯示時(shí)完全相同,所以我們還需要在報(bào)警歷史查詢結(jié)果中將顯示相同的時(shí)間信息加上不同的后綴標(biāo)志來(lái)加以區(qū)分。
針對(duì)站下設(shè)備采用監(jiān)控系統(tǒng)時(shí)間對(duì)時(shí),在進(jìn)出夏令時(shí)時(shí)間的時(shí)候進(jìn)行判斷并發(fā)送對(duì)時(shí)整點(diǎn)對(duì)時(shí)命令;由于設(shè)備上送帶時(shí)標(biāo)的報(bào)警信息中的時(shí)標(biāo)沒(méi)有時(shí)令標(biāo)志,在正常情況下可以取操作系統(tǒng)當(dāng)前時(shí)間的時(shí)令標(biāo)志;而在進(jìn)出夏令時(shí)附近5分鐘內(nèi)的時(shí)間范圍內(nèi)需要進(jìn)行特殊處理,即判斷該時(shí)間為夏令時(shí)還是冬令時(shí),如果不在這個(gè)切換時(shí)間范圍內(nèi),則按照正常情況取標(biāo)志;同時(shí)通過(guò)寫夏令時(shí)對(duì)象的DST屬性來(lái)標(biāo)記該時(shí)標(biāo)的時(shí)制,該屬性值為1的時(shí)候表示當(dāng)前處于冬令時(shí)時(shí)間,為0的時(shí)候表示當(dāng)前處于夏令時(shí)時(shí)間。
在進(jìn)入夏令時(shí)或冬令時(shí)時(shí)刻,通過(guò)寫入實(shí)時(shí)庫(kù)夏令時(shí)判斷對(duì)象的DST屬性來(lái)表示系統(tǒng)當(dāng)前所處時(shí)令,該屬性值為1 時(shí)為冬令時(shí)時(shí)間,為0 為夏令時(shí)時(shí)間。規(guī)約采集程序還需要通過(guò)配置文件的方式記錄每年進(jìn)入夏令時(shí)的時(shí)間和出夏令時(shí)的時(shí)間,以供規(guī)約程序運(yùn)行判斷。
客戶端時(shí)鐘顯示模塊原先的更新原理為,每10秒鐘向后臺(tái)請(qǐng)求一次服務(wù)器時(shí)間,在每次和服務(wù)器對(duì)時(shí)的間隔內(nèi),客戶端自行每秒在服務(wù)器獲取的時(shí)間基礎(chǔ)上增加1 秒并顯示出來(lái)。服務(wù)器向客戶端返回的時(shí)間為當(dāng)?shù)貢r(shí)間,且不帶有夏令時(shí)或冬令時(shí)的標(biāo)志位。在原先的時(shí)鐘模塊處理模式下,當(dāng)系統(tǒng)時(shí)間在夏令時(shí)/冬令時(shí)切換的過(guò)程中,客戶端無(wú)法立即獲取服務(wù)器的時(shí)間,及時(shí)將時(shí)鐘調(diào)整1個(gè)小時(shí)以適應(yīng)時(shí)區(qū)跳變帶來(lái)的變化[3]。
針對(duì)上述問(wèn)題,需要在客戶端當(dāng)前時(shí)間距離夏令時(shí)/冬令時(shí)切換時(shí)刻不足20 秒的時(shí)候,時(shí)鐘顯示模塊加快客戶端與后臺(tái)服務(wù)器之間對(duì)時(shí)的頻率,改為每1秒執(zhí)行1 次,從而實(shí)現(xiàn)在夏令時(shí)轉(zhuǎn)換過(guò)程中,系統(tǒng)時(shí)鐘模塊能及時(shí)獲取服務(wù)器將時(shí)鐘回?fù)芑蛱冎蟮臅r(shí)間,在除了夏令時(shí)/冬令時(shí)切換的其余時(shí)刻,時(shí)鐘顯示模塊與后臺(tái)服務(wù)器的對(duì)時(shí)周期仍然保持10 秒不變。
另外,與規(guī)約程序處理方法一樣,在關(guān)于clock模塊的配置文件中也需要將該國(guó)家或地區(qū)每年進(jìn)入夏令時(shí)的時(shí)間和出夏令時(shí)的時(shí)間按格式要求配置成功,以供客戶端時(shí)鐘程序運(yùn)行判斷。
在常規(guī)的電力監(jiān)控系統(tǒng)項(xiàng)目中,客戶端當(dāng)前實(shí)時(shí)報(bào)警顯示模塊的窗口中,報(bào)警按照?qǐng)?bào)警時(shí)間倒序排列,報(bào)警時(shí)間為當(dāng)?shù)貢r(shí)間且不帶有夏令時(shí)或冬令時(shí)的標(biāo)志位。
但是在夏令時(shí)時(shí)區(qū)的國(guó)家和地區(qū),由于夏令時(shí)最后1小時(shí)和冬令時(shí)第1個(gè)小時(shí)在時(shí)間顯示上會(huì)存在完全相同的時(shí)間,而在這兩個(gè)重復(fù)的1個(gè)小時(shí)內(nèi)報(bào)警依然是按照?qǐng)?bào)警時(shí)間排序,會(huì)導(dǎo)致某些在冬令時(shí)內(nèi)發(fā)生的報(bào)警排在夏令時(shí)內(nèi)發(fā)生的報(bào)警前面,此時(shí)報(bào)警顯示順序的邏輯與報(bào)警產(chǎn)生順序的邏輯不符。
另一方面,在確認(rèn)全部報(bào)警和確認(rèn)窗口范圍內(nèi)報(bào)警時(shí),當(dāng)前報(bào)警顯示模塊之前的設(shè)計(jì)邏輯規(guī)定了報(bào)警產(chǎn)生時(shí)間大于當(dāng)前系統(tǒng)時(shí)間的報(bào)警無(wú)法被確認(rèn)。所以導(dǎo)致在客戶端時(shí)間處于冬令時(shí)第1個(gè)小時(shí)內(nèi),調(diào)度員執(zhí)行“全部確認(rèn)”和“確認(rèn)可視報(bào)警”功能時(shí),會(huì)使得某些在夏令時(shí)最后1 小時(shí)發(fā)生的報(bào)警無(wú)法被確認(rèn)。如當(dāng)前時(shí)刻為23:10(冬令時(shí)),此時(shí)執(zhí)行“確認(rèn)全部報(bào)警”操作時(shí),會(huì)使得報(bào)警窗中一條時(shí)間為23:40(夏令時(shí))的報(bào)警無(wú)法被確認(rèn)。
規(guī)約采集通信程序能夠通過(guò)DST 屬性值來(lái)區(qū)分系統(tǒng)當(dāng)前時(shí)間處于夏令時(shí)或冬令時(shí)。通過(guò)修改報(bào)警顯示文本的配置,將DST屬性添加到報(bào)警點(diǎn)的報(bào)警文本格式中,可以使報(bào)警顯示內(nèi)容中也可以帶有一個(gè)用于區(qū)分系統(tǒng)時(shí)間所處時(shí)間范圍的字段,如“夏令時(shí),冬令時(shí)”“-S-,-W-”等。當(dāng)前報(bào)警顯示模塊窗口結(jié)合報(bào)警時(shí)間和該字段就能夠正確對(duì)夏令時(shí)最后1 小時(shí)和冬令時(shí)第1 個(gè)小時(shí)產(chǎn)生的報(bào)警按照?qǐng)?bào)警產(chǎn)生的時(shí)間先后順序進(jìn)行正確的排序。
以伊朗德黑蘭地鐵項(xiàng)目為例,當(dāng)時(shí)間處于重復(fù)的1個(gè)小時(shí)內(nèi),負(fù)責(zé)通信的規(guī)約程序能夠根據(jù)系統(tǒng)當(dāng)前的UTC 時(shí)間,在實(shí)時(shí)庫(kù)中更新1 個(gè)時(shí)間的標(biāo)志位屬性,然后可以通過(guò)修改報(bào)警文本格式的配置,使得在那1小時(shí)內(nèi)產(chǎn)生的報(bào)警內(nèi)容中也帶有1個(gè)用于時(shí)間范圍區(qū)分的字段。在當(dāng)前報(bào)警顯示模塊中,結(jié)合報(bào)警時(shí)間和該字段,如“夏令時(shí),冬令時(shí)”“-S-,-W-”,調(diào)度員就能夠正確將兩次出現(xiàn)重復(fù)出現(xiàn)的時(shí)間段內(nèi)的報(bào)警按照?qǐng)?bào)警產(chǎn)生的先后時(shí)間進(jìn)行排序。
另外,由于客戶端的時(shí)鐘模塊無(wú)法添加夏令時(shí)或冬令時(shí)標(biāo)志位,在執(zhí)行“確認(rèn)全部報(bào)警”和“確認(rèn)窗口范圍內(nèi)報(bào)警”時(shí),取消實(shí)時(shí)報(bào)警模塊原先報(bào)警時(shí)間大于當(dāng)前系統(tǒng)時(shí)間的報(bào)警無(wú)法被確認(rèn)的功能設(shè)定,便可以解決因時(shí)鐘跳變對(duì)確認(rèn)報(bào)警帶來(lái)的影響。
另外,在關(guān)于實(shí)時(shí)報(bào)警顯示模塊的配置文件中,也需要將該國(guó)家或地區(qū)每年進(jìn)入夏令時(shí)的時(shí)間和出夏令時(shí)的時(shí)間按格式要求配置成功,以供客戶端報(bào)警模塊運(yùn)行判斷。
報(bào)警歷史查詢模塊依據(jù)工作站(客戶端)的時(shí)區(qū)設(shè)置信息,將從報(bào)警歷史庫(kù)中獲得的報(bào)警記錄的UTC時(shí)間轉(zhuǎn)成當(dāng)?shù)貢r(shí)區(qū)DST時(shí)間,并根據(jù)DST時(shí)間的開關(guān)是否配置為開啟,將夏令時(shí)最后1 小時(shí)和冬令時(shí)第1個(gè)小時(shí)顯示相同的時(shí)間信息加上不同的后綴標(biāo)志加以區(qū)分,該標(biāo)志位由規(guī)約采集程序判斷并寫入系統(tǒng)實(shí)時(shí)庫(kù)。
本文詳細(xì)介紹了基于夏令時(shí)的電力監(jiān)控系統(tǒng)解決方案,通過(guò)修改與夏令時(shí)功能的時(shí)間、報(bào)警等相關(guān)接口模塊,使系統(tǒng)能支持夏令時(shí)地區(qū)的應(yīng)用需求。另外,該方案還提供了靈活的配置方法,降低了國(guó)際化項(xiàng)目系統(tǒng)改造升級(jí)以及工程實(shí)施的難度。