基于高频的RFID学生考勤管理系统Word格式.docx
《基于高频的RFID学生考勤管理系统Word格式.docx》由会员分享,可在线阅读,更多相关《基于高频的RFID学生考勤管理系统Word格式.docx(35页珍藏版)》请在冰豆网上搜索。
本文设计了一种基于RFID高频学生考勤管理系统,它是基于奥尔斯电子科技XX生产的物联网RFID综合实验系统V1.0。
利用其中的HF模块,嵌入式网关,并连接PC的串口线到嵌入式网关的J28接口。
即可以实现网关控制HF模块,也可以实现PC机对HF模块的控制。
该系统采用13.56M射频识别技术进行学生的门禁考勤管理,学生每人佩戴13.56M无源电子标签一X,作为考勤卡。
用于上课、下课时的考勤记录,只要标签处于读写器的有效识别X围,则阅读器便可自动识别到该标签信息,通过软件系统自动记录考勤信息,同时控制电子锁开门。
关键词:
RFID,高频,学生考勤
一、前言
校园学生考勤是现今日常教学过程中必不可少的一个组成部分,以往,学生的考勤工作主要都由任课教师完全承担,在上课之前几分钟或者是上课后花费几分钟的时间进行全班的点名,然后在学期末用人工的方式观察、分析学生在教学活动中的出席情况。
这样做不但消耗了教学时间、也不具备灵活性。
从记录考勤数据,到分析考勤记录都需要花费教师额外的时间与精力。
基于RFID校园卡考勤管理系统正试图以一种更快捷方便的方式解决考勤过程中的各种问题。
RFID射频识别是一种世界上较为领先的技术:
第一,可以识别单个的非常具体的物体,而不是像条形码那样只能识别一类物体;
第二,其采用无线电射频,可以透过外部材料读取数据,而条形码必须靠激光来读取信息;
第三,可以同时对多个物体进行识读,而条形码只能一个一个地读。
此外,储存的信息量也非常大。
所以被广为使用。
在很多的校园中基于RFID的学生考勤应用系统就是学校管理系统的一个组成部分,它将智能化的完成考察学生出勤情况。
为学校更好的管理学生提供了很大的方便。
校园卡考勤查询管理系统基于RFID技术,这样可以方便集成分布到校园中的每一个教室里。
RFID应用已经全面普及,在校园中学生老师的考勤管理系统更是为学校的管理提供了很大的方便。
校园卡基于RFID无线射频技术,通过射频技术便可获取校园卡中的各类信息,对于校园卡考勤的应用而言,仅仅需要得到校园卡的一个唯一标志号便可完成考勤记录。
它将支持与学生管理系统、考勤管理系统的信息传递,同时可以方便的与“一卡通”系统进行无缝连接。
二、案例描述
2.1、系统核心功能
准确识别门禁考勤卡,并正确记录考勤时间,同时应给出声音提示和图像显示;
1、可以由具有系统管理员权限的操作人员进行方便的录入学生信息,即:
将学生XX、学号、所属学院、专业、班级和考勤卡号,以及照片图像存入数据库;
2、可以通过计算机方便的查询每一个人的考勤详细记录;
3、可进行操作人员录入、权限限定、系统参数等功能设定;
4、可进行节假日和日期的设定。
5、可进行迟到、出差、请假录入等功能设定;
6、可设置多种系统查询功能,并可以打印报表或导出EXCEL文件等文件格式。
2.2、实施步骤
1、用户管理
用户分管理员和普通用户两种,管理员可以执行增加删除修改等各种操作,普通用户只能查看。
数据库中现有三种用户,管理员-用户名:
admin,密码:
admin,普通用户-用户名:
a,密码:
(空);
用户名:
user,密码:
user。
a.增加用户:
点击“增加”按钮,在弹出的“增加用户”框中输入新用户的用户名,密码(可选),权限,备注(可选),然后点击确定,即可在用户管理栏中看到新添加的用户信息。
b.删除用户:
在用户管理栏中选择待删除的用户,点击“删除”按钮。
c.修改用户:
在用户管理栏中,选择待修改的用户,点击“修改”按钮,即可修改相应的信息,修改完后点击“确定”按钮。
2、学院信息管理
与用户管理操作类似。
1、专业信息管理
2、学生信息管理
3、考勤查询
a.设置好待查询的起始、终止时间和上、下课时间。
b.(可选)设置过滤条件:
班级或XX。
c.点击“查询”按钮。
d.若有需要,点击“导出为Excel”,可对当前查询结果在当前目录保存了Excel文件。
4、读卡操作
a.设置好串口号和连接模式,点击“连接”按钮。
b.点击开始读卡按钮,即开始读卡,当有卡在读写器射频X围内时,则会在下方的列表中显示对应的学生的XX。
c.点击“停止读卡”,即可停止读卡。
图1系统结构示意图
三、需求分析
该系统基于OURS—RFID—RP实验平台系统,主要目的是结合RFID技术和学生考勤管理理论,将RFID技术应用于考勤管理系统中。
利用其中的HF高频读写器模块,OMAP3530嵌入式网关。
实现嵌入式网关对RFID模块的控制。
并在MicrosoftOfficeAccess中记录学生的一些基本信息,利用MicrosoftVisualStudio2005创建MFC界面并与MicrosoftOfficeAccess2003连接记录学生的一些情况,通过13.56M的考勤卡来实现学生的考勤管理。
3.1、实验箱模块的选择
RFID系统由电子标签、读写器(阅读器)、天线三部分组成。
读写器用于读取或写入非接触Ic卡信息;
天线则起至d在非接触IC卡和读写器间传递射频信号作用。
RFID系统还可通过读写器的RS232或RS485接口与外部计算机(上位机系统)连接,进行数据交换。
其系统组成图如下:
图2RFID系统基本模型
5、电子标签
电子标签是指由IC芯片和无线通信天线组成的超微型的小标签,其内置的射频天线用于和读写器进行通信。
系统工作时,读写器发出查询(能量)信号,电在标签(无源)收到查询(能量)信号后将其一部分整流为直流电源供电子标签内的电路工作,另一部分能量信号被电子标签内保存的数据信息调制后反射回读写器嘲.电子标签是射频识别系统真正的数据载体。
6、读写器
读写器在RFID系统中扮演着重要的角色,读写器主要负责与电子标签的双向通信,同时接受来自于主机系统的控制指令。
读写器的频率决定了RFID系统工作的频段,其功率决定了射频识别的有效距离。
读写器根据使用的结构和技术不同可以是读或读/写装置,是RFID系统信息控制和处理中心。
读写器通常由射频接口、逻辑控制单元和天线三部分组成。
3、RFID系统的基本工作原理
由读写器通过发射天线发送特定频率的射频信号,当电子标签进入发射天线有效工作区域时产生感应电流,从而获得能量被激活,使电子标签将自身编码信息通过内置射频天线发送出去;
读写器的接收天线接收到从标签(射频卡)发送来的调制信号,经天线调节器传送到读写器信号处理模块,经解调和解码后将有效信息送至后台主机系统进行相关处理:
主机系统根据逻辑运算判断该卡的合法性,识别该标签的身份,针对不同的设定做出相应的处理和控制,最终发出指令信号控制读写器完成不同的读写操作。
高频RFID系统主要采用的是电磁反向散射耦合即雷达原理模型,发射出去的电磁波,碰到目标后反射,同时携带回目标信息,依据的是电磁波的空间传播规律。
其原理图如下:
图3电磁反向散射耦合原理
3.2、HF高频读读写器原理
图4HF高频读写器模块
上电后,430先通过并口访问7970芯片,在没有读到卡时,程序运行在串口读写模式,并每隔0.5s向串口发送一个“D”,直到有写操作为止。
当有卡读写时,针对相应的卡,程序进入不同的协议中,并且点亮相应的LED灯。
并且上电后,配置完内部寄存器,程序进入串口读写程序,可以进行人机交互。
当读到不同协议的卡时,程序退出串口读写程序,进入相应的协议子程序中(目前支持14443A协议和15693协议)。
读完卡后,退出相应的协议子程序,进入串口读写程序。
3.3、射频通信原理
非接触式射频卡系统是一个典型的射频识别系统,它采用的是射频通信技术,射频通信细节有:
数据的调制和解调、能量的传输和通信协议。
3.3.1、数据的调制和解调
读写器和射频卡之间采用半双工通信方式,以一定频率的电磁波为媒介进行通信。
由于基带数字信号不可以直接进行传输,那么在读写器和射频卡之间进行通信时,必须对该基带信号进行调制和解调处理。
由于射频卡系统是一个数字通信系统,因此一般采用数字调制的方法进行调制。
数字调制是用载波信号参量的离散状态来表征所传输的数字信息,在解调时只需对载波信号的受调参量进行检测和判决.数字调制信号因此称为键控信号.由于载波信号是正弦波信号,其三个参量幅度、频率和相位都能携带信息,相应有调幅、调频和调相三种基本形式。
在射频卡中常采用调幅形式。
3.3.2、能量的传输
射频卡在工作时,本身没有电源,因此需要从读写器发送的电磁波中提取能量,在射频卡接受数据期间,它一方面从接受到的信号中解调出数据信息,另一方面从接受到的信号中提取能量。
当射频卡返回数据时,射频卡的数据是通过负载调制的方式,使射频卡的天线上的信号幅度发生变化,这样藕合到读写器的天线上的信号幅度也就发生相应的变化,从而使读写器得到射频卡返回的信息,同时射频卡将读写器上的电磁波信号藕合过来,提供射频卡工作所需的能量。
3.3.3、通信协议
RFID系统至少由一个读写器和一个射频卡组成.为了使系统具有高性能价格比,通常在整个系统中加入相关通信协议,使一个读写器可以同时和多个射频卡通信。
(1)传输协议
能量传送的方式一般是以固定频率的连续波或脉冲波(如跳频方式)为载体。
依据系统应用目的的不同,其能量传送的方式不同。
目前使用最多的是跳频方式的脉冲波如公路车辆识别系统,而在铁路车辆识别系统中常采用连续波.工作频率是RFID系统的基本参数,频率的选取要遵循某些规X的限制。
选取较高的工作频率具有一定的优势。
为了系统的可兼容性,信息的编码方式应符合某些规X。
我国铁路车辆识别系统采用了IS010374集装箱识别的编码方式。
信息的结构常常包括帧头、固定信息、用户信息、校验信息等。
信息的长度决定于编码方式和具体识别的信息内容,传送速度则取决于信息的长度和码元速率。
.
(2)信道编码技术
在读写器与射频卡进行射频通信的过程中,存在许多干扰数据通信的因素,其中最主要的两个因素是信道噪声和多卡操作(即有多X卡在读写器的天线感应X围内)引起的数据干扰.因此,需要采用信道编码和访问控制技术,以保证读写器和射频卡之间数据传输的完整、可靠和快速。
为了提高系统的抗嗓声能力,就需要采用信道编码技术,对可能或已经出现的差错进行控制,信道编码是使不带规律性或规律性不强的原始数字信号变换为带上规律性或加强了规律性的数字信号,信道译码器则利用这些规律性来鉴别是否发生错误,进而纠正错误。
根据码的用途可将其分为检错码和纠错码。
常用的检错码包括奇偶校验码和循环冗余校验码响.
四、整体描述和实现
本系统的设计主要分为两大部分,一部分是考勤器的软、硬件设计,一部分是上位机软件的设计。
考勤器体积适中,便于携带到教室等场所,由它完成对学生的考勤。
主要功能是读取学生一卡通的信息,以及做相应显示、存储等处理。
上位机软件主要功能是向考勤器下传学生XX、学号以及接收并保存考勤器上传的卡号和考勤记录。
4.1实现RFID高频学生考勤管理系统的硬件设计
学生考勤几乎是每个学校必须而且是经常做的学生工作之一,如何简单高效的地考勤工作一直以来是很多学校都在努力解决,所以考虑如何实现简单高效的考勤具有巨大的实际意义和价值,鉴于此,本文提出了一种可行的方案,方案的总体思路:
目前很多学校都在使用一卡通,本系统以学生的一卡通为基础,设计一种读卡式考勤器,考勤器存储有学生的身份信息,学生刷卡,通过学生刷卡,通过学生卡号来识别学生的身份,并记录刷卡时间来实现对学生的考勤,方法简单有效。
考勤器体积适中,便于携带,使用方便。
4.1.1考勤器设计
考勤器硬件设计主要构成:
单片机、读卡模块、实时钟模块等
4.1.2HF模块
系统框图:
图5HF模块系统框图
(1)系统运行简要说明:
①:
②:
(2)API调用说明
上电后,配置完内部寄存器,程序进入串口读写程序,可以进行人机交互。
(3)ISO15693第三部分
通过读卡器获取指令流,读卡器采用TItrf7970读卡器芯片。
4.2实现RFID高频学生考勤管理系统的软件设计
本次课程设计主要是设计基于高频的学生考勤系统,其软件部分利用上位机的Microsoftvisualstdio2005、MicrosoftOficeAccess2003等软件来编写学生考勤系统需要的代码及创建数据库。
4.2.1在MicrosoftVsualStdio2005的MFC应用程序模块设计
在PC机上通过MicrosoftVsualStdio2005的MFC应用程序模块设计登陆界面、读卡界面学生信息界面该软件将自动生成相关程序代码段相关界面如图所示
图6登陆界面图7用户界面
图8学生界面图9添加专业界面
图10专业界面
图11信息界面图12班级界面
图13读卡界面
图14考勤界面
4.3程序代码
//Attendance.cpp:
实现文件
//
#include"
stdafx.h"
HFExample.h"
Attendance.h"
BasicExcel.hpp"
usingnamespaceYExcel;
#defineATTENDANCE_LIST_DATETIME_IDX0
#defineATTENDANCE_LIST_WEEK_IDX1
#defineATTENDANCE_LIST_NAME_IDX2
#defineATTENDANCE_LIST_DEPARTMENT_IDX3
#defineATTENDANCE_LIST_SWORDTIME_IDX4
#defineATTENDANCE_LIST_EWORKTIME_IDX5
staticTCHARWeekDay[][6]={TEXT("
周日"
),TEXT("
周一"
周二"
周三"
周四"
周五"
周六"
)};
//CAttendance对话框
IMPLEMENT_DYNAMIC(CAttendance,CPropertyPage)
CAttendance:
:
CAttendance()
:
CPropertyPage(CAttendance:
IDD)
{
}
~CAttendance()
voidCAttendance:
DoDataExchange(CDataExchange*pDX)
CPropertyPage:
DoDataExchange(pDX);
DDX_Control(pDX,IDC_LIST_ATTENDANCD,_lists);
GetRequestList(CStringdate1,CStringtime1,CStringdate2,CStringtime2)
CStringdt1,dt2;
dt1=date1+"
"
+time1;
dt2=date2+"
+time2;
theApp.getDB().GetAttendanceList(m_attendanceinfoarray,dt1,dt2);
GetRequestListByName(CStringdate1,CStringtime1,CStringdate2,CStringtime2,CStringname)
theApp.getDB().GetAttendanceListByName(m_attendanceinfoarray,dt1,dt2,name);
GetRequestListByDepartment(CStringdate1,CStringtime1,CStringdate2,CStringtime2,CStringdepartment)
theApp.getDB().GetAttendanceListByDepartment(m_attendanceinfoarray,dt1,dt2,department);
GetRequestListByNameAndDepartment(CStringdate1,CStringtime1,CStringdate2,CStringtime2,CStringname,CStringdepartment)
theApp.getDB().GetAttendanceListByNameAndDepartment(m_attendanceinfoarray,dt1,dt2,name,department);
BEGIN_MESSAGE_MAP(CAttendance,CPropertyPage)
ON_BN_CLICKED(IDC_BTN_QUERY,&
OnBnClickedBtnQuery)
ON_BN_CLICKED(IDC_CHECK_DEPARTMENT,&
OnBnClickedCheckDepartment)
ON_BN_CLICKED(IDC_CHECK_NAME,&
OnBnClickedCheckName)
ON_BN_CLICKED(IDC_BTN_EXPORTEXCEL,&
OnBnClickedBtnExportexcel)
ON_NOTIFY(LVN_ITEMCHANGED,IDC_LIST_ATTENDANCD,&
OnLvnItemchangedListAttendancd)
ON_NOTIFY(DTN_DATETIMECHANGE,IDC_DATETIMEPICKER_DATEEND,&
OnDtnDatetimechangeDatetimepickerDateend)
END_MESSAGE_MAP()
//CAttendance消息处理程序
BOOLCAttendance:
OnInitDialog()
OnInitDialog();
//TODO:
在此添加额外的初始化
COleDateTimedt1(2011,1,1,8,30,0),dt3(2011,1,1,17,30,0);
((CDateTimeCtrl*)GetDlgItem(IDC_DATETIMEPICKER_STARTWORK))->
SetTime(dt1);
((CDateTimeCtrl*)GetDlgItem(IDC_DATETIMEPICKER_ENDWORK))->
SetTime(dt3);
_lists.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT);
_lists.InsertColumn(ATTENDANCE_LIST_DATETIME_IDX,TEXT("
日期"
));
_lists.InsertColumn(ATTENDANCE_LIST_WEEK_IDX,TEXT("
星期"
_lists.InsertColumn(ATTENDANCE_LIST_NAME_IDX,TEXT("
XX"
_lists.InsertColumn(ATTENDANCE_LIST_DEPARTMENT_IDX,TEXT("
专业"
_lists.InsertColumn(ATTENDANCE_LIST_SWORDTIME_IDX,TEXT("
上课"
_lists.InsertColumn(ATTENDANCE_LIST_EWORKTIME_IDX,TEXT("
下课"
CRectrect4;
_lists.GetClientRect(rect4);
//获得当前客户区信息
_lists.SetColumnWidth(ATTENDANCE_LIST_DATETIME_IDX,1.5*rect4.Width()/10);
//设置列的宽度。
_lists.SetColumnWidth(ATTENDANCE_LIST_WEEK_IDX,1*rect4.Width()/10);
_lists.SetCol