陳 川,鄧成中
(西華大學機械工程學院,四川 成都 610039)
·機電工程·
基于RS-485的智能消防炮遠程更新方法設計
陳 川,鄧成中*
(西華大學機械工程學院,四川 成都 610039)
為解決智能消防炮控制系統(tǒng)程序更新困難和維護繁瑣的問題,提出一種基于工業(yè)總線網(wǎng)絡接口RS-485的智能消防炮遠程更新方法。首先設計一套基于現(xiàn)有智能消防炮的總線網(wǎng)絡通信接口的微控制器起始駐留程序和消防炮控制主機軟件,然后通過專用的燒錄工具將起始駐留程序燒寫進微控制器,當需要更新應用程序時,只須利用網(wǎng)絡接口即可實現(xiàn)對其更新升級。應用測試結果表明,該方法效率高,成本低,危險性小。
智能消防炮;遠程更新; RS-485;起始駐留程序
目前,智能消防炮因能實現(xiàn)火災的自動報警、定位及滅火而被廣泛使用于各種消防場所[1]。軟件設計者在設計過程中存在著一定的設計缺陷是很常見的情況,因此軟件需要根據(jù)用戶使用的反饋信息不斷進行完善和升級。智能消防炮的安裝場所大多是大型展館等人員密集的地方或油庫、倉儲及垃圾堆放處等重點防火場所,并且有一些安裝現(xiàn)場易產生有毒氣體和煙霧。在這種情況下對于維護人員通過拆卸智能消防炮來完成軟件的更新和升級存在一定的危險和難度。
為使智能消防炮在已安裝并正常使用的情況下能方便地進行軟件更新,筆者設計了一種基于總線網(wǎng)絡接口RS-485的遠程程序更新系統(tǒng)。利用該系統(tǒng),維護人員不用對已安裝好的消防炮進行拆卸就能實現(xiàn)程序的升級與更新。其更新只需通過智能消防炮與控制主機間的通信接口便可實現(xiàn)。
消防炮控制主機通過總線通信網(wǎng)絡與多個智能消防炮系統(tǒng)進行通信,其組成框圖如圖1所示。消防炮控制主機一般采用“輪叫輪詢”的通信方式,即控制主機按一定順序分別與控制下位機通信,輪詢掃描實現(xiàn)總線網(wǎng)絡的管理。總線網(wǎng)絡接口方式有多種,本文采用RS-485串行總線網(wǎng)絡。 RS-485標準是一種基于單對平衡線的多點、雙向、半雙工通信鏈路,具有相當高的噪聲抑制、傳輸速率、傳輸距離和寬共模范圍而被廣泛應用于工控場合[2]。筆者提出的程序遠程更新系統(tǒng),就是利用現(xiàn)有的智能消防炮的串行RS-485總線網(wǎng)絡,在消防控制主機上對智能消防炮升級,無需在原來的控制系統(tǒng)中添加額外的硬件。
圖1 遠程更新系統(tǒng)硬件組成
筆者是在一種已經(jīng)研制成功的智能消防炮的基礎上設計的。該消防炮的微控制器采用的是STM32F103CBT6。該芯片的最大時鐘頻率可以達到72MHz,因其具有豐富的外設管理功能而被廣泛的使用。雖然STM32微控制器支持通過JTAG和ISP對其軟件的更新,但是需要將已安裝好的設備現(xiàn)場拆卸才能實現(xiàn),若采用ISP方式還需設置跳線,這增加了操作的難度和技術的復雜程度。本系統(tǒng)的遠程程序升級方案采用應用編程(in application programming, IAP)技術,通過串行總線網(wǎng)絡來實現(xiàn)對用戶應用程序的更新。要實現(xiàn)IAP功能,在硬件上最需要的是微控制器能支持對Flash的操作,STM32具有對自身Flash進行讀寫的功能[3-9];因此,在硬件上支持該更新方法。
遠程更新系統(tǒng)具體方案實現(xiàn)過程如下:在主存儲塊初始化位置,即在0x08000000處使用JTAG或ISP方式燒寫一段起始駐留程序,以后所有應用程序都通過這段代碼進行寫入和更新,其空間分配結構[3]如表1所示。圖2中用戶程序起始地址根據(jù)起始駐留程序的大小來確定。起始駐留程序并不是用戶真正需要的程序,因此起始駐留程序代碼應盡量的短而不限制用戶的代碼長度。如圖2所示,起始駐留程序代碼段和應用程序代碼之間可以相互跳轉,當起始代碼將應用程序燒寫進入并確定沒有錯誤后就調用跳轉函數(shù)跳轉到其中執(zhí)行。當需要更新應用程序時,不需要微控制器重啟后進入起始代碼段進行更新,只需要觸發(fā)一個跳轉函數(shù)跳轉到起始代碼即可。跳轉函數(shù)通過指針調用來實現(xiàn),其具體程序如下:
typedef void (*iap_fun)(void); //定義一個函數(shù)類型的參數(shù)
Iap_fun jumptoapp;
voidjump(u32app_addr)
{
jumptoapp=(iap_fun)*(vu32*)(app_addr+4); //用戶代碼區(qū)第2個字為程序開始地址(復位地址),若需要從用戶代碼區(qū)跳轉到起始駐留程序則調用駐留程序的地址即可
MSR_MSP(*(vu32*)app_addr); //初始化APP堆棧指針(用戶代碼區(qū)的第1個字用于存放棧頂?shù)刂?
jumptoapp();//跳轉到APP.
}
__asm void MSR_MSP(u32addr)
{
MSR MSP, r0
BX r14
}
跳轉函數(shù)的實質是將起始駐留程序和用戶應用程序的起始地址當做一個函數(shù)的指針,只需將起始駐留程序或用戶應用程序的首地址傳給以上函數(shù)就可以實現(xiàn)起始駐留程序和用戶應用程序之間的跳轉。
表1 STM32F103CB閃存模塊組織
圖2 方案中Flash空間分配結構圖
該系統(tǒng)的實現(xiàn)需要起始駐留程序和消防炮控制主機應用程序2部分。為實現(xiàn)不重啟微控制器進入起始代碼段需在應用程序中加入相應的觸發(fā)條件(如在用戶應用程序的RS-485通信中預留1個指令或預留1個引腳,當其為低電平時)來觸發(fā)CPU的PC指針指向起始駐留程序就可激活起始駐留程序。相應的,當程序更新完成后通過RS-485發(fā)送1個切換指令,STM32的PC指針指向用戶應用程序的起始地址就可執(zhí)行用戶應用程序。起始駐留程序在智能消防炮安裝之前固化到Flash初始空間,任何時候均不能更改或刪除,用戶應用程序可根據(jù)需要進行下載或升級。消防炮控制主機上的應用程序實現(xiàn)對智能消防炮程序的更新和下載。
3.1起始駐留程序的實現(xiàn)
因本系統(tǒng)是在Keil for ARM集成開發(fā)環(huán)境下使用,故需在Keil環(huán)境中配置Bootloader的起始地址和大小。起始駐留程序主要包括對RS-485芯片、定時器和Flash的驅動,在這些驅動之上建立協(xié)議來實現(xiàn)對應用程序代碼的接收、檢驗和燒寫。建立的協(xié)議主要為接收1幀數(shù)據(jù),接收完成后進行CRC校驗,若有錯誤則應答數(shù)據(jù)錯誤幀,檢驗無誤則應答數(shù)據(jù)正確幀并提取幀數(shù)據(jù)中的有效數(shù)據(jù)寫入指定的地址,當更新完成接收到跳轉指令時調用跳轉函數(shù)就跳轉到應用程序。起始駐留代碼程序的流程圖如圖3所示。設計的傳輸數(shù)據(jù)幀有3種,即數(shù)據(jù)幀、代碼長度幀和命令幀,其格式如圖4—6所示。
圖3 起始駐留程序流程圖
圖4 數(shù)據(jù)幀格式
圖5 代碼長度幀格式
圖6命令幀
在協(xié)議中沒有明顯的開始符和結束符,上位機通過幀發(fā)送之間的時間間隔將要發(fā)送的數(shù)據(jù)構造為帶有已知起始和結束標記的幀,起始駐留程序通過定時器來判斷幀的起始和結束。幀的傳輸模式狀態(tài)圖如圖7所示。
圖7 幀傳輸模式的狀態(tài)圖
因為要通過定時器來判斷幀起始和幀結束,所以需通過上位機設定的幀與幀之間的時間間隔來設置定時器產生中斷的時間,在中斷中判斷幀的起始和結束。
3.2消防控制主機的程序實現(xiàn)
消防控制主機的程序由Visual Studio2010下的C#開發(fā),其主要作用是將需要升級的應用程序文件打開,將應用程序數(shù)據(jù)組合成幀發(fā)送給智能消防炮并接收應答數(shù)據(jù),發(fā)送完成后若無錯誤信息則發(fā)送跳轉指令,智能消防炮設備接受到跳轉指令后從起始駐留程序跳轉到應用程序。其流程圖如圖8所示。
圖8 上位機流程圖
筆者設計的系統(tǒng)升級方法在銀川寶豐能源集團有限公司的消防炮系統(tǒng)中進行了實際的測試與驗證。該公司的消防系統(tǒng)使用了9臺PSKD40W電控智能消防炮、9個WST-QKX前端控制箱以及3個WST-PJK消防炮控制柜,9臺智能消防炮均安裝在室外15m高的炮塔上。
該公司以前的系統(tǒng)升級方法為系統(tǒng)維護人員將炮塔上的智能消防炮拆卸下來使用專用的程序下載器對其進行升級或系統(tǒng)維護人員爬上炮塔進行升級。該方法不但工作量大、耗時且系統(tǒng)維護人員工作危險。后來該公司對系統(tǒng)升級方案進行了一定改進:增加程序下載線的長度讓系統(tǒng)維護人員在地面對消防炮進行升級。該方法在一定程度上減少了工作量,降低了工作人員的危險,但是在使用過程中發(fā)現(xiàn)由于下載線阻抗過大導致程序下載不穩(wěn)、成功率較低,并且依然需要少量系統(tǒng)維護人員爬上炮塔對消防炮進行一定量的拆卸。
該公司采用筆者所設計的方法對消防系統(tǒng)進行升級,9臺PSKD40W電控智能消防炮的程序升級僅用了10min,程序下載穩(wěn)定,均1次成功,并且程序升級全程完全不需要系統(tǒng)維護人員爬上炮塔對消防炮進行拆卸,保障了系統(tǒng)維護人員的生命安全。
筆者設計的基于RS-485遠程更新系統(tǒng)已應用于成都威斯特消防機械有限公司的智能消防炮中,并且在銀川寶豐能源集團有限公司的消防炮系統(tǒng)中進行了實際的測試與驗證。該系統(tǒng)可有效解決智能消防炮系統(tǒng)升級過程中拆卸工作量大、系統(tǒng)維護人員工作危險等問題,降低了維護成本,保障了工作人員的人身安全。同時該系統(tǒng)也可用于具有其他串行總線網(wǎng)絡接口且微控制器能對Flash進行IAP編程的設備中,具有廣闊的應用前景。
[1]喻興隆,鄧成中.自動消防炮驅動系統(tǒng)的設計[J].消防科學與技術,2010,29(6):510-512.
[2]王祁.智能儀器設計基礎[M]. 北京:機械工業(yè)出版社,2009:147-148.
[3]PM0042.STM32F10xxx Flash programming[EB/OL].[2014-09-12]. http://www stm.com.
[4]陳志.基于IAP技術的ADuC702x固件升級方案[J].電子產品世界,2011,18(5):33-36.
[5]STMicroelectronics.STM32Reference annua1(RM0008)[EB/OL].[2014-09-12].http://www stm.com.
[6]黃智偉,王兵,朱衛(wèi)華.STM32F32位ARM微控制器應用設計與實踐[M].北京:北京航空航天大學出版社,2012:3-4.
[7]蒙博字.STM32自學筆記[M].北京:北京航空航天大學出版社,2012:395-399.
[8]蘇素芳,趙會東,王小科,等.C#學習手冊[M].北京:電子工業(yè)出版社,2011:19-20.
[9]宋艦艇,楊景常.單片機ISP/IAP技術在復印制版一體機中的應用[J].西華大學學報:自然科學版,2007,26(3):73-75.
(編校:饒莉)
TheDesignofRemoteUpdatedMethodBasedonRS-485fortheIntelligentFireCannon
CHEN Chuan,DENG Cheng-zhong*
(SchoolofMechanicalEnginneering,XihuaUniversity,Chengdu610039China)
In order to overcome the difficulties of updating intelligent fire cannon, an update-system for intelligent fire cannon is designed based on industrial bus network interface RS-485. We designed a set of resident program and monitor control software based on the existing bus network interface. The resident program was downloaded to the microcontorller and the controller program can be updated through the interface. The test results show that the method is of high efficiency, low cost and little risk.
intelligent fire cannon; remote update; RS-485;bootloader
2014-09-18
西華大學重點科研項目自動消防炮控制及遠程網(wǎng)絡系統(tǒng)(10202121)。
:鄧成中(1971—),男,副教授,碩士研究生導師,主要研究方向為微計算機、嵌入式系統(tǒng)、工業(yè)測控、遠程監(jiān)控、現(xiàn)場總線等。E-mail:dczhpl@yeah.net
TP271
:A
:1673-159X(2015)03-0026-04
10.3969/j.issn.1673-159X.2015.03.006
*