陸團(tuán)勇
(作者單位:桂林廣播電視發(fā)射臺(tái))
發(fā)射機(jī)的開(kāi)關(guān)機(jī)時(shí)間表設(shè)計(jì)
陸團(tuán)勇
(作者單位:桂林廣播電視發(fā)射臺(tái))
摘 要:本文介紹桂林廣播電視發(fā)射臺(tái)監(jiān)控系統(tǒng)中的開(kāi)關(guān)機(jī)時(shí)間表算法和存儲(chǔ)方法設(shè)計(jì),該設(shè)計(jì)的主要目的是解決開(kāi)關(guān)機(jī)時(shí)間表在Windows、PLC等不同平臺(tái)下的跨平臺(tái)遠(yuǎn)程同步問(wèn)題。
關(guān)鍵詞:發(fā)射機(jī);PLC;開(kāi)關(guān)機(jī)時(shí)間
發(fā)射臺(tái)的開(kāi)關(guān)機(jī)時(shí)間表通常是以星期為周期的,如星期一05:45開(kāi)機(jī),星期二00:05關(guān)機(jī)。圖1是一個(gè)實(shí)際應(yīng)用中的某發(fā)射機(jī)的開(kāi)關(guān)機(jī)時(shí)間表。
對(duì)于這個(gè)開(kāi)關(guān)機(jī)時(shí)間表,應(yīng)當(dāng)注意以下事項(xiàng):(1)開(kāi)關(guān)機(jī)時(shí)間表是以星期為周期的;(2)開(kāi)機(jī)時(shí)間和關(guān)機(jī)時(shí)間只設(shè)置到分鐘,即05:45開(kāi)機(jī)表示05:45:00開(kāi)機(jī),00:05關(guān)機(jī)表示00:05:00關(guān)機(jī);(3)開(kāi)機(jī)時(shí)間和關(guān)機(jī)時(shí)間可能不在同一天,如開(kāi)機(jī)時(shí)間為星期一的05:45,關(guān)機(jī)時(shí)間為星期二的00:05;(4)開(kāi)機(jī)時(shí)間和關(guān)機(jī)時(shí)間也可以在同一天,如開(kāi)機(jī)時(shí)間為星期二的05:45,關(guān)機(jī)時(shí)間為星期二的14:05;(5)在WINDOWS系統(tǒng)中,星期天用0表示,星期一到星期六用1~6表示,因此像星期六的05:45開(kāi)機(jī),星期天的00:05分關(guān)機(jī)的情況應(yīng)當(dāng)單獨(dú)處理;(6)開(kāi)關(guān)機(jī)時(shí)間有可能跨越多天,如星期一的05:45開(kāi)機(jī),星期六的00:05分關(guān)機(jī),對(duì)于這種情況暫時(shí)不作考慮,也就是說(shuō)考慮最多的是開(kāi)關(guān)機(jī)時(shí)間跨越1天的情況。
開(kāi)關(guān)機(jī)時(shí)間表是存儲(chǔ)于監(jiān)控服務(wù)器的數(shù)據(jù)庫(kù)中的,用戶(hù)在服務(wù)器端對(duì)開(kāi)關(guān)機(jī)時(shí)間表進(jìn)行設(shè)置(設(shè)置界面如圖1所示)后,本地監(jiān)控計(jì)算機(jī)通過(guò)WEB服務(wù)或UDP通訊實(shí)時(shí)讀取相應(yīng)的開(kāi)關(guān)機(jī)時(shí)間表,如果開(kāi)關(guān)機(jī)時(shí)間表與本地的不同,則更新本地的開(kāi)關(guān)機(jī)時(shí)間表。為方便比較,應(yīng)當(dāng)為每一個(gè)開(kāi)關(guān)機(jī)時(shí)間表設(shè)置一個(gè)版本號(hào),以開(kāi)關(guān)機(jī)時(shí)間表的最后更新時(shí)間作為版本號(hào)。具體的更新流程為:本地監(jiān)控計(jì)算機(jī)每隔一段時(shí)間讀取一次服務(wù)器端的開(kāi)關(guān)機(jī)時(shí)間表版本,若版本與本地不同,則讀取新的開(kāi)關(guān)機(jī)時(shí)間表,并對(duì)本地的開(kāi)關(guān)機(jī)時(shí)間表進(jìn)行更新。
圖1 開(kāi)關(guān)機(jī)時(shí)間表
圖2是數(shù)據(jù)庫(kù)中設(shè)備(Device)與開(kāi)關(guān)機(jī)時(shí)間表(Schedule)的關(guān)系圖。設(shè)備與開(kāi)關(guān)機(jī)時(shí)間表通過(guò)設(shè)備編號(hào)(DeviceID)構(gòu)成一對(duì)多關(guān)系,即“一臺(tái)設(shè)備有多個(gè)開(kāi)關(guān)機(jī)時(shí)間,一個(gè)開(kāi)關(guān)機(jī)時(shí)間只對(duì)應(yīng)一臺(tái)設(shè)備”。注意開(kāi)關(guān)機(jī)時(shí)間表的版本號(hào)(ScheduleVersion)是保存在設(shè)備表中的。對(duì)于1+1或者N+1系統(tǒng),只需設(shè)置主機(jī)的開(kāi)關(guān)機(jī)時(shí)間表,監(jiān)控軟件只根據(jù)主機(jī)的開(kāi)關(guān)機(jī)時(shí)間表進(jìn)行相應(yīng)的開(kāi)關(guān)機(jī)操作。
本地監(jiān)控系統(tǒng)是由PLC控制器和本地監(jiān)控計(jì)算機(jī)共同構(gòu)成的二級(jí)監(jiān)控系統(tǒng)。對(duì)于每一個(gè)1+1或者N+1系統(tǒng),設(shè)置一臺(tái)PLC進(jìn)行最基本的定時(shí)開(kāi)關(guān)機(jī)和手動(dòng)倒機(jī)操作,而故障判斷與報(bào)警、發(fā)射機(jī)數(shù)據(jù)記錄、自動(dòng)倒機(jī)等復(fù)雜控制邏輯則由本地監(jiān)控計(jì)算機(jī)完成。這樣做雖然增加了系統(tǒng)開(kāi)發(fā)難度,但好處是由于PLC的高可靠性,可以確保在本地監(jiān)控計(jì)算機(jī)無(wú)法工作的情況下,也能完成基本的定時(shí)開(kāi)關(guān)機(jī)操作,提高系統(tǒng)的可靠性。
由于PLC可以脫離本地監(jiān)控計(jì)算機(jī)單獨(dú)工作,因此需要將開(kāi)關(guān)機(jī)時(shí)間表傳送給PLC單獨(dú)存儲(chǔ)。
PLC控制器在系統(tǒng)中被設(shè)置為沉默客戶(hù)端,也就是說(shuō)PLC不會(huì)主動(dòng)發(fā)送數(shù)據(jù),只有接收到本機(jī)監(jiān)控計(jì)算機(jī)的指令才會(huì)進(jìn)行響應(yīng)。本地監(jiān)控計(jì)算機(jī)的開(kāi)關(guān)機(jī)時(shí)間表更新后,會(huì)立即向PLC發(fā)送一條更新開(kāi)關(guān)機(jī)時(shí)間表指令,指示PLC更新其存儲(chǔ)的開(kāi)關(guān)機(jī)時(shí)間表(圖3)。
PLC的開(kāi)關(guān)機(jī)時(shí)間表存儲(chǔ)于VB0至VB98共99個(gè)字節(jié)的存儲(chǔ)區(qū),這99個(gè)字節(jié)是設(shè)置為掉電保持的,也就是說(shuō)即使PLC短暫掉電,開(kāi)關(guān)機(jī)時(shí)間表也不會(huì)丟失。對(duì)于1+1系統(tǒng),主機(jī)的開(kāi)關(guān)機(jī)時(shí)間表具有圖3所示的格式。VB0是開(kāi)關(guān)機(jī)時(shí)間總數(shù),VB1-VB6是開(kāi)關(guān)機(jī)時(shí)間表的版本號(hào),VB7開(kāi)始每六個(gè)字節(jié)存儲(chǔ)一條開(kāi)關(guān)機(jī)時(shí)間。對(duì)于N+1系統(tǒng),每一臺(tái)主機(jī)都按順序重復(fù)一次上述數(shù)據(jù)存儲(chǔ)。
需要注意WINDOWS系統(tǒng)中星期天用0表示,星期一到星期六用1~6表示,PLC中星期天用1表示,星期一到六用2~7表示,而且在PLC中時(shí)間是
用BCD碼表示的,為計(jì)算方便,應(yīng)當(dāng)將時(shí)間先轉(zhuǎn)換為BCD碼。
圖2 數(shù)據(jù)庫(kù)中的開(kāi)關(guān)機(jī)時(shí)間表
圖3 PLC的開(kāi)關(guān)機(jī)時(shí)間表存儲(chǔ)
開(kāi)關(guān)機(jī)時(shí)間比較的基本思路是將星期、時(shí)、分、秒按高位到低位的順序拼裝為一個(gè)32位整數(shù),其中第24~31位為星期,16~23位為小時(shí),8~15位為分鐘,0~7位為秒,如星期三12:28:00的二進(jìn)制表示為:0000 0011 0000 1100 0001 1100 0000 0000,這樣可以得出開(kāi)機(jī)時(shí)間值,關(guān)機(jī)時(shí)間值和當(dāng)前時(shí)間值,當(dāng)前時(shí)間值大于等于開(kāi)機(jī)時(shí)間值且小于等于關(guān)機(jī)時(shí)間值就表示在開(kāi)機(jī)時(shí)間,當(dāng)前時(shí)間值小于開(kāi)機(jī)時(shí)間值或大于關(guān)機(jī)時(shí)間值就表示是關(guān)機(jī)時(shí)間。特別需要注意對(duì)星期天的處理方法。這個(gè)算法對(duì)于PLC和監(jiān)控計(jì)算機(jī)是通用的。
本文討論的開(kāi)關(guān)機(jī)時(shí)間表設(shè)計(jì)已在實(shí)際中得到應(yīng)用,當(dāng)開(kāi)關(guān)機(jī)時(shí)間改變后,只需在監(jiān)控服務(wù)器端對(duì)開(kāi)關(guān)機(jī)時(shí)間進(jìn)行更改,系統(tǒng)在10s之內(nèi)就會(huì)自動(dòng)將開(kāi)關(guān)機(jī)時(shí)間表同步到本機(jī)監(jiān)控PLC和本地監(jiān)控計(jì)算機(jī)。