当前位置: 首页 > news >正文

海康SDK控制海康摄像仪报警输入节点

一、查看摄像仪是否支持报警输出节点控制

1.1登录海康摄像仪平台界面-->报警配置

-->报警输出

--报警状态

说明该摄像仪支持节点控制

二、下载海康sdk(官网地址)

2.1获取设备报警输出。

主要用到NET DVR GetAlarmOut V30方法,返回的是bool值。

2.2代码示例:

public static void getAlarmOutStatus(int iUserID, int alarmOutIndex, HCNetSDK.NET_DVR_ALARMOUTCFG_V30 cfg) { HCNetSDK.NET_DVR_ALARMOUTSTATUS status = new HCNetSDK.NET_DVR_ALARMOUTSTATUS(); status.write(); boolean ret = hCNetSDK.NET_DVR_GetAlarmOut(iUserID, status); if (!ret) { System.out.println("获取报警输出状态失败,错误码:" + hCNetSDK.NET_DVR_GetLastError()); return; } status.read(); byte rawStatus = status.Output[alarmOutIndex]; System.out.println("报警输出口[" + alarmOutIndex + "] 原始状态:" + rawStatus); if (openAlarmOut(iUserID, alarmOutIndex)) { try { Thread.sleep(5 * 1000L); } catch (InterruptedException ignored) {} closeAlarmOut(iUserID, alarmOutIndex); } // ====== 结合常开 / 常闭判断“真实逻辑状态” ====== //if (cfg.byNormalSatus == 0) { // // 常开(NO) // if (rawStatus == 1) { // System.out.println("报警输出:已触发(NO 闭合)"); // closeAlarmOut(iUserID, alarmOutIndex); // } else { // System.out.println("报警输出:未触发(NO 断开)"); // openAlarmOut(iUserID, alarmOutIndex); // } //} else { // // 常闭(NC) // if (rawStatus == 0) { // System.out.println("报警输出:已触发(NC 断开)"); // openAlarmOut(iUserID, alarmOutIndex); // } else { // System.out.println("报警输出:未触发(NC 闭合)"); // } //} }

2.2调用该方法,首先要登录

public static void main(String[] args) throws IOException, InterruptedException { if (hCNetSDK == null) { System.out.println("init sdk"); if (!createSDKInstance()) { System.out.println("Load SDK fail"); return; } } //linux系统建议调用以下接口加载组件库 if (osSelect.isLinux()) { HCNetSDK.BYTE_ARRAY ptrByteArray1 = new HCNetSDK.BYTE_ARRAY(256); HCNetSDK.BYTE_ARRAY ptrByteArray2 = new HCNetSDK.BYTE_ARRAY(256); //这里是库的绝对路径,请根据实际情况修改,注意改路径必须有访问权限 String strPath1 = System.getProperty("user.dir") + "/lib/libcrypto.so.1.1"; String strPath2 = System.getProperty("user.dir") + "/lib/libssl.so.1.1"; System.arraycopy(strPath1.getBytes(), 0, ptrByteArray1.byValue, 0, strPath1.length()); ptrByteArray1.write(); hCNetSDK.NET_DVR_SetSDKInitCfg(HCNetSDK.NET_SDK_INIT_CFG_LIBEAY_PATH, ptrByteArray1.getPointer()); System.arraycopy(strPath2.getBytes(), 0, ptrByteArray2.byValue, 0, strPath2.length()); ptrByteArray2.write(); hCNetSDK.NET_DVR_SetSDKInitCfg(HCNetSDK.NET_SDK_INIT_CFG_SSLEAY_PATH, ptrByteArray2.getPointer()); String strPathCom = System.getProperty("user.dir") + "/lib/"; HCNetSDK.NET_DVR_LOCAL_SDK_PATH struComPath = new HCNetSDK.NET_DVR_LOCAL_SDK_PATH(); System.arraycopy(strPathCom.getBytes(), 0, struComPath.sPath, 0, strPathCom.length()); struComPath.write(); hCNetSDK.NET_DVR_SetSDKInitCfg(HCNetSDK.NET_SDK_INIT_CFG_SDK_PATH, struComPath.getPointer()); } //SDK初始化,一个程序进程只需要调用一次 hCNetSDK.NET_DVR_Init(); if (fExceptionCallBack == null) { fExceptionCallBack = new FExceptionCallBack_Imp(); } Pointer pUser = null; if (!hCNetSDK.NET_DVR_SetExceptionCallBack_V30(0, 0, fExceptionCallBack, pUser)) { return; } System.out.println("设置异常消息回调成功"); //启用SDK写日志 hCNetSDK.NET_DVR_SetLogToFile(3, "./sdkLog", false); //登录设备,每一台设备只需要登录一次 lUserID = TestDemo.loginDevice("192.168.10.61", (short) 8000, "admin", "htdq0557"); for (boolean exit = false; !exit; ) { System.out.println("请输入您想要执行的demo实例! (退出请输入yes)"); Scanner input = new Scanner(System.in); String str = input.next(); // 转换为标准输入 str = str.toLowerCase(); if (str.equals("yes")) { // 退出程序 exit = true; break; } switch (str) { case "1": { int alarmOutIndex = 0; // 第 1 路报警输出 HCNetSDK.NET_DVR_ALARMOUTCFG_V30 cfg = new HCNetSDK.NET_DVR_ALARMOUTCFG_V30(); cfg.dwSize = cfg.size(); cfg.write(); //日志查找 System.out.println("\n报警状态输出信息"); SdkSysCfg.getAlarmOutStatus(lUserID, alarmOutIndex, cfg); break; } default: { System.out.println("\n未知的指令操作!请重新输入!\n"); } } } Thread.sleep(2000); //程序退出的时候调用注销登录接口,每一台设备分别调用一次 if (hCNetSDK.NET_DVR_Logout(lUserID)) { System.out.println("注销成功"); } //释放SDK资源,程序退出时调用,只需要调用一次 hCNetSDK.NET_DVR_Cleanup(); return; }

三、调用完成

调用完成之后就可以根据业务需求去控制节点输出。发送脉冲信号

san NET_DVR_GetAlarmOut_V30
NET_DVR_GetAlarmOut_V
NET_DVR_GetAlarmOut_V30
http://www.cnnetsun.cn/news/114838.html

相关文章:

  • DVWA -SQL Injection-通关教程-完结
  • AI大模型:未来就业的吞噬者还是创造者?揭秘其对普通人工作的影响!
  • 0x3f第七天 二叉搜索树
  • 扩容U盘,资料毁灭盘
  • 数据结构学习篇(5)---顺序表和链表的区别
  • 基于Vue.js和Spring Boot的新能源汽车充电站管理系统的设计与实现文献综述
  • 【Matlab】代码库:RGB三通道图像←互转→RGB次序平铺二维
  • 使用 html2canvas + jsPDF 生成PDF 的简单示例(含文字下沉修复)
  • Vue3+Monaco Editor封装及SQL编辑器实现
  • MiniCPM-V 4.5
  • Flutter工程化与协作实践指南
  • Excel技巧:提取身份证号码中的出生年月日
  • 软工毕业设计创新的开题分享
  • Oracle数据库物理备份与恢复实战指南
  • 告别“养死”魔咒!AI+知识库+物联网,打造零失败智能种植系统(附架构图+实操指南)
  • 安卓基础之《(4)—Activity组件(2)》
  • 打破数据堵点:6 大主流CRM厂商全链路数据流转能力横评与选型指南
  • 小程序毕设项目:基于springboot+微信小程序的校园活动管理系统设计与实现(源码+文档,讲解、 调试运行,定制等)
  • 小程序毕设项目:基于springboot+微信小程序的DIY电脑推荐与交流平台(源码+文档,讲解、 调试运行,定制等)
  • 小程序毕设项目:基于springboot+微信小程序的在线复习小程序(源码+文档,讲解、 调试运行,定制等)
  • 安徽做SCARA机器人的公司有哪些?
  • 【JavaWeb】MVC模式_理论简介
  • 【JavaWeb】日程管理01——登录页及数据校验功能
  • springboot中File默认路径
  • 【2025年AI 编程时代的热点】
  • 【C++ 笔记】从 C 到 C++:核心过渡 (中)
  • SQL约束解析
  • 地铁调研12-17
  • 现代软件测试工具全景对比与选型指南
  • 基于 Apache POI 的体检报告 Word 生成实战文档