RFID课程设计报告-停车收费系统.doc_第1页
RFID课程设计报告-停车收费系统.doc_第2页
RFID课程设计报告-停车收费系统.doc_第3页
RFID课程设计报告-停车收费系统.doc_第4页
RFID课程设计报告-停车收费系统.doc_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

RFID课程设计报告学生姓名 指导教师 学 院 信息科学与工程学院 专业班级 物联网1202班 学 号 0909123025 完成时间 2015年4月28日 37目录一、实验目的2二、实验器材2三、实验内容3四、实验步骤3五、概要设计41、设计思想42、实现方法43、主要模块54、模块间关系6六、调试分析8七、源程序代码8八、设计心得:35九、参考书籍:36停车收费系统一、实验目的1、 通过课程设计,加深对RFID这一课程所学内容的进一步理解与巩固。2、 通过课程设计,加深对结构化设计思想的理解,能对系统功能进行分析,并设计合理的模块化结构。3、 通过课程设计,提高程序开发功能,能运用合理的控制流程编写清晰高效的程序。4、 通过课程设计,训练C+程序调试能力,能将一个中小型各级组织系统联调通过。5、 通过课程设计,开发一个中小型系统,掌握系统研发全过程。6、 通话课程设计,培养分析问题、解决实际问题的能力。 7、了解超高频读写器的基本设置,熟悉超高频读写器的设置与使用。通过本 实验,了解超高频读写器和标签参数的含义和设置方法。二、实验器材1. RFID实验箱2. 计算机一台3. 超高频RFID标签一只三、实验内容 1.了解和设置读写器参数;2.RFID标签主要用于存储数据;本试验通过读写器控制软件控制RFID读写器对超高频RFID标签进行读取操作,同时对EPC数据进行改写操作。四、实验步骤1. 打开RFID实验箱,使用读写器试验箱上的USB连接线连接实验箱和电脑,启动电源。2. 在电脑上安装USB转串口驱动程序、读写器控制软件。安装方法见实验箱软件安装文档。3. 在电脑上打开读写器控制软件,进入主界面,点击主菜单“control”,选择下拉菜单中“Add UHF Reader”。如图1-1示:4. 选择串口(弹出的显示值即对应串口),如图1-2示,点击ok,进入超高频读写器选择界面,如图1-3示:5. 主界面上显示读写器基本信息,鼠标选中该读写器,鼠标右击、选中“Reader Settings and Diagnostics”,进入读写器参数设置界面。如图1-4示:6. 读写器参数的了解和设置1) Inventory Delay 参数,用于设置读写器读取标签的频率,例如:其值设置10ms表示读写器每间隔10ms读取一次标签信息。读写器读取标签的次数在主界面上实时动态显示2) Tag Model参数,选择协议类型,具体有Gen2(ISO16000C)、Gen2+RSSI、ISO 6B(ISO16000B)。目前,市场上大部分标签都遵守Gen2协议。Gen2+RSSI表示主界面上将同时动态显示读写器读取标签的次数和返回的射频信号强度3) Output level 参数和 Sensitivity参数,两者分别用于调节读写器读取功率和灵敏度。功率设置值越大,读写器读取标签的有效距离越长;灵敏度设置值越小,读写器读取标签的灵敏度越高。4) Frequencies中有八项参数,其中Profile参数表示全球不同国家和地区对UHF频段设置的不同标准,包括USA、Europe、Japan、Chin*.625、Chin*.125、Korea等,一旦选择某一标准,其余的七项参数也随即确定了解各项参数实际功用和意义后,也可对这些参数进行自定义设置。5) Gen2 Setting中的4项参数是对协议本身进行参数的设定,此项内容设置方法可以参考ISO18000-6C协议等资料。 7.修改标签EPC信息在图2-3界面上点击Set EPC按钮,出现EPC修改界面如图2-4示,输入EPC长度和新的EPC,点击ok:1. 设置标签密码类似步骤5,在图2-3界面中点击Set Password按钮,可对标签的访问密码进行设置。五、概要设计1、设计思想此停车场管理系统是在一个狭长的通道上的,而且只有一个大门可以供车辆进出,并且要实现停车场内某辆车要离开时,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些辆再依原来的次序进场的功能,就可以设计两个堆栈,其中一个堆栈用来模拟停车场,另一个堆栈用来模拟临时停车场,该临时停车场用来存放当有车辆离开时,原来停车场内为其让路的车辆。至于当停车场已满时,需要停放车辆的通道可以用一个链队列来实现。当停车场内开走一辆车时,通道上便有一辆车进入停车场,此时只需要改变通道上车辆结点的连接方式就可以了,使通道上第一辆车进入停车场这个堆栈,并且使通道上原来的第二辆车成为通道上的第一辆车,此时只需将模拟通道的链队列的头结点连到原来的第二辆车上就可以了。2、实现方法对于此停车场管理系统的实现,就是用两个堆栈来分别模拟停车场以及停车场内车辆为其它车辆让路时退出停车的临时停放地点。至于通道上车辆的停放则用一个链队列来实现,此时,通道上车辆的离开或者进入停车场只需改变此链队列上的结点而已。对于要对停车场内的车辆根据其停放时间收取相应的停车费用,可以记录下车辆进入以及离开停车场的时间,再用时间差乘以相应的单价并且打印出最后的费用就可以实现了。3、主要模块 此停车场管理系统,主要分为以下若干模块:首先定义用来模拟停车场的堆栈以及用来模拟通道的链队列为全局变量,然后编写主函数,在此主函数中实现对其它各个模块的调用。在主函数中首先出现欢迎用户使用的主界面,然后提示用户进入此停车场管理系统后,再出现一个供用户选择的界面,在用户的选择过程中,程序又分别调用车辆的到达、车辆的离开、停车场内停放车辆的信息以及退出程序这四个函数模块。其中,在车辆的离开那个模块函数中又调用了打印离开车辆信息的函数,在停车场内停放车辆信息的那个模块函数中,又分别调用了显示停车场上车辆信息的函数以及显示便道上车辆信息的函数。最后,从调鼐的这四个函数中回到主函数结束整个程序的运行。4、模块间关系开始初始化两个栈Enter和Temp及一个队列Wait。进入主菜单车到达车离开退出Room前车辆进临时栈对room计费便道车信息车场内信息判便道是否有车车场是否为空列表显示栈Enter元素出栈队列中元素进栈队列Wait中元素出队元素进栈Enter便道车进车场元素进队列Wait判断栈是否为满结束退出列表显示是否否是否是六、调试分析(1) 调试过程中的主要问题由于此停车场管理系统是分模块设计的,而且在程序的实现过程中又使用了清屏函数,所以,运行时用户选择任务并且执行完任务后,又会回到供用户选择功能的主界面,因此整个程序从整体上来讲结构清晰,使用方便。本程序的调试运行,总体上情况良好,但中间也出现了一些小问题。其中比较有代表性的主要问题有:当停车场已经达到最大容量,但仍有车辆进入停车场的时候,运行界面上没有出现或者说出现了但又跳掉了“停车场已满,该车辆需在便道上等待!”的提示信息。我们小组成员经过反复商量讨论,并且在查阅了多种资料后,在那一个printf语句后加了一个getch(),此时,程序运行结果就符合要求了。测试结果的分析与讨论:七、源程序代码#include time.h#include lfreader.h#include hfreader.h#include CommandLib.h#include cstdio#include string.h/#include iostream/#include timer.h#include windows.h#include dbt.h#includeiostream#includestringusing namespace std;#define MAX 2 /停车场车位数#define price 0.05 /每分钟收取的费用typedef struct timeint hour;int min;Time;/定义时间结点typedef struct nodestring num;Time reach;Time leave;CarNode;/定义每辆车的牌号,进入时刻,开出时刻typedef struct NODECarNode *stackMAX+1;int top;SeqStackCar;/用栈定义,构造停车场typedef struct carCarNode *data;struct car *next;QueueNode;/用队列结点定义,构造停车场外的单个等候车辆typedef struct NodeQueueNode *head;QueueNode *rear;LinkQueueCar;/用队列定义,构造停车场外的等候便道void InitStack(SeqStackCar *); /初始化堆栈函数声明int InitQueue(LinkQueueCar *); /初始化队列头结点函数声明int Arrival(SeqStackCar *,LinkQueueCar *); /车辆进入时登记函数声明void Leave(SeqStackCar *,SeqStackCar *,LinkQueueCar *);/车辆离开时函数声明void List(SeqStackCar,LinkQueueCar); /*查看停车场内车辆情况及便道上车辆情况的函数声明*/using namespace std;double opacity;void LFtest();void HFtest();void UHFtest();void pay();void find();void add();int main(int argc, char *argv)/LFtest();/HFtest(); / UHFtest();SeqStackCar Enter,Temp;/初始栈,中转栈LinkQueueCar Wait;/便道队列int a;InitStack(Enter); InitStack(Temp);InitQueue(Wait);/初始化while(1) cout*endl;cout 欢迎光临停车场!;cout(*_*) !endl;cout车辆到达登记-请按 1endl;cout车辆离开登记-请按 2endl;cout车辆停靠查询-请按 3endl;cout余额查询 -请按4 endl;cout账户充值 -请按5 endl;cout消 费 -请按6 endl;cout退出系统-请按 7endl;/系统选项设置cout*endl;while(1) cina; if(a=1a=7) break; else coutendl请选择: 17.; switch(a) case 1:Arrival(Enter,Wait);break;/调用入停车场函数case 2:Leave(Enter,Temp,Wait);break;/调用出停车场函数case 3:List(Enter,Wait);break;/调用查看函数case 4:find();break; case 5:add();break; case 6:pay();break;case 7:exit(0);default: break; return 0;void LFtest()/*低频示例程序 注意:低频卡每次扫描都需要从读卡器上拿下来后再放回去扫描*/LFReader lfreader(COM5);unsigned char *cardID; int len = 7;lfreader.startScan();while(1)while(!lfreader.scan(cardID,len);for(int i=0;ilen;i+)printf(%.2x ,cardIDi);coutendl;void find() CommandLib UHFreader(COM7);unsigned char lenc = 0;unsigned char *tagInfo;unsigned char* EPC;unsigned char begAdd=0; int tagNum; int* EPCLen;int ret=1;while(!UHFreader.getInventory(EPC, tagNum, EPCLen);if(UHFreader.selectTag(EPC0,EPCLen0)ret=UHFreader.readUser(lenc,tagInfo,begAdd);unsigned int money=256*tagInfo0+tagInfo1;cout当前账户余额为:endl;printf(%d ,money);printf(n);void add()CommandLib UHFreader(COM7);unsigned char lenc = 0;unsigned char *tagInfo;unsigned char* EPC;unsigned char begAdd=0;unsigned char* psw;unsigned char* data; int tagNum; int* EPCLen;int ret=1;while(!UHFreader.getInventory(EPC, tagNum, EPCLen);if(UHFreader.selectTag(EPC0,EPCLen0)ret=UHFreader.readUser(lenc,tagInfo,begAdd);unsigned int num;unsigned char psw4=0x00,0x00,0x00,0x00; unsigned int money=256*tagInfo0+tagInfo1;printf(%d ,money);printf(请输入要充的钱数:);cinnum;money=money+num;tagInfo0=money/256;tagInfo1=money%256;printf(充值后账户余额为:%d ,money);unsigned char data2=tagInfo0,tagInfo1;unsigned char begAdd=0x00;unsigned char *data2=data;UHFreader.setUser(begAdd,psw,data2);coutendl;void pay()CommandLib UHFreader(COM7);unsigned char lenc = 0;unsigned char *tagInfo;unsigned char* EPC;unsigned char begAdd=0;unsigned char* psw;unsigned char* data; int tagNum; int* EPCLen;int ret=1;while(!UHFreader.getInventory(EPC, tagNum, EPCLen);if(UHFreader.selectTag(EPC0,EPCLen0)ret=UHFreader.readUser(lenc,tagInfo,begAdd);unsigned int num;unsigned char psw4=0x00,0x00,0x00,0x00; unsigned int money=256*tagInfo0+tagInfo1;printf(%d ,money);printf(请输入要花费的钱数:);cinnum;money=money-num;tagInfo0=money/256;tagInfo1=money%256;printf(账户余额为:%d ,money);unsigned char data2=tagInfo0,tagInfo1;unsigned char begAdd=0x00;unsigned char *data2=data;UHFreader.setUser(begAdd,psw,data2);coutendl;void InitStack(SeqStackCar *s) /堆栈初始化 s-top=0; s-stacks-top=NULL;int InitQueue(LinkQueueCar *Q)/队列初始化 Q-head=new QueueNode ; if(Q-head!=NULL) Q-head-next=NULL; Q-rear=Q-head; return 1; else return -1;void PRINT(CarNode *p,int room) /输出离开停车场的车辆情况 int A,B,C,D;coutn车辆离开的时间:;cinp-leave.hourp-leave.min;cout离开车辆的车牌号为:;coutp-num;coutendl其到达时间为: p-reach.hour:p-reach.min;cout离开时间为: p-leave.hour:p-leave.min;A=p-reach.hour;B=p-reach.min;C=p-leave.hour;D=p-leave.min;coutendl应交费用为: (C-A)*60+(D-B)*price元endl;cout车辆离开登记完毕!endl;cout*endl;delete p;int Arrival(SeqStackCar *Enter,LinkQueueCar *W) CarNode *p;QueueNode *t;p=new CarNode;cout*endl;cout车辆到达登记开始:endl;coutendl请输入车牌号:;cinp-num;if(Enter-topMAX)/如果车位未满则进停车场内 Enter-top+; coutendl车辆在车场第Enter-top位置.; coutendl车辆到达时间:; cinp-reach.hourp-reach.min;coutendl车辆到达登记完毕!endl;cout*endl; Enter-stackEnter-top=p; return 1; else /如果车位已满,则停靠在便道上 cout*endl; coutendl该车须在便道等待!有车位时进入车场endl; t=new QueueNode ; t-data=p; t-next=NULL; W-rear-next=t; W-rear=t; return 1; void Leave(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W) int room;CarNode *p,*t;QueueNode *q; if(Enter-top0) while(1) cout*endl;cout车辆离开登记开始:endl; coutendl请输入车在车场的位置/1-Enter-top/:; cinroom;if(room=1room=Enter-top) break;while(Enter-toproom)/从停车场堆栈向中转堆栈移动车辆,直到要离开车辆的位置停止 Temp-top+; Temp-stackTemp-top=Enter-stackEnter-top; Enter-stackEnter-top=NULL; Enter-top-; p=Enter-stackEnter-top; Enter-stackEnter-top=NULL; Enter-top-;while(Temp-top=1)/将中转堆栈中的车辆移回停车场堆栈 Enter-top+; Enter-stackEnter-top=Temp-stackTemp-top; Temp-stackTemp-top=NULL; Temp-top-;cout*endl;cout车辆离开登记结算:endl;PRINT(p,room);if(W-head!=W-rear)Enter-topMAX) q=W-head-next; t=q-data; Enter-top+; coutendl便道的t-num号车进入车场第;coutEnter-top位置.endl; cout请输入t-num号车进入车场的时间:; cint-reach.hourt-reach.min; W-head-next=q-next; if(q=W-rear) W-rear=W-head; Enter-stackEnter-top=t; delete q;else coutendl便道里没有车endl;else coutendl车场里没有车.endl; void List1(SeqStackCar *S) /查看停车场内车辆情况的函数定义 int i;if(S-top0)cout*endl;coutendl车场内部车辆停靠情况:endl;coutendl位置 到达时间 车牌号endl;for(i=1;i=S-top;i+)couti;cout S-stacki-reach.hour:S-stacki-reach.min;cout S-stacki-numendl;else coutendl车场里没有车endl; cout*endl;void List2(LinkQueueCar *W) /查看便道上停靠车辆情况的函数定义 QueueNode *p;p=W-head-next;if(W-head!=W-rear)cout*endl;coutendl便道停靠车辆情况:endl;while(p!=NULL)coutendl车辆牌号:;coutp-data-numendl;p=p-next;else coutendl便道里没有车.endl;cout*endl;void List(SeqStackCar S,LinkQueueCar W) /车辆列表显示函数int flag,tag;flag=1;while(flag)cout*endl;cout车辆停靠查询开始:endl;coutendl请选择 1|2|3:endl;cout1.车场列表endl2.便道列表endl3.返回主菜单endl;while(1) cintag;if(tag=1|tag=3) break;else coutendl;cout请选择 13:;switch(tag)case 1:List1(S); cout车辆停靠查询结束!endl;break; case 2:List2(W); cout车辆停靠查询结束!endl;break;case 3:flag=0;break;default: break;cout*endl;void HFtest()/*高频示例程序*/BYTE *type = new BYTE2;HFReader hfcReader(COM6,9600);coutreturn :hfcReader.ISO1443A_REQ(0x00,type)endl;printf(卡类型为:%.2x%.2xn,type0,type1);BYTE *tmp = new BYTE7;BYTE *key ;key =tmp;cout密钥为:;for(int i=0;i6;i+)keyi=0xff;printf(%x ,keyi);BYTE *buffer = new BYTE64;if(hfcReader.ISO1443A_Read(0x01,0,4,key,buffer)=0)coutn读卡成功!n卡号为:;for(int i=0;i4;i+)printf(%.2x ,keyi);for(int i=0;i64;i+)if(i%4=0)cout ;if(i%16=0)coutendl;printf(%.2x ,bufferi);coutendl;elsecoutn读卡失败!endl;system(pause); void UHFtest()CommandLib UHFreader(COM7);unsigned char lenc = 0;unsigned char *tagInfo;unsigned char* EPC; int tagNum; int* EPCLen;int ret=1;while(1)/system(pause);Sleep(1000);system(cls);while(!UHFreader.getInventory(EPC, tagN

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论