摘 要:針對家校通網絡控制器的功能需求,提出一種串口與網絡結合的通信技術。首先描述了網絡控制器的硬件平臺和基于TCP/IP協議之上的應用層協議,然后著重討論了網絡通信技術和串口通信技術,在通信過程中,采用主從應答方式以提高數據傳輸的有效性,減少數據沖突現象的發生,最后通過現場測試到的數據對該通信技術的可行性與穩定性進行說明與分析。
關鍵詞:網絡控制器;通信協議;Rabbit2000單片機;套接字;串口通信
中圖分類號:TN91 文獻標識碼:B
文章編號:1004373X(2008)0105403
Communication Technology of Jia-xiao-tong Network Controller
WEI Zi,YANG Qingjiang,ZHANG Guanglu
(Heilongjiang Institute of Science and Technology,Harbin,150027,China)
Abstract:For the function demand of the network controller in Jia-xiao-tong system,the paper proposes a communication technology of combining serial-port with network.Firstly,it describes the network controller′s hardware platform and the application-layer protocol based on TCP/IP protocol stack.Then,it mainly discusses the communication network technology and the communication serial technology.The polling scheme is applied to improve data transfer effectiveness and reduce data collision.Finally,it explains and analyzes the communication technology′s feasibility and stability through filed test data.
Keywords:network controller;communication protocol;Rabbit2000 single chip;socket;serial communication
1 引 言
隨著TCP/IP等網絡通信的出現,將串口通信與網絡通信相結合的趨勢越來越明顯,這是保護使用者既往投資和整體利益的一種有效辦法。本文所討論的通信技術就是將串口與網絡通信相結合并在實際應用中取得良好效果的一種通信解決方案。
“家校通”是利用現代信息技術實現家庭與學校實時溝通的教育網絡平臺,其組成部分為:家校互聯卡、讀卡器、無線網關、網絡控制器、短信發射接收機。網絡控制器的主要功能是通過無線網關從讀卡器獲取信息,并與互聯網服務平臺進行網絡通信,是家校通系統的核心。
2 網絡控制器的硬件平臺
根據網絡控制器的功能要求,考慮整體的性能、價格方面,CPU采用Rabbit2000單片機,他是Z-World公司特別為中小型控制器而設計的高性能8位微處理器。編譯環境為Dynamic C,提供Socket級TCP/IP編程。網絡控制器的硬件結構如圖1所示。
3 應用層通信協議
3.1 網絡控制器與讀卡器的串口通信協議
網絡控制器與讀卡器的通信主要通過異步串行RS 485接口,基于通用串行通信RS 485數據傳輸單元(字節格式)有不帶校驗位的10 b和帶奇偶校驗位的11 b兩種數據格式。為了提高數據傳送的效率和可靠性,采用無奇偶校驗位的10 b數據格式,并由BBC校驗生成校驗碼與數據一起發送。
開始標志讀卡器地址信息長度命令和參數校驗
2 B1 B2 B14 B1 B
(3)命令字:
A1:從讀卡器讀取一條記錄。
A2:控制器正確接收記錄信息后,返回更新記錄的讀地址命令,使地址指針指向下一條記錄。
A4:設置校正讀卡器時間。
A6:測試控制器與讀卡是否正常通信。
3.2 網絡控制器與服務平臺的網絡通信協議
網絡協議通常分不同的層次進行開發,每一層分別負責不同的通信功能。TCP/IP通常是一個4層協議,包括數據鏈路層、網絡層(含IP協議)、傳輸層(含TCP協議)和應用層。本網絡協議就是基于TCP/IP協議之上的應用層協議,采用請求應答的通信模式。考慮到協議的可靠性和實現的方便性,數據采用ASCII碼表示。
(1)報文組成
4 通信技術
控制器建立socket連接后,向服務器發送連接請求和數據傳輸,并實時判斷連接的有效性,在有效連接的狀態下,實現控制器、服務器、讀卡器三者的正常通訊,程序流程如圖2所示。
4.1 網絡通信技術的實現
socket初始化: 首先要對RTL8019AS的控制寄存器進行初始化配置,Dynamic C已將這部分配置封裝成函數放入REALTEK.LIB庫中,應用時只需調用相關函數。之后再調用函數庫dcrtcp.lib中的幾個簡單函數可完成socket的初始化,以下是程序的主體框架。
#define TCPCONFIG1
#memmapxmem
#usedcrtcp.lib
main()
{
sock[CD#*2]init( );
while(ifpending(IF[CD#*2]DEFAULT)==IP[CD#*2]COMING[CD#*2]UP)
tcp[CD#*2]tick(NULL);
tcp[CD#*2]open(socket,0,destIP,sockport,1);
…… ……
}
在建立TCP的連接中,Dynamic C有兩種方法打開TCP socket:一種是被動的方式,調用函數tcp[CD#*2]listen(),等待客戶端進行連接;一種是主動的方式,調用函數tcp[CD#*2]open(),根據相應的參數(IP地址和端口號)主動連接到服務器端。本通信技術采用的就是主動方式(作為客戶端)。
Socket數據的發送與接收:數據發送調用sock[CD#*2]write(socket,str[CD#*2]send,str[CD#*2]send[CD#*2]len)。在讀取socket緩沖區數時,先判斷緩沖區中是否有數據,有數據再進行讀操用,同時有超時設置。
start[CD#*2]time=SEC[CD#*2]TIMER;
/*SEC[CD#*2]TIMER為秒級系統時間*/
end[CD#*2]time=start[CD#*2]time;
while((end[CD#*2]time !recv[CD#*2]count)/*READ[CD#*2]TIME為設定的等待時間*/ { str[CD#*2]recvbuf[CD#*2]len=sock[CD#*2]bytesready(socket); /*判斷socket讀緩沖區是否有數據*/ if(str[CD#*2]recvbuf[CD#*2]len>0) recv[CD#*2]count=sock[CD#*2]read(socket,str[CD#*2]recvbuf, str[CD#*2]recvbuf[CD#*2]len); /*讀socket*/ } if(revc[CD#*2]count) {…… ……} /*拆分接收到的命令字,讀取有效信息*/ else break; 4.2 串口通信技術的實現 主要包含3個步驟:命令字的組合,設置串口D,通過設置Rabbit2000的PE3來控制數據的發送與接收。以A6命令為例,程序主體框架如下: command[0]=0xA6;/*A6命令*/ create[CD#*2]command(addr,command,pack); /*組合命令字*/ serDopen(9600);/*9600為波特率*/ send[CD#*2]command(command,returnlen);/*發送數據*/ read[CD#*2]command(readbuf,sizeof(readbuf),10); /*接收數據*/ void send[CD#*2]command(char *pack,int len) { int i; WrPortI(PEDR, PEDRShadow,0x08); WrPortI(PEB3R,NULL,0); for(i=0;i serDputc(pack[i]); } int read[CD#*2]command(char *buf,int len,int time) { int i[CD#*2]return; WrPortI(PEB3R,NULL,1<<3); i[CD#*2]return=serDread(buf,len,time); return i[CD#*2]return; } 5 數據采集與分析 網絡控制器聯網正常運行時,向服務器發送的一包測試記錄數據為: 對數據包進行分析:0244為數據包的總長度,01為協議版本號,02為命令字,000003為序列號,21000102*****為設備號,09為數據包中的刷卡記錄總數,0080D122為測試卡號,07070414152715為刷卡時間(順序為年周月日時分秒),03為狀態。 采集從服務器返回的命令:001501020000031,其中 列號,1為正確接收。返回命令格式符合協議要求,內容正確。 網絡控制器向讀卡器發送的命令(以A6為例): aa ff 01 00 03 a6 41 41 f1,其中aa ff表示本命令為控制器發給讀卡器,01為讀卡器地址,00 03為數據長度,a6為命令字,41 41為測試數據,f1為校驗位。 采集從讀卡器返回的命令:bb ff 01 00 02 41 41 47 d1 22 07 07 04 14 15 42 17 1 6b 00 00 00,其中bb ff表示本命令為讀卡器發給控制器,01為讀卡器地址,00 02為數據長度,41 41為測試數據,47為校驗位,之后的為無效數據。 6 結 語 基于Rabbit2000實現串口與網絡結合的通信技術可以實時、準確地對數據進行處理、發送與接收。由采集到的數據表明數據收發的正確性,證明了本通信技術的可行性與可靠性。本通信技術已在家校通系統中取得了良好的通信效果,并可應用于其他數據傳輸系統中,具有廣泛的發展前景。 參 考 文 獻 [1]Z-World Inc.Rabbit2000 Microprocessor Designer′s Hand-book,2003. [2]Z-WorldInc.Dynamic C TCP/IP User′s Manual,2003. [3]林麗,朱宏.基于Rabbit2000的網絡通信技術[J].福建電腦,2005(4):45-46. 作者簡介 魏 紫 女,1982年出生,遼寧沈陽人,碩士研究生。主要從事電力電子技術與電子信息通信方向的研究。 注:“本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文。”