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; } }