From 38da1268546f7bfb65bd72a6607c0e299f65aa43 Mon Sep 17 00:00:00 2001 From: weidong Date: Wed, 4 Dec 2024 18:20:01 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E5=A2=9E=E5=8A=A0=E5=8D=9A=E9=80=9A?= =?UTF-8?q?=E5=BC=82=E5=B8=B8=E5=A4=8D=E4=BD=8D=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../D3F0SelfCheckMessageExecutor.java | 83 +++++++++++++++++-- .../com/imdroid/sideslope/sal/Device.java | 6 +- 2 files changed, 80 insertions(+), 9 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 c24b20cf..6b44b3a2 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 @@ -17,6 +17,8 @@ import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.time.LocalDateTime; +import java.util.Timer; +import java.util.TimerTask; /** @@ -31,6 +33,11 @@ import java.time.LocalDateTime; public class D3F0SelfCheckMessageExecutor implements Executor { private final Logger logger = LoggerFactory.getLogger(this.getClass()); + final String F9PColdStartCmd = "b56206040400000002001068"; + final String BTCloseMneaCmd = "424be8e1020a00040000ffff"; + final String BTOpenGGACmd = "424b852c0208000400000001"; + final String BTSaveCmd = "424bcc1726040000"; + @Autowired private DataPersistService dataPersistService; @Autowired @@ -61,6 +68,7 @@ public class D3F0SelfCheckMessageExecutor implements Executor { // 检查是否需要对设备的F9P进行冷启动操作 checkAndSendF9PColdStartCommand(device); + checkAndResetBTGnss(device); // 通知beidou服务设备上线,这里会触发参数同步 GnssStatus lastGnssStatus = dataPersistService.getDeviceState(message.getId()); try { @@ -102,8 +110,7 @@ public class D3F0SelfCheckMessageExecutor implements Executor0 &&device.getAbnormalD341Num()>10){ + startBTResetTask(device); + device.clearNoResultStat(); + } + } + } + + void startF9PColdStartTask(Device device){ + Timer timer = new Timer(); + timer.schedule(new TimerTask() { + @Override + public void run() { + sendGnssCommand(device, F9PColdStartCmd); + logger.info("{}: 连续{}次无固定解和浮点解,发送 F9P 冷启动指令",device.getDeviceId(), device.getNoFixedAndFloatResult()); + } + },1000); + } + + void startBTResetTask(Device device){ + Timer timer = new Timer(); + timer.schedule(new TimerTask() { + @Override + public void run() { + sendGnssCommand(device, BTCloseMneaCmd); + } + },1000); + timer.schedule(new TimerTask() { + @Override + public void run() { + sendGnssCommand(device, BTCloseMneaCmd); + } + },4000); + timer.schedule(new TimerTask() { + @Override + public void run() { + sendGnssCommand(device, BTOpenGGACmd); + } + },7000); + timer.schedule(new TimerTask() { + @Override + public void run() { + sendGnssCommand(device, BTOpenGGACmd); + } + },10000); + timer.schedule(new TimerTask() { + @Override + public void run() { + sendGnssCommand(device, BTSaveCmd); + } + },13000); + timer.schedule(new TimerTask() { + @Override + public void run() { + sendGnssCommand(device, BTSaveCmd); + } + },16000); + } } 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 ad270ba0..8b40a4f0 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 @@ -1,5 +1,6 @@ package com.imdroid.sideslope.sal; +import com.imdroid.secapi.dto.GnssDevice; import com.imdroid.sideslope.bd.Gga; import com.imdroid.sideslope.bd.UBXUtil; import lombok.Data; @@ -75,6 +76,7 @@ public class Device { int floatNum = 0; LocalDateTime lastValidCalcDataTime; //最近一次有效解 int warningcode = 0; + short abnormalD341Num = 0; public void updateRx(int head, int bytes,int count){ lastRxHead = head; @@ -96,6 +98,7 @@ public class Device { d341Count+=count; d341bytes += bytes; lastRxTime = LocalDateTime.now(); + if(model== GnssDevice.MODEL_G510 && bytes>100) abnormalD341Num++; break; case 0xd342: d342Count ++; @@ -124,7 +127,7 @@ public class Device { } public void clearStat(){ - if(fixedNum+floatNum == 0 && deviceType == DEVICE_ROVER) noFixedAndFloatResult++; + if(fixedNum+floatNum <= 5 && deviceType == DEVICE_ROVER) noFixedAndFloatResult++; else noFixedAndFloatResult = 0; d3xxCount = 0; @@ -146,6 +149,7 @@ public class Device { public void clearNoResultStat(){ noFixedAndFloatResult = 0; warningcode = 0; + abnormalD341Num = 0; } }