From 579a15e1bd9c089aee5ccede924d19492ad223de Mon Sep 17 00:00:00 2001 From: weidong Date: Mon, 25 Nov 2024 15:14:25 +0800 Subject: [PATCH 1/6] =?UTF-8?q?1=E3=80=81=E4=BC=98=E5=8C=96DEBUG=E7=9A=84?= =?UTF-8?q?=E6=97=B6=E6=9C=BA=202=E3=80=81=E4=BC=98=E5=8C=96device.clear?= =?UTF-8?q?=E7=9A=84=E6=97=B6=E6=9C=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calc/SingleLineGNSSCalcService.java | 9 ++- .../executor/D331RtcmMessageExecutor.java | 59 ++++++++++--------- .../executor/D341LocationMessageExecutor.java | 44 +++++++------- .../D3F2StopIndicationMessageExecutor.java | 23 +++++--- .../com/imdroid/sideslope/sal/Device.java | 1 + .../beidou/task/DeviceStatusChecker.java | 4 +- 6 files changed, 77 insertions(+), 63 deletions(-) diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/calc/SingleLineGNSSCalcService.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/calc/SingleLineGNSSCalcService.java index 49e81bcf..b7a58a2a 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/calc/SingleLineGNSSCalcService.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/calc/SingleLineGNSSCalcService.java @@ -203,8 +203,6 @@ public class SingleLineGNSSCalcService implements GNSSDataCalcService { future = ThreadManager.getScheduledThreadPool().schedule(() -> { try { calCycleResult(device, groupCalc,date); - // 清除统计 - device.clearStat(); } catch (Exception e) { logger.error(e.toString()); } @@ -283,6 +281,13 @@ public class SingleLineGNSSCalcService implements GNSSDataCalcService { } } + //更新有效解时间 + if(locationRecord.getEnabled()){ + if(device.getLastValidCalcDataTime().isBefore(resultTime)){ + device.setLastValidCalcDataTime(resultTime); + } + } + // 记录本次位置,作为下次的参考 if(focusCalculator.getVer()==6) { if(locationRecord.getRpose()!=null) { diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D331RtcmMessageExecutor.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D331RtcmMessageExecutor.java index af6bcb5f..ed35df8a 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D331RtcmMessageExecutor.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D331RtcmMessageExecutor.java @@ -40,18 +40,11 @@ public class D331RtcmMessageExecutor implements Executor public Void execute(D331RtcmMessage message) { String id = message.getId(); // 补齐tenantId - Device device1 = deviceService.findByDeviceId(id); - if(device1 == null || device1.getOpMode() == GnssDevice.OP_MODE_UNUSE) return null; - - // 原始码流输出到日志文件 -- INFO 级别 - // 只有测站开了日志记录,或者消息来自基站,才将原码记录到日志文件 - if(device1.getLoggingmode() == GnssDevice.LOGGING_MODE_FULL || device1.getDeviceType() == GnssDevice.TYPE_REFERENCE_STATION){ - logger.info("receive {} d331 message: {}", message.getId(), DataTypeUtil.getHexString(message.getSrcData())); - logger.info("receive d331 rtcm message of device: {}, seq:{}, len:{}", message.getId(), message.getSeq(), message.getLen()); - } + Device deviceBs = deviceService.findByDeviceId(id); + if(deviceBs == null || deviceBs.getOpMode() == GnssDevice.OP_MODE_UNUSE) return null; // 推送基站数据 - if(device1.getOpMode() == GnssDevice.OP_MODE_USE) { + if(deviceBs.getOpMode() == GnssDevice.OP_MODE_USE) { byte[] forwardBytes = message.getSrcData(); // 要求快速转发,因此用缓存,不要每次都查数据库 List deviceList = deviceService.findByParentId(id); @@ -74,26 +67,26 @@ public class D331RtcmMessageExecutor implements Executor } // 如果30分钟内收到不到d3f0和d3f2,则根据UDP最后一个报文触发状态更新和统计 - LocalDateTime now = LocalDateTime.now(); - if(device1.getLastRxTime()!=null && - device1.getLastRxTime().isBefore(now.minusMinutes(1))){ - if(device1.getLastD3f0f2Time() == null || - device1.getLastD3f0f2Time().isBefore(now.minusMinutes(30))) { + if(deviceBs.getD3xxbytes()>0){ + LocalDateTime now = LocalDateTime.now(); + if(deviceBs.getLastRxTime().isBefore(now.minusMinutes(1)) && + (deviceBs.getLastD3f0f2Time() == null || + deviceBs.getLastD3f0f2Time().isBefore(now.minusMinutes(30)))) { // new cycle - logger.info("device {} rx {} d331 in a cycle while not d3f0f2",device1.getDeviceId(),device1.getD3xxCount()); + logger.info("device {} rx {} d331 in a cycle while not d3f0f2",deviceBs.getDeviceId(),deviceBs.getD3xxCount()); Device lastCycleDevice = new Device(); - lastCycleDevice.setDeviceId(device1.getDeviceId()); - lastCycleDevice.setTenantId(device1.getTenantId()); - lastCycleDevice.setD3xxbytes(device1.getD3xxbytes()); - lastCycleDevice.setD3xxCount(device1.getD3xxCount()); - lastCycleDevice.setLastRxTime(device1.getLastRxTime()); - lastCycleDevice.setSatelitesInUse(device1.getSatelitesInUse()); - device1.clearStat(); + lastCycleDevice.setDeviceId(deviceBs.getDeviceId()); + lastCycleDevice.setTenantId(deviceBs.getTenantId()); + lastCycleDevice.setD3xxbytes(deviceBs.getD3xxbytes()); + lastCycleDevice.setD3xxCount(deviceBs.getD3xxCount()); + lastCycleDevice.setLastRxTime(deviceBs.getLastRxTime()); + lastCycleDevice.setSatelitesInUse(deviceBs.getSatelitesInUse()); + deviceBs.clearStat(); ThreadManager.getFixedThreadPool().submit(() -> { // 通知上线 try { - beidouClient.onDeviceActive(device1.getDeviceId(), device1.getTenantId()); + beidouClient.onDeviceActive(deviceBs.getDeviceId(), deviceBs.getTenantId()); } catch (Exception e) { logger.error(e.toString()); } @@ -103,18 +96,26 @@ public class D331RtcmMessageExecutor implements Executor } // update trx - device1.updateRx(message.getHeader(),message.getLen(),message.getPacketNum()); + deviceBs.updateRx(message.getHeader(),message.getLen(),message.getPacketNum()); // update gga Gga gga = message.getGga(); if(gga != null) { - device1.updateSatelitesNum(gga.getSatellitesInUsed()); + deviceBs.updateSatelitesNum(gga.getSatellitesInUsed()); //if(gga.isFixed()) { //基站的quality不会是4 - device1.setLatitude(gga.getLatitude()); - device1.setLongitude(gga.getLongitude()); - device1.setAltitude(gga.getAltitude()); + deviceBs.setLatitude(gga.getLatitude()); + deviceBs.setLongitude(gga.getLongitude()); + deviceBs.setAltitude(gga.getAltitude()); //} } + ThreadManager.getFixedThreadPool().submit(() -> { + // 原始码流输出到日志文件 -- INFO 级别 + // 只有测站开了日志记录,或者消息来自基站,才将原码记录到日志文件 + if(deviceBs.getLoggingmode() == GnssDevice.LOGGING_MODE_FULL){ + logger.info("receive {} d331 message: {}", message.getId(), DataTypeUtil.getHexString(message.getSrcData())); + } + }); + return null; } diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D341LocationMessageExecutor.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D341LocationMessageExecutor.java index e60c0488..49ea89d9 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D341LocationMessageExecutor.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D341LocationMessageExecutor.java @@ -37,23 +37,16 @@ public class D341LocationMessageExecutor implements Executor0) { + LocalDateTime now = LocalDateTime.now(); + if (device.getLastRxTime().isBefore(now.minusMinutes(2)) && + (device.getLastD3f0f2Time() == null || + device.getLastD3f0f2Time().isBefore(now.minusMinutes(30)))) { // new cycle Device lastCycleDevice = new Device(); lastCycleDevice.setDeviceId(device.getDeviceId()); @@ -78,6 +71,7 @@ public class D341LocationMessageExecutor implements Executor { gnssCalcService.calcSingle(message,true); + // 原始码流输出到日志文件 -- INFO 级别 + if(device.getLoggingmode() == GnssDevice.LOGGING_MODE_FULL){ + logger.info("receive {} d341 message: {}", message.getId(), DataTypeUtil.getHexString(message.getSrcData())); + } + else { + Gga gga1 = message.getGga(); + if (gga1 != null && !gga1.isFixed()) { + // 若不是固定解,则打印原始码流到日志里 + logger.info("receive {} d341 message: {}", message.getId(), DataTypeUtil.getHexString(message.getSrcData())); + } + } }); return null; @@ -115,4 +113,8 @@ public class D341LocationMessageExecutor implements Executor getMessageType() { return D341LocationMessage.class; } + + void executeInThread(D341LocationMessage message){ + + } } diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D3F2StopIndicationMessageExecutor.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D3F2StopIndicationMessageExecutor.java index b5476ded..b65c9102 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D3F2StopIndicationMessageExecutor.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D3F2StopIndicationMessageExecutor.java @@ -67,8 +67,20 @@ public class D3F2StopIndicationMessageExecutor implements Executor { + // 开始周期解算 LocalDateTime uploadTime = multiLineGNSSCalcService.checkUploadTime( device.getDeviceId(), device.getTenantId()); + gnssCalcService.calSingleDone(device, null, message.getCreateTime()); + + // 检查告警 + if(device.getDeviceType() == Device.DEVICE_BASE_STATION) { + warningService.checkD3xxNum(device); + } + else{ + warningService.checkB562Num(device); + } + + // 保存统计 dataPersistService.saveDeviceTrxStat(message, (uploadTime!=null), device); // 保存缓存中的 GNSS 单次解析结果 @@ -87,15 +99,8 @@ public class D3F2StopIndicationMessageExecutor implements Executor warningCfgQueryWrapper = new QueryWrapper<>(); @@ -113,7 +113,7 @@ public class DeviceStatusChecker { WarningCfg warningCfg = warningCfgMapper.selectOne(warningCfgQueryWrapper); if(warningCfg == null) return; - // 获取所有n个小时内无固定解的测站 + // 获取所有warningCfg.getValue()个小时内无固定解的测站 LocalDateTime now = LocalDateTime.now(); LocalDateTime beginTime = now.minusHours(warningCfg.getValue()); QueryWrapper calcDataQueryWrapper = new QueryWrapper<>(); From bbff4754d3e9fbd96eaad34ca7cecfd3f60a1044 Mon Sep 17 00:00:00 2001 From: weidong Date: Mon, 25 Nov 2024 15:32:24 +0800 Subject: [PATCH 2/6] =?UTF-8?q?1=E3=80=81=E6=9A=82=E5=81=9Clog=E6=94=B6?= =?UTF-8?q?=E9=9B=86=202=E3=80=81=E5=A6=82=E6=9E=9C=E8=BF=9E=E7=BB=AD?= =?UTF-8?q?=E6=97=A0=E5=9B=BA=E5=AE=9A=E8=A7=A3=EF=BC=8C=E5=8F=91=E5=86=B7?= =?UTF-8?q?=E5=90=AF=E5=8A=A8=E6=8C=87=E4=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../executor/D341LocationMessageExecutor.java | 4 --- .../D3F0SelfCheckMessageExecutor.java | 31 ++++++++++++++++--- .../sideslope/service/WarningServiceImpl.java | 2 +- 3 files changed, 28 insertions(+), 9 deletions(-) diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D341LocationMessageExecutor.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D341LocationMessageExecutor.java index 49ea89d9..d32417fc 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D341LocationMessageExecutor.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D341LocationMessageExecutor.java @@ -113,8 +113,4 @@ public class D341LocationMessageExecutor implements Executor getMessageType() { return D341LocationMessage.class; } - - void executeInThread(D341LocationMessage message){ - - } } diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D3F0SelfCheckMessageExecutor.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D3F0SelfCheckMessageExecutor.java index aad86465..bce56bb3 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D3F0SelfCheckMessageExecutor.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D3F0SelfCheckMessageExecutor.java @@ -4,6 +4,7 @@ import com.imdroid.common.util.DataTypeUtil; import com.imdroid.common.util.HexUtil; import com.imdroid.common.util.ThreadManager; import com.imdroid.secapi.client.BeidouClient; +import com.imdroid.secapi.dto.GnssDevice; import com.imdroid.secapi.dto.GnssMsg; import com.imdroid.secapi.dto.GnssMsgMapper; import com.imdroid.secapi.dto.GnssStatus; @@ -52,8 +53,8 @@ public class D3F0SelfCheckMessageExecutor implements Executor= 6){ @@ -92,6 +93,17 @@ public class D3F0SelfCheckMessageExecutor implements Executor= 6){ + sendF9PColdStartCommand(device); + logger.debug("{}: 连续{}次无固定解和浮点解,发送 F9P 冷启动指令",device.getDeviceId(), device.getNoFixedAndFloatResult()); + device.clearNoResultStat(); + } + } } void saveMsg(String deviceId, int tenantId, int msgType, String content,boolean isTx){ @@ -110,7 +122,7 @@ public class D3F0SelfCheckMessageExecutor implements Executor Date: Tue, 26 Nov 2024 07:51:55 +0800 Subject: [PATCH 3/6] =?UTF-8?q?1=E3=80=81=E5=9F=BA=E7=AB=99=E4=B8=8D?= =?UTF-8?q?=E7=BB=9F=E8=AE=A1=E6=97=A0=E5=9B=BA=E5=AE=9A=E8=A7=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sideslope/executor/D3F0SelfCheckMessageExecutor.java | 3 ++- .../src/main/java/com/imdroid/sideslope/sal/Device.java | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D3F0SelfCheckMessageExecutor.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D3F0SelfCheckMessageExecutor.java index bce56bb3..f6525a07 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D3F0SelfCheckMessageExecutor.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D3F0SelfCheckMessageExecutor.java @@ -96,7 +96,8 @@ public class D3F0SelfCheckMessageExecutor implements Executor= 6){ sendF9PColdStartCommand(device); diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/sal/Device.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/sal/Device.java index 299ad9bd..d1032d6f 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/sal/Device.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/sal/Device.java @@ -121,7 +121,7 @@ public class Device { } public void clearStat(){ - if(fixedNum+floatNum == 0) noFixedAndFloatResult++; + if(fixedNum+floatNum == 0 && d3xxCount>0) noFixedAndFloatResult++; else noFixedAndFloatResult = 0; d3xxCount = 0; From b8ca6e5a0b44deb4ef43b3cd9bc2334f9839bddd Mon Sep 17 00:00:00 2001 From: weidong Date: Tue, 26 Nov 2024 08:34:00 +0800 Subject: [PATCH 4/6] =?UTF-8?q?1=E3=80=81=E5=9F=BA=E7=AB=99=E4=B8=8D?= =?UTF-8?q?=E7=BB=9F=E8=AE=A1=E6=97=A0=E5=9B=BA=E5=AE=9A=E8=A7=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sideslope/executor/D3F0SelfCheckMessageExecutor.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D3F0SelfCheckMessageExecutor.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D3F0SelfCheckMessageExecutor.java index f6525a07..cd82d5e2 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D3F0SelfCheckMessageExecutor.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D3F0SelfCheckMessageExecutor.java @@ -97,11 +97,11 @@ public class D3F0SelfCheckMessageExecutor implements Executor= 6){ - sendF9PColdStartCommand(device); - logger.debug("{}: 连续{}次无固定解和浮点解,发送 F9P 冷启动指令",device.getDeviceId(), device.getNoFixedAndFloatResult()); + //sendF9PColdStartCommand(device); + logger.info("{}: 类型{}, 连续{}次无固定解和浮点解,发送 F9P 冷启动指令",device.getDeviceId(), device.getDeviceType(),device.getNoFixedAndFloatResult()); device.clearNoResultStat(); } } From 58c8865027a1b4bc9a14d92fee4794b215c435f9 Mon Sep 17 00:00:00 2001 From: weidong Date: Tue, 26 Nov 2024 10:08:42 +0800 Subject: [PATCH 5/6] =?UTF-8?q?1=E3=80=81bug=E4=BF=AE=E6=94=B9=EF=BC=9ANul?= =?UTF-8?q?l=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/imdroid/sideslope/calc/SingleLineGNSSCalcService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/calc/SingleLineGNSSCalcService.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/calc/SingleLineGNSSCalcService.java index b7a58a2a..b1388a08 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/calc/SingleLineGNSSCalcService.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/calc/SingleLineGNSSCalcService.java @@ -283,7 +283,7 @@ public class SingleLineGNSSCalcService implements GNSSDataCalcService { //更新有效解时间 if(locationRecord.getEnabled()){ - if(device.getLastValidCalcDataTime().isBefore(resultTime)){ + if(device.getLastValidCalcDataTime()==null || device.getLastValidCalcDataTime().isBefore(resultTime)){ device.setLastValidCalcDataTime(resultTime); } } From dbe8a3146a6ce9d6c7255e869a8a0b501c6b530a Mon Sep 17 00:00:00 2001 From: weidong Date: Wed, 27 Nov 2024 15:53:29 +0800 Subject: [PATCH 6/6] =?UTF-8?q?1=E3=80=81=E5=91=8A=E8=AD=A6=E4=BC=98?= =?UTF-8?q?=E5=8C=96=EF=BC=8C=E5=A2=9E=E5=8A=A0=E9=95=BF=E6=9C=9F=E6=97=A0?= =?UTF-8?q?=E6=9C=89=E6=95=88=E8=A7=A3=E5=91=8A=E8=AD=A6=202=E3=80=81?= =?UTF-8?q?=E5=9B=BA=E5=AE=9A=E8=A7=A3=E7=BB=9F=E8=AE=A1=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- readme.txt | 8 +++- .../com/imdroid/secapi/dto/WarningCfg.java | 6 +-- .../executor/D331RtcmMessageExecutor.java | 13 +++++-- .../executor/D341LocationMessageExecutor.java | 9 +++-- .../D3F0SelfCheckMessageExecutor.java | 19 ++++++---- .../D3F2StopIndicationMessageExecutor.java | 20 +++------- .../com/imdroid/sideslope/sal/Device.java | 12 +++--- .../service/DataPersistServiceImpl.java | 10 +++++ .../sideslope/service/WarningServiceImpl.java | 37 +++++++++++++++++-- .../beidou/controller/IndexController.java | 5 +-- .../beidou/controller/WarningController.java | 2 +- .../beidou/task/DeviceStatusChecker.java | 7 +--- .../templates/page/device_overview.html | 2 +- .../beidou/test_device/task/BeidouDevice.java | 15 +++++--- 14 files changed, 109 insertions(+), 56 deletions(-) diff --git a/readme.txt b/readme.txt index 65786d47..77c78864 100644 --- a/readme.txt +++ b/readme.txt @@ -35,4 +35,10 @@ beidou-exapi 9908(外) 3)幅度压缩:压缩值=上个周期平滑值+(单位周期解算值-上个周期平滑值)*幅度压缩系数,平滑值=滤波窗口内avg(压缩值) 4)初值作为参考点的有效时长,缺省为1个周期。从初始值更新时间开始算起 -小树林算法:1b+2b+3高程0.1+4的48小时 \ No newline at end of file +小树林算法:1b+2b+3高程0.1+4的48小时 + +2024-11 +告警: +1)离线:设备记录最后一次收到任何数据的时间。定时任务检查设备最后一次时间,如果与当前时间差距大于门限,则判断为离线;D3F0/D3F2清除离线告警 +2)连续无效解:每次解算完,如果是无效解,则无效解次数加1;否则清0;如果等于N,则产生一次告警。 +3)连续无固定解:每个周期结束,如果是有效解解,则记录当前时间;D3F2检测当前时间和最近一次有效解时间差距,如果大于N,则产生一次告警。 \ No newline at end of file diff --git a/sec-api/src/main/java/com/imdroid/secapi/dto/WarningCfg.java b/sec-api/src/main/java/com/imdroid/secapi/dto/WarningCfg.java index 684b1a3a..2b4970fb 100644 --- a/sec-api/src/main/java/com/imdroid/secapi/dto/WarningCfg.java +++ b/sec-api/src/main/java/com/imdroid/secapi/dto/WarningCfg.java @@ -38,8 +38,8 @@ public class WarningCfg { public static final String TYPE_NAME_LESS_B562 = "固定解少"; public static final int TYPE_NO_FIXED_RESULT = 0x100; public static final String TYPE_NAME_NO_FIXED_RESULT = "连续无固定解"; - //public static final int TYPE_BS_NO_RESULT = 0x200; - //public static final String TYPE_NAME_BS_NO_RESULT = "基站下的测站均无解"; + public static final int TYPE_CONT_INVALID_RESULT = 0x200; + public static final String TYPE_NAME_CONT_INVALID_RESULT = "长时间无有效解"; public static final int TYPE_INCLINE = 0x400; public static final String TYPE_NAME_INCLINE = "异常倾斜"; @@ -66,7 +66,7 @@ public class WarningCfg { if((code & TYPE_LESS_D3XX) !=0) warningInfo.add(TYPE_NAME_LESS_D3XX); if((code & TYPE_LESS_B562) !=0) warningInfo.add(TYPE_NAME_LESS_B562); if((code & TYPE_NO_FIXED_RESULT) !=0) warningInfo.add(TYPE_NAME_NO_FIXED_RESULT); - //if((code & TYPE_BS_NO_RESULT) !=0) warningInfo.add(TYPE_NAME_BS_NO_RESULT); + if((code & TYPE_CONT_INVALID_RESULT) !=0) warningInfo.add(TYPE_NAME_CONT_INVALID_RESULT); if((code & TYPE_INCLINE) !=0) warningInfo.add(TYPE_NAME_INCLINE); return warningInfo; } diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D331RtcmMessageExecutor.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D331RtcmMessageExecutor.java index ed35df8a..6240d092 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D331RtcmMessageExecutor.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D331RtcmMessageExecutor.java @@ -70,17 +70,22 @@ public class D331RtcmMessageExecutor implements Executor if(deviceBs.getD3xxbytes()>0){ LocalDateTime now = LocalDateTime.now(); if(deviceBs.getLastRxTime().isBefore(now.minusMinutes(1)) && - (deviceBs.getLastD3f0f2Time() == null || - deviceBs.getLastD3f0f2Time().isBefore(now.minusMinutes(30)))) { + (deviceBs.getLastD3f2Time() == null || + deviceBs.getLastD3f2Time().isBefore(now.minusMinutes(30)))) { // new cycle logger.info("device {} rx {} d331 in a cycle while not d3f0f2",deviceBs.getDeviceId(),deviceBs.getD3xxCount()); Device lastCycleDevice = new Device(); lastCycleDevice.setDeviceId(deviceBs.getDeviceId()); + lastCycleDevice.setDeviceType(deviceBs.getDeviceType()); lastCycleDevice.setTenantId(deviceBs.getTenantId()); - lastCycleDevice.setD3xxbytes(deviceBs.getD3xxbytes()); - lastCycleDevice.setD3xxCount(deviceBs.getD3xxCount()); + lastCycleDevice.setD341bytes(deviceBs.getD341bytes()); + lastCycleDevice.setD341Count(deviceBs.getD341Count()); + lastCycleDevice.setFixedNum(deviceBs.getFixedNum()); + lastCycleDevice.setFloatNum(deviceBs.getFloatNum()); + lastCycleDevice.setNoFixedAndFloatResult(deviceBs.getNoFixedAndFloatResult()); lastCycleDevice.setLastRxTime(deviceBs.getLastRxTime()); + lastCycleDevice.setLastValidCalcDataTime(deviceBs.getLastValidCalcDataTime()); lastCycleDevice.setSatelitesInUse(deviceBs.getSatelitesInUse()); deviceBs.clearStat(); ThreadManager.getFixedThreadPool().submit(() -> { diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D341LocationMessageExecutor.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D341LocationMessageExecutor.java index d32417fc..013a5944 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D341LocationMessageExecutor.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D341LocationMessageExecutor.java @@ -44,18 +44,21 @@ public class D341LocationMessageExecutor implements Executor0) { LocalDateTime now = LocalDateTime.now(); - if (device.getLastRxTime().isBefore(now.minusMinutes(2)) && - (device.getLastD3f0f2Time() == null || - device.getLastD3f0f2Time().isBefore(now.minusMinutes(30)))) { + if (device.getLastRxTime().isBefore(now.minusMinutes(1)) && + (device.getLastD3f2Time() == null || + device.getLastD3f2Time().isBefore(now.minusMinutes(30)))) { // new cycle Device lastCycleDevice = new Device(); lastCycleDevice.setDeviceId(device.getDeviceId()); + lastCycleDevice.setDeviceType(device.getDeviceType()); lastCycleDevice.setTenantId(device.getTenantId()); lastCycleDevice.setD341bytes(device.getD341bytes()); lastCycleDevice.setD341Count(device.getD341Count()); lastCycleDevice.setFixedNum(device.getFixedNum()); lastCycleDevice.setFloatNum(device.getFloatNum()); + lastCycleDevice.setNoFixedAndFloatResult(device.getNoFixedAndFloatResult()); lastCycleDevice.setLastRxTime(device.getLastRxTime()); + lastCycleDevice.setLastValidCalcDataTime(device.getLastValidCalcDataTime()); lastCycleDevice.setSatelitesInUse(device.getSatelitesInUse()); device.clearStat(); ThreadManager.getFixedThreadPool().submit(() -> { diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D3F0SelfCheckMessageExecutor.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D3F0SelfCheckMessageExecutor.java index cd82d5e2..53e84877 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D3F0SelfCheckMessageExecutor.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D3F0SelfCheckMessageExecutor.java @@ -25,6 +25,10 @@ import java.time.LocalDateTime; /** * @author Layton * @date 2023/2/2 20:40 + * 1、回ACK,以便终端判断是否连接上服务器后台 + * 2、同步参数 + * 3、判断是否发冷启动指令 + * 4、保存状态信息,判断是否有低电压等告警,清除离线告警 */ @Component public class D3F0SelfCheckMessageExecutor implements Executor { @@ -49,30 +53,31 @@ public class D3F0SelfCheckMessageExecutor implements Executor { + // 检查是否需要对设备的F9P进行冷启动操作 + checkAndSendF9PColdStartCommand(device); + // 通知beidou服务设备上线,这里会触发参数同步 GnssStatus lastGnssStatus = dataPersistService.getDeviceState(message.getId()); try { if (lastGnssStatus != null && lastGnssStatus.getState() == GnssStatus.STATE_OFFLINE) { beidouClient.onLine(lastGnssStatus.getDeviceid(), lastGnssStatus.getTenantid(), lastGnssStatus.getUpdatetime()); } else { - // 通知beidou服务设备上线 beidouClient.onDeviceActive(message.getId(), device.getTenantId()); } } catch (Exception e){ } + //保存状态信息,判断是否有低电压等告警,清除离线告警 dataPersistService.saveDeviceState(message); }); @@ -101,7 +106,7 @@ public class D3F0SelfCheckMessageExecutor implements Executor= 6){ //sendF9PColdStartCommand(device); - logger.info("{}: 类型{}, 连续{}次无固定解和浮点解,发送 F9P 冷启动指令",device.getDeviceId(), device.getDeviceType(),device.getNoFixedAndFloatResult()); + logger.info("{}: 连续{}次无固定解和浮点解,发送 F9P 冷启动指令",device.getDeviceId(), device.getNoFixedAndFloatResult()); device.clearNoResultStat(); } } diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D3F2StopIndicationMessageExecutor.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D3F2StopIndicationMessageExecutor.java index b65c9102..ee6fa0aa 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D3F2StopIndicationMessageExecutor.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D3F2StopIndicationMessageExecutor.java @@ -11,7 +11,6 @@ import com.imdroid.sideslope.sal.Device; import com.imdroid.sideslope.sal.DeviceService; import com.imdroid.sideslope.service.DataPersistService; import com.imdroid.sideslope.service.GnssSingleBufferServiceImpl; -import com.imdroid.sideslope.service.WarningService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -24,6 +23,9 @@ import java.time.LocalDateTime; * 停止指示消息处理器 * * @author LiGang + * 1、更新统计 + * 2、启动单周期固定解处理 + * 3、保存统计信息,判断是否有连续无固定解、连续无有效解等告警,清除离线告警 */ @Component public class D3F2StopIndicationMessageExecutor implements Executor { @@ -40,23 +42,21 @@ public class D3F2StopIndicationMessageExecutor implements Executor
0
- + 2020
diff --git a/sec-test-device/src/main/java/com/imdroid/beidou/test_device/task/BeidouDevice.java b/sec-test-device/src/main/java/com/imdroid/beidou/test_device/task/BeidouDevice.java index f65fe239..035cff7f 100644 --- a/sec-test-device/src/main/java/com/imdroid/beidou/test_device/task/BeidouDevice.java +++ b/sec-test-device/src/main/java/com/imdroid/beidou/test_device/task/BeidouDevice.java @@ -67,13 +67,13 @@ public class BeidouDevice { executeAsD342("C:\\Users\\wd\\Desktop\\log\\2412254_0424_4xx.log"); executeAsD342("C:\\Users\\wd\\Desktop\\log\\2412254_0424_5xx.log"); */ - execute("C:\\Users\\wd\\Desktop\\log\\2345076_0424_5xx.log"); + //execute("C:\\Users\\wd\\Desktop\\log\\2345076_0424_5xx.log"); //executeAsD342("C:\\Users\\wd\\Desktop\\log\\b562_2412270_1xx.log"); //executeAsD342("C:\\Users\\wd\\Desktop\\log\\b562_2412270_2xx.log"); - /* executeAsD342("C:\\Users\\wd\\Desktop\\log\\2345076_0424_1.log"); - executeAsD342("C:\\Users\\wd\\Desktop\\log\\2345076_0424_2.log"); - executeAsD342("C:\\Users\\wd\\Desktop\\log\\2345076_0424_1xx.log"); + //execute("C:\\Users\\wd\\Desktop\\log\\2345076_0424_1.log"); + execute("C:\\Users\\wd\\Desktop\\log\\2345076_0424_2.log"); + /*executeAsD342("C:\\Users\\wd\\Desktop\\log\\2345076_0424_1xx.log"); executeAsD342("C:\\Users\\wd\\Desktop\\log\\2345076_0424_2xx.log"); executeAsD342("C:\\Users\\wd\\Desktop\\log\\2345076_0424_3xx.log"); executeAsD342("C:\\Users\\wd\\Desktop\\log\\2345076_0424_4xx.log"); @@ -120,7 +120,12 @@ public class BeidouDevice { cycleCount++; } - udpClient.sendData(ByteUtil.hexStringTobyte(arrs[2])); + if(arrs[2].startsWith("d3f2")){ + b562Count = b562Count; + } + else{ + udpClient.sendData(ByteUtil.hexStringTobyte(arrs[2])); + } b562Count++; lastTime = time.getTime(); Thread.sleep(100);