Merge branch 'master' of https://git.code.tencent.com/beijing-rtss-test/bj-rtsts-server-go
This commit is contained in:
commit
5c0f16e352
94
third_party/message/radar.go
vendored
94
third_party/message/radar.go
vendored
@ -12,6 +12,7 @@ const (
|
|||||||
radar_head2 byte = 0xFC
|
radar_head2 byte = 0xFC
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// 雷达与VOBC接口-雷达通讯协议
|
||||||
type Radar struct {
|
type Radar struct {
|
||||||
AutoInc byte //自增计数器,每发送一次自增1.范围0-256
|
AutoInc byte //自增计数器,每发送一次自增1.范围0-256
|
||||||
RealSpeed *RadarData //实际速度
|
RealSpeed *RadarData //实际速度
|
||||||
@ -23,11 +24,15 @@ type Radar struct {
|
|||||||
Tail byte
|
Tail byte
|
||||||
}
|
}
|
||||||
type RadarData struct {
|
type RadarData struct {
|
||||||
sourceData byte
|
SourceData byte
|
||||||
valRange byte
|
valRange byte
|
||||||
}
|
}
|
||||||
type RadarState struct {
|
type RadarState struct {
|
||||||
State byte
|
SourceState byte
|
||||||
|
Model string
|
||||||
|
SyntheticalState string
|
||||||
|
DirState string
|
||||||
|
Dir string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *Radar) Decode(data []byte) error {
|
func (r *Radar) Decode(data []byte) error {
|
||||||
@ -58,56 +63,45 @@ func (r *Radar) Decode(data []byte) error {
|
|||||||
if !r.checkTail() {
|
if !r.checkTail() {
|
||||||
return fmt.Errorf("数据解析完成,但协议效验不通过")
|
return fmt.Errorf("数据解析完成,但协议效验不通过")
|
||||||
}
|
}
|
||||||
|
state.parseState()
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
func (rd *RadarData) getSumVal() byte {
|
func (rd *RadarData) getSumVal() byte {
|
||||||
return rd.sourceData + rd.valRange
|
return rd.SourceData + rd.valRange
|
||||||
|
}
|
||||||
|
func (s *RadarState) parseState() {
|
||||||
|
//第6位 == SW_Mode0, 第7位 == SW_Mode1
|
||||||
|
// 11:两个天线和双通道都OK
|
||||||
|
// 10:DRS05_Single-Mode 40度,50度的天线或通道故障
|
||||||
|
// 01:DRS05_Single-Mode 50度,40度的天线或通道故障
|
||||||
|
// 00:错误模式 双侧天线或通道都故障
|
||||||
|
// 模式的工作差别:工作在11.模式时效果最好。单模式10或01时可信度下降。
|
||||||
|
arr := s.getBitsStateArr()
|
||||||
|
s.Model = bitStateStr(arr[6:])
|
||||||
|
// 第3位=计算状态位,第4位=信号质量标志位,第5位=Black5out标志位
|
||||||
|
// 110:计算状态,高质量
|
||||||
|
// 地面信号反射良好,高精度的信号计算
|
||||||
|
// 100: 计算状态,低质量
|
||||||
|
// 地面信号反射一般,信号计算可能会有缺陷
|
||||||
|
// 001: 处于Blackout 状态
|
||||||
|
// 车辆行驶时无地面反射信号,无法进行信号计算
|
||||||
|
// 000: 信号搜寻状态
|
||||||
|
// 在整个频率范围内搜寻多普勒信号,此时的速度和位移信息无效,当频率搜寻正确后,会转为计算模式。
|
||||||
|
s.SyntheticalState = bitStateStr(arr[3:6])
|
||||||
|
// 第1位 =方向状态
|
||||||
|
// 1:行驶方向有效
|
||||||
|
// 0:行驶方向无效
|
||||||
|
s.DirState = bitStateStr(arr[1:2])
|
||||||
|
// 第0位 =行驶方向
|
||||||
|
// 1:前向
|
||||||
|
// 0:反向
|
||||||
|
s.Dir = bitStateStr(arr[0:1])
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetModel 第6位 == SW_Mode0,第7位 == SW_Mode1
|
|
||||||
// 11:两个天线和双通道都OK
|
|
||||||
// 10:DRS05_Single-Mode 40度,50度的天线或通道故障
|
|
||||||
// 01:DRS05_Single-Mode 50度,40度的天线或通道故障
|
|
||||||
// 00:错误模式 双侧天线或通道都故障
|
|
||||||
// 模式的工作差别:工作在11.模式时效果最好。单模式10或01时可信度下降。
|
|
||||||
func (s *RadarState) GetModel() string {
|
|
||||||
arr := s.getBitsStateArr()
|
|
||||||
return bitStateStr(arr[6:])
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetSyntheticalState 第3位=计算状态位,第4位=信号质量标志位,第5位=Black5out标志位
|
|
||||||
// 110:计算状态,高质量
|
|
||||||
// 地面信号反射良好,高精度的信号计算
|
|
||||||
// 100: 计算状态,低质量
|
|
||||||
// 地面信号反射一般,信号计算可能会有缺陷
|
|
||||||
// 001: 处于Blackout 状态
|
|
||||||
// 车辆行驶时无地面反射信号,无法进行信号计算
|
|
||||||
// 000: 信号搜寻状态
|
|
||||||
// 在整个频率范围内搜寻多普勒信号,此时的速度和位移信息无效,当频率搜寻正确后,会转为计算模式。
|
|
||||||
func (s *RadarState) GetSyntheticalState() string {
|
|
||||||
arr := s.getBitsStateArr()
|
|
||||||
return bitStateStr(arr[3:6])
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetDirState 第1位 =方向状态
|
|
||||||
// 1:行驶方向有效
|
|
||||||
// 0:行驶方向无效
|
|
||||||
func (s *RadarState) GetDirState() string {
|
|
||||||
arr := s.getBitsStateArr()
|
|
||||||
return bitStateStr(arr[1:2])
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetDir 第0位 =行驶方向
|
|
||||||
// 1:前向
|
|
||||||
// 0:反向
|
|
||||||
func (s *RadarState) GetDir() string {
|
|
||||||
arr := s.getBitsStateArr()
|
|
||||||
return bitStateStr(arr[0:1])
|
|
||||||
}
|
|
||||||
func (s *RadarState) getBitsStateArr() []byte {
|
func (s *RadarState) getBitsStateArr() []byte {
|
||||||
bits := make([]byte, 8)
|
bits := make([]byte, 8)
|
||||||
for i := 0; i < 8; i++ {
|
for i := 0; i < 8; i++ {
|
||||||
bit := s.State >> uint(i) & 1
|
bit := s.SourceState >> uint(i) & 1
|
||||||
bits[i] = bit
|
bits[i] = bit
|
||||||
}
|
}
|
||||||
return bits
|
return bits
|
||||||
@ -121,7 +115,7 @@ func bitStateStr(data []byte) string {
|
|||||||
return build.String()
|
return build.String()
|
||||||
}
|
}
|
||||||
func (r *Radar) checkTail() bool {
|
func (r *Radar) checkTail() bool {
|
||||||
var sum = int(radar_head1) + int(radar_head2) + int(r.AutoInc+r.RealSpeed.getSumVal()+r.DriftCounterS1.getSumVal()+r.DriftCounterS2.getSumVal()+r.InnerCheck1+r.InnerCheck2+r.State.State)
|
var sum = int(radar_head1) + int(radar_head2) + int(r.AutoInc+r.RealSpeed.getSumVal()+r.DriftCounterS1.getSumVal()+r.DriftCounterS2.getSumVal()+r.InnerCheck1+r.InnerCheck2+r.State.SourceState)
|
||||||
return r.Tail == byte(^sum+1)
|
return r.Tail == byte(^sum+1)
|
||||||
}
|
}
|
||||||
func readHeader(buf *bytes.Buffer) (byte, byte, error) {
|
func readHeader(buf *bytes.Buffer) (byte, byte, error) {
|
||||||
@ -130,10 +124,10 @@ func readHeader(buf *bytes.Buffer) (byte, byte, error) {
|
|||||||
}*/
|
}*/
|
||||||
d1, _ := buf.ReadByte()
|
d1, _ := buf.ReadByte()
|
||||||
d2, _ := buf.ReadByte()
|
d2, _ := buf.ReadByte()
|
||||||
if !(d1 == radar_head1 && d2 == radar_head2) {
|
if d1 == radar_head1 && d2 == radar_head2 {
|
||||||
return 0, 0, fmt.Errorf("雷达协议解析头部未找到对应的头部帧")
|
return d1, d2, nil
|
||||||
}
|
}
|
||||||
return d1, d2, nil
|
return 0, 0, fmt.Errorf("雷达协议解析头部未找到对应的头部帧")
|
||||||
}
|
}
|
||||||
|
|
||||||
func readByteData(buf *bytes.Buffer) byte {
|
func readByteData(buf *bytes.Buffer) byte {
|
||||||
@ -149,7 +143,7 @@ func readSpeedOrCounter(buf *bytes.Buffer) *RadarData {
|
|||||||
}*/
|
}*/
|
||||||
ss, _ := buf.ReadByte()
|
ss, _ := buf.ReadByte()
|
||||||
limit, _ := buf.ReadByte()
|
limit, _ := buf.ReadByte()
|
||||||
return &RadarData{sourceData: ss, valRange: limit}
|
return &RadarData{SourceData: ss, valRange: limit}
|
||||||
}
|
}
|
||||||
|
|
||||||
func readRadarInnerData(buf *bytes.Buffer) (byte, byte) {
|
func readRadarInnerData(buf *bytes.Buffer) (byte, byte) {
|
||||||
@ -165,7 +159,7 @@ func readRadarState(buf *bytes.Buffer) *RadarState {
|
|||||||
return nil, fmt.Errorf("")
|
return nil, fmt.Errorf("")
|
||||||
}*/
|
}*/
|
||||||
state, _ := buf.ReadByte()
|
state, _ := buf.ReadByte()
|
||||||
return &RadarState{State: state}
|
return &RadarState{SourceState: state}
|
||||||
}
|
}
|
||||||
|
|
||||||
func driftCounter(buf *bytes.Buffer) (uint16, error) {
|
func driftCounter(buf *bytes.Buffer) (uint16, error) {
|
||||||
|
@ -181,9 +181,7 @@ func AddTrainStateNew(vs *VerifySimulation, status *state_proto.TrainState, conf
|
|||||||
func createOrUpdateStateDynamicConfig(trainState *state_proto.TrainState, configTrainData dto.ConfigTrainData, trainEndsA dto.ConfigTrainEnds,
|
func createOrUpdateStateDynamicConfig(trainState *state_proto.TrainState, configTrainData dto.ConfigTrainData, trainEndsA dto.ConfigTrainEnds,
|
||||||
trainEndsB dto.ConfigTrainEnds) {
|
trainEndsB dto.ConfigTrainEnds) {
|
||||||
trainState.TrainDynamicConfig = service.TrainConfigToProtoConvert(&configTrainData)
|
trainState.TrainDynamicConfig = service.TrainConfigToProtoConvert(&configTrainData)
|
||||||
if trainState.TrainDynamicConfig == nil {
|
if trainState.TrainDynamicConfig != nil {
|
||||||
slog.Error("")
|
|
||||||
} else {
|
|
||||||
copyTrainEnds(trainState, "TrainEndsA", trainEndsA)
|
copyTrainEnds(trainState, "TrainEndsA", trainEndsA)
|
||||||
copyTrainEnds(trainState, "TrainEndsB", trainEndsB)
|
copyTrainEnds(trainState, "TrainEndsB", trainEndsB)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user