專利名稱:加氣(油)站ic卡智能收費技術的制作方法
技術領域:
本發明涉及利用計算機軟件技術與采集卡對加氣(油)站IC卡智能控制及收費技術。
背景技術:
目前,大多數生產廠商開發的軟件只具備一部份功能,并且只能針對本廠生產的型號和類別,有的軟件公司雖然開發了計算機軟件來處理一部份數據,但達不到智能化的要求,不能獲取LED屏相同的顯示數據,有的獲取了但存在較大的誤差,精確度難以達到100%,沒有一套完整的智能化的解決方案,從而難以推廣。在不得以的情況下,采用對加氣(油)機加氣(油)的數量手工輸入電腦,同樣出現有操作工記錄不規范或者私下勾結少計數量、私分現金,車輛加氣(油)后逃離,內外車輛勾結,操作工零鈔找補難,數據統計、查詢、匯總費時、費力,工作效率低等各種現象的存在,結果不能滿足各部門生產、管理的需要。
發明內容
發明目的通過一套完整的解決方案,利用計算機軟件技術與采集卡相結合準確獲取LED顯示屏的加氣(油)數量,并自動控制其啟動、停止操作,用非接觸式IC卡結算收費。
技術方案一、硬件部份中心服務配置PC機(用于后臺處理程序)、調制解調器、UPS、接觸式IC卡讀寫器、非接觸式IC卡讀寫器加氣站配置工控機、高性能PC機(用前臺數據處理工作)、數據采集卡、接觸式IC卡讀寫器、調制解調器、UPS、非接觸式IC卡刷卡器、控制轉換模塊、線纜等。
二、軟件部份1、接收程序負責完成加氣點氣量的數據采集和刷卡交易記錄的形成與存儲。圖12、前臺程序負責完成加氣點與中心記錄的交換、現場充值、現金收訖以及現場數據處理等工作。圖23、后臺程序負責完成IC卡的初始化、充值、掛失、年審以及對刷卡、充值、初始化數據的統計、查詢、打印、EXCEL報表輸出以及各類報表匯總等處理工作。圖3三、工作流程1、IC卡的準備1、初始化IC卡分別完成對操作卡、車卡、司機卡、優惠卡、普通卡的初始化工作。
IC卡內信息卡號、卡類、*車輛自編號、車牌號、有效期、標記、*金額、密碼。
數據庫信息持卡人*姓名、*性別、*年齡、*身份證號、*相片、初始化日期、操作員。
操作卡用于加氣工交接班、加氣工代收費、異常刷卡處理。
車卡用于加氣車輛的識別。
司機卡用于公司內部車輛的加氣管理。
優惠卡用于合作單位加氣車輛的折扣收費管理。
普通卡用于外來加氣車輛的收費管理。
2、充值IC卡將充值金額增加到IC卡內,同時將充值金額、余額、充值日期等形成記錄寫入相應數據庫。
注*代表非必選項。
2、刷卡①、刷卡流程圖。圖4②、刷卡內部流程。圖53、數據傳送1、通過拔號方式與中心建立連接。
2、將指定刷卡記錄、充值記錄等上傳到中心。
3、將黑名單記錄從中心下載到站點。
4、數據處理1、更新、查詢、打印、EXCEL報表輸出刷卡記錄、數據匯總等。
查詢方式按加氣點、端口、公司、線路、卡類、卡號、車輛自編號、車牌號、操作工、刷卡時間段等查詢。
2、更新、查詢、打印、EXCEL報表輸出充值記錄。
查詢方式按卡類、卡號、充值時間、充值員查詢。
四、相關數據1、數據庫定義①、初始化表卡號、卡類、姓名、性別、年齡、身份證號、相片、有效期、標記、初始化日期、操作員。
②、刷卡記錄表加氣點端口、序號、卡號、車輛自編號、車牌號、卡類、交易金額、余額、刷卡時間、操作員。
③、充值記錄表充值點、序號、卡號、充值金額、余額、充值時間、操作員。
④、掛失卡卡號、標記(“1”為無效卡,“0”為注冊卡)、掛失日期、操作員。
⑤、用戶表用戶、密碼、權限。
注以上均為后臺SQL數據庫,2、4項數據表同時為接收系統的本地數據表。
2、軟件環境操作系統環境WindowsXP\Windows2000程序設計語言Delphi本地數據庫Paradox網絡數據庫SQL server3、獲取精度接收的數據與加氣機100%的對應,不存在獲取誤差。
4、安全規范①、由用戶確定母卡的密碼,從而將開發者與用戶脫離。
②、IC卡的初始化、充值、刷卡均由認證卡檢測。
③、后臺程序用戶名和用戶密碼采用程序加密方式存貯。
④、接收系統設定唯一停止和退出密碼。
有益效果本解決方案適合于任何品牌加氣(油)機,系統可實現對數據自動采集、自動控制到刷卡收費的全過程以及對交易數據存儲、上傳、統計、查詢、對IC卡進行初始化、充值、掛失等操作,可為企業提供準確可靠的管理數據;在系統出現故障時管理員可在后臺對數據記錄進行追加,但不能修改,且管理員的操作均會生成工作日志,使每次加氣(油)均有記錄查詢,真正做到全過程的記錄、監督,以保障加油站資金的安全。
具體實施實例四川省自貢市公交集團公司CNG加氣站實例1、硬件連接示意圖。圖62、軟件系統示意圖。圖73、接收程序特征一、加氣(油)點氣(油)量的數據采集。
將系統接收程序裝入工控機,啟動工控機工作。當啟動無操作工刷卡時,所執行指令為通常的程序指令時,程序計數器的更新與通用計算機相同;當經操作工刷卡后所執行指令為打開指令,接收系統開始服務后將檢測認證卡、檢測刷卡器是否處于開啟狀態。
當檢測通過后,程序控制采集卡采集的LED顯示屏傳來的高低電平信號或者脈沖信號,順序地取出(最先)一個放滿采樣結果的緩沖區的內容,進行過此操作后此緩沖區又可接收新的采集結果。實現了采集卡在后臺的實時、高速采集模擬信號,應用程序只需在必要時取采集結果即可;實現數據的實時采集、連續顯示與處理、采集與取數、顯示的同步。再經過控制轉換器將其信號轉換成電腦可以識別的二進制數字交由工控機中接收程序經CPU按程序計數器讀取指令、執行操作,并根據所執行指令的內容更新程序計數器,調用子程序將其轉換成十進制數據,從而計算出本次加氣(油)的數量,實現與LED顯示屏完全一致的加氣(油)數量。
當加氣(油)機在加氣(油)狀態下刷卡器將停止工作,在加氣(油)結束后刷卡器開始工作等待收費,交易完成后刷卡器將處于等待下一次刷卡以啟動加氣(油)機重新進入等待加氣(油)狀態。
特征二、控制加氣(油)機的允許開啟狀態與停止。
將程序裝入工控機,開啟運行。
當經操作工刷卡后所執行程序為運行狀態。
當用戶刷卡后加氣(油)時指令為打開指令,并伴隨著打開指示燈亮,程序被更新為此打開指令之后指令的地址,即要打開的并行處理程序的首地址,從而啟動控制子過程操作。
當優惠卡或普通卡余額不足設定金額或加氣完成后,所執行指令為停止指令,并伴隨著停止指示燈亮,由地址表中選擇得到的地址停止指令來更新地址,從而發出該停止指令的程序本身終止程序,同時伴隨著啟動其它的程序。
部份不連續接收系統源程序。
<pre listing-type="program-listing"><![CDATA[unit main;interfaceuses Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms, ExtCtrls,StdCtrls,ComCtrls,ActnList,Menus,Grids,DB, DBTables,DBGrids,DBCtrls,exit,gy,Buttons,unit1,unit2,unit3,unit4,QuickRpt, QRCtrls,Spin,drv_unit,ImgList,Dialogs,ADODB,MPlayer;type ZT_PCIBOARD=record lIndex:Longint;hHandle:Longint;nCh:smallint; lData:Longint; plData:PLongint; lCode:Longint; end;type pZT_PCIBOARD=ZT_PCIBOARD;type TmainForm=class(TForm)Timer1:TTimer;Timer2:TTimer;StatusBar1:TStatusBar;Panel1:TPanel;Timer3:TTimer;Label21:TLabel;Panel2:TPanel;Label5:TLabel;Label22:TLabel;Panel3:TPanel;Label9:TLabel;Label23:TLabel;Panel4:TPanel;Label6:TLabel;Label24:TLabel;Panel5:TPanel;Label10:TLabel;ImageList1:TImageList;MainMenu1:TMainMenu;N1:TMenuItem;N2:TMenuItem;N3:TMenuItem;N4:TMenuItem;N5:TMenuItem;N7:TMenuItem;N6:TMenuItem;N9:TMenuItem;Panel8:TPanel;Panel9:TPanel;Query1Rzh:TStringField;MediaPlayer1:TMediaPlayer;Timer4:TTimer;ListBox1:TListBox;Shape9:TShape;Query1chp:TStringField;Query1ban:TStringField;Query2Hk:TStringField;QRLabel24:TQRLabel;QRLabe125:TQRLabel;QRLabel26:TQRLabel;QRLabel27:TQRLabel;QRLabel28:TQRLabel;QRLabel29:TQRLabel;QRLabel30:TQRLabel;QRLabel50:TQRLabel;QRLabel51:TQRLabel;QRLabel52:TQRLabel;QRLabel53:TQRLabel;QRLabel54:TQRLabel;QRLabel55:TQRLabel;QRLabel56:TQRLabel;QRLabel57:TQRLabel;StringGrid1:TStringGrid;procedure xish(xi:string);procedure Chk0;procedure disp;procedure Timer1Timer(Sender:TObject);procedure Timer2Timer(Sender:TObject);procedureTT(nt:integer);procedure N2Click(Sender:TObject);procedure N3Click(Sender:TObject);procedure FormCreate(Sender:TObject);procedure Timer3Timer(Sender:TObject);procedure N4Click(Sender:TObject);procedure FormShow(Sender:TObject);procedure FormClose(Sender:TObject;var Action:TCloseAction);procedure N7Click(Sender:TObject);procedure N9Click(Sender:TObject);procedure Timer4Timer(Sender:TObject);procedure kai(ka1:integer);procedure ting(ka2:integer);{Private declarations} public{Public declarations} end;var mainForm:TmainForm; mmp:mypr; mmp2:mypr2; mmp3:mypr3; //三個打印線程。
hs:ZT_PCIBOARD; zd:integer;//加氣站開始端口號。
vv1,vv2:integer;//加氣金額。
gr:integer;//窗體網格框變量 snr:longint; ickh,value,syje:longint; yxq:array[1..16]of char;st,sector,block,loadmode:smallint; nkey,wdata:pchar; //刷卡器相應參數。
rkj:boolean;//認證卡的檢測是否通過。
st0:smallint; icdev0:longint; source,dest:array
of char; outbuff1:pchar; //認證卡相應參數。
ss1,ss2,ss3:string;//日期字符。
ss,ss0:string;//金額顯示字符。
lab,edit:TLabel; //對應顯示變量。
Tim:TTimer;//對應時間變量。
icdev:Array
of longint;//不同讀寫器端口。
cz:Array
of longint; //獲取相應操作號。
lbk:Array
of longint; //獲取內部卡車號。
cph:Array
of string; //獲取車牌號。
be:Array
of string; //獲取班次。
myje:Array
of real; //檢測是否第一次刷操作卡。
cc:Array
of boolean; //檢測是否變化卡。
pp:Array
of boolean; //防止同一張卡連續二次刷卡。
function OpenDevicePlx(has:pZT_PCIBOARD):longint; stdcall;external'PCI8KP.dll'; function CloseDevieePlx(has:pZT_PCIBOARD):longint; stdcall;external'pci8kp.dll'; function ZT8401PortDI(has:pZT_PCIBOARD):longint; stdcall;external'pci8kp.dll'; function ZT8401PortDO(has:pZT_PCIBOARD):longint; stdcall;external'pci8kp.dll'; function ZT8401PortBitDI(has:pZT_PCIBOARD):longint; stdcall;external'pci8kp.dll'; function ZT8401PortBitDO(has:pZT_PCIBOARD):longint; stdcall;external'pci8kp.dll'; function ZT8401ChipBitDI(has:pZT_PCIBOARD):longint; stdcall;external'pci8kp.dll'; function ZT8401ChipDO(has:pZT_PCIBOARD):longint;rf_decrypt(key:pchar;ptrsource:pchar;msglen:smallint;ptrdest:pchar):smallint;stdcall; function rf_write_hex(icdev:longint;adr:smallint;data:pchar):smallint;stdcall; far;external'mwrf32.dll'name'rf_write_hex'; function rf_halt(icdev:longint):smallint;stdcall; far;external'mwrf32.dll'name'rf_halt'; function rf_reset(icdev:longint;msec:smallint):smallint;stdcall; far;external'mwrf32.dll'name'rf_reset'; //M1 CARD rf_check_write(icdev,snr:longint;adr,authmode:smallint;data:pchar):smallint;stdcall; far;external'mwrf32.dll'name'rf check_write';function rf_check_writehex(icdev,snr:longint;adr,authmode:smallint;data:pchar):smallint;stdcall;far;external'mwrf32.dll'name'rf_check_writehex'; //M1 CARD HIGH FUNCTIONfunction rf_HL_initval(icdev:longint;mode:smallint;secnr:smallint;value:longint;snr:pchar):smallint; stdcall;far;external'mwrf32.dll'name'rf HL initval';function rf_HL_increment(icdev:longint;mode:smallint;secnr:smallint;value,snr:longint;svalue,ssnr:pc har):smallint;stdcall;far;external'mwrf32.dll'name'rf HL increment';function rf_HL_decrement(icdev:longint;mode:smallint;secnr:smallint;value:longint;snr:longint;svalue ,ssnr:pchar):smallint;stdcall;far;external'mwrf32.dll'name'rf_HL_decrement';function rf_HL_write(icdev:longint;mode,adr:smallint;ssnr,sdata:pchar):smallint;stdcall;far;external'mwrf32.dll'name'rf_HL_write';function rf_HL_read(icdev:longint;mode,adr:smallint;snr:longint;sdata,ssnr:pchar):smallint;stdcall;far;external'mwrf32.dll'name'rf_HL_read';function rf_changeb3(Adr:pchar;keyA:pchar;B0:pchar;B1:pchar;B2:pchar;B3:pchar;Bk:pchar;KeyB:pchar):s mallint;stdcall;far;external'mwrf32.dll'name'rf_changeb3';//DEVICEfunction rf_setbright(icdev:longint;bright:smallint):smallint;stdcall;far;external'mwrf32.dll'name'rf_setbright';function rf_swr_eeprom(icdev:longint;offset,len:smallint;data:pchar):smallint;stdcall;far;external'mwrf32.dll'name'rf_swr_eeprom';function rf_srd_eeprom(icdev:longint;offset,len:smallint;data:pchar):smallint;stdcall;far;external'mwrf32.dll'name'rf_srd_eeprom' implementation {$R*.dfm} .procedure TmainForm.Chk0; begin rkj:=true; icdev0:=IC_InitComm(100);//初始化串口一 If icdev0<0Then rkj:=false; st0:=IC_Status(icdev0); If_st0<0 Then rkj:=false;If st0=1 Then rkj:=false; st0:=IC_InitType(icdev0,16); //給卡型號 If st0 <> 0 Then rkj:=false; getmem(outbuff1,15); //讀數據if icdev0>0 then begin st0:=IC_ExitComm(icdev0);//關閉串口 icdev0:=0; end; CloseHandle(icdev0); End.procedure TmainForm.disp;var il,i2,i3,i4:integer; //顯示位置。
s,s1,s2,s3:string;//顯示長度。
xc:byte; //小數點前數字。
disbuff:pchar;//輸出字符。begini1:=1;i2:=0;i3:=length(ss);//金額數字長度。s3:='';while i1<i3 dobegins:=copy(ss,i1,1);if s='.'theni2:=i1; //獲取小數點位置i2。i1:=i1+1;end;if i2>1 thenbegin//不存在小數點的計算顯示。xc:=strtoint(copy(ss,i2-1,1));s1:=copy(ss,1,i2-2);s2:=copy(ss,i2+1,i3-i2);if i3<9 thenbeginfor i4:=i3 to 8 dos3:=s3+'0';//將顯示數字之外的部分顯示為“0”。end;disbuff:=pchar(s3+s1+chr(128+xc)+s2);endelsebegin //不存在小數點的計算顯示。if i3<8 thenbeginfor i4:=i3 to 7 dos3:=s3+'0'; //將顯示數字之外的部分顯示為“0”。end;disbuff:=pchar(s3+ss);end;st:=rf_disp8(icdev[i],8,disbuff);end.//讀寫器顯示過程。procedure TmainForm.kai(ka1:integer);beginhs.lIndex:=0;OpenDevicePlx(@hs);hs.nCh:=ka1+1;hs.lCode:=38;HS.lData:=1;ZT8401PortBitDO(@hs);FreeMem(hs.plData,1024);CloseHandle(hs.hHandle);case ka1 of 0:shape2.Brush.Color:=clLime; 1:shape4.Brush.Color:=clLime; 2:shape6.Brush.Color:=clLime; 3:shape8.Brush.Color:=clLime; end;end.procedure TmainForm.ting(ka2:integer);beginhs.lIndex:=0;OpenDevicePlx(@hs);hs.nCh:=ka2+1;hs.lCode:=38;HS.lData:=0;ZT8401PortBitDO(@hs);FreeMem(hs.plData,1024);CloseHandle(hs.hHandle); case ka2 of 0:shape2.Brush.Color:=clred; 1:shape4.Brush.Color:=clred; 2:shape6.Brush.Color:=clred; 3:shape8.Brush.Color:=clred; end;end.procedure TmainForm.TT(nt:integer);varix:integer;//序列號。klb:integer;//卡類。jj:string; //卡類字符。nYear,nMonth,nDay:Word;beginklb:=0;i:=nt; DecodeDate(Now,nYear,nMonth,nDay); if length(inttostr(nmonth))=1 then ss1:='0'+inttostr(nmonth) else ss1:=inttostr(nmonth); if length(inttostr(nday))=1 then ss2:='0'+inttostr(nday) else ss2:=inttostr(nday); ss3:=inttostr(nyear)+ss1+ss2;//獲取當前日期整數值。 case i of 0:edit:=Label5; 1:edit:=Label6; 2:edit:=Label7; 3:edit:=Label8; end;//獲取當前操作數值指向。
ss0:=floattostr(round(strtofloat(edit.Caption)*140)/100);//將當前顯示氣量換算成金額。
pp[i]:=false; //不能再進行第二次刷卡。
rf_card(icdev[i],1,@snr); st:=rf_authentication(icdev[i],0,10); if st=0 then begin if not cc[i]then //檢測卡是否發生變化。
begin cc[i]:=true;//將卡設為已刷。
pp[i]:=true;//允許進行刷卡。
end; end elsebegin cc[i]:=false;ss:=ss0;disp; //調用顯示過程。
system.Exit; end; if not (cc[i]and pp[i])thensystem.Exit;rf_read(icdev[i],42,@yxq);//讀取卡類、有效期限、班次及車牌號。if st=0 thenss:=floattostr(syje/100)elsess:=ss0;disp; //調用顯示過程。if strtoint('20'+yxq[2]+yxq[3]+yxq[4]+yxq[5]+yxq[6]+yxq[7])<strtoint(ss3)thenbeginlistbox1.Items.Add('D:\zhang\加氣站\ZG接收系統\卡已過期.wma');system.Exit;end;if copy(inttostr(ickh),9,1)='0'thenbeginlistbox1.Items.Add('D:\zhang\加氣站\ZG接收系統\非法卡.wma');system.Exit;end;query2.SQL.Clear;query2.SQL.Add('select*from hmd where hk='+''''+inttostr(ickh)+'''');query2.Open;query2.First;if query2hk.Value<>''then//檢測是否為掛失卡。begin//6rf_initval(icdev[i],42,strtoint(copy(inttostr(ickh),1,8)+'0'));query2.Edit;query2zf.Value:='4';query2.Post;listbox1.Items.Add('D:\zhang\加氣站\ZG接收系統\非法卡.wma');system.Exit;//將掛失卡寫為黑卡。end; //60klb:=strtoint(yxq[1]);//獲得卡類號。
case klb of 1:jj:='操作卡'; 2:jj:='車卡'; 3:jj:='司機卡'; 4:jj:='優惠卡'; 5:jj:='普通卡'; end;if cz[i]=0 thenbeginif klb=1 thenbegincz[i]:=strtoint(copy(inttostr(ickh),1,8));bc[i]:=yxq[8]+yxq[9];listboxl.Items.Add('D:\zhang\加氣站\ZG接收系統\'+jj+'.wma');end;system.Exit;end;if klb=1 thenbeginif cz[i]<>strtoint(copy(inttostr(ickh),1,8))thenbegincz[i]:=strtoint(copy(inttostr(ickh),1,8));bc[i]:=yxq[8]+yxq[9];listbox1.Items.Add('D:\zhang\加氣站\ZG接收系統\'+jj+'.wma');system.Exit;end;end;if cph[i]=''thenbegin //01if klb=1 thenbeginkai(i);myje[i]:=120;cph[i]:=copy(inttostr(ickh),1,8);end;if klb=2 thenbeginkai(i);lbk[i]:=syje;cph[i]:=yxq[10]+yxq[11]+yxq[12]+yxq[13]+yxq[14];end;if klb>3 thenbeginif syje/100<1 thenbeginlistbox1.Items.Add('D:\zhang\加氣站\ZG接收系統\請充值.wma');system.Exit;endelsebeginkai(i);myje[i]:=syje/100;rf_initval(icdev[i],41,0);cph[i]:=yxq[10]+yxq[11]+yxq[12]+yxq[13]+yxq[14];end;end;listbox1.Items.Add('D:\zhang\加氣站\ZG接收系統\'+jj+'.wma');system.Exit;end;if (klb<3)and(lbk[i]<>0)and(strtofloat(ss0)=0)thenbeginting(i);lbk[i]:=0;cph[i]:='';listbox1.Items.Add('D:\zhang\加氣站\ZG接收系統\'+jj+'.wma');system.Exit;end;if(klb>3)and(cph[i]=yxq[10]+yxq[11]+yxq[12]+yxq[13]+yxq[14])and(strtofloat(ss0)=0)thenbeginrf_initval(icdev[i],41,strtoint(floattostr(int(myje[i]*100))));ting(i);lbk[i]:=0;cph[i]:='';listbox1.Items.Add('D:\zhang\加氣站\ZG接收系統\'+jj+'.wma');system.Exit;end;query1chh.Value;='0';end;query1chp.Value:=cph[i];query1dat_.Value:=now;query1ban.Value:=bc[i];query1czg.AsInteger:=cz[i];query1rzh.Value:=outbuff1;query1.Post;//輸出表格顯示。case i of0:begin //12if (klb=4)or(klb=5) thenbeginQRLabel41.Caption:=StringGrid1.Cells
;QRLabel42.Caption:=inttostr(ix);QRLabel43.Caption:=StringGrid1.Cells[4,gr];QRLabel44.Caption:=StringGrid1.Cells[5,gr];QRLabel45.Caption:=StringGrid1.Cells[6,gr];QRLabel46.Caption:=StringGrid1.Cells[7,gr];QRLabel47.Caption:=inttostr(cz[i]);QRLabel48.Caption:=StringGrid1.Cells[2,gr];QRLabel49.Caption:=StringGrid1.Cells[8,gr];rpt:=QuickRep1;mmp:=mypr.Create(true);mmp.FreeOnTerminate:=true;mmp.Resume;//QuickRep1.Print;end;//優惠卡或普通卡打印。timer1.Enabled:=false;cj1:=0;dq1:=0;rr1:=0;cr11:=0;cr12:=0;b12:=false;Label5.Caption:='0.00';Label9.Caption:='0.00';timer1.Enabled:=true;end; //120//1號機刷卡。1:begin //13if (klb=4)or(klb=5) thenbeginQRLabel12.Caption:=StringGrid1.Cells
;QRLabel13.Caption:=inttostr(ix);QRLabel14.Caption:=StringGrid1.Cells[4,gr];QRLabel15.Caption:=StringGrid1.Cells[5,gr];QRLabel16.Caption:=StringGrid1.Cells[6,gr];QRLabel17.Caption:=StringGrid1.Cells[7,gr];QRLabel18.Caption:=inttostr(cz[i]);QRLabel19.Caption:=StringGrid1.Cells[2,gr];QRLabel3.Caption:=StringGrid1.Cells[8,gr];rpt2:=QuickRep2;mmp2:=mypr2.Create(true);mmp2.FreeOnTerminate:=true;mmp2.Resume;//QuickRep2.Print;end;//優惠卡或普通卡打印。timer2.Enabled:=false;cj2:=0;dq2:=0;rr2:=0;cr21:=0;cr22:=0;b22:=false;Label6.Caption:='0.00';Label10.Caption:='0.00';timer2.Enabled:=true;end; //130//2號機刷卡。2:begin//14if (klb=4)or(klb=5) thenbeginQRLabe150.Caption:=StringGrid1.Cells
;QRLabel51.Caption:=inttostr(ix);QRLabel52.Caption:=StringGrid1.Cells[4,gr];QRLabel53.Caption:=StringGrid1.Cells[5,gr];QRLabel54.Caption:=StringGrid1.Cells[6,gr];QRLabel55.Caption:=StringGrid1.Cells[7,gr];QRLabel56.Caption:=inttostr(cz[i]);QRLabel57.Caption:=StringGrid1.Cells[2,gr];QRLabel22.Caption:=StringGrid1.Cells[8,gr];rpt3:=QuickRep3;mmp3:=mypr3.Create(true);mmp3.FreeOnTerminate:=true;mmp3.Resume;//QuickRep3.Print;end;//優惠卡或普通卡打印。timer3.Enabled:=false;cj3:=0;dq3:=0;rr3:=0;cr31:=0;cr32:=0;b32:=false;Label7.Caption:='0.00';Label11.Caption:='0.00';timer3.Enabled:=true;end; //140//3號機刷卡。listbox1.Items.Add('D:\zhang\加氣站\ZG接收系統\'+jj+'.wma');rf_beep(icdev[i],10);ting(i);lbk[i]:=0;cph[i]:='';end;end.//刷卡操作過程。procedure TmainForm.FormCreate(Sender:TObject);beginzd:=101;rr1:=0;rr2:=0;rr3:=0;cj1:=0;cj2:=0;cj3:=0;dq1:=0;dq2:=0;dq3:=0;cc2:=false;b12:=false;b22:=false;b32:=false;StringGrid1.Cells
:='端口';StringGrid1.Cells[1,0]:='自編號';StringGrid1.Cells[2,0]:='車牌號';StringGrid1.Cells[3,0]:='卡類';StringGrid1.Cells[4,0]:='卡號';StringGrid1.Cells[5,0]:='氣量';StringGrid1.Cells[6,0]:='交易額';StringGrid1.Cells[7,0]:='余額';StringGrid1.Cells[8,0]:='開始時間';StringGrid1.Cells[9,0]:='結束時間';StringGrid1.Cells[10,0]:='操作號';gr:=0;end;//定制表格欄文字。procedure TmainForm.FormShow(Sender:TObject);beginchk0;outbuff1:='';end.procedure TmainForm.N2Click(Sender:TObject);beginchk0;if rkj thenbeginmediaplayer1.Close;mediaplayer1.FileName:=listbox1.Items.Strings
;mediaplayer1.Open;mediaplayer1.Play;listbox1.Items.Delete(0);timer4.Enabled:=true:screen.Cursor:=crHourGlass;StatusBar1.Panels[1].Text:='';for i:=0 to 2 dobegincase i of//10:begin //2lab:=label1;kz1:=true;rr1:=0;cr11:=0;cr12:=0;dq1:=0;b12:=false;tim:=timer1;hs.1Index:=0;OpenDevicePlx(@hs);hs.nCh:=1;hs.lCode:=4;ZT8401IOSet(@hs);FreeMem(hs.plData,1024);CloseHandle(hs.hHandle);_Release();end; //201:begin //3lab:=label2;kz2:=true;rr2:=0;dq2:=0;b22:=false;tim:=timer2;hs.lIndex:=0;OpenDevicePlx(@hs);hs.nCh:=2;hs.lCode:=4;ZT8401IOSet(@hs);FreeMem(hs.plData,1024);CloseHandle(hs.hHandle);_Release();end; //30label1.Caption:='1號';label2.Caption:='2號';label3.Caption:='3號';StatusBar1.Panels[1].Text:='';StatusBar1.Panels[2].Text:='停止服務’;n3.Enabled:=false;n2.Enabled:=true;end;end;//停止接收數據及關閉讀寫器端口。FreeMem(hs.plData,1024);_Release();//電磁閥開關判斷。if kz1 thenbegin//01ci1:=1;while ci1<15 dobegin //1case ci1 of1..7:beginhs.lCode:=10+cil;ZT8401PortBitDI(@hs);df11:=df11+inttostr(hs.lData);FreeMem(hs.plData,1024);_Release();end;8..14:beginhs.lCode:=13+ci1;ZT8401PortBitDI(@hs);df12:=df12+inttostr(hs.lData);FreeMem(hs.plData,1024);_Release();end;end;FreeMem(hs.plData,1024);_Release();ci1:=ci1+1;end;//10if not kz1 thenbegincj1:=cj1+dq1;rr1:=0;dq1:=0;b12:=false;Label5.Caption:=floattostr(cj1);Label9.Caption:=floattostr(round(cj1*140)/100);tt(0);end;FreeMem(hs.plData,1024);_Release();end.//1號機啟動。procedure TmainForm.Timer2Timer(Sender:TObject);beginhs.lIndex:=0;OpenDevicePlx(@hs);hs.nCh:=2;FreeMem(hs.plData,1024);_Release();//電磁閥開關判斷cc2:=false;elsebeginkz3:=false;Shape5.Brush.Colot:=clRed;hs.lIndex:=0;OpenDevicePlx(@hs);hs.nCh:=3;hs.lCode:=31;HS.lData:=0;ZT8401PortBitD0(@hs);shapell.Brush.Color:=clLime;end;FreeMem(hs.plData,1024);//CloseHandle(hs.hHandle);_Release();//電磁閥開關判斷。if kz3 thenbeginci3:=1;while ci3<15 dobegin//1case ci3 of1..7:beginhs.lCode:=10+ci3;ZT8401IOSet(@hs);ZT8401PortBitDI(@hs);df31:=df31+inttostr(hs.lData);end;8..14:beginhs.lCode:=13+ci3;ZT8401IOSet(@hs);ZT8401PortBitDI(@hs);df32:=df32+inttostr(hs.1Data);end;end;ci3:=ci3+1;end;//10df31:=”;close;end.//退出時關閉端口。procedure TmainForm.FormClose(sender:TObject;var Action:TCloseAction);beginexitdlg.ShowModal;if pa thenbeginfor j:=0 to 2 dobeginZT8401CTStop(@hs);hs.nCh:=i+1;end;hs.lIndex:=0;CloseDevicePlx(@hs); Action:=caFree; end elseAction:=caNone;End.//主窗體的關閉事件。procedure TmainForm.N7Click(Sender:TObject);beginform4.ShowModal;end.procedure TmainForm.N9Click(Sender:TObject);begingyform.ShowModal;end.procedure TmainForm.Timer4Timer(Sender:TObject);beginif listbox1.Count>0 thenbeginif(mediaplayer1.Position+1)>mediaplayer1.Length thenbeginmediaplayer1.Close;mediaplayer1.FileName:=listbox1.Items.Strings
;mediaplayer1.Open;mediaplayer1.Play;listbox1.Items.Delete(0);end;end;end;end.]]></pre>4、前臺程序將前臺程序裝入前臺PC計算機,開啟運行后負責完成加氣(油)點與中心記錄的交換、現場充值、現金收訖以及現場數據處理等工作。
數據處理加氣(油)點的刷卡記錄、充值記錄、現金記錄、黑卡記錄。
IC卡處理現場充值、現金收訖(通過對操作卡進行驗卡獲得應交現金額,上交金額后產生相應現金上交記錄)。
非正常交易處理通過對外部卡號和非正常交易記錄的對比驗證返還用戶余額。
數據交換下載更新黑名單記錄;上傳刷卡、充值、現金收訖記錄。
5、后臺程序將后臺程序裝入中心服務器,開啟運行。完成IC卡的初始化、充值、掛失以及對刷卡、充值、初始化、現金數據的更新、統計、查詢、打印、EXCEL報表輸出、匯總報表等處理工作。
IC卡管理中心對IC卡初始化、充值、年審、掛失。
數據處理初始記錄、刷卡記錄、充值記錄、黑卡記錄、現金記錄、數據更新。
報表處理完成各類月報表、匯總表。
系統管理用戶管理、參數設置。
6、后臺子程序將后臺程序裝入中心服務器,開啟運行后可選擇啟動①、母卡制作程序(由三組密碼組成生成母卡)。圖8②、認證卡制作程序(由母卡生成相應接收認證卡或IC認證卡)。圖9③、遠程記錄伺服器(負責完成等待接收各站點拔號上傳下載數據)。圖107、刷卡(一)、卡類1、操作卡用于加氣(油)工身份識別、代刷卡交易。
2、車卡用于內部車輛身份識別。
3、司機卡用于內部刷卡交易。
4、優惠卡用于合作單位車輛刷卡交易。
5、普通卡用于外部車輛刷卡交易。
(二)、開機刷卡第一次只能刷操作卡,記錄操作工號、啟動刷卡器交易工作狀態。除司機卡外,其他卡均可開啟加氣(油)工作狀態。①、操作卡刷卡時,電腦將記錄操作卡號。②、車卡刷卡時,電腦將記錄其自編號和車牌號。③、外部卡刷卡時,電腦將記錄其車牌號并提取卡內金額。
(三)、刷卡交易當加氣(油)機停止加氣(油)時,刷卡器自動轉成工作狀態等待刷卡。①、操作卡刷卡時,如為操作卡啟動,則卡內金額將以加值方式寫入卡內,如為車卡啟動,卡內金額無變化。如為外部卡啟動,則將記錄寫入非正常交易數據庫,卡內金額無變化。②、司機卡只能在由車卡啟動的情況下才能刷卡完成交易。卡內金額將以加值方式寫入卡內。③、外部卡只能在由本卡啟動的情況下才能刷卡完成交易。電腦自動將余額以找補方式寫回卡內。
以上交易均將刷卡信息寫入刷卡交易數據庫。
注操作卡可在刷卡器所有工作開啟狀態下刷卡操作,不同情況下生成相應記錄存儲。
(四)、刷卡無響應的情況1、開機未刷操作卡時,其他卡均無響應。
2、非車卡啟動時,司機卡無響應。
3、非相應外部卡啟動時,優惠卡、普通卡無響應。
4、過期卡、掛失卡無響應。
5、外部卡余額不足2元時,無響應6、加氣(油)機正常工作時。
(五)、其他1、加氣(油)進行時刷卡器工作處于停止狀態。
2、加氣(油)停止時刷卡器處于工作狀態同時加氣(油)機處于停止狀態。
3、IC卡啟動時可顯示卡內余額。加氣(油)停止時刷卡器顯示當前交易金額。
4、加氣(油)機未進入加氣(油)狀態時,再次刷卡可撤消開啟狀態。
8、系統結構(一)、接收系統結構圖。圖11(二)、IC卡處理流程圖。圖129、硬件配置清單
圖1是接收系統程序初始運行界面。
圖2是前臺處理程序初始運行界面。
圖3是后臺處理程序初始運行界面。
圖4是刷卡流程圖。
圖5是刷卡內部流程圖。
圖6是硬件連接示意圖。
圖7是軟件系統示意圖。
圖8是母卡制作程序初始運行界面。
圖9是認證卡制作程序初始運行界面。
圖10是遠程記錄伺服器初始運行界面。
圖11是接收系統結構圖。
圖12是IC卡處理流程圖。
權利要求
利用計算機軟件技術與數據采集卡相結合準確獲取加氣(油)機LED顯示屏顯示數據。其特征是程序控制采集卡采集的LED顯示屏傳來的高低電平信號或者脈沖信號,順序地取出(最先)一個放滿采樣結果的緩沖區的內容,進行過此操作后此緩沖區又可接收新的采集結果。實現了采集卡在后臺的實時、高速采集模擬信號,應用程序只需在必要時取采集結果即可;實現數據的實時采集、連續顯示與處理、采集與取數、顯示的同步。再經過控制轉換器將其信號轉換成電腦可以識別的二進制數字交由工控機中接收程序經CPU按程序計數器讀取指令、執行操作,并根據所執行指令的內容更新程序計數器,調用子程序將其轉換成十進制數據,從而計算出本次加氣(油)的數量,實現與LED顯示屏完全一致的加氣(油)數量。
全文摘要
利用計算機軟件與數據采集卡結合精確獲取LED顯示屏的顯示數據。根據不同的狀態控制加氣(油)機的是否允許開啟、停止。從而有效的解決了不同加氣(油)機數據采集通用接口與自動控制的問題,排除在于工環境下出現的各種人為因素產生的誤差與舞弊現象,減輕了勞動強度,滿足各部門生產管理的需要。
文檔編號G07F7/08GK1932893SQ20051009932
公開日2007年3月21日 申請日期2005年9月13日 優先權日2005年9月13日
發明者張長勇 申請人:張長勇