999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

嵌入式RFID校園考勤系統的應用與研究

2012-10-20 08:35:50孫宏偉
微型電腦應用 2012年9期
關鍵詞:頁面嵌入式數據庫

孫宏偉

0 引言

為了保證教學質量,也為了督促學生積極參加教學活動,上課點名成了大學校園內的一道獨特的風景線,任課的老師通常承擔了義務點名的責任。但這項工作既費時又費力,分散了老師的教學精力,逃課現象也依舊存在,效果并不如人意。

面對這一兩難的窘境,無疑可以用非人工的方式完成這項工作。校園卡如今已經成為了最普遍的標示學生身份的證件,大部分的校園卡還具備了借閱圖書、吃飯、洗浴等功能。

由此,本文將從原理上探討一個可以完成從考勤、記錄保存、記錄查詢,分析一系列步驟的校園卡考勤查詢管理系統。

1 設計思想

基于校園卡現有的RFID無線射頻技術,校園卡考勤,需要得到校園卡的一個唯一標識號即可完成考勤記錄。該考勤系統的基本工作流程如下:

課前學生憑各自的校園卡(基于RFID無線射頻技術)刷卡后進入教室。刷卡成功后 RFID模塊通過 Wiegand-26標準協議,將數據發送給嵌入式終端設備,設備端應用程序,是運行于嵌入式Linux下的后臺應用程序,該程序讀取RFID模塊的傳入信號,并將其解析后,得到一個校園卡的 PID號。

接著,嵌入式設備通過與服務器的 Socket連接,將所有從RFID模塊讀取到的數據連同時間戳以及教室編號,發送至服務器接收程序。

服務器接收程序與嵌入式設備上的發送程序緊密配合,負責將接收到的數據再存儲值入整個系統的“數據中心”——MySQL數據庫中。

最后,應用的中心便建立在這個集中的數據庫中,基于考勤記錄數據,可以進行多方面的應用,本考勤管理查詢系統實現的一個 JSP網站應用,可以通過瀏覽器登錄考勤網站,進行考勤記錄的多功能查詢。

2 嵌入式設備端的應用

2.1 無線射頻技術

考勤系統中最前端的部分,便是嵌入式設備,校園卡普遍采用的是RFID(電子標簽、射頻識別)技術,因此,嵌入式設備端,安裝有一個RFID射頻識別模塊,專門負責讀取校園卡中的ID標志。

RFID射頻識別,是一種非接觸式的自動識別技術,通過射頻信號自動識別目標對象并獲取相關數據,可工作于各種惡劣環境。在校園卡考勤這一應用中, RFID系統可以簡單地概括為兩個部分:校園卡和識別校園卡編號的RFID模塊。

在本系統中,唯一需要記錄的是學生持校園卡進行刷卡的校園卡編號和刷卡時間,一旦記錄下這些數據,就可以結合更復雜的后臺數據,支撐起一個比較完整的查詢系統。

RFID模塊使用了標準的 Wiegand-26接口傳輸信號。Wiegand接口通常由3根線組成,分別是:數據0(Data0),數據1(Data1)和Data return。這3條線負責傳輸Wiegand信號。D0,D1在沒有數據輸出時都保持+5V高電平。若輸出為0,則D0拉低一段時間,若輸出為1,則D1拉低一段時間。

考勤系統使用的校園卡識別設備,就是采用Wiegand-26標準協議的,Data0和Data1兩根發送數據信號的線,分別連接到嵌入式設備的兩個IO端口上,在嵌入式Linux操作系統中,通過加載自定義驅動程序來訪問Data0和Data1。

在加載了RFID驅動模塊之后,嵌入式Linux中使用簡單的代碼,就可以對RFID讀卡數據信號進行讀取了。

而在考勤系統中需要使用到的校園卡 PID值,則如前文所述,是wiregen變量中第10位至25位總共16位值。取得校園卡PID值之后,便可將該PID值發送給服務器數據接收程序了。

2.2 Socket連接的通訊技術

取得了能夠區分不同校園卡的 PID值之后,接下來需要將校園卡 PID數據、刷卡所在教室的考勤設備編號、時間發送給遠程服務器。

