文獻標識碼: A
文章編號: 0258-7998(2013)02-0086-03
數(shù)據(jù)的遠程傳輸是各種數(shù)據(jù)采集與處理系統(tǒng)所必須的,而那些應(yīng)用于有線網(wǎng)絡(luò)無法覆蓋的場合的設(shè)備就需要使用一種可靠的無線遠程數(shù)據(jù)傳輸方案來實現(xiàn)。根據(jù)這種遠程無線數(shù)據(jù)傳輸?shù)奶攸c,可以使用現(xiàn)存的無線通信網(wǎng)來實現(xiàn)。當今3G無線通信技術(shù)的發(fā)展和數(shù)據(jù)傳輸速度的不斷提高[1],為遠程無線數(shù)據(jù)的實時傳輸提供了可能。另外NiosⅡ是Altera公司推出的第二代IP軟核處理器,它與其他IP核可構(gòu)成SoPC(System on a Programmable Chip)系統(tǒng)的主要部分[2]。SoPC技術(shù)是借助于以計算機為平臺的NiosⅡ開發(fā)工具進行開發(fā)的,具有設(shè)計靈活和軟硬件在系統(tǒng)可編程的功能[3]。根據(jù)以上特點,如果使用NiosⅡ作為3G無線數(shù)據(jù)傳輸?shù)目刂破?,同時在FPGA上使用SoPC技術(shù)還可以實現(xiàn)數(shù)據(jù)采集與處理電路[4],將會使系統(tǒng)設(shè)計與實現(xiàn)更加靈活,同時提高開發(fā)效率并且易于升級換代。
1 硬件系統(tǒng)構(gòu)成
遠程數(shù)據(jù)傳輸主要為了實現(xiàn)控制系統(tǒng)的遠程監(jiān)控和遠程數(shù)據(jù)處理與分析,為了實現(xiàn)遠程數(shù)據(jù)傳輸?shù)男枨?,不僅需要數(shù)據(jù)采集系統(tǒng)還需要相應(yīng)的遠程數(shù)據(jù)傳輸通信系統(tǒng)的支持。本設(shè)計使用FPGA芯片作為主控芯片,在其中使用SoPC技術(shù)構(gòu)建一個NiosⅡ微處理器作為控制器完成數(shù)據(jù)傳輸控制。由3G無線數(shù)據(jù)傳輸模塊完成無線數(shù)據(jù)傳輸,由于模塊的接口為RS232協(xié)議接口[5],所以在NiosⅡ微處理和3G無線數(shù)據(jù)傳輸模塊之間需要在FPGA芯片上設(shè)計滿足3G無線數(shù)據(jù)傳輸模塊協(xié)議要求的UART接口電路,再結(jié)合RS232協(xié)議電平轉(zhuǎn)換電路即可實現(xiàn)兩者之間的電氣連接。
1.1 Nios II系統(tǒng)資源的構(gòu)建
運用SoPC Builder工具,在系統(tǒng)中通過IP核,分別使用NiosII Processor、On-Chip Memory(RAM or ROM)、Avalon-MM Tristate Bridge、JTAG UART、Flash Memory(CFI)和SDRAM Controler核構(gòu)建以上資源。根據(jù)外圍接口的具體存儲器型號選擇Flash Memory(CFI)和SDRAM Controler的具體參數(shù)。
1.2 3G模塊接口電路的構(gòu)建
該部分電路同樣使用軟核的方式在同一片F(xiàn)PGA中實現(xiàn)。電路構(gòu)成如圖1所示。
如圖1,在FPGA芯片上使用UART軟核構(gòu)造一個同時包括RTS和CTS信號的異步串行口。UART1的UART_RXD和UART_TXD為與3G模塊進行數(shù)據(jù)傳輸?shù)臄?shù)據(jù)接收和數(shù)據(jù)發(fā)送引腳,引腳UART_RTS在發(fā)送數(shù)據(jù)前輸出有效信號(低電平),請求數(shù)據(jù)發(fā)送給3G模塊,3G模塊通過UART_CTS應(yīng)答控制器允許其發(fā)送數(shù)據(jù)或命令,完成數(shù)據(jù)發(fā)送的握手,同時UART_CTS信號還可以用于檢測3G模塊是否在線。
2 3G模塊初始化實現(xiàn)
3G數(shù)據(jù)傳輸模塊是3G無線通信網(wǎng)的一個調(diào)制解調(diào)器,上電后需要對其進行初始化,根據(jù)實際需求的不同初始化的流程也是不同的,從而實現(xiàn)的功能也就不同,所以需要根據(jù)遠程數(shù)據(jù)傳輸?shù)男枨筮M行相應(yīng)流程的初始化。
2.1 3G模塊控制命令的發(fā)送
根據(jù)3G模塊的通信協(xié)議,得知其控制命令的發(fā)送使用異步串口實現(xiàn),指令形式為ASCII碼字符串,并且以回車換行為結(jié)束符。所以在設(shè)計3G模塊命令發(fā)送功能時為了充分提高代碼利用率,只是將AT指令碼進行字符串預處理,即在原有AT指令的字符串后增加“\r”和“\n”兩個字符構(gòu)成AT指令命令字符串。發(fā)送使用通用的串口數(shù)據(jù)發(fā)送函數(shù)實現(xiàn),該函數(shù)原型為void Uart1_send_n(unsigned char *ptr,unsigned char n)。模塊在上電初始化過程中不但需要使用AT指令進行初始化,而且該模塊還會回送一些相應(yīng)的狀態(tài)字符串來告知主控設(shè)備的當前設(shè)備或指令執(zhí)行狀態(tài),如上電時模塊會回送COM_READY和^DEEI: 0狀態(tài)信息。每個指令發(fā)送后,會送 一個OK以示確認接收正確,并且其每回送一個狀態(tài)字符串其前后都含有回車換行“\r”和“\n”兩個字符。所以根據(jù)該特點設(shè)計了3G模塊命令回送碼讀函數(shù)void G3readCommand(unchar*cm),該函數(shù)指令流程如圖2所示。該函數(shù)每次執(zhí)行都讀取一個夾在兩對回車換行之間的一個字符串。
2.2 3G模塊初始化過程
3G模塊初始化過程主要調(diào)用2.1節(jié)所設(shè)計的相關(guān)函數(shù),根據(jù)TCP/IP數(shù)據(jù)服務(wù)應(yīng)用的初始化需求完成的具體初始化流程如圖3所示。
系統(tǒng)上電,在完成串口的初始化后,開始3G模塊的初始化。由于系統(tǒng)剛上電,3G模塊可能還沒有啟動成功,所以需要通過串口讀取其上傳的狀態(tài)信息。當3G模塊上電啟動后可以接受AT指令時,它將上傳兩條狀態(tài)信息,分別是“COM_READY”和 “^DEEI: 0”,所以當系統(tǒng)讀到 “^DEEI: 0”信息時才可以向3G模塊發(fā)送指令,開始對其初始化。首先需要取消3G模塊的自動休眠,而且要及時取消,否則其上電啟動后幾秒鐘之內(nèi)就會進入休眠狀態(tài),其不再能夠接受AT指令,從而無法完成3G模塊的初始化等工作。因此讀到 “^DEEI: 0”信息之后,立即通過串口向其發(fā)送AT指令“T^DSLP=0,0”即可。為了保證3G模塊的數(shù)據(jù)通信的正確性,使用CRC校驗方式進行串口數(shù)據(jù)校驗,通過發(fā)送“AT+CRC=1”指令開啟3G模塊的CRC校驗功能。之后完成一系列的上報設(shè)置后,即可進入3G模塊的開機設(shè)置。開機設(shè)置主要使用AT指令“AT+CFUN=5”、“AT+CFUN=1”和“AT+COPS=0”完成SIM卡和協(xié)議棧的激活,以及網(wǎng)絡(luò)的注冊。在注冊了網(wǎng)絡(luò)之后,使用指令“AT+CGDCONT=1,"IP","CMNET",,0,0”設(shè)置網(wǎng)絡(luò)服務(wù)模式為CMNET,為后續(xù)的數(shù)據(jù)服務(wù)做準備。下面依次使用相應(yīng)的AT指令完成向網(wǎng)絡(luò)申請下載上傳的帶寬、激活TCP/IP應(yīng)用任務(wù)和撥號的工作。最后使用“AT^DIPSTART=1,xxx.xxx.xxx.xxx,yyyyy”與遠端服務(wù)器xxx.xxx.xxx.xxx端口yyyyy建立連接,該AT指令的第一個參數(shù)1表示現(xiàn)在是以TCP協(xié)議進行連接請求,如果為數(shù)字2則為以UDP協(xié)議與服務(wù)器進行數(shù)據(jù)通信。最后一條指令為數(shù)據(jù)通信開始,參數(shù)為發(fā)送數(shù)據(jù)長度,其必須小于4 096。在此之后該3G模塊就按照以上初始化的工作方式進行工作,所有通過串口連續(xù)送往該模塊的數(shù)據(jù)都將被3G模塊以TCP(或UDP)方式進行數(shù)據(jù)發(fā)送,不再接收AT指令。值得注意的是在此情況下如何退出數(shù)據(jù)發(fā)送模式返回AT指令接收模式。當用于接收數(shù)據(jù)的通信接口(串口)超過100 ms沒有收到任何字節(jié)且之后連續(xù)收3個“+”字符(即“+++”字符串)時,其退出數(shù)據(jù)傳輸模式,進入AT指令模式。
3 數(shù)據(jù)發(fā)送與接收實現(xiàn)
在完成了3G模塊的初始化,進入數(shù)據(jù)傳輸模式后,即可開始使用3G模塊進行應(yīng)用層數(shù)據(jù)通信。要想完成應(yīng)用層數(shù)據(jù)通信,還必須制定相應(yīng)的應(yīng)用層通信協(xié)議,在客戶端系統(tǒng)上編寫數(shù)據(jù)收發(fā)程序使用制定的相應(yīng)應(yīng)用層協(xié)議進行數(shù)據(jù)收發(fā),同時在服務(wù)器端同樣必須編寫相應(yīng)的通信和處理程序完成對客戶端的數(shù)據(jù)收發(fā)和處理(包括顯示和指示)。下面使用電力系統(tǒng)數(shù)據(jù)采集的應(yīng)用背景對這三方面進行介紹。
3.1 應(yīng)用層數(shù)據(jù)通信協(xié)議
應(yīng)用層數(shù)據(jù)傳輸,主要應(yīng)該定義相應(yīng)的包格式,根據(jù)不同的包格式進行不同的數(shù)據(jù)傳輸和數(shù)據(jù)應(yīng)用。接收端根據(jù)接收的不同數(shù)據(jù)包進行不同的數(shù)據(jù)處理和功能控制。數(shù)據(jù)包主要可以分為先好協(xié)調(diào)包、指令包和應(yīng)用數(shù)據(jù)包。每個包中定義相應(yīng)的包類型字段、包長度字段、包內(nèi)容字段、包校驗字段以及包尾標志。包內(nèi)容字段長度因不同的包類型不同,還可以細分不同的子字段。本文設(shè)計的電力系統(tǒng)參數(shù)采集裝置的協(xié)調(diào)包主要完成客戶端(NiosII系統(tǒng)端)與服務(wù)器端數(shù)據(jù)發(fā)送與接收的協(xié)調(diào)調(diào)度工作,包括客戶端的IP地址的獲取,客戶端數(shù)據(jù)發(fā)送的輪詢協(xié)調(diào)等。指令包主要實現(xiàn)客戶端控制,客戶端根據(jù)服務(wù)器傳輸?shù)牟煌刂浦噶钸M行用戶用電設(shè)備的電能供給和報警控制等。數(shù)據(jù)傳輸主要實現(xiàn)客戶端監(jiān)測的數(shù)據(jù)的上傳和服務(wù)器對客戶端的運行參數(shù)的配置。
3.2 NiosII系統(tǒng)數(shù)據(jù)收發(fā)
在NiosII系統(tǒng)中,根據(jù)應(yīng)用層數(shù)據(jù)通信協(xié)議和3G數(shù)據(jù)傳輸?shù)奶攸c,使用C語言進行編程,完成數(shù)據(jù)收發(fā)。數(shù)據(jù)發(fā)送的過程如圖4所示。3G模塊作為數(shù)據(jù)傳輸終端,通過串口與NiosII系統(tǒng)進行數(shù)據(jù)交換。NiosII系統(tǒng)中的程序主要是針對串口的數(shù)據(jù)收發(fā)設(shè)計的。電力參數(shù)有很多,有基本的電壓、電流、相位、功率等基本信息,也有諧波、簡諧波和實時波形數(shù)據(jù)等細節(jié)信息。信息數(shù)據(jù)有整數(shù)類型也有實數(shù)類型。本文在數(shù)據(jù)傳輸時統(tǒng)一使用同一種數(shù)據(jù)格式,即16位整數(shù)形式進行傳輸,因此需要進行實數(shù)/整數(shù)轉(zhuǎn)換。在數(shù)據(jù)發(fā)送之前NiosII系統(tǒng)首先需要從存儲器中讀取數(shù)據(jù)采集系統(tǒng)采集到的電力參數(shù)數(shù)據(jù),之后將讀取到的參數(shù)數(shù)據(jù)根據(jù)不同類型進行數(shù)據(jù)拆分和數(shù)據(jù)轉(zhuǎn)換,再根據(jù)應(yīng)用層協(xié)議進行數(shù)據(jù)封包。最后根據(jù)當前服務(wù)器請求狀態(tài)進行數(shù)據(jù)發(fā)送。數(shù)據(jù)包的發(fā)送使用串口數(shù)據(jù)發(fā)送函數(shù)void Uart_send_n(SramBuf, num)實現(xiàn),其第一個參數(shù)為協(xié)議數(shù)據(jù)包存儲地址,第二個參數(shù)為協(xié)議數(shù)據(jù)包總字節(jié)數(shù)。NiosII系統(tǒng)中的3G數(shù)據(jù)接收使用中斷方式實現(xiàn),當系統(tǒng)中接收到3G模塊發(fā)送過來的串口數(shù)據(jù)時,中斷系統(tǒng)自動響應(yīng)并調(diào)用void Uart_ISR(void * context)進行數(shù)據(jù)讀取,之后根據(jù)應(yīng)用層數(shù)據(jù)通信協(xié)議進行解包和功能識別與應(yīng)用。
3.3 遠程終端數(shù)據(jù)收發(fā)
遠程終端即服務(wù)器端主要實現(xiàn)對NiosII系統(tǒng)端的參數(shù)、數(shù)據(jù)的顯示和存儲以及工作參數(shù)配置與控制。服務(wù)器端軟件主要包括系統(tǒng)界面設(shè)計和通信程序設(shè)計。本系統(tǒng)軟件使用C/S結(jié)構(gòu),服務(wù)器使用固定IP地址,使用Socket編程模式實現(xiàn),設(shè)備終端(即客戶端,NiosII系統(tǒng)端)在工作過程中向服務(wù)器提出連接請求,建立連接后,服務(wù)器端作為數(shù)據(jù)傳輸?shù)目刂贫?,根?jù)實際用戶的軟件界面上的操作選擇某設(shè)備終端與服務(wù)器端進行數(shù)據(jù)實時交換、顯示和存儲。如果系統(tǒng)需要實時保存每個設(shè)備終端的電力參數(shù),在建立連接之后即開始數(shù)據(jù)傳輸,界面操作只是進行顯示切換。不過由于電力參數(shù)多,如果用戶設(shè)備終端較多,則系統(tǒng)服務(wù)器壓力會比較大。服務(wù)器端應(yīng)用程序可以根據(jù)不同的應(yīng)用需求進行具體設(shè)計,實現(xiàn)具體功能。圖5是實現(xiàn)的電力參數(shù)數(shù)據(jù)遠程采集系統(tǒng)的一個原型系統(tǒng)軟件界面。包括文本數(shù)據(jù)信息的顯示,圖形矢量信息和波形信息的顯示,同時包括各種與電力參數(shù)相關(guān)的功能界面以及參數(shù)設(shè)置和控制界面。有效地實現(xiàn)了供電或大功率用電場合的供電參數(shù)采集及遠程監(jiān)控。
本3G無線網(wǎng)絡(luò)數(shù)據(jù)傳輸系統(tǒng)使用SoPC技術(shù)在FPGA上建立一NiosII處理器,根據(jù)3G無線網(wǎng)絡(luò)數(shù)據(jù)傳輸應(yīng)用的需要設(shè)計NiosII控制程序,實現(xiàn)了通過3G模塊的遠程數(shù)據(jù)傳輸功能。設(shè)計中,針對3G模塊的特點設(shè)計數(shù)據(jù)收發(fā)程序、模塊初始化程序和數(shù)據(jù)應(yīng)用層通信協(xié)議,為系統(tǒng)的遠程數(shù)據(jù)傳輸?shù)膶崿F(xiàn)提供了一種相對通用的方法,易于實現(xiàn)各種遠程數(shù)據(jù)傳輸?shù)膽?yīng)用系統(tǒng)開發(fā)。本系統(tǒng)通過實地試驗證明系統(tǒng)結(jié)構(gòu)合理,實現(xiàn)靈活,充分滿足實際需求,系統(tǒng)運行穩(wěn)定。Nios II處理器作為本接口電路的主控芯片,既簡化了程序設(shè)計,又提高了系統(tǒng)性能和開發(fā)效率,而且易于升級換代。
參考文獻
[1] 謝兵,許金彤.基于3G網(wǎng)絡(luò)的輸電線路防外力破壞智能視頻監(jiān)控系統(tǒng)研究[J].華東電力,2010,38(11):1729-1731.
[2] YIANNACOURAS P, STEFFAN J G, ROSE J. Exploration and customization of FPGA-based soft processors[J]. Computer-Aided Design of Integrated Circuits and Systems, 2007,26(2):266-277.
[3] 周潤景,圖雅,張麗敏.基于QuartusII的FPGA/CPLD數(shù)字系統(tǒng)設(shè)計實例[M].北京:電子工業(yè)出版社,2007.
[4] 胡繼勝,李洪.基于 SoPC/Nios II 的信號發(fā)生器設(shè)計與實現(xiàn)[J]. 電子技術(shù)應(yīng)用,2011,37(6):91-94.
[5] 王盛學,李著信,何平. 基于3G 無線網(wǎng)絡(luò)的工業(yè)監(jiān)控系統(tǒng)設(shè)計[J].電子技術(shù)應(yīng)用,2011,37(8):75-77,81.