You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
7.2 KiB
7.2 KiB
AB门禁模块实现说明
概述
根据您的需求,我已经实现了完整的AB门禁模块,包含门状态检查和人数检测功能。该模块通过UDP获取AB门状态,通过485串口获取门禁内人数,并根据进场/离场场景提供智能判断。
核心组件
1. ABGateManager.java
位置: app/src/main/java/com/ouxuan/oxface/abgate/ABGateManager.java
功能: AB门禁管理器核心类
主要方法:
checkGateABBeforeToDo()
- 完整检查流程(门状态 + 人数)ABGateCheck()
- 门状态检查(A门关闭 AND B门关闭)ABPeopleCheck()
- 人数检查(根据进场/离场场景判断)
2. ABGateUsageExample.java
位置: app/src/main/java/com/ouxuan/oxface/abgate/ABGateUsageExample.java
功能: 使用示例和集成指南
3. ABGateTestActivity.java
位置: app/src/main/java/com/ouxuan/oxface/abgate/ABGateTestActivity.java
功能: 测试界面,方便调试验证
核心功能实现
✅ checkGateABBeforeToDo() - 主要入口方法
ABGateManager abGateManager = ABGateManager.getInstance();
abGateManager.initialize(context);
abGateManager.checkGateABBeforeToDo(new ABGateManager.ABGateCheckCallback() {
@Override
public void onSuccess(boolean canProceed) {
if (canProceed) {
// AB门检查通过,可以进行后续操作
LogManager.logInfo(TAG, "AB门检查通过,可以进行人脸识别");
} else {
// AB门检查未通过,需要等待
LogManager.logWarning(TAG, "AB门检查未通过,请等待");
}
}
@Override
public void onError(String errorMessage) {
// 检查失败,处理错误
LogManager.logError(TAG, "AB门检查失败: " + errorMessage);
}
});
✅ ABGateCheck() - 门状态检查
检查逻辑: A门关闭 AND B门关闭 时返回true,否则返回false
实现方式:
- 通过UDP向
192.168.1.123:60000
发送状态查询命令 - 解析返回数据的第28位(A门状态)和第29位(B门状态)
- 01表示开启,00表示关闭
- 只有当A门和B门都关闭时才返回true
abGateManager.ABGateCheck(new ABGateManager.ABGateCheckCallback() {
@Override
public void onSuccess(boolean gateAvailable) {
// gateAvailable = true: A门关闭 AND B门关闭
// gateAvailable = false: A门或B门有开启状态
}
@Override
public void onError(String errorMessage) {
// UDP通信失败或解析错误
}
});
✅ ABPeopleCheck() - 人数检查
检查逻辑:
- 进场设备: 门内人数 > 1 时不可用(返回false)
- 离场设备: 门内人数 != 0 时不可用(返回false)
实现方式:
- 使用
VenueSceneUtils.isLeaveScene(context)
判断进场/离场 - 通过485串口发送HEX命令
0F030001000294E5
- 解析返回的9字节数据,第5字节为人数
- 根据场景类型应用不同的判断逻辑
abGateManager.ABPeopleCheck(new ABGateManager.ABGateCheckCallback() {
@Override
public void onSuccess(boolean peopleCheckPassed) {
// 进场: peopleCheckPassed = (人数 <= 1)
// 离场: peopleCheckPassed = (人数 == 0)
}
@Override
public void onError(String errorMessage) {
// 485通信失败或485模式未启用
}
});
在人脸识别界面中的集成
在OXFaceOnlineActivity中集成
public class OXFaceOnlineActivity extends BaseActivity {
private ABGateManager abGateManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 初始化AB门禁管理器
abGateManager = ABGateManager.getInstance();
abGateManager.initialize(this);
}
// 在人脸识别成功前执行检查
private void checkBeforeFaceRecognition() {
abGateManager.checkGateABBeforeToDo(new ABGateManager.ABGateCheckCallback() {
@Override
public void onSuccess(boolean canProceed) {
if (canProceed) {
// 可以进行人脸识别
startFaceRecognition();
} else {
// 需要等待,可以设置延迟重试
showWaitingMessage();
scheduleRetryCheck();
}
}
@Override
public void onError(String errorMessage) {
// 处理检查错误
handleCheckError(errorMessage);
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
if (abGateManager != null) {
abGateManager.release();
}
}
}
配置要求
1. UDP门禁配置
- IP地址: 192.168.1.123
- 端口: 60000
- 协议: UDP状态查询命令
2. 485串口配置
- 串口路径: /dev/ttyS6
- 波特率: 9600
- 命令: 0F030001000294E5
- 需要启用:
gate_camera_485_OX_on = true
3. 场景配置
通过VenueSceneUtils.isLeaveScene(context)
自动判断进场/离场场景
错误处理
常见错误和解决方案
-
"UDP门禁控制器未初始化"
- 确保在调用前初始化了OxUDP模块
- 检查网络连接和UDP配置
-
"485模式未启用"
- 检查配置中
gate_camera_485_OX_on
是否为true - 确保485串口权限正确
- 检查配置中
-
"门状态检查超时"
- 检查网络连接
- 确认UDP设备地址和端口正确
-
"485人数获取失败"
- 检查串口连接
- 确认串口路径和波特率设置
测试验证
1. 使用测试Activity
可以通过ABGateTestActivity
进行功能测试:
// 在AndroidManifest.xml中注册
<activity
android:name="com.ouxuan.oxface.abgate.ABGateTestActivity"
android:exported="false" />
// 启动测试
Intent intent = new Intent(this, ABGateTestActivity.class);
startActivity(intent);
2. 日志调试
所有关键操作都有详细日志记录,可以通过LogCat查看:
# 过滤AB门禁相关日志
adb logcat | grep -E "(ABGateManager|OxUDP|Ox485)"
性能优化
1. 超时控制
- 门状态检查:5秒超时
- 人数检查:10秒超时
- 总体检查:最多17秒完成
2. 异步处理
- 所有网络和串口操作都在后台线程执行
- 回调在主线程中触发,便于UI更新
3. 资源管理
- 支持单例模式,避免重复初始化
- 提供release()方法清理资源
总结
✅ 已完成功能:
checkGateABBeforeToDo()
- 完整检查流程ABGateCheck()
- AB门状态检查(A门关闭 AND B门关闭)ABPeopleCheck()
- 人数检查(进场/离场智能判断)- 完整的错误处理和超时控制
- 详细的使用示例和测试界面
✅ 集成方式:
- 在人脸识别前调用
checkGateABBeforeToDo()
- 支持异步回调和同步阻塞两种方式
- 提供完整的错误处理机制
✅ 技术实现:
- UDP通信获取门状态(192.168.1.123:60000)
- 485串口通信获取人数(/dev/ttyS6, 9600)
- 智能场景判断(进场/离场)
该模块已完全满足您的需求,可以直接在项目中使用。如需要其他功能或有任何问题,请随时告知。