版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、單片機(jī)測(cè)控系統(tǒng)軟件抗干擾技術(shù)研究摘要:軟件抗干擾措施是單片機(jī)測(cè)控系統(tǒng)硬件抗干擾措施的一個(gè)補(bǔ)充和延伸 ,具有簡(jiǎn)單、靈活、方便、耗費(fèi)硬件資源少及容易實(shí)現(xiàn)等特點(diǎn)。軟件抗干擾技術(shù)的使用會(huì)顯著提高系統(tǒng)的可靠性。本文著重討論了測(cè)控系統(tǒng)中的軟冗余技術(shù)、軟件陷阱技術(shù)以及“看門(mén)狗”數(shù)字濾波技術(shù),重點(diǎn)介紹了實(shí)時(shí)測(cè)控系統(tǒng)軟件運(yùn)行的自監(jiān)視法和互監(jiān)視法,并給出了軟件抗干擾的其他一般方法。1 緒論單片機(jī)測(cè)控系統(tǒng)設(shè)計(jì)中,對(duì)軟件有以下幾個(gè)方面的基本要求:(1) 可維護(hù)性:要求盡可能地采用模塊化設(shè)計(jì),程序流程清晰明了,最大限度地控制使用和調(diào)用嵌套次數(shù);(2) 可理解性:軟件源代碼應(yīng)注意加注提示內(nèi)容,一般應(yīng)不少于整個(gè)代碼行數(shù)的
2、60,使其易于理解和閱讀,便于修改和補(bǔ)充;(3) 實(shí)時(shí)性:隨著集合度和運(yùn)算速度的提高,實(shí)時(shí)性已經(jīng)成為測(cè)試系統(tǒng)對(duì)軟件的普遍要求,在工程應(yīng)用軟件設(shè)計(jì)中,采用匯編語(yǔ)言要比采用高級(jí)語(yǔ)言更具有實(shí)時(shí)性;(4) 準(zhǔn)確性:系統(tǒng)要求在進(jìn)行大量運(yùn)算時(shí),要選取合適的算法,以便控制最后結(jié)果的精度;(5) 可靠性:可靠性是測(cè)控軟件最重要的指標(biāo)之一,他要求兩方面的內(nèi)容:一方面是運(yùn)行參數(shù)環(huán)境發(fā)生變化時(shí)(如電壓在規(guī)定范圍內(nèi)出現(xiàn)較大波動(dòng) ),軟件都能可靠運(yùn)行并得出正確的結(jié)果,也就是軟件的自適應(yīng)性;另一方面是在工作環(huán)境惡劣,干擾環(huán)境復(fù)雜嚴(yán)重的情況下,軟件必須保證可靠運(yùn)行,這對(duì)測(cè)控軟件尤為重要。為了保證以上兩方面的要求,就必須使用
3、多種抗干擾技術(shù)。2 單片機(jī)軟件抗干擾技術(shù)及一般方法2.1簡(jiǎn)介軟件抗干擾技術(shù)是當(dāng)系統(tǒng)受干擾后,使系統(tǒng)恢復(fù)正常運(yùn)行或輸入信號(hào)受干擾后去偽存真的一種輔助方法。此技術(shù)屬于一種被動(dòng)抗干擾措施,但是由于軟件抗干擾設(shè)計(jì)靈活,節(jié)省硬件資源,操作起來(lái)方便易行,所以軟件抗干擾技術(shù)越來(lái)越受到人們的重視。軟件抗干擾技術(shù)主要研究的方面:(1) 采取軟件的方法對(duì)疊加在模擬輸入信號(hào)上的噪聲進(jìn)行抑制,以讀取真正有用的信息,如數(shù)字濾波器;(2) 在程序受到干擾 " 跑飛 "的情況下,采取措施使程序回到正常的軌道上來(lái),常見(jiàn)的抗干擾技術(shù)有:軟件攔截技術(shù)( 軟件陷阱等 );輸人口信號(hào)重復(fù)檢測(cè)方法;輸出口數(shù)據(jù)刷新;
4、數(shù)字濾波;(3)程序具有自檢功能。2.2 軟件攔截技術(shù)指令使用單片機(jī)中最容易受到干擾的是內(nèi)部程序計(jì)數(shù)器 -PC 的值,當(dāng)受到干擾時(shí), PC 值被改變, CPU 誤將程序從正確位置跳轉(zhuǎn)到無(wú)意義區(qū)域,導(dǎo)致程序運(yùn)行出錯(cuò)。目前常用的方法是在對(duì)程序走向有重要作用的指令(RET,LCALL , SJMP, JC,LJMP , ACALL等 )之前加人2 3 個(gè)單字節(jié)的 NOP 指令,當(dāng)失控的程序遇到該指令后得到調(diào)整,使接下來(lái)的程序得以正常執(zhí)行。從實(shí)際使用過(guò)程中總結(jié)可知,應(yīng)盡量多的使用 NOP 指令,而且發(fā)現(xiàn) NOP 指令成對(duì)使用時(shí),能起到比較滿意的抗干擾效果。軟件陷阱(1)未使用的中斷區(qū)對(duì)于未使用的中斷源
5、因干擾而開(kāi)放,從而直接影響軟件的正常工作的中斷源,采用的方法一般是在對(duì)應(yīng)的中斷服務(wù)地址入口處設(shè)置軟件陷阱,使其跳轉(zhuǎn)到程序入口,通常的軟件陷阱設(shè)置如下面的程序: 0RG 0003HLJMP 0000H ;主程序入口而在實(shí)際使用中,此種處理方法并不合適,特別是在系統(tǒng)聯(lián)試中,突然重新執(zhí)行程序的情況應(yīng)盡量避免。實(shí)際處理應(yīng)該是讓其進(jìn)入一個(gè)信息處理程序,并顯示相關(guān)信息。這樣做既可以使程序捕捉到錯(cuò)誤的中斷后,及時(shí)離開(kāi),又可以根據(jù)相關(guān)信息快速定位便于實(shí)驗(yàn)順利進(jìn)行。如程序所示,只有定時(shí)器 T0 中斷開(kāi)放,對(duì)于可能影響程序的中斷,如外部中斷、定時(shí)器T1 中斷,在其中斷地址人口,均加上了軟件陷阱,使其跳轉(zhuǎn)到 ER3
6、8 這個(gè)故障處理程序,從而避免程序的 "跑飛 ",也便于判斷程序的走向。(2)未使用的 EPROM 空間當(dāng)裝載軟件程序的存儲(chǔ)芯片為 27C64,其地址空間為 0000H 1FFFFH ,一般程序很少能夠用完,可填充 "FF" 。而 FFH 是 MOV R7,A 的機(jī)器碼,當(dāng)程序亂入非程序區(qū)后,不僅無(wú)法轉(zhuǎn)入正軌,而且還會(huì)破壞 R7 的內(nèi)容,因此在實(shí)際使用過(guò)程對(duì)未使用的 EPROM 空間應(yīng)全部填充為 "0" ,因?yàn)槌绦驈?fù)位入口地址為 0000H ,當(dāng) "跑飛 " 的程序指針跳至無(wú)程序處,可以讓其重新指向主程序入口,可以
7、起到防 " 跑飛 "的功能。(3)程序區(qū)為了保證可靠的運(yùn)行,以及一旦發(fā)生 " 跑飛 " ,不但使其有出口而且便于判斷,實(shí)際應(yīng)用中在整個(gè)程序中設(shè)置了若干軟件陷阱,當(dāng)程序進(jìn)入陷阱后,讓其強(qiáng)制進(jìn)入一個(gè)指定地址執(zhí)行一段專(zhuān)門(mén)對(duì)程序出錯(cuò)進(jìn)行處理的程序。通過(guò)實(shí)驗(yàn)驗(yàn)證和使用中的經(jīng)驗(yàn)總結(jié),在外場(chǎng)軟件編寫(xiě)中,軟件陷阱的設(shè)置,主要是在正常的程序流程中,在認(rèn)為較為重要的程序段中,隨機(jī)設(shè)置若干個(gè)故障信息顯示程序區(qū),一方面是完成正常的故障信息的顯示,另一方面就是在程序 " 跑飛 "的情況下,通過(guò)故障信息的顯示,可以快速判斷"跑飛 ',的程序段,
8、從而使程序步入正軌。程序流程如圖1 所示。輸入口信號(hào)重復(fù)檢測(cè)方法對(duì)于重要開(kāi)關(guān)量輸入信號(hào)的檢測(cè),實(shí)際應(yīng)用中一般采用3 次或 5次重復(fù)檢測(cè)的方法,即對(duì)接口中的輸人數(shù)據(jù)信息進(jìn)行重復(fù)進(jìn)行 3次或 5 次檢測(cè),若結(jié)果完全一致則認(rèn)為是" 真 "的輸入信號(hào),若多次測(cè)試結(jié)果不一致,即可以停止檢測(cè)顯示故障信息,又可以重復(fù)進(jìn)行再檢測(cè)。對(duì)于軟件測(cè)量而言,輸入量干擾大多數(shù)是疊加到有效信號(hào)上的一系列作用時(shí)間短的尖脈沖,但是頻率不一致,因此應(yīng)在相鄰的檢測(cè)之間應(yīng)有一定的時(shí)間間隔。理論上可以是等時(shí)間段的,而在實(shí)際使用過(guò)程中,由于外部環(huán)境比較復(fù)雜,等時(shí)間段只能濾除某個(gè)頻段的干擾,為了濾除盡可能多的干擾,間隔
9、時(shí)間應(yīng)為不等的時(shí)間段,但是對(duì)數(shù)據(jù)影響較大的尖峰,通過(guò)觀察其波形可知,其作用的時(shí)間寬度在幾十到幾百s之間,所以把濾波時(shí)間限定ms 級(jí)上。在經(jīng)過(guò)使用和驗(yàn)證,此方法可以有效地保證軟件可靠運(yùn)行。需要注意的是,對(duì)于軟件時(shí)序要求比較嚴(yán)格場(chǎng)合,延時(shí)查詢(xún)時(shí)間不宜過(guò)長(zhǎng),查詢(xún)次數(shù)一般以3 次為宜。輸出端口數(shù)據(jù)刷新開(kāi)關(guān)量輸出軟件抗干擾技術(shù)主要采用的方法是重復(fù)輸出,這是提高輸出端口穩(wěn)定性的有效措施之一。外場(chǎng)設(shè)備的微機(jī)系統(tǒng)為51 單片機(jī)系統(tǒng),采用了8155,8255 可編程I/O 擴(kuò)展芯片,理論上只在上電啟動(dòng)時(shí),進(jìn)行初始化一次即可。但是在實(shí)際使用中發(fā)現(xiàn),由于干擾等原因,可使芯片的工作控制字遭到破壞,從而使系統(tǒng)輸入輸出狀
10、態(tài)混亂的情況時(shí)有發(fā)生,因此,在讀取重要信號(hào)之前,先對(duì) 8155,8255 進(jìn)行初始化操作,通過(guò)一段時(shí)間軟件運(yùn)行,穩(wěn)定度大大提高,但是狀態(tài)混亂情況仍有發(fā)生,經(jīng)過(guò)分析數(shù)據(jù)特點(diǎn)和系統(tǒng)要求后,認(rèn)為 8155、 8255 允許多次設(shè)置狀態(tài)字、控制字等,而且對(duì)系統(tǒng)并無(wú)不良影響。因此,在實(shí)際應(yīng)用中,用到 8255 和 8155 之前均首先進(jìn)行初始化操作,然后再進(jìn)行狀態(tài)的讀取和寫(xiě)入。通過(guò)長(zhǎng)時(shí)間實(shí)驗(yàn)和聯(lián)試,不再出現(xiàn)此類(lèi)問(wèn)題,軟件運(yùn)行穩(wěn)定可靠。另外應(yīng)注意,在重復(fù)設(shè)置8255, 8155 芯片時(shí),一定要將其工作方式、控制字一起設(shè)置,方可確保軟件可靠工作。數(shù)字濾波為了克服干擾對(duì) A/D 轉(zhuǎn)換結(jié)果的影響,可根據(jù)情況采取
11、相應(yīng)的數(shù)字濾波技術(shù)。數(shù)字濾波的方法很多,如有中值濾波法、平均值濾波法等,經(jīng)過(guò)對(duì)不同濾波法的實(shí)際使用和實(shí)驗(yàn)驗(yàn)證,認(rèn)為采用防脈沖干擾平均值濾波法,抗干擾效果比較明顯。普通的平均值濾波,在干擾十分嚴(yán)重的場(chǎng)合,所得到的平均值中干擾的成分仍比較大,不易消除由于脈沖干擾而引起的誤差。而防脈沖干擾平均值濾波是在采集的N 個(gè)數(shù)據(jù)中,去掉數(shù)據(jù)中的最大值和最小值,然后計(jì)算N-2 個(gè)數(shù)據(jù)的算術(shù)平均值。在實(shí)際應(yīng)用中,此法主要是用在AD 值的檢測(cè)上,由于外場(chǎng)設(shè)備中AD采集值判定,直接影響此設(shè)備能否投入使用,所以對(duì)所采AD值的可靠性要求高,采用此濾波法后,通過(guò)仿真可以清楚看出,在某些特定的情況下, AD 采集值波動(dòng)較大,
12、但此法可以有效地避免了 CPU 對(duì)采集值的誤判,使軟件得以可靠運(yùn)行。此程序完成的主要功能是調(diào)用A/D 測(cè)量輸入子程序ACD將循環(huán)采集的6 個(gè) AD 值,放在70H 至 75H 的寄存器中, RO記錄采集次數(shù),70H 和 75H 分別放置最大值和最小值,去除最大值和最小值后,將其余4 個(gè)值求算術(shù)平均數(shù),以得到的值為最終AD 采集值放在68H 寄存器中。, 為程序自檢程序自檢是提高測(cè)控軟件可靠性的有效方法之一。在實(shí)際應(yīng)用中,自檢程序主要是對(duì)單片機(jī)系統(tǒng)的主要器件如 8031 的 I/O 口、外部擴(kuò)展的可編程 I/O 接 VI 芯片、 A/D 器件、 ROM 器件等進(jìn)行檢測(cè),如出現(xiàn)故障能夠給出故障部位
13、。因此自檢程序不但可以了解與測(cè)試相關(guān)外設(shè)的工作情況,而且可避免因外設(shè)原因而使測(cè)控系統(tǒng)不能正常工作的干擾。2.3 實(shí)時(shí)控制軟件運(yùn)行過(guò)程中的自監(jiān)視法基本概念自監(jiān)視法是工業(yè)控制計(jì)算機(jī)自己對(duì)自己的運(yùn)行狀態(tài)的監(jiān)視。一般的工控機(jī) CPU 內(nèi)部具有 Watchdog Timer ,使用定時(shí)中斷來(lái)監(jiān)視程序運(yùn)行狀態(tài)。定時(shí)器的定時(shí)時(shí)間稍大于主程序正常運(yùn)行一個(gè) 循環(huán)的時(shí)間,在主程序運(yùn)行過(guò)程中執(zhí)行一次定時(shí)器時(shí)間常數(shù)刷新操作。這樣,只要程序正常運(yùn)行,定時(shí)器不會(huì)出現(xiàn)定時(shí)中斷。而當(dāng)程序運(yùn)行失常,不能及時(shí)刷新定時(shí)器時(shí)間常數(shù)而導(dǎo)致定時(shí)中斷,利用定時(shí)中斷服務(wù)程序?qū)⑾到y(tǒng)復(fù)位。在8031 應(yīng)用系統(tǒng)中作為軟件抗干擾的一個(gè)事例,具體做法
14、是:* 使用 8155 的定時(shí)器所產(chǎn)生的 “溢出 ”信號(hào)作為 8031 的外部中斷源INT1。用555 定時(shí) 器作為8155中定時(shí)器的外部時(shí)鐘輸入;* 8155 定時(shí)器的定時(shí)值稍大于主程序的正常循環(huán)時(shí)間;* 在主程序中,每循環(huán)一次,對(duì)8155 定時(shí)器的定時(shí)常數(shù)進(jìn)行刷新;* 在主控程序開(kāi)始處,對(duì)硬件復(fù)位還是定時(shí)中斷產(chǎn)生的自動(dòng)恢復(fù)進(jìn)行分類(lèi)判斷處 理。然而,這并不等于萬(wàn)無(wú)一失。例如,Watchdog 電路本身失效;設(shè)置Watchdog 的指令正好在取指令時(shí)被干擾而讀錯(cuò); Watchdog “發(fā)現(xiàn) ”程序跑飛之后,其產(chǎn)生的復(fù)位脈沖或者NMI申請(qǐng)信號(hào)正好被干擾而沒(méi)奏效等等。雖然以上的導(dǎo)致Watchdog
15、數(shù)量的工業(yè)控制計(jì)算機(jī)沒(méi)有Watchdog 電路。因此,以下重點(diǎn)討論的軟件自監(jiān)視法就勢(shì)在必行了。隨時(shí)監(jiān)督程序計(jì)數(shù)器PC 值計(jì)算機(jī)正常運(yùn)行,其PC值一定在程序區(qū)內(nèi)。如果PC值跑出程序區(qū),計(jì)算機(jī)肯定已發(fā)生了程序跑飛。檢查程序計(jì)數(shù)器PC值是否在程序區(qū)內(nèi)的方法,是在一個(gè)經(jīng)常要產(chǎn)生外部中斷的某個(gè)中斷服務(wù)程序中,讀取轉(zhuǎn)入該中斷時(shí)壓入堆棧的斷點(diǎn)地址。如果該地址在程序區(qū)內(nèi),則認(rèn)為PC 值正常,否則一定是程序跑飛了。此時(shí),程序跳轉(zhuǎn)到機(jī)器的重啟動(dòng)入口或者復(fù)位入口,機(jī)器重新啟動(dòng)。于是機(jī)器又自救活了。如果沒(méi)有一個(gè)這樣合適的中斷源,可以專(zhuān)門(mén)設(shè)置一個(gè)定時(shí)中斷或者幾個(gè)定時(shí)中斷,在中斷服務(wù)程序中檢查 PC 值是否合法,一旦發(fā)現(xiàn)
16、不對(duì)就立即轉(zhuǎn)入機(jī)器的重啟動(dòng)入口。定時(shí)器中斷的時(shí)間常數(shù),可視機(jī)器的繁忙程度和重要性設(shè)定,一般從幾個(gè)毫秒到幾十毫秒都可以。這個(gè)方法的局限性是不能查出PC 值在程序區(qū)內(nèi)的亂跳,即此時(shí) PC 值雖受干擾卻并沒(méi)有超出程序區(qū),而是錯(cuò)位亂拼指令而構(gòu)成一些莫名其妙的操作,或者死循環(huán)。主循環(huán)程序和中斷服務(wù)程序相互監(jiān)視每個(gè)工控機(jī)的主循環(huán)程序和中斷服務(wù)程序都有一定的運(yùn)行規(guī)律可循。因此可以設(shè)計(jì)出主循環(huán)程序與各中斷服務(wù)程序、各中斷服務(wù)程序之間的相互監(jiān)視。每個(gè)監(jiān)視對(duì)要定義一個(gè)RAM單元,依靠對(duì)其計(jì)數(shù)/清零的方法表達(dá)相互監(jiān)視信息。例如,某工控機(jī)的主循環(huán)程序循環(huán)一次最長(zhǎng)時(shí)間為80 ms,它的一個(gè)定時(shí)中斷時(shí)間常數(shù)為 10 ms
17、,當(dāng)我們安排該定時(shí)中斷監(jiān)視主循環(huán)程序運(yùn)行時(shí),可以每次 10 ms 中斷對(duì)該 RAM 單元加計(jì)數(shù),而主循環(huán)程序每循環(huán)一次對(duì)該 RAM 單元清零。因此,正常運(yùn)行時(shí),這個(gè)監(jiān)視計(jì)數(shù) RAM 單元的計(jì)數(shù)值不可能 ,如果 10 ms 定時(shí)中斷服務(wù)程序發(fā)現(xiàn)其計(jì)數(shù)值 ,就知道主循環(huán)程序已經(jīng)被干擾跑飛或出現(xiàn)死循環(huán),于是就跳轉(zhuǎn)到機(jī)器的重啟動(dòng)入口,重新恢復(fù)運(yùn)行。使用這個(gè)方法,如果設(shè)計(jì)得當(dāng)?shù)脑?,是非常有效的。我們多年的?jīng)驗(yàn)是:主循環(huán)程序被干擾跑飛可能性最大,中斷服務(wù)程序越短小越不易跑飛。主循環(huán)程序和中斷服務(wù)程序以及中斷服務(wù)程序之間的相互監(jiān)視,應(yīng)當(dāng)多設(shè)計(jì)幾個(gè)監(jiān)視對(duì)會(huì)更好。隨時(shí)校驗(yàn)程序代碼的正確性工業(yè)控制計(jì)算機(jī)的實(shí)時(shí)控制
18、程序代碼通常都采用EPROM 固化運(yùn)行,一般不易發(fā)生被改寫(xiě)的情況。但成年累月運(yùn)行,我們有時(shí)也會(huì)發(fā)現(xiàn)極個(gè)別的單元出錯(cuò)。其原因可能是芯片質(zhì)量問(wèn)題或者因靜電、雷擊干擾等造成的改寫(xiě)。程序出錯(cuò)了,將直接造成運(yùn)行錯(cuò)誤或者無(wú)法運(yùn)行。校驗(yàn)的方式可以采用累加和校驗(yàn)或者 BCH 校驗(yàn)(一種 CRC 校驗(yàn)方法)。當(dāng)采用 BCH 校驗(yàn)時(shí),其分組附加的冗余字節(jié)可以集中在程序區(qū)之外的某個(gè) EPROM 區(qū)域里。校驗(yàn)方法是在某個(gè)短小而且經(jīng)常發(fā)生的中斷服務(wù)程序內(nèi)安排一個(gè)校驗(yàn)?zāi)K,可以設(shè)計(jì)成每次循環(huán)校驗(yàn)一部分程序代碼,分若干次校驗(yàn)完成;或者當(dāng)代碼少,任務(wù)輕松時(shí)也可以一次校驗(yàn)完。如果發(fā)現(xiàn)校驗(yàn)錯(cuò),應(yīng)當(dāng)立即向工控網(wǎng)絡(luò)主站報(bào)告或者以自身
19、報(bào)警的辦法告知操作人員,以便及時(shí)處理。這個(gè)方法的局限性是被損壞的程序代碼不是校驗(yàn)程序塊,而且以該中斷還可以正常響應(yīng)為前提。由于該中斷服務(wù)程序短小,通常還是有很大的概率自監(jiān)視程序代碼的正確性。隨時(shí)校驗(yàn) RAM 的正確性在實(shí)時(shí)控制過(guò)程中,干擾造成比較嚴(yán)重的危害之一就是沖毀 RAM 中的數(shù)據(jù),由于 RAM 中保存的是各種原始數(shù)據(jù)、標(biāo)志、變量等,如果被破壞,會(huì)造成系統(tǒng)出錯(cuò)或無(wú)法運(yùn)行,根據(jù)數(shù)據(jù)被沖毀的程度,一般可分為三類(lèi):* 整個(gè) RAM 數(shù)據(jù)被沖毀;* RAM 中某片數(shù)據(jù)被沖毀;* 個(gè)別數(shù)據(jù)被沖毀。因此需要經(jīng)常監(jiān)視 RAM 的正確性。在工業(yè)控制系統(tǒng)中, RAM 的大部分內(nèi)容是為了進(jìn)行分析、比較而臨時(shí)存
20、放的,不允許丟失的數(shù)據(jù)只占極少部分。在這種情況下,除了這些不允許丟失的數(shù)據(jù)外,其余大部分內(nèi)容允許短時(shí)間被破壞,最多只引起系統(tǒng)的一個(gè)很短時(shí)間的波動(dòng),很快能自動(dòng)恢復(fù)正常。因此,在工控軟件中,只要注意對(duì)少數(shù)不允許丟失的數(shù)據(jù)保護(hù),一般常用的方法有 “校驗(yàn)法 ”和 “設(shè)標(biāo)法 ”。這兩種方法各有千秋,校驗(yàn)法比較繁鎖,但查錯(cuò)的可信度高。設(shè)標(biāo)法簡(jiǎn)單,但對(duì)數(shù)據(jù)表中個(gè)別數(shù)據(jù)沖毀的情況,查錯(cuò)則無(wú)難為力。在編程中一般應(yīng)綜合使用,其具體做法為:* 將 RAM 工作區(qū)重要區(qū)域的始端和尾端各設(shè)置一個(gè)標(biāo)志碼 “ 0”或 “ 1;”* 對(duì) RAM 中固定不變的數(shù)據(jù)表格設(shè)置校驗(yàn)字。在程序的執(zhí)行過(guò)程中,每隔一定的時(shí)間通過(guò)事先設(shè)計(jì)的
21、查錯(cuò)程序來(lái)檢查其各標(biāo)志碼是否正常,如果不正常,則利用數(shù)據(jù)冗余技術(shù)通過(guò)抗干擾處理程序來(lái)進(jìn)行修正;冗余數(shù)據(jù)表的一般設(shè)計(jì)原則是:* 各數(shù)據(jù)表應(yīng)相互遠(yuǎn)離分散設(shè)置,減少冗余數(shù)據(jù)同時(shí)被沖毀的概率。* 數(shù)據(jù)表應(yīng)盡可能遠(yuǎn)離棧區(qū),減少由于操作錯(cuò)誤造堆棧被成數(shù)據(jù)沖的可能 。上述對(duì) RAM 區(qū)域的恢復(fù)處理方法,在不同的應(yīng)用系統(tǒng)中應(yīng)根據(jù)的具體情況進(jìn)行取舍3 實(shí)時(shí)控制系統(tǒng)的互監(jiān)視法在實(shí)時(shí)控制系統(tǒng)中,人們關(guān)注的問(wèn)題是能否確保正常的控制狀態(tài)。如果干擾進(jìn)入系統(tǒng),會(huì)影響各種控制條件、造成控制輸出失誤。為了確保系統(tǒng)安全可以采取下述軟件抗干擾措施:3.1.軟件冗余CPU 取指令過(guò)程是先取操作碼,再取操作數(shù)。當(dāng)PC 受干擾出現(xiàn)錯(cuò)誤,
22、程序便脫離正常軌道“亂飛”,當(dāng)亂飛到某雙字節(jié)指令,若取指令時(shí)刻落在操作數(shù)上,誤將操作數(shù)當(dāng)作操作碼,程序?qū)⒊鲥e(cuò)。若“飛”到了三字節(jié)指令,出錯(cuò)機(jī)率更大。在關(guān)鍵地方人為插入一些單字節(jié)指令,或?qū)⒂行巫止?jié)指令重寫(xiě)稱(chēng)為指令冗余。通常是在雙字節(jié)指令和三字節(jié)指令后插入兩個(gè)字節(jié)以上的 NOP。這樣即使亂飛程序飛到操作數(shù)上,由于空操作指令NOP的存在,避免了后面的指令被當(dāng)作操作數(shù)執(zhí)行,程序自動(dòng)納入此外,對(duì)系統(tǒng)流向起重要作用的指LCALL 、 LJMP 、 JC 等指令之前插入兩條正軌。令如RET、RETI 、NOP,也可將亂飛程序納入正軌,確保這些重要指令的執(zhí)行。對(duì)于條件控制系統(tǒng),將控制條件的一次采樣、處理控制
23、輸出,改為循環(huán)采樣、處理控制輸出。這種方法具有良好的抗偶然因素干擾作用。3.2.攔截技術(shù)所謂攔截,是指將亂飛的程序引向指定位置,再進(jìn)行出錯(cuò)處理。通常用軟件陷阱來(lái)攔截亂飛的程序。因此先要合理設(shè)計(jì)陷阱,其次要將陷阱安排在適當(dāng)?shù)奈恢?。軟件陷阱的設(shè)計(jì)當(dāng)亂飛程序進(jìn)入非程序區(qū),冗余指令便無(wú)法起作用。通過(guò)軟件陷阱,攔截亂飛程序,將其引向指定位置,再進(jìn)行出錯(cuò)處理。軟件陷阱是指用來(lái)將捕獲的亂飛程序引向復(fù)位入口地址 0000H 的指令。通常在 EPROM 中非程序區(qū)填入以下指令作為軟件陷阱:NOPNOPLJMP 0000H其機(jī)器碼為0000020000。陷阱的安排通常在程序中未使用的 EPROM 空間填 0000
24、020000。最后一條應(yīng)填入 020000,當(dāng)亂飛程序 落到此區(qū),即可自動(dòng)入軌。在用戶(hù)程序區(qū)各模塊之間的空余單元也可填入陷阱指令。當(dāng)使用的中斷因干擾而開(kāi)放時(shí),在對(duì)應(yīng)的中斷服務(wù)程序中設(shè)置軟件陷阱,能及時(shí)捕獲錯(cuò)誤的中斷。如某應(yīng)用系統(tǒng)雖未用到外部中斷 1,外部中斷 1的中斷服務(wù)程序可為如下形式:NOPNOPRETI返回指令可用“ RETI ”,也可用“LJMP 0000H ”。如果故障診斷程序與系統(tǒng)自恢復(fù)程序的設(shè)計(jì)可靠、 完善,用“LJMP 0000H ”作返回指令可直接進(jìn)入故障診斷程序,盡早地處理故障并恢復(fù)程序的運(yùn)行考慮到程序存貯器的容量,軟件陷阱一般1K空間有2-3。個(gè)就可以進(jìn)行有效攔截。4 其
25、它常采用的軟件抗干擾方法4.1 陷井法有時(shí)意想不到的干擾,破壞了中斷和所有程序的正常運(yùn)行。此時(shí)PC 值可能在程序區(qū)內(nèi),也可能在程序區(qū)之外,要使其能夠自恢復(fù)正常運(yùn)行,只有依賴(lài)于廣布“陷井 ”的絕招了。這里所謂的“陷井 ”,是指某些類(lèi)型的CPU 提供給用戶(hù)使用的軟中斷指令或者復(fù)位指令。例如,Z80 指令 RST 38H ,其機(jī)器碼為FFH 。CPU 執(zhí)行該指令時(shí),則將當(dāng)前程序計(jì)數(shù)器0038H 地址執(zhí)行程序。如果把PC 的值壓入堆棧,然后轉(zhuǎn)到0038H 作為一個(gè)重啟動(dòng)入口,則機(jī)器就可以恢復(fù)新的工作了。再例如,INTEL8098、80198系列的復(fù)位指令RST,機(jī)器碼也為FFH。 CPU 執(zhí)行該指令時(shí)
26、,其內(nèi)部進(jìn)行復(fù)位操作,然后從2080H 開(kāi)始執(zhí)行程序。當(dāng)然,80198有更多的非法操作碼可作為陷井指令使用,這時(shí)只需要在的一個(gè)字的中斷矢量單元里安排中斷入口,并且編制一個(gè)處理非系列還 2012H法操作碼的中斷服務(wù)程序,一遇非法操作碼就能進(jìn)行故障處理。作者多年的經(jīng)驗(yàn)表明,陷井不但需要在ROM 的全部非內(nèi)容區(qū)、RAM的全部非數(shù)據(jù)區(qū)設(shè)置,而且在程序區(qū)內(nèi)的模塊之間廣泛布置。一旦機(jī)器程序跑飛,總會(huì)碰上陷井,立即就可以救活機(jī)器了。4.2 重復(fù)功能設(shè)定法工控機(jī)的很多功能的設(shè)定,通常都是在主程序開(kāi)始時(shí)的初始化程序里設(shè)定的,以后再也不去設(shè)定了。這在正常情況下本無(wú)問(wèn)題。但偶然的干擾會(huì)改變 CPU 內(nèi)部的這些寄存器
27、或者接口芯片的功能寄存器,例如,把中斷的類(lèi)型、中斷的優(yōu)先級(jí)別、串行口、并行口的設(shè)定修改了,機(jī)器的運(yùn)行肯定會(huì)出錯(cuò),因此,只要重復(fù)設(shè)定功能操作不影響其當(dāng)前連續(xù)工作的性能,都應(yīng)當(dāng)納入主程序的循環(huán)圈里。每個(gè)循環(huán)就可以刷新一次設(shè)定,避免了偶然不測(cè)發(fā)生。對(duì)于那些重復(fù)設(shè)定功能操作會(huì)影響當(dāng)前連續(xù)工作性能的,要盡量想法找機(jī)會(huì)重新設(shè)定。例如串行口,如果接收完某幀信息或者發(fā)送完某幀信息之后,串口會(huì)有一個(gè)短暫的空閑時(shí),就應(yīng)作出判斷并且安排重新設(shè)定一次的操作。4.3 重要數(shù)據(jù)備份法工控機(jī)中的一些關(guān)鍵數(shù)據(jù),應(yīng)當(dāng)有至少有兩個(gè)以上的備份副本,當(dāng)操作這些數(shù)據(jù)時(shí),可以把主、副本進(jìn)行比較,如其改變,就要分析原因,采取預(yù)先設(shè)計(jì)好的方法處理。還可以把重要數(shù)據(jù)采用校驗(yàn)和或者分組BCH 校驗(yàn)的方法進(jìn)行校驗(yàn)。這兩種方法一并使用則更可靠。4.4 系統(tǒng) “死鎖 ”的軟件對(duì)策在工業(yè)控制系統(tǒng)中, A/D 、 D/A ,顯示等輸入 /輸出接口電路是必不可少的。這些接口 與 CPU 之間采用查詢(xún)或中斷方式工作,而這些設(shè)備或接口對(duì)干擾很敏感,干擾信號(hào)一 旦破壞了某一接口的狀態(tài)字后,就會(huì)導(dǎo)致 CPU 誤認(rèn)為該接口有輸入 /輸出請(qǐng)求而停止 現(xiàn)行工作,轉(zhuǎn)去執(zhí)行
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度企業(yè)內(nèi)部控制與風(fēng)險(xiǎn)管理合同
- 二零二五年度城市地下空間車(chē)位開(kāi)發(fā)建設(shè)合同4篇
- 二零二五年度廠房拆除與生態(tài)修復(fù)工程合同范本3篇
- 二零二五年度土地儲(chǔ)備及土地增值收益權(quán)轉(zhuǎn)讓合同4篇
- 二零二五年度電商代發(fā)貨及退換貨處理合同3篇
- 2025年度個(gè)人信用借款合同信用保險(xiǎn)合作框架3篇
- 二零二五年度綠植花卉租賃與植物墻設(shè)計(jì)合同3篇
- 二零二五年度馬鈴薯種植與農(nóng)業(yè)機(jī)械化服務(wù)合同4篇
- 專(zhuān)門(mén)擔(dān)保義務(wù)合同(2024版)版B版
- 食堂裝飾工程2025年度施工材料采購(gòu)合同2篇
- 二零二五年度無(wú)人駕駛車(chē)輛測(cè)試合同免責(zé)協(xié)議書(shū)
- 2025年湖北華中科技大學(xué)招聘實(shí)驗(yàn)技術(shù)人員52名歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 高三日語(yǔ)一輪復(fù)習(xí)助詞「と」的用法課件
- 毛渣采購(gòu)合同范例
- 2023中華護(hù)理學(xué)會(huì)團(tuán)體標(biāo)準(zhǔn)-注射相關(guān)感染預(yù)防與控制
- 五年級(jí)上冊(cè)小數(shù)遞等式計(jì)算200道及答案
- 2024年廣東高考政治真題考點(diǎn)分布匯 總- 高考政治一輪復(fù)習(xí)
- 燃?xì)夤艿滥甓葯z驗(yàn)報(bào)告
- GB/T 44052-2024液壓傳動(dòng)過(guò)濾器性能特性的標(biāo)識(shí)
- 國(guó)際市場(chǎng)營(yíng)銷(xiāo)環(huán)境案例分析
- 滑雪指導(dǎo)員理論考試復(fù)習(xí)題庫(kù)(含答案)
評(píng)論
0/150
提交評(píng)論