RFID实验9 UHF 900MHz ISO 18000-6读取数据

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
图 5-27 存储区操作
① 在“安全”复选框中选择工作模式。 ② 在存储区选择区中,共有 4 个存储区选择。 00:Rsv,保留内存存储区;保留一些特殊口令,无法修改,只能读取。 01:UII,EPC 存储区;包含标签的 UII 识别号等信息,一般不写入。 10:TID,是每张卡出厂时就设置好的唯一数据。无法修改,只能读取。 11:USER,用户区,在此存储区间用户可读可写。USER 区域数据存储长度为 32×2 字 节。读取数据时,读取到的数据长度为“数量×2”字节长度(写入操作也一样),每个起始 序号后带 2 个字节的数据长度。 ③ 起始序号:默认为 3(可更改)。 ④ 数量选择:默认为 1(可更改)。 ⑤ 数据区域:显示读到或写入的数据,以十六进制数的形式显示。 在“非安全”模式下,在存储区分别选择 00:Rsv、01:UII、10:TID、11:USER, 起始序号、数量均保持默认,分别进行读卡操作,读卡操作成功返回如图 5-28 所示的信息, 返回的数据长度为 2 个字节。
//保存选择的存储体 //字符串保存访问密钥 //4 个字节长度的字节数组 //选中“安全”复选框
{
try
{
for (Int32 i = 0; i < 4; i++)
uAccessPwd[i] = Convert.ToByte(strpwd.Substring(i * 2, 2), 16); //数据类型转换并保存到字节数组中
RFID 实验九 UHF 900MHz ISO 18000-6 读取数据
5.3 UHF 900MHz ISO 18000-6 读取数据
5.3.1 协议原理
(1)ISO/IEC 18000-6 国际标准协议第六部分协议要求。 (2)读取标签数据(指定 UII)。
功能简介:该命令从指定的 UII 的目标标签中读取数据。 读取电子标签指定数据块的信息,如标签号、00:Rsv、01:UII、10:TID、11:USER 的数 据信息。该功能操作有两种工作模式,分别是“非安全”和“安全”工作模式。 ① 当“安全”复选框未被选中时,该操作工作在非安全工作模式下,此时用户读取电 子标签的指定信息,将正常地进行读取标签存储区,不需要其他的验证。 ② 当“安全”复选框被选中时,该操作工作在安全工作模式下,此时用户读取电子标 签的信息,将需要密码验证,默认密码为 0x00000000。 (3)标签数据存取命令集。 发送数据命令格式如下:
本设计所需设备如下。 (1)硬件:PC(Pentium 500 以上,硬盘 80GB 以上,内存大于 1GB,Windows 操作系 统),ISO 18000-6(超高频 900MHz)900M 模块,ISO 18000-6 卡片,串口线,USB 转串口 线。 (2)软件:Microsoft Visual Studio 2010。
}
Byte uCnt = 0x01;
try
{ uCnt=Convert.ToByte(txt_UHF_Count.Text.Trim()); if (uCnt == 0x00)
//将“数量”数据类型转换并保存 //填写的数量不规范
{ AddUHFList("数据长度的值不符合规范,将使用默认值 1!");
try { uPtr[0]=Convert.ToByte(txt_UHF_Ptr.Text.Trim());} //将起始序号数据类型转换并保存
catch
{ AddUHFList("您填写的数据指针不符合规范,将使用默认值 0!");
txt_UHF_Ptr.Text = "0";
uPtr[0] = 0x00;
AA 17 13 00 00 00 00 00 03 01 30 00 E2 00 40 00 86 09 00 33 19 30 4D 47 55
发送数据命令解析:第一字节“0xAA”为数据帧开始标识,最后一个字节“0x55”为 数据帧结束标识;第二字节“0x17”(转换成十进制数为 23)为从数据帧开始标识 0xAA 到数据帧结束标识 0x55 之间共有 23 个字节数据;第三字节“0x13”为读取数据命令;第四 到第七字节“0x00 0x00 0x00 0x00”为标签的数据访问密码;第八字节“0x00”为要读取的 存储区为 Rsv 区(UII 存储区:0x01;TID 存储区:0x02;User 存储区:0x03);第九字节 “0x03”为标签存储区的起始地址;第十字节“0x01”为读取数据的数量为 1×2 字节;从第 十一字节到第二十三字节为要进行数据读取的标签号。
//字符串保存卡号 //字节数组,长度为卡号长度的二分之一
for (Int32 i = 0; i < uUii.Length; i++) uUii[i] = Convert.ToByte(struii.Substring(i * 2, 2), 16);
if (cmb_UHF_Bank.SelectedIndex < 0)
txt_UHF_Count.Text = "Fra Baidu bibliotek";
uCnt = 0x01;
}
}
catch
{ AddUHFList("数据长度的值不符合规范,将使用默认值 1!");
//数据类型转换并保存 //判断是否选择读取的存储区
{ AddUHFList("请选择需要读取的存储体!");
return;
//为选择则返回
} Byte uBank = (Byte)cmb_UHF_Bank.SelectedIndex; String strpwd = txt_UHF_AccessPwd.Text.Trim(); Byte[] uAccessPwd = new Byte[4]; if (chk_UHF_Secured.Checked)
返回命令:
AA 05 13 00 00 00 55(读到的数据为:0000)
返回数据命令解析:第一字节“0xAA”为数据帧开始标识,最后一个字节“0x55”为 数据帧结束标识;第二字节“0x05”为从数据帧开始标识 0xAA 到数据帧结束标识 0x55 之 间共有 5 个字节数据;第三字节“0x13”为读取数据命令;第四字节“0x00”为所读取的存 储区为“00:Rsv”区;第五到第六字节“0x00 0x00”为读取到的数据。
} catch
//转换过程出现异常,给出异常原因
{ AddUHFList("您填写的访问密码不符合规范,将使用默认密码 0x00000000!");
txt_UHF_AccessPwd.Text = "00000000";
for (Int32 i = 0; i < 4; i++)
uAccessPwd[i] = 0x00;
2.设计步骤
在 5.2.3 节的基础上进行读取数据功能的实现。 第一步:在原有界面上进行界面设计。 在原有界面上拖入一个 GroupBox,将 Text 属性设置为“读写操作”;在“读写操作” 的 GroupBox 中拖入一个 CheckBox,将 Text 属性设置为“安全”及 Name 属性设为 “chk_UHF_Secured”;拖入四个 Label,将 Text 属性分别设置为“存储区:”、“起始序号:”、 “数量:”和“数据(Hex)”;再拖入一个 ComboBox,将 Name 属性设置为“cmb_UHF_Bank”
及 Items 属性设置为“00:Rsv、01:UII、10:TID、11:USER”,如图 5-31 所示。
图 5-31 字符串集合编辑器
然后拖入 3 个 TextBox,适当调整大小,分别放到位置 1、位置 2 及位置 3 处,将 Name 属性分别设置为“txt_UHF_Ptr”、“txt_UHF_Count”及“txt_UHF_DATA”;将放置在位置 1 的 TextBox 的 Text 属性设置为“3”,将位置 2 的 TextBox 的 Text 属性设置为“1”,如图 5-32 所示。
本设计主要原理:上位机应用程序采用 C#语言开发,遵守 C#编程规范,读取数据功能 根据 RFID 超高频模块 COM 协议实现,使用串口线和 USB 转串口线将 PC 与 RFID 超高频 模块连接;上位机程序根据 RFID 超高频模块 COM 协议通过串口与 RFID 超高频模块进行 通信,最终完成读取数据的功能。
图 5-32 初步界面
最后设计好的界面如图 5-33 所示。
图 5-33 读取数据界面设计
第二步:编写代码实现功能(此处只附主要代码)。 UHF 数据读取功能执行过程如图 5-34 所示。
部分代码解析如下:
图 5-34 UHF 读取数据功能执行过程
//读卡事件 String struii = cmb_UHF_UII.Text.Trim(); Byte[] uUii = new Byte[struii.Length / 2];
5.3.2 操作步骤
(1)按照 5.1 节,配置、打开串口并进行标签识别。 (2)可以按照 5.2 节进行设置功率大小,功率设置大小范围为 5~20dBm。 (3)读取标签数据。
在读取数据前,选择其中一张识别到的标签,如图 5-26 所示。
图 5-26 寻卡操作
在标签读写区中,如图 5-27 所示。
数据段
SOF
长度
1
LEN EBV
CMD 1
APWD 4
BANK 1
PTR EBV
CNT 1
UII
CRC16 EOF
2
1
数据段说明: ① APWD:标签的数据访问密码。 当用户读取的数据存储区为非 Reserved 存储区时,APWD 将置为 0x00000000。 当用户读取的数据存储区为 Reserved 存储区时,APWD 为标签的访问密钥。 ② BANK:标签的存储分区。 Reserved 存储区,BANK=0x00 UII 存储区,BANK=0x01 TID 存储区,BANK=0x02 User 存储区,BANK=0x03 ③ PTR:标签存储区的起始地址,EBV 格式。 ④ CNT:数据长度,以 WORD(2 字节)为单位,支持 CNT=0。 (4)具体发送的数据命令。 读取数据:(卡号为“3000E20040008609003319304D47”,存储区为“00:Rsv”区, 选中“安全”复选框,起始序号为 3,数量为 1),发送命令:
}
}
else
//未选中“安全”复选框,采用默认密码
{
uAccessPwd[0] = 0x00;
uAccessPwd[1] = 0x00;
uAccessPwd[2] = 0x00;
uAccessPwd[3] = 0x00;
} Byte[] uPtr = new Byte[1];
//一个字节长度的字节数组
图 5-30 数据读取失败
5.3.3 程序设计:读取数据功能的实现
1.设计内容
在 Microsoft Visual Studio 2010 开发环境上创建 C#窗体应用程序;编写代码,实现数据 读取功能。了解 Microsoft Visual Studio 2010 开发环境及窗体应用程序建立;掌握程序通过 串口与 RFID 实验系统平台建立连接并通信的原理和方法;了解 RFID 实验平台 COM 协议 并实现读取数据功能。
在位置 3 下方拖入一个 Label 和一个 TextBox,将 Label 的 Text 属性设置为“访问密钥”, 将 TextBox 的 Name 和 Txt 属性分别设置为“txt_UHF_AccessPwd”和“00000000”;最后拖 出一个 Button,将 Name 属性设置为“btn_UHF_Read”及 Text 属性设为“读取数据”。
图 5-28 读取数据
在“非安全”模式下,在存储区分别选择 00:Rsv、01:UII、10:TID、11:USER, 起始序号保持默认,数量将“1”改为“2”,分别进行读卡操作,读卡操作成功返回如图 5-29 所示的信息,返回的数据长度为 4 个字节。
图 5-29 数据读取
在“安全”模式下,选中“安全”复选框,默认访问密钥为 0x00000000(可将访问密 钥更改),如图 5-30 所示。若将密码改为 00000 或其他,再对 11:USER 用户存储区进行访 问时就会读取数据出错。
相关文档
最新文档