重拍重新获取句柄

联合利华-拍照
LAPTOP-S9HJSOEB\昊天 3 months ago
parent 41157d116c
commit e55f318c79

@ -437,28 +437,54 @@ public class ImageCaptureService {
return false; return false;
} }
// 获取相机句柄
Handle hCamera = handleMap.get(ip);
if (hCamera == null) {
log.warn("相机 {} 句柄为空,尝试自动初始化...", ip);
if (!ensureCameraInitialized(ip)) {
log.error("相机 {} 自动初始化失败,无法拍照", ip);
return false;
}
hCamera = handleMap.get(ip);
if (hCamera == null) {
log.error("相机 {} 自动初始化后仍无法获取句柄", ip);
return false;
}
log.info("相机 {} 自动初始化成功", ip);
}
log.info("开始拍照,相机: {}, 保存路径: {}, 最大重试: {} 次", ip, savePath, maxRetries); log.info("开始拍照,相机: {}, 保存路径: {}, 最大重试: {} 次", ip, savePath, maxRetries);
int attempt = 0; int attempt = 0;
int lastErrorCode = 0; int lastErrorCode = 0;
while (attempt < maxRetries) { while (attempt < maxRetries) {
// 获取相机句柄
Handle hCamera = handleMap.get(ip);
if (hCamera == null) {
log.warn("相机 {} 句柄为空,尝试自动初始化...", ip);
if (!ensureCameraInitialized(ip)) {
log.error("相机 {} 自动初始化失败,无法拍照", ip);
return false;
}
hCamera = handleMap.get(ip);
if (hCamera == null) {
log.error("相机 {} 自动初始化后仍无法获取句柄", ip);
return false;
}
log.info("相机 {} 自动初始化成功", ip);
} else {
// 句柄不为空时,检查句柄是否仍然有效
if (!isHandleValid(hCamera)) {
log.warn("相机 {} 句柄已失效,移除旧句柄并重新初始化...", ip);
// 清理失效句柄
try {
MvCameraControl.MV_CC_CloseDevice(hCamera);
MvCameraControl.MV_CC_DestroyHandle(hCamera);
} catch (Exception e) {
log.warn("清理失效句柄时发生异常", e);
}
handleMap.remove(ip);
// 重新初始化
if (!ensureCameraInitialized(ip)) {
log.error("相机 {} 重新初始化失败,无法拍照", ip);
return false;
}
hCamera = handleMap.get(ip);
if (hCamera == null) {
log.error("相机 {} 重新初始化后仍无法获取句柄", ip);
return false;
}
log.info("相机 {} 重新初始化成功", ip);
}
}
attempt++; attempt++;
try { try {
// 获取PayloadSize // 获取PayloadSize
@ -572,6 +598,28 @@ public class ImageCaptureService {
} }
} }
/**
* 检查相机句柄是否有效(设备是否仍然连接)
* @param hCamera 相机句柄
* @return 是否有效
*/
private boolean isHandleValid(Handle hCamera) {
if (hCamera == null) {
return false;
}
try {
boolean nRet = MvCameraControl.MV_CC_IsDeviceConnected(hCamera);
if (nRet) {
return true;
}
log.warn("相机设备连接检查失败,errcode");
return false;
} catch (Exception e) {
log.warn("检查句柄有效性时发生异常", e);
return false;
}
}
/** /**
* 查找相机索引 * 查找相机索引
* @param stDeviceList 设备列表 * @param stDeviceList 设备列表

Loading…
Cancel
Save