摘 要: 為預付費采暖系統設計了用于供熱中心主管部門依卡購熱的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.