二维码
世腾网

扫一扫关注

当前位置: 首页 » 新闻资讯 » 行业新闻 » 正文

自动车辆识别系统的设计与实现

放大字体  缩小字体 发布日期:2024-11-29 09:53:28    来源:本站    作者:admin    浏览次数:95    评论:0
导读

  目前最主要的一种实现方式是利用无线射频识别技术使车载电子标签和车道天线进行无接触双向数据交换。自动车辆识别技术(Autom

  目前最主要的一种实现方式是利用无线射频识别技术使车载电子标签和车道天线进行无接触双向数据交换。自动车辆识别技术(Automatic Vehicle Identification,简称AVl)是电子不停车收费系统(E1ectronic Toll Collection,简称ETC)的核心部分,可通过安装在路上、路侧和路上方的检测仪器自动辨别通过车辆的身份和类型,为收费提供依据。这种方式具有抗干扰能力强、不受天气影响、体积小、结构灵活、电子标签可读可写等优点,可满足ETC系统甚至未来ITS发展的要求,因此成为AVI系统的主流技术。

  1 系统简介

  nload="javascript:if(>740)=740" align=center border=0>

  车辆自动识别系统由四部分组成,它们分别是:车道控制器(工控机,简称IPC)、通讯板卡(Communication Board,简称CB)、微波天线、车载电子标签。它们之间的关系如图1。

  通讯板卡(CB)选用瑞典Combitech公司的TS3121/00A。CB上带有微处理器、解码器、数据缓冲区、Dual-RAM等,还可以通过设置跳线选择IRQ-no,IO-address, base-address。同时CB插在IPC的ISA总线上,与IPC通过Dual-RAM来实现数据、状态信息与命令的交换。IPC通过程序流程对CB进行控制,并由CB触发微波天线对车载电子标签进行读写。

  2 关键技术

  2.1 Win98下通讯板卡的驱动

  Windows自问世以来,以其强大的功能、优秀的界面得到了广泛的应用,但是Windows是非实时的操作系统,所以为使应用程序即能运行在Win98操作系统上,又能够满足ETC系统对于实时性的要求,可以利用VxD技术实现在Win98下的硬件中断。

  2.1.1 VxD技术简介

  VxD是Visual Device Driver的缩写,它是一种32位保护模式驱动程序,它管理着硬件设备或安装的软件等系统资源,使得多个应用程序可以同时使用该资源。操作系统通过对VxD将物理设备虚拟化,截取应用程序对硬件的请求。

  所有VxD都在虚拟机管理器VMM (Visual Machine Manager)监控下运行,而VMM 实际上是一个特殊的VxD。VMM 执行与系统资源相关的工作,提供虚拟机环境(能产生、调度、卸载VM),负责调度多线程占先时间片及管理虚拟内存等工作。VxD事实上就是实现虚拟机软件的一部分。正是VMM和VxD构成了WIN98的Ring0级系统核心。

  VMM是通过VxD的设备描述符块DDB (Device Descriptor Block)来识别不同的设备。DDB向VMM提供了VxD的主入口点,还向应用程序和其它VxD提供入口点。VMM利用这个入口点将VM及Windows自身的状态通知给VxD,然后VxD通过相应的工作来响应这些事件。由于VxD不仅服务于一个物理设备(比如多个串口) 或仅与一个VM发生联系,所以VxD需要产生自己支持的数据结构(Supporting Data Structure) 来保存每个设备的配置和状态信息。VxD 用一个或多个设备上下文结构来保存设备信息,如I/O端口基址,中断向量等,VxD将自己的每个状态信息保存在VMM的VM控制块中。

  2.1.2 硬件中断的实现

  在保护模式下权限级别按从高到低的次序可分为4级:Ring0,Ring1,Ring2,Ring3。Windows操作系统运行在Ring0级,而普通的应用程序都运行在Ring3级,应用程序不能绕过操作系统直接对硬件、中断和文件系统进行物理访问。由于VxD是作为操作系统的组件运行于第0级,因而可以利用它进行指定的硬件操作。Win98通过VPICD(Virtual Programmable Controll- er Device)管理所有的硬件中断事件,如果有某个VxD事先注册了这个硬件中断的处理程序,那么VPICD就把硬件中断交给这个VxD处理。

  VxD通过调用VPICD的VPICD_Virtua- lize_IRQ服务函数为某个特定的硬件中断进行注册并将回调函数传递给VPICD。一旦VxD已经为中断注册,它将作为一个真正的中断处理函数,为中断设备进行中断服务。

  当CB接收到电子标签中的数据后产生硬件中断,这时IPC暂停其它工作,立即执行在VxD中注册过的中断处理函数,以便在最短时间内完成收费过程。

  编写VxD程序时可以用Vtoolsd3.0生成程序框架(选择C语言),程序的其余部分在Visual C++6.0下编写、编译,使用Softice软件调试,它能捕捉Win98下的硬件中断,并单步调试VxD程序。VxD中的主要函数如下:

  (1)函数OnDeviceInit和OnSystemExit分别负责VxD的初始化和卸载。

  (2)中断处理代码放在下面函数中:

  BOOL __stdcall My_Hw_Int_Handler (VMHANDLE hVM, IRQHANDLE hIRQ)

  { int ref;//板卡的参考值

  ref=Scan();//查看CB是否过产生中断

  while (ref >=0)

  { ProcessInt(ref);//将消息和数据从CB传递到驱动程序

  ref=Scan();

  }

  VPICD_Phys_EOI(hIRQ);

  //tell VPICD to clear the interrupt

  return TRUE;

  }

  (3)函数OnW32Deviceiocontrol用来处理应用程序API调用。

  将生成的*.vxd、*.mak文件与工程文件放在同一个目录中。利用Win9x提供的设备输入输出控制接口,动态装载VxD。应用层与VxD通信的主要代码为:

  HANDLE hDevice;

  hDevice=CreateFile(\\.\,0,0,0,OPEN_EXISTING,FILE_FLAG_DELETE_ON_CLOSE,0);

  if(hDevice==INVALID_HANDLE_VALUE)

  {……}

  DeviceIoControl(hDevice,DIOC_MY_IO,NULL,0,NULL,0,NULL,NULL);

  CloseHandle(hDevice);

  2.2 物理内存读写

  车道控制器对通讯板卡的控制是通过将控制命令写进Dual-RAM中,然后由CB读取命令并执行之。因此需要程序能够直接读写IPC的物理内存。但是为了保证系统的安全性和稳定性,操作系统并不提倡应用程序直接访问硬件资源,所以在Windows下访问物理内存变得相当困难。

  Win98下直接访问物理内存,关键是得到欲访问物理内存所在的内存区域对应的段选择符。一般说来,要求直接访问的物理内存都与实模式下能够寻址的内存有关(即DOS能直接访问的1MB物理内存),在此内存区域中,没有采用分页机制,线性地址即为物理地址。通过设置CB的跳线,可以将Dual-RAM的地址映射到C8000H,这个地址恰好在1MB的范围内。

  接下来在系统级的调试软件SoftIce的界面下,输入ldt命令,可以得到关于段描述符的信息:

  ……

  103F Data16 000C0000 0000FFFF 3 P RW

  ……

  其中第一栏为段选择符,第二栏为段描述符的类型,第三栏为段的基地址(线性地址) 第四栏为段的限长,第五栏为段描述符的特权级,第六栏标志对应段是否存在于内存中,第七栏表示段的访问权限。可以看出这些段的基地址与DOS下的常用内存段完全吻合,也就是说这里的线性地址即为物理地址,因此可以用这些段选择符对相应的物理内存进行访问。该段选择符103F对应的段基地址为000C0000,再加上偏移地址8000,就是Dual-RAM的起始地址000C8000H。

  在得到段选择符之后,即可把该段选择符置于相应的段寄存器中(不能用CS,DS),用该寄存器进行数据访问。用如下语句可以实现读操作(写操作只需进行较小的改动):

  void ReadMemory (WORD sel, DWORD dwOffset,char * str, UINT length)

  { char cRead;

  UINT i=0;

  for ( i=0; i < length; i ++ )

  { _asm

  { push es

  mov ax, sel

  mov es, ax

  mov ebx, dwOffset

  mov al, byte ptr es:[ebx]

  mov cRead, al

  inc dwOffset

  pop es

  }

  str [i]=cRead;

  }

  }

  3 车道控制器与通讯板卡之间的数据交换

  车道控制器与通讯板卡之间是通过一个4KB的双端口RAM实现数据信号交换。双端口RAM具有两组独立的数据、地址和控制线,故称为双端口。对于任意的一个端口来说,都可以独立地进行操作,可以对同一个存储器的任意单元独立地进行读写。外设向主机传递的数据可以通过一个端口送入缓冲区,而不直接立即传递给主机。当缓冲区的数据量达到一定程度时,再让主机将数据取走。主机不需要在取一个数据后等待外设送下一个数据,而是成批地取,从而可以有更多的时间处理其他的事件。常用的双端口RAM是美国Cypress公司的CY7C系列,两端口通过各自的控制信号、片选信号、输出允许和读写控制使得两端口可以像独立的存储器一样使用。

  nload="javascript:if(>740)=740" align=center border=0>

  当CB向地址为C8000H的存储单元执行一次写操作,C8FFDH上的中断标志信号INT flag变为有效;当主机响应中断后,可以向地址为C8000H的存储单元执行一次读操作来清除中断标志信号INT flag。同样,当主机向地址为C8800H的存储单元执行一次写操作,C8FFFH上的中断标志信号INT flag变为有效;当响应中断后,可以向存储单元C8800H执行一次读操作来清除中断标志信号INT flag。此时,C8800H单元中的内容可以由用户定义。

  4 主程序设计

  nload="javascript:if(>740)=740" align=center border=0>

  根据国家、各省及地区的标准对车型进行分类,并确定相应车型的收费金额,确定存储在电子标签中的数据内容和数据格式。最基本的数据信息有:卡号、车主姓名、牌照号码、车型、费额、余额、交易时间等。根据自动车辆识别系统的工作特点和通讯板卡的说明书画出流程图,如图2,最后依照流程图编写主程序。主程

  序设计要遵循以下原则:

  (1)简单性原则

  在保证达到要求的情况下,应力求结构简单,从而缩短处理过程的时间。

  (2)可靠性原则

  尽可能选用成熟的开发工具,保证系统的正确性和可靠性。

  (3)统一性原则

  在设计中,对输入/输出形式、数据的定义和传递等方面要充分保持统一性,便于本系统与其它系统间的资源共享和通信,提高系统的效率。

  5 结束语

  本文综合介绍了自动车辆识别系统的硬件驱动和软件实现。以自动车辆识别系统的工作流程和硬件设备的特点为编写程序的依据,采用VxD驱动程序挂接外部中断,并给出了设备驱动程序挂接中断、物理内存读写的实现细节。实践证明,软件在Win98上运行良好,没有漏掉一个中断,读写操作的正确率达到100%。这种方案对实时性有一定要求的系统设计有一定的参考性。

 
(文/admin)
打赏
免责声明
• 
部分文章来源于网络,我们均标明出处,如果您不希望我们展现您的文章,请与我们联系,我们会尽快处理。
0相关评论
 

(c)2023-2023 www.pec33.com All Rights Reserved

琼ICP备2024045691号