數據的發送和接收使用的是Socket套接口連接。Socket接口是TCP/IP網絡的API,Socket接口定義了許多函數和例程。

嵌入式終端客戶端采用 C語言編寫,通過 Linux下的Socket與服務器主機上的Java程序建立的服務器Socket相連接。

首先,每一個 Socket連接都有一個整數描述字來唯一地進行標識。另外,客戶端程序需要一個sockaddr_in結構體來指定連接到服務器的地址和端口等信息,接下來,先簡單敘述建立設備端Socket程序的基本流程。

2.2.1 創建TCP套接口

Socket函數創建AF_INET字節流(SOCK_STREAM)套接口。該函數返回了一個整數描述字,在以后的函數調用中,都是用這個整數值來標識這個套接口。

2.2.2 指定服務器IP地址和端口

首先將server結構體清零,服務器的IP地址來自程序執行參數arg[1],端口號定義為12313,填入sockaddr_in結構體server中。置地址簇為AF_INET。Htons函數意為“從主機到網絡短整數”,將端口地址值轉換成主機無關的網絡字節序。gethostbyname把ASCII字符串參數變換到合適的地址格式。

2.2.3 與服務器鏈接

在對Socket進行上述簡單配置后,即可嘗試用connect函數與服務器進行連接:

嘗試在fd套接口上建立一個到server服務器的連接。其中connect函數的參數fd就是前面建立socket時返回的套接口描述字,而server是描述服務器連接參數的結構體。如果連接成功,該函數返回0,錯誤則返回-1,在終端上會顯示提示連接失敗,并直接退出應用程序,終止數據發送。

2.2.4 與服務器間的通訊

在與服務器成功連接后,就可以使用 send()和recv()函數進行服務器/客戶端之間的信息收發了。考勤系統設備端代碼實現如下:

通過send函數,將data所指向的數據緩沖區中的數據發送的套接口描述字fd所指代的socket連接。發送后執行一次接收函數recv(),該函數的作用旨在發送數據之后總應當要求服務器端作出一個回應。更多的應用甚至可以通過該回應消息來判斷服務器的狀態。

2.2.5 關閉鏈接

當客戶端完成數據的發送,并且得到服務器的適當回應之后,就應該關閉Socket鏈接,以讓操作系統回收該Socket鏈接。

關閉套接口和關閉文件是一樣的,調用close(fd)即可關閉Socket描述字對應的Socket套接口。

2.3 客戶端的數據結構

考勤設備數據發送程序持有 PID數據,但是,為了能夠讓服務器知道客戶端發送來的數據具體是什么內容,在客戶端和服務器之間需要共同遵守一個固定數據序列協議,數據流中的前4個字節表示終端所對應的教室編號(或者可以簡單地看作設備編號),接下來4個字節表示后面緊接著的數據流包含的記錄數量,每條記錄含有10個字節的數據,每條記錄的前2個字節代表刷卡PID值(16位),后8個字節代表產生本條記錄的時間(即刷卡時間)的 64位Timestamp表示法。當所有的數據發送完畢后,是任何情況下都固定不變的3個字節“END”,如果服務器接收時,沒有在結尾處遇到這3個字節的結尾符,那么服務器控制臺將會發出一個警告消息。

在目前的客戶端代碼中,只是簡單地對每一條數據進行一次打包發送(即count=1),當然,如果網絡或其他限制比較嚴重的情況下,完全可以采用更好的算法進行多條數據的打包。

客戶端代碼通過dataPacker()函數對PID進行打包,將教室ID、PID、時間、結尾符填入數據緩沖區后,直接交由Socket函數send()發送給服務器端。

2.4 服務器數據接收

服務器端采用Java程序作為服務器程序,在java.net.*類庫中通過構造一個ServerSocket類的實例就可以使服務器檢測到指定端口的數據。

服務器端 Java程序是 JTeaching Affair Server,JTeaching Affair Server的主類是org.sun.ts.ui.System Controller,這個類就包含有一個私有的java.net.Server Socket對象,在程序初始化時創建,監聽端口12313上的Socket連接請求,然后程序就進入一個無限循環,每當 server.accept()返回時就建立一個Receiver線程來進行數據接收,主線程進入下一次循環,等待下一個 Socket連接請求,因此,無論客戶端同時發起多少個 Socket連接請求,都不會被阻塞,而是直接得到服務器的響應。

