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

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

View File

@ -1,12 +1,13 @@
package club.joylink.rtss.simulation.rt.srd.bo;
import club.joylink.rtss.simulation.Debug;
import lombok.Getter;
/**
* 虚拟真实设备抽象父类
*/
@Getter
public abstract class SrDevice {
public abstract class SrDevice implements Debug {
String id;
DeviceType deviceType;
@ -16,4 +17,9 @@ public abstract class SrDevice {
this.id = id;
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;
import club.joylink.rtss.simulation.Debug;
import lombok.Getter;
/**
* 虚拟真实轨道区段
*/
@Getter
public class SrTrack extends SrDevice {
public class SrTrack extends SrDevice implements Debug {
String name;
/**
* 轨道长度单位mm
*/
@ -101,4 +103,9 @@ public class SrTrack extends SrDevice {
}
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 REVERSE = -1; //后退档
/**
* 列车位置
* 列车位置
*/
TrackPosition position;
public SrTrain(String id, int len) {
TrackPosition headPosition;
/**
* 列车尾位置
*/
TrackPosition tailPosition;
public SrTrain(String id, int len) {
super(id, DeviceType.TRAIN);
this.len = len;
}
@ -70,7 +73,7 @@ public class SrTrain extends SrDevice {
}
public void updatePositionAndSpeed(TrackPosition position, int v) {
this.position = position;
this.headPosition = position;
this.speed = v;
}
}