RFID实验部分_有源2.4G
一、功能介绍
什么是有源RFID
有源RFID,又称为主动式RFID(Active tag),依据电子标签供电方式的不同进行划分的电子标签的一种类型,通常支持远距离识别。电子标签可以分为有源电子标签(Active tag)、无源电子标签(Passive tag)和半无源电子标签(Semi-passivetag)。有源电子标签内装有电池,无源射频标签没有内装电池,半无源电子标签(Semi-passive tag)部分依靠电池工作。
2.有源RFID如何构成
RFID是一种简单的无线系统,由两个基本器件组成,询问器(或阅读器)和很多应答器(或标签),同时辅以天线、外围网络、中间件、管理系统,从而形成完整的RFID应用系统。
有源电子标签如何构成
有源RFID电子标签由中心处理器(MCU)、通讯芯片和外围电路组成。
有源阅读器如何构成
有源RFID阅读器由中心处理器(MCU)、通讯芯片、接口电路、存储单元和外围电路组成,可以实现对接收数据的解析、处理和分析。
3.有源RFID如何工作
有源电子标签如何工作
RFID标签俗称电子标签,RFID标签中存储一个唯一编码,其地址空间大大高于条码所能提供的空间,因此可以实现单品级的物品编码。标签上电后,按照预设的规则周期性的进行信号发射,当RFID标签进入读写器的作用区域,阅读器获取到标签发射出来的信息,即完成了对标签的识别过程。
有源阅读器如何工作
阅读器是对RFID标签进行读/写操作的设备,主要包括射频模块和数字信号处理单元两部分。读写器是RFID系统中最重要的基础设施,一方面,RFID标签返回的电磁信号通过天线进入读写器的射频模块中转换为数字信号,再经过读写器的数字信号处理单元对其进行必要的加工整形,最后从中解调出返回的信息,完成对RFID标签的识别或读/写操作;另一方面,上层中间件及应用软件与读写器进行交互,实现操作指令的执行和数据汇总上传。在上传数据时,读写器会对RFID标签原子事件进行去重过滤或简单的条件过滤,将其加工为读写器事件后再上传,以减少与中间件及应用软件之间数据交换的流量,因此在很多读写器中还集成了微处理器和嵌入式系统,实现一部分中间件的功能,如信号状态控制、奇偶位错误校验与修正等。
4.决定有源RFID的主要参数
工作频段
读写器读取距离
防碰撞性能(读写器同时读取标签数量)
读写器灵敏度
标签存储器容量
标签电池寿命、发射功率、接收灵敏度
标签尺寸、形状、防护(防水、防尘、防腐、防爆性)等级
抗干扰能力(同频信号干扰下是否正常工作)
稳定性(标签漏读率)
安全性(加密方式)
扩展性(是否支持RSSI、TDOA等算法定位、传感器结合)
二、使用演示
三、代码分析
//程序开启了一个线程,用于监听2.4G模块发送的串口数据(当模块接收到有源2.4G标签发送的卡号信息后会通过串口发送卡号信息)
void RfidThread::run(){
int ret;
qDebug()<<"rfid thread starting!";
runFlag = true;
while(runFlag == true) {
ret = ReceiveFrame(5000); //等待接受2.4G模块发送的标签卡号信息
if(ret<0) continue;
else{
qDebug()<<"Get Tag ID";
emit RfidReadTagEvt(); // 向窗口发送读取标签卡号事件
}
}
}
/*读取标签卡号信号槽的连接*/
connect(rfidThread, SIGNAL(RfidReadTagEvt()), this, SLOT(RfidReadTagProcess()), Qt::QueuedConnection);
/* RfidReadTagProcess()函数显示读取的标签卡号信息*/
void Widget::RfidReadTagProcess(){
QTableWidgetItem *item;
QString str;
HexToQString(str, rfidThread->tagId, 6); //转化字符串
int row = FindTag(str); //记录行号
if(row<0){
row = ui->tw_tagInfo->rowCount();
ui->tw_tagInfo->insertRow(row);
item = new QTableWidgetItem(str);
ui->tw_tagInfo->setItem(row, 0, item);
item = new QTableWidgetItem(QString::number(1));
ui->tw_tagInfo->setItem(row, 1, item);
}else{
item = ui->tw_tagInfo->item(row, 1);
int count = item->text().toInt();
item->setText(QString::number(++count));
} ui->tw_tagInfo->selectRow(row);
}
四、实践操作
1、编译程序
2、下载测试