Receiver是自定義的一個System Controller類的靜態內部類,繼承自Thread類:在這個專門用來接收數據的類中,由線程主體run()函數來完成處理邏輯。在Receiver類的構造函數中,會將參數提供的socket連接引用保存的自己的私有成員變量中供 run()使用,在 run()函數中,按照客戶端/服務器共同遵守的打包/解包協議進行數據傳輸處理,分別接收教室 ID,記錄數量,各條記錄以及結尾字符串。Java中對socket連接數據的讀取和發送,已經被抽象成為最普通的緩沖區讀寫操作,

首先獲得socket連接上的輸入流對象,然后將其作為構造參數構造一個 java.io.Input Stream Reader對象,專門用于進行流讀取操作,但 Input Stream Reader類依然是一個相對底層的IO操作類,因此,這里再一次將其作為構造參數,將實際是對 socket數據流的操作,最終委托給高度抽象的Buffered Reader對象。

按照之前定好的通訊協議,數據流中的前4個字節代表的是考勤設備編號(或者可以等價地說是教室編號):

int room = in.read()*1000 + in.read()*100 + in.read()*10+in.read();

設備編號讀取完,接下來的連續四個字節代表的是本數據包所包含的記錄條數,利用同樣的方法進行解析:

有了上述數據,便可推算出整個數據包剩余的字節數量,進而對其中包含的數據記錄逐一進行解析。總的思想如下:

讀取記錄PID值,占兩字節;

讀取記錄時間戳,占8個字節;

將 PID、時間戳、連同教室編號信息數據存入考勤記錄數據庫中;

}

接下來逐步解決上述思想中的各個步驟。

首先,取得PID值,即數據條目的前兩個字節:

接著連續8個字節表示時間,這里8個字節實際表示的是一個64位整數,是標準的Timestamp表示法,即從1970年1月1日0時0分0秒起至今的毫秒數,數據取法同取PID值類似,每取一個字節進行一次移位即可。

然后,Timestame對象有一個構造函數可以直接接受一個64位的long值參數作為時間戳數據。

這樣一來,考勤數據庫記錄所需要的校園卡 PID值、刷卡時間值、刷卡教室編號都已經成功獲取,利用MySQL數據庫Java Connector接口,將上述數據逐條插入到數據庫表中記錄。每取到一條記錄,就使用INSERT語句將其插入到數據庫的primitive表中:

當處理完所有的數據,檢查好結尾符后,就要關閉數據庫連接,方法是類似的,只要對所創建的java.sql.Connection類對象實例調用其close方法即可。接著向客戶端發送一條提示消息,以表示正常接收了,Java中字符串是UTF-8編碼的,而這條消息此處只包含了英文,因此嵌入式Linux終端可以正常顯示。

這樣,服務器端一個線程的數據接收就基本結束了,最后調用Socket對象的close()方法關閉這個Socket連接,釋放系統資源,就完成了從客戶端到服務器數據傳輸的整個過程。

3 考勤記錄的數據庫

存儲考勤記錄的數據庫,采用開放源代碼的MySQL數據庫,作為考勤管理查詢網站的后臺數據庫。MySQL是一個開放源碼的小型關系型數據庫管理系統,具有體積小、速度快、總體擁有成本低等特點。

考勤記錄數據庫涉及的所有數據庫表編碼,都采用utf-8格式編碼,即MySQL默認編碼就設定成utf-8。也可以在數據表定義時加上后綴DEFAULT CHARSET=utf8來特別設定編碼。

接下來,是整個查詢系統所涉及到的所有考勤記錄相關數據庫表。

teachingaffiar數據庫共有9個表格,如圖1所示:

圖1 teachingaffair數據庫

建立好上述數據庫環境后,即可在服務器程序和JSP網站中對數據庫進行操作了。要在 Java程序中使用 MySQL數據庫,需要使用MySQL connector for Java,對于一般的Java應用程序在 CLASS PATH 中加入對mysql-connector-java-5.1.6-bin.jar的引用即可,對于Web網站,需要在網站根目錄/WEB-INF/lib中有 mysql-connectorjava-5.1.6-bin.jar這個文件。

