![依時(shí)利IC卡考勤門禁機(jī)接口C#實(shí)現(xiàn)_第1頁](http://file4.renrendoc.com/view/73ac3da961e9ab4d556f415fb7779097/73ac3da961e9ab4d556f415fb77790971.gif)
![依時(shí)利IC卡考勤門禁機(jī)接口C#實(shí)現(xiàn)_第2頁](http://file4.renrendoc.com/view/73ac3da961e9ab4d556f415fb7779097/73ac3da961e9ab4d556f415fb77790972.gif)
![依時(shí)利IC卡考勤門禁機(jī)接口C#實(shí)現(xiàn)_第3頁](http://file4.renrendoc.com/view/73ac3da961e9ab4d556f415fb7779097/73ac3da961e9ab4d556f415fb77790973.gif)
![依時(shí)利IC卡考勤門禁機(jī)接口C#實(shí)現(xiàn)_第4頁](http://file4.renrendoc.com/view/73ac3da961e9ab4d556f415fb7779097/73ac3da961e9ab4d556f415fb77790974.gif)
![依時(shí)利IC卡考勤門禁機(jī)接口C#實(shí)現(xiàn)_第5頁](http://file4.renrendoc.com/view/73ac3da961e9ab4d556f415fb7779097/73ac3da961e9ab4d556f415fb77790975.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、依時(shí)利IC卡考勤門禁機(jī)接口 C#實(shí)現(xiàn)依時(shí)利這個(gè)坑爹的貨,竟然不提供C#方面的Demo支持!哎俺自己寫一個(gè),存 一下怕以后忘記哈哈! 首先創(chuàng)建一個(gè)winfrom項(xiàng)目名稱為:edaxKQ(僅供參考,俺亂命名的不準(zhǔn)笑話小弟哈哈?。┤鐖D:日?qǐng)AedaxKQ卜 囹 Properties 奏考l |邕 Fkjrml.cs 晉 Program.es 哲 TlCrecord.es由于依時(shí)利提供的接口是delphi編寫的,所以嘛不能直接引用,需要借助: DllImport(EastRiver.dll)方式引入:將依時(shí)利提供的EastRiver.dll文件拷貝到項(xiàng)目的 binDebug目錄下(當(dāng)然也可以放別的目錄只
2、要你能讓dllImport找到是吧哈哈)。3好了到這里前期準(zhǔn)備做好了,現(xiàn)在我們開始編寫連接卡機(jī)和端口連接的接口;(其實(shí)接口可以通過依時(shí)利提供的API找到,但是實(shí)在有點(diǎn)坑爹)4-連接接口實(shí)現(xiàn)打開依時(shí)利API我們可以找到連接接口,在C#中進(jìn)行重寫,(名字能錯(cuò)哦, 好吧我廢話了,重寫當(dāng)然不能錯(cuò))/ /聯(lián)機(jī)卡機(jī):/其他值成功返回端口句柄/ -1端口無效或真正使用/ 0無法聯(lián)機(jī)/ / COM端口號(hào)/ param name=BaudRate端口波特率/ 卡機(jī)序號(hào)/ DllImport(EastRiver.dll)public static extern IntPtr ConnectClock(int po
3、rt, int BaudRate, int clock_id);重寫了接口后,我們打開Form1窗體,在里面創(chuàng)建對(duì)應(yīng)參數(shù)的輸入和測(cè)試按鈕,如圖:(對(duì)應(yīng)參數(shù)這里就不解釋了哦!做考勤機(jī)開發(fā)的應(yīng)該都知道了吧哈哈啊對(duì)了卡機(jī)序列號(hào)解釋下, 開啟依時(shí)利卡機(jī)后,在屏幕上可以看到一個(gè)序列號(hào)便是卡機(jī)序列號(hào)了,一般都是,雙擊測(cè)試聯(lián)機(jī)按 鈕,進(jìn)入代碼體,調(diào)用聯(lián)機(jī)接口:_port = Convert.ToInt32(this.txtCom.Text.ToString();_BaudRate =Convert.ToInt32(this.txtBaudRate.Text.ToString();_clock_id = Co
4、nvert.ToInt16(this.txtClock.Text.ToString(),16);_hPort =ICheck.ConnectClock(_port,_BaudRate,_clock_id);if (_hPort.ToInt32() != 0)MessageBox.Show(“聯(lián)機(jī)成功!);elseMessageBox.Show(“聯(lián)機(jī)失敗!);看到這里有些童鞋可能不知道上面那些參數(shù)是干嘛的,別的不解釋了都是定義的變量,這里介紹下 _hPort變量,這個(gè)變量是在接口聯(lián)通的時(shí)候,存儲(chǔ)由接口返回M 口句柄,在后面的使用需要聯(lián)機(jī) 操作的接口中,都需要使用到該變量中存儲(chǔ)啊om口句柄;(說
5、白了就等于是一個(gè)已經(jīng)打開啊。1連接, 這個(gè)貌似好理解點(diǎn))到這里我們就聯(lián)機(jī)成功了。5.端口端口連接當(dāng)然有連接就會(huì)有端口么,當(dāng)操作卡機(jī)完畢后就需要關(guān)閉端口和斷開端口和 卡機(jī)連接,實(shí)現(xiàn)API接口如下:/ /斷開聯(lián)機(jī):/ False失/True 成功/ / 端口句柄-通過ConnectClock獲取/ DllImport(EastRiver.dll)public static extern Boolean DisConnectClock(IntPtr hPort);好吧我承認(rèn)這個(gè)簡(jiǎn)單,記得上面我們說過_hPort這個(gè)變量是存儲(chǔ)什么的吧。 對(duì)就是一個(gè)連接,這里要斷開這個(gè)連接,就把他傳進(jìn)去就行了。調(diào)用代碼
6、如下:private void 關(guān)閉端口 Click(object sender, EventArgs e)if (ICheck.DisConnectClock(_hPort)MessageBox.Show(“端口已關(guān)閉!);現(xiàn)在實(shí)現(xiàn)了聯(lián)通和關(guān)閉卡機(jī),我們?cè)囍プx取一下卡機(jī)信息6-讀取卡機(jī)時(shí)間我們先在窗體上畫一個(gè)存放時(shí)間的文本框先:然后找到API中讀取時(shí)間的函數(shù),(貌似沒提供,我是打開他們delphi的接口包 才找到的)實(shí)現(xiàn)如下:/ /獲取卡機(jī)時(shí)間-需要聯(lián)機(jī):/ False失/True 成功/ / 端口句柄-通過ConnectClock獲取/ 時(shí)間變量存放返回時(shí)|Bj/ DllImport(E
7、astRiver.dll)public static extern Boolean ReadClockTime(IntPtr hPort, ref DateTime curTime);由于需要返回值,所以我們這里的curTime參數(shù)使用的ref關(guān)鍵字(不懂意思 的問百度哦),返回值是DateTime類型,(在原接口里面不是這樣,重寫了改 變了一下,不影響功能,后面很多也是需要修改的,應(yīng)該不同語言的數(shù)據(jù)類 型不同嗎呵呵)雙擊讀卡機(jī)時(shí)間按鈕,實(shí)現(xiàn)代碼如下:/ /卡機(jī)時(shí)間/ DateTime _dTime;private void 讀卡機(jī)時(shí)間_Click(object sender, EventAr
8、gs e)if (ICheck.ReadClockTime(_hPort, ref _dTime)this.txtTime.Text = _dTime.ToString();elseMessageBox.Show(“讀取時(shí)間失?。 ?;先定義一個(gè)存儲(chǔ)時(shí)間的變量,然后調(diào)用讀取卡機(jī)時(shí)間的函數(shù),傳入之前說過 的_hport句柄是吧(打開后不要關(guān)閉哦因?yàn)檫@些接口都是需要在聯(lián)機(jī)狀態(tài)下 進(jìn)行的),傳入接收參數(shù)ref _dTime,來完成接收返回值。完成后顯示到窗 體搞定。你成功了么?7-寫卡和讀卡好吧現(xiàn)在我們十點(diǎn)實(shí)際的;寫卡,IC卡當(dāng)然是要存儲(chǔ)個(gè)人信息的是吧,既然 要存儲(chǔ)就要寫入,我們先找到API中的寫入
9、卡機(jī)的接口,重寫后如下:/ /寫入卡機(jī)一需要聯(lián)機(jī):/ False失/True 成功/ / 端口句柄-通過ConnectClock獲取/ param name=CardNo瀉入卡/ param name=CardName”寫入名稱/ 寫入金額/ 寫入充值次數(shù)/ IC卡格式:固定為830/ DllImport(EastRiver.dll)public static extern Boolean WriteICCard(IntPtr hPort, string CardNo, string CardName, int Money, int Times, int Ver);參數(shù)不解釋了,說下ver這個(gè)
10、參數(shù),我使用的是981c這款I(lǐng)C卡機(jī),他的IC 卡格式是830,別的格式根據(jù)API上提供的值進(jìn)行修改(上面有寫注意看哦)。 創(chuàng)建窗體如下圖:雙擊發(fā)卡按鈕,實(shí)現(xiàn)發(fā)卡:#region 發(fā)卡private void 發(fā)卡_Click(object sender, EventArgs e)_CardNo = this.txtCardNo.Text.ToString();_CardName = this.txtCardName.Text.ToString();_money = Convert.ToInt32(this.txtMoney.Text.ToString();_times = 0;if (ICh
11、eck.WriteICCard(_hPort, _CardNo, _CardName, _money, _times,Convert.ToInt32(this.txtVer.Text)MessageBox.Show(“寫卡成功!);elseMessageBox.Show(“寫卡失?。?;#endregion發(fā)卡成功后,可以試著在卡機(jī)上刷一下,會(huì)發(fā)現(xiàn)能看到剛剛寫進(jìn)去的卡的名 字了吧,但是顯示的是非法門禁,咱先不管他,晚點(diǎn)再給他開門,先讀卡試 試;找到讀卡API接口,實(shí)現(xiàn)如下:/ /讀卡機(jī)一需要聯(lián)機(jī):/ False失/True 成功/ / 端口句柄-通過ConnectClock獲取/ 卡號(hào)變量存儲(chǔ)
12、返回卡W/ / 金額變量存儲(chǔ)返回金額(/param/ 值次數(shù)變量返回充值次婁/ IC卡格式:默認(rèn)為830/ DllImport(EastRiver.dll)public static extern Boolean ReadICCard(IntPtr hPort, StringBuilder CardNo,StringBuilder CardName, ref int Money, ref int Times, ref int Ver);實(shí)現(xiàn)讀卡接口的時(shí)候我們要注意,這里有幾個(gè)StringBuilder的參數(shù),為什么 用這個(gè)呢,原因是這個(gè)接口在Delphi中實(shí)現(xiàn)是使用的Pchar類型參數(shù),這個(gè)
13、類型的參數(shù)只能和StringBuilder類型的參數(shù)匹配,不然奶奶的就報(bào)錯(cuò)。點(diǎn)擊 讀卡按鈕進(jìn)行讀卡:private void 讀卡_Click(object sender, EventArgs e)StringBuilder _Card = new StringBuilder(1024);StringBuilder _Name = new StringBuilder(1024);int _Var = Convert.ToInt32(this.txtVer.Text);if (ICheck.ReadICCard(_hPort,_Card, _Name, ref _money, ref _time
14、s, ref _Var) this.txtCardNo.Text = _Card.ToString();this.txtCardName.Text = _Name.ToString();elseMessageBox.Show(“讀卡信息失?。?;這里我只定義了兩個(gè)變量顯示到窗體,卡號(hào)和名稱,其實(shí)金額啊充值次數(shù)啊 也是可以顯示的,因?yàn)槲覀円矀鬟f了 ref修身的變量了是吧。需要就自己整 個(gè)文本框顯示一下;8.白名單黑名單完成了讀寫卡,現(xiàn)在需要設(shè)置一下白名單和黑名單,這個(gè)連個(gè)接口比較簡(jiǎn)單, 我就不做解釋了直接貼代碼:/ /設(shè)置白名單一需要聯(lián)機(jī):/ False失/True 成功/ / 端口句柄-通過C
15、onnectClock獲取/ 卡號(hào)/ 工號(hào)-IC卡不使用設(shè)置為Null/ 姓名/ DllImport(EastRiver.dll)public static extern Boolean SetAllowedCard(IntPtr hPort, string card, string empId, string EmpName);實(shí)現(xiàn)加入白名單:private void 加入白名_Click(object sender, EventArgs e)_CardNo = this.txtCardNo.Text;if (ICheck.SetAllowedCard(_hPort, _CardNo, nu
16、ll, )MessageBox.Show(“加入白名單成功!“);elseMessageBox.Show(“加入白名單失??!“);實(shí)現(xiàn)加入黑名單接口/ /設(shè)置黑名單一需要聯(lián)機(jī):/ False失/True 成功/ / 端口句柄-通過ConnectClock獲取/ 卡號(hào)/ DllImport(EastRiver.dll)public static extern Boolean SetBlackCard(IntPtr hPort, string card); 實(shí)現(xiàn)加入黑名單private void 加入黑名_Click(object sender, EventArgs e)_CardNo = thi
17、s.txtCardNo.Text;if (ICheck.SetBlackCard(_hPort, _CardNo) MessageBox.Show(“加入黑名單成功!“);elseMessageBox.Show(“加入黑名單失?。 ?;9.門禁之前我們說了寫卡了可以刷卡了,但是不能開門是吧,現(xiàn)在我們就寫一下加 入門禁的接口;(這個(gè)門禁的比較煩,這里只做一個(gè)通行門禁,就是啥時(shí)候來 刷一下都開門的),找到API實(shí)現(xiàn)門禁接口如下:/ /設(shè)置門寮-需要聯(lián)機(jī):/ False失/True 成功/ / 端口句柄-通過ConnectClock獲取/ 卡號(hào)格式:IC默認(rèn)為830/ 卡號(hào)/ 0字節(jié)密碼:可默認(rèn)為0
18、000/ 開門權(quán)限電鎖控制:可默認(rèn)為1/ 通行開始時(shí)間:可默認(rèn)為0000/ 通行結(jié)束時(shí)間:可默認(rèn)為0000/ 工號(hào):可默認(rèn)為9999”/ DllImport(EastRiver.dll)public static extern Boolean SetDoorPassCardDE(IntPtr hPort, int style, string Card, string Code, int Right, string BeginPass, string EndPass, string EmpId);看到一堆參數(shù)惱火吧,其實(shí)都是給默認(rèn)值就可以了,依時(shí)利的那份API里面 寫的參數(shù)注釋讓我百思不得其解,
19、所以毅然拋棄了哈哈。實(shí)現(xiàn)如下:private void 門禁_Click(object sender, EventArgs e)_CardNo = this.txtCardNo.Text;if (ICheck.SetDoorPassCardDE(_hPort, Convert.ToInt32(this.txtVer.Text),_CardNo, 0000,1, 0000, 0000, 9999)MessageBox.Show(打開門禁成功!);elseMessageBox.Show(打開門禁失敗!“);是吧其實(shí)也蠻簡(jiǎn)單的。只需要傳遞一個(gè)_hPort打開的端口句柄,和一個(gè)讀 取出來的卡號(hào),和一個(gè)IC卡的類型,記得吧830。別的都給默認(rèn)值就行了。 完成后,你再刷卡試試,是不是顯示歡迎來搞了?。?好吧我邪惡了一下)10數(shù)據(jù)采集考勤機(jī)嗎當(dāng)然需要采集數(shù)據(jù)啦,這里掩飾一下一次性讀取本機(jī)所有記錄的方 式。找到API實(shí)現(xiàn)接口如下:/ / 一次性讀取所有記錄到指定文彳牛-需要聯(lián)機(jī):/ 0:機(jī)具內(nèi)記錄以空/ 0:成功讀取記錄數(shù)/ -1,-2:串行通信錯(cuò)誤/ -3:命令字異?;蛐?yàn)錯(cuò)誤/ -4:用戶終止或未完成接收/ -5:機(jī)具不支持該命令/ -8,-9:資源分配錯(cuò)誤/ / 端口句柄-通過Connec
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 防溺水安全應(yīng)急預(yù)案
- 三人共同創(chuàng)業(yè)店鋪股權(quán)分配合同2025
- 專利實(shí)施許可合同備案示范合同
- KTV股東合作合同模板
- 上海市新車買賣合同標(biāo)準(zhǔn)模版
- 產(chǎn)品采購合同質(zhì)量保證協(xié)議書
- 個(gè)人與個(gè)人借款合同范例
- 個(gè)人購房正式合同樣本
- 標(biāo)準(zhǔn)借款合同
- 個(gè)人與銀行借款合同典范模板
- 2025公司借款合同范本借款合同
- 閩教版(2020)小學(xué)信息技術(shù)三年級(jí)上冊(cè)第2課《人工智能在身邊》說課稿及反思
- 語文-百師聯(lián)盟2025屆高三一輪復(fù)習(xí)聯(lián)考(五)試題和答案
- 地理-山東省濰坊市、臨沂市2024-2025學(xué)年度2025屆高三上學(xué)期期末質(zhì)量檢測(cè)試題和答案
- 正面上手發(fā)球技術(shù) 說課稿-2023-2024學(xué)年高一上學(xué)期體育與健康人教版必修第一冊(cè)
- 事故隱患排查治理情況月統(tǒng)計(jì)分析表
- 永磁直流(汽車)電機(jī)計(jì)算程序
- 國(guó)家電網(wǎng)招聘2025-企業(yè)文化復(fù)習(xí)試題含答案
- 頸部瘢痕攣縮畸形治療
- 貴州省貴陽市2023-2024學(xué)年五年級(jí)上學(xué)期語文期末試卷(含答案)
- 醫(yī)院物業(yè)服務(wù)組織機(jī)構(gòu)及人員的配備、培訓(xùn)管理方案
評(píng)論
0/150
提交評(píng)論