




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、依時利IC卡考勤門禁機(jī)接口 C#實現(xiàn)依時利這個坑爹的貨,竟然不提供C#方面的Demo支持!哎俺自己寫一個,存 一下怕以后忘記哈哈! 首先創(chuàng)建一個winfrom項目名稱為:edaxKQ(僅供參考,俺亂命名的不準(zhǔn)笑話小弟哈哈?。┤鐖D:日圓edaxKQ卜 囹 Properties 奏考l |邕 Fkjrml.cs 晉 Program.es 哲 TlCrecord.es由于依時利提供的接口是delphi編寫的,所以嘛不能直接引用,需要借助: DllImport(EastRiver.dll)方式引入:將依時利提供的EastRiver.dll文件拷貝到項目的 binDebug目錄下(當(dāng)然也可以放別的目錄只
2、要你能讓dllImport找到是吧哈哈)。3好了到這里前期準(zhǔn)備做好了,現(xiàn)在我們開始編寫連接卡機(jī)和端口連接的接口;(其實接口可以通過依時利提供的API找到,但是實在有點坑爹)4-連接接口實現(xiàn)打開依時利API我們可以找到連接接口,在C#中進(jìn)行重寫,(名字能錯哦, 好吧我廢話了,重寫當(dāng)然不能錯)/ /聯(lián)機(jī)卡機(jī):/其他值成功返回端口句柄/ -1端口無效或真正使用/ 0無法聯(lián)機(jī)/ / COM端口號/ param name=BaudRate端口波特率/ 卡機(jī)序號/ DllImport(EastRiver.dll)public static extern IntPtr ConnectClock(int po
3、rt, int BaudRate, int clock_id);重寫了接口后,我們打開Form1窗體,在里面創(chuàng)建對應(yīng)參數(shù)的輸入和測試按鈕,如圖:(對應(yīng)參數(shù)這里就不解釋了哦!做考勤機(jī)開發(fā)的應(yīng)該都知道了吧哈哈啊對了卡機(jī)序列號解釋下, 開啟依時利卡機(jī)后,在屏幕上可以看到一個序列號便是卡機(jī)序列號了,一般都是,雙擊測試聯(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變量,這個變量是在接口聯(lián)通的時候,存儲由接口返回M 口句柄,在后面的使用需要聯(lián)機(jī) 操作的接口中,都需要使用到該變量中存儲啊om口句柄;(說
5、白了就等于是一個已經(jīng)打開啊。1連接, 這個貌似好理解點)到這里我們就聯(lián)機(jī)成功了。5.端口端口連接當(dāng)然有連接就會有端口么,當(dāng)操作卡機(jī)完畢后就需要關(guān)閉端口和斷開端口和 卡機(jī)連接,實現(xiàn)API接口如下:/ /斷開聯(lián)機(jī):/ False失/True 成功/ / 端口句柄-通過ConnectClock獲取/ DllImport(EastRiver.dll)public static extern Boolean DisConnectClock(IntPtr hPort);好吧我承認(rèn)這個簡單,記得上面我們說過_hPort這個變量是存儲什么的吧。 對就是一個連接,這里要斷開這個連接,就把他傳進(jìn)去就行了。調(diào)用代碼
6、如下:private void 關(guān)閉端口 Click(object sender, EventArgs e)if (ICheck.DisConnectClock(_hPort)MessageBox.Show(“端口已關(guān)閉!);現(xiàn)在實現(xiàn)了聯(lián)通和關(guān)閉卡機(jī),我們試著去讀取一下卡機(jī)信息6-讀取卡機(jī)時間我們先在窗體上畫一個存放時間的文本框先:然后找到API中讀取時間的函數(shù),(貌似沒提供,我是打開他們delphi的接口包 才找到的)實現(xiàn)如下:/ /獲取卡機(jī)時間-需要聯(lián)機(jī):/ False失/True 成功/ / 端口句柄-通過ConnectClock獲取/ 時間變量存放返回時|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ī)時間按鈕,實現(xiàn)代碼如下:/ /卡機(jī)時間/ DateTime _dTime;private void 讀卡機(jī)時間_Click(object sender, EventAr
8、gs e)if (ICheck.ReadClockTime(_hPort, ref _dTime)this.txtTime.Text = _dTime.ToString();elseMessageBox.Show(“讀取時間失敗!“);先定義一個存儲時間的變量,然后調(diào)用讀取卡機(jī)時間的函數(shù),傳入之前說過 的_hport句柄是吧(打開后不要關(guān)閉哦因為這些接口都是需要在聯(lián)機(jī)狀態(tài)下 進(jìn)行的),傳入接收參數(shù)ref _dTime,來完成接收返回值。完成后顯示到窗 體搞定。你成功了么?7-寫卡和讀卡好吧現(xiàn)在我們十點實際的;寫卡,IC卡當(dāng)然是要存儲個人信息的是吧,既然 要存儲就要寫入,我們先找到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這個
10、參數(shù),我使用的是981c這款I(lǐng)C卡機(jī),他的IC 卡格式是830,別的格式根據(jù)API上提供的值進(jìn)行修改(上面有寫注意看哦)。 創(chuàng)建窗體如下圖:雙擊發(fā)卡按鈕,實現(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ī)上刷一下,會發(fā)現(xiàn)能看到剛剛寫進(jìn)去的卡的名 字了吧,但是顯示的是非法門禁,咱先不管他,晚點再給他開門,先讀卡試 試;找到讀卡API接口,實現(xiàn)如下:/ /讀卡機(jī)一需要聯(lián)機(jī):/ False失/True 成功/ / 端口句柄-通過ConnectClock獲取/ 卡號變量存儲
12、返回卡W/ / 金額變量存儲返回金額(/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);實現(xiàn)讀卡接口的時候我們要注意,這里有幾個StringBuilder的參數(shù),為什么 用這個呢,原因是這個接口在Delphi中實現(xiàn)是使用的Pchar類型參數(shù),這個
13、類型的參數(shù)只能和StringBuilder類型的參數(shù)匹配,不然奶奶的就報錯。點擊 讀卡按鈕進(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(“讀卡信息失?。?;這里我只定義了兩個變量顯示到窗體,卡號和名稱,其實金額啊充值次數(shù)啊 也是可以顯示的,因為我們也傳遞了 ref修身的變量了是吧。需要就自己整 個文本框顯示一下;8.白名單黑名單完成了讀寫卡,現(xiàn)在需要設(shè)置一下白名單和黑名單,這個連個接口比較簡單, 我就不做解釋了直接貼代碼:/ /設(shè)置白名單一需要聯(lián)機(jī):/ False失/True 成功/ / 端口句柄-通過C
15、onnectClock獲取/ 卡號/ 工號-IC卡不使用設(shè)置為Null/ 姓名/ DllImport(EastRiver.dll)public static extern Boolean SetAllowedCard(IntPtr hPort, string card, string empId, string EmpName);實現(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(“加入白名單失?。 ?;實現(xiàn)加入黑名單接口/ /設(shè)置黑名單一需要聯(lián)機(jī):/ False失/True 成功/ / 端口句柄-通過ConnectClock獲取/ 卡號/ DllImport(EastRiver.dll)public static extern Boolean SetBlackCard(IntPtr hPort, string card); 實現(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)在我們就寫一下加 入門禁的接口;(這個門禁的比較煩,這里只做一個通行門禁,就是啥時候來 刷一下都開門的),找到API實現(xiàn)門禁接口如下:/ /設(shè)置門寮-需要聯(lián)機(jī):/ False失/True 成功/ / 端口句柄-通過ConnectClock獲取/ 卡號格式:IC默認(rèn)為830/ 卡號/ 0字節(jié)密碼:可默認(rèn)為0
18、000/ 開門權(quán)限電鎖控制:可默認(rèn)為1/ 通行開始時間:可默認(rèn)為0000/ 通行結(jié)束時間:可默認(rèn)為0000/ 工號:可默認(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ù)惱火吧,其實都是給默認(rèn)值就可以了,依時利的那份API里面 寫的參數(shù)注釋讓我百思不得其解,
19、所以毅然拋棄了哈哈。實現(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(打開門禁失?。 ?;是吧其實也蠻簡單的。只需要傳遞一個_hPort打開的端口句柄,和一個讀 取出來的卡號,和一個IC卡的類型,記得吧830。別的都給默認(rèn)值就行了。 完成后,你再刷卡試試,是不是顯示歡迎來搞了??!(好吧我邪惡了一下)10數(shù)據(jù)采集考勤機(jī)嗎當(dāng)然需要采集數(shù)據(jù)啦,這里掩飾一下一次性讀取本機(jī)所有記錄的方 式。找到API實現(xiàn)接口如下:/ / 一次性讀取所有記錄到指定文彳牛-需要聯(lián)機(jī):/ 0:機(jī)具內(nèi)記錄以空/ 0:成功讀取記錄數(shù)/ -1,-2:串行通信錯誤/ -3:命令字異?;蛐炲e誤/ -4:用戶終止或未完成接收/ -5:機(jī)具不支持該命令/ -8,-9:資源分配錯誤/ / 端口句柄-通過Connec
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年冀中職業(yè)學(xué)院單招職業(yè)適應(yīng)性測試題庫1套
- 機(jī)器學(xué)習(xí)原理與應(yīng)用課件 第8章 支持向量機(jī)
- 2025年貴州省貴陽市單招職業(yè)傾向性測試題庫完整版
- 機(jī)械原理 CH10學(xué)習(xí)資料
- 2025年數(shù)小腳標(biāo)準(zhǔn)教案反思
- 老舊小區(qū)基礎(chǔ)配套設(shè)施改造項目概述
- 商務(wù)英語課程思政教案
- 2025至2030年中國微型耕作機(jī)械數(shù)據(jù)監(jiān)測研究報告
- 山西省張?zhí)m鎮(zhèn)第一初級中學(xué)校人教新目標(biāo)七年級英語上冊Unit7Howmucharethesesocks教案
- 2025年復(fù)烤煙葉項目建議書
- 人教版二年級數(shù)學(xué)下冊啟迪全優(yōu)卷第八、九單元測試卷(有答案)
- 地下車位租售方案實施辦法
- 11ZJ401樓梯欄桿安裝圖集
- 天然藥物化學(xué)第一章總論
- 廣東縣級農(nóng)商銀行聯(lián)社高管候選人公開競聘筆試有關(guān)事項上岸提分題庫3套【500題帶答案含詳解】
- 2023年版《電力安全工作規(guī)程》(線路部分)
- GA 254-2022警服內(nèi)穿襯衣
- 第四章觀賞樹木的園林特性4
- 水產(chǎn)動物遺傳與育種學(xué)緒論
- GB/T 19536-2004集裝箱底板用膠合板
- 監(jiān)理表格.監(jiān)理.3.復(fù)工令
評論
0/150
提交評論