增加周跳判断和处理

This commit is contained in:
weidong 2024-10-30 09:10:47 +08:00
parent 655cced8a8
commit e6ab241586
6 changed files with 75 additions and 4 deletions

View File

@ -27,4 +27,5 @@ public interface FocusCalculator {
// 算法版本 // 算法版本
int getVer(); int getVer();
boolean isJump();
} }

View File

@ -349,6 +349,11 @@ public class FocusCalculator1 implements FocusCalculator{
return 1; return 1;
} }
@Override
public boolean isJump() {
return false;
}
@Override @Override
public Tilt avgTilt() { public Tilt avgTilt() {
if (tilts.size() == 0) { if (tilts.size() == 0) {

View File

@ -210,6 +210,11 @@ public class FocusCalculator5 implements FocusCalculator{
return 5; return 5;
} }
@Override
public boolean isJump() {
return false;
}
@Override @Override
public Tilt avgTilt() { public Tilt avgTilt() {
if (tilts.size() == 0) { if (tilts.size() == 0) {

View File

@ -215,6 +215,11 @@ public class FocusCalculator6 implements FocusCalculator{
return 6; return 6;
} }
@Override
public boolean isJump() {
return false;
}
@Override @Override
public Tilt avgTilt() { public Tilt avgTilt() {
if (tilts.size() == 0) { if (tilts.size() == 0) {

View File

@ -9,6 +9,10 @@ import com.imdroid.sideslope.sal.Device;
public class FocusCalculator7 extends FocusCalculator3{ public class FocusCalculator7 extends FocusCalculator3{
final static long scale = 100000000L;//地球1°111km放大到mm乘以100,000,000 final static long scale = 100000000L;//地球1°111km放大到mm乘以100,000,000
final static int bad_change_mm = 500;//固定解跳变连续10次超过500mm认为是周跳
final static int bad_duration = 10;
int bad_count = 0;
public FocusCalculator7(Device bsDevice) { public FocusCalculator7(Device bsDevice) {
super(bsDevice); super(bsDevice);
@ -22,15 +26,40 @@ public class FocusCalculator7 extends FocusCalculator3{
if(gga.isFixed()) { if(gga.isFixed()) {
counterFixedResult++; counterFixedResult++;
if(pointList.size()>0){
double[] lastXyz = pointList.get(pointList.size()-1);
if(Math.abs(xyz[0]-lastXyz[0])>bad_change_mm ||
Math.abs(xyz[1]-lastXyz[1])>bad_change_mm ||
Math.abs(xyz[2]-lastXyz[2])>bad_change_mm){
bad_count++;
return;
}
}
bad_count = 0;
pointList.add(xyz); pointList.add(xyz);
} }
else if(gga.getQuality() == 5) counterNoFixed++; else if(gga.getQuality() == 5) counterNoFixed++;
else counterNoB562 ++; else counterNoB562 ++;
} }
@Override
public void reset(){
super.reset();
bad_count = 0;
}
@Override @Override
public int getVer() { public int getVer() {
return 7; return 7;
} }
public boolean isJump(){
if (bad_count>bad_duration){
bad_count = 0;
return true;
}
else return false;
}
} }

View File

@ -1,6 +1,7 @@
package com.imdroid.sideslope.calc; package com.imdroid.sideslope.calc;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.imdroid.common.util.DataTypeUtil;
import com.imdroid.common.util.ThreadManager; import com.imdroid.common.util.ThreadManager;
import com.imdroid.secapi.dto.GnssCalcData; import com.imdroid.secapi.dto.GnssCalcData;
import com.imdroid.secapi.dto.GnssCalcDataMapper; import com.imdroid.secapi.dto.GnssCalcDataMapper;
@ -10,7 +11,11 @@ import com.imdroid.sideslope.bd.*;
import com.imdroid.sideslope.message.D341LocationMessage; import com.imdroid.sideslope.message.D341LocationMessage;
import com.imdroid.sideslope.sal.Device; import com.imdroid.sideslope.sal.Device;
import com.imdroid.sideslope.sal.DeviceService; import com.imdroid.sideslope.sal.DeviceService;
import com.imdroid.sideslope.server.DeviceChannel;
import com.imdroid.sideslope.server.OnlineChannels;
import com.imdroid.sideslope.service.WarningService; import com.imdroid.sideslope.service.WarningService;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -119,7 +124,7 @@ public class SingleLineGNSSCalcService implements GNSSDataCalcService {
if(tilt != null) { if(tilt != null) {
focusCalculator.addTilt(tilt); focusCalculator.addTilt(tilt);
if (logger.isDebugEnabled()) { if (logger.isDebugEnabled()) {
logger.debug("测站" + deviceId + "惯导单次解析结果:{}", tilt); logger.debug("测站{}惯导单次解析结果:{}", deviceId,tilt);
} }
} }
@ -130,15 +135,19 @@ public class SingleLineGNSSCalcService implements GNSSDataCalcService {
double[] doubles = message.getB562_loc();//unit: mm double[] doubles = message.getB562_loc();//unit: mm
if(doubles !=null) { if(doubles !=null) {
focusCalculator.addXyz(doubles, message.getCreateTime()); focusCalculator.addXyz(doubles, message.getCreateTime());
logger.info("测站" + deviceId + "的b562单次解析结果:{}", Arrays.toString(doubles)); logger.info("测站{}的b562单次解析结果:{}", deviceId,Arrays.toString(doubles));
} }
// 单次GGA // 单次GGA
Gga gga = message.getGga(); Gga gga = message.getGga();
if(gga != null) { if(gga != null) {
focusCalculator.addGGA(message.getGga()); focusCalculator.addGGA(gga);
logger.info("测站" + deviceId + "的gga单次解析结果:{},{},{},{}", logger.info("测站{}的gga单次解析结果:{},{},{},{}",deviceId,
gga.getLongitude(), gga.getLatitude(), gga.getAltitude(), gga.getQuality()); gga.getLongitude(), gga.getLatitude(), gga.getAltitude(), gga.getQuality());
if(groupCalc.getVer() == 7 && focusCalculator.isJump()){
logger.info("{}发生周跳",deviceId);
hardResetDevice(deviceId);
}
} }
} }
@ -350,4 +359,21 @@ public class SingleLineGNSSCalcService implements GNSSDataCalcService {
} }
return null; return null;
} }
void hardResetDevice(String deviceId){
String resetCmd = "42 4b cc 17 26 04 00 00";
DeviceChannel deviceChannel = OnlineChannels.INSTANCE.getConfigChannel(deviceId);
if(deviceChannel == null || !deviceChannel.isOnline()) {
deviceChannel = OnlineChannels.INSTANCE.getDataChannel(deviceId);
}
//if(deviceChannel!=null && deviceChannel.isOnline()){
if(deviceChannel!=null && deviceChannel.isOnline()){
// send command
ByteBuf buf = Unpooled.buffer();
byte[] data = DataTypeUtil.hexStringToBytes(resetCmd);
logger.info("send hard reset command:{}", resetCmd);
buf.writeBytes(data);
deviceChannel.writeAndFlush(buf);
}
}
} }