门禁控制器动态库接口
门禁动态库接口说明
动态库文件 COMdllX.dll
文件版本
更新日期 :2013-11-12
该动态库支持
1 门 485 控制器
2 门 485 控制器
4 门 485 控制器
485 电梯控制器 V3 版
485 液晶一体机
门禁动态库接口说明
结构说明
动态库是一个 COM 组件,需要注册才能使用。
包括以下几个接口
名称
说明
IBaseControl
IAllControls
ICOM
I1Door
I2Door
I4Door
IST
公共接口
获取接口对象
串口
1 门控制器接口
2 门控制器接口
4 门控制器接口
电梯控制器接口
动态库引出函数只有一个:
Function MachineDll: IAllControls; stdcall;
该函数能获取全部使用的对象,然后根据需要使用对应的接口对象。
步骤
1. 注册文件
2. 调用函数 MachineDll,获得 IAllControls 对象。
3. 调用 IAllControls. COM485.OpenCom, 打开串口。
4. 调用 IAllControls. BaseControl. SetAddress.设置地址。如果成功就执行下面的。
5. 调用 IAllControls. BaseControl. GetStatus,获取状态。如果失败执行第 4 步,电梯的函数为 IAllControls.
BaseControl. Get32Status。
具体的流程见文件后面的伪代码。
指令列表
序号
接口
函数
说明
门禁动态库接口说明
1
2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
ICOM
ICOM
OpenComm
CloseComm
打开串口
关闭串口
IBaseControl
1-4 门适用
1-4 门适用
设置控制器地址
取状态
时间同步
设置控制器参数
设置门的参数
开门
关门
门常开
设置报警
设置火警
锁门 或者 解锁
设置一个开放时间
清除门的全部开放时间
清除卡
清除所有卡
取刷卡记录
删除全部刷卡记录
取报警记录
SetAddress
GetStatus
SetTime
SetControl
SetDoor
OpenDoor
CloseDoo
OpenDoorLong
SetAlarm
SetFire
LockDoor
SetDoorTimeZone
ClearDoorTimeZone
DeleteCard
ClearAllCard
GetCardEvent
ClearAllCardEvent
GetAlarmEvent
ClearAllAlarmEvent 删除全部报警记录
GetCardStatus
UpdateCardStatus
ResetSystem
AddHoliday
ClearAllHoliday
ReadCard
取卡状态,防潜返用
更新卡状态,防潜返用
控制器复位
增加一个假日
删除全部假日
从设备中读出卡数据
门禁动态库接口说明
序号
25
接口
IAllControls
26
27
28
30
32
33
34
I1Door
I2Door
I4Door
IST
IST
IST
IST
函数
COM485
BaseControl
OneDoor
TwoDoor
FourDoor
StControl
AddCard
AddCard
AddCard
Get32Status
Set32ControlA
CloseDoor
AddCardST
说明
串口对象
公共对象
单门
2 门
4 门
电梯
增加卡
增加卡
增加卡
查询电梯状态
设置电梯板参数
关闭楼层
增加卡到电梯板
1 门适用
2 门适用
4 门适用
电梯板
门禁动态库接口说明
函数
功能
参数
返回值
COM
BaudRate
TimeDelay
WordBool
function OpenCOM(const COM: WideString; BaudRate: Integer; TimeDelay: Integer):
WordBool; stdcall;
打开串口
串口号如 COM1 COM2
固定 9600
延时,一般为 0
是否成功
以下爱是 485 电梯接口:
function Set32ControlA(Address: Integer; ConnectMask: Integer; Group: Integer; is16: WordBool;
OpenTime: Integer; AddTime: Integer; AlarmTime: Integer;
AlarmMast: Integer; const Duress: WideString; const OutPut1: WideString;
const OutPut2: WideString): WordBool; stdcall;设置电梯控制器参数
输入点是否做为门磁,否则为按钮
第一个输入点是否做为火警
Address 控制器地址编号
InputasMC
firstAsfire
OutputMast
DoorLockEach 双门互锁保留
FireTimeLong 火警时间 2 字节
AlarmTimeLong 报警时间 2 字节
DuressPIN 挟持密码 备用
输出控制
OutputMast
输出控制继电器的极性。16 个 16 进制的字符,如“AB CD 12 34 56 78 90 AB CD EF 01 23 45 67 89 AB”(没有
空格) 合计成 2 进制标识 128 个位,每个位对应 128 个点的状态设置,1 表示长闭,0 表示长开。其中 0-3 个字节表示第一
个主板,第 4-7 表示第 1 个扩展板,以此类推。
function Get32Status(Address: Integer; ConnectMask: Integer; var Fun: Byte; out Ver: Byte;
out HasCardEvent: WordBool; out HasAlarmEvent: WordBool;
out HasEventStatus: WordBool; out DoorStatusA: Integer;
out DoorStatusB: Integer; out DoorStatusC: Integer;
out DoorStatusD: Integer; out DoorStatusE: Integer;
out DoorStatusF: Integer; out DoorStatusG: Integer;
out DoorStatusH: Integer): WordBool; stdcall;
查询电梯控制器状态
Address 控制器地址编号
Ver
版本
HasCardEvent
HasAlarmEvent
HasEventStatus
是否有刷卡记录
是否有报警记录
是否有状态事件 保留
门禁动态库接口说明
DoorStatusA
DoorStatusB
DoorStatusC
DoorStatusD
DoorStatusE
DoorStatusF
DoorStatusG
DoorStatusH
8 字的状态 合计 8×2×8 = 128 位,表示 128 个状态
function AddCardST(Address: Integer; ConnectMask: Integer; Fun: Integer; Ver: Integer;
CardIndex: Integer; const CardName: WideString; const CardNo: WideString;
const PIN: WideString; TZ: Byte; Box1A: Integer; Box1B: Integer;
Box2A: Integer; Box2B: Integer; Box3A: Integer; Box3B: Integer;
Box4A: Integer; Box4B: Integer; Status: Byte; EndDate: TDateTime;
Times: Integer): WordBool; stdcall;
增加一张卡到电梯控制器
Address 控制器地址编号
Index 卡编号
CardNo 卡号
PIN
密码
TZ
8 位的开放时间选择,8 个位分别对应开放时间表里面的对应序言是否选择
Box1A, Box1B, Box2A, Box2B, Box3A, Box3B, Box4A, Box4B :16×8=128 位表示可以开的输出
Status 状态 1 有效卡
EndDate 终止日期 备用
门禁动态库接口说明
数据类型
TIndefityType = (is_Card,is_PIN,is_CardPIN,is_DCard,is_Free); 开门时鉴别方式
EventType 见数据库表 TEventType
工作流程说明:
1 软件打开后必须执行 setAddress 函数,给控制器编码,设置地址。
2 其它的所有函数使用地址编码和控制器通信。
3 如果 GetStatus 执行不成功,那么就要 setAddress,以确认控制器在线。
4 取记录过程中的任何错误,都要重新执行 GetStatus,重新来过。
5 如果取刷卡记录错误,不可以不执行 GetStatus,去执行取报警记录;同样,必须先执行 GetStatus 才能取报警记录。
While(true){
// 取刷卡记录
GetStatus(Net,Address,ControlType,ControlStatus,DoorStatus,Ver,HasCardEvent,HasAlarmEvent,HasCardStatus)
{
EventIndex = 1;AlarmIndex=1;ReturnIndex=1; HasOtherEvent = true;
If(HasCardEvent) // 有刷卡事件 循环取事件
{
While (HasOtherEvent)
{
// 继续取记录
If (GetCardEvent(Address,EventIndex,EventIndexReturn, CardNo,EventTime,Door,EventType,HasOtherEvent))
{
// 开始取记录
If ((indexEvent = ReturnIndex)and(indexEvent=1)) or (indexEvent=ReturnIndex+1))
{
EventIndex ++
// do something // 处理记录
//无记录或错 或者返回错误就跳出循环
((indexEvent = $FE) or (not HasOtherEvent)) // 记录取完了 或者达到最大值
GetCardEvent(Address,0, ReturnIndex, CardNo,EventTime,Door,EventType,HasOtherEvent);
Break;
if
{
}
break;
//无记录或错 或者返回错误就跳出循环
} else
{
}
} else break;
} // while
} // 有刷卡记录
} // 取刷卡记录结束
//取报警记录
GetStatus(Net,Address,ControlType,ControlStatus,DoorStatus,Ver,HasCardEvent,HasAlarmEvent,HasCardStatus)
{
门禁动态库接口说明
AlarmIndex=1;ReturnIndex=1; HasOtherAlarm = true;
If(HasAlarmEvent) // 有报警事件 循环取事件
{
While (HasOtherAlarm)
{
// 继续取记录
If (GetAlarmEvent(Address,AlarmIndex,ReturnIndex,AlarmTime,AlarmType,Door,HasOtherAlarm))
{
// 开始取记录
If ((AlarmIndex = ReturnIndex)and(AlarmIndex =1)) or (AlarmIndex =ReturnIndex+1))
{
AlarmIndex ++
// do something // 处理记录
//无记录或错 或者返回错误就跳出循环
if
{
((AlarmIndex = $FE) or (not HasOtherAlarm)) // 记录取完了 或者达到最大值
GetAlarmEvent(Address,0,ReturnIndex,AlarmTime,AlarmType,Door,HasOtherAlarm);
Break;
}
break;
//无记录或错 或者返回错误就跳出循环
} else
{
}
} else break;
} // while
} //有记录
} // 取报警记录结束
// 取卡状态记录
GetStatus(Net,Address,ControlType,ControlStatus,DoorStatus,Ver,HasCardEvent,HasAlarmEvent,HasCardStatus)
{
StatusIndex=1;ReturnIndex=1; HasOtherStatus = true;
If(HasCardStatus)
{
// 有卡状态事件
While (HasOtherStatus)
{
// 继续取记录
If (GetCardStatus(Address,AlarmIndex,ReturnIndex,vEmployeeID,vStatus, HasOtherStatus))
{
// 开始取记录
If ((StatusIndex = ReturnIndex)and(StatusIndex =1)) or (StatusIndex =ReturnIndex+1))
{
StatusIndex ++