自動抄表系統(tǒng)中可靠性和糾錯能力
1幀格式的設(shè)計
要保證數(shù)據(jù)的正確性和可靠性,必須設(shè)計一種盡可能避免錯誤出現(xiàn)的幀格式,我們以01H作為幀起始碼(SOH),以04H作為幀結(jié)束碼(EOT)。在幀內(nèi)的數(shù)據(jù)中也有可能出現(xiàn)01H和04H,必須加以替換以區(qū)別幀頭和幀尾。文中以DLE+‘x’來代替SOH(01H),以DLE+‘y’來代替EOT(04H)。此時會出現(xiàn)一個問題,即如何區(qū)分數(shù)據(jù)區(qū)中的DLE與替換后出現(xiàn)的DL E;這就必須對數(shù)據(jù)DLE(10H)再進行替換,以DEL+‘z’來替換DLE,此時所有情況的替換結(jié)束。這既能很容易識別出一幀數(shù)據(jù),又避免了因數(shù)據(jù)區(qū)中出現(xiàn)特殊字符而導致錯誤數(shù)據(jù)的出現(xiàn),再結(jié)合奇偶校驗,從而進一步保證了傳輸數(shù)據(jù)的可靠性。
對上位機發(fā)送的數(shù)據(jù),要先替換后校驗;而對于下位機傳上來的數(shù)據(jù),要先校驗再反替換,這是為了保證上位機和下位機在通訊線路中都不出現(xiàn)特殊字符SOH、EOT和DLE而設(shè)計的規(guī)定。反替換流程相當于替換流程的逆,在此就不再累述了。
2串口問題
因為本系統(tǒng)的上位機是通過RS232轉(zhuǎn)RS485與下位機進行通訊的。所以,串口通訊的可靠性直接關(guān)系到整個系統(tǒng)的可靠性。而串口的使用借助于Visual Basic 6.0中的MSComm控件。MSComm控件是通過OnComm事件來觸發(fā)的,觸發(fā)的時機由CommEvent的屬性Rthreshold決定。當設(shè)定Rthreshold=1時,即緩沖區(qū)每接受到1個字符就引發(fā)一次OnComm事件;當設(shè)定Rthreshold=10時,即緩沖區(qū)每接收到10個字符就引發(fā)一次OnComm事件。因考慮到前面的替換問題,每一幀的長度是無法預測的,但根據(jù)通訊規(guī)程可以知道最短幀的長度。我們采用最少數(shù)據(jù)長度(沒有任何替換)作為Rthreshold的值。這雖然可以保證對上傳數(shù)據(jù)的及時響應(yīng)但無法保證獲得一個完整的幀。當使用此語句讀串口時若接收的數(shù)據(jù)沒經(jīng)過任何替換則可接收到完整一幀,否則數(shù)據(jù)幀不全。解決的方法是在讀串口前加延時以保證讀入數(shù)據(jù)完全,至于延時的處理不建議用循環(huán)語句來實現(xiàn),這將增加調(diào)試的難度,最好的方法是調(diào)用API函數(shù)Sleep:
Sleep()中時間以毫秒作為最小時間單位,a值的選取必須通過多次調(diào)試才能獲得最佳效果。另外,為了防止MSComm控件串行通訊問題,在發(fā)送讀串口命令時通過啟用定時器處理程序來捕獲串口通訊異常。這些方法可以最大程度的減少因通訊方面的問題而引發(fā)的錯誤。
3整體抄表問題
自動抄表系統(tǒng)的優(yōu)點在于它既可以對單一用戶又可以對所有用戶的水、電、氣三表進行讀數(shù)而不需人工干預。單一抄表比較簡單;但在整體抄表過程中會出現(xiàn)因連續(xù)、快速的讀數(shù)導致硬件的采集速度與上位機的讀數(shù)速度不匹配,或因串口事件處理函數(shù)未結(jié)束而又有事件觸發(fā),或線路干擾等一系列問題,這些因素都會影響到整體抄表的穩(wěn)定性和正確率。由于整體讀數(shù)的復雜性,僅通過增加錯誤處理程序往往無法達到預期效果。對于本系統(tǒng),筆者通過不斷實踐發(fā)現(xiàn),在整體讀數(shù)程序中引入第二個延時和重復讀數(shù)功能可以大大提高整體讀數(shù)的正確率。
在發(fā)出讀數(shù)命令并正確讀到數(shù)據(jù)后,必須進行短暫的延時,然后再讀下一戶,再延時,以此類推直到全部讀完。當對一戶讀數(shù)出錯時,要重復對其讀數(shù)幾次,若正確再讀下一戶,否則先調(diào)錯誤處理函數(shù),再讀下一戶。注意:錯誤數(shù)據(jù)不能寫入數(shù)據(jù)庫,以防結(jié)算時產(chǎn)生問題。延時的引入盡管會對整體抄表的速度造成一定影響,但考慮到系統(tǒng)的整體性能,以損失一定速度來換取準確性這在絕大多數(shù)自動抄表系統(tǒng)中是可以接受的。在整體抄表過程中,“延時”具有關(guān)鍵的作用,它不但協(xié)調(diào)了軟件和硬件之間的問題,也協(xié)調(diào)了軟件自身的問題。
通過上述方法,使得整個系統(tǒng)從細節(jié)到整體上都加強了抄表系統(tǒng)的可靠性和對 大多數(shù)錯誤情況的避免和處理,從而保證了自動抄表系統(tǒng)高性能和高可靠性的要求,這種方 法在實際應(yīng)用中收到了良好的效果。
評論