線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2625
推到 Plurk!
推到 Facebook!

用delphi去整合廠商的考勤機

尚未結案
ye_top1
一般會員


發表:22
回覆:22
積分:9
註冊:2002-05-25

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-02-14 11:03:50 IP:218.18.xxx.xxx 未訂閱
公司有買一套考勤機.並廠商有提供library和一些接口的spec給我們.但是我們在這方面接觸較少.不知如何去api呼叫dll檔.需要做到向考勤機中寫入資料並可以讀出刷卡紀錄 發表人 - ye_top1 於 2004/02/14 11:05:04
ying0515
中階會員


發表:90
回覆:168
積分:81
註冊:2003-01-04

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-02-16 09:31:56 IP:61.218.xxx.xxx 未訂閱
可向廠商多要技術手冊,或技術支援 Delphi follower
------
Delphi
seaturn99
版主


發表:69
回覆:427
積分:214
註冊:2003-08-25

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-02-16 16:04:55 IP:203.66.xxx.xxx 未訂閱
看 library 說明文件內的適用建議語言 ... 看是以何種形式散佈??   Export Function 形式的 dll??  COM/ActiveX/OLE??    如果是 Export API,請參考 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=43280 一個簡單的 dll 呼叫的範例 ... 不過使用 dll 時可能要注意一些關於 stdcall 等等與語言實作有關的問題,站內有豐富討論 dll 的文章可以參考,若廠商有說明文件,應該就可以直接套用呼叫..    COM/ActiveX/OLE 方面只要遵循 interface 規則,應該上手不難 (文件齊全的話)...    開發前,把廠商的說明文件多 K 幾遍,以免找廠商 support 的時候溝通出現誤會,廠商是不會免費幫你開發程式的....     ---- 我只會兩件事,這也不會,那也不會 ---- 眼見不一定為真
ye_top1
一般會員


