📄 eastriver.pas
字号:
{ EastRiver Smart Function Library }
{ }
{ Author: shuguang LING }
{ }
{ March.23.2004 }
unit EastRiver;
interface
uses
Windows, SysUtils;
const
EastRiver_API = 'EastRiver.dll';
//设备版本号(Fireware), 比较时最好用这些常量, 否则类型不匹配将出将比较错误
FW119: Double = 1.19;
FW120: Double = 1.20;
FW125: Double = 1.25;
FW128: Double = 1.28;
FW129: Double = 1.29;
FW130: Double = 1.30;
//新门禁机常量
INOUT_RIGHT =$00; //出入权限设置
CIPHER_ENABLE =$01; //密码检测时段
ALERT_ENABLE =$02; //报警生效时段
BUTTON_ENABLE =$03; //按键生效时段
OPEN_DOOR =$04; //电锁常开时段
MAGNETISM_ENABLE =$05; //门磁检测时段
HOLIDAY_OPENRIGHT =$06; //节假日开门时段与权限
SUPERUSERPWD_ENABLE=$07; //超级用户密码时段
// IC卡读写卡号格式常量
CARDSTYLE_UNKNOWN= 0000; //未知卡号格式(可能为空)
CARDSTYLE_IDCARD = 0001; //ID卡格式
CARDSTYLE_UTFCARD= 0002; //自定义卡格式
CARDSTYLE_OLDCARD= 0830; //旧ER-680C消费卡格式
CARDSTYLE_NEWCARD= 0880; //新ER-880C卡格式
CARDSTYLE_690CARD= 0690; //新消费机ER-690卡格式
// 通讯卡号格式转换方法
CS_AUTO = $00; //对880机具调用默认处理,880D=ID_NOCONVERT,880C=IC_CONVERT,新型门禁机=IC_CONVERT
//如果卡号为16位标准卡则ID,IC都不变换
CS_GENERAL = $01; //不转换卡格式(明文)
CS_NEWCARD = $02; //IC卡号,需要变换成IC标准卡号
CS_OLDCARD = $03; //转换成旧ER-830C IC卡类型
CS_IDCARD = $04; //ID卡号,变换成16位标准卡号即最高两个位时'EF'
type
PClockInfo=^TClockInfo;
TClockInfo=record
hPort: THandle;
clock_id: Byte;
port, baudrate: DWORD; //通讯端口和速率
Fireware: Double; //模具版本
clock_type, //运行模式
VerOrd, //版本系列
model, //机具型号
cls, //读头类型(0: ID卡, 1:IC卡, 2: 混合)
run_mode, //工作模式(0:考勤机, 1:考勤门禁 2:门禁机 3:消费机 4:发卡机 5:其它)
Mode, SystemMode, ExtraMode, //运行参数
SaveMode,
Block, //使用IC卡块号
DispCardLen, CardLen, //显示卡号长度, 存储卡号长度
GroupStation: Integer; //分组字节位置
GroupCheck, //是否打卡分组
Connected, //是否已联机
CmdVerify, RWOnly: Boolean; //是否专用发卡器
mark: Char; //刷卡标识
end;
{***************依时利产品概况*******************
第一代(简称1G)
ER-210 C/D 考勤消费机
ER-610 C/D 考勤机
ER-680 C/D 消费机
ER-7x0 C/D 考勤门禁机
ER-810 C/D 考勤机
ER-830 C/D 考勤门禁机
第二代(简称2G)
ER-880 C/D 考勤门禁机,包含很多版本,不完全兼容,正式发行版由1.25-1.30(fireware)
ER-900 C 通用发卡机
第三代(简称3G)
ER-980 四门门禁机,读头可以是IC也可以是ID,混合使用
ER-981C 单门门禁机
ER-690C 消费机,兼容ER-980的大部分功能,只有部分和记录有关的指令不兼容,
另外还扩展了部分消费专用指令
}
// 取得最后发生的错误代号
function GetRecentErrCode(): DWORD; stdcall; external EASTRIVER_API
//返回值:
const
ERROR_IO_CHECK = $00000001; //校验错误
ERROR_IO_READ = $00000002; //读错误
ERROR_IO_WRITE = $00000003; //写错误
ERROR_IO_NOEND = $00000004; //串口接收未结束而中断
ERROR_IO_NOPEN = $00000005; //不能打开端口
ERROR_IO_COMMAND = $00000006; //命令错误
ERROR_IO_NOHANDLE = $00000007; //无句柄错误
ERROR_IO_TIMEOUT = $00000008; //通讯超时
{设备联接类}
// 打开串行端口
function OpenCommPort(Port: Integer; BaudRate: Integer): THandle; stdcall; external EASTRIVER_API
//参数说明:
// Port : 端口号,允许值1-256, 如: COM1=1, COM2=2...COM256=256
// BaudRate : 端口波特率,允许值: 9600, 19200, 38400, 通常是9600
//返回值:
// -1 : 端口无效或正在使用
// 0 : 无法打开端口
// 其它值 : 端口句柄,用于其它函数调用
//备注:
// 请使用Windows API CloseHandle(hObject: HANDLE): BOOL; 来关闭端口句柄
// 关闭已经打开的端口号
function CloseCommPort(Port: Integer): Boolean; stdcall; external EASTRIVER_API
//参数说明:
// Port : 端口号,允许值1-256, 如: COM1=1, COM2=2...COM256=256
//返回值:
// True=成功, False=失败
// 关闭端口句柄
function ClosePortHandle(hPort: THandle): Boolean;stdcall; external EASTRIVER_API
//参数说明:
// hPort : 已经打开的端口句柄
//返回值:
// True=成功, False=失败
// 初始化端口设置, 在打开端口和联机时自动调用, 除非需要修改端口参数
// 一般不需要自己调用
function InitCommPort(hPort: THandle; BaudRate: DWORD; Parity: Byte): Boolean;stdcall; external EASTRIVER_API
//参数说明:
// hPort : 端口句柄
// BaudRate : 新的端口波特率,允许值: 9600, 19200, 38400, 置为0时将保留原波特率
// Parity : 新的端口校验方式,允许值如下:
// NOPARITY = 0; //无校验
// ODDPARITY = 1; //奇校验
// EVENPARITY = 2; //偶校验
// MARKPARITY = 3; //标记校验(联机之前)
// SPACEPARITY = 4; //空校验 (联机之后)
// 256 =$FF; //不更改校验设置
//返回值:
// True=成功, False=失败
// 打开端口及联接设备(包含 OpenCommPort )
function ConnectClock(Port, BaudRate: Integer; clock_id: Integer): THandle;stdcall; external EASTRIVER_API
//参数说明:
// Port : 端口号,允许值: 1-256, 如: COM1=1, COM2=2...COM256=256
// BaudRate : 端口波特率,允许值: 9600, 19200, 38400, 通常是9600
// clock_id : 机号,允许值: 0-255, 由于机具上显示的机号实际上是两位16进制数
// 所以机号范围16进制表示应该为: 0x00-0xFF
//返回值:
// -1 : 端口无效或正在使用
// 0 : 无法联机, 可能是端口,波特率,机号或是线路故障
// 其它值 : 联机成功,返回端口句柄,用于其它函数调用
// 断开联接及关闭端口句柄
function DisConnectClock(hPort: THandle): Boolean; stdcall; external EASTRIVER_API
//参数说明:
// hPort : 端口句柄,通过调用ConnectClock函数得到
//返回值:
// True : 脱机成功
// False : 脱机失败
// 检查指定的机器是否在联机状态
function CheckConnectClock(hPort: THandle; clock_id: Integer): Boolean; stdcall; external EASTRIVER_API
//参数说明:
// hPort : 端口句柄,通过调用OpenCommPort函数得到
//返回值:
// True : 联机状态
// False : 脱机状态
// 显式联机命令
function CallClock(hPort: THandle; clock_id: Integer): Boolean; stdcall; external EASTRIVER_API
//参数说明:
// hPort : 端口句柄,通过调用OpenCommPort函数得到
// clock_id : 机号,允许值: 0-255, 由于机具上显示的机号实际上是两位16进制数
// 所以机号范围16进制表示应该为: 0x00-0xFF
//返回值:
// True : 联机成功
// False : 联机失败
//备注:
// "1G"机型不能重复联机
// 所有和机具通讯且没有带机号的函数都必须在联机后才能调用
// 用户一般不需要直接调用此函数, 建议使用 ConnectClock 函数
// 脱机命令
function UnCallClock(hPort: THandle): Boolean; stdcall; external EASTRIVER_API
//参数说明:
// hPort : 端口句柄,通过调用OpenCommPort函数得到
//返回值:
// True : 脱机成功
// False : 脱机失败
//备注:
// 脱机后,所有和机具通讯没有带机号的函数均不起作用
// 检查指定机号在线上是否响应, 在限定的时间内返回
function TestCallClock(hPort: THandle; clock_id: Integer; TimeOut: Integer=0): Boolean; stdcall; external EASTRIVER_API
//参数说明:
// hPort : 端口句柄,通过调用OpenCommPort函数得到
// clock_id : 机号,允许值: 0-255, 由于机具上显示的机号实际上是两位16进制数
// 所以机号范围16进制表示应该为: 0x00-0xFF
// TimeOut : 响应超时,用于调整搜索速度,推荐值(单位毫秒ms):
// RS-232线路 = 100-120;
// RS-485线路 = 120-200;
// TCP/IP线路 = 500-800;
// 最大 > 1000;
//返回值:
// True : 机具存在
// False : 机具不存在
// 自动识别机具型号(DLL内部需要识别机型)
function ClockAutoModel(hPort: THandle): Boolean; stdcall; external EASTRIVER_API
//参数说明:
// hPort : 端口句柄, 需要联机
//返回值:
// True : 自动识别成功
// False : 机型无法识别,请调用强制设置机型函数
//备注:
// 由于不同的型号,不同读头的机具接受的卡号格式不完全相同,所以DLL需要知道正在联机
// 机型来转换不同的卡号格式,否则所有和卡号有关的函数将会起不到预期的效果
// 取得机具型号(DLL内部需要识别机型)
function GetClockModel(hPort: THandle;var Model: Integer;var Ver: Double;var cls: Integer): Boolean; stdcall; external EASTRIVER_API
//参数说明:
// hPort : 端口句柄
// Model : 返回机具型号, 如:
// ER-880C = 880;
// ER-980 = 980;
// ...
// Ver : 返回机具版本号, 必须大于0, 如: 1.28, 1.30等等
// cls : 返回机具类型(读头)
// ER-880C = 1; //IC读头
// ER-980 = 1; //IC,ID读头混合
// ER-880D = 0; //ID读头
//返回值:
// True=成功, False=错误
// 设置标识DLL内部正在联机的机具型号(当自动识别无效时)
function SetClockModel(hPort: THandle; Model: Integer; Ver: Double; cls: Integer): Boolean; stdcall; external EASTRIVER_API
//参数说明:
// hPort : 端口句柄
// Model : 机具型号, 如:
// ER-880C = 880;
// ER-980 = 980;
// ...
// Ver : 机具版本号, 必须大于0, 如: 1.28, 1.30等等
// cls : 机具类型(读头)
// ER-880C = 1; //IC读头
// ER-980 = 1; //IC,ID读头混合
// ER-880D = 0; //ID读头
//返回值:
// True=成功, False=错误
// 修改机具通信速率(^2G)
function SetClockBaudRate(hPort: THandle; BaudRate: DWORD): Boolean; stdcall; external EASTRIVER_API
//参数说明:
// BaudRate : 新的机具波特率, 允许值: 9600, 19200, 38400
//返回值:
// True : 修改成功
// False : 修改失败
//备注: 调用前必须使用正确的波特率联机, 修改成功后如果需要和机具通讯必须
// 调用 InitCommPort 函数将端口波特率修改成和新的机具波特率一致
{设备联接类}
{版本控制类}
// 查询在线的机具是否支持某项功能
function GetClockSupports(hPort: THandle; Index: Integer): Boolean; stdcall; external EASTRIVER_API
//参数说明:
// hPort : 端口句柄, 需要联机
// Index : 功能编号, 可能的值如下表
const
fiStoreRecord = $00000000; //存储刷卡记录
fiAttendance = $00000001; //支持考勤功能
fiDoorGuard = $00000002; //支持门禁功能
fiConsumption = $00000003; //支持消费功能
fiIssueCard = $00000004; //支持发卡功能
// ... //5-F 保留
fiDoorList = $00000010; //支持门禁名单
fiWhiteList = $00000011; //支持白名单
fiBlackList = $00000012; //支持黑名单
fiHaveMark = $00000013; //设备支持刷卡标识
fiIDReader = $00000014; //有ID读头
fiICReader = $00000015; //有IC读头
fiScreen = $00000016; //支持控制屏显示
fibuzzer = $00000017; //支持控制蜂器发声
fiAdminCard = $00000018; //支持管理卡
fiBrushPeriods = $00000019; //支持刷卡时段
fiRingTime = $0000001A; //支持打铃时间
fiGroupCard = $0000001B; //支持分组打卡
fiRealTime = $0000001C; //支持实时上传
fiRealControl = $0000001D; //支持实时控制
fiChangeMode = $0000001E; //支持更改运行模式
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -