diff --git a/ats/verify/simulation/wayside/memory/wayside_memory_generate.go b/ats/verify/simulation/wayside/memory/wayside_memory_generate.go index 5c09033..37d5da9 100644 --- a/ats/verify/simulation/wayside/memory/wayside_memory_generate.go +++ b/ats/verify/simulation/wayside/memory/wayside_memory_generate.go @@ -108,7 +108,7 @@ func calcGraphicLenBySection(section *buildCalcSectionStruct) int32 { } var length int64 // 两端公里标相减即可 for _, a := range section.axlePoints { - if a.KilometerSystem == nil || a.KilometerSystem.CoordinateSystem == "" { + if !judgeKilometerIsVaild(a.KilometerSystem) { return 0 } length = a.KilometerSystem.Kilometer - length @@ -119,11 +119,11 @@ func calcGraphicLenBySection(section *buildCalcSectionStruct) int32 { // 计算道岔端长度 func calcGraphicLenByTurnout(turnout *buildCalcTurnoutStruct, p graphicData.RelatedRef_DevicePort) int32 { endPoint := turnout.axlePoints[p] - if endPoint == nil || endPoint.KilometerSystem == nil || endPoint.KilometerSystem.CoordinateSystem == "" { + if endPoint == nil || !judgeKilometerIsVaild(endPoint.KilometerSystem) { zap.S().Warnf("道岔【%s】对应端口【%s】数据无计轴", turnout.Data.Common.Id, p.String()) return 0 } - if turnout.CrossKilometerSystem == nil { + if !judgeKilometerIsVaild(turnout.CrossKilometerSystem) { zap.S().Warnf("道岔【%s】数据错误,岔心公里标为空", turnout.Data.Common.Id) return 0 } @@ -165,7 +165,7 @@ func getGraphicSectionRefDevices(deviceMap map[string]*graphicData.CalculateLink spof := deviceMap[startPoint.Common.Id].Offset // 相对的起点offset // 信号机信息 for _, s := range section.signals { - if s.KilometerSystem != nil && s.KilometerSystem.CoordinateSystem != "" && deviceMap[s.Common.Id] == nil { + if judgeKilometerIsVaild(s.KilometerSystem) && deviceMap[s.Common.Id] == nil { deviceMap[s.Common.Id] = &graphicData.CalculateLink_DevicePosition{ DeviceId: s.Common.Id, Offset: spof + int32(math.Abs(float64(s.KilometerSystem.Kilometer-sppk))), @@ -175,7 +175,7 @@ func getGraphicSectionRefDevices(deviceMap map[string]*graphicData.CalculateLink } // 停车标信息 for _, s := range section.stopPositions { - if s.KilometerSystem != nil && s.KilometerSystem.CoordinateSystem != "" && deviceMap[s.Common.Id] == nil { + if judgeKilometerIsVaild(s.KilometerSystem) && deviceMap[s.Common.Id] == nil { deviceMap[s.Common.Id] = &graphicData.CalculateLink_DevicePosition{ DeviceId: s.Common.Id, Offset: spof + int32(math.Abs(float64(s.KilometerSystem.Kilometer-sppk))), @@ -185,7 +185,7 @@ func getGraphicSectionRefDevices(deviceMap map[string]*graphicData.CalculateLink } // 应答器信息 for _, t := range section.transponders { - if t.KilometerSystem != nil && t.KilometerSystem.CoordinateSystem != "" && deviceMap[t.Common.Id] == nil { + if judgeKilometerIsVaild(t.KilometerSystem) && deviceMap[t.Common.Id] == nil { deviceMap[t.Common.Id] = &graphicData.CalculateLink_DevicePosition{ DeviceId: t.Common.Id, Offset: spof + int32(math.Abs(float64(t.KilometerSystem.Kilometer-sppk))), @@ -210,7 +210,7 @@ func getGraphicTurnoutRefDevices(refVal *graphicData.RelatedRef, deviceMap map[s } // 查看是否存在连接计轴 point := turnout.axlePoints[refVal.DevicePort] - if point != nil && point.KilometerSystem != nil && deviceMap[point.Common.Id] == nil { + if point != nil && judgeKilometerIsVaild(point.KilometerSystem) && deviceMap[point.Common.Id] == nil { deviceMap[point.Common.Id] = &graphicData.CalculateLink_DevicePosition{ DeviceId: point.Common.Id, Offset: offset + int32(math.Abs(float64(point.KilometerSystem.Kilometer-prevKm))), @@ -219,20 +219,18 @@ func getGraphicTurnoutRefDevices(refVal *graphicData.RelatedRef, deviceMap map[s } // 处理道岔上的信号机 signal := turnout.signals[refVal.DevicePort] - if signal != nil { - if signal.KilometerSystem != nil && signal.KilometerSystem.CoordinateSystem != "" && deviceMap[signal.Common.Id] == nil { - deviceMap[signal.Common.Id] = &graphicData.CalculateLink_DevicePosition{ - DeviceId: signal.Common.Id, - Offset: offset + int32(math.Abs(float64(signal.KilometerSystem.Kilometer-prevKm))), - DeviceType: "Signal", - } + if signal != nil && judgeKilometerIsVaild(signal.KilometerSystem) && deviceMap[signal.Common.Id] == nil { + deviceMap[signal.Common.Id] = &graphicData.CalculateLink_DevicePosition{ + DeviceId: signal.Common.Id, + Offset: offset + int32(math.Abs(float64(signal.KilometerSystem.Kilometer-prevKm))), + DeviceType: "Signal", } } // 处理道岔上的应答器 transponders := turnout.transponders[refVal.DevicePort] if transponders != nil { for _, t := range transponders { - if t.KilometerSystem != nil && t.KilometerSystem.CoordinateSystem != "" && deviceMap[t.Common.Id] == nil { + if judgeKilometerIsVaild(t.KilometerSystem) && deviceMap[t.Common.Id] == nil { deviceMap[t.Common.Id] = &graphicData.CalculateLink_DevicePosition{ DeviceId: t.Common.Id, Offset: offset + int32(math.Abs(float64(t.KilometerSystem.Kilometer-prevKm))), @@ -253,10 +251,14 @@ func getGraphicSectionPointRef(section *buildCalcSectionStruct, b bool, defaultR } apoint := section.axlePoints[graphicData.RelatedRef_A] bpoint := section.axlePoints[graphicData.RelatedRef_B] - if apoint == nil || bpoint == nil { + if apoint == nil && bpoint == nil { return defaultRelateRef + } else if apoint != nil && bpoint == nil { + return &graphicData.RelatedRef{DeviceType: graphicData.RelatedRef_AxleCounting, Id: apoint.Common.Id} + } else if apoint == nil && bpoint != nil { + return &graphicData.RelatedRef{DeviceType: graphicData.RelatedRef_AxleCounting, Id: bpoint.Common.Id} } - if apoint.KilometerSystem.Kilometer < bpoint.KilometerSystem.Kilometer && b { + if b { return &graphicData.RelatedRef{DeviceType: graphicData.RelatedRef_AxleCounting, Id: apoint.Common.Id} } else { return &graphicData.RelatedRef{DeviceType: graphicData.RelatedRef_AxleCounting, Id: bpoint.Common.Id} @@ -276,7 +278,7 @@ func getGraphicDataDeviceMap(gd *graphicData.RtssGraphicStorage) (*buildCalcStru for _, t := range gd.Turnouts { var op *graphicData.KilometerSystem for _, k := range t.KilometerSystem { - if k.CoordinateSystem == "MAIN_LINE" && k.Kilometer != 0 { + if judgeKilometerIsVaild(k) { op = k } } @@ -317,6 +319,10 @@ func getGraphicDataDeviceMap(gd *graphicData.RtssGraphicStorage) (*buildCalcStru } // 信号机关联到对应区段或道岔上 for _, s := range gd.Signals { + // 过滤掉没有公里标数据的信号机 + if !judgeKilometerIsVaild(s.KilometerSystem) { + continue + } switch s.RefDev.DeviceType { case graphicData.RelatedRef_Section: gm.SectionMap[s.RefDev.Id].signals = append(gm.SectionMap[s.RefDev.Id].signals, s) @@ -326,6 +332,10 @@ func getGraphicDataDeviceMap(gd *graphicData.RtssGraphicStorage) (*buildCalcStru } // 应答器关联到对应区段或道岔 for _, t := range gd.Transponders { + // 过滤掉没有公里标数据的应答器 + if !judgeKilometerIsVaild(t.KilometerSystem) { + continue + } switch t.TransponderRef.DeviceType { case graphicData.RelatedRef_Section: gm.SectionMap[t.TransponderRef.Id].transponders = append(gm.SectionMap[t.TransponderRef.Id].transponders, t) @@ -335,6 +345,10 @@ func getGraphicDataDeviceMap(gd *graphicData.RtssGraphicStorage) (*buildCalcStru } // 停车标关联到对应区段或道岔 for _, s := range gd.StopPositions { + // 过滤掉没有公里标数据的停车标 + if !judgeKilometerIsVaild(s.KilometerSystem) { + continue + } switch s.RefDev.DeviceType { case graphicData.RelatedRef_Section: gm.SectionMap[s.RefDev.Id].stopPositions = append(gm.SectionMap[s.RefDev.Id].stopPositions, s) @@ -450,14 +464,14 @@ func handleFunc(gm *buildCalcStruct, ref *graphicData.RelatedRef) (int, bool) { case graphicData.RelatedRef_Section: section := gm.SectionMap[ref.Id] point := section.axlePoints[ref.DevicePort] - if point == nil || point.KilometerSystem == nil { + if point == nil || !judgeKilometerIsVaild(point.KilometerSystem) { zap.S().Warnf("区段【%s】【%s】端缺少关联计轴信息", ref.Id, ref.DevicePort.String()) } else { return int(point.KilometerSystem.Kilometer), true } case graphicData.RelatedRef_Turnout: turnout := gm.TurnoutMap[ref.Id] - if turnout.CrossKilometerSystem == nil { + if !judgeKilometerIsVaild(turnout.CrossKilometerSystem) { zap.S().Warnf("道岔【%s】缺少岔心公里标数据", ref.Id) } else { return int(turnout.CrossKilometerSystem.Kilometer), true @@ -483,10 +497,15 @@ func getStartKilometer(gm *buildCalcStruct, ref *graphicData.RelatedRef) (int64, return resultKilometer, 0 case graphicData.RelatedRef_Turnout: turnout := gm.TurnoutMap[ref.Id] - if turnout.CrossKilometerSystem == nil { + if !judgeKilometerIsVaild(turnout.CrossKilometerSystem) { panic(dto.ErrorDto{Code: dto.ArgumentParseError, Message: "道岔岔心无公里标"}) } return turnout.CrossKilometerSystem.Kilometer, 0 } panic(dto.ErrorDto{Code: dto.ArgumentParseError, Message: "错误的设备类型类型"}) } + +// 判断公里标是否有效 +func judgeKilometerIsVaild(k *graphicData.KilometerSystem) bool { + return k != nil && k.CoordinateSystem == "MAIN_LINE" && k.Kilometer != 0 +}