-
電話:0318-5934567
傳真:0318-5934567
手機:13373380069
聯系人:周經理
郵箱:[email protected]
網址:www.wenshai.cn
地址:河北省衡水市武邑縣東逍遙工業區
冀ICP備16003626號-3
金庫門安全記錄系統通信軟件設計
金庫門軟件設計主要包括PC機端和下位機端兩大部分。
3.1 下位機端程序設計
單片機程序采用C51 語言編寫,開/ 關鎖信號的采集用查詢方式,與PC 機的通信采用中斷方式。要保證通信的可靠性,通信指令的完整性與正確性判斷是一個比較關鍵的問題。一般來說,上位機傳送指令給下位機有兩種方式:(1)直接發送指令字符的方式(如AT 指令);(2)發送預先定義的指令代碼的方式,比如上述指令中getdata 定義為0x01h ,settime 定義為0x02h,gettime定義為0x03h,等等。但**2種方式在噪聲比較嚴重的情況下可能會發生異常:例如,PC機要傳送的指令是0x01h,但由于干擾的原因,下位機接收的可能是0x03h,這樣PC 機原來想得到安全記錄數據,但下位機卻發送了時間參數。
經綜合考慮后,金庫門系統采用了**1 種方式。 由于PC 機與下位機的通信是通過串行中斷方式進行的,PC 機傳送的指令也只能被下位機一個字符一個字符地接收,判斷所接收的字符何時構成一條指令以及指令正確性的判斷是至關重要的。一般的方法是當接收的字符數達到小指令長度時就開始與系統設置的短指令進行比較,如果相等,則執行相應的指令,如果不相等,則等到接收到的字符與次短指令的長度相等時,再與次短指令進行比較,如此循環下去。這種算法有兩個 不足。
(1) 容易造成多余的比較。以本系統為例,短的指令是reset 指令,長度是5,次短的指令是getall指令,長度是6,其余指令長度是7。當PC機傳送getdata 指令時,下位機先接收到‘g ’字符,接著接收到‘e ’字符,…,當接收到**一個‘a’后,達到了短指令長度5,于是比較接收到的字符串‘getda’與指令‘reset ’是否相等,結果是不等,于是繼續接收下一個字符‘t ’,然后比較接收到的字符串‘getdat’與指令‘getall’是否相等,結果還是不等,于是繼續接收下一個字符‘a ’,然后再比較接收到的字符串‘getdata ’與指令‘getdata ’是否相等。由此可見,該算法多進行了 2 次字符串比較。而是否到達了應進行比較的長度需要在中斷服務程序中進行判斷,如:
{ … if ( 接收字符長度=L1) 置位可以進行指令比較的標志; … else if (接收字符長度=L2) 置位可以進行指令比較的標志; … } 由于比較次數的不確定性,因此中斷服務程序執行時間是不確定的。 (2) 在雙方通信過程中,由于干擾信號的原因,因此要傳送的指令中某個字符會發生錯誤,而該算法是不能判斷出來的,很有可能造成系統死機。例如,當PC 機要傳送的指令是reset ,而下位機接收到的卻是resat ,由于‘reset ’與‘resat ’比較結果不相等,因此下位機等待新字符的到來,而PC 機認為指令已經發送完畢,不會再發送任何字符給它,這會造成下位機**限等待,產生死機現象。
為了避免出現上述問題,**先引入狀態的概念:給下位機設置一系列狀態,每接收一個字符就改變一次它所處的狀態;再在這個基礎上設計一個確定的有限自動機(DFA )[3] M=(S,∑, f, S0 ,Z),其中S 表示有限狀態集{0,1,2, …,13,15} ,∑是可接收字符的集合{a,b,c, …,z},f 是一個從S×∑至S 的單值映射(如:f(0,g)=1;f(0,a)=15;f(3,d)=5 ),S0 表示初態0,Z是終態(集)15。DFA 也可用狀態轉換圖書館(圖3)的形式來表示。系統初始化時將狀態設置為0,當接收到字母‘g’或‘r ’或‘s ’時,進入狀態1 ,接收到其他任何字符都進入終態15;當系統處于狀態 1 時,若接收到字母‘e ’,則進入狀態2,否則進入終態 15;其余類推。當系統進入終態 15后,可設置一終態標志,主程序判斷出該標志后,便可進行進一步的處理:若接收的字符的個數小于小指令長度,或者接收到的字符串與所有等長的指令比較后不相符,則發送“指令錯誤包”給PC 機;否則,執行相應的指令。這樣處理后,一方面可以識別出指令,另一方面也縮短了中斷服務程序的執行時間,為系統的實時性提供了條件。
4 結束語
該金庫門系統設計完成后,經過不斷修改和現場長期運行測試,并與Windows98、Wiondows2000 、Windows XP聯機測試,表明該系統性能滿足各項設計指標,且具有較高的可靠性,滿足實用化的需要。 參考文獻