張波
摘要:本文主要討論了多媒體教室遠(yuǎn)程管理系統(tǒng)的軟件設(shè)計(jì)部分。下位機(jī)軟件模塊包括主程序、射頻讀卡子程序和網(wǎng)絡(luò)通信子程序,網(wǎng)絡(luò)通信子程序模塊重點(diǎn)闡述了TCP協(xié)議驅(qū)動(dòng)層的基本方法和TCP連接建立的三次握手過(guò)程;上位機(jī)軟件模塊主要是監(jiān)控主程序,重點(diǎn)闡述消息包的處理過(guò)程;數(shù)據(jù)接口通過(guò)一卡通和教務(wù)的web服務(wù)接口完成數(shù)據(jù)同步。最后,總結(jié)了系統(tǒng)的設(shè)計(jì)意義。
Abstract: This article mainly discusses the software design of multimedia classroom remote management system. The software cludes lower machine contains main program, RFID subroutine and network communications subroutine. The network communications subroutine focuses on basic methods of TCP protocol driver layer and the process of TCP's three handshake; the main software of upper monitor is monitor master program. The article particularly explains processing procedure of the message packets; the data interfaces complete data synchronization through the web services provided by campus card system and educational administration system. Finally, the article concludes the system's design significance.
關(guān)鍵詞:多媒體教室;上位機(jī);下位機(jī);TCP協(xié)議;Web服務(wù)
Key words: multimedia classroom;upper monitor;lower machine;TCP protocol;Web services
中圖分類(lèi)號(hào):G434 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1006-4311(2016)05-0195-03
0 引言
隨著多媒體教學(xué)的日益普及,各個(gè)學(xué)校的多媒體教室數(shù)量在迅速增長(zhǎng)。在現(xiàn)有管理人員不變的情況下,如何更加高效的管理多媒體教學(xué)設(shè)備成為學(xué)校迫切需要解決的問(wèn)題。本論文從技術(shù)的角度給出一種遠(yuǎn)程監(jiān)控管理多媒體教室設(shè)備的方案。
系統(tǒng)硬件是基于Silabs公司的C8051F020單片機(jī)進(jìn)行開(kāi)發(fā)的,外圍電路主要分為四個(gè)模塊:設(shè)備控制模塊、射頻讀卡模塊、網(wǎng)絡(luò)通信模塊和時(shí)鐘發(fā)生模塊。射頻讀卡模塊采用Philips公司的MFRC522射頻讀卡芯片,網(wǎng)絡(luò)通信模塊采用Silabs公司的CP2200以太網(wǎng)控制器。硬件接線圖在這里不是重點(diǎn),本文主要討論系統(tǒng)上位機(jī)和下位機(jī)軟件設(shè)計(jì)部分。
1 下位機(jī)軟件設(shè)計(jì)
1.1 系統(tǒng)主程序設(shè)計(jì)
系統(tǒng)主程序如圖1所示。C8051F020單片機(jī)(以下簡(jiǎn)稱(chēng)下位機(jī))在沒(méi)有通電的情況下,服務(wù)器(以下簡(jiǎn)稱(chēng)上位機(jī))組態(tài)軟件顯示中控為離線狀態(tài)。當(dāng)下位機(jī)上電復(fù)位完成初始化以后,網(wǎng)絡(luò)模塊會(huì)以TCP協(xié)議自動(dòng)連接上位機(jī)端口,上位機(jī)組態(tài)軟件顯示中控為在線狀態(tài)。在線狀態(tài)下,下位機(jī)會(huì)循環(huán)判斷是否有IC卡在識(shí)別區(qū),如果讀得卡號(hào)則推送給上位機(jī)進(jìn)行驗(yàn)證,如果上位機(jī)一直沒(méi)有回應(yīng)(超過(guò)3秒)則通過(guò)查詢本地flash存儲(chǔ)進(jìn)行驗(yàn)證。下位機(jī)會(huì)一直監(jiān)聽(tīng)上位機(jī)的控制指令并完成對(duì)周邊多媒體設(shè)備的控制。下位機(jī)每15秒種向上位機(jī)發(fā)送保持在線狀態(tài)的心跳包,同時(shí)每1小時(shí)發(fā)送一次下位機(jī)flash存儲(chǔ)數(shù)據(jù)表更新的請(qǐng)求包以盡量保持和一卡通賬號(hào)數(shù)據(jù)及教務(wù)課表數(shù)據(jù)一致。下位機(jī)根據(jù)設(shè)備控制模塊鍵盤(pán)電路的中斷請(qǐng)求,讀取鍵值并執(zhí)行。
1.2 射頻讀卡子程序設(shè)計(jì)
射頻讀卡子程序如圖2所示。MFRC522初始化完成之后,通過(guò)尋卡-防沖撞-選卡三步循環(huán)讀物理卡號(hào),然后將讀取的物理卡號(hào)提交至服務(wù)器進(jìn)行身份驗(yàn)證。如果在3秒內(nèi)收到服務(wù)器返回的通過(guò)驗(yàn)證命令,系統(tǒng)就直接打開(kāi)電源輸出,否則就認(rèn)為是網(wǎng)絡(luò)故障或離線狀態(tài),先從時(shí)鐘芯片讀取當(dāng)前日期時(shí)間段,然后查詢下位機(jī)本地flash存儲(chǔ)進(jìn)行工號(hào)驗(yàn)證。這樣設(shè)計(jì)既保證網(wǎng)絡(luò)在線的情況下教師能夠完成刷卡身份驗(yàn)證,又保證了網(wǎng)絡(luò)故障或離線的情況下教師同樣可以正常使用多媒體設(shè)備。
1.3 網(wǎng)絡(luò)通信子程序設(shè)計(jì)
網(wǎng)絡(luò)通信模塊軟件主要包括模塊初始化程序、CP2200驅(qū)動(dòng)程序以及嵌入式TCP/IP協(xié)議棧三部分,其中CP2200驅(qū)動(dòng)程序主要完成接收網(wǎng)絡(luò)數(shù)據(jù)以及向網(wǎng)絡(luò)發(fā)送數(shù)據(jù)的工作。由于嵌入式Internet系統(tǒng)軟硬件資源有限并且通常功能需求較少,因此在構(gòu)造嵌入式TCP/IP協(xié)議棧的時(shí)候可以對(duì)TCP/IP協(xié)議進(jìn)行裁剪。本系統(tǒng)設(shè)計(jì)的嵌入式TCP/IP協(xié)議棧只選取了三項(xiàng)協(xié)議:ARP、IP和TCP,以下將重點(diǎn)闡述下位機(jī)的TCP模塊。
TCP(傳輸控制協(xié)議)是建立在IP協(xié)議之上的運(yùn)輸層協(xié)議。由于加入端口(port)的功能,實(shí)現(xiàn)了傳輸通道的復(fù)用和分用功能。TCP數(shù)據(jù)報(bào)首部為20~60字節(jié),是一種面向連接的,能提供可靠數(shù)據(jù)傳輸?shù)姆?wù)。TCP協(xié)議功能主要由TCP初始化函數(shù)init_tcp()、TCP?;詈瘮?shù)tcp_inactivity()、TCP發(fā)送函數(shù)tcp_send()、TCP接收函數(shù)tcp_rcve()和TCP重傳函數(shù)tcp_retransmit()實(shí)現(xiàn)。
在和上位機(jī)建立tcp連接時(shí),需要進(jìn)行三次握手才能完成,如圖3所示。第一次握手下位機(jī)發(fā)送請(qǐng)求包,之后下位機(jī)將收到上位機(jī)的應(yīng)答兼請(qǐng)求包并回發(fā)應(yīng)答包開(kāi)始第二次握手,上位機(jī)收到下位機(jī)的應(yīng)答包之后再回發(fā)應(yīng)答包進(jìn)行第三次握手,此后雙方的tcp連接建立完成。在連接已經(jīng)建立的狀態(tài)下,下位機(jī)在收到一個(gè)tcp包時(shí),先將對(duì)應(yīng)連接對(duì)象的上位機(jī)請(qǐng)求號(hào)增加接收數(shù)據(jù)的長(zhǎng)度,并且將下位機(jī)請(qǐng)求號(hào)和上位機(jī)應(yīng)答號(hào)都置為tcp包應(yīng)答號(hào),然后再發(fā)應(yīng)答包。上位機(jī)的應(yīng)答號(hào)必須和下位機(jī)的請(qǐng)求號(hào)保持一致,如果應(yīng)答號(hào)小于請(qǐng)求號(hào)則表明下位機(jī)沒(méi)有收到上位機(jī)的應(yīng)答包,下位機(jī)重發(fā)緩存的數(shù)據(jù)包,如果重發(fā)兩次仍然是應(yīng)答號(hào)小于請(qǐng)求號(hào)則直接關(guān)閉該連接。如果是應(yīng)答號(hào)大于請(qǐng)求號(hào)則直接關(guān)閉該連接。重發(fā)的管理過(guò)程是通過(guò)tcp_retransmit()函數(shù)實(shí)現(xiàn)的。Tcp連接的關(guān)閉是通過(guò)四次揮手的過(guò)程完成的,如圖四所示,這里就不贅述具體過(guò)程了。
本系統(tǒng)之所以選擇tcp協(xié)議而不是網(wǎng)絡(luò)開(kāi)銷(xiāo)相對(duì)較低的udp協(xié)議,主要是因?yàn)閠cp協(xié)議能夠很容易的跨越各種網(wǎng)關(guān)和防火墻進(jìn)行通信并且穩(wěn)定性和可靠性更好,如果考慮后期再加入遠(yuǎn)程系統(tǒng)維護(hù)功能模塊則無(wú)疑選用tcp協(xié)議更加合適。至于增加的一點(diǎn)網(wǎng)絡(luò)開(kāi)銷(xiāo),在校園網(wǎng)網(wǎng)絡(luò)設(shè)備端口和帶寬向千兆位甚至更高位發(fā)展的今天,完全可以忽略掉了。
2 上位機(jī)軟件設(shè)計(jì)
2.1 監(jiān)控主程序的設(shè)計(jì)
監(jiān)控主程序如圖5所示,主窗口加載以后便創(chuàng)建用于服務(wù)端偵聽(tīng)的主socket、處理接入的子線程和管理子線程。其中處理接入的子線程負(fù)責(zé)客戶端socket的接入處理,當(dāng)有遠(yuǎn)端連接時(shí),首先創(chuàng)建新的連接對(duì)象和新的連接socket,并進(jìn)行關(guān)聯(lián),然后創(chuàng)建新的連接子線程并進(jìn)行關(guān)聯(lián),最后將連接對(duì)象加入客戶端集合對(duì)象中;管理子線程主要負(fù)責(zé)離線連接對(duì)象的清理、自動(dòng)恢復(fù)和刪除選中的客戶端socket、讀取后臺(tái)數(shù)據(jù)庫(kù)狀態(tài)并更新樹(shù)形列表和查詢數(shù)據(jù)庫(kù)顯示當(dāng)前教室狀態(tài)。它首先循環(huán)遍歷客戶端集合對(duì)象結(jié)構(gòu)中的每一個(gè)連接對(duì)象,然后將超時(shí)的對(duì)象剔除,超時(shí)的判斷根據(jù)是連接對(duì)象的刷新時(shí)間與當(dāng)前時(shí)間間隔超過(guò)20秒,剔除之前應(yīng)關(guān)閉對(duì)應(yīng)的遠(yuǎn)端socket和連接子線程并且更改其狀態(tài)為離線,之后將后臺(tái)數(shù)據(jù)庫(kù)教室節(jié)點(diǎn)中控狀態(tài)設(shè)置為離線。下面的讀取后臺(tái)數(shù)據(jù)庫(kù)狀態(tài)并更新樹(shù)形列表就根據(jù)所遍歷節(jié)點(diǎn)的ip地址查詢數(shù)據(jù)庫(kù)中中控的狀態(tài)值,根據(jù)中控狀態(tài)值,為0設(shè)置節(jié)點(diǎn)關(guān)閉,為1設(shè)置節(jié)點(diǎn)打開(kāi),為2設(shè)置離線并從客戶端集合結(jié)構(gòu)中剔除。最后一步,查詢數(shù)據(jù)庫(kù)顯示當(dāng)前教室狀態(tài),就是根據(jù)當(dāng)前選擇教室號(hào)從數(shù)據(jù)庫(kù)中查詢中控狀態(tài)值、投影機(jī)狀態(tài)值、主機(jī)狀態(tài)值和投影燈泡時(shí)間,然后根據(jù)這些值去更新右側(cè)下方的標(biāo)簽。這里需要注意的是為了避免子線程間使用同一數(shù)據(jù)連接對(duì)象對(duì)數(shù)據(jù)庫(kù)操作發(fā)生意外沖突,建議每個(gè)子線程用不同的數(shù)據(jù)庫(kù)連接對(duì)象操作數(shù)據(jù)庫(kù),單個(gè)方法過(guò)程的數(shù)據(jù)操作只需要打開(kāi)關(guān)閉數(shù)據(jù)庫(kù)一次即可,這樣可以提升數(shù)據(jù)庫(kù)讀寫(xiě)效率。
監(jiān)控程序處理各種類(lèi)型的消息包是由單獨(dú)啟動(dòng)一個(gè)連接子線程進(jìn)行的,當(dāng)收到有效數(shù)據(jù)包時(shí)首先記錄時(shí)間戳,后面管理子線程會(huì)根據(jù)這個(gè)時(shí)間戳判斷下位機(jī)是否離線。然后判斷是否刷卡消息包,如果是則根據(jù)物理卡號(hào)查詢一卡通表工號(hào),再根據(jù)當(dāng)前時(shí)間段查詢教室課表工號(hào),將這兩個(gè)工號(hào)比較,如果相同則向下位機(jī)返回打開(kāi)命令并更新后臺(tái)教室狀態(tài)數(shù)據(jù)表為打開(kāi),如果不同就不做操作直接返回;如果不是刷卡消息包就判斷是否激活消息包,如果是激活消息并且是第一次激活則修改后臺(tái)教室狀態(tài)為關(guān)閉狀態(tài);如果既不是刷卡消息又不是激活消息則判斷是否為響應(yīng)消息包,如果是響應(yīng)消息包則根據(jù)響應(yīng)的操作修改后臺(tái)教室狀態(tài)數(shù)據(jù)表;如果以上都不是就判斷是否為數(shù)據(jù)更新請(qǐng)求消息包,如果是則查詢對(duì)應(yīng)教室號(hào)的課表數(shù)據(jù)和一卡通數(shù)據(jù)然后發(fā)送給下位機(jī)。
2.2 數(shù)據(jù)接口的設(shè)計(jì)
系統(tǒng)數(shù)據(jù)接口包括一卡通接口和教務(wù)接口兩部分。一卡通接口是調(diào)用一卡通的web service接口,從一卡通原始數(shù)據(jù)表抽取工號(hào)、卡號(hào)和姓名三個(gè)字段,然后經(jīng)過(guò)數(shù)據(jù)格式轉(zhuǎn)換存儲(chǔ)到本地的數(shù)據(jù)表yikatong當(dāng)中供使用;教務(wù)接口是調(diào)用教務(wù)系統(tǒng)的web service接口,從教務(wù)系統(tǒng)原始數(shù)據(jù)表抽取課程名稱(chēng)、教師姓名、上課時(shí)間(含周次和節(jié)次,分號(hào)間隔)、上課地點(diǎn)(和上課時(shí)間對(duì)應(yīng),分號(hào)間隔)四個(gè)字段,然后經(jīng)過(guò)格式轉(zhuǎn)換存儲(chǔ)到本地的數(shù)據(jù)表jiaowu中供使用。
數(shù)據(jù)接口處理當(dāng)中的難點(diǎn)在于數(shù)據(jù)結(jié)構(gòu)和格式的轉(zhuǎn)換。例如原始一卡通表中的卡號(hào)為十進(jìn)制的字符串類(lèi)型varchar(10),可變長(zhǎng)度,最長(zhǎng)為10,而系統(tǒng)需要的是4個(gè)字節(jié)十六進(jìn)制表示的卡號(hào),可以先將獲取的字符串轉(zhuǎn)換成32位無(wú)符號(hào)整形,然后將32位無(wú)符號(hào)整形轉(zhuǎn)換成字節(jié)數(shù)組,最后將字節(jié)數(shù)組作為參數(shù)插入數(shù)據(jù)庫(kù)卡號(hào)字段。再例如原始一卡通表中的工號(hào)是可變長(zhǎng)度字符串類(lèi)型varchar(10),而系統(tǒng)需要的工號(hào)是固定長(zhǎng)度10 char(10),這里只要將原始工號(hào)長(zhǎng)度不滿10的左邊填充0就可以了。而教務(wù)表的整個(gè)數(shù)據(jù)組織結(jié)構(gòu)都和系統(tǒng)不一樣,需要按照工號(hào)、教室號(hào)、時(shí)間段、周次組織數(shù)據(jù),這樣就先要從一卡通根據(jù)姓名查得工號(hào),然后將上課時(shí)間,上課地點(diǎn)按照分號(hào)對(duì)應(yīng)拆解開(kāi),在上課時(shí)間里面再按周次拆解,經(jīng)過(guò)層層循環(huán)拆解最終形成系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)。上課時(shí)間段目前是按照每天5段(1-2,3-4,5-6,7-8,9-10),每周7天一個(gè)循環(huán),也就是一共35段計(jì)算,周次以實(shí)際教學(xué)計(jì)劃為準(zhǔn)。
為了保證數(shù)據(jù)接口的安全調(diào)用,所有的web service調(diào)用必須集成網(wǎng)站的windows身份驗(yàn)證,只有指定的開(kāi)發(fā)者才能夠調(diào)用,使用NetworkCredential類(lèi)便可以安全調(diào)用集成windows身份驗(yàn)證的web service服務(wù)。數(shù)據(jù)接口的調(diào)用方式除了以手動(dòng)點(diǎn)擊按鈕的方式啟動(dòng)外,也可以定時(shí)調(diào)用,為了不影響校園網(wǎng)絡(luò)的運(yùn)行可以在夜間進(jìn)行大數(shù)據(jù)量的同步,教務(wù)臨時(shí)排課盡量提前一天完成,這樣夜間完成同步第二天便是最新的同步數(shù)據(jù)。
3 結(jié)束語(yǔ)
通過(guò)本系統(tǒng),一方面能夠讓管理人員在控制室遠(yuǎn)程監(jiān)控和管理教室設(shè)備,對(duì)于發(fā)生故障的設(shè)備能夠在第一時(shí)間給予維修,提高了設(shè)備的運(yùn)行效率,減少了設(shè)備維護(hù)人員的工作量。據(jù)統(tǒng)計(jì),使用該管理系統(tǒng)以后,設(shè)備維修的平均響應(yīng)時(shí)間縮短75%,教室設(shè)備的平均故障率降低53%,設(shè)備管理人員的維護(hù)工作量減少了68%,師生對(duì)于多媒體教室的使用滿意度大幅度提升。另一方面教師不用領(lǐng)取專(zhuān)門(mén)的講臺(tái)門(mén)禁卡,可以直接用校園卡刷卡使用多媒體教室,更加方便而且利于統(tǒng)一管理。
參考文獻(xiàn):
[1]李慶.基于嵌入式TCP/IP技術(shù)的網(wǎng)絡(luò)型多媒體中控器設(shè)計(jì)[J].陜西科技大學(xué)學(xué)報(bào),2010.
[2]位永輝,劉篤仁.基于MF RC500的非接觸式IC卡讀寫(xiě)器設(shè)計(jì)[J].電子元器件應(yīng)用,2007.
[3]肖俊武,許愛(ài)秋,魯俊偉.利用C8051F020的SMBus實(shí)現(xiàn)時(shí)鐘/日歷芯片讀取[J].電子元器件應(yīng)用,2006.