洪光
(大連冷星企業有限公司,遼寧 大連 116021)
提高工控應用軟件可靠性的探索—單片機及PLC應用軟件的設計實踐
洪光
(大連冷星企業有限公司,遼寧 大連 116021)
論文圍繞工控軟件可靠性設計、評判方法,提出了一套行之有效的可靠性設計方案。
單片機;PLC;可靠性
工控軟件開發平臺,經歷了機器碼語言、匯編語言、高級語言的發展過程,使編程越來越方便、功能越來越強——可以通過工控軟件完成較完善的設計方案。若在此基礎上,繼續對機器碼及其存儲方式、指令運行的時序進行研究;同時,在抗干擾硬件設計方面,改變關注功率容量的冗余較多,而對模塊的軟硬件時序配合關注不夠、對布線工藝的關注更是缺失的現狀,能夠顯著提高工控應用軟件的可靠性質量。
項目的成敗關鍵取決于可靠性。軟件設計的可靠性是建立在硬件設計可靠性之上的。討論工控軟件的可靠性是以硬件可靠性無大礙為前提的。
1.1工控軟件可靠性設計的概念
軟件的可靠性是設計出來的。工控軟件的可靠性,表現在運行中抗干擾的能力上。事實上,軟件的可靠性是依靠設計實現的。正確的工控軟件設計方法是:功能設計同可靠性設計同步,當滿意的設計方案確定后,才開始著手編碼設計。然后經過多次測試運行、修正編碼設計,直至達到可靠性要求。
1.2工控軟件可靠性設計的原則
(1)重視“電磁輻射”和“過渡過程”等高頻電子特性。通過軟件的智能,避開輻射和功率信號造成的電源浪涌和信號的抖動。
(2)重視軟件運行的“因果”時序關系。在PLC軟件系統中,各語句都掛在同一母線上,這種“多頭(條)”語句按順序執行,每一“頭(條)”語句按條件執行到“尾”的組合,比單片機一條思路追蹤“因果”關系要復雜。PLC應用軟件要十分注意語句的因果時序問題:不要認為程序是循環執行的,一條語句雖然第一次循環時因條件不具備不能執行到底,下一次循環時條件具備了,可以執行到底了,就是正確的。其實兩條語句因果倒置的錯誤邏輯,使程序存在失效的風險。
(3)十分關注“標志位”的“建立(置位)”和“解除(復位)”過程。軟件臭蟲(錯誤的漏洞)多發生在忽略了標志位的發生和解除的歷史過程。標志位必須是在可靠性設計階段就做出規劃——建立的條件和解除的時機,以及標志位的容錯方案。
(4)盡量用順序程序,少用中斷和子程序;成熟的軟件應盡量“模塊化”,必要時(多次使用時)才做子程序調用。減少中斷和子程序,可減少程序地址指針跑偏的可能。
可靠性定義——在“任務書”指定條件下使用時,軟件產品維持規定的性能級別的能力。在不同階段,可靠性的表達形式分為:①內部可靠性:在設計規劃和編碼組合層面上的可靠性度量。規范了軟件執行之前的可靠性規劃設計和評判原則,可以通過“分析”做出改進;②外部可靠性:通過測試、運行觀察可執行的軟件及系統。由軟件所在系統的行為(調試或試運行過程),測試或導出軟件的可靠性。這個環節提供可靠性設計執行效果,是進一步修改的依據;③使用可靠性:在“任務書”特定的使用周境下,滿足特定用戶達到特定目標所要求的有效性、生產率、安全性和滿意度的程度。
使用可靠性是內部可靠性和外部可靠性的最終結果,是“目標管理”系統的終極目標。
3.1機器碼程序設計方案
單片機(以8031為例)有單字節、雙字節、三字節指令。單字節指令直接包含了指令碼和操作數;雙字節、三字節指令的第一字節是指令碼,后面的字節是操作數。如果全部指令都是單字節,那么每一次讀取的指令都是唯一的。由于有其他形式的指令存在,程序地址指針讀取的既有指令碼,也有操作數。如果把操作數當做指令碼,后面程序按照這個“偽指令碼”的操作數執行,這個程序就亂了。所以單片機軟件的設計原則之一:盡量使用單字節指令,其次是使用雙字節指令,不得已才使用三字節指令。
由于最多有三字節指令,所以在每條語句后面設置兩條“空操作”語句。假如錯誤地將三字節指令的最后一字節操作數當成了指令碼,那么這個指令碼后面是兩字節的空操作的“操作數”(空操作的指令碼是00H),相當于是操作數=00H的立即數。如果程序地址指針將三字節指令的第二字節當做指令碼,最多也是三字節指令的指令碼。那么這個“偽指令碼”的第二個操作數=00H的立即數,下一個指針讀出的就是正確的指令碼了。
以上分析得出:一條指令發生錯誤時,執行了一個或兩個立即數=00H的操作后,就回到正常取址周期了——錯誤范圍比較小。在程序循環執行條件下,下一個循環周期就會改正把空操作指令當立即數執行的錯誤。
同時在中斷矢量入口、中斷程序入口、子程序入口、跳轉程序入口等處設置空操作指令,并在這些入口的上、下兩字節都設置空操作指令(共5個空操作指令),跳轉指令更容易進入指定入口。
以上應該是單片機軟件的規范模式。匯編語言及高級語言的編譯程序,如果能自動按此“語句孤島”方式存放機器碼,那么工控軟件的抗干擾能力會有及大地提高。
3.2數據冗余的容錯設計方案
將運算結果和標志位分別存放在不同的內存區域——數據冗余備份。在程序中不斷地對冗余數據進行表決判斷,恢復被改寫的數據——數據容錯。
該方案增加了許多同“功能性”不相關的“額外”程序段,但增加了軟件的可靠性。筆者在單片機和PLC程序中,都采用該方案(一個有效數據存放在在三個不同地址),所增加的“額外”工作量,被成熟的“三取二表決”等子程序緩解了。
3.3輸出口的容錯設計方案
在對輸出狀態位循環容錯維護條件下,對輸出口狀態的不斷刷新容(糾)錯。這個“循環刷新輸出口”的設計思想已經在PLC系統軟件中自動實現了。但在單片機系統中,還是需要提出注意的——切不可在輸出狀態變化后才刷新一次輸出口(比如中斷一次才有輸出口的變化,然后刷新),要把輸出口的刷新放在主程序循環中——容許一次干擾改變了輸出口狀態,重復刷新可糾正錯誤。輸出口包含數據和狀態顯示。
輸出口的容錯設計包括及時、準確地發現錯誤,做出必要的響應——對一切輸出指令都盡可能建立反饋通道。
3.4開關量輸入口的容錯設計方案
首先是“邏輯容錯”設計——針對誤操作的設計。軟件必須保證“邏輯性的錯誤”操作,包括干擾形成的“操作”不被執行。
開關量輸入的抖動(或連擊)也需要容錯處理。最有效的方案是“RS鎖存器”以及動作的“連續識別有效”處理。在硬件方面應避免設計使用功能相反的“復用鍵”,比如在停機狀態作為啟動鍵,在運行狀態作為停機鍵,避免狀態震蕩(雖然軟件可以設計最高開關頻率,但仍盡量不這樣設計“復用鍵”)。
3.5模擬量輸入信號的容錯設計方案
PLC的系統軟件已經對模擬量信號采集系統做了自動處理。模擬量采集口的綜合設計,是單片機系統開發的重(難)點。
3.6可靠性之易恢復性設計方案
易恢復性——在失效發生的情況下,軟件重建規定的性能級別,并恢復受直接影響的數據的能力。
可靠性有兩個屬性:一種是平均無故障運行時間,另一種是平均故障修復時間。在故障(失效)不可避免地發生后,迅速排除故障的能力,是軟件設計質量水平的重要指標。軟件中的各種容錯和自恢復(軟件陷阱、看門狗定時等)是不需人工干預的易恢復性措施。另有:故障定位提示、故障歷史記錄等軟件設計,也是“易恢復性”手段——必須盡可能多地提供運行狀態信息。
重點介紹數據容錯設計:單片機軟件采用上述的“指令孤島”方案。
(1)內部可靠性設計——在單片機軟件中設置“軟件陷阱”和“看門狗”。“陷阱”設置在“不可能到達”的地址,如果進入這些地址,程序進入初始化復位過程。必須十分重視在循環指令中插入“喂狗”動作。
為避免“有效數據”末尾頻繁抖動,對數據顯示和狀態的影響,設計數據采集以及數據標度變換在定時中斷中進行,必要時采用“中斷計數器”,延長采樣間隔。為便于數據維護和狀態刷新,在主程序循環內頻繁做模擬量顯示碼和模擬量決定的相關狀態位的刷新(容錯)處理。
確定出三個區域存放需維護的數據和標志位字節。比如:20、30、40地址分別存放同一個數據等等。確定出足夠的標志位字節,集中管理標志位。
確定模擬量數據的容錯方案:①在定時中斷中,一次性對一個模擬量口重復讀入8次(獲得8組數據)。對這8組數據做算術平均后,其結果送8級遞推隊列(先進先出,出隊列無效)。于是,隊列中的8組數據(每組是8次采樣的平均值),是64組數據的處理結果;②將8級隊列分上下各4級。對兩個4級隊列數據做去最大值和最小值處理,余下兩組數做平均值——8組數據共剔除了4組(2組最大值、2組最小值),只有4組數據分別產生兩個平均值。兩個4組數據產生的平均值,再做一次平均值——獲得一個有效的采樣數據;③對有效數據的處理也必須在本中斷完成——將處理結果送入不同區域的RAM位(同一數據或狀態分別存放在RAM中的3個不同的位置)后,才退出定時中斷;④在主循環程序中,僅是不斷地對存放在3個位置的數據做數據維護——隨時糾正可能的數據干擾。同時不斷地刷新同模擬量相關的顯示和狀態輸出口。
對每點2ms處理速度的PLC(OMRON CP1H)數據采集口,也做同樣處理,可靠性顯然增加許多。但對同一接口連續采樣8次的動作,可以省略。
以上模擬量采集口的可靠性設計非常完善,已被無數工程案例證實。
(2)外部可靠性調試——確定調試方案并實施:在調試運行狀態下制造干擾:手電鉆共電源及電磁、電焊機共電源及電磁、變頻器運行、接觸器動作火花、電源瞬間斷電、手持螺絲刀金屬柄撥動模擬量輸入口(模擬天線)等。另外在容錯內存中制造錯誤數據,看運行結果是否被糾正、制造“看門狗”和“軟件陷阱”程序運行條件,看糾錯效果。
采用以上抗干擾設計方案,并采用大容量(相對實際CPU供電需求的容量大一個數量級)工業級品牌開關電源(應對供電抖動),完全可以滿足以上測試。
(3)使用可靠性評估——現場試運行:雖然在調試階段已經通過了嚴格的抗干擾試驗,但作為新產品還是應該做現場可靠性運行評估——做好運行記錄,聽取用戶意見,發現問題解決問題。
通過工控軟件可靠性理念的研究探索,加上工作實踐的驗證,用這些方案設計的單片機或PLC軟件,在應用中從來沒出現過失誤。可見上述提高工控軟件可靠性的方案是成熟和行之有效的。
[1]復旦大學計算機科學系微機研究室.MCS-51單片微型計算機匯編手冊[M].上海嘉定智能儀表廠印,1988.
[2]復旦大學計算機科學系微機研究室.MCS-51單片微型計算機用戶手冊[M].上海嘉定智能儀表廠印,1988.
[3]國家質量監督檢驗檢疫局,中華人民共和國國家標準—軟件工程[M].2006.
[4]歐姆龍自動化(中國)有限公司,SYSMAC CP系列可編程控制器—編程手冊[M].2003.
[5]歐姆龍自動化(中國)有限公司,SYSMAC CP系列可編程控制器—操作手冊[M].2003.
[6]王海江,工業控制微機抗干擾技術措施的研究[J].中國化工設備,2005,1.
[7]鐘磊,盧文壯,等.C8051F單片機的IAP系統設計與實現[J].微處理機,2009,6.
Exploration of Improving the Reliability of the Industrial Control Application Software——Design Practice of the MCU and PLC Application Software
HONG Guang
(Dalian Coldstar Enterprise Co.,Ltd.,Dalian Liaoning 116021,China)
This paper put forward a set of the effective and reliable design scheme around reliable design and evaluation method of the industrial control software.
single chip microcomputer(MCU);programmable logic controller(PLC);reliability
TP317
A
10.3969/j.issn.1002-6673.2015.02.038
1002-6673(2015)02-099-03
2014-12-28
洪光(1955-),男,浙江人,中級職稱(工程師)。研究方向:電子、自控技術研發。