在完成對本次鏈接的操作后需要用 conn.close()關閉此次數據庫鏈接,釋放相關資源。

4 建立查詢網站

4.1 網站頁面

JSP頁面由HTML代碼和嵌入其中的Java代碼所組成。考勤管理查詢系統的JSP考勤查詢網站中,頁面內容在很大程度上,僅僅依靠XHTML配合Javascript呈現動態頁面,JSP指令在頁面中,承擔的主要責任是一些動態的地址賦值和身份驗證賦值運算。而Java Servlet則負責對HTTP請求產生動態的 XML文檔輸出。XML文檔在考勤管理查詢網站中,承擔著極其重要的中間人角色,在服務器——網站頁面——用戶之間建立了一座簡單通用的數據呈現的橋梁。

4.2 功能頁面

JSP頁面按各種功能分類進行頁面組織,首先在 Web根目錄下有一個 index.jsp表示系統首頁,用作用戶驗證登錄界面。所有頁面必須要用戶登錄之后才可見,本系統使用session設置用戶身份驗證來阻止未登錄用戶訪問受限制頁面。

主要頁面分:以學生、課程、教師為主要條件的查詢頁面;分別添加學生、班級、教師的添加操作頁面;一些輔助頁面,如導航側邊欄、標題欄、腳注欄等,都以內嵌頁面的方式嵌入在上述主要頁面中。

4.3 主要頁面流程

在眾多頁面中,pageTitle.jsp是secure目錄下,所有主要頁面都包含的子頁面,是代表頁面標題的內嵌頁。pageFoot.jsp則是secure目錄下,所有主要頁面都包含的代表頁面頁腳的內嵌頁。

Navigator.jsp是大部分主頁面共有的一個位于頁面左側的導航欄內嵌頁面。如果用戶是按照正常的流程登錄到secure下的頁面的,注意到實際“登錄”按鈕執行的是Javascript腳本函數 jsActionLogon(),該腳本函數完成一個很簡單的登錄流程。

一旦登錄成功,用戶的信息將被保存在相應session的userSig屬性中,無論用戶定位到secure目錄下的哪個頁面中,都可以正常訪問了。

queryStudent.jsp是一個查詢特定學生某一門課的考勤記錄的頁面。打開該頁面的初始情況,如圖2所示:

圖2 學生查詢

在姓名一欄中輸入學生姓名,在時間過濾中選擇要查詢的課程年份,點擊“繼續”按鈕后會出現一個列表框,顯示所有符合過濾條件的學生學號,隨后選擇需要查詢的學號,點擊“繼續”按鈕,系統會在列表中顯示該學生在該學年中參與的所有課程,選擇要查詢的課程,再點擊“繼續”按鈕,表格即顯示該學生的所選課程的考勤記錄,內容包含4個主要字段:“上課時間”、“刷卡時間”、“教室”和“狀態”。此外,當鼠標移動到“上課時間”的數據上時,同時顯示出下課時間(預設每堂課課時為40分鐘)。

5 總結

整個實現通用的流程如下:

1) 建立XMLHttpRequest請求,向服務器發出HTTP POST請求。

2) 在成功得到服務器正確響應的情況下,利用 Mootools提供的腳本功能,迭代XML文檔中的item元素,并為每一個item元素的子項構造單元格。

3) 對XML文檔中的相對原始數據進行一定的計算處理,并在相應的單元格中,顯示相對應的計算結果,比如是否遲到的判定,是通過Javascript腳本中計算XML文檔中,提供的數據得到的,而不是服務器直接判定好的狀態結果。

4) 每處理一個item元素,就表示表格中的一行數據,切換當前行的背景顏色。

5) 完成表格的創建。如果可選的“下載Excel表格”或者“發送Email”被選擇了,那么在服務器上,會另外產生一個URL地址,可以形成一份當前記錄表格的Excel表格文檔,和一封HTML表格方式組織的自動EMail發送到指定的郵箱地址中。

