摘 要: 为预付费采暖系统设计了用于供热中心主管部门依卡购热的IC卡购热系统,IC卡读写器主控芯片为单片机STC89C52RC,通过串口(或USB接口)与上位机通信,上位机软件采用LabVIEW开发,使用LabSQL实现了对数据库的管理。
关键词: LabVIEW;LabSQL;数据库;IC卡;购热
随着政府和个人对节能环保的重视程度越来越高,住宅供热系统按热量消耗单独计费以及根据室内温度调控热量供给成为当前研究的热门问题。而用于供暖主管部门的预付费购热系统也配套产生。不同于IC卡购买天然气、水和电,采暖购热由于供暖部门存在市政统一供暖、社区独立供暖等多种形式,同时热量的传递也不同于水、电和天然气,损耗因环境影响大,因此无法采用全国甚至全市的统一收费标准,严格来讲收费标准应取决于当地供暖成本(包括燃料、维护、管理等)以及供暖系统的供热效率等因素。如通过统计数据,确定单一收费标准,不但无法确保公平,更有悖于国家对供暖节能的初衷。同时供暖费用相对水、电等具有区域性、时效性、集中消费等特点,一年仅有几个月的供暖需求,且费用较高,因此还应在系统中考虑到用户退费的因素,而退费的资费应参照其缴费时的资费标准而不应是退费时的当时资费标准。综上所述,传统的IC卡预付费系统已无法适应热计量计费的需求。
供热计费系统由流量计、入水口/出水口温度传感器组成,微控制器按一定周期采集实时的流量和温度差,用以计算产生的费用[1],计算公式如式(1)。其中M为t1~t2时间段内产生的用热费用;K为供热系数,由地方供热部门根据各地实际情况确定;Tin、Tout为入水口、出水口温度;I为当时测量的流速。
而一旦供热计费系数有了区域和时段的变化,则类似水(电、气)卡的将购买的水(电、气)量存入卡内的方式将带来以下几种弊端:
(1)各区域预付费购热系统的不兼容:如A区的用户无法到B区购热。
(2)用户退费可能造成资费不一致:如去年的系数不同于今年。
针对上述弊端,本文提出了将实际购热的金额与当时该区确定的供热计费系数同时存入用户热量卡内的方案,同时购热系统依靠用户信息数据库与区域供热系数数据库绑定用户热量卡,从而克服上述不足。
1 硬件系统设计
如图1所示,硬件系统为USB接口的IC卡读写器,所选单片机采用宏晶公司的STC89C52RC。STC89C52RC功耗低(工作电流4~7 mA)、抗干扰能力强(3.4~5.5 V可工作,抗2 000 V快速脉冲干扰)、自动加密、读写寿命长,且通过串口即可下载程序,方便了日后的升级。IC卡芯片为西门子的SLE4442[2],与单片机依靠I2C协议进行通信。与上位机的接口采用USB口,通过凌阳公司的UART-USB芯片SPCP825A实现了单片机UART到电脑终端的数据传输[3]。USB口更能方便地为读写器系统提供所需的5 V电源,而全系统的5 V供电要求则省去了电源管理芯片。
2 单片机程序设计
单片机主要完成如下主要任务:
(1)读取IC卡内信息:用户ID号、余额、用户卡内供热系数等。
(2)将卡内信息传到上位机软件。
(3)按照上位机指令对IC卡进行写操作:IC卡初始化(含注销)、充值、修改ID号、修改计费系数等。
该系统中,由于IC卡购热属于预付费业务,且资费标准暂时无法统一并固定。为了避免用热费用调整以及退费带来的误差,本系统暂确定卡内存储的为交纳的金额而不是购买的热量值,同时在每次充卡操作时将最新的热量计算系数写入卡内,确保用户在新的用热周期接受新的热量资费标准,而退费时则直接按余额退费,不需要进行费用-热量的计算。
2.1 数据定义
IC卡内的数据包括用户ID号、金额、系数等相关信息,具体定义如表1所示。
ID号为用户的唯一标识码,对应于数据库内的用户基本信息,如姓名、联系电话、家庭住址和邮政编码等信息,金额与供热系数均采用4 B以浮点型数据格式存放。由于单片机读取IC卡只能以I2C协议按字节读取,为了读取方便,定义了一个浮点型与数组的共同体,程序如下:
typedef union
{
float f;
long l;
uchar M[4];
}EX_TYPE;
EX_TYPE a,b,c; //a,b,c分别用于
ID、金额、系数三个变量
这样,变量的计算和判断时,用长整型a.l、浮点型b.f和c.f;涉及到数据存储时,则直接处理数组a.M[4]、b.M[4]和c.M[4]即可。
2.2 程序设计
单片机程序如图2所示,单片机将UART、中断等初始化后,进入休眠模式,等待上位机指令,接收到读卡指令则读取IC卡信息并按“ID号、金额、系数”的顺序上传到上位机,接收到写卡的指令后将接收到的数据信息按顺序存入a.M[4]、b.M[4]和c.M[4]三个数组,并更新IC卡内数据。在读卡和写卡时都要校验IC卡的加密位,如没有插卡或校验未通过则向上位机发送错误代码。IC卡的读写为I2C协议,IC卡芯片SLE4442是以字节方式存储,其中ID号为长整型数据,金额与系数均为浮点型数据,上述三个参数各占4 B。
3 上位机软件设计
上位机软件利用LabVIEW开发。LabVIEW是美国国家仪器公司推出的一种虚拟仪器开发平台,也是目前国际上应用最广的虚拟仪器开发工具之一。作为一种图形化编程语言(G语言),LabVIEW能把复杂、繁琐的语言编程简化为用菜单和图标提示的程序流程“绘制”方式,其主要用于数据采集、仪器控制、过程监控等领域[4]。针对数据库的访问则利用LabVIEW用户开发的免费LabVIEW数据库访问工具包LabSQL。LabSQL利用Microsoft ADO和SQL语言来完成数据库访问,它将复杂的底层ADO及SQL操作封装成一系列的LabSQL VIs,用户只需要了解各个VIs的接口及其所实现的功能就可以实现所有的数据库操作,简单易用[5]。
软件主要实现如下主要功能:
(1)读取用户卡内ID号、金额、供热系数。根据用户ID号从数据库中提取用户资料以及历史充值退费记录并分别显示。
(2)为新建用户添加数据库、分配ID号并将ID信息写入用户卡内。
(3)修改用户资料并保存到数据库。
(4)注销用户。
(5)添加充值或退费的数据库记录并对IC卡金额内容进行修改。
(6)向卡内写入新的供热系数。
数据库涉及用户信息表单和充值退费记录表单,由用户ID号关联。用户信息表单包括了编号(用作用户ID号,为主键)、姓名、联系电话、家庭住址和邮政编码等字段,充值退费记录表单含有编号(主键)、用户ID号、时间、充值金额、退费金额以及备注等字段。数据库选用Microsoft Office Access 2003。
由于整个系统实现的功能是与下位机系统的串行通信和上位机数据库管理,因此,主要使用了LabVIEW中设备IO类(Instrument IO)中的的串口子模块(Serial)和数据库类(LabSQL)的记录操作等函数(表2)。图3为主程序框图,其中Case Structure由前面板的一组按键形成的二进制值进行选择,分别实现了读卡、创建、保存、注销、充值、退费等任务。在读卡程序中,率先通过串口向下位机发送读卡指令并读出数据,将读到的数据字符串转换为无符号字节数组,每4 B通过强制转换函数将数据转换为“长整形、单精度浮点、单精度浮点”格式分别赋予ID号、卡内余额和供热系数。利用ID号的传递,将数据库用户信息表单中该ID号的记录按不同字段显示在前面板各个文本框内[6],同时在充值退费记录表单中将所属该ID号的充值、退费信息显示在前面板的列表内。需要说明的是,为了数据安全,用户ID号并不显示在前面板中,仅在后台程序中使用。
用户管理管理子程序主要包括对用户的创建、修改保存和注销,不但要对数据库用户信息表单中相应记录的添加、修改或删除,还要对IC卡进行相应的设置ID号或重新初始化等操作。创建用户模块仅完成了添加记录操作,需要操作人员将新用户个人信息添加到前面板后点击保存以启动保存模块,即将该记录的其他字段进行保存,同时将ID号、金额和系数按字符串格式通过串口发送到读写器用来烧写IC卡。注销时则删除当前记录,并向串口发出约定字符串以对IC卡初始化。
充值和退费两个子程序将对充值退费记录表单进行操作,按照ID号、时间、充值金额或退费金额添加充值或退费的记录,时间由获取日期的模块(Get Date/Time String)获得。同时将数据字符串以“ID号、金额、系数”的格式发送到下位机用于更新IC卡数据,充值时将充值金额与IC卡余额的和作为金额字符串,退费时则将金额赋0。
IC卡预付费购热系统,通过直接存储计费系数应对供暖计费的复杂性、时效性和地域性带来的资费难统一和供暖季结束退费等实际问题,硬件电路设计要充分考虑成本因素。而LabVIEW软件简易直观的编程环境以及对于硬件系统更好的适应性,大大缩短了以串口通信为主的购热系统的开发周期,同时该系统应用于数据库管理的部分并不是十分复杂,目前仅有两个表单的基本操作,尽管LabVIEW对于数据库的访问并不是强项,但其免费的工具包LabSQL则能轻而易举地实现上述要求,后续的如对于用户住址创建字典库以将ID号字段更完善的管理等需求都能够得到LabSQL直观、简易的支持,这些后续功能有待日后不断完善。
参考文献
[1] 李开元,刘洪运,王卫东,等.基于STC单片机的温控热计费采暖阀门的设计[J].电子技术应用,2011,37(5):56-59,63.
[2] 陈建良,李玉谦.基于SLE4442的IC卡系统设计与实现[J].微计算机信息,2008,24(9-2):247-248,254.
[3] 李开元,胡敏露,王卫东,等.USB心电信号采集卡的研制[J].医疗卫生装备,2006,27(3):25-26.
[4] 边香燕,朱瑞祥,王战涛.基于LabVIEW和数据库的光谱仪器软件设计[J].微计算机信息,2008,24(7-1):117-119.
[5] 徐红安,费仁元.用ADO构建LabVIEW中的数据库访问接口[J].北京工业大学学报,2003(3):10-13.
[6] 罗文辉.LabVIEW中的数据库访问[J].武汉理工大学学报·信息与管理工程版[J],2006,28(3):13-16.