發表:22
回覆:22
積分:9
註冊:2002-05-25

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-02-18 18:43:54 IP:218.18.xxx.xxx 未訂閱
以下為廠商給我的說明書.因為我們想將公司自己sql2k中的人事資料(姓名.員工卡號.ic卡號).寫入到考勤機中.然後.可以從考勤機中輸出每日考勤資料.設定電鈴.等功能.與公司系統整合在一起. JBC2900E.dll函數說明 注:所有的AR_ID變量代表卡鐘位址編號.JBC2900E型位址編號為1-128. -------------------------------------------------------------------------------- extern "C" __declspec(dllimport ) __stdcall long Open_ComX(char * ComPort,long Baud); 功能:打開串口 參數: ComPort 端口號 如’COM1’ ‘COM2’ Baud 波特率 9600 返回: 0 成功 非0失敗 -------------------------------------------------------------------------------- extern "C" __declspec(dllimport ) __stdcall long Close_ComX(); 功能:關閉串口 返回: 0 成功 非0失敗 -------------------------------------------------------------------------------- extern "C" __declspec(dllimport ) __stdcall long SearchAR(long AR_ID); 功能:搜索卡鐘 返回:0 存在 非0 不存在 -------------------------------------------------------------------------------- extern "C" __declspec(dllimport ) __stdcall long SetARAdress(long AR_ID,long Old_AR_ID); 功能:重新設置卡鐘位址編號. 參數: AR_ID 新的卡鐘位址編號. Old_AR_ID 以前的卡鐘位址編號. 返回: 0 成功 非0失敗 -------------------------------------------------------------------------------- extern "C" __declspec(dllimport ) __stdcall long ReadRam2k(long AR_ID,char *DataBuff,long BlockFlag); 功能:讀128條數據 參數: DataBuff 數據從此參數返回. BlockFlag 塊標志. 返回:1 數據未完並請求下一塊. 0數據完成. -------------------------------------------------------------------------------- extern "C" __declspec(dllimport ) __stdcall long ClearRam(long AR_ID); 功能:清除卡鐘數據. 返回: 0 成功 非0失敗 -------------------------------------------------------------------------------- long __stdcall RSIC12887(long AR_ID) 功能:重置卡鐘FLASH數據區標志位. 說明:在刪除數據后,想重新讀回數據,使用該函數.相當于終端管理程式的I命令. 返回: 0 成功 非0失敗 -------------------------------------------------------------------------------- extern "C" __declspec(dllimport ) __stdcall long SetDateTime(long AR_ID,char *DT,long EN); 功能:設置卡鐘時間 參數: EN 0 設卡鐘時間為系統時間 , DT 為空字符. 1 設卡鐘時間為DT DT 字符格式為“200105310121100”表示2000年05月31日0-6星期天---星期六12點11分00秒. 返回: 0 成功 非0失敗 -------------------------------------------------------------------------------- extern "C" __declspec(dllimport ) __stdcall long SetMode(long AR_ID,long EN); 功能:設置卡鐘記錄模式 參數: EN 0 普通模式 1 注冊模式 返回: 0 成功 非0失敗 -------------------------------------------------------------------------------- extern "C" __declspec(dllimport ) __stdcall long EnableDoor(long AR_ID,long EN); 功能:使能門控. 參數: EN 0 無效門控 1 有效門控 返回: 0 成功 非0失敗 -------------------------------------------------------------------------------- extern "C" __declspec(dllimport ) __stdcall long ReadRamOne(long AR_ID,char *RetVal); 功能:單條讀取記錄,可用于即時處理. 參數: RetVal 數據從此參數返回 注意: 此命令執行后會從卡鐘內永久刪除當前數據. 返回: 0 成功 非0失敗 -------------------------------------------------------------------------------- extern "C" __declspec(dllimport ) __stdcall long SetMasterCard(long AR_ID,char *CardID,char *PassWord); 功能:寫主卡 參數: CardID 主卡的卡號 PassWord 密碼 返回: 0 成功 非0失敗 -------------------------------------------------------------------------------- extern "C" __declspec(dllimport ) __stdcall long ReadMasterCard(long AR_ID,char *CardID,char *PassWord); 功能:讀主卡 參數 CardID 返回主卡的卡號 PassWord 返回密碼 返回: 0 成功 非0失敗 -------------------------------------------------------------------------------- extern "C" __declspec(dllimport ) __stdcall long SetDoorTimeLen(long AR_ID,long Lenght); 功能:設置開門時間的長度. 參數: Length 時間長度 0─254 返回: 0 成功 非0失敗 -------------------------------------------------------------------------------- extern "C" __declspec(dllimport ) __stdcall long EnableMasterCard(long AR_ID,long EN); 功能:主卡使能 參數: EN 0 有效主卡 1 無效主卡 返回: 0 成功 非0失敗 -------------------------------------------------------------------------------- extern "C" __declspec(dllimport ) __stdcall long GetStatus(long AR_ID,char *StatusValue); 功能:給出卡鐘所有的狀態. 參數: StatusValue 所有的狀態值從此參數返回. [Lf0 Cr0 Lm0 Mc1 Rc1 Dp1 Ts0 Pd0 Dc0 Sr1 Bc0 Lc1 Os000] 格式:Lf0 (LoopFunction) 循環有效 2 Cr0 (ContinuumReadCard) 連續刷卡有效 6 Lm0 (LoginMode) 注冊模式 10 Mc1 (MasterCard) 主卡 14 Rc1 (ReadCard) 刷卡 間隙(任意)刷卡 18 Dp1 (DoorProhibit) 門禁使能 22 Ts0 (TimeSpace) 時段控製使能 26 Pd0 (PwsToDoor) 密碼使能 30 Dc0 (DayControl) 白晝使能 34 Sr1 (BellRing) 響鈴使能 38 Bc0 (BellControl) 鈴開 42 Lc1 (DoorControl) 鎖開 46 Os000 (OpentimeS) 開門時長 49.50.51 返回: 0 成功 非0失敗 該函數的修整: struct Tstate_ { bool LoopFunction , //循環有效 ContinuumReadCard, //連續刷卡有效 LoginMode , //注冊模式 MasterCard , //主卡 ReadCard , //刷卡 間隙(任意)刷卡 DoorProhibit , //門禁使能 TimeSpace , //時段控製使能 PwsToDoor , //密碼使能 DayControl , //白晝使能 BellRing , //響鈴使能 BellControl , //鈴開 DoorControl ; //鎖開 unsigned char TimeLen ; //開門時長 }; long __stdcall GetStatusEx(long AR_ID,char *StatusValue) 功能:給出卡鐘所有的狀態(修改). 參數:*StatusValue 指向Tstate_架構 返回: 0 成功 非0失敗 -------------------------------------------------------------------------------- extern "C" __declspec(dllimport) __stdcall long SirenOn(long AR_ID,long EN); 功能:鈴控開關 參數: EN 0 關閉 1 打開 返回: 0 成功 非0失敗 -------------------------------------------------------------------------------- extern "C" __declspec(dllimport) __stdcall long OpenDoor(long AR_ID,long EN); 功能:門控開關 參數: EN 0 關閉 1 打開 返回: 0 成功 非0失敗 -------------------------------------------------------------------------------- extern "C" __declspec(dllimport) __stdcall long EnableSiren(long AR_ID,long EN); 功能:使能鈴控 參數: EN 0 有效鈴控 1 無效鈴控 返回: 0 成功 非0失敗 -------------------------------------------------------------------------------- extern "C" __declspec(dllimport) __stdcall long GetRecordNumber(long AR_ID,char *RecordNumber,char *LoginNumber); 功能:給出卡鐘內的記錄數. 參數 RecordNumber 當前卡鐘內的數據記錄數. LoginNumber 當前卡鐘內已注冊卡號數. 返回: 0 成功 非0失敗 -------------------------------------------------------------------------------- long __stdcall EnableGrade(long AR_ID,int EN) 功能:有效門禁時間表(使用由SetDoorTimeTable函數設置的門禁時間). 參數:EN EN=0 門禁時間表無效 EN=1 門禁時間表有效 返回: 0 成功 非0失敗 -------------------------------------------------------------------------------- extern "C" __declspec(dllimport) __stdcall long SetDoorTimeTable(long AR_ID,char *TimeTable,long team) 功能:設置門禁時間表 參數 *TimeTable 時間表. 格式: 1200120012001200120012001200120012001200120012001200120012001200 //星期天 1200120012001200120012001200120012001200120012001200120012001200 //星期一 1200120012001200120012001200120012001200120012001200120012001200 //星期二 1200120012001200120012001200120012001200120012001200120012001200 //星期三 1200120012001200120012001200120012001200120012001200120012001200 //星期四 1200120012001200120012001200120012001200120012001200120012001200 //星期五 1200120012001200120012001200120012001200120012001200120012001200 //星期六 說明: 上面的字符是時間表,每天有8個時間段,16個時間,1200表示12:00 team 時間組參數(0-99組). 返回: 0 成功 非0失敗 -------------------------------------------------------------------------------- extern "C" __declspec(dllimport) __stdcall long WriteSiren(long AR_ID,long Week,char *SirenTable) 功能:寫鬧鐘表 參數: Week 星期(0-6) 參數0為星期天 1為星期一 ...6星期六 *SirenTable 時間表 格式: 12001111200111120011112001111200111120011112001111200111 12001111200111120011112001111200111120011112001111200111 上面的數據是一天的時間設置,一共分16個時間點.一個時間點為1200111,它表示為12:00開始鬧鈴,鬧鈴時間長度為111秒. 返回: 0 成功 非0失敗 -------------------------------------------------------------------------------- extern "C" __declspec(dllimport) __stdcall long ClearSirenTable(long AR_ID) 功能:清除設備的鬧鐘表數據 返回: 0 成功 非0失敗 -------------------------------------------------------------------------------- extern "C" __declspec(dllimport) __stdcall long WriteCardIDRegister(long AR_ID,char *CardNo,char *WorkNo,char *PassWord,char *Secure,long Group) 功能:登記一張注冊卡號 參數:*CardNo 卡號,長度為8位(程式調用時要限製長度,只能是8位,字符只能是0-9的數字.) *WorkNo 編號,長度位6位(程式調用時要限製長度,只能是6位,字符可以是0-9,A-X) *PassWord 密碼,長度是6位(程式調用時要限製長度,只能是6位.字符只能是0-9的數字.) *Secure 安全級別,長度為1位(程式調用時要限製長度,只能是6位,級別是A級,B級,C級,D級卡.) Group 組號(0-99)組 返回: 0 成功 非0失敗 -------------------------------------------------------------------------------- DLL int WINAPI WriteCardIDRegisterEx(long AR_ID,char *Name, char *CardNo,char *WorkNo,char *PassWord,char *Secure,long Group); 功能:帶中文姓名登記一張注冊卡號 參數:*Name 中文姓名 *CardNo 卡號,長度為8位(程式調用時要限製長度,只能是8位,字符只能是0-9的數字.) *WorkNo 編號,長度位6位(程式調用時要限製長度,只能是6位,字符可以是0-9,A-X) *PassWord 密碼,長度是6位(程式調用時要限製長度,只能是6位.字符只能是0-9的數字.) *Secure 安全級別,長度為1位(程式調用時要限製長度,只能是6位,級別是A級,B級,C級,D級卡.) Group 組號(0-99)組 返回: 0 成功 非0失敗 -------------------------------------------------------------------------------- extern "C" __declspec(dllimport) __stdcall long DeleteCardIDRegister(long AR_ID,char *CardNo ) 功能:刪除一張注冊卡號 參數:*CardNo 卡號,長度為8位(作程式時要限製長度,只能是8位,字符只能是0-9的數字.) 返回: 0 成功 非0失敗 -------------------------------------------------------------------------------- extern "C" __declspec(dllimport) __stdcall long ChangeLockMode(long AR_ID,long EN) 功能:改變門鎖繼電器模式 參數:EN EN=0 設備繼電器常閉 出廠設置 EN=1 設備繼電器常開 返回: 0 成功 非0失敗 -------------------------------------------------------------------------------- long StorageMode(long AR_ID,long EN) 功能:設置讀卡模式 參數:EN EN=0 任意讀卡 EN=1 間隙讀卡(間隙讀卡時間調用SetInterval函數) 說明:在門禁功能(EnableDoor)有效時,間隙讀卡模式將無效. 返回: 0 成功 非0失敗 -------------------------------------------------------------------------------- long __stdcall SetInterval(long AR_ID,int HH,int MM) 功能:設置間隙讀卡時間 參數:HH 小時,最大為24. MM 分鐘,最大為59. 返回: 0 成功 非0失敗 -------------------------------------------------------------------------------- extern "C" __declspec(dllimport) __stdcall long FlagTable(char *RetFlag,long Param,long Bit) 功能:數據標志表. 參數: *RetFlag 返回的字元串 如:"卡號 頭0 考勤" Param 標志位值. Bit 標志的第幾位 如:090 這個9, Param=9, Bit=2, RetFlag 返回 "錯誤參數" 返回: 0 成功 非0失敗 -------------------------------------------------------------------------------- DLL int WINAPI UseBroadcast(long AR_ID,char *MSG,int len,int Second); 功能:發送廣播訊息到設備 參數: *MSG 廣播訊息 *len 訊息字符長度 Second 在設備上顯示的時間長度. 返回: 0 成功 非0失敗 -------------------------------------------------------------------------------- (文檔結束)
seaturn99
版主


發表:69
回覆:427
積分:214
註冊:2003-08-25

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-02-19 09:11:21 IP:203.66.xxx.xxx 未訂閱
引言: 以下為廠商給我的說明書.因為我們想將公司自己sql2k中的人事資料(姓名.員工卡號.ic卡號).寫入到考勤機中.然後.可以從考勤機中輸出每日考勤資料.設定電鈴.等功能.與公司系統整合在一起.
看起來是一般 dll 的形式(很抱歉,我不會寫 C ),建議用 class="code"> type TOpen_ComX= function (ComPort:string;Baud:integer):integer; ... ... var Open_ComX : TOpen_ComX; hWNDProc : THandle; RetVal : integer; hWNDProc := LoadLibrary('JBC2900E.dll'); Open_ComX := GetProcAddress(hWNDProc,'Open_ComX'); RetVal := Open_ComX (a, b, c); FreeLibrary(hWNDProc); ----------------------------------------------------------------- PS. 要注意一下 C/C long 的 size... 透過 Load Dll,您可以將廠商提供的 dll Library 經過 Export 後,視為一般 API ,簡單的說, Export 後,就當成內部的函式使用.. 取資料可能是以下函式的步驟 : Open_ComX SearchAR ReadRam2k // 取得資料後要可能要自己處理 Close_ComX(); 您可以視這些 API 為基本的 API,將其包成一兩個 Class 後應該會比較容易使用... ---- 我只會兩件事,這也不會,那也不會 ---- 眼見不一定為真
anypro
一般會員


發表:3
回覆:6
積分:1
註冊:2003-12-29

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-02-19 18:08:11 IP:61.155.xxx.xxx 未訂閱
能提供廠商名稱和機器型號嗎?我正在開發考勤系統。
bbtw
一般會員


發表:2
回覆:31
積分:16
註冊:2003-07-11

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-02-19 19:18:36 IP:61.71.xxx.xxx 未訂閱
我寫過幾個不同的由C轉為delphi的硬體lib, 一般我是如此做的. 1.將 *.h檔轉為 .pas (我一般都直接用Dr.BOB的tooling) 2.轉換程式會有很多漏洞, 開始修改為Delphi的呼叫DLL格式(可以參考Delphi DLL寫作方式) 3.加入一個project內看看會不會無法compiler 4.如果都可以, 大部分的問題都已經解決. 很偷懶的方法, 但是大部分都奏效 PS:如果廠商願意提供"通訊協定" 自己寫function call會是最好的! 另外上面的DLL呼叫方式是動態連結, 不確定時先用靜態連結會比較安全.我以前吃過虧. 發表人 - bbtw 於 2004/02/19 19:20:46 發表人 - bbtw 於 2004/02/19 19:24:23
shine5188
一般會員


發表:2
回覆:15
積分:8
註冊:2005-05-11

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-08-24 18:47:00 IP:211.20.xxx.xxx 未訂閱
我是這樣調用的 KQDLL:=CreateOleObject('KQCONNECT_V70.Connect_v70'); 考勤機不周. dll檔也有所不同
系統時間:2024-05-05 18:40:30
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!