[1]Richard Stevens W、Bill Fenner、Andrew M.Rudoff,UNIX Network Programming(Volume 1):The Sockets Networking API,Third Edition,The People's Posts and Telecommunications Press,2010.7.1

[2]Paul DuBois,MySQL [M]Cookbook(2th Edition),O’Reilly,2006.11

[3]張洪偉,Tomcat Web開發及整合應用,[R]清華大學,2006.2.1

[4]劉曉華、張健、周慧貞,JSP應用開發詳解,[j]電子工業,2007.1

[5]David Flanagan,JavaScript權威指南,[C]O’Reilly,2007.5

[6]夏慧軍、魏雪輝,深入淺出Ajax,[j]電子工業,2007.4

猜你喜歡
頁面嵌入式數據庫
大狗熊在睡覺
刷新生活的頁面
保健醫苑(2022年1期)2022-08-30 08:39:14
搭建基于Qt的嵌入式開發平臺
數據庫
財經(2017年2期)2017-03-10 14:35:35
嵌入式軟PLC在電鍍生產流程控制系統中的應用
電鍍與環保(2016年3期)2017-01-20 08:15:32
數據庫
財經(2016年15期)2016-06-03 07:38:02
數據庫
財經(2016年3期)2016-03-07 07:44:46
數據庫
財經(2016年6期)2016-02-24 07:41:51
Altera加入嵌入式視覺聯盟
倍福 CX8091嵌入式控制器
自動化博覽(2014年4期)2014-02-28 22:31:15
主站蜘蛛池模板: 亚洲无码高清一区二区| 波多野结衣无码中文字幕在线观看一区二区| 欧美天堂在线| 国产欧美日韩免费| 性色生活片在线观看| 成人精品免费视频| 国产成人亚洲精品色欲AV| 9久久伊人精品综合| 国产日产欧美精品| 久久久四虎成人永久免费网站| 中文字幕2区| 欧美激情综合| 亚洲va视频| 性色在线视频精品| 亚洲成人在线免费观看| 国产精品久久国产精麻豆99网站| 日本一区高清| 精品久久777| 欧美日韩国产系列在线观看| 亚洲无限乱码一二三四区| 毛片在线看网站| 毛片免费在线视频| 91在线播放国产| 亚洲av无码专区久久蜜芽| 精品超清无码视频在线观看| 高清不卡一区二区三区香蕉| 亚洲自拍另类| 亚洲欧美成人综合| 亚洲伊人天堂| 色综合综合网| 久草视频中文| 奇米影视狠狠精品7777| 日韩精品成人在线| 2021国产在线视频| 国产日韩欧美在线播放| 一级成人a毛片免费播放| 69av免费视频| 欧美97色| 日韩国产精品无码一区二区三区| 一边摸一边做爽的视频17国产| 国产自在线播放| 国产啪在线91| www.精品视频| 久青草国产高清在线视频| 国产欧美视频在线观看| 国模极品一区二区三区| av在线无码浏览| 成人精品视频一区二区在线| 亚洲精品无码久久毛片波多野吉| 日韩大乳视频中文字幕| 亚洲系列无码专区偷窥无码| 国产噜噜噜视频在线观看 | 亚洲欧美日韩成人在线| 欧美天堂久久| 手机精品视频在线观看免费| 久久这里只精品国产99热8| 久久亚洲国产视频| 女人av社区男人的天堂| 日韩色图区| 亚洲精品麻豆| 国产免费久久精品99re不卡 | 久久性妇女精品免费| 国产成人盗摄精品| 国产精品网址你懂的| 九九精品在线观看| 成人国产小视频| 丁香婷婷激情网| 亚洲第一网站男人都懂| 日本免费福利视频| 在线观看免费人成视频色快速| 麻豆AV网站免费进入| 欧美色图久久| 精品视频一区在线观看| 久久婷婷五月综合色一区二区| 毛片免费试看| 一级不卡毛片| 亚洲乱码精品久久久久..| 欧美精品三级在线| 亚洲AV无码乱码在线观看裸奔 | 波多野结衣无码中文字幕在线观看一区二区 | 天天色天天综合| 久久99精品国产麻豆宅宅|