李聰
摘要:為了解決柱塞壓力計(jì)系統(tǒng)中井下壓力計(jì)長(zhǎng)期工作在氣井中,現(xiàn)場(chǎng)更新程序困難的問(wèn)題,柱塞壓力計(jì)系統(tǒng)增加了井下壓力計(jì)程序無(wú)線更新的功能。本文根據(jù)井下壓力計(jì)自身的硬件特點(diǎn),提出了一種簡(jiǎn)單實(shí)用的實(shí)現(xiàn)程序無(wú)線更新的方案。并對(duì)柱塞壓力計(jì)系統(tǒng)、井下壓力計(jì)無(wú)線通訊流程、程序更新流程做了詳細(xì)闡述。采用了CRC校驗(yàn)保證更新程序數(shù)據(jù)的準(zhǔn)確性。
關(guān)鍵詞:井下壓力計(jì);無(wú)線更新;CRC校驗(yàn)
1.引言
柱塞壓力計(jì)系統(tǒng)由地面控制儀、井下壓力計(jì)和上位機(jī)軟件組成,如圖1所示。地面控制儀通過(guò)無(wú)線通訊模塊與井下壓力計(jì)進(jìn)行無(wú)線通訊,通過(guò)GPRS網(wǎng)絡(luò)與上位機(jī)之間進(jìn)行遠(yuǎn)程通訊。由于有時(shí)需要對(duì)井下壓力計(jì)程序進(jìn)行修改完善,則需要對(duì)井下壓力計(jì)進(jìn)行程序更新,目前常用的程序更新方式是有線更新方式。通過(guò)AVR-USBASP程序下載器將上位機(jī)和井下壓力計(jì)的AVR單片機(jī)進(jìn)行有線連接,然后通過(guò)程序燒寫(xiě)軟件對(duì)AVR單片機(jī)進(jìn)行程序更新。
井下壓力計(jì)長(zhǎng)期工作在氣井中,若采用有線更新程序方式,需要人員到現(xiàn)場(chǎng)將井下壓力計(jì)從氣井中取出并拆開(kāi),取出電路板組件,進(jìn)行有線更新,這種方式需要耗費(fèi)大量的人力物力,且影響氣井的產(chǎn)出,給用戶造成損失。由于井下壓力計(jì)具有無(wú)線通訊功能,為井下壓力計(jì)添加程序無(wú)線更新的功能提供了保證。
2.無(wú)線更新的實(shí)現(xiàn)
2.1無(wú)線更新實(shí)現(xiàn)流程
AVR單片機(jī)內(nèi)部可編程Flash存儲(chǔ)區(qū)分為Application Flash Section(應(yīng)用程序區(qū))和Boot Loader Section(引導(dǎo)程序區(qū))[1]。編寫(xiě)兩個(gè)AVR程序,引導(dǎo)程序和應(yīng)用程序,在生產(chǎn)時(shí),用AVR-USBASP程序下載器分別寫(xiě)入引導(dǎo)程序和應(yīng)用程序。在使用過(guò)程中若需要對(duì)應(yīng)用程序進(jìn)行更新,則直接采用無(wú)線更新的方式。
引導(dǎo)程序?qū)崿F(xiàn)的功能為:?jiǎn)纹瑱C(jī)上電或復(fù)位后,若需要更新,則進(jìn)行程序更新,更新完畢后,通過(guò)跳轉(zhuǎn)指令跳轉(zhuǎn)到應(yīng)用程序區(qū)的起始位置運(yùn)行應(yīng)用程序;若不需要更新,則通過(guò)跳轉(zhuǎn)指令直接跳轉(zhuǎn)到應(yīng)用程序區(qū)的起始位置運(yùn)行應(yīng)用程序。應(yīng)用程序?qū)崿F(xiàn)的功能為:采集溫度壓力數(shù)據(jù)并存儲(chǔ),與計(jì)算機(jī)軟件進(jìn)行有線通訊,與地面控制儀進(jìn)行無(wú)線通訊,接收更新程序數(shù)據(jù)并存儲(chǔ),接收完更新數(shù)據(jù)后使能看門(mén)狗復(fù)位,進(jìn)入引導(dǎo)程序。
井下壓力計(jì)無(wú)線更新實(shí)現(xiàn)的程序流程圖如圖2所示。引導(dǎo)程序和應(yīng)用程序中均設(shè)置一個(gè)程序更新標(biāo)志Update_flag存儲(chǔ)于單片機(jī)內(nèi)部EEPROM存儲(chǔ)器(EEPROM存儲(chǔ)器具有掉電(或復(fù)位)后數(shù)據(jù)不丟失的特點(diǎn))中,在兩個(gè)程序中的存儲(chǔ)地址一致。工作流程為:儀器上電后,運(yùn)行引導(dǎo)程序,從EEPROM中讀出程序更新標(biāo)志Update_flag,若Update_flag為1則更新程序,若不為1,則執(zhí)行跳轉(zhuǎn)指令跳出引導(dǎo)程序,執(zhí)行應(yīng)用程序。當(dāng)井下壓力計(jì)接收到來(lái)自地面控制儀的更新程序后,進(jìn)行校驗(yàn)。確定接收完更新程序數(shù)據(jù)且更新數(shù)據(jù)準(zhǔn)確后,將程序更新標(biāo)志Update_flag置1,寫(xiě)入EEPROM,并啟動(dòng)看門(mén)狗定時(shí)器,看門(mén)狗定時(shí)器定時(shí)完畢后立即復(fù)位單片機(jī),重新運(yùn)行引導(dǎo)程序。程序更新標(biāo)志Update_flag為1,則對(duì)應(yīng)用程序區(qū)進(jìn)行更新,更新完成后,Update_flag置0并寫(xiě)入EEPROM。執(zhí)行跳轉(zhuǎn)指令跳轉(zhuǎn)到應(yīng)用程序區(qū)的起始位置執(zhí)行新的應(yīng)用程序。
2.2更新程序數(shù)據(jù)的存儲(chǔ)方案
本部分提出了更新程序數(shù)據(jù)的存儲(chǔ)方方案。根據(jù)井下壓力計(jì)自身具有外置獨(dú)立的Flash存儲(chǔ)器的特點(diǎn),先將接收到的更新數(shù)據(jù)存儲(chǔ)到Flash存儲(chǔ)器中,更新數(shù)據(jù)接收完成后,再進(jìn)行更新。需要注意的是,不能一邊接收更新數(shù)據(jù)一邊進(jìn)行更新,因?yàn)檫@樣會(huì)破壞原有應(yīng)用程序,導(dǎo)致井下壓力計(jì)和地面控制儀之間的通訊中斷,無(wú)法完成更新,導(dǎo)致程序混亂,使井下壓力計(jì)無(wú)法正常工作。工作流程為:井下壓力計(jì)接收到的更新程序數(shù)據(jù)通過(guò)SPI接口存儲(chǔ)到FLASH存儲(chǔ)器中,接收完成后,啟動(dòng)看門(mén)狗復(fù)位,進(jìn)入引導(dǎo)程序,引導(dǎo)程序通過(guò)SPI接口將更新數(shù)據(jù)從Flash存儲(chǔ)器中讀出來(lái),再寫(xiě)入單片機(jī)內(nèi)部可編程Flash存儲(chǔ)器的應(yīng)用程序區(qū),程序更新完成后,通過(guò)跳轉(zhuǎn)指令跳轉(zhuǎn)到應(yīng)用程序區(qū)的起始位置,開(kāi)始執(zhí)行新程序。在此過(guò)程中,更新數(shù)據(jù)流向如圖3所示。
2.3更新數(shù)據(jù)正確性的保證
為了確保更新程序數(shù)據(jù)在傳輸過(guò)程中沒(méi)有發(fā)生改變,使用CRC校驗(yàn)算法來(lái)驗(yàn)證地面控制儀發(fā)送的更新程序數(shù)據(jù)與井下壓力計(jì)接收到的更新程序數(shù)據(jù)的一致性。
CRC校驗(yàn)是一種數(shù)據(jù)傳輸檢錯(cuò)功能,讀數(shù)據(jù)進(jìn)行多項(xiàng)式計(jì)算,并將得到的計(jì)算結(jié)果附在每幀數(shù)據(jù)的后面,接收設(shè)備也執(zhí)行類似的算法,以保證數(shù)據(jù)傳輸?shù)恼_性和完整性[2]。相比常用的累加和校驗(yàn),CRC大大降低了校驗(yàn)出錯(cuò)的概率,提高了更新成功的幾率。
結(jié)語(yǔ)
通過(guò)多次更新測(cè)試表明,此方案可以成功的實(shí)現(xiàn)應(yīng)用程序的更新。根據(jù)對(duì)多次更新所耗時(shí)間的統(tǒng)計(jì),井下壓力計(jì)從程序開(kāi)始更新到程序更新結(jié)束,所耗時(shí)在5秒鐘左右,更新速度滿足實(shí)際需求。經(jīng)驗(yàn)證,運(yùn)用此方案能穩(wěn)定可靠的實(shí)現(xiàn)程序更新,滿足使用需求。
參考文獻(xiàn)
[1]《加密與解密(第二版)》[M].鍛鋼.北京:電子工業(yè)出版社,2004.5
(作者單位:貴州航天凱山石油儀器有限公司)