图1 软件体系结构图
(1) 图形界面模块
图形界面是人机交互的渠道。图形界面模块完成所有组态画面的绘制,是生成RFID读写器网络连接和业务过程监控画面的设计工具。监控系统运行时的各种界面都是在图形组态系统开发环境下生成的。
图形界面的功能包括:①能够进行简单图形的绘制,如直线、任意形状的线条、文字等;②用户可设置图形的属性,如图形边线的颜色、线条的粗细、图形的填充色等;③用户对图形的操作,如移动位置、复制、任意缩放大小等;④可添加ActiveX控件;⑤完成所有的外部事件,如鼠标、键盘等的处理,可自动刷新屏幕来显示更新;⑥简单的动画处理。
在RFID组态管理软件中,我们会经常对不同型号的RFID读写器进行配置,为了满足不同的需求,在图形界面模块中我们添加了RFID读写器控件的设计。ActiveX是基于组件对象模型的一种技术,将OLE技术和OCX技术融为一体。采用ActiveX技术开发RFID读写器控件,扩充了组态软件的功能,使配置读写器变得简单,软件升级更加方便。
RFID读写器控件需完成的功能:串口操作(打开、关闭)、读写器初始化、标签操作(检测多张、连续检测单张、连续检测多张)、读取数据、写标签数据、写入AFI、写入DSFID、锁定AFI、锁定DSFID。
表1 RFID读写器控件的主要属性
(2)数据库模块
数据库是整个组态软件的核心部分。数据库模块提供对RFID读写器的数据的采集、存储和处理。为了提高数据库的读写速度,将数据库分为实时数据库和历史数据库两部分。实时数据库保存从RFID读写器读出的实时值,并定时将实时数据写入历史数据库中。历史数据库则完成历史报表的生成和历史信息的查询。
在RFID组态管理软件中采用ADO标准数据库访问方式。ADO (ActiveX Data Objects,ActiveX数据对象)是Microsoft提出的应用程序接口(API),用以实现访问关系或非关系数据库中的数据。ADO是一种面向对象的编程接口,是对当前微软所支持的数据库进行操作的最有效和最简单直接的方法,是一种功能强大的数据访问编程模式。通过ADO接口,RFID组态管理软件能够很好地同企业的数据库相连,实现与企业原有信息系统的无缝连接。在VC++6.0中ADO接口的实现:
pConn.CreateInstance(__uuidof(ADODB::Connection));//创建Connection对象
pCommand.CreateInstance( __uuidof( ADODB::Command ) );
pRecordset.CreateInstance(__uuidof(ADODB::Recordset));//创建记录集对象
pConn->ConnectionTimeout = 90;
pConn->Mode = adModeReadWrite;//|adModeShareDenyNone;
_bstr_t conn = "DSN=product;UID=sa;PWD=123456";//设置连接字符串,DSN值为企业数据库名称
pConn->Open(conn, "", "", -1);
(3)通信与数据处理模块
由于人机界面要与多个RFID读写器及其它的I/O接口进行数据交换,提供实时监控的环境,所以对系统的并发能力有特别的要求。如果只采用单线程来进行处理,速度慢,会有明显的时间等待等问题,因此应采用多线程技术来满足实时监控的要求。
在RFID组态管理软件中主要运用了三个线程:主线程、串行通信数据采集线程pRcvDataThread、数据存储线程pRcvBufThread。主线程为用户接口线程,由系统自动生成,负责系统的运行和信息的处理,使程序能迅速响应命令和其它事件。串行通信数据采集线程pRcvDataThread,为辅助线程,负责接收或发送数据,并按照通信协议对数据进行解析处理。数据存储线程RcvBufThread,为辅助线程,负责实时数据的存储,并定时将采样数据保存入库。
int RFIDThread_ReceiveDevBuf(int nType); //当与RFID读写器通讯连接时,启动pRcvDataThread
{
if(nType == 0)//启动
{
if(pRcvDataThread==NULL)
{
pRcvDataThread = AfxBeginThread(RFID_RcvThread, NULL);
pRcvDataThread->m_bAutoDelete = true;
}
Sleep(500);
}
else if(nType == 1)//停止
{
for(int i=0; i < m_nTotalDeviceNum; i++)
TerminateThread(pRcvDataThread[i],0);
}
……
return 0;
}
UINT RFID_RcvThread(LPVOID lParam); //如果启动了pRcvDataThread,终端机上传数据,解析收到的数据
UINT RFID_DealRcvBufThread(LPVOID pParam); //如果启动了pRcvBufThread,存储收到的数据
(4)其它模块
报表生成模块、报警模块和权限设置模块,这些模块的设计与普通软件设计大同小异,在此不再赘述。
5 结束语
本文作者创新点在于采用组态技术开发RFID系统管理软件,它将RFID读写器的配置软件和生产流通过程的监控软件合二为一,不仅能够方便地构建RFID系统现场,而且还能够将RFID技术与公司原有的信息系统进行无缝连接。另外采用ActiveX技术开发RFID读写器控件,能够方便的配置RFID读写器,使得公司的信息系统能够和新的RFID读写器连接起来,保证了软件的灵活性。RFID组态管理软件在存储RFID标签数据库、RFID读写器种类改变等情况发生时,只需少许修改便可完成设计软件的更新,实现新的需求,具有较强的实用性。
参考文献:
[1] http://www.rfidworld.com.cn/
[2]王亚民,陈青,刘畅生,王水平 编著. 组态软件设计与开发,西安电子科技大学出版社 2003
[3] 游战清 李苏剑 等编著. 无线识别技术(RFID)理论与应用,电子工业出版社 2004
[4] 李耀,李超良.组态软件架构的研究与设计.微计算机信息,2005,8:86-87