姚文俊,劉春力,裴煥斗
(1.中北大學,太原030051;2.山西百得科技開發有限公司,太原030006)
近年來我國機械設備行業發展迅猛,各式移動裝備廣泛應用于建筑、港口和農業等眾多領域。由于移動裝備現場工況復雜且極其惡劣,對裝備的安全監控與管理提出了更高的要求。對移動裝備的監控管理不再滿足于故障事后處理,而是更加強調對裝備自身工況信息的實時采集和分析。工業運行中的許多現代化大型設備,為了安全、穩定、長周期、滿負荷優質運行,設備制造商往往會在產品中安裝一些傳感器,方便的告知客戶設備的運行狀況,以降低因設備故障造成的損失。然而設備制造方限于種種原因,并不掌握設備在用戶處的運行工況,難以根據設備的運行參數幫助用戶實時診斷和分析故障及故障預測。因此可通過一套數據傳送終端來將設備的運行參數通過遠程監控技術發送給制造商,有效地進行故障診斷分析,降低客戶的故障損失,更好的開展售后服務。
遠程監控技術主要包括專線遠程監控技術、電話網遠程監控技術、以太網遠程監控技術和無線通信遠程監控技術。特別是對于工作點多、通信距離遠、環境惡劣且實時性和可靠性要求比較高的場合,可以利用無線網絡通信來實現主控站與各個子站之間的數據通信,采用這種無線通信遠程監控技術有利于解決復雜連線的問題,無須鋪設各種線纜,降低環境成本。隨著GPRS的推廣和應用,采用GPRS技術來解決上述問題成為一種較好的方案。GPRS是利用“包交換”的概念所發展出的一套無線傳輸方式,采用包交換的好處在于只有在有資料需要傳送時才會占用頻寬,使若干移動用戶能夠同時共享一個無線信道,一個移動用戶也可以使用多個無線信道。
通過應用GPRS網絡實現了計算機或手機與ARM嵌入式處理器終端的遠程通信。系統整體上可分為數據采集模塊、數據傳輸控制模塊、無線傳輸網絡及數據處理終端模塊。其中數據傳輸終端的核心部分為Atmel公司的AT91SAM9263和SIMCOM公司的SIM300 GPRS模塊。圖1所示為系統的整體框圖,其中數據傳輸終端模塊的設計為主要任務,包含ARM最小系統、無線傳輸模塊及一些通信接口(如232串口、USB接口、網口)。

圖1 系統整體框圖
選用Atmel公司的AT91SAM9263,其通信功能非常強大,是目前功能最強大的ARM芯片之一。設計中用到的外圍通信接口包括用于下載燒寫bootstrap、uboot、Linux內核等的USB Device接口和具有網絡調試下載功能的以太網接口,用于調試程序的JTAG接口以及用于與GPRS模塊和PC機連接通信的兩個UART接口(UART0、UART1)。除了通信接口外,還有組成ARM最小系統所必須的電源模塊、時鐘模塊、DataFlash、NandFlash以及SDRAM等。其中UART0與GPRS模塊連接,UART1與PC機串口連接。電路硬件原理框圖如圖2所示。
在無線模塊SIM300與ARM芯片的接口設計中,TXD0(PA26)和 RXD0(PA27)接到 GPRS對應的 RXD與 TXD引腳上,RTS0(PA28)和 CTS0(PA29)可在GPRS上網時連接。電源部分因GPRS或GSM發射需要很大的電流,故應最大能提供到2A電流,工作電壓應保證在3.4V-4.5V之間。模塊啟動方式是通過控制PWRKEY(PE11)管腳即在該管腳上產生一個一段時間的低電平,然后為高阻態即可啟動模塊。模塊關閉也可通過PWRKEY管腳,操作方法與開啟時的操作方法一樣。

圖2 ARM終端功能框圖
基于AT91SAM9263的嵌入式Linux系統的基本組成為 Bootstrap、U-boot、Kernel、Rootfs,同時移植也是按這個順序來進行的,并且是按dataflash啟動的方式進行移植。圖3為dataflash和nandflash存儲空間的資源分配情況。各部分的分區大小是在uboot下指定的,將 bootstrap、uboot、linux kernel存放于dataflash中,將文件系統存放于nandflash中,而nandflash分為兩個分區,分區0作為rootfs(Cramfs格式),分區1用于自定義。具體的程序修改不再贅述,主要說明映像文件的編譯方法和燒寫過程。

