logo资料库

RFID实验报告.doc

第1页 / 共6页
第2页 / 共6页
第3页 / 共6页
第4页 / 共6页
第5页 / 共6页
第6页 / 共6页
资料共6页,全文预览结束
姓名 学号 L 李龙 130911019 实验成绩 年级、班 物联网一班 安阳师范学院计算机与信息工程学院 综合性、设计性实验报告书 实 验 课 程: RFID 原理与应用 实验指导教师: 吕 靖 实 验 时 间: 2015-12-4 实 验 题 目: RFID 应用系统基本功能模拟 实验类型:  综合性 □ 设计性
计算机信息工程学院结合性、设计性实验报告书 一、 问题描述及分析 设计开发一支可连接实验系统平台并可进行以下操作的应用程序: 1. 识别电子标签 2. 读取单个或多个 Block 中数据 3. 写入标签单个 Block 中数据 4. 可执行使电子标签进入静默状态操作 5. 可执行使电子标签重新进入激活状态 二、 功能模块及数据结构描述 1.应用程序的建立及寻单卡功能的实现 2.读取单个数据块功能的实现 3.写入数据到卡片中指定单个数据块功能的实现 4.读取多个数据块功能的实现 通过串口方式连接实验系统平台。能够识别标签,即读取标签的 UID 数据。可以读取 UID 标签里面单个 Block 中的数据或者 Block 地址从 a 位置(用户输入)开始,总共(用 户输入)个 Block 的数据,并显示。根据 UID 号选择要写入的标签,根据需要写入的地 址(用户输入)及数据(用户输入)对该标签相应 Block 进行写入,并将写数据操作结 果这个状态信息转换成 Success 或 ERROR 显示。使选中 UID 的标签进入静默状态,标签 只响应 Reset to Ready 命令,并将操作结果转换成 Success 或 ERROR 显示。使对应 UID 的标签从静默状态恢复到激活状态,并将操作结果转换成 Success 或 ERROR 显示。。 三、 主要算法流程描述及部分核心算法 编写刷新串口,打开与关闭对应的串口代码,首先引用 DLL,右键点击解决方案中的引用, 把 ISO15693.dll 文件引用到该程序中。然后在窗体的代码视图的顶部,引用该名字空间;using ISO15693DLL;并在合适的位置,创建 Reader 类的实例;ISO15693DLL.Reader reader = new ISO15693DLL.Reader ();双击单选按钮 Read Single Block,打开其对应的事件编辑界面:双 击 Run 按钮,打开其单击事件编辑界面:在事件里面定义 Byte[] BlockData=null;在 switch 语句里面 case 0 的 break 语句后面增加 case 1 的部分,读取指定的数据块中的数据 其中 ByteArrayToString()//将字节数组转换为十六进制的字符串在开发二的基础上启动 Microsoft Visual Studio2010 开发平台,在原来窗体文件的基础上再添加一个单选 按钮 RadioButton,取名为 rb_WriteSingle。还需要在 Parameter 容器里放置一个 Textbox 用来表示写入卡片数据块的数据,格式为 16 进制的字符串,取名为: txt_WriteData。双击单选按钮 Write Single Block,打开其对应的事件编辑界面在 switch 语 句 里 面 case 1 的 break 语 句 后 面 增 加 case 2 的 部 分 在 清 空 按 钮 的 单 击 事 件 里 面 添 加 txt_Resulte.Text = "";txt_WriteData.Text = "";双击单选按钮 Write Single Block,打开其对应的 事件编辑界面:在 switch 语句里面 case 2 的 break 语句后面增加 case 3 的部分,代码如下:。 private void RefreshPort() {
计算机信息工程学院结合性、设计性实验报告书 cmb_Port.Items.Clear(); cmb_Port.Text = ""; cmb_Baud.Text = "115200"; string[] Ports = System.IO.Ports.SerialPort.GetPortNames(); foreach (var item in Ports) { } cmb_Port.Items.Add(item); if (Ports.Length >= 0) cmb_Port.SelectedIndex = 0; { } } private delegate void AddList(string msg); private void ShowList(string msg) { if (list_Info.InvokeRequired) { } AddList d = new AddList(ShowList); list_Info.Invoke(d, msg); else { } list_Info.Items.Insert(0, DateTime.Now.ToLongTimeString()+":"+ msg); } //判断是否打开串口 if (Reader.IsOpen) { //调用一个 Switch 来对每一种选中的命令执行相应的方法 switch (IsCommand) { //寻单卡 case 0: InventoryModel.Single, ref TagCount, ref TagNumber); value = Reader.Inventory(ModulateMethod.ASK, if (value == 0x00) { êo{1}", TagCount, TagNumber[0])); ShowList(String.Format("TagCount:{0},ê?TagNumber: if (!_listTag.Contains(TagNumber[0])) { _listTag.Add(TagNumber[0]);
计算机信息工程学院结合性、设计性实验报告书 cmb_tags.Items.Add(TagNumber[0]); cmb_tags.SelectedIndex = 0; } } else { ShowList("Inventory Lose!No TagNumber"); case 2: } break; if (cmb_tags.Text != "") { Byte[Convert.ToInt32(txt_BlockSize.Text.Trim())]; Byte[] DataForWrite = new String strForWrite = txt_WriteData.Text.Trim(); try { for (Byte i = 0; i < DataForWrite.Length; i++) { DataForWrite[i] = Convert.ToByte(strForWrite.Substring(i * 2, 2), 16); } } catch (System.ArgumentOutOfRangeException ex) { ShowList(String.Format("错误: 写入的数 据长度不 够 {0}Byte!", Convert.ToInt32(txt_BlockSize.Text.Trim()))); txt_WriteData.SelectAll(); txt_WriteData.Focus(); return; } catch (System.Exception ex) { 制数据!", Convert.ToInt32(txt_BlockSize.Text.Trim()))); ShowList(String.Format("错误:请填写{0}Byte 的 16 进 txt_WriteData.SelectAll(); txt_WriteData.Focus(); return; BlockLength.ShortBlock4Byte, DataForWrite); } value = Convert.ToByte(txt_StartAddress.Text.Trim(), Reader.WriteSingleBlock(cmb_tags.Text, 16), if (value == 0x00)
计算机信息工程学院结合性、设计性实验报告书 { ShowList(string.Format("Succeed!Address:[{0}],WriteData:{1}", txt_WriteData.Text)); txt_StartAddress.Text, } else { ShowList(String.Format("Lose!Address:[{0}],WriteData:{1}", txt_WriteData.Text)); txt_StartAddress.Text, } } else { ShowList("请先寻到一张或多张卡片?"); } break; { if (cmb_tags.Text != "") { Byte[] BlockDataMore = null; int count = 0; if (int.TryParse(txt_BlockCount.Text.Trim(), out count)) { int Address = 0; if (int.TryParse(txt_StartAddress.Text.Trim(), out { value = Reader.ReadMultiBlock(cmb_tags.Text, case 3: Address)) BlockLength.ShortBlock4Byte, (byte)Address, (byte)count, ref BlockDataMore); i++) sb.Append(BlockDataMore[i].ToString("X2")); if (value == 0x00) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < BlockDataMore.Length; { } txt_Resulte.Text = sb.ToString(); txt_WriteData.Text = txt_Resulte.Text; ShowList(String.Format("Reader[{0}],Address:{1},ReaderCount:{3},Data:{2}", cmb_tags.Text,
计算机信息工程学院结合性、设计性实验报告书 txt_StartAddress.Text.Trim(), ByteArrayToString(BlockDataMore), count)); } } "); } else { } } } break; MessageBox.Show("请填写正确的读取数据的大小 四、 系统使用说明 连接设备后上电,保证读写器能正常工作。如下图所示,点击 Open 打开串口后,选择 Inventory 指令,点击 Run 按钮即可寻到卡片。 Inventory 指令为寻单卡指令,故读写器上只能放置一张卡片,多了会提示读卡失败。如下 图。连接设备后上电,保证读写器能正常工作。如下图所示,点击 Open 打开串口后,选择 Inventory 指令,点击 Run 按钮即可寻到卡片。选择 Read Single Block 功能,然后单击 Run 按钮,则读出该卡 block0 地址块里的数据连接设备后上电,保证读写器能正常工作。如下 图所示,点击 Open 打开串口后,选择 Inventory 指令,点击 Run 按钮即可寻到卡片。选择 Read Single Block 功能,然后单击 Run 按钮,则读出该卡 block0 地址块里的数据。连接设 备后上电,保证读写器能正常工作。点击 Open 打开串口后,选择 Inventory 指令,点击 Run 按钮即可寻到卡片。然后选择 Read Multiple Block 功能,以及要读取的 Block 数量,之后单 击 Run 按钮,则读出该卡多个 Block 里的数据。 五、 问题及解决办法 1. 调试过程中出现的一些大小写错误问题以及项目不存在或者代码不存在的问题 2. 解决:浏览了上下代码然后找出没有定义的代码重新定义 六、 总结 在做 RFID 的寻卡读卡写卡的过程中,首先就是窗体页面的设计,紧接着就是代码的设计在 调用的过程中总是出现不匹配问题,不过最终都是通过反复的实验以及调试找到了,确实是 需要一定的耐心以及对代码的理解
分享到:
收藏