admin 管理员组文章数量: 1087139
2024年3月9日发(作者:linuz另起一个shell执行命令)
RFID
实验七 UHF 900MHz ISO 18000-6识别标签号
5.1 UHF 900MHz ISO 18000-6识别标签号
5.1.1
协议原理
1.ISO/IEC 18000-6国际标准协议第六部分协议要求
ISO/IEC18000-6《信息技术—针对物品管理的射频识别(RFID)第六部分:针对频率为860~930MHz无接触通信空气接口参数》的阅读器与应答器之间的物理接口、协议和命令以及防冲突判断机制。
Type A协议的通信机制是基于一种“阅读器先发言”的,即基于阅读器的命令与应答器的回答之间交替发送的机制。整个通信中的数据信号定义为“0”、“1”、“SOF”和“EOF”4种。
通信中的数据信号的编码和调制方法定义如下。
(1)阅读器到应答器之间的通信传输:阅读器发送的数据采用ASK(调制载波幅度)进行调制,调制深度是30%(误差不超过3%);数据编码采用脉冲宽度编码(PIE)来编码数据,即通过定义下降沿之间的不同宽度来表示不同数据信号。
(2)应答器到阅读器之间的传输连接:应答器通过反向散射给阅读器来传输信息;数据编码采用FMO编码,数据速率是40kbps。
(3)防冲突采用时隙ALOHA算法。
2.数据命令解析
上位机向下位机发送命令格式如下:
SOF
1
LEN
EBV
CMD
1
PAYLOAD
-
*CRC16
2
EOF
1
下位机对上位机响应命令格式如下:
SOF
1
LEN
EBV
CMD
1
STATUS
1
PAYLOAD
-
*CRC16
2
EOF
1
数据命令解析如下(长度的单位均为字节)。
SOF:0xAA。
LEN:SOF~EOF之间数据长度,即LEN+CMD+PAYLOAD+CRC16。
CMD位说明如下:
7
0:数据包没有CRC校验
1:数据包为CRC校验
6~0
模块命令
STATUS:发送命令中没有Status字段,只存在响应数据包中。高四位是通用响应标志,低四位是各命令特有的响应标志。
Status位说明如下:
7
0:执行命令失败
6
1:CRC校验失败
5
保留
4
保留
3~0
各命令状态见命令表
1:执行命令成功 0:CRC校验成功
PAYLOAD:各命令需要传送的实际数据,数据长度在各命令格式中定义,最长512字节。
CRC16:对LEN CMD PAYLOAD部分计算的CRC16值,当上位机的命令的CRC16校验失败时,返回固定格式的响应,且STATUS值为0xC0。
EOF:0x55标识一帧结束。
3.具体发送的命令
本节内容主要为寻卡操作与设计,寻单卡操作上位机向下位机发送的数据命令为“AA
02 10 55”(02代表“02 10”共两个字节,10代表识别单标签命令)。
寻多卡操作上位机向下位机发送的数据命令为“AA 03 11 03 55”(03代表“02 10 03”共三个字节,11代表识别多标签命令)。
5.1.2
操作步骤
(1)如果连接设备使用的是USB口转串口线,先安装USB转UART驱动。
(2)打开 RFID
原理机的电源,建立通信连接,将计算机设备与超高频UHF 900MHz读写器模块通过串口线(或USB口转串口线)连接,打开UHF实验软件,进行实验。
实验软件界面如图5-4所示。
①
如果没有连接上串口,打开串口就会失败。
②
波特率默认为“57600”,如果选择其他波特率,就可能会打开串口失败。
③
如果启动实验软件后,在串口栏未显示串口号,请检查串口连接是否正常,再单击“刷新”按钮,对串口进行刷新操作,获取到串口号。
④
关闭串口后,串口将被关闭,所有操作、指令都将无法正常执行。
(3)打开与关闭串口操作。
在正确建立通信后,打开/关闭串口成功返回如图5-5所示的信息。
图5-4
软件界面
图5-5
打开与关闭串口
(4)识别标签号操作。
在进行识别标签号操作之前,必须将串口打开。在串口打开成功后才能进行识别标签号操作,否则会提示出错。
将卡片放到识别区(如果连接了外接天线,将卡片放置在天线旁边。)单击“寻卡”按钮,执行寻卡操作。寻卡操作过程如图5-6所示。
图5-6
寻卡操作过程
寻卡成功返回如图5-7所示的信息。
图5-7
寻卡操作
(5)识别多标签号操作。
当“防碰撞”复选框被选中时,“识别标签”操作为“防碰撞识别”操作,启动标签识别循环和启动防碰撞功能,对多张标签进行识别时使用该命令。发送命令时需指定防碰撞识别的“初始Q”值。“初始Q”值范围为0~15,使用默认“初始Q”值为3(也可更改为其他适当的值)。该命令的响应方式与单标签循环识别命令一致(射频识别系统中UHF阶段的Q值防碰撞算法,利用参数Q值的变化动态地改变识别帧中的时隙数,以获得更高的识别效率)。
执行寻多卡前需要选中“防碰撞”复选框,寻多卡成功返回如图5-8所示的信息。
如未选中“防碰撞”复选框,将多个标签放入寻卡区进行寻卡操作,将可能导致识别标签失败。识别标签失败返回如图5-9所示的信息。
图5-8
寻多卡成功
图5-9
寻卡失败
(6)自动识别标签操作。
自动执行识别标签操作,就是让读写器不断地进行标签识别,读写器将识别到的标签号返回给上位机程序。在进行自动识别标签时建议选中“防碰撞”复选框,因为在自动识别标签时有可能会有多个标签在读写区,如果未选中时,在寻卡区有多个标签存在,将可能导致寻卡失败。自动寻卡命令如图5-10所示。
图5-10
自动寻卡
单击“自动”按钮后,按钮将变成“停止”按钮,再次单击将停止自动识别标签操作,自动识别标签操作成功返回如图5-11所示的信息。
图5-11
自动寻卡操作
5.1.3
程序设计:识别标签号功能的实现
1.设计内容
在Microsoft Visual Studio 2010开发环境上创建C#窗体应用程序;编写代码,实现识别标签号功能。主要目的是了解Microsoft Visual Studio 2010开发环境及窗体应用程序建立;掌握程序通过串口与RFID实验系统平台建立连接并通信的原理和方法;了解RFID实验平台COM协议并实现识别标签号功能。
本设计所需设备如下。
(1)硬件:PC(Pentium 500以上,硬盘80GB以上,内存大于1GB,Windows操作系统),ISO 18000-6(超高频900MHz)900M模块
,ISO 18000-6卡片,串口线,USB转串口线。
(2)软件:Microsoft Visual Studio 2010。
本设计主要原理:上位机应用程序采用C#语言开发,遵守C#编程规范,识别标签号功能根据RFID超高频模块COM协议实现,使用串口线和USB转串口线将PC与RFID超高频模块连接;上位机程序根据RFID超高频模块COM协议通过串口与RFID超高频模块进行通信,最终完成识别标签号的功能。
2.设计步骤
第一步:创建C#窗体应用程序。
启动Microsoft Visual Studio 2010开发平台,创建一个如图5-12所示的C# Windows窗体应用程序,命名为“UHF ISO18000-6”。
图5-12
新建窗体
第二步:设计功能界面。
(1)选中新建的窗体,右击界面,在弹出的快捷菜单中选择“属性”选项,将Text属性改为“UHF ISO 18000-6”。
(2)打开工具箱,拖出一个GroupBox,将Text属性改为“串口操作”;拖出两个ComboBox放到串口操作的GroupBox中,将其Text属性分别改为“串口号”与“波特率”,并将ComboBox与“串口号”对应的Name属性改为“cmb_UHF_PortName”;将ComboBox与“波特率”对应的Name属性改为“cmb_UHF_BaudRate”,并将Items属性设置为“9600、19200、57600、115200”,如图5-13所示。
图5-13
字符串集合编辑器
拖出三个Button放到GroupBox中,分别将其Text属性设置为“打开”、“关闭”、“刷新”,Name属性分别对应为“btn_UHF_Open”、“btn_UHF_Close”、“btn_UHF_Refresh”。
(3)拖出一个GroupBox,将其Text属性改为“寻卡命令”;拖出一个CheckBox放在寻卡操作的GroupBox中,将Text属性设置为“防碰撞”及Name属性设置为“chk_UHF_Anticoll”;再拖入一个Label,将其Text属性设为“初始Q”;拖入一个ComboBox,将Name属性设置为“cmb_UHF_IntQ”;拖入两个Button,将Text属性分别设置为“寻卡”和“自动寻卡”,Name属性分别设置为“btn_UHF_Inv”和“btn_UHF_Inventory”;最后拖入一个ComboBox,将Name属性设置为“cmb_UHF_UII”及Text属性设置为“请选择一个标签”。
(4)在窗体的右方拖入一个ListBox,将Name属性设置为“lst_UHF_Info”,并在其右下方拖入一个Button,将Text属性设置为“清空”及Name属性设为“btn_UHFlist_Clear”。
最后设计好的界面如图5-14所示。
图5-14
寻卡功能界面设计
第三步:加入动态链接库资源。
找到新建工程的路径,将M900_文件复制到UHF ISO 18000-6UHF ISO 18000-6
binDebug目录下,如图5-15所示。
图5-15
加入动态链接库资源
第四步:编写代码实现功能(此处只附主要代码)。
UHF寻卡功能执行过程如图5-16所示。
图5-16 UHF寻卡功能执行过程
部分代码解析如下:
//寻卡按钮事件
private void btn_UHF_Inv_Click(object sender, EventArgs e)
{
if (!UHF_IsOpen) //判断串口是否已经打开
{
AddUHFList("错误:串口尚未打开,不能操作!");
return; //串口若未打开,则跳出,不再往下执行
}
if ((chk_UHF_d) && (cmb_UHF_edIndex < 0))
{
cmb_UHF_edIndex = 3;//如果选中“防碰撞”复选框,则选择默认“初始Q”为3
}
Byte FlagAnti = (Byte)((chk_UHF_d) ? 0x01 : 0x00);
//如果选中“防碰撞”复选框,就为字节型变量FlagAnti赋值0x01,否则赋值0x00
Byte InitQ=(Byte)((chk_UHF_d)?cmb_UHF_edIndex : 0x00);
//初始Q
Int32 value = M900Inventory(hCom, FlagAnti, InitQ, 0);
//函数功能:该函数启动 M900
的识别循环。
//函数参数:HANDLE hCom:通信端口句柄
//UCHAR flagAnti:是否使用防碰撞识别功能。1:防碰撞识别;0:单标签识别
//UCHAR initQ:防碰撞识别过程的初始 Q
值,flagAnti
为 1
时有效
//UCHAR flagCrc:1:使用CRC功能;0:不使用 CRC
功能
//返回值:1:成功启动 M900
的识别循环
//其他:启动 M900
的识别循环失败
if (value != 1) //判断函数返回是否等于1,如果不等于1就为寻卡命令执行失败
{
AddUHFList(("寻卡命令执行失败!"));
return;
}
AddUHFList(("寻卡命令执行成功!"));
UHF_TagUIIs = new ArrayList(); //新建集合
Byte[] uLenUii = new Byte[1]; //新建一个长度的字节数组,用于保存标签长度
Byte[] uUii = new Byte[255]; //标签 UII
String strUii; //字符串,用于提取标签号
value = M900GetReceived(hCom, uLenUii, uUii); //该函数读取 M900
返回的标签 UII。
//函数原型
//int WINAPI M900GetReceived (HANDLE hCom, UCHAR* uLenUii, UCHAR* uUii);
//返回值value:1:成功读取标签的 UII;其他:读取标签的 UII
失败。
//输入参数
//'HANDLE hCom:通信端口句柄。
//'UCHAR* uLenUii:标签UII的长度,1个字节。
//'UCHAR* uData:标签UII,至少66个字节。
while (value == 1) //当alue值为1时则进入循环,获取标签号并显示
{
strUii = "";
Int32 length = uLenUii[0]; //获取标签UII的长度
for (Int32 i = 0; i < length; i++)
{
strUii += ("{0:X2}", uUii[i]); //取得标签号
}
if (UHF_f((object)strUii) < 0)
{
UHF_(strUii);
AddUHFList(("读取到卡片,卡号为:{0};", strUii)); //显示卡号
value = M900GetReceived(hCom, uLenUii, uUii); //再次获取value值
}
else
{
value = 0;
}
}
cmb_UHF_(); //清空标签号显示下拉框
if (UHF_ > 0)
{
foreach (String struii in UHF_TagUIIs)
{
cmb_UHF_(struii); //在标签显示下拉框显示标签号
}
cmb_UHF_ = "请选择一个卡片";
}
else
{
AddUHFList("接收数据命令执行失败,没有读取到有效的卡片。");
AddUHFList("请将电子标签置于天线辐射场内!");
}
value = M900StopGet(hCom, 0); //停止 M900
的识别循环。
//返回值 1:成功停止识别。其他:停止识别失败。
//输入参数 HANDLE hCom:通信端口句柄。
//UCHAR flagCrc:1:0:是否使用 CRC16
验证功能,使用CRC功能;不使用 CRC
功能。
}
第五步:编译生成程序运行。
单次寻卡操作过程如图5-17所示。
图5-17
单次寻卡
自动寻卡操作过程如图5-18所示。
图5-18
自动寻卡
版权声明:本文标题:RFID实验7 UHF 900MHz ISO 18000-6识别标签号 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/p/1709913647a549843.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论