文丨陳思平
中波廣播發(fā)射機自動化監(jiān)控系統(tǒng)中的下位機子系統(tǒng)軟件設計及“零點問題”分析與解決
文丨陳思平
發(fā)射機自動化監(jiān)控系統(tǒng)以數據、表格和聲音等形式實時監(jiān)控發(fā)射機的運行情況,自動控制發(fā)射機的開關機,自動應急故障處理,故障自動告警和診斷。下位機子系統(tǒng)作為自動化實時監(jiān)測控制系統(tǒng)中的一個重要組成部分,在整個系統(tǒng)中起著至關重要的作用。本文主要論述自動化監(jiān)控系統(tǒng)中的下位機子系統(tǒng)中的軟件設計及一個代表性問題的分析與解決。
自動化; 實時監(jiān)控; PAC軟件
中波廣播發(fā)射機的固態(tài)化和數字化,給發(fā)射機的自動監(jiān)控奠定了堅實的基礎,發(fā)射機的各種外部接口也為機器的自動控制提供了極大的方便。隨著各臺站逐漸建立起自己的計算機局域網,基于局域網的自動化監(jiān)控也有了質的飛越。
廈門廣播電視集團發(fā)射中心201臺自動化實時監(jiān)測控制系統(tǒng)如圖1所示。
系統(tǒng)主要由下位機子系統(tǒng)、局域網通訊子系統(tǒng)、客戶端監(jiān)控子系統(tǒng)、數據庫服務器四個子系統(tǒng)組成,各子系統(tǒng)相對獨立,都可以以損失部分功能為代價脫離其他系統(tǒng)獨立運行,同時又有緊密的聯系,互相有著頻繁的數據交換,組合在一起,才構成完整的自動化實時監(jiān)測控制系統(tǒng)??刂凭W和辦公網之間用物理單向的傳輸通道連接,既能讓辦公網中的用戶了解機器設備的運行狀態(tài)實時信息,又能百分百防止黑客和病毒程序對控制網的入侵。
圖1 自動化監(jiān)控系統(tǒng)整體框圖
下位機即發(fā)射機的前端控制器,可以直接對發(fā)射機實現監(jiān)測和控制的設備。下位機安裝于發(fā)射機內部,每臺發(fā)射機都有自己的下位機。下位機以并發(fā)互聯方式連接到發(fā)射機,對發(fā)射機原有電路不做修改、不影響原有功能。發(fā)射機面板上手動操作與下位機自動控制相互獨立,必要時可通過機器面板的遙控或本地開關來進行自動/手動切換,手動時實時監(jiān)控系統(tǒng)只有監(jiān)測功能,沒有控制功能。下位機子系統(tǒng)脫離了其他子系統(tǒng)仍然能夠正常運行。自動化系統(tǒng)中的其他子系統(tǒng)都需要從下位機子系統(tǒng)獲取信息以實現具體功能,脫離下位機子系統(tǒng),自動化系統(tǒng)就失去了對發(fā)射機的聯系,監(jiān)測控制也就無從談起,下位機子系統(tǒng)是整個自動化系統(tǒng)的基石。下位機子系統(tǒng)作為自動化系統(tǒng)的一個重要組成部分,需要實現多種功能,主要有。
下位機能夠對發(fā)射機各狀態(tài)量、模擬量及配套同軸開關狀態(tài)進行實時監(jiān)測??梢愿鶕煌陌l(fā)射機種類設置不同的監(jiān)測點。監(jiān)測不受開關機時間限制,可以隨時得到發(fā)射機的各個相關數據。(1)控制功能:根據預先設定好的臨時開關機時間或者正常發(fā)射機開關機時間及主備機設置,結合同軸開關上的天線狀態(tài),下位機能夠對同軸開關進行天線倒換操作,將天線倒換到需要的發(fā)射機上,并能夠對發(fā)射機進行開關機操作。臨時開關機時間表中的開關機時間段結束后將自動清空,正常開關機時間表設定后永久生效,不會因發(fā)射機關機、停電等原因消失。(2)故障處置功能:發(fā)射機運行過程中發(fā)生故障,可以對故障進行智能處理,如自動降功率、自動倒機、自動倒天線等。(3)通訊功能:下位機能夠實時地將得到的各狀態(tài)量和模擬量轉換成符合標準modbus協議的數據通過局域網發(fā)送到其他子系統(tǒng),對于不同發(fā)射機的不同狀態(tài)量、模擬量,可以根據需要設置是否發(fā)送到其他子系統(tǒng)。不僅如此,下位機編程過程中使用到的數據、變量也可以轉換成modbus協議數據發(fā)送給其他需要的子系統(tǒng)。同時,也可以接收局域網上其他子系統(tǒng)發(fā)送過來的各數據、命令,實現遠程控制。
下位機子系統(tǒng)中實現的各功能,都由下位機中的軟件來實現,可以說,軟件是下位機的靈魂,運行什么樣的軟件,決定了下位機可以實現什么樣的功能。
下位機軟件采用符合ISaGRAF規(guī)范的編程方式,ISaGRAF是一套完全符合IEC61131-3標準、與硬件無關并以視窗為開發(fā)環(huán)境的可編程控制語言設計開發(fā)的軟件。在ISaGRAF3.3版中將流程圖語言納入成為第六種程序設計語言,使得ISaGRAF完全支持世界上自動化行業(yè)的順序表(SFC)、功能塊(FBD)、梯形圖(LD)、結構文本(ST)、指令表(IL)、流程圖(FC)六大程序設計語言,可以簡單的與圖控軟件或人機界面集成在一起,可離線模擬,可在線調試控制,具備程序上傳功能,是一套強大的可編程開發(fā)工具。
圖6 下位機軟件
圖5 下位機軟件流程圖
下位機子系統(tǒng)的軟件流程圖如圖5所示。
不同的發(fā)射機上的下位機軟件稍有不同,總體思想是一樣的。下面以一臺發(fā)射機上的下位機為例說明。
下位機軟件開發(fā)界面如圖6。
下位機軟件共包含8個主程序,其中開始5個,結束3個。主程序Autorun還包含7個子程序。詳細說明如下:(1)Start 程序初始化,對某些變量做初始化賦值,打開E2PROM的寫保護,并輸出一個閃爍信號控制發(fā)光二極管表示程序正在運行。(2)GetInput通過ISaGRAF提供的“直接表示變量”功能,直接訪問下位機的各個輸入輸出寄存器,獲取發(fā)射機各模擬量和狀態(tài)量,并對獲取到的各個模擬量進行軟件濾波。(3)SYSTIME 系統(tǒng)時間讀取及校時功能的實現。在下位機子系統(tǒng)中,時間是一個很重要的參數,時間的準確與否直接影響下位機功能能否正常實現。系統(tǒng)由客戶端檢測下位機時間,發(fā)現時間異常時,由客戶端發(fā)送校時命令及標準時間信息,接收到客戶端發(fā)送的校時命令時,將接收到的標準時間做簡單校驗后寫入下位機。(4)Autorun自動機開關機是下位機需要實現的最主要的功能。程序需要能接受來自客戶端設置的開關機時間表,并按臨時開關機時間表和正常開關機時間表自動開關機。臨時開關機時間表最多可以設置5段,每段可以設置起止時間,在該段時間表執(zhí)行完畢后將自動清空。正常開關機時間表以星期為單位,每星期的每一天最多可設置5個常規(guī)開機時間段。還可以根據需要設置強制開關機——開關機鎖定。這三種開關機設置有嚴格的等級控制,優(yōu)先級最高的是開關機鎖定,其次為臨時開關機時間表,最后為自動開關機時間表。(5)TimeDate計算系統(tǒng)日期和時間。將系統(tǒng)時間換算為程序運行需要的格式。(6)ReedEEP 讀取參數。從E2PROM中讀取已經存儲的主備機設置、開關機時間表和臨時開關機時間表。(7)Primary判斷今天本機是否為主機,并從E2PROM中讀取主備機提前滯后開關機的時間。按星期為單位給發(fā)射機定義主機和備機標志,主機將比備機提前一定時間開機,并對發(fā)射機開機的時間進行修正,使發(fā)射機開機能自動比設定的自動開關機時間提前一定時間開機,提前的時間可以通過客戶端設置。并且,不論原先設置好的主備機標志如何,當天播音的發(fā)射機將被設置為主機,未播音的發(fā)射機為備機。處于開關機時間段時,主備機標志不被修改,除非需要倒機。(8)OnceOpen 臨時開關機時間表開關機程序。將讀取到的控制器日期和時間和臨時開關機時間表中的日期時間進行比較,如果在臨時開關機時間表內則開機。臨時開關機時間結束后將本段臨時開關機時間表清空。(9)Normal正常的自動開關機程序。將計算好的系統(tǒng)日期時間和開關機時間表內的時間進行比較。若在開關機時間段內則開機。(10)SaveOnce當接收到客戶端發(fā)送更改臨時開關機時間表的命令時調用。將修改的臨時開關機表寫到E2PROM。(11)SaveNorm當接收到客戶端發(fā)送更改開關機時間表的命令時調用。比較新開關機時間表和原有開關機時間表的不同,將不同的寫入E2PROM。(12)TONGZHOU 倒天線及倒機功能的實現。接收到倒天線命令時,判斷是否滿足倒天線條件,滿足則倒天線,不滿足則不動作。如若倒天線失敗或天線狀態(tài)異常,則發(fā)出報警信號。倒天線動作正常完成后,開啟當不在天線上的發(fā)射機開機時,開啟假負載。(13)AI_LIMIT簡單故障處理功能的實現。當發(fā)射機的反射功率超過設定值時,控制發(fā)射機改低功率播出。反射功率恢復時,控制發(fā)射機恢復高功率播出;發(fā)射機發(fā)生電流過荷控制發(fā)射機發(fā)出過荷復位命令,過荷復位命令發(fā)出后過荷狀態(tài)依舊,控制發(fā)射機改為低功率播出,過荷狀態(tài)消失后恢復高功率播出。(14)TMSCtrl 控制發(fā)射機開關機:該程序接收上面幾個程序運行的結果,控制發(fā)射機的開關機。單獨將對發(fā)射機的開關列為一個程序,一方面使程序可讀性增加,令一方面也更為穩(wěn)定可靠,而且也方便程序的調試,保證調試的過程不會造成對發(fā)射機的誤操作。(15)r_normal 調試用。(16)End 程序結束。為程序一個循環(huán)的結束進行一些相關的處理工作。另外還包含對發(fā)射機故障的自動復位功能。
為了避免系統(tǒng)受到的干擾對運行結果產生影響,需要在硬件連接時做好充分的硬件抗干擾處理外,在軟件上,也需要對采集到的模擬輸入量進行軟件濾波。常用的軟件濾波有限幅濾波和中位值濾波、平均濾波、低通濾波三大類,在本系統(tǒng)的設計采用了平均濾波的方法,對多次測量的參數進行平均值處理來消除一般隨機干擾的影響。平均濾波又分為算術平均濾波、去極值平均濾波、遞推平均濾波三種。算術平均濾波適合對一般具有隨機干擾的信號進行濾波,去極值平均濾波適用于對脈沖干擾和隨機干擾的抑制,他是結合了算術平均濾波和中值濾波的優(yōu)點。移動平均濾波?的優(yōu)點是速度較快。去極值平均濾波的算法是:對連續(xù)的n個數據進行排序,通常n=2k+2,k為整數。去掉其中最大和最小的2個數據,將剩余數據取平均值。在本系統(tǒng)的設計中,為了加快運行速度,n的取值為10。
所謂“零點問題”,是指下位機子系統(tǒng)在0:00:00時刻會偶爾的出現誤動作現象。即在這個時間點附近,本來不應該開啟發(fā)射機的,下位機PAC發(fā)出了開機命令,本來不應該關閉發(fā)射機的,卻把它給關了。這種開關機動作都是瞬間的,誤動作后程序會自動恢復,反映到發(fā)射機上,就是發(fā)射機開了一下立刻又關上了,或者是關了立刻又重新開啟。該故障出現的頻率不定,有時間隔幾天出現一次,有時隔了幾個月才出現一次。在開關機時間設計這一部分,我們對一周七天分別設置開關機時間,每天可以設置五段開關機時間,每段時間段有一個開機時間和一個關機時間,一共是70個時間點數據。如若有時間段會跨至第二天,比如周一5:00開機至周二1:00,設計中沒有將其分開為周一5:00至24:00和周二0:00至1:00,而是合并為一段5:00至1:00,以開機時間為界歸入周一的開機時間段內。這么設計主要是考慮增加對實際使用人員的友好度。在發(fā)射機自動化監(jiān)控系統(tǒng)的實際運行過程中,實際使用人員為機房的當班值班人員。在值班員值班過程中,內部文件、規(guī)定及平時大家的交流都是直接采用的5:00至1:00,對于實際的使用者來說更容易接受。而我們接觸到的其他產品,例如音頻傳輸監(jiān)控系統(tǒng),都是分成2段設置,比較不友好。問題出現之初,我們覺得不像是程序編寫問題,因為程序編寫一般不會出現類似的軟故障,大多是故障出現就一直出現,于是我們首先考慮的是硬件部分。反復檢查多次硬件連接電路,但是并無發(fā)現任何問題。該問題在初期的程序編寫后并沒有出現,后主要是出現與上海PDM 3KW機型上,在其他機型上相當長一段時間內沒有出現,直至去年才在HARRIS DX-10機型上出現了一次,同時,由于零點正值許多頻率的播音結束時間,這個時間點空中的電磁場變化比較劇烈,這又讓我們產生了誤判斷,認為問題是出在發(fā)射機上,認為是發(fā)射機的外部接口不夠穩(wěn)定導致。于是針對外部接口做了一些抗干擾措施,但是故障依舊。下位機子系統(tǒng)的電源模塊工作穩(wěn)定度不夠也曾經出現過問題,我們于是轉移目標到該發(fā)射機配套的下位機子系統(tǒng)的電源模塊,使用一個穩(wěn)壓直流電源從外部供電,故障依舊。接下來考慮的,就是下位機PAC本身。其他外部硬件已經都做了處理卻沒有效果。更換PAC,故障依舊。
故障排查陷入了僵局,始終找不到線索。直至2011年年底,在一次同上位機軟件調試配合的過程中,偶然發(fā)現了一個怪現象,才終于抓到了這個問題的本質。這個現象就是從PAC控制器本身獲取時間時,在0點會產生跳變的情況。例如,2012年1月1日的23:59:59,下一秒本應是2012年1月2日0:0:0,但實際上偶爾會出現2012年1月1日0:0:0,整整相差24小時。當兩天的開關機時間段并非完全一致時,就會出現誤動作。現象找到了,分析其原因,實際PAC提供的時間獲取函數分為三個,分別為DAY_TIME()、SYSDAT_R()和SYSTIM_R(),DAY_TIME()函數的輸出為字符串型,不符合需要,并沒有采用。實際采用的是SYSDAT_R()和SYSTIM_R()兩個函數。這兩者都是屬于ISaGRAF中的功能塊(Function Block,F模塊),SYSDAT_R()函數用來獲取系統(tǒng)日期,返回值是四個整型數據,分別對應系統(tǒng)當前日期中的年、月、日和星期,SYSTIM_R()函數用來獲取系統(tǒng)時間,返回值是三個整型數據,分別對應系統(tǒng)當前時間中的小時、分鐘和秒鐘。這兩個函數獲取的七個整型數據結合在一起,就構成了軟件中需要用到的系統(tǒng)時間。兩個函數本身的運行并沒有問題,獲取數據過程正常,數據的獲取也是正確的。問題出現在將兩個函數獲取到的數據結合在一起時。由于ISaGRAF采用的是順序執(zhí)行模式,一個功能塊執(zhí)行完畢后才執(zhí)行下一個功能塊,在模塊本身的執(zhí)行以及這兩個模塊執(zhí)行之間,都是有時間的,雖然這個時間很短,但卻不可忽略。于是問題就出現在:于2012年1月1日23:59:59獲取時間,先執(zhí)行SYSDAT_R(),獲取系統(tǒng)日期,得到四個整型值,分別是2012(年)、1(月)、1(日)、7(星期),再執(zhí)行SYSTIM_R(),獲取系統(tǒng)時間,由于兩個函數執(zhí)行之間有一個間隔時間,SYSTIM_R()函數本身的執(zhí)行也需要時間,經過這么一個很短的時間后,系統(tǒng)時間有可能剛好已經過了0點,此時的系統(tǒng)時間是2011年1月2日0:0:0,通過SYSTIM_R()函數獲取到的三個整型值是0(小時)、0(分鐘)、0(秒),和前面的SYSDAT_R()函數獲得的數據結合在一起,時間就是2011年1月1日0:0:0,這就得到一個錯誤的數據,與實際時間相差了整整24個小時,如果系統(tǒng)中設定兩天的開關機時間并不一致,就會由此產生錯誤的動作。這個錯誤的時間數據是一次性的,下一個循環(huán)讀取到的系統(tǒng)日期和時間就恢復為正確數據,因此系統(tǒng)又將發(fā)出正確的命令,反映到發(fā)射機上,就是發(fā)射機開啟然后立刻又關閉,或是關閉后又立刻開啟。抓到了故障現象,分析出了故障原因,故障排除就很容易了,最終排除故障的是以下代碼。
(*以下為解決0點問題*)if hour1=23 and minute1>=1 and minute1<=58 and weektemp <> week1 then weektemp := week1; end_if; if hour1=0 and minute1=0 and second1=0 then if weektemp=week1 then return; end_if; end_if; if hour1=23 and minute1=59 and second1=59 then if weektemp <>week1 then return; end_if; end_if;hour1、minute1、second1、week1和weektemp為幾個中間變量,分別對應時、分、秒、星期和星期。hour1、minute1、second1、week1為實時獲取到的可能有錯誤的值,weektemp用來進行校驗。在23:01至23:58期間對weektemp進行賦值并保證其正確,0:0:0時檢查weektemp和week1,發(fā)現week1仍無變化即認為此次獲取的數據有誤,將此次數據舍棄。同樣,在23:59:59時也可能存在錯誤,同樣用類似的方法解決。
本系統(tǒng)中所使用的下位機控制器是泓格PAC,其系統(tǒng)日期和時間用不同的函數分別讀取的方式,是出現“零點問題”的根源,屬于系統(tǒng)漏洞。如上所述這種系統(tǒng)漏洞對編程時序形成威脅,容易造成動作時序的錯亂。如果改成系統(tǒng)日期和時間合并讀取,由系統(tǒng)內部解決好日期和時間的同步問題,那么對使用系統(tǒng)的編程者會更友好。“零點問題”的存在已經告知相關廠家,并引起了高度重視。
下位機子系統(tǒng)作為自動化實時監(jiān)測控制系統(tǒng)的一個重要組成部分,為實現國家廣電總局“高質量,不間斷,既經濟,又安全”十二字總方針提供了可靠的條件,使發(fā)射臺對發(fā)射機的集中控制成為現實。該系統(tǒng)在廈門廣播電視集團發(fā)射中心201臺運行以來,性能穩(wěn)定,可靠,操作方便,易于維護,很好地完成各項設計的功能。解決“零點問題”以后,從未發(fā)生過因自動化系統(tǒng)的誤動作,影響播出或危及播出的情況。
[1]張丕灶. 數字式調幅中波發(fā)射機,2002(9).
[2]浙江省淳安無線電廠. GZ-1/3KW全固態(tài)中波廣播發(fā)射機技術說明書,2003(1).
[3]泓格科技股份有限公司.ISaGRAF槑進階簡體中文使用手冊手冊,2003 (4).
(廈門廣播電視集團,福建廈門361004)