来源:中国一卡通网 作者:李海龙 张宝霞 郑惠之 发布时间:2010-06-28 17:33:31 字体:[大 中 小]
摘 要:介绍了在空调客车微机实时集中监测系统中,利用接触式IC卡读写器及IC卡对系统上位机数据进行存储,实现客车运行数据在下位机中的查询、打印及存档等相应功能。该读写系统编程简单、使用方便、可靠性好,适合在复杂的工业现场使用。
引 言
空调客车微机实时集中监测系统是为了确保空调列车安全运行、预防各种事故的发生而研发的系统,该系统能实时监测空调列车各车厢空调机和发电机组相关参数,并根据系统内部设定的参数变化范围进行判别,当发电机组或某一车厢空调机参数出现异常时,可用蜂鸣声和显示两种方式报警,同时自动存储故障数据,退勤后通过Ic卡转储到地面系统,以备查询和打印。为确保系统的可管理性及安全性,系统为管理人员提供如下权限:各参数上下限设置、记录查询、密码设置等,系统总体框架如图1所示 。
在对实时监测数据进行处理后,系统要进行数据的存储、报表的打印,作为历史记录以备以后查询。由于系统工作环境的限制,在车载系统中,直接去实现这样的功能显然不符合现场的要求,因此,系统分为两大块:车载系统和地面微机系统,这就涉及到数据从车载系统到地面微机系统的转存问题。本统所采用的编程语言为VB6.0,经过对各类数据存储方法的比较,结合本系统的实际应用环境,确定利用RD600系列接触式Ic卡读写器和AT45D041卡进行数据的转存,相对其它存储设备,比如软盘、USB盘等,它可插拔的次数多、易于携带、不易损坏、不易篡改数据,很好地解决了这一问题。
RD600系列接触式Ic卡读写器分为外置式和内置式两种,车载系统采用了内置式的渎写器RD600S,该读写器利用电脑内部+5V供电,采用RS-232串口通信,波特率9600—115200Bps,通信稳定可靠,可支持多种函数接口,例如:在Windows 9X/2K/NT/XP的32位开发平台中,支持Visual Basic、Delphi、Power Builder、Visual FoxPro、Visual C++、C++ Builder等以及这些开发平台的高版本 。
1 IC卡的选择
经过对存储数据量的大体估算,系统中与读写器相配套的IC卡选用了ATMEL公司的AT4519041卡。该卡为非加密存储卡,容量较大,为4Mbit,整卡分为2048页,每页有264 byte,可擦写1000 000次以上。在系统软件中,需要转存的数据表共分为7个,分别是:数据记录表、巡检记录表、故障记录表、故障记录附表、操作记录表、开机记录表、登录记录表。考虑到一趟列车是一个往返的过程,对软件的操作过程是重复性的两次,其每个记录表为内容不同、形式一样的两份,因此,系统将Ic卡的存储区域从软件上分为两部分,每部分各有1024页,并确定了各记录表分配到的地址范围。这样做为以后的读操作提供了极大的方便。
2 对IC卡的读写
系统的软件是在Windows操作系统下利用Visual Basic进行开发的,对Visual Basic本身而言,它并没有提供与读写器通信进而达到对Ic卡进行操作的函数或方法,为了解决在VB环境下实现对Ic卡读写器访问这一问题,读写器提供了自定义的动态链接库MWIC_32.DLL,在软件设计中借助DLL,实现了在Visual Basic环境下对读写器的访问,完成了对Ic卡的读写,增强了VB的功能,扩大了它的应用范围。
3 函数的使用原则
在系统软件中,要想顺利实现IC卡数据的读写,实现系统预先设想的目的,必须对函数的使用遵从几个原则 :
(1)首先要调用通信口初始化函数,其形式为IntlCdev=IC— InitComm(Port),其中Port是指要打开的串口,0代表打开串口1,1代表打开串口2,依次类推到19代表串口20,如果Port等于100,则表示读写器所在的USB接口。该函数的返回值为设备标识符,该返回值将作为其它函数的首要调用参数。
(2)在初始化函数成功后应调用能够获取设备当前状态的函数,其形式为IntStatus=IC—Status(IntlCdev),其中参数In—tlCdev是IC—InitComm函数的返回值,即一个串口的设备标识符。
(3)在串口通信方式下,调用WINDOWS 16/32位动态链接库时,程序退出之前要执行IC—ExitComm函数,关闭串口,释放串1:3设备句柄,以免再次初始化串口时出错。
(4)动态库的位置应该在声明的相应目录中或缺省的目录当中
4 系统软件对IC卡存取数据的具体实现过程
现以存储结构较为简单的“巡检记录表”为例,说明系统软件读取微机处理数据并实现转存Ic卡的过程,其余表如数据记录表、故障记录表、故障记录附表、操作记录表、开机记录表、登录记录表等表的读取转存方法与此类似。
4.1 表结构
“巡检记录表”表结构如表l所示。
4.2 车载系统写数据实现过程
车载系统写数据的软件流程图如图2所示。
软件的具体实现程序如下:
IntlCdev = IC— InitComm(0) 初始化串口,0、1、2、3、表示串口1、2、3、4;等于100表示连接的是USB口
If IntlCdev>=0 Then 如测试通信正常
IntStatus = IC— Status(IntICdev) 返回设备当前状态
IfIntStatus:0 Then 测试卡的状态正确与否,等于0,正确
IntType = IC— InitType(IntlCdev,65)
65为45DB04I卡类型代码
IfIntTvpe = 0 Then
IntBeep : IC— Beep(IntlCdev,0,100)
读写器蜂呜一秒,转存开始
打开名为“Ic卡数据”数据库里的“巡检记录表”
Set dbase=OpenDatabase(StrFilepath+“Ic卡数据.mdb”)
Set mytable=dbase.OpenRecordset(“巡检记录表”,dbOpen- Dynaset)
向数据库添加新记录
If mytable.EOF = False Or mytable.BOF = False Then
mytable.MoveFi~t
IntPage = 350:IntOffset=0:IntLength = 0:RetumValue =0
C = 0:D = 0
Do Until mytable.EOF = True
For b = 0 To 2
对每一条记录指定每一字段存储的起始位置
Select Case b
Case 0
IntOffset= IntOfset+ D 10:IntLength : 10
Case 1
IntOffset= IntOfset+ 10:IntLength = 5
Case 2
IntOfset= IntOffset+ 5:IntLength : 10
End Select
ReturnValue = IC— DirectWrite(IntICdev,一
4.1 表结构。
“巡检记录表”表结构如表l所示。
4.2 车载系统写数据实现过程
车载系统写数据的软件流程图如图2所示。
IntPage,IntOffset,IntLength,mytable(b)) 往卡中写数据
If ReturnValue = 0 Then
Else
MsgBox“存储错误,请重新操作!”,vbOKOnly+vblnforma-
“提示”
IC— ExitComm(IntICdev) 关闭通信口
Exit Sub
End If
Next b
mytable.MoveNext
e c + 1:D = 1
If C=10 Then 如本页数据已满,换页
IntPage = IntPage + l:c = 0:D =0
IntOffset= 0:IntLength = 0
End If
在图4的第300帧时,跟踪的窗口仍然能较好地和目标相匹配,较之kerne1.based算法,跟踪效果有很好的改善。在图5显示的目标尺寸逐渐增大的实例中,由于中心定位较准确,因此保证了空间定位的准确性,继而根据本文提出的改变窗口尺寸方法,使得跟踪效果较好。表2为采用本文算法的采样示例中心点的坐标和Bhattacharyya系数。
4 结束语
本文针对当前多数使用基于Mean shih算法的目标跟踪不能很好地实时改变核窗宽的特点,提出了一种基于目标中心定位和NMI特征的跟踪算法。在目标跟踪过程中,通过建立二值模型,利用NMI特征识别要跟踪的目标,跟踪过程始终定位目标的中心。结合Mean shift算法的寻优相似度函数,选择最优的核窗宽。目标在移动过程中,其中心点也是在做不规则的移动,本算法正是抓住了这点,以中心点为基点来扩展跟踪窗口。本算法的目标定位和NMI特征有很大关系,而中心定位还和目标边缘的分布有关。实验表明,即使背景中出现和目标区域的NMI值相近的物体时,本算法也能较好地跟踪目标。
推荐文章
论坛热帖