概述
為了在有可能出現錯誤的傳輸媒介上實現可靠的數據傳輸,必須使用自動錯誤識別和更正程式。為了實現錯誤識別,單個數據包必須帶有附加的信息。這樣,在出現錯誤的情況下,至少從一定程度上修複數據包正確的內容。傳送者在要傳送的數據包上計算出一個校驗和,並把它附加到數據包上。
當數據包到達接收者處時,接收者使用相同的程式在接收到的數據包上(無需附上校驗和)生成校驗和,並將算出的數值與傳送者在數據包上附加的校驗相比較。如果兩個數字相吻合,那么數據包就很可能被正確地傳送了。如果不相符,那么就是在傳輸過程中發生了變化。接收者會要求傳送者再次傳送該數據包,但必須再次傳送的不是全部信息,而只是出現錯誤的那部分數據包。
儘管數據傳輸變得越來越可靠,廣泛使用的無線通信技術(如無線區域網路),還是導致了傳輸錯誤的大幅增加,這些錯誤是由於噪音和干擾造成的。接收者常常無法根據收到的信號正確地修複數據包。
幸運的是,在無線通信過程中,如果出現錯誤,錯誤會成堆地以“簇”的形式出現。如果錯誤總是以單個比特的形式出現,那么在以恆定的錯誤率(比如0.01%)傳輸一個大小為1 000 000比特的數據包時,幾乎每個數據包都是錯誤的,都必須重新傳送。相反,如果錯誤以平均每100個錯誤為一簇的形式出現,那么100個數據包中就只有1~2個會受到錯誤波及。
傳輸錯誤的衡量單位是比特錯誤率,它是由錯誤傳輸的比特數與傳輸總比特數之間比計算出來的。識別和消除錯誤的方法,通常不能正確地識別所有的錯誤。錯誤識別程式的工作目的在於,將剩餘的錯誤儘可能降到最低限度。
為了更有效地處理錯誤,人們研發了兩種基本程式:在已經識別錯誤的情況下,使用錯誤識別碼和與此相連線的重複傳輸,以及自動更正錯誤的糾錯碼。為了能夠使用錯誤識別及更正的必要算法,傳送信息上有必要帶有冗餘信息。
為此,原始信息應攜帶附加編碼,這一編碼不擁有自己的信息值,而只是有助於錯誤識別和排除。通過這些附加的多餘信息,無效的編碼詞句可以被識別,這些無效編碼不符合原始編碼詞句,所以會指向傳輸中的錯誤。
通過使用糾錯碼,人們至少可以在錯誤不多時推斷出原始編碼詞句。與錯誤識別相比,錯誤更正則需要更高的花費。但在出現錯誤而又不能要求重新傳輸編碼詞句時,它就是非常必要的。
如果可以進行這樣的要求,那么使用錯誤識別編碼就足夠了,因為被錯誤識別的編碼詞句可以再一次被傳送。
程式調試的錯誤識別
語法錯誤較好識別,因為MATLAB會給出相應的錯誤信息,以方便用戶的檢查和定位。
一般來說,執行錯誤較難識別,因為發生執行錯誤時,系統就會結束M檔案的調用,這樣將關閉函式的工作空間,無法獲得需要的數據信息。MATLAB提供了以下幾種方法來獲取所需要的中間信息:
(1)將程式每一步執行的結果輸出到命令視窗,以檢查運行中間的結果,為實現這種效果,可以把程式中禁止輸出的“;”號去掉。
(2)使用keyboard函式中斷程式,此時程式處於調試狀態,命令視窗的提示符變為K>>,可以實現函式工作空間和命令視窗工作空間的互動,從而獲得所需要的信息。
(3)將函式頭注釋掉,這樣函式將會變為腳本檔案,所操作的對象也相應為命令視窗工作空間中的變數,也可以獲得所需要的信息。
(4)使用調試選單或調試函式。
錯誤識別手段
智慧型系統無法避免出現故障,因此必須採取措施避免這些故障錯誤造成重大損失。對於涉及安全性的系統,必須按照預定的安全性邏輯關係採取反應措施。對系統內錯誤的處理主要有兩個步驟:首先是通過相應的措施對錯誤進行識別,之後是對錯誤的處理。
錯誤識別的主要功能在於識別系統中超出允許範圍的誤差。對錯誤識別措施進行定義,首先要分析系統組件潛在錯誤的特性,以保證對錯誤的識別和安全性處理。系統中主要採用以下手段進行錯誤識別:
(1)比較參照值:設備的一些特性標準值在使用前被存儲在系統中,並將系統運行中測得的數值與之進行比較。
(2)對通訊連線中數據的傳送與確認進行監測。
(3)程式運行監測:例如利用監測單元(看門狗或者第2處理器)對微處理器中過程的執行進行可信度監測。
(4)利用冗餘配置:例如利用冗餘感測器進行監測,或者進行榮譽運算監測。
(5)通過物理關係進行信號可信度監測。
錯誤處理
所謂錯誤處理,就是當代碼運行時,如果發生錯誤,可以捕獲錯誤,並按照程式設計者事先設計的方法來處理。使用錯誤處理的好處是:代碼的執行不會中斷,如果設定適當,可以讓用戶感覺不到錯誤的存在。
錯誤處理的步驟:設定錯誤陷阱,編寫錯誤處理代碼。
設定錯誤陷阱
設定錯誤陷阱是在代碼中設定一個捕捉錯誤的轉移機制,一旦出現錯誤,便無條件轉移到指定位置執行。Access 2003提供了以下幾個語句來構造錯誤陷阱:
(1)On Error Go To語句
在遇到錯誤發生時,控制程式的處理。
語句的使用格式有如下幾種:
①On Error GoTo標號:在遇到錯誤發生時,控制程式轉移到指定的標號所指位置代碼執行,標號後的代碼一般為錯誤處理程式。一般來說,“On Error GoTo標號”語句放在過程的開始,錯誤處理程式代碼會在過程的最後。
②On Error Resume Next:在遇到錯誤發生時,系統會不考慮錯誤,繼續執行下一行語句。
③On Error GoTo 0:用於關閉錯誤處理。如果在程式代碼中沒有執行“On Error GoTo”語句捕捉錯誤,或使用“On Error GoTo0”語句關閉了錯誤處理,則當程式運行發生錯誤時,系統會提示一個對話框,顯示相應的出錯信息。
(2)Err對象
返回錯誤代碼。在程式運行發生錯誤後,Err對象的number屬性返回錯誤代碼。
(3)Error()函式
該函式返回出錯代碼所在的位置或根據錯誤代碼返回錯誤名稱。
(4)Error語句
該語句用於錯誤模擬。以檢查錯誤處理語句的正確性。在實際編程中,不能期待使用上述錯誤處理機制來維持程式的正常運行,要對程式的運行操作有預見,採用正確的處理方法,儘量避免運行錯誤的發生。
編寫錯誤處理代碼
錯誤處理代碼是由程式設計者編寫的,根據可預知的錯誤類型決定採取哪種措施。
例如利用InputBox函式輸入數據時,在InputBox對話框中,如果不輸入數據或直接單擊“取消”按鈕,會產生運行錯誤,顯示錯誤提示對話框。可以使用On Error ResumeNext語句忽略錯誤,也可以使用錯誤處理代碼提示用戶。
編寫代碼如下:
Private Sub Command0-Click()
On Error GoTo Errorline
Dim a As Integer
a=InputBox(”輸入數據”,”提示框”)
MsgBox a
End Sub