随着出租车行业的发展,对出租车计费器的要求也越来越高,用户不仅要求计费器性能稳定,计费准确,有防作弊功能;同时还要求其具有车票资料打印、IC卡付费、语言报话和电脑串行通信及税控功能。不同国家和地址的计费方式存在差异,如有些地区有夜间收费及郊区收费等,而有些地区则无夜间收费和郊区收费;目前国内有些大城市要计计费器有税控功能,而有些城市无此要求;即使同一地区,不同车型的出租车其计费方式也有差别;而且出租车还面临几年一次的调价或调整计费方式等问题。为此,我们设计了一款计费器。该计费器内设置了多达64个选项(1表示有某项功能,0表示没有),几乎涵盖了大多数国家和地区的出租车计费方式,无需更改计数器的硬件,只需要改相应的选项资料,便可适用于不的国家和地区,且计费资料的传送可由电脑通过RS-232或专用的手持式资料传输器来完成,非常方便。目前该计费器已在我国大陆的一些大中城市,香港、澳门和台湾地区以及越南使用。
1 原理框图
计费器组成方框图如图1所示。
1.1 主控模块
主控模块如图2所示。
CPU选89C51RC2,它的主要特点是:ROM为32K FLASH,RAM为512byte;具有双DPTR寄存器、一个硬件看门狗定时器、3个16位定时/计数器、7个中断源,其它与MCS51基本相同。双DPTR寄存器给软件编程带来了很大的方便。
复位、看门狗及电源监控由MAX813芯片来完成。计费器在营运过程中,由于干扰等各种因素的影响。有可能出现死机现象导致出租车无法正常营运。为了克服这一现象,除了充分利用CPU本身的看门狗定时器外,还需外加看门狗电路。MAX813的主要特点如下:
(1)系统上电、掉电以及供电电压降低时,第7脚产生复位输出,复位脉冲宽度的典型值为200ms,高电平有效,复位门限为4.65V。
(2)如果在1.6s内没有触发该电路(即第6路无脉冲输入),则第8脚输出一个低电平信号,即看门狗电路输出信号。
(3)手动复位输入,低电平有效,即第1脚输入一个低电平,则第7脚产生复位输出。
(4)具有1.25V门限值检测器,第4脚为输入,第5脚为输出。
实际应用时,将第1脚与第8脚相连,第7脚接CPU的复位脚(89C51RC2的第9脚),第6脚与CPU的P1.0相连。在营运过程中,P1.0不断输出脉冲信号。如果因某种原因CPU进入死循环,则P1.0无脉冲输出。于是1.6秒后在MAX813的第8脚输出低电平,该低电平加到第1脚,使MAX813产生复位输出,使CPU有效复位,摆脱死循环的困境。另外,当电源电压低于门限值4.65V时,MAX813也产生复位输出,CPU处于复位状态,不执行任何指令,直到电源电压恢复正常,因此可有效防止因电源电压较低时CPU产生错误的动作。
时钟及存储器由芯片DS1244Y来完成,该芯片是一具有幽灵式(Phantom)时钟的32K×8NVSRAM,第1脚为复位脚,其余和一般SRAM兼容。它提供嵌入式RTC和全静态非挥发性RAM,含有内芷式锂电池和控制电路。此控制电路不断监视Vcc,当Vcc>4.5V时,DS1244Y提供全部功能;当Vcc<4.0V时,写保护有效,所有的输入变成“Don't Care”,所有的输出处于高阻态;当Vcc≤3.0V时,电源自动切到内部的锂电池。NVSRAM的操作和原来的SRAM一模一样,但时钟操作有区别。一次完整的时钟操作由D0脚串行输入预定的8个字节(即64个bit)给DS1244Y,DS1244Y收到8个字节后,再通过D0脚串行写入或读出8个字节(即时钟数据)。编程时间将NVSRAM的最后一个字节地址(7FFFH)定义为时钟地址。因此,NVSRAM的最后一个字节空间不能作RAM用。实际设计电路时,将DS1244Y的第1脚(RST)与CPU的P1.1相连。CPU复位后,由软件通过P1.1给出一个低电平使DS1244Y复位。须特别注意的是DS1244Y的第1脚不要与Vcc相连。假如与Vcc相连,当CPU产生复位时(此复位可由看门狗或手动产生),如果此时CPU正在对时钟进行读写,则CPU复位后,会对RAM或时钟进行读写操作,导致意料不到的错误。有关DS1244Y的具体用法请见参考文献[1]。
打印功能,可通过选项设定,也可选择税控打印。各种打印命令及资料均由电脑通过RS-232或手持式资料传输器传给计费器,存储在DS1244Y中。以何种格式打印何种数据完全由用户自动选择,因此可适用不同地区、不同客户之需要。
计费器可使用司机卡、采集卡、收费卡及税控卡等四种IC卡,究竟使用哪种卡可由选项控制。司机卡表示每次开机均要插入对应卡(一台出租车对应两张司机卡),计费器才能正常工作;采集卡可采集计费器中存储的各种营运资料;收费卡表示乘客可使用该卡支持车资;税控卡由税务部门发行,只有税控计费器才需要此卡。
计费器通过一条I/O线控制语言接口电路。乘客上车时,CPU给出50ms的低脉冲使语音接口电路说一段话。乘客下车时,CPU给出20ms的低脉冲使语音接口电路说另一段话。
计费器可通过RS-232与电脑进行串行通信,通过电脑设置计费器的各种参数及采集计费器里存储的各种数据。
1.2 税控模块
该模块由税部门专门提供,税控计费器需要此模块,非税控计费器则不需要此模块。主控模块与税控模块实行串行通信。计费器正常工作时,主控模块按要求将各种数据串行传送到税控模块,税控模块将收到的数据存储或显示。
1.3 电源模块
该模块为一开关电源,将输入的12V直流电源变为稳定的5V电源。由于12V电源由出租车上的电瓶提供,其电压有一定的离散性,当电瓶质量不好时12V电源较低。而开关电源的适用范围较广,且驱动能力较强,使用开关电源可有效防止因输入电压过低而产生的各种故障现象。设计电源模块应注意电源的抗干扰能力。
1.4 按键显示模块
按键显示模块如图3所示,共需4片4511、1片4028、1片2003、20个数码管及一些发光二极管(作为指示灯,如计程、计时收费指示灯)。计费器提供6个按键功能,但税控计费器不需要6个按键,只需要3个按键,因而无需4028译码器,利用CPU的三条I/O线即可实现三个按键的功能。
1.5 防作弊及脉冲输入模块
防作弊及脉冲输入模块如图4所示。为了提高计费器的防作弊功能,采用了两片PIC508,传感器中装一片PIC508,计费器中装一片PIC508。其工作原理如下:每次计费器复位后,计费器中的PIC508送一随机数(1个字节)作为密码给传感器中的PIC508,车辆每产生一个脉冲,传感器中的PIC508均要将此密码送回到计费器的PIC508。只有密码正确,计费器中的PCI508才发正确信息给CPU,表示输入了一脉冲,否则发错误信息给CPU。当CPU收到三次错误信息(次数可任意设置)时,CPU报警表示有作弊现象。由于不同时刻,即使同一个计费器的密码也不相同且是随机,因此采用该方法能效地防止司机作弊。
2 软件设计应注意的问题
由于计数器的选项多达64个,功能齐全,能适应不同地区的需要,软件编程及调试比较复杂,需要特别小心。为了使计费器稳定、可靠地工作,软件设计主要考虑了以下几个方面:
(1)为了防止计费器死机,软件编程时采用了指令冗余技术、软件陷阱技术以及软件看门狗技术。请参见参考文献[2]。
(2)为了防止程序“乱飞”而非法修改计费器所设置好的各种参数,从软件的角度对计费器的各种参数进行了多重保护。必须通过“合法”的途径才能修改参数,而程序“乱飞”也不能修改计费器所设置好的参数。
(3)司机卡、采集卡、收费卡、税控卡共用一个IC卡接口,税控模块优先访问插入的IC卡并进行判断,直接与税控初始化卡税务信息卡和税务稽查卡交换信息。如果不是税控卡,则将控制权交给主控模块,主控模块要注意区分卡的类型,按照IC卡的有关控制命令正确编程。
(4)对DS1244Y时钟操作时,串行输入数据的第5字节的第5位(RST)须置0,以便DS1244Y能接收复位信号。每次上电后,由软件对其复位。
(5)任何时候均要注意保存好计费器所处的状态及各种数据,复位后计费器能够回到原来的状态。如计费器处于载客状态,复位后计费器仍然回到载客状态,且车资、收费里程、收费时间及单价同复位前一样。
(6)计费器与PC机串行通信时,PC机最好选用VB6.0语言。VB6.0提供了串行通讯MSComm控件来为应用程序提供串行通信,其良好的用户界面、简单方便的串行通信和实用性强的优点,无须借用其它语言就可以开发出优秀的通信软件。
目前,该计费器在使用过程中用户反应良好,返修率很低。另外,个别地方要求计费器能存储2000条客次记录,而每条客次记录约点50byte,这样选用DS-1244Y显示不够。此时,可改用DS1248,该芯片的容量为128Kbyte,其它与DS1244Y完全一样。