当前位置:首页 > 基于RFID门禁管理系统的设计 - 图文
北京理工大学珠海学院2010届本科生毕业设计
apiStatus WINAPI rfidapi03_6c_read_id( HANDLE hCom, unsigned char mask_len, unsigned char *mask, unsigned char *tag_count, unsigned char *tags_id, unsigned char *ant_no ,int* ms_count);
参数:
hCom: 传入读写器的串口句柄。
mask_len: mask数组的位(bit)长,即用于标识传入mask参数的值共有多少二进位(bit)有效。如果不指定匹配条件,则mask_len = 0。
mask: 指定匹配条件的数组值。
tag_count: 返回读出的标签数,参考表4-1。
表4-1 返回读出的标签状态关系
function rfidapi03_6c_read_id
tag_count 0 >=1 Description 没有标签返回 返回N张标签 tags_id: 返回读到的标签ID, 该数组中的第一个字节(byte)表示读到的标签ID长度,例如: 如tag_id为0x123456789…,标签的ID为0x12字节(byte)
ant_no: 返回读到的天线号(指示标签数据从该天线号读到) ms_count: 返回执行此函数所耗费的时间(毫秒)。 返回值:
返回状态标识,请参照附录,状态标识说明。 其主要的函数实现:
void CUserDlg::GetTagRecord(CMylistCtrl *m_list,bool b_ReadTag) {status= rfidapi03_6c_read_id
(g_hCom,g_RAddr,QValue,Bank,Point,ReadLen,MaskLength,Mask,&TagCount,&DataLen,TagID);
CUserDlg dlg; char temp[128];
sprintf(temp,dlg.FormatData(&TagID[0],DataLen)); str.Format(\if (status == ERR_NONE) {
g_b_readsuccess = TRUE; }
//如果没读到返回
if (str==\
24
北京理工大学珠海学院2010届本科生毕业设计
{ return; }
4.5写标签模块设计
该模块中的函数结构图:
CEditRecord() OnBtnSave() JudgeID() Writedata() 图4-9 标签读取函数结构图
1)写标签数据API函数
apiStatus WINAPI rfidapi03_6c_write( HANDLE hCom, unsigned char bank, unsigned short offset, unsigned short write_len, unsigned char maskbitcount, unsigned char *mask, unsigned char *data, int* ms_count);
参数:
hCom: 传入读写器的串口句柄。 bank: 指定标签中数据区;
offset: 指定标签中数据区内的偏移地址;
write_len: 指定写入的数据长度,单位:字(word)。
maskbitcount: mask数组的位(bit)长,即用于标识传入mask参数的值共有多少二进位(bit)有效。如果不指定匹配条件,则maskbitcount = 0。
mask: 指定标签的匹配条件的数组。 data:: 写入的数据内容。
ms_count : 返回执行此函数所耗费的时间(毫秒)。 返回值:
返回状态标识,请参照附录,状态标识说明。 其主要的函数实现:
bool CEditRecord::writedata(CString data) {
25
北京理工大学珠海学院2010届本科生毕业设计
while(i>0) { tagData);
if (status == ERR_NONE) {
g_editdlg_id = data; MessageBox(\写数据成功\ return TRUE; } }
if (status != ERR_NONE) {
MessageBox(\写数据失败,请重新写!\ return FALSE; }
return FALSE; }
i--;
status = rfidapi03_6c_read_id(g_hCom, g_RAddr, QValue, Bank, Point, uclen,
4.6用户信息管理模块设计
该模块中的函数结构图:
CMotTagDLG() OnBtnSave()//修改 OnBtnDeltag()//删除 图4-10 标签修改函数结构图
修改用户信息的函数实现: void CMotTagDLG::OnBtnsave() {
CString m_sex1; //列表控制初始化
pCombo1->GetLBText(pCombo1->GetCurSel(),m_sex1);
26
CComboBox* pCombo1 = (CComboBox*)GetDlgItem(IDC_COMBO1);
北京理工大学珠海学院2010届本科生毕业设计
m_sex1.MakeUpper(); ot\
CString str_name = m_name; }
删除用户信息函数实现: void CUserDlg::OnBtnDeltag() {
// TODO: Add your control notification handler code here CDatabase db; //打开数据库类 CString str_id = m_id;
CString str_age = m_age; CString str_sex = m_sex1; CString str_position = m_position;
CString sql;
UpdateData(true);
CDatabase db;//打开数据库类
db.Open(NULL,FALSE,FALSE,\
//往数据库插入数据
sql=\try { }
catch(CDBException e) { }
AfxMessageBox(\提交失败\db.ExecuteSQL(sql);
MessageBox(\信息更新成功!\CDialog::OnOK();
sex='\
db.Open(NULL,FALSE,FALSE,\
if (m_selectID == \
{
AfxMessageBox(\未选择要删除的行\
27
共分享92篇相关文档