From 55bef5adf9be388376c3029343083df224566c27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?LAPTOP-S9HJSOEB=5C=E6=98=8A=E5=A4=A9?= Date: Wed, 6 Sep 2023 15:54:28 +0800 Subject: [PATCH] =?UTF-8?q?=E7=9B=B8=E6=9C=BA=E5=9E=82=E7=9B=B4=E6=96=B9?= =?UTF-8?q?=E5=90=91=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/lib/CameraControlModule.java | 4 ++ .../com/zhehekeji/web/lib/hik/HCNetSDK.java | 6 +++ .../lib/hik/HikCameraControlModuleImpl.java | 39 +++++++++++++++++ .../JoywareCameraControlModuleImpl.java | 8 ++++ .../web/pojo/camera/CameraPtzPojo.java | 12 ++++++ .../com/zhehekeji/web/service/PlcService.java | 42 +++++++++++++++++++ .../zhehekeji/web/service/client/Decoder.java | 4 +- .../web/service/putian/PTDecoder.java | 4 +- web/src/main/resources/application-test.yml | 2 +- 9 files changed, 118 insertions(+), 3 deletions(-) create mode 100644 web/src/main/java/com/zhehekeji/web/pojo/camera/CameraPtzPojo.java diff --git a/web/src/main/java/com/zhehekeji/web/lib/CameraControlModule.java b/web/src/main/java/com/zhehekeji/web/lib/CameraControlModule.java index 7c124a3..c2d7827 100644 --- a/web/src/main/java/com/zhehekeji/web/lib/CameraControlModule.java +++ b/web/src/main/java/com/zhehekeji/web/lib/CameraControlModule.java @@ -1,5 +1,7 @@ package com.zhehekeji.web.lib; +import com.zhehekeji.web.pojo.camera.CameraPtzPojo; + import java.time.LocalDateTime; public interface CameraControlModule { @@ -27,6 +29,8 @@ public interface CameraControlModule { boolean ptzControlLeftEnd(Integer cameraId, int nChannelID); + CameraPtzPojo ptzGetDVRConfig(Integer cameraId); + /** * 向右 */ diff --git a/web/src/main/java/com/zhehekeji/web/lib/hik/HCNetSDK.java b/web/src/main/java/com/zhehekeji/web/lib/hik/HCNetSDK.java index 9e2e61f..4024198 100644 --- a/web/src/main/java/com/zhehekeji/web/lib/hik/HCNetSDK.java +++ b/web/src/main/java/com/zhehekeji/web/lib/hik/HCNetSDK.java @@ -3134,6 +3134,12 @@ DVR实现巡航数据结构 public short wPanPos;//水平参数 public short wTiltPos;//垂直参数 public short wZoomPos;//变倍参数 + + @Override + protected List getFieldOrder() { + // TODO Auto-generated method stub + return Arrays.asList("wAction","wPanPos","wTiltPos","wZoomPos"); //这里参数顺序和SDK开发包的C++定义必须完全一致 + } } //球机范围信息 diff --git a/web/src/main/java/com/zhehekeji/web/lib/hik/HikCameraControlModuleImpl.java b/web/src/main/java/com/zhehekeji/web/lib/hik/HikCameraControlModuleImpl.java index be362c7..f991a80 100644 --- a/web/src/main/java/com/zhehekeji/web/lib/hik/HikCameraControlModuleImpl.java +++ b/web/src/main/java/com/zhehekeji/web/lib/hik/HikCameraControlModuleImpl.java @@ -1,12 +1,15 @@ package com.zhehekeji.web.lib.hik; import com.sun.jna.NativeLong; +import com.sun.jna.Pointer; import com.sun.jna.ptr.IntByReference; import com.zhehekeji.common.util.PathUtil; import com.zhehekeji.core.util.Assert; +import com.zhehekeji.web.entity.Camera; import com.zhehekeji.web.lib.CameraConnMap; import com.zhehekeji.web.lib.CameraControlModule; import com.zhehekeji.web.lib.joyware.NetSDKLib; +import com.zhehekeji.web.pojo.camera.CameraPtzPojo; import lombok.extern.slf4j.Slf4j; import java.io.*; @@ -18,6 +21,8 @@ import java.util.ArrayList; import java.util.List; import java.util.Timer; +import static com.zhehekeji.web.lib.hik.HCNetSDK.NET_DVR_GET_PTZPOS; + /** * 云台控制接口实现 * 主要有 :八个方向控制、变倍、变焦、光圈功能 @@ -76,6 +81,40 @@ public class HikCameraControlModuleImpl implements CameraControlModule { int lUserId = CameraConnMap.getConnId(cameraId).intValue(); return HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.PAN_LEFT, 1); } + + @Override + public CameraPtzPojo ptzGetDVRConfig(Integer lUserID) { + + CameraPtzPojo cameraPtzPojo = new CameraPtzPojo(); + int lUserId = CameraConnMap.getConnId(lUserID).intValue(); + HCNetSDK.NET_DVR_PTZPOS netDvrPtzpos = new HCNetSDK.NET_DVR_PTZPOS(); + Pointer pointer = netDvrPtzpos.getPointer(); + IntByReference intByReference = new IntByReference(1); + boolean b_GetPTZ = HikLoginModuleImpl.hcNetsdk.NET_DVR_GetDVRConfig(lUserId, NET_DVR_GET_PTZPOS,1,pointer,netDvrPtzpos.size(),intByReference); + if (b_GetPTZ == false) { + System.out.println("获取PTZ坐标信息失败,错误码:" +HikLoginModuleImpl.hcNetsdk.NET_DVR_GetLastError()); + cameraPtzPojo.setGetSuccess(false); + }else { + + cameraPtzPojo.setGetSuccess(true); + netDvrPtzpos.read(); + cameraPtzPojo.setWPanPos(hexToDegree(netDvrPtzpos.wPanPos)); + cameraPtzPojo.setWTiltPos(hexToDegree(netDvrPtzpos.wTiltPos)); + cameraPtzPojo.setWZoomPos(hexToDegree(netDvrPtzpos.wZoomPos)); + } + return cameraPtzPojo; + } + static double hexToDegree(short hex) { + String value = Integer.toHexString(hex); + Integer v = Integer.parseInt(value); + int integerPart = v / 10; + int decimalPart = v % 10; + return integerPart + decimalPart / 10.0; + } + + public static void main(String[] args) { + hexToDegree((short)10322); + } /** * 向右 */ diff --git a/web/src/main/java/com/zhehekeji/web/lib/joyware/JoywareCameraControlModuleImpl.java b/web/src/main/java/com/zhehekeji/web/lib/joyware/JoywareCameraControlModuleImpl.java index 76c36c9..1002cb8 100644 --- a/web/src/main/java/com/zhehekeji/web/lib/joyware/JoywareCameraControlModuleImpl.java +++ b/web/src/main/java/com/zhehekeji/web/lib/joyware/JoywareCameraControlModuleImpl.java @@ -5,6 +5,7 @@ import com.zhehekeji.common.util.PathUtil; import com.zhehekeji.core.util.Assert; import com.zhehekeji.web.lib.CameraConnMap; import com.zhehekeji.web.lib.CameraControlModule; +import com.zhehekeji.web.pojo.camera.CameraPtzPojo; import lombok.extern.slf4j.Slf4j; import java.time.LocalDateTime; @@ -76,6 +77,13 @@ public class JoywareCameraControlModuleImpl implements CameraControlModule { 0, 0, 0, 1); } + + //暂未开发 + @Override + public CameraPtzPojo ptzGetDVRConfig(Integer lUserID) { + return null; + } + /** * 向右 */ diff --git a/web/src/main/java/com/zhehekeji/web/pojo/camera/CameraPtzPojo.java b/web/src/main/java/com/zhehekeji/web/pojo/camera/CameraPtzPojo.java new file mode 100644 index 0000000..b1edb14 --- /dev/null +++ b/web/src/main/java/com/zhehekeji/web/pojo/camera/CameraPtzPojo.java @@ -0,0 +1,12 @@ +package com.zhehekeji.web.pojo.camera; + +import lombok.Data; + +@Data +public class CameraPtzPojo { + short wAction;//获取时该字段无效 + double wPanPos;//水平参数 + double wTiltPos;//垂直参数 + double wZoomPos;//变倍参数 + boolean getSuccess; +} diff --git a/web/src/main/java/com/zhehekeji/web/service/PlcService.java b/web/src/main/java/com/zhehekeji/web/service/PlcService.java index 31e731f..73bae19 100644 --- a/web/src/main/java/com/zhehekeji/web/service/PlcService.java +++ b/web/src/main/java/com/zhehekeji/web/service/PlcService.java @@ -2,11 +2,13 @@ package com.zhehekeji.web.service; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.zhehekeji.common.util.PathUtil; +import com.zhehekeji.core.pojo.Result; import com.zhehekeji.web.config.ConfigProperties; import com.zhehekeji.web.entity.*; import com.zhehekeji.web.lib.*; import com.zhehekeji.web.mapper.*; import com.zhehekeji.web.pojo.OrderVO; +import com.zhehekeji.web.pojo.camera.CameraPtzPojo; import com.zhehekeji.web.service.RFID.RFIDMap; import com.zhehekeji.web.service.RFID.RFIDSocket; import com.zhehekeji.web.service.client.ECResultMessage; @@ -112,6 +114,46 @@ public class PlcService { public void orderStopByWarn(String orderNum) { } + public void verticalAdjustment(Integer cameraId){ + log.info("球机"+cameraId+"重置垂直方向开始"); + Double origin = null; + int i = 10 ; + while (i >=0){ + i-- ; + CameraPtzPojo cameraPtzPojo = cameraControlModule.ptzGetDVRConfig(cameraId); + if(cameraPtzPojo.isGetSuccess()) { + cameraControlModule.ptzControlDownStart(cameraId, 0, 0, 1); + log.info("球机控制向下"); + System.out.println("获取的垂直位置"+cameraPtzPojo.getWTiltPos()); + if (origin == null) { + origin = cameraPtzPojo.getWTiltPos(); + } else if (cameraPtzPojo.getWTiltPos() <= origin) { + break; + } + } + try { + Thread.sleep(500); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + log.info("球机"+cameraId+"重置垂直方向成功"); + cameraControlModule.ptzControlDownEnd(cameraId,0); + gyrateCameraByCode(cameraId,"C1"); + } + + + public void verticalAdjustmentByStreet(String SRMNumber){ + + Street street = streetService.getStreetByPlcId(SRMNumber); + //南京烟草物流只有一个相机 + Integer cameraId = street.getCamera1Id() == null ? street.getCamera2Id():street.getCamera1Id(); + verticalAdjustment(cameraId); + } + + + + public String cameraVideo(Integer cameraId, LocalDateTime startTime, LocalDateTime endTime) { String path = PathUtil.createFileName("mp4",cameraId); diff --git a/web/src/main/java/com/zhehekeji/web/service/client/Decoder.java b/web/src/main/java/com/zhehekeji/web/service/client/Decoder.java index a6a44fc..f3555ad 100644 --- a/web/src/main/java/com/zhehekeji/web/service/client/Decoder.java +++ b/web/src/main/java/com/zhehekeji/web/service/client/Decoder.java @@ -164,6 +164,8 @@ public class Decoder extends DelimiterBasedFrameDecoder { // } String picPath = plcService.IntoStockOver(srmNumber, ptOrderContent.getTaskNo(), ptOrderContent.getGoodsLocation()); PTData resData = PTData.IntoStock04(ptOrderContent.getSRMNUmber(), ptOrderContent.getTaskNo(), ptOrderContent.getGoodsLocation(), picPath, ptOrderContent.getGoodsLocation()); + //重置相机水平方向 + plcService.verticalAdjustmentByStreet( ptOrderContent.getSRMNUmber()); PuTianNettyClient.write(resData); } } @@ -225,7 +227,7 @@ public class Decoder extends DelimiterBasedFrameDecoder { StringBuffer strBffPic = new StringBuffer(ecResultMessage.getSRMNumber()); strBffPic.append(",").append(ecResultMessage.getTaskId()).append(",").append(EmptyCheckPic.getShelfCodeEntityConverter(emptyCheckPics,webPicPath)); PTData ptDataEmptyCheck04 = new PTData(strBffPic.toString(), PTData.FLOW_R, PTData.EMPTY_CHECK_04); - PuTianNettyClient.write(ptDataEmptyCheck04); + PuTianNettyClient.write(ptDataEmptyCheck04); } //保存空货位条码 // EmptyCheckCodeInfo.addCode(ecTransmission.getSRMNumber(),ecTransmission.getRow(),ecTransmission.getStartColumn(), ecTransmission.getEndColumn(), ecTransmission.getOriginCode()); diff --git a/web/src/main/java/com/zhehekeji/web/service/putian/PTDecoder.java b/web/src/main/java/com/zhehekeji/web/service/putian/PTDecoder.java index 36aa25d..696d847 100644 --- a/web/src/main/java/com/zhehekeji/web/service/putian/PTDecoder.java +++ b/web/src/main/java/com/zhehekeji/web/service/putian/PTDecoder.java @@ -155,7 +155,8 @@ public class PTDecoder extends LineBasedFrameDecoder { log.info("入库完成拍照"); PTOrderContent ptOrderContent = PTOrderContent.OrderContentIS01And03(ptData.getContent()); String picPath = plcService.IntoStockOver(ptOrderContent.getSRMNUmber(), ptOrderContent.getTaskNo(), ptOrderContent.getGoodsLocation()); -// + //重置相机水平方向 + plcService.verticalAdjustmentByStreet( ptOrderContent.getSRMNUmber()); // //向客户端发送读码指令,等待客户端返回条码 // ISTransmission isTransmission = new ISTransmission(ptOrderContent.getSRMNUmber(), ptOrderContent.getTaskNo(), ptOrderContent.getGoodsLocation()); // //为防万一,先清除code @@ -175,6 +176,7 @@ public class PTDecoder extends LineBasedFrameDecoder { // PTData resData = PTData.IntoStock04(ptOrderContent.getSRMNUmber(), ptOrderContent.getTaskNo(), ptOrderContent.getGoodsLocation(),picPath,code); // PuTianNettyClient.write(resData); } + } } } diff --git a/web/src/main/resources/application-test.yml b/web/src/main/resources/application-test.yml index 46076f3..5980b90 100644 --- a/web/src/main/resources/application-test.yml +++ b/web/src/main/resources/application-test.yml @@ -31,7 +31,7 @@ userUrl: http://115.236.65.98:11001 # ----默认摄像头的连接信息 cameraConfig: # ------------球機選擇--- 0:利珀 1:海康 - cameraType: 0 + cameraType: 1 cameraPassword: a1234567 cameraUser: admin cameraPort: 8000