新仿真结构下的虚拟真实设备逻辑完善

This commit is contained in:
walker-sheng 2021-03-09 09:30:08 +08:00
parent e6a6184ed0
commit 415e92b4da
5 changed files with 37 additions and 12 deletions

View File

@ -0,0 +1,7 @@
package club.joylink.rtss.simulation;
public interface Debug {
String debugStr();
}

View File

@ -4,10 +4,12 @@ import club.joylink.rtss.exception.BusinessExceptionAssertEnum;
import club.joylink.rtss.simulation.rt.RtSimulation; import club.joylink.rtss.simulation.rt.RtSimulation;
import club.joylink.rtss.simulation.rt.srd.bo.*; import club.joylink.rtss.simulation.rt.srd.bo.*;
import club.joylink.rtss.vo.client.map.MapVO; import club.joylink.rtss.vo.client.map.MapVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.List; import java.util.List;
@Slf4j
@Component @Component
public class SrdService { public class SrdService {
public static final int TRAIN_RUN_RATE = 20; public static final int TRAIN_RUN_RATE = 20;
@ -29,8 +31,7 @@ public class SrdService {
if (!srTrain.isUsing()) { if (!srTrain.isUsing()) {
continue; continue;
} }
TrackPosition position = srTrain.getPosition(); TrackPosition position = srTrain.getHeadPosition();
long speed = srTrain.getSpeed();
boolean right = srTrain.isRight(); boolean right = srTrain.isRight();
int cv = this.calculateSpeed(srTrain); int cv = this.calculateSpeed(srTrain);
int s = this.calculateLen(cv, TRAIN_RUN_RATE); int s = this.calculateLen(cv, TRAIN_RUN_RATE);
@ -77,7 +78,8 @@ public class SrdService {
SrTrack base = track; SrTrack base = track;
while (offset < 0 || offset > base.getLen()) { while (offset < 0 || offset > base.getLen()) {
SrTrack nextTrack = base.queryNextTrack(right); SrTrack nextTrack = base.queryNextTrack(right);
if (nextTrack == null) { if (nextTrack == null) { // 下一区段为空到达尽头或道岔失表处
log.debug(String.format("区段[%s][%s]区段不存在",base.debugStr(), right?"右向":"左向"));
if (offset < 0) { if (offset < 0) {
offset = 0; offset = 0;
} else { } else {
@ -86,10 +88,10 @@ public class SrdService {
break; break;
} else { } else {
if (right) { if (right) {
BusinessExceptionAssertEnum.SYSTEM_EXCEPTION.assertNotTrue(offset < 0); BusinessExceptionAssertEnum.SYSTEM_EXCEPTION.assertTrue(offset > base.getLen());
offset -= base.getLen(); offset -= base.getLen();
} else { } else {
BusinessExceptionAssertEnum.SYSTEM_EXCEPTION.assertNotTrue(offset > base.getLen()); BusinessExceptionAssertEnum.SYSTEM_EXCEPTION.assertTrue(offset < 0);
offset += nextTrack.getLen(); offset += nextTrack.getLen();
} }
base = nextTrack; base = nextTrack;

View File

@ -1,12 +1,13 @@
package club.joylink.rtss.simulation.rt.srd.bo; package club.joylink.rtss.simulation.rt.srd.bo;
import club.joylink.rtss.simulation.Debug;
import lombok.Getter; import lombok.Getter;
/** /**
* 虚拟真实设备抽象父类 * 虚拟真实设备抽象父类
*/ */
@Getter @Getter
public abstract class SrDevice { public abstract class SrDevice implements Debug {
String id; String id;
DeviceType deviceType; DeviceType deviceType;
@ -16,4 +17,9 @@ public abstract class SrDevice {
this.id = id; this.id = id;
this.deviceType = deviceType; this.deviceType = deviceType;
} }
@Override
public String debugStr() {
return String.format("%s:%s", this.deviceType, this.id);
}
} }

View File

@ -1,13 +1,15 @@
package club.joylink.rtss.simulation.rt.srd.bo; package club.joylink.rtss.simulation.rt.srd.bo;
import club.joylink.rtss.simulation.Debug;
import lombok.Getter; import lombok.Getter;
/** /**
* 虚拟真实轨道区段 * 虚拟真实轨道区段
*/ */
@Getter @Getter
public class SrTrack extends SrDevice { public class SrTrack extends SrDevice implements Debug {
String name;
/** /**
* 轨道长度单位mm * 轨道长度单位mm
*/ */
@ -101,4 +103,9 @@ public class SrTrack extends SrDevice {
} }
return null; return null;
} }
@Override
public String debugStr() {
return String.format("%s(%s)", this.name, this.id);
}
} }

View File

@ -56,11 +56,14 @@ public class SrTrain extends SrDevice {
public static final int FORWARD = 1; //前进挡 public static final int FORWARD = 1; //前进挡
public static final int REVERSE = -1; //后退档 public static final int REVERSE = -1; //后退档
/** /**
* 列车位置 * 列车位置
*/ */
TrackPosition position; TrackPosition headPosition;
/**
public SrTrain(String id, int len) { * 列车尾位置
*/
TrackPosition tailPosition;
public SrTrain(String id, int len) {
super(id, DeviceType.TRAIN); super(id, DeviceType.TRAIN);
this.len = len; this.len = len;
} }
@ -70,7 +73,7 @@ public class SrTrain extends SrDevice {
} }
public void updatePositionAndSpeed(TrackPosition position, int v) { public void updatePositionAndSpeed(TrackPosition position, int v) {
this.position = position; this.headPosition = position;
this.speed = v; this.speed = v;
} }
} }