摘 要: 為預(yù)付費(fèi)采暖系統(tǒng)設(shè)計(jì)了用于供熱中心主管部門依卡購熱的IC卡購熱系統(tǒng),IC卡讀寫器主控芯片為單片機(jī)STC89C52RC,通過串口(或USB接口)與上位機(jī)通信,上位機(jī)軟件采用LabVIEW開發(fā),使用LabSQL實(shí)現(xiàn)了對(duì)數(shù)據(jù)庫的管理。
關(guān)鍵詞: LabVIEW;LabSQL;數(shù)據(jù)庫;IC卡;購熱
隨著政府和個(gè)人對(duì)節(jié)能環(huán)保的重視程度越來越高,住宅供熱系統(tǒng)按熱量消耗單獨(dú)計(jì)費(fèi)以及根據(jù)室內(nèi)溫度調(diào)控?zé)崃抗┙o成為當(dāng)前研究的熱門問題。而用于供暖主管部門的預(yù)付費(fèi)購熱系統(tǒng)也配套產(chǎn)生。不同于IC卡購買天然氣、水和電,采暖購熱由于供暖部門存在市政統(tǒng)一供暖、社區(qū)獨(dú)立供暖等多種形式,同時(shí)熱量的傳遞也不同于水、電和天然氣,損耗因環(huán)境影響大,因此無法采用全國甚至全市的統(tǒng)一收費(fèi)標(biāo)準(zhǔn),嚴(yán)格來講收費(fèi)標(biāo)準(zhǔn)應(yīng)取決于當(dāng)?shù)毓┡杀?包括燃料、維護(hù)、管理等)以及供暖系統(tǒng)的供熱效率等因素。如通過統(tǒng)計(jì)數(shù)據(jù),確定單一收費(fèi)標(biāo)準(zhǔn),不但無法確保公平,更有悖于國家對(duì)供暖節(jié)能的初衷。同時(shí)供暖費(fèi)用相對(duì)水、電等具有區(qū)域性、時(shí)效性、集中消費(fèi)等特點(diǎn),一年僅有幾個(gè)月的供暖需求,且費(fèi)用較高,因此還應(yīng)在系統(tǒng)中考慮到用戶退費(fèi)的因素,而退費(fèi)的資費(fèi)應(yīng)參照其繳費(fèi)時(shí)的資費(fèi)標(biāo)準(zhǔn)而不應(yīng)是退費(fèi)時(shí)的當(dāng)時(shí)資費(fèi)標(biāo)準(zhǔn)。綜上所述,傳統(tǒng)的IC卡預(yù)付費(fèi)系統(tǒng)已無法適應(yīng)熱計(jì)量計(jì)費(fèi)的需求。
供熱計(jì)費(fèi)系統(tǒng)由流量計(jì)、入水口/出水口溫度傳感器組成,微控制器按一定周期采集實(shí)時(shí)的流量和溫度差,用以計(jì)算產(chǎn)生的費(fèi)用[1],計(jì)算公式如式(1)。其中M為t1~t2時(shí)間段內(nèi)產(chǎn)生的用熱費(fèi)用;K為供熱系數(shù),由地方供熱部門根據(jù)各地實(shí)際情況確定;Tin、Tout為入水口、出水口溫度;I為當(dāng)時(shí)測量的流速。
而一旦供熱計(jì)費(fèi)系數(shù)有了區(qū)域和時(shí)段的變化,則類似水(電、氣)卡的將購買的水(電、氣)量存入卡內(nèi)的方式將帶來以下幾種弊端:
(1)各區(qū)域預(yù)付費(fèi)購熱系統(tǒng)的不兼容:如A區(qū)的用戶無法到B區(qū)購熱。
(2)用戶退費(fèi)可能造成資費(fèi)不一致:如去年的系數(shù)不同于今年。
針對(duì)上述弊端,本文提出了將實(shí)際購熱的金額與當(dāng)時(shí)該區(qū)確定的供熱計(jì)費(fèi)系數(shù)同時(shí)存入用戶熱量卡內(nèi)的方案,同時(shí)購熱系統(tǒng)依靠用戶信息數(shù)據(jù)庫與區(qū)域供熱系數(shù)數(shù)據(jù)庫綁定用戶熱量卡,從而克服上述不足。
1 硬件系統(tǒng)設(shè)計(jì)
如圖1所示,硬件系統(tǒng)為USB接口的IC卡讀寫器,所選單片機(jī)采用宏晶公司的STC89C52RC。STC89C52RC功耗低(工作電流4~7 mA)、抗干擾能力強(qiáng)(3.4~5.5 V可工作,抗2 000 V快速脈沖干擾)、自動(dòng)加密、讀寫壽命長,且通過串口即可下載程序,方便了日后的升級(jí)。IC卡芯片為西門子的SLE4442[2],與單片機(jī)依靠I2C協(xié)議進(jìn)行通信。與上位機(jī)的接口采用USB口,通過凌陽公司的UART-USB芯片SPCP825A實(shí)現(xiàn)了單片機(jī)UART到電腦終端的數(shù)據(jù)傳輸[3]。USB口更能方便地為讀寫器系統(tǒng)提供所需的5 V電源,而全系統(tǒng)的5 V供電要求則省去了電源管理芯片。
2 單片機(jī)程序設(shè)計(jì)
單片機(jī)主要完成如下主要任務(wù):
(1)讀取IC卡內(nèi)信息:用戶ID號(hào)、余額、用戶卡內(nèi)供熱系數(shù)等。
(2)將卡內(nèi)信息傳到上位機(jī)軟件。
(3)按照上位機(jī)指令對(duì)IC卡進(jìn)行寫操作:IC卡初始化(含注銷)、充值、修改ID號(hào)、修改計(jì)費(fèi)系數(shù)等。
該系統(tǒng)中,由于IC卡購熱屬于預(yù)付費(fèi)業(yè)務(wù),且資費(fèi)標(biāo)準(zhǔn)暫時(shí)無法統(tǒng)一并固定。為了避免用熱費(fèi)用調(diào)整以及退費(fèi)帶來的誤差,本系統(tǒng)暫確定卡內(nèi)存儲(chǔ)的為交納的金額而不是購買的熱量值,同時(shí)在每次充卡操作時(shí)將最新的熱量計(jì)算系數(shù)寫入卡內(nèi),確保用戶在新的用熱周期接受新的熱量資費(fèi)標(biāo)準(zhǔn),而退費(fèi)時(shí)則直接按余額退費(fèi),不需要進(jìn)行費(fèi)用-熱量的計(jì)算。
2.1 數(shù)據(jù)定義
IC卡內(nèi)的數(shù)據(jù)包括用戶ID號(hào)、金額、系數(shù)等相關(guān)信息,具體定義如表1所示。
ID號(hào)為用戶的唯一標(biāo)識(shí)碼,對(duì)應(yīng)于數(shù)據(jù)庫內(nèi)的用戶基本信息,如姓名、聯(lián)系電話、家庭住址和郵政編碼等信息,金額與供熱系數(shù)均采用4 B以浮點(diǎn)型數(shù)據(jù)格式存放。由于單片機(jī)讀取IC卡只能以I2C協(xié)議按字節(jié)讀取,為了讀取方便,定義了一個(gè)浮點(diǎn)型與數(shù)組的共同體,程序如下:
typedef union
{
float f;
long l;
uchar M[4];
}EX_TYPE;
EX_TYPE a,b,c; //a,b,c分別用于
ID、金額、系數(shù)三個(gè)變量
這樣,變量的計(jì)算和判斷時(shí),用長整型a.l、浮點(diǎn)型b.f和c.f;涉及到數(shù)據(jù)存儲(chǔ)時(shí),則直接處理數(shù)組a.M[4]、b.M[4]和c.M[4]即可。
2.2 程序設(shè)計(jì)
單片機(jī)程序如圖2所示,單片機(jī)將UART、中斷等初始化后,進(jìn)入休眠模式,等待上位機(jī)指令,接收到讀卡指令則讀取IC卡信息并按“ID號(hào)、金額、系數(shù)”的順序上傳到上位機(jī),接收到寫卡的指令后將接收到的數(shù)據(jù)信息按順序存入a.M[4]、b.M[4]和c.M[4]三個(gè)數(shù)組,并更新IC卡內(nèi)數(shù)據(jù)。在讀卡和寫卡時(shí)都要校驗(yàn)IC卡的加密位,如沒有插卡或校驗(yàn)未通過則向上位機(jī)發(fā)送錯(cuò)誤代碼。IC卡的讀寫為I2C協(xié)議,IC卡芯片SLE4442是以字節(jié)方式存儲(chǔ),其中ID號(hào)為長整型數(shù)據(jù),金額與系數(shù)均為浮點(diǎn)型數(shù)據(jù),上述三個(gè)參數(shù)各占4 B。
3 上位機(jī)軟件設(shè)計(jì)
上位機(jī)軟件利用LabVIEW開發(fā)。LabVIEW是美國國家儀器公司推出的一種虛擬儀器開發(fā)平臺(tái),也是目前國際上應(yīng)用最廣的虛擬儀器開發(fā)工具之一。作為一種圖形化編程語言(G語言),LabVIEW能把復(fù)雜、繁瑣的語言編程簡化為用菜單和圖標(biāo)提示的程序流程“繪制”方式,其主要用于數(shù)據(jù)采集、儀器控制、過程監(jiān)控等領(lǐng)域[4]。針對(duì)數(shù)據(jù)庫的訪問則利用LabVIEW用戶開發(fā)的免費(fèi)LabVIEW數(shù)據(jù)庫訪問工具包LabSQL。LabSQL利用Microsoft ADO和SQL語言來完成數(shù)據(jù)庫訪問,它將復(fù)雜的底層ADO及SQL操作封裝成一系列的LabSQL VIs,用戶只需要了解各個(gè)VIs的接口及其所實(shí)現(xiàn)的功能就可以實(shí)現(xiàn)所有的數(shù)據(jù)庫操作,簡單易用[5]。
軟件主要實(shí)現(xiàn)如下主要功能:
(1)讀取用戶卡內(nèi)ID號(hào)、金額、供熱系數(shù)。根據(jù)用戶ID號(hào)從數(shù)據(jù)庫中提取用戶資料以及歷史充值退費(fèi)記錄并分別顯示。
(2)為新建用戶添加數(shù)據(jù)庫、分配ID號(hào)并將ID信息寫入用戶卡內(nèi)。
(3)修改用戶資料并保存到數(shù)據(jù)庫。
(4)注銷用戶。
(5)添加充值或退費(fèi)的數(shù)據(jù)庫記錄并對(duì)IC卡金額內(nèi)容進(jìn)行修改。
(6)向卡內(nèi)寫入新的供熱系數(shù)。
數(shù)據(jù)庫涉及用戶信息表單和充值退費(fèi)記錄表單,由用戶ID號(hào)關(guān)聯(lián)。用戶信息表單包括了編號(hào)(用作用戶ID號(hào),為主鍵)、姓名、聯(lián)系電話、家庭住址和郵政編碼等字段,充值退費(fèi)記錄表單含有編號(hào)(主鍵)、用戶ID號(hào)、時(shí)間、充值金額、退費(fèi)金額以及備注等字段。數(shù)據(jù)庫選用Microsoft Office Access 2003。
由于整個(gè)系統(tǒng)實(shí)現(xiàn)的功能是與下位機(jī)系統(tǒng)的串行通信和上位機(jī)數(shù)據(jù)庫管理,因此,主要使用了LabVIEW中設(shè)備IO類(Instrument IO)中的的串口子模塊(Serial)和數(shù)據(jù)庫類(LabSQL)的記錄操作等函數(shù)(表2)。圖3為主程序框圖,其中Case Structure由前面板的一組按鍵形成的二進(jìn)制值進(jìn)行選擇,分別實(shí)現(xiàn)了讀卡、創(chuàng)建、保存、注銷、充值、退費(fèi)等任務(wù)。在讀卡程序中,率先通過串口向下位機(jī)發(fā)送讀卡指令并讀出數(shù)據(jù),將讀到的數(shù)據(jù)字符串轉(zhuǎn)換為無符號(hào)字節(jié)數(shù)組,每4 B通過強(qiáng)制轉(zhuǎn)換函數(shù)將數(shù)據(jù)轉(zhuǎn)換為“長整形、單精度浮點(diǎn)、單精度浮點(diǎn)”格式分別賦予ID號(hào)、卡內(nèi)余額和供熱系數(shù)。利用ID號(hào)的傳遞,將數(shù)據(jù)庫用戶信息表單中該ID號(hào)的記錄按不同字段顯示在前面板各個(gè)文本框內(nèi)[6],同時(shí)在充值退費(fèi)記錄表單中將所屬該ID號(hào)的充值、退費(fèi)信息顯示在前面板的列表內(nèi)。需要說明的是,為了數(shù)據(jù)安全,用戶ID號(hào)并不顯示在前面板中,僅在后臺(tái)程序中使用。
用戶管理管理子程序主要包括對(duì)用戶的創(chuàng)建、修改保存和注銷,不但要對(duì)數(shù)據(jù)庫用戶信息表單中相應(yīng)記錄的添加、修改或刪除,還要對(duì)IC卡進(jìn)行相應(yīng)的設(shè)置ID號(hào)或重新初始化等操作。創(chuàng)建用戶模塊僅完成了添加記錄操作,需要操作人員將新用戶個(gè)人信息添加到前面板后點(diǎn)擊保存以啟動(dòng)保存模塊,即將該記錄的其他字段進(jìn)行保存,同時(shí)將ID號(hào)、金額和系數(shù)按字符串格式通過串口發(fā)送到讀寫器用來燒寫IC卡。注銷時(shí)則刪除當(dāng)前記錄,并向串口發(fā)出約定字符串以對(duì)IC卡初始化。
充值和退費(fèi)兩個(gè)子程序?qū)?duì)充值退費(fèi)記錄表單進(jìn)行操作,按照ID號(hào)、時(shí)間、充值金額或退費(fèi)金額添加充值或退費(fèi)的記錄,時(shí)間由獲取日期的模塊(Get Date/Time String)獲得。同時(shí)將數(shù)據(jù)字符串以“ID號(hào)、金額、系數(shù)”的格式發(fā)送到下位機(jī)用于更新IC卡數(shù)據(jù),充值時(shí)將充值金額與IC卡余額的和作為金額字符串,退費(fèi)時(shí)則將金額賦0。
IC卡預(yù)付費(fèi)購熱系統(tǒng),通過直接存儲(chǔ)計(jì)費(fèi)系數(shù)應(yīng)對(duì)供暖計(jì)費(fèi)的復(fù)雜性、時(shí)效性和地域性帶來的資費(fèi)難統(tǒng)一和供暖季結(jié)束退費(fèi)等實(shí)際問題,硬件電路設(shè)計(jì)要充分考慮成本因素。而LabVIEW軟件簡易直觀的編程環(huán)境以及對(duì)于硬件系統(tǒng)更好的適應(yīng)性,大大縮短了以串口通信為主的購熱系統(tǒng)的開發(fā)周期,同時(shí)該系統(tǒng)應(yīng)用于數(shù)據(jù)庫管理的部分并不是十分復(fù)雜,目前僅有兩個(gè)表單的基本操作,盡管LabVIEW對(duì)于數(shù)據(jù)庫的訪問并不是強(qiáng)項(xiàng),但其免費(fèi)的工具包LabSQL則能輕而易舉地實(shí)現(xiàn)上述要求,后續(xù)的如對(duì)于用戶住址創(chuàng)建字典庫以將ID號(hào)字段更完善的管理等需求都能夠得到LabSQL直觀、簡易的支持,這些后續(xù)功能有待日后不斷完善。
參考文獻(xiàn)
[1] 李開元,劉洪運(yùn),王衛(wèi)東,等.基于STC單片機(jī)的溫控?zé)嵊?jì)費(fèi)采暖閥門的設(shè)計(jì)[J].電子技術(shù)應(yīng)用,2011,37(5):56-59,63.
[2] 陳建良,李玉謙.基于SLE4442的IC卡系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].微計(jì)算機(jī)信息,2008,24(9-2):247-248,254.
[3] 李開元,胡敏露,王衛(wèi)東,等.USB心電信號(hào)采集卡的研制[J].醫(yī)療衛(wèi)生裝備,2006,27(3):25-26.
[4] 邊香燕,朱瑞祥,王戰(zhàn)濤.基于LabVIEW和數(shù)據(jù)庫的光譜儀器軟件設(shè)計(jì)[J].微計(jì)算機(jī)信息,2008,24(7-1):117-119.
[5] 徐紅安,費(fèi)仁元.用ADO構(gòu)建LabVIEW中的數(shù)據(jù)庫訪問接口[J].北京工業(yè)大學(xué)學(xué)報(bào),2003(3):10-13.
[6] 羅文輝.LabVIEW中的數(shù)據(jù)庫訪問[J].武漢理工大學(xué)學(xué)報(bào)·信息與管理工程版[J],2006,28(3):13-16.