应用程序的建立以及读卡功能的实现.docx
《应用程序的建立以及读卡功能的实现.docx》由会员分享,可在线阅读,更多相关《应用程序的建立以及读卡功能的实现.docx(18页珍藏版)》请在冰豆网上搜索。
应用程序的建立以及读卡功能的实现
实验一应用程序的建立以及读卡功能的实现
实验目的:
设计开发一支可连接实验系统平台并且可以做读卡操作的应用程序。
掌握使用DLL的技能,通过调用DLL里面的函数,开发出实际应用程序软件,满足实际工程应用的需要。
实验内容:
1、使用VB6.0开发软件,设计开发出如图10.1应用程序界面:
图10.1
2、编写代码,运行程序能达到实验目的。
基本原理:
VB语言编程规范;DLL调用规范;
实验步骤:
一、启动VB6.0开发软件平台启动界面如图10.2,
图10.2
在启动界面里面选择标准EXE开始新建一个应用程序,进入窗体界面,在自己选定或新建的文件夹里面保存窗体,窗体取名为ISO15693_Reader.frm,工程名为ISO15693_Reader.vbp,窗体界面如图10.3:
图10.3
在右边属性栏里面命名窗体名称,修改如图10.4里面的两项属性,命名窗体为ISO15693_Reader窗体。
图10.4
现在开始添加界面内容,首先添加ComboBox控件,选中左边通用控件栏里面的ComboBox控件按下鼠标选定,然后在窗体左上方用按住鼠标左键勾画出来,修改右边属性栏里面的名称为cmdCOM,Text项为COM1,如图10.5所示:
图10.5
然后添加CommandButton,选中左边通用控件栏里面的CommandButton控件按下鼠标选定,方法类似添加ComboBox控件,添加到窗体上,修改右边属性栏里面的名称为cmdOpen,Caption项为Open,如图10.6所示:
图10.6
然后再添加标题为Closebutton的CommandButton,其方法同添加Openbutton,修改右边属性栏里面的名称为cmdClose,Caption项为Close。
然后添加CommandsFrame,选中左边通用控件栏里面的Frame控件按下鼠标选定,方法类似添加ComboBox控件,添加到窗体上,修改右边属性栏里面的名称为frmCMD,Caption项为Commands,如图10.7所示:
图10.7
然后再添加命名为Inventory的OptionButton,选中左边通用控件栏里面的OptionButton控件按下鼠标选定,方法类似添加ComboBox控件,添加到窗体上,修改右边属性栏里面的名称为optCMD,Caption项为Inventory,Value项为True,如图10.8所示:
图10.8
然后再添加标题为Runbutton的CommandButton,其方法同添加Openbutton,修改右边属性栏里面的名称为cmdRun,Caption项为Run,如图10.9所示:
图10.9
然后再添加标题为tagsinfo的Frame,其方法同添加标题为Commands的Frame,修改右边属性栏里面的名称为frmTagInf,Caption项为tagsinfo,如图10.10所示:
图10.10
然后添加标题为listTag的ListBox,选中左边通用控件栏里面的ListBox控件按下鼠标选定,方法类似添加ComboBox控件,添加到窗体上,修改右边属性栏里面的名称为listTag,如图10.11所示:
图10.11
然后再添加标题为Outputinfo的Frame,其方法同添加标题为Commands的Frame,修改右边属性栏里面的名称为frmOutInf,Caption项为Outputinfo,如图10.12所示:
图10.12
然后再添加标题为txtInfo的TextBox,选中左边通用控件栏里面的TextBox控件按下鼠标选定,方法类似添加ComboBox控件,添加到窗体上,修改右边属性栏里面的名称为txtInfo,如图10.13所示:
图10.13
至此,程序界面的工作,已经设计完成,下面开始代码部分的工作。
二、编写实验代码
首先,把ReadDLL.dll动态链接库文件复制到系统WINDOWS\system32目录里面。
然后在VB开发软件平台里面,添加Module,修改右边属性栏里面的名称为mdlDLL,并保存为mdlDLL.bas文件,如图10.14所示:
图10.14
在打开的mdlDLL.bas文件里面,声明需要用到动态链接库里面的相应函数。
1、
PublicDeclareFunctionSetComLib"ReadDLL.dll"(ByValm_sPortAsString,ByValBaudRateAsLong,ByValDatabitAsLong,ByValParityAsString,ByValstopbitAsString)AsLong
函数名:
(设置串口)SetCom
功能:
打开串口,可以设置串口号、波特率、数据位、奇偶校验位、停止位等。
参数说明:
Input:
m_sPor:
端口号
BaudRate:
波特率
Databite:
数据位
Parity:
奇偶校验
stopbit:
停止位
Output:
无
2、
PublicDeclareFunctionCloseComLib"ReadDLL.dll"()AsLong
函数名:
(关闭串口)CloseCom
功能:
关闭串口。
参数说明:
Input:
无
Output:
00:
串口被正确关闭,
01:
关闭串口出现错误
3、
PublicDeclareFunctionInventoryLib"ReadDLL.dll"(ByReftagUIDAsByte,ByValflagAs
Byte,ByRefnTagCountAsLong)AsLong
函数名:
(读UID)Inventory
功能:
读取单个或多个TAG的UID数据。
参数说明:
Input:
flag:
标志位设定,07表示读取多个TAG,27表示只读取单个TAG.
Tagcount:
标签个数。
tagUID:
标签Uid,按顺序排里,先高位,后低位。
均为16进制。
如:
tagUID[0-7]=“E005763826000700”
Output:
00,表示有标签,
01,表示无标签,
文件如图10.15所示:
图10.15
声明好需要用的函数后,就可以添加相应的动作事件,同时定义相关的变量和数组。
用鼠标左键双击窗体界面,进入窗体代码文件,如图10.16:
图10.16
首先定义一个变量数组,用于接收存放读到的电子标签UID数据,定义如下:
DimretByte(1000)AsByte(定义1000个字节的空间存放电子标签UID的数据。
)
然后,添加产生窗体时,需要进行一些初始化工作的代码,如下:
PrivateSubForm_Load()
DimiAsInteger
Fori=1To15
cmdCOM.AddItem"COM"&i
Next
EndSub
此段代码其作用是在程序生产窗体时,ComboBox下生产对应于串口号的15个串口编号,以供选择相应的串口。
程序文件如图10.17:
图10.17
然后点击右边工程下窗体里面的窗体文件,回到窗体界面,用鼠标左键双击窗体界面上的Openbutton,进入编写cmdOpen_Click()过程的代码。
PrivateSubcmdOpen_Click()
DimretAsInteger
ret=SetCom(cmdCOM.Text,115200,8,"NONE","1")
Ifret=0Then
cmdOpen.Enabled=False
EndIf
EndSub
代码首先定义一个整型变量:
ret用于保存设置串口SetCom函数的返回值。
设置串口为当前选择的端口号,波特率为115200,数据位为8,无奇偶校验,1位停止位。
如果此串口打开正确,Openbutton变成无效状态,在关闭这个串口之前,不能再次打开其它的串口。
此时代码文件如图10.18所示:
图10.18
同添加Openbutton的代码,按同样的方法添加Closebutton的代码如下:
PrivateSubcmdClose_Click()
DimretAsInteger
ret=CloseCom()
Ifret=0Then
cmdOpen.Enabled=True
EndIf
EndSub
关闭串口:
如果关闭成功,Openbutton变成有效状态,此时可以再次打开串口。
同样的方法添加Runbutton的代码如下:
PrivateSubcmdRun_Click()
DimlCountAsLong
DimstrInfoAsString
DimstrLogAsString
DimretAsLong
Dimi,j,kAsInteger
strLog=""
txtInfo.Text=""
IfoptCMD.Value=TrueThen
listTag.Clear
ret=Inventory(retByte(0),7,lCount)
Ifret=0Then
Fork=0TolCount-1
strInfo=""
Forj=0To7
strInfo=strInfo&Format(Hex(retByte(k*8+j)),"00")
Next
listTag.AddItemstrInfo
Next
EndIf
strLog=Convert(ret)
EndIf
txtInfo.Text=strLog
EndSub
首先定义了几个程序运行需要的变量:
lCount用来存储读到的电子标签数量的数据;
strInfo用来存储读到的电子标签UID的字符串数据;
strLog用来存储表示读电子标签UID操作状态的字符串数据;
ret用来存储表示读电子标签UID操作状态的长整型数据;
i,j,k为临时计数变量;
然后把字符串strLog里面的数清空,把txtInfo文本框里面的数据清空;
如果optCMDOptionButton为选中状态,则先把listTag里面的数据清空,然后调用读取多个标签的指令,读取电子标签,读到的标签数量存在lCount里面,标签的UID数据,存于retByte数组里面,并把读取操作的状态赋值到ret变量。
然后,再根据ret变量的值,按单个标签的UID8个字节的数据提取UID数据,并转换为字符串数据,在listTag里面显示出来,根据lCount变量的值,按同样的方法和数据格式把所有标签的UID数据都提取出来转换为字符串数据显示出来,同时,把操作状态也转换为字符串数据,在txtInfo文本框里显示出来。
这部分的代码文件如图10.19所示:
图10.19
其中Convert函数代码如下:
PublicFunctionConvert(svalAsLong)AsString
Ifsval=1Then
Convert="ERROR"
Else
Convert="Success"
EndIf
EndFunction
至此本实验的代码部分也完成了,然后就可以点击菜单栏下边的运行命令按钮,开始执行程序,如图10.20所示:
图10.20
连接好实验系统,给实验系统上电,等待系统初始化完成,蜂鸣器响过后,选择相应的串口,点击Open打开串口,和实验系统通讯上,如图10.21所示:
图10.21
在实验系统的天线区,放置标签,点击Run按钮,开始读取电子标签的操作,如图10.22-10.23所示:
图10.22
上图为天线区放置3个标签的读取结果图。
图10.23
上图为天线区没有放置标签的读取结果图。
对比上面两张图片的区别,注意画上红圈的地方。
最后,通过VB软件文件菜单里面的生成ISO15693_Reader.exe命令,如图10.24
所示,
图10.24
就可以生成一个可双击直接运行的EXE应用程序。
实验总结:
在RFID实际工程应用上,RFID读写器厂商在提供读写器的同时,会提供给系统集成商或最终用户与读写器配套的DLL文件和相应的h头文件,以及一些说明文件,然后需要系统集成商或最终用户的工程技术人员,编写相应的应用程序,使读写器按照需要进行工作,完整整个系统的功能,这时就要求工程技术人员能够通过调用DLL文件里面的相关函数,控制读写器,完成读写器读写卡工作。
通过本实验,实验人员能完全掌握整个VB应用程序的开发流程和相应的技能,DLL动态链接库的调用、声明方法,满足将来实际工作的需要。