楊軍平,侯沛德,許存祿
(蘭州大學信息科學與工程學院,甘肅蘭州 730030)
對那些現場環(huán)境惡劣或受客觀條件制約不適宜布線的場合,建立一個通暢可靠的無線信息傳輸渠道,實現控制信息和數據的遠程傳輸是整個自動化控制系統(tǒng)的一個關鍵環(huán)節(jié),為此尋找一種安全可靠、低成本的解決方案,有著重要的社會意義和應用前景[1]。Zigbee無線通信系統(tǒng)使用了抗干擾能力極強的直序擴頻和動態(tài)路由數據傳輸的通信方式,且具有功耗低,成本低,ⅠSM 2.4GHz 頻段免費等優(yōu)點[2]。嵌入式系統(tǒng)是以應用為中心,以計算機為基礎,軟硬件可剪裁,適用于對功能,可靠性,成本,功耗嚴格要求的專用計算機系統(tǒng)[3]。嵌入式系統(tǒng)的迅速發(fā)展,恰恰滿足了現代工業(yè)生產和科學研究對數據采集水平的日益提高這一強烈需求。將嵌入式系統(tǒng)應用與工業(yè)控制相結合的研究及應用正在世界范圍內興起[4]。
硅鐵爐加料裝置的控制系統(tǒng)由基于嵌入式的無線手持控制單元、無線網關、西門子PLC控制柜、強電控制柜等幾部分組成??梢杂檬殖挚刂茊卧团潆姽窨刂泼姘鍍煞N方式完成加料動作。通過配電柜控制面板上的控制按鈕和轉換開關直接控制PLC可完成各種加料動作,但由于加料車在加料過程中配電控制柜跟隨加料車在不停運動,且距離硅鐵爐門較遠不便于觀察爐內加料情況,因此控制面板操作只作為應急情況下的一種操作方式,加料主要依靠手持控制單元來完成。操作人員通過觸摸屏上的控制按鈕和狀態(tài)信號指示燈,控制加料車完成整個加料過程。硅鐵爐加料裝置的控制系統(tǒng)整體架構如圖1所示。
圖1 硅鐵爐加料裝置的控制系統(tǒng)整體架構
本項目無線控制傳輸部分由基于嵌入式的無線手持控制終端和工業(yè)現場的無線收發(fā)裝置兩部分組成。手持控制終端采用ARM11+CC2530+Linux系統(tǒng)的形式,ARM手持控制終端作為主處理器主要負責人機交互畫面的顯示,設備狀態(tài)的監(jiān)測顯示、控制命令的發(fā)送、故障報警、系統(tǒng)設置與管理。CC2530作為從處理器負責控制命令和狀態(tài)數據的接收發(fā)送、以及數據在接收和發(fā)送過程的加密解密,提高數據的抗干擾能力。工業(yè)現場的無線收發(fā)裝置負責接收手持終端發(fā)送的命令和數據,并將從PLC讀取的狀態(tài)信息發(fā)送回手持終端。手持終端控制命令數據的發(fā)送和接收通過Zigbee模塊來完成,在PLC端的Zigbee收發(fā)模塊,要將收到的控制命令和數據轉換成MODBUS協(xié)議要求的格式,再和PLC進行自由口通信。從PLC中按MODBUS協(xié)議形式讀取的狀態(tài)數據也要進行數據格式轉換,轉換成ZSTACK-PDU格式再由Zigbee模塊進行發(fā)送?;谇度胧降臒o線手持控制系統(tǒng)框圖如圖2所示。
圖2 基于嵌入式的無線手持控制系統(tǒng)框圖
本項目選用UT-S3C6410開發(fā)板作為主控制器,UT-S3C6410采用“底板+核心板”的結構形式[5]。核心板配置如下:SamsungS3C6410處理器,ARM1176JZF-S內核,系統(tǒng)最高運行頻率667MHz;128M DDR內存作為RAM存儲器;256M nand flash作為隨機存儲器;MAX11T復位芯片作為控制系統(tǒng)復位操作。底板配置如下:采用AMD AM29LV160DB芯片2M Nor Flash存儲器;4路UART接口,采用3片Sipex SP3232EEA芯片,可通過2個8位撥碼開關選擇TTL電平或RS-232電平。選用7寸電阻式觸摸液晶屏,5V,4A直流電源。
選用CC2530單片機作為核心處理芯片,32M和32.768M晶振,SP3232EEA串口電路,天線和巴比倫匹配電路,LED電路,AD轉換電路,8MRAM存儲器[2]。
本項目選用UT-6410開發(fā)板+CC2530開發(fā)板+linux系統(tǒng)作為開發(fā)平臺,按以下步驟搭建嵌入式linux 開發(fā)平臺[5]。
(1) 在電腦上安裝 Windows xp、Vmware7.0、ubuntu 10.04,下載 android6410-u-boot-v 2.0 .tgz、android6410-linux2.6.28-v2.0.tgz 、cross-4.2.2-eabi.tar.bz2 和 arm-none-linux-gnue abi-arm-2008q3-72-for-linux.tar.bz2、mini gui-rootfs.tgzmovi NAND_Fusing_Tool.exe、dnw.exe、USB 驅動。
(2)安裝交叉編譯鏈arm-none-linux-gnueabiarm-2008q3 和 cross-4.2.2-eabi。
(3)編譯U-boot、修改內核Kerner參數配置,編譯Kerner后保存退出。
(4)燒寫u-boot格式化SD卡(2G以內),文件類型為 FAT32,用 moviNAND_Fusing_Tool.exe將 SD-boot.bin寫入SD卡,將SD卡插入開發(fā)板SD卡槽,設置撥碼開關SW1,設為SD卡啟動模式。安裝USB驅動程序,打開dnw.exe,正常啟動開發(fā)板。格式化Nand Flash,在 SDboot命令行中輸入“nand erase 0 10000000”,回車。輸入“dnw c0008000”,回車。如果已經安裝過USB下載驅動,狀態(tài)欄顯示:[USB:OK],信息提示:OTG cable Connected!點擊USB Port->Transmit-> Transmit,將linux2.6.28imageu-bootnand.bin讀到 ram 0xc0008000,輸入“nand write c0008000 0 100000”,回車。
(5)將開發(fā)板設置為Nand Flash啟動模式,正常啟動后,燒寫 zⅠmage。進入 u-boot命令行后,輸入“dnw c0008000”,回車。點擊 USB Port->Transmit->Transmit,將配置好參數的 zⅠmage讀到 ram 0xc0008000地址,輸入“nand write c0008000 100000 300000”,回車。
(6)掛載NFS根文件系統(tǒng),在linux主機(ubuntu 10.04)上安裝NFS服務,修改linux主機上NFS配置文件(/etc/exports),添加如下內容:/home/yang/nfs_share 192.168.1.10(rw,sync,no_root_squash),其中/home/yang/nfs_share是服務器共享的目錄,192.168.1.10 是開發(fā)板的 ⅠP。
將minigui-rootfs.tgz復制到 linux主機共享目錄/home/yang/nfs_share 解壓,minigui-rootfs.tgz保留在nfs_share目錄下不動,重啟linux主機NFS服務器。開發(fā)板插入網線,將開發(fā)板接入linux主機所在局域網內,開發(fā)板開機,并進入u-boot命令行、設置u-boot啟動參數,設置bootcmd、bootargs,重啟開發(fā)板,內核啟動后,將自動掛載NFS文件系統(tǒng)。
(7)修改串口驅動程序,并重新加載[6]。
(8)對開發(fā)板的觸摸屏驅動程序、串口驅動程序進行測試,對觸摸屏進行校正。
CC2530的內核為 C8051,使用 ⅠAR Embedded Workbench軟件集成開發(fā)環(huán)境,Zigbee 2007棧協(xié)議。首先按照軟件提示,在Windos XP主機上安裝ⅠAR,安裝成功后點擊菜單欄的project選項下的Option項,彈出 Options for node“CC2530Test”對話框,按要求對開發(fā)環(huán)境進行配置[2]。
本項目用到的應用程序包括:基于MiniGUⅠ的加料車無線手持單元圖形界面,Zigbee無線通信程序,Zigbee無線通訊模塊和UT-6410開發(fā)板之間串口通信程序,MODBUS協(xié)議與Zigbee協(xié)議之間的數據格式轉換。
(1)在linux主機上安裝minigui程序首先需要下載如下組件,libminigui-gpl-3_0_12.tar.gz、mgsamples-3_0_12.tar.gz、freetype-1_3_1.tar.gz、jpegsrc_v7.tar.gz、libpng-1_2_37.tar.gz、minigui-res-be-3_0_12.tar.gz、zlib-1_2_2.tar.gz、qvfb2-2.0、libmgplus-1.2.4、libqt3-mt、libqt3-mt-dev、alien、qt-devel-3.3.8-4.fc7.i386.rpm。其次,按如下順序安裝各組件:libminigui-gpl-3_0_12.tar.gz、minigui-res-be-3_0_12.tar.gz、freetype-1_3_1.tar.gz、PNG 庫、JPEG庫、zlib 庫、libmgplus-1.2.4、qvfb2、mg-samples-3_0_12。最后運行 helloword程序,檢驗 linux主機上的miniGUⅠ是否安裝成功。
(2)對開發(fā)板進行交叉編譯 首先安裝交叉編譯器 cross-2.95.3.tar.bz2,再安裝 zlib 庫、png 庫、jpeg庫、libttf庫、編譯安裝 libminigui、popt庫,將庫文件安裝到/usr/local/arm/2.95.3/arm-linu文件夾下。
(3)把miniGUⅠ移植到開發(fā)板 嵌入式系統(tǒng)的根目錄為/opt/rootfs,把 /usr/local/arm/2.95.3/armlinux/lib中相應的庫復制到 /opt/rootfs/usr/local/lib目錄下,修改MiniGUⅠ.cfg并保存退出。安裝并修改mde-1.3.0.tar.gz,保存退出,制作根文件系統(tǒng)鏡像,把 root.cramfs燒到板子里。
(4)基于Minigui的圖形界面開發(fā)。
(1)組建網絡 協(xié)調器(手持終端)主要負責網絡組建、維護、控制終端節(jié)點加入無線網絡等任務,Zigbee棧協(xié)議采用事件驅動的方式。當系統(tǒng)上電后,協(xié)調器首先進行初始化,自動選擇一個信道,然后選擇一個網絡號,建立無線網絡,等待終端節(jié)點(無線網關)發(fā)出的請求加入網絡的信標(Beacon)信號,協(xié)調器對收到的終端節(jié)點加入網絡的請求作出應答,終端節(jié)點收到協(xié)調器的應答后,發(fā)送數據請求,請求協(xié)調器分配網絡地址,協(xié)調器對終端節(jié)點的數據請求作出應答,將分配的網絡地址發(fā)送給終端節(jié)點,終端節(jié)點使用自己的網絡地址和協(xié)調器進行通信。
(2)發(fā)送控制命令或數據 操作人員通過觸摸屏發(fā)出各種控制命令或數據,ARM處理器接到發(fā)送控制命令或數據的請求后,將待發(fā)送的數據存入串口緩存,對串口進行初始化,設置串口參數,和CC2530的串口進行通信,CC2530將接收到的數據存入串口緩存,CC2530處理器讀取數據,將需要發(fā)送的數據存入相應的端口,調用Zigbee棧協(xié)議中的發(fā)送函數與相關硬件函數最終將數據通過天線發(fā)送出去。
(3)接收終端節(jié)點返回的狀態(tài)數據 當協(xié)調器收到數據后,Zigbee棧協(xié)議將接收到的數據封裝成一個消息,然后放入消息隊列中,每個消息都有一個ⅠD,使用Zigbee棧協(xié)議中的osal_msg_receive函數從消息隊列中接收一個消息,然后使用switch-case語句對消息類型進行判斷,進行相應的數據處理,將處理好的數據存入串口緩存,打開串口將數據發(fā)送至ARM開發(fā)板的串口緩存,ARM處理器讀取數據,對觸摸屏上的狀態(tài)指示燈進行刷新[7]。
無線網關的主要作用是完成MODBUS協(xié)議和Zigbee無線協(xié)議數據轉換,轉換協(xié)議中使用了兩種網絡數據格式 MODBUS-PDU和 ZSTACK-PDU,PLC設備能夠響應的協(xié)議數據為MODBUS-PDU,Zigbee網絡中傳輸的 Z-Stack協(xié)議數據為 ZSTACK-PDU。MODBUS協(xié)議數據以站號指定通信目的地址(無線終端),需要將MODBUS命令中的地址信息提取出來并根據此信息得到相應的PLC設備綁定的Zigbee無線終端的無線網絡地址,并根據網絡地址將MODBUS命令數據轉發(fā)至對應的無線終端。無線手持終端發(fā)送的控制命令是Zigbee無線協(xié)議數據,無線網關將接收到ZSTACK-PDU經過與上面相反的過程得到MODBUS-PDU數據發(fā)送至與之相連 PLC設備完成一次命令的接收。
在本項目中無線網關內部維護地址映射表,將整個網絡中的所有PLC設備的站號和與其綁定的無線終端的Zigbee網絡地址以及通信協(xié)議端口記錄在映射表中。實際通信過程中將通過查詢表格得到對應的PLC站號和無線終端網絡地址。當PLC通過串口將MODBUS協(xié)議命令數據發(fā)送給 Zigbee模塊時,首先在應用層將目的站號解析出來,查詢網絡映射表得到無線終端網絡地址,在 MODBUS協(xié)議命令的基礎上加上自己Zigbee的ⅠEEE地址,并將這些數據作為應用層數據發(fā)送給網絡層封裝,然后交給ZSTACK協(xié)議棧來完成發(fā)送,當無線終端收到信息,發(fā)送響應信息給發(fā)送方,完成一次通信過程。這個通信過程需要設置通信超時機制,當超過一段時間無法接收到回復和應答將作為通信失敗處理,請求重新發(fā)送[8]。
在青海進行了硅鐵爐加料實驗,整個設備移動范圍最大不超過 30 m,通過 TexasⅠnstruments Packet Sniffer軟件進行抓包實驗,無線手持終端發(fā)送控制命令、接收監(jiān)測數據的誤碼率為零,整個加料裝置運轉正常,反應靈敏,達到了預期設計要求。
[1] 王 泉,陳加林.工業(yè)現場級Zigbee手持控制器的設計與實現[J].微計算機信息,2009(2):5-2.
[2] 王小強,歐陽駿.黃寧淋.Zigbee無線傳感器網絡設計與實現[M].北京:化學工業(yè)出版社,2012.
[3] 弓 雷.ARM嵌入式Linux系統(tǒng)開發(fā)詳解[M].北京:清華大學出版社,2010.
[4] 胡國珍,王 泉,魏 旻.基于 Zigbee的工業(yè)無線網關研究[J].技術縱橫,2009(2):5-25.
[5] 北京飛漫技術有限公司.XM6410原型機Linux2.6.28使用手冊[Z].北京:2011.
[6] 宋寶華,何昭然.精通Linux設備驅動程序開發(fā)[M].北京:人民郵電出版社,2012.
[7] 蔣 挺,趙成林.紫峰技術及其應用[M].北京:北京郵電大學出版社,2006.
[8] Modbus.org.Modbus Application Protocol Specification V1.1[EB/OL].httP://www.Modbus.org.