經(jīng)濟(jì)型數(shù)控系統(tǒng)的軟件抗干擾技術(shù)
點(diǎn)擊:1314
A+ A-
所屬頻道:新聞中心
0 引言
經(jīng)濟(jì)型數(shù)控系統(tǒng)通常追求高的性能/價(jià)格比,系統(tǒng)關(guān)鍵功能如插補(bǔ)功能的實(shí)現(xiàn)一般都是通過軟件來(lái)實(shí)現(xiàn)的。因此,在設(shè)計(jì)系統(tǒng)的時(shí)候,需要盡量降低硬件的成本。為了保證經(jīng)濟(jì)性,不可能選用太好的電源濾波器和開關(guān)電源,也不可能采用成本過高的硬件冗余技術(shù),CPU 芯片通常也只是選用商用級(jí)或民品級(jí)的8位單片機(jī)。但是,數(shù)控系統(tǒng)多數(shù)工作在環(huán)境惡劣、干擾嚴(yán)重的場(chǎng)合,竄入系統(tǒng)的干擾,其頻譜往往很寬,且具有隨機(jī)性。采用廉價(jià)的硬件抗干擾措施,只能抑制某些高頻段的干擾,而頻率較低的干擾信號(hào)仍會(huì)侵入系統(tǒng)。因此,除了采用硬件抗干擾設(shè)計(jì)以外,還要采取一定的軟件抗干擾技術(shù),做到“軟硬兼施”。使用軟件抗干擾技術(shù)的優(yōu)點(diǎn)在于,不需要增加硬件投資,使用靈活,修改方便。
1 軟件抗干擾常用方法
軟件抗干擾技術(shù)所研究的主要內(nèi)容,其一是采取軟件的方法抑制迭加在模擬輸入信號(hào)上的噪聲的影響,如數(shù)字濾波技術(shù);其二是由于干擾而使運(yùn)行程序發(fā)生混亂,導(dǎo)致程序“亂飛”或陷入“死循環(huán)”時(shí)所采取的使程序納入正軌的措施,如指令冗余、軟件陷阱、“看門狗”技術(shù)等。在經(jīng)濟(jì)型數(shù)控系統(tǒng)中,進(jìn)、出信號(hào)多為數(shù)字信號(hào),軟件抗干擾主要從以下幾方面來(lái)考慮:指令冗余、軟件陷阱、“看門狗”技術(shù)、輸入信號(hào)的重復(fù)檢測(cè)、輸出信號(hào)的刷新、CPU的睡眠抗干擾、關(guān)鍵數(shù)據(jù)的恢復(fù)以及用戶數(shù)據(jù)的保護(hù)等。
2 經(jīng)濟(jì)型數(shù)控系統(tǒng)的軟件抗干擾技術(shù)
2.1 指令冗余技術(shù)
MCS-51 的指令由操作碼和操作數(shù)組成。單字節(jié)指令僅有操作碼;雙字節(jié)指令第一個(gè)字節(jié)是操作碼,第二個(gè)字節(jié)是操作數(shù); 3字節(jié)指令第一個(gè)字節(jié)為操作碼,后兩個(gè)字節(jié)為操作數(shù)。CPU 取指時(shí),先取操作碼,后取操作數(shù)。如何區(qū)別某個(gè)數(shù)據(jù)是操作碼還是操作數(shù),這完全由取指的順序來(lái)決定。CPU 復(fù)位后,首先取出指令的操作碼,然后取出操作數(shù)。當(dāng)一條指令執(zhí)行完畢,緊接著又去取下一條指令的操作碼與操作數(shù)。這些操作的時(shí)序完全由程序計(jì)數(shù)器PC 來(lái)控制。因此,一旦PC 因干擾而出現(xiàn)錯(cuò)誤,程序便脫離正常的運(yùn)行軌道,出現(xiàn)“亂飛”的現(xiàn)象,導(dǎo)致操作數(shù)的數(shù)值改變或者將操作數(shù)當(dāng)成操作碼的錯(cuò)誤產(chǎn)生。當(dāng)程序“亂飛”到某個(gè)單字節(jié)指令上時(shí),可以自動(dòng)納入正軌;當(dāng)“亂飛”到某雙字節(jié)指令上時(shí),若恰恰在取指令的時(shí)刻落在操作數(shù)上,就會(huì)將該操作數(shù)當(dāng)成操作碼,程序?qū)⒊鲥e(cuò);當(dāng)程序“亂飛”到某個(gè)3 字節(jié)指令上時(shí),因?yàn)橛袃蓚€(gè)操作數(shù),誤將操作數(shù)當(dāng)成操作碼的幾率將會(huì)更大。用單字節(jié)指令,并在關(guān)鍵地方人為地插入一些單字節(jié)指令NOP,或?qū)⒂行У膯巫止?jié)指令重復(fù)寫幾次。這種方式稱之為指令冗余。可在雙字節(jié)指令和3 字節(jié)指令之后插入兩個(gè)NOP,這可保證其后的指令不被拆散。因?yàn)?amp;ldquo;亂飛”的程序即使落到操作數(shù)上,由于NOP 的存在,不會(huì)將其后的指令當(dāng)成操作數(shù)來(lái)執(zhí)行,從而使程序納入正軌。對(duì)程序流向起決定作用的指令(如RET、RETI、ACALL、LCALL、LJMP、JZ、JNZ、JC、JNC、DJNZ 等)和某些對(duì)系統(tǒng)工作狀態(tài)起重要作用的指令(如SETB EA 等),可在之前插入兩個(gè)NOP,以保證“亂飛”的程序迅速落入正軌;對(duì)于某些子程序必要時(shí)可以連續(xù)多次重復(fù)調(diào)用,某些狀態(tài)的查詢也可多次進(jìn)行。
采用冗余技術(shù)使PC 納入正軌的條件是:跑飛的PC必須指向程序運(yùn)行區(qū),并且有可能執(zhí)行到冗余指令。
2.2 軟件陷阱技術(shù)
當(dāng)“亂飛”的程序進(jìn)入非程序區(qū)(如EPROM 未使用的空間)或表格區(qū)時(shí),采用冗余指令使程序入軌的條件不滿足,此時(shí)可以設(shè)定軟件陷阱,攔截“亂飛”的程序,用引導(dǎo)指令強(qiáng)行將捕獲到的“亂飛”程序引向復(fù)位入口地址0000H,并在此處對(duì)出錯(cuò)進(jìn)行處理,使程序納入正軌。軟件陷阱可采用兩種形式。
形式之一的機(jī)器碼為:00 00 02 00 00
形式之二的機(jī)器碼為:02 02 02 02 00 00
根據(jù)“亂飛”程序落入陷阱區(qū)的位置不同,可選擇表1 中的一種方式,使程序納入正軌,指定運(yùn)行到預(yù)定位置。軟件陷阱通常安排在未使用的中斷區(qū)、未使用的EPROM 區(qū)、非EPROM 區(qū)、運(yùn)行程序區(qū)以及中斷服務(wù)程序區(qū)等。
2.3 “看門狗”技術(shù)
PC 受到干擾而失控,引起程序“亂飛”,也可能使程序陷入“死循環(huán)”。指令冗余技術(shù)、軟件陷阱技術(shù)都不能使失控的程序擺脫“死循環(huán)”的困境,本系統(tǒng)采用程序監(jiān)視技術(shù),又稱“看門狗”(Watchdog)技術(shù),使程序脫離“死循環(huán)”。數(shù)控系統(tǒng)的應(yīng)用程序通常都采用循環(huán)運(yùn)行的方式,循環(huán)周期基本固定。“看門狗”技術(shù)就是不斷監(jiān)視程序循環(huán)運(yùn)行的時(shí)間,若發(fā)現(xiàn)時(shí)間超過已知的循環(huán)設(shè)定時(shí)間,則認(rèn)為系統(tǒng)陷入了“死循環(huán)”,然后強(qiáng)迫程序返回到0000H入口,在此處安排一段出錯(cuò)處理程序,使系統(tǒng)納入運(yùn)行正軌。本系統(tǒng)設(shè)置了一個(gè)16 位的監(jiān)視定時(shí)器,定時(shí)器啟動(dòng)后,每個(gè)機(jī)器周期自動(dòng)加1,當(dāng)計(jì)數(shù)器溢出時(shí),復(fù)位器MAX708 就把CPU 的RESET 引腳拉成高電平,從而使CPU 復(fù)位。需要注意的是,使用監(jiān)視定時(shí)器時(shí),系統(tǒng)軟件應(yīng)在每次定時(shí)器溢出前將定時(shí)器清0。因此,一旦程序因干擾不能順利運(yùn)行或死機(jī)時(shí),定時(shí)器將會(huì)很快產(chǎn)生溢出,從而使得CPU 立即復(fù)位,不至于造成事故的發(fā)生。
2.4 輸入信號(hào)的重復(fù)檢測(cè)技術(shù)
輸入信號(hào)的干擾是迭加在有效電平信號(hào)上的一系列離散的尖脈沖,這些脈沖信號(hào)的作用時(shí)間很短。當(dāng)數(shù)控系統(tǒng)面臨輸入干擾,又不能用硬件加以有效抑制時(shí),可以采用軟件重復(fù)檢測(cè)的方法,達(dá)到“去偽存真”的目的。車床數(shù)控系統(tǒng)在工作時(shí),需要接收一些外部的開關(guān)量輸入信號(hào):如縱、橫向拖板的限位信號(hào),自動(dòng)回轉(zhuǎn)刀架的刀位信號(hào)與換刀回答信號(hào),自動(dòng)卡盤的夾緊回答信號(hào),車床主軸的啟、停回答信號(hào),以及數(shù)控系統(tǒng)的緊急停止信號(hào)等。這些信號(hào)有效時(shí),均以低電平形式經(jīng)過光耦隔離后傳遞到CPU以及輸入接口芯片,有效電平均能保持200ms,甚至更長(zhǎng)。而干擾信號(hào)多呈毛刺狀,作用時(shí)間短。利用這一特點(diǎn),可多次重復(fù)采集某一輸入的開關(guān)量信號(hào),直到連續(xù)幾次采集結(jié)果完全一致時(shí)方為有效。若多次采集后,信號(hào)總是變化不定的,可停止采集,并給出報(bào)警信號(hào)。
本系統(tǒng)中,開關(guān)量輸入信號(hào)的數(shù)據(jù)采集流程。采集總次數(shù)為10,只有連續(xù)3 次采集數(shù)據(jù)相同,才認(rèn)為結(jié)果有效;延時(shí)時(shí)間可根據(jù)需要進(jìn)行設(shè)定,在兩次采集之間插入此延時(shí),能夠?qū)Ω遁^寬的干擾。
2.5 輸出信號(hào)的刷新技術(shù)
對(duì)于開關(guān)量的輸出,軟件抗干擾主要是采取輸出信號(hào)的刷新技術(shù),這是一種提高輸出接口抗干擾性能的有效措施。對(duì)于那些用鎖存器輸出的控制信號(hào),這些措施很有必要。在條件允許的情況下,重復(fù)輸出的周期盡可能短一些。當(dāng)輸出端口受到某種干擾而輸出錯(cuò)誤信號(hào)時(shí),外設(shè)還未來(lái)得及作出有效的反應(yīng),正確的信息又輸出了,這樣,就可以及時(shí)避免錯(cuò)誤動(dòng)作的發(fā)生。在執(zhí)行重復(fù)輸出功能時(shí),對(duì)于可編程接口芯片,工作方式控制字與輸出狀態(tài)字一并重復(fù)設(shè)置,使輸出模塊可靠地工作。
經(jīng)濟(jì)型車床控制系統(tǒng)的輸出均為數(shù)字信號(hào),如步進(jìn)電機(jī)的控制信號(hào)、電動(dòng)刀架的驅(qū)動(dòng)信號(hào)、主軸電機(jī)的啟停信號(hào)、冷卻泵的啟停信號(hào)、電動(dòng)卡盤的夾緊信號(hào)等。CPU 給出正確的數(shù)據(jù)輸出后,外部干擾有可能使輸出裝置得到錯(cuò)誤的數(shù)據(jù)。這種錯(cuò)誤的輸出結(jié)果,如果不采取得力措施加以補(bǔ)救,有可能造成不良后果。
?。?)重復(fù)輸出同一個(gè)數(shù)據(jù)設(shè)計(jì)軟件時(shí),可將I/O 芯片的輸出過程安排在系統(tǒng)的監(jiān)控循環(huán)中,監(jiān)控循環(huán)周期短,可以有效地防止輸出設(shè)備的誤動(dòng)作。但要注意,輸出功能是作為一個(gè)完整的模塊來(lái)執(zhí)行的(比如一個(gè)字節(jié))。采取這種方式設(shè)計(jì)軟件時(shí),必須為每個(gè)I/O 外部設(shè)備建立一個(gè)8 位的輸出暫存單元,輸出功能模塊將所有暫存區(qū)的數(shù)據(jù)一一輸出,不論這個(gè)數(shù)據(jù)是剛算好的還是原先算好的。
在對(duì)步進(jìn)電機(jī)進(jìn)行輸出控制時(shí),車床數(shù)控系統(tǒng)采用軟件算法來(lái)實(shí)現(xiàn)環(huán)形分配器的功能,計(jì)算機(jī)直接輸出步進(jìn)電機(jī)各相繞組的通電狀態(tài),經(jīng)過光電隔離后,傳送給功率放大器。編制軟件時(shí),采用重復(fù)輸出的方式,對(duì)于防止步進(jìn)電機(jī)的失步,具有一定的效果,在一個(gè)換相周期內(nèi)可以重復(fù)輸出2~3 次。
?。?)輸出芯片的重復(fù)初始化
在車床數(shù)控系統(tǒng)中,用8255芯片來(lái)擴(kuò)展輸出功能,外設(shè)通過8255 芯片來(lái)獲得單片機(jī)的控制信息,8255芯片在初始化時(shí)應(yīng)明確規(guī)定各端口的職能。為了保證輸出正確,輸出功能模塊每次在執(zhí)行具體的數(shù)據(jù)輸出之前,應(yīng)該先執(zhí)行8255的初始化命令,即,先對(duì)8255 寫入工作方式控制字,再輸出有關(guān)數(shù)據(jù)。
對(duì)于管理LED 顯示器的8279 芯片,也采用同樣的措施。每當(dāng)調(diào)用顯示子程序進(jìn)行顯示器的刷新時(shí),首先對(duì)8279 進(jìn)行一次初始化,重新設(shè)定其工作方式,然后再輸出新的顯示數(shù)據(jù)。
2.6 CPU的睡眠抗干擾技術(shù)
當(dāng)干擾作用到CPU 本身時(shí),CPU 不能按正常狀態(tài)執(zhí)行程序,將引起混亂。本系統(tǒng)選用AT89C52 芯片作為CPU,它通過執(zhí)行ORL PCON,#01 指令可以使得CPU 進(jìn)入睡眠狀態(tài)。此時(shí),只有定時(shí)/ 計(jì)數(shù)系統(tǒng)和中斷系統(tǒng)處于工作狀態(tài),CPU 對(duì)系統(tǒng)三總線上的干擾沒有反應(yīng),大大降低了系統(tǒng)對(duì)干擾的敏感性。
系統(tǒng)工作時(shí),需要用交流接觸器去驅(qū)動(dòng)主軸電機(jī)和電動(dòng)刀架電機(jī)。由于負(fù)載的工作電流大,啟動(dòng)電流更大,因此,在交流接觸器動(dòng)作的瞬間,將會(huì)產(chǎn)生很強(qiáng)的電磁干擾,并通過各種途徑傳到CPU,使計(jì)算機(jī)不能正常工作。盡管已經(jīng)把計(jì)算機(jī)跟外部的連接信號(hào)都加了光電隔離,在用示波器觀察計(jì)算機(jī)電源的地線和一些信號(hào)線時(shí),仍然發(fā)現(xiàn)有干擾信號(hào)疊加在上面,持續(xù)時(shí)間大約在20ms 左右。這些干擾信號(hào)常常造成控制系統(tǒng)失靈、機(jī)床拖板亂跑、刀架亂轉(zhuǎn)、用戶程序丟失或者系統(tǒng)死機(jī)等故障。為了解決這一問題,給交流接觸器的線圈兩端加了RC滅弧阻容,把計(jì)算機(jī)跟外部的連接線換成了屏蔽線,但是,在電動(dòng)刀架開始轉(zhuǎn)位或在主軸電機(jī)突然啟停時(shí),上述的干擾現(xiàn)象仍然出現(xiàn)。最后采用CPU 睡眠抗干擾法解決了此問題。
2.7 關(guān)鍵數(shù)據(jù)的恢復(fù)技術(shù)
車床控制系統(tǒng)需要接受用戶從操作面板鍵入的ISO 代碼,將其轉(zhuǎn)換成HEX 碼,并送到外部數(shù)據(jù)存貯器62256RAM 中存儲(chǔ)。每送完一個(gè)程序段,最后一個(gè)數(shù)據(jù)字節(jié)在62256 中的存貯地址(在此簡(jiǎn)稱STAD),就是一個(gè)關(guān)鍵數(shù)據(jù)。STAD 在系統(tǒng)掉電時(shí),需要進(jìn)行保護(hù),為此,必須將其也寫入62256RAM中,并在硬件上建立一個(gè)掉電保護(hù)電路,使得62256RAM 中的數(shù)據(jù)在系統(tǒng)掉電后不會(huì)丟失。掉電保護(hù)電路雖然比較可靠,但是系統(tǒng)在上電或掉電的瞬間,62256 中的數(shù)據(jù)仍然有可能遭到破壞,STAD就有可能被改寫,那么下次用戶再輸入程序時(shí),在62256 中存貯數(shù)據(jù)的起始地址就會(huì)改變,原有的程序就有可能被破壞。一旦被寫入的地址變成8255芯片的輸出口地址的時(shí)候,步進(jìn)電機(jī)的選通信號(hào)、驅(qū)動(dòng)電源的高壓開啟信號(hào),均有可能被置成有效,電動(dòng)刀架和主軸也有可能旋轉(zhuǎn),將有可能引發(fā)事故。因此,在系統(tǒng)上電初始化的時(shí)候,需要首先檢查一下STAD 有沒有遭到破壞,如果遭到破壞,應(yīng)在數(shù)據(jù)寫入62256 之前,將STAD 盡快恢復(fù)。為此,采取以下措施。
用戶每輸入完一個(gè)程序段,編輯軟件將程序數(shù)據(jù)最后一個(gè)字節(jié)在62256 中的存貯地址(是一個(gè)16位的地址,需要兩個(gè)字節(jié)存放),同時(shí)送到外部RAM的(00FAH)(00FBH)、(00FCH)(00FDH)以及(00FEH)(00FFH)三組單元中,即將關(guān)鍵數(shù)據(jù)STAD建立三重備份數(shù)據(jù)(數(shù)據(jù)副本)。系統(tǒng)每次上電進(jìn)行初始化時(shí),通過表決程序恢復(fù)STAD 的原值。若三對(duì)存放單元中,有兩對(duì)不一致,則表決失?。蝗羧龑?duì)存放單元中,有兩對(duì)相一致,則表決成功。將S T A D 的三重備份建立在片外R A M ,是因?yàn)槠釸 A M 只有MOVX 指令才能修改,相比之下,片內(nèi)RAM 中的數(shù)據(jù)可以被各種M O V 指令、算術(shù)指令、邏輯指令所修改,安全性差一些。
2.8 用戶數(shù)據(jù)區(qū)的保護(hù)技術(shù)
上面提到,用戶設(shè)定的參數(shù)以及編制的零件加工程序均要存貯在片外RAM62256 中,這些數(shù)據(jù)的寫入均由CPU 通過執(zhí)行指令“MOVX @DPTR,A”來(lái)實(shí)現(xiàn)。當(dāng)CPU 受到干擾而非法執(zhí)行該指令時(shí),就會(huì)改寫62256 中的數(shù)據(jù),導(dǎo)致用戶數(shù)據(jù)丟失。為了減小用戶RAM 中數(shù)據(jù)丟失的可能性,可在對(duì)62256進(jìn)行寫操作之前加入條件陷阱,不滿足條件時(shí),不允許寫入,并進(jìn)行報(bào)警。程序格式如下:
2.9 設(shè)計(jì)軟件的其他注意事項(xiàng)
提高數(shù)控系統(tǒng)的可靠性,除了采取上述軟件措施以外,還應(yīng)注意以下兩點(diǎn):①慎重使用堆棧。程序運(yùn)行中經(jīng)常與堆棧打交道,但堆棧操作因干擾而出錯(cuò)的幾率較大,堆棧操作的次數(shù)越多,出錯(cuò)的概率就越大。因此,在使用堆棧操作時(shí),級(jí)數(shù)不要使用太多,應(yīng)盡量減少子程序的個(gè)數(shù),特別注意不要使子程序嵌套太深。從抗干擾的角度考慮,堆棧區(qū)的設(shè)置應(yīng)遠(yuǎn)離程序區(qū)和數(shù)據(jù)區(qū),最好應(yīng)單獨(dú)設(shè)置,避免影響程序的其他部分。②數(shù)控系統(tǒng)在“自動(dòng)運(yùn)行”狀態(tài)下,CPU的外部中斷最好處于關(guān)閉狀態(tài)。至于急停和限位這兩個(gè)信號(hào),在不影響系統(tǒng)運(yùn)行速度的前提下,最好采用查詢的方式,不用中斷。這樣,系統(tǒng)在自動(dòng)運(yùn)行時(shí),關(guān)閉了所有中斷,大大降低了外部干擾信號(hào)對(duì)系統(tǒng)的侵?jǐn)_。而當(dāng)系統(tǒng)工作在“編輯”狀態(tài)或“參數(shù)設(shè)定”狀態(tài)時(shí),再將鍵盤中斷放開,用戶即可輸入數(shù)據(jù)。
3 結(jié)語(yǔ)
本文提出的幾種軟件抗干擾技術(shù),簡(jiǎn)單易行,不需要硬件投資,修改方便,通用性強(qiáng),可靠性高。在筆者研制的多種經(jīng)濟(jì)型數(shù)控系統(tǒng)上使用,抗干擾效果顯著。從單軸控制到4 軸聯(lián)動(dòng),多個(gè)品種的數(shù)控系統(tǒng),連續(xù)多次通過國(guó)家技術(shù)監(jiān)督局機(jī)床質(zhì)量監(jiān)督檢驗(yàn)中心的抗干擾測(cè)試。目前,3000余臺(tái)經(jīng)濟(jì)型數(shù)控系統(tǒng)投入工廠穩(wěn)定運(yùn)行已有十年之久。實(shí)踐證明,本文提出的軟件抗干擾技術(shù)具有一定的推廣應(yīng)用價(jià)值。
(審核編輯: 智匯胡妮)
分享