新仿真结构下的虚拟真实设备逻辑完善
This commit is contained in:
parent
e6a6184ed0
commit
415e92b4da
7
src/main/java/club/joylink/rtss/simulation/Debug.java
Normal file
7
src/main/java/club/joylink/rtss/simulation/Debug.java
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
package club.joylink.rtss.simulation;
|
||||||
|
|
||||||
|
public interface Debug {
|
||||||
|
|
||||||
|
String debugStr();
|
||||||
|
|
||||||
|
}
|
@ -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;
|
||||||
|
@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user