蒲 永
(茂縣天龍湖電力有限公司,四川成都 610091)
軟件抗干擾技術(shù)就是利用軟件運(yùn)行過程中對自己進(jìn)行自診斷以及和工控網(wǎng)絡(luò)中各機(jī)器間的相互監(jiān)視來監(jiān)督和判斷工控機(jī)是否出錯(cuò)或失效的一個(gè)方法。其為工控系統(tǒng)抗干擾的最后一道屏障。
硬件抗干擾抑制和消除了大部分的干擾,但完全依靠硬件電路來消除所有的干擾是不可能的。軟件抗干擾發(fā)展較晚,目前還沒有形成較完善的理論。但是,利用微機(jī)的記憶、快速計(jì)算和邏輯判斷功能,從軟件方面進(jìn)行干擾抑制和消除的研究已逐漸受到人們的重視。所謂軟件抗干擾,就是利用微機(jī)的高速運(yùn)算和處理功能,采取程序的手段來檢測、進(jìn)而排除電磁干擾等對微機(jī)控制系統(tǒng)的影響。軟件抗干擾的本質(zhì):在有干擾存在的情況下,利用編程技術(shù)抵消其影響。即當(dāng)干擾使微機(jī)控制系統(tǒng)出現(xiàn)一定的運(yùn)行性故障時(shí),能夠依靠系統(tǒng)內(nèi)駐的能力(程序)保持系統(tǒng)連續(xù)正確地執(zhí)行其程序和輸入輸出的功能。因此,軟件抗干擾過程實(shí)質(zhì)上是一個(gè)干擾容錯(cuò)過程,是容錯(cuò)技術(shù)在軟件設(shè)計(jì)中的具體體現(xiàn)。應(yīng)用軟件抗干擾的前提是干擾尚未引起硬件的破壞,RAM中程序和數(shù)據(jù)尚未丟失,否則軟件抗干擾無從談起。
軟件抗干擾具有許多優(yōu)點(diǎn),它可以根據(jù)信號和環(huán)境的不同,選用不同的抗干擾方法,而無須改變硬件結(jié)構(gòu),因而靈活多變,功能強(qiáng)大,可以解決硬件所不能解決的一些問題,同時(shí)有利于節(jié)省硬件開銷。但軟件抗干擾是被動(dòng)的,本質(zhì)在于“抗”,而不在于“拒”;此外,其抗持續(xù)強(qiáng)干擾的效果并不理想。硬件抗干擾在于“拒”,即把干擾“拒”于系統(tǒng)之外,使系統(tǒng)免受干擾的影響,以達(dá)到穩(wěn)定運(yùn)行的目的。但是,硬件抗干擾措施無論如何完善,徹底消除干擾是不可能的,只有采用硬件和軟件相結(jié)合的辦法,取長補(bǔ)短,才能取得最佳的抗干擾效果。
大壩閘門自動(dòng)化系統(tǒng)的干擾來源比較復(fù)雜,有來自設(shè)備內(nèi)部的,也有來自設(shè)備外部的。主要有下面幾類:
(1)供電系統(tǒng)干擾,其中電源噪聲是大壩閘門自動(dòng)化系統(tǒng)中最重要的干擾來源,并且危害最嚴(yán)重。
(2)靜電感應(yīng)和電磁感應(yīng)干擾,通過電磁波輻射竄入系統(tǒng)。
(3)信號通道干擾,通過與主機(jī)相連的輸入輸出通道進(jìn)入系統(tǒng)。
干擾進(jìn)入大壩閘門自動(dòng)化系統(tǒng),使得大壩閘門自動(dòng)化系統(tǒng)不能正常工作,導(dǎo)致控制失靈,可能造成重大的事故。其對系統(tǒng)軟件的影響主要表現(xiàn)在:
(1)降低數(shù)據(jù)采集的可靠性。干擾侵入大壩閘門自動(dòng)化系統(tǒng)的輸入通道并疊加在信號上,致使數(shù)據(jù)采集誤差加大。
(2)降低控制的靈敏性。輸出接口受到干擾,使得輸出信號混亂,導(dǎo)致控制輸出誤差加大,甚至失靈。
(3)數(shù)據(jù)出錯(cuò)。大壩閘門自動(dòng)化系統(tǒng)中,RAM是可讀寫的。但在干擾的侵害下,RAM中的數(shù)據(jù)可能被修改,從而造成數(shù)據(jù)出錯(cuò)。
(4)程序運(yùn)行失常。大壩閘門自動(dòng)化系統(tǒng)受強(qiáng)干擾后,程序計(jì)數(shù)器PC值可能被改變,將會(huì)破壞程序的正常運(yùn)行。
針對干擾對系統(tǒng)軟件的影響,筆者從抑制和消除數(shù)據(jù)采集誤差、控制失靈、數(shù)據(jù)出錯(cuò)、程序跑飛等四個(gè)方面給出常用的軟件抗干擾措施。
數(shù)據(jù)采集誤差的軟件抗干擾措施主要是數(shù)字濾波。數(shù)字濾波實(shí)質(zhì)上是一種程序?yàn)V波,即通過一定的計(jì)算程序,對采樣信號進(jìn)行平滑加工,以減少干擾在有用信號中的比重。數(shù)字濾波是模擬量采集中抗干擾的重要手段。數(shù)字濾波的方法很多,對于不同場合、不同性質(zhì)的采集量,選用合適的濾波方法可以得到理想的抗干擾效果。對于變化較快的信號,如電流、電壓等,為適應(yīng)快速自動(dòng)保護(hù)的要求,選用算術(shù)平均值濾波或加權(quán)平均濾波以減少程序運(yùn)行時(shí)間;對于壓力、轉(zhuǎn)速、振動(dòng)、位移等變化較慢的參數(shù),采用程序判斷濾波或慣性濾波;對于變化緩慢的溫度量則采用中值濾波;對于電能的計(jì)算,為提高精度而采用復(fù)合濾波。
(1)程序判斷濾波。
在對具體控制對象的實(shí)際情況進(jìn)行分析的基礎(chǔ)上,確定兩次采樣輸入信號之間可能出現(xiàn)的最大偏差量,若采樣偏差超過最大偏差,則表明該輸入信號是干擾信號,應(yīng)去掉,反之,該信號可用作本次采樣值送入存貯,以備調(diào)用。其過程用式(1)表示:
式中 yi為第i次采樣值;xi為第i次實(shí)際采樣值;xi-1為第 i-1次實(shí)際采樣值;△x為最大偏差。
當(dāng)∣xi-xi-1∣>△x時(shí),也可用下一次的采樣值xi+1再作判斷,其算法為:
(2)平均值濾波。
取n個(gè)采樣值,然后取其平均值,即:
(3)中值濾波。
中值濾波的算法為:
即對某一被測參數(shù)連續(xù)采樣n次(n為奇數(shù),一般n=3),從中選擇中間的采樣值作為濾波器的輸出。該方法對去掉脈動(dòng)性質(zhì)的干擾比較有效且計(jì)算簡單,占內(nèi)存少;但對快速變化的參數(shù)則不宜采用,因此可用于溫度、壓力等參數(shù)的測量。
控制失靈的軟件抗干擾措施主要是為了克服干擾對開關(guān)量讀入和動(dòng)作信號輸出的影響。常用的方法為:
(1)指令復(fù)執(zhí)。
指令復(fù)執(zhí)系指對于重要的指令,特別是輸入與輸出指令要重復(fù)執(zhí)行,以確保其正確。開關(guān)量的讀入必須兩次以上讀入一致才有效;若是按鍵類開關(guān),還應(yīng)加軟件除抖保護(hù),即加軟件延時(shí),延時(shí)值一般為20ms左右。動(dòng)作信號輸出時(shí),需將輸出回讀,以保證輸出信號的正確性。對于微機(jī)保護(hù)裝置,應(yīng)不斷重復(fù)該輸出命令,確保動(dòng)作無誤。只要有可能,重復(fù)周期應(yīng)盡可能短。這樣,當(dāng)外部設(shè)備接收到一個(gè)被干擾的錯(cuò)誤信息后還來不及做出有效的反應(yīng),一個(gè)正確的輸出又來到,即可及時(shí)防止錯(cuò)誤動(dòng)作的產(chǎn)生。
(2)多重動(dòng)作指令。
保護(hù)出口驅(qū)動(dòng)電路的控制不要由單條指令實(shí)現(xiàn),而要分成兩條或多條指令的組合來執(zhí)行,否則對該控制指令的任何干擾都有可能引起誤動(dòng)作。
(3)設(shè)置當(dāng)前輸出狀態(tài)寄存單元。
當(dāng)干擾侵入輸出通道造成輸出狀態(tài)破壞時(shí),系統(tǒng)可以及時(shí)查詢當(dāng)前輸出狀態(tài)寄存單元的輸出狀態(tài)信息,及時(shí)糾正錯(cuò)誤的輸出狀態(tài)。
數(shù)據(jù)出錯(cuò)的軟件抗干擾措施主要是針對RAM中的數(shù)據(jù)進(jìn)行保護(hù)。通常采用數(shù)據(jù)冗余技術(shù),將同樣的數(shù)據(jù)在不同的地方保存1~2個(gè)備份。當(dāng)使用RAM中的數(shù)據(jù)時(shí),把原數(shù)據(jù)與備份數(shù)據(jù)進(jìn)行比較,相同則認(rèn)為數(shù)據(jù)未被破壞,否則啟動(dòng)備份數(shù)據(jù)。值得注意的是:備份數(shù)據(jù)的存放地址應(yīng)與原數(shù)據(jù)保持一定的距離,以防止兩者同時(shí)被破壞。同時(shí),應(yīng)注意數(shù)據(jù)區(qū)不要靠近堆棧,以防止堆棧溢出破壞數(shù)據(jù)或讀寫數(shù)據(jù)破壞堆棧。
可見,RAM中數(shù)據(jù)的保護(hù)是以犧牲存儲(chǔ)空間和執(zhí)行速度為代價(jià)的。在實(shí)際應(yīng)用中,一般只對RAM中極少數(shù)重要的、不允許丟失的數(shù)據(jù)進(jìn)行保護(hù),而絕大部分臨時(shí)存放、隨時(shí)更新的數(shù)據(jù)既使遭到破壞,最多也只是造成系統(tǒng)短時(shí)間的波動(dòng)。
程序跑飛的軟件抗干擾措施主要有“軟件狗”、“指令冗余”和“軟件陷阱”,筆者逐一介紹如下。
(1)軟件狗。
軟件狗實(shí)際上是一個(gè)軟件監(jiān)視系統(tǒng),通常利用軟件定時(shí)器或硬件定時(shí)器的中斷,在中斷程序中查詢某個(gè)設(shè)定的標(biāo)志,若標(biāo)志不為零,則清零或減1后退出;若標(biāo)志為零,則執(zhí)行復(fù)位指令或轉(zhuǎn)向出錯(cuò)處理程序,在出錯(cuò)處理程序中完成各種善后工作,再使系統(tǒng)復(fù)位。在系統(tǒng)程序中根據(jù)要求的監(jiān)視時(shí)間的長短設(shè)置標(biāo)志,一旦程序未能在給定的時(shí)間內(nèi)重置標(biāo)志,就會(huì)導(dǎo)致系統(tǒng)復(fù)位。軟件狗對不帶硬件狗電路而有定時(shí)器中斷的微機(jī)系統(tǒng)特別有用,其缺點(diǎn)是額外占用了一個(gè)定時(shí)器。
(2)指令冗余。
指令冗余指在一些對程序流向起著決定作用的指令(如跳轉(zhuǎn)指令)及對系統(tǒng)工作狀態(tài)至關(guān)重要的指令(如中斷指令)前面,人為地插入幾條空操作指令,以保證跑飛的程序能重返正常軌道。指令冗余得以實(shí)現(xiàn)的前提是程序跑飛到程序區(qū)并執(zhí)行了空操作,否則指令冗余不起作用。應(yīng)當(dāng)注意的是:在一個(gè)程序中“指令冗余”不要使用過多,以免降低程序的執(zhí)行效率。
(3)軟件陷阱。
軟件陷阱是指在非用戶程序區(qū)(如未使用的E-PROM區(qū)、未使用的中斷向量區(qū)、數(shù)據(jù)表格區(qū)的周圍)填充空操作指令并周期性寫入一條指引指令,當(dāng)程序跑飛到這些區(qū)域時(shí),強(qiáng)行將程序引向一個(gè)指定的地址,在那里有一段專門對程序出錯(cuò)進(jìn)行處理的程序,以便引導(dǎo)程序進(jìn)入正常的運(yùn)行狀態(tài)。
[1]王樹勇.閘站自動(dòng)化典型問題的研究[M].南京:河海大學(xué)出版社,2011.
[2]區(qū)健昌.電子設(shè)備的電磁兼容性設(shè)計(jì)[M].北京:電子工業(yè)出版社,2008.