以單片機為控制處理器件的嵌入式系統設計,有時需要在實際應用時不停的修正應用程序,或是對產品功能不斷的升級,不能夠一下子把程序最終確定下來,雖然很多單片機都提供了IAP和ISP功能,在現場打開產品機箱外殼就能夠很方便地更新應用程序。但對于組成網絡的各分布節點一一進行固件升級時會遇到相當大的麻煩;其次在某些工業應用上,一些節點可能位于維護人員無法進入的場所。因此,研究一種在主節點上通過通信網絡更新各個從節點程序的在線升級技術顯得很有意義。
如圖1所示分布式數據采集系統,控制處理器采用STC單片機設計。終端數據采集設備通過串口連接到RS-485通信網絡,通信網再經過RS485/232轉換器連接到遠端計算機進行集中監控。通信采用工業制造環境通用協議MODBUS,此協議支持傳統的RS-232、RS-422、RS-485和以太網設備,許多工業設備,包括PLC,DCS,智能儀表等都在使用MODBUS協議作為他們之間的通訊標準,方便系統的擴展應用。
系統設計時,已經為每一個現場數據采集設備分配好相應地址,并配置了相應的系統更新服務程序,利用它實時監視來自計算機發送的數據是否包含升級命令。系統在網絡上通信時,從節點設備必須按事先約定好的地址識別計算機發來的消息,然后決定要產生何種行動。如果收到當前數據是程序下載命令,則執行相應的系統更新操作,否則執行正常的數據采集操作,生成應答并使用MODBUS協議將數據發送給計算機。

表1
系統采用的STC單片機具有串口在線加載升級程序功能,但每次加載均需要冷復位,不利于實現遠程下載功能。根據STC單片機參數手冊關于ISP/IAP功能的描述,其中特殊功能寄存器IAP_CONTR為ISP/IAP控制寄存器,用戶可以設置其中SWBS/SWRST兩個位來實現系統的軟復位,并且能轉到ISP引導區啟動,實現在線不掉電下載功能。IAP_CONTR寄存器和SWBS/SWRST為的定義如下表1。
SWBS:啟動區域選擇控制位。
0:軟件選擇從用戶應用程序區啟動;
1:軟件選擇從ISP程序區啟動。
SWRST:0:不操作;1:產生軟件復位,硬件自動清零。
在軟件設計時,在MODBUS數據接收子程序中添加系統升級功能解析程序,一旦監測到數據流包含下載命令時,立即寫入IAP_CONTR=0x60,使系統軟復位到系統ISP監控區,從而引導下載程序進行遠程系統升級。
系統通信采用MODBUS協議,為主從方式的通信,數據傳輸采用RTU模式,9600bps波特率,8位數據,1停止位,無奇偶校驗,主機發送一幀消息的格式如下:

1.地址:消息幀的地址域包含一個字節8Bit(RTU)。可能的從設備地址是0...247(十進制)。主設備通過將要聯絡的從設備的地址放入消息中的地址來選通從設備。當從設備發送回應消息時,它把自己的地址放入回應的地址域中,以便主設備知道是哪一個設備作出回應。

圖1 分布式數據采集系統

圖2 現場設備系統通信解析程序流程圖

圖3 STC_ISP軟件設置界面
2.功能碼:消息幀中的功能代碼域包含一個字節8Bits(RTU)。可能的代碼范圍是十進制的1...255。當然,有些代碼是適用于所有控制器,有此是應用于某種控制器,還有些保留以備后用。當消息從主設備發往從設備時,功能代碼域將告之從設備需要執行哪些行為。
3.數據:數據是由兩個十六進制數集合構成的,范圍00...FF。根據網絡傳輸模式,這可以是由一對ASCII字符組成或由一RTU字符組成,它包含了功能碼的附加信息。
4.CRC校驗:即循環冗余校驗,用于數據錯誤檢測。
MODBUS協議功能碼有兩個用戶可以定義范圍,65至72和100至110。在協議設計時,指定100作為系統升級命令功能碼。數據域寫零,表示功能碼沒有附加信息,僅為系統升級命令。CRC校驗碼由軟件生成。被升級對象的地址由計算機指定,現場節點設備的系統通信解析程序工作流程如圖2所示。
現場設備系統通信解析程序,采用中斷方式接收數據提高通信的實時性。當3.5個字符停頓后,開始接收第一字節數據,如果是本機地址則完整接收一幀數據,接收完畢時首先對數據的正誤進行CRC校驗,然后進入到功能碼解析過程,如果是升級命令則執行更新。下面是系統通信解析程序執行升級命令,復位到ISP監控引導區的關鍵代碼:


在監控計算機上運行STC—ISP軟件,該軟件為STC單片機專用下載軟件。源文件經過編譯得到目標代碼,點擊打開程序文件載入。然后按圖3設置STC_ISP軟件,此時要用到自定義下載方式。實驗要對20號從節點進行程序升級,升級命令功能碼為100,那么需要在“自定義下載命令(HEX)”欄輸入1464 00 00 96 FD六個字節十六進制數,最后兩位是前四字節CRC校驗碼,可以用CRC計算器獲得。最后點擊發送,在左下角即可觀察下載的執行情況,實測成功完成。
經過多次實踐,發現遠程下載時最高波特率不可設置太高,過高的波特率會造成升級失敗。同時在下載前需要關閉上位機監控程序,以防止串口占用沖突,最后在使用時需注意遠程節點單片機下載過程中對端口的影響,特別是有外部執行單元時尤其需要注意,防止誤動作出現。
通過RS485總線結合單片機的ISP編程功能的系統遠程升級性能穩定、使用便捷,目前已經在集散數據采集系統上得到了驗證。經實際測試,20kB的程序升級用時約50秒,在計算機監控端可以對任意一個從節點進行遠程快速升級,給整個系統的維護帶來了極大的方便。
[1]李喜東,劉波濤,劉剛.Modbus RTR串行通信協議在工業現場的應用[J].自動化技術與應用,2005,26(7):37-40.
[2]線巖團,許江淳,鄢大鵬.基于單片機的MODBUS的協議實現[J].云南大學學報(自然科學版),2009,31(s2):120-124.
[3]王善華,徐愛華.單片機程序遠程下載的實現[J].數字通信世界,2010,10:52-56.
[4]陳屹,馬殿光.基于CAN總線的一種系統遠程升級功能的實現[J].自動化儀表,2008,29(3):35-40.
[5]王貴喜,胡平平.STC單片機集成下載器的設計與實現[J].北京信息科技大學學報,2011,26(5):75-79.