圖3 Dataflash啟動存儲器映射圖
首先安裝windows下的交叉編譯工具鏈armnone-eabi-gcc,然后分別運行:cd board/at91sam9263ek/dataflash/、make clean 和 make生成dataflash_at91sam9261ek.bin文件。打開燒寫工具SAM-BA軟件,使用USB口燒寫。選擇DataFlash標簽,在下拉菜單中選擇Enable Dataflash on CS0,按Execute按鈕,接著選擇Send boot file,按Execute按鈕,最后選擇dataflash_at91sam9261ek.bin打開燒寫。
在Linux系統下安裝交叉工具鏈arm-linuxgcc,然后在/etc/profile文件中修改環境變量路徑為交叉工具鏈的路徑,再用命令service/etc/profile使路徑生效,這樣以后就可以直接使用make命令了。最后執行make at91sam9263ek_config和make命令生成u-boot.bin文件,通過sam-ba工具燒錄到dataflash的0x8400地址。具體步驟為在DataFlash標簽下的Address處寫入 uboot的燒寫地址0x8400,按Send File Name按鈕,打開u-boot.bin,按Send File按鈕,等待燒寫完成。
解壓Linux內核,cd到根目錄下,利用mkimage工具編譯內核來生成uImage內核鏡像,具體步驟及命令為:①make distclean→②→make at91sam9263ek_defconfig→③→./mkimage-A arm-O linux-C none-T kernel-a 20008000-e 20008000-n linux-2.6-d arch/arm/boot/zImage uImage。即可編譯生成支持uboot格式的uImage映像文件。燒寫方法與uboot相同,只需在Address處寫入Linux內核燒寫地址0x42000即可。
首先用mkdir命令建立roofs根文件夾并參考Linux系統建立根文件系統目錄樹,然后編譯安裝busybox到根文件下,最后利用mkcramfs工具制作文件系統,即用命令./mkcramfs rootfs rootfs_cramfs生成根文件的映像文件,最后將此文件通過sam-ba燒寫到nandflas。選擇nandflash標簽,在Address處寫入根文件系統的燒寫地址0x400000進行燒寫。
至此嵌入式Linux系統在AT91SAM9263平臺上的移植已經完成。
在終端軟件應用程序的設計中,由于有多個外部設備(不同功能的傳感器及GPRS模塊)需要操作,所以采用多進程編程實現。這些設備以設備文件的形式進行訪問,而訪問設備文件時,采用阻塞方式。用fork()函數分別創建GPRS_PID、FIRE_PID、Temp_PID、Smog_PID、Speed_PID等進程。進程間通信采用消息隊列方式,當GPRS模塊接收和發送消息時用msgget()創建和打開消息隊列,用msgsnd()添加要發送的消息內容,用msgrcv()讀取消息內容。在判斷消息類型及是否異常消息時采用switch()case語句分情況比較消息內容與程序已設定的標號來調用相應的函數進行處理。其中GPRS功能函數是通過編寫串口應用程序來實現短信息的接收和發送等功能。通過手機或電腦發送AT指令來控制ARM終端模塊對數據進行操作,以實現相應的功能。每個指令執行成功與否都有相應的返回,模塊將有對應的一些信息提示,接收端可做相應的處理。圖4為應用程序的整體流程圖。

圖4 應用程序整體流程圖
選用ARM芯片AT91SAM9263和SIM300 GPRS無線通信模塊設計的一種遠距離數據通信模塊可廣泛應用于建筑、港口和農業等眾多領域中現場狀況的監控,以及工業中許多現代化大型設備運行狀態的實時檢測等等。同時由于GPRS具有“高速”和“永遠在線”的優點,使用GPRS技術傳輸效率更高,功耗更低,而且應用無線傳輸更能節省成本。系統可長時間穩定的監控工況信息以及設備的運行狀態等,便于及時做出維修改進,確保機器設備的正常運行。
[1] 李俊.嵌入式LINUX設備驅動開發詳解[M].北京:人民郵電出版社,2008.
[2] 華清遠見嵌入式培訓中心編著.嵌入式Linux應用程序開發標準教程[M].北京:人民郵電出版社,2009.
[3] 張向濤,朱紅.基于GSM和ARM的遠程監控系統的研究[J].廣西通信技術,2006,9(3):13-16.
[4] 黃強,陶正蘇,宋浩,等.基于ARM的GPRS遠程數據傳輸模塊設計[J].電子器件,2008,31(4):1214-1218.