新聞中心

EEPW首頁 > EDA/PCB > 設(shè)計應(yīng)用 > 如何提高自動抄表系統(tǒng)上位機(jī)軟件可靠性解析方案

如何提高自動抄表系統(tǒng)上位機(jī)軟件可靠性解析方案

作者: 時間:2012-06-12 來源:網(wǎng)絡(luò) 收藏

本文針對結(jié)構(gòu),通過一系列方法來提高軟件的可靠性,從而協(xié)調(diào)和下位機(jī)(硬件)數(shù)據(jù)及命令的交互。采用Visual Basic 6.0編程工具,采用MSComm控件實現(xiàn)與通訊控制器的通訊。

本文引用地址:http://2s4d.com/article/190270.htm

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ū)分?jǐn)?shù)據(jù)區(qū)中的DLE與替換后出現(xiàn)的DL E;這就必須對數(shù)據(jù)DLE(10H)再進(jìn)行替換,以DEL+‘z’來替換DLE,此時所有情況的替換結(jié)束。這既能很容易識別出一幀數(shù)據(jù),又避免了因數(shù)據(jù)區(qū)中出現(xiàn)特殊字符而導(dǎo)致錯誤數(shù)據(jù)的出現(xiàn),再結(jié)合奇偶校驗,從而進(jìn)一步保證了傳輸數(shù)據(jù)的可靠性。

發(fā)送的數(shù)據(jù),要先替換后校驗;而對于下位機(jī)傳上來的數(shù)據(jù),要先校驗再反替換,這是為了保證上位機(jī)和下位機(jī)在通訊線路中都不出現(xiàn)特殊字符SOH、EOT和DLE而設(shè)計的規(guī)定。反替換流程相當(dāng)于替換流程的逆,在此就不再累述了。

2串口問題

因為本系統(tǒng)的上位機(jī)是通過RS232轉(zhuǎn)RS485與下位機(jī)進(jìn)行通訊的。所以,串口通訊的可靠性直接關(guān)系到整個系統(tǒng)的可靠性。而串口的使用借助于Visual Basic 6.0中的MSComm控件。MSComm控件是通過OnComm事件來觸發(fā)的,觸發(fā)的時機(jī)由CommEvent的屬性Rthreshold決定。當(dāng)設(shè)定Rthreshold=1時,即緩沖區(qū)每接受到1個字符就引發(fā)一次OnComm事件;當(dāng)設(shè)定Rthreshold=10時,即緩沖區(qū)每接收到10個字符就引發(fā)一次OnComm事件。因考慮到前面的替換問題,每一幀的長度是無法預(yù)測的,但根據(jù)通訊規(guī)程可以知道最短幀的長度。我們采用最少數(shù)據(jù)長度(沒有任何替換)作為Rthreshold的值。這雖然可以保證對上傳數(shù)據(jù)的及時響應(yīng)但無法保證獲得一個完整的幀。當(dā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整體抄表問題

的優(yōu)點在于它既可以對單一用戶又可以對所有用戶的水、電、氣三表進(jìn)行讀數(shù)而不需人工干預(yù)。單一抄表比較簡單;但在整體抄表過程中會出現(xiàn)因連續(xù)、快速的讀數(shù)導(dǎo)致硬件的采集速度與上位機(jī)的讀數(shù)速度不匹配,或因串口事件處理函數(shù)未結(jié)束而又有事件觸發(fā),或線路干擾等一系列問題,這些因素都會影響到整體抄表的穩(wěn)定性和正確率。由于整體讀數(shù)的復(fù)雜性,僅通過增加錯誤處理程序往往無法達(dá)到預(yù)期效果。對于本系統(tǒng),筆者通過不斷實踐發(fā)現(xiàn),在整體讀數(shù)程序中引入第二個延時和重復(fù)讀數(shù)功能可以大大提高整體讀數(shù)的正確率。

在發(fā)出讀數(shù)命令并正確讀到數(shù)據(jù)后,必須進(jìn)行短暫的延時,然后再讀下一戶,再延時,以此類推直到全部讀完。當(dāng)對一戶讀數(shù)出錯時,要重復(fù)對其讀數(shù)幾次,若正確再讀下一戶,否則先調(diào)錯誤處理函數(shù),再讀下一戶。注意:錯誤數(shù)據(jù)不能寫入數(shù)據(jù)庫,以防結(jié)算時產(chǎn)生問題。延時的引入盡管會對整體抄表的速度造成一定影響,但考慮到系統(tǒng)的整體性能,以損失一定速度來換取準(zhǔn)確性這在絕大多數(shù)中是可以接受的。在整體抄表過程中,“延時”具有關(guān)鍵的作用,它不但協(xié)調(diào)了軟件和硬件之間的問題,也協(xié)調(diào)了軟件自身的問題。

通過上述方法,使得整個系統(tǒng)從細(xì)節(jié)到整體上都加強了抄表系統(tǒng)的可靠性和對 大多數(shù)錯誤情況的避免和處理,從而保證了自動抄表系統(tǒng)高性能和高可靠性的要求,這種方 法在實際應(yīng)用中收到了良好的效果。



評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