以單片機為控制處理器件的嵌入式系統(tǒng)設(shè)計,有時需要在實際應(yīng)用時不停的修正應(yīng)用程序,或是對產(chǎn)品功能不斷的升級,不能夠一下子把程序最終確定下來,雖然很多單片機都提供了IAP和ISP功能,在現(xiàn)場打開產(chǎn)品機箱外殼就能夠很方便地更新應(yīng)用程序。但對于組成網(wǎng)絡(luò)的各分布節(jié)點一一進行固件升級時會遇到相當大的麻煩;其次在某些工業(yè)應(yīng)用上,一些節(jié)點可能位于維護人員無法進入的場所。因此,研究一種在主節(jié)點上通過通信網(wǎng)絡(luò)更新各個從節(jié)點程序的在線升級技術(shù)顯得很有意義。
如圖1所示分布式數(shù)據(jù)采集系統(tǒng),控制處理器采用STC單片機設(shè)計。終端數(shù)據(jù)采集設(shè)備通過串口連接到RS-485通信網(wǎng)絡(luò),通信網(wǎng)再經(jīng)過RS485/232轉(zhuǎn)換器連接到遠端計算機進行集中監(jiān)控。通信采用工業(yè)制造環(huán)境通用協(xié)議MODBUS,此協(xié)議支持傳統(tǒng)的RS-232、RS-422、RS-485和以太網(wǎng)設(shè)備,許多工業(yè)設(shè)備,包括PLC,DCS,智能儀表等都在使用MODBUS協(xié)議作為他們之間的通訊標準,方便系統(tǒng)的擴展應(yīng)用。
系統(tǒng)設(shè)計時,已經(jīng)為每一個現(xiàn)場數(shù)據(jù)采集設(shè)備分配好相應(yīng)地址,并配置了相應(yīng)的系統(tǒng)更新服務(wù)程序,利用它實時監(jiān)視來自計算機發(fā)送的數(shù)據(jù)是否包含升級命令。系統(tǒng)在網(wǎng)絡(luò)上通信時,從節(jié)點設(shè)備必須按事先約定好的地址識別計算機發(fā)來的消息,然后決定要產(chǎn)生何種行動。如果收到當前數(shù)據(jù)是程序下載命令,則執(zhí)行相應(yīng)的系統(tǒng)更新操作,否則執(zhí)行正常的數(shù)據(jù)采集操作,生成應(yīng)答并使用MODBUS協(xié)議將數(shù)據(jù)發(fā)送給計算機。
表1
系統(tǒng)采用的STC單片機具有串口在線加載升級程序功能,但每次加載均需要冷復(fù)位,不利于實現(xiàn)遠程下載功能。根據(jù)STC單片機參數(shù)手冊關(guān)于ISP/IAP功能的描述,其中特殊功能寄存器IAP_CONTR為ISP/IAP控制寄存器,用戶可以設(shè)置其中SWBS/SWRST兩個位來實現(xiàn)系統(tǒng)的軟復(fù)位,并且能轉(zhuǎn)到ISP引導(dǎo)區(qū)啟動,實現(xiàn)在線不掉電下載功能。IAP_CONTR寄存器和SWBS/SWRST為的定義如下表1。
SWBS:啟動區(qū)域選擇控制位。
0:軟件選擇從用戶應(yīng)用程序區(qū)啟動;
1:軟件選擇從ISP程序區(qū)啟動。
SWRST:0:不操作;1:產(chǎn)生軟件復(fù)位,硬件自動清零。
在軟件設(shè)計時,在MODBUS數(shù)據(jù)接收子程序中添加系統(tǒng)升級功能解析程序,一旦監(jiān)測到數(shù)據(jù)流包含下載命令時,立即寫入IAP_CONTR=0x60,使系統(tǒng)軟復(fù)位到系統(tǒng)ISP監(jiān)控區(qū),從而引導(dǎo)下載程序進行遠程系統(tǒng)升級。
系統(tǒng)通信采用MODBUS協(xié)議,為主從方式的通信,數(shù)據(jù)傳輸采用RTU模式,9600bps波特率,8位數(shù)據(jù),1停止位,無奇偶校驗,主機發(fā)送一幀消息的格式如下:
1.地址:消息幀的地址域包含一個字節(jié)8Bit(RTU)??赡艿膹脑O(shè)備地址是0...247(十進制)。主設(shè)備通過將要聯(lián)絡(luò)的從設(shè)備的地址放入消息中的地址來選通從設(shè)備。當從設(shè)備發(fā)送回應(yīng)消息時,它把自己的地址放入回應(yīng)的地址域中,以便主設(shè)備知道是哪一個設(shè)備作出回應(yīng)。
圖1 分布式數(shù)據(jù)采集系統(tǒng)
圖2 現(xiàn)場設(shè)備系統(tǒng)通信解析程序流程圖
圖3 STC_ISP軟件設(shè)置界面
2.功能碼:消息幀中的功能代碼域包含一個字節(jié)8Bits(RTU)。可能的代碼范圍是十進制的1...255。當然,有些代碼是適用于所有控制器,有此是應(yīng)用于某種控制器,還有些保留以備后用。當消息從主設(shè)備發(fā)往從設(shè)備時,功能代碼域?qū)⒏嬷畯脑O(shè)備需要執(zhí)行哪些行為。
3.數(shù)據(jù):數(shù)據(jù)是由兩個十六進制數(shù)集合構(gòu)成的,范圍00...FF。根據(jù)網(wǎng)絡(luò)傳輸模式,這可以是由一對ASCII字符組成或由一RTU字符組成,它包含了功能碼的附加信息。
4.CRC校驗:即循環(huán)冗余校驗,用于數(shù)據(jù)錯誤檢測。
MODBUS協(xié)議功能碼有兩個用戶可以定義范圍,65至72和100至110。在協(xié)議設(shè)計時,指定100作為系統(tǒng)升級命令功能碼。數(shù)據(jù)域?qū)懥悖硎竟δ艽a沒有附加信息,僅為系統(tǒng)升級命令。CRC校驗碼由軟件生成。被升級對象的地址由計算機指定,現(xiàn)場節(jié)點設(shè)備的系統(tǒng)通信解析程序工作流程如圖2所示。
現(xiàn)場設(shè)備系統(tǒng)通信解析程序,采用中斷方式接收數(shù)據(jù)提高通信的實時性。當3.5個字符停頓后,開始接收第一字節(jié)數(shù)據(jù),如果是本機地址則完整接收一幀數(shù)據(jù),接收完畢時首先對數(shù)據(jù)的正誤進行CRC校驗,然后進入到功能碼解析過程,如果是升級命令則執(zhí)行更新。下面是系統(tǒng)通信解析程序執(zhí)行升級命令,復(fù)位到ISP監(jiān)控引導(dǎo)區(qū)的關(guān)鍵代碼:
在監(jiān)控計算機上運行STC—ISP軟件,該軟件為STC單片機專用下載軟件。源文件經(jīng)過編譯得到目標代碼,點擊打開程序文件載入。然后按圖3設(shè)置STC_ISP軟件,此時要用到自定義下載方式。實驗要對20號從節(jié)點進行程序升級,升級命令功能碼為100,那么需要在“自定義下載命令(HEX)”欄輸入1464 00 00 96 FD六個字節(jié)十六進制數(shù),最后兩位是前四字節(jié)CRC校驗碼,可以用CRC計算器獲得。最后點擊發(fā)送,在左下角即可觀察下載的執(zhí)行情況,實測成功完成。
經(jīng)過多次實踐,發(fā)現(xiàn)遠程下載時最高波特率不可設(shè)置太高,過高的波特率會造成升級失敗。同時在下載前需要關(guān)閉上位機監(jiān)控程序,以防止串口占用沖突,最后在使用時需注意遠程節(jié)點單片機下載過程中對端口的影響,特別是有外部執(zhí)行單元時尤其需要注意,防止誤動作出現(xiàn)。
通過RS485總線結(jié)合單片機的ISP編程功能的系統(tǒng)遠程升級性能穩(wěn)定、使用便捷,目前已經(jīng)在集散數(shù)據(jù)采集系統(tǒng)上得到了驗證。經(jīng)實際測試,20kB的程序升級用時約50秒,在計算機監(jiān)控端可以對任意一個從節(jié)點進行遠程快速升級,給整個系統(tǒng)的維護帶來了極大的方便。
[1]李喜東,劉波濤,劉剛.Modbus RTR串行通信協(xié)議在工業(yè)現(xiàn)場的應(yīng)用[J].自動化技術(shù)與應(yīng)用,2005,26(7):37-40.
[2]線巖團,許江淳,鄢大鵬.基于單片機的MODBUS的協(xié)議實現(xiàn)[J].云南大學(xué)學(xué)報(自然科學(xué)版),2009,31(s2):120-124.
[3]王善華,徐愛華.單片機程序遠程下載的實現(xiàn)[J].數(shù)字通信世界,2010,10:52-56.
[4]陳屹,馬殿光.基于CAN總線的一種系統(tǒng)遠程升級功能的實現(xiàn)[J].自動化儀表,2008,29(3):35-40.
[5]王貴喜,胡平平.STC單片機集成下載器的設(shè)計與實現(xiàn)[J].北京信息科技大學(xué)學(xué)報,2011,26(5):75-79.