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