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