Merge branch 'master' of https://git.code.tencent.com/beijing-rtss-test/bj-rtsts-server-go
# Conflicts: # ats/verify/simulation/simulation_manage.go # ats/verify/simulation/wayside/memory/wayside_memory_map.go
This commit is contained in:
commit
c087aea122
@ -4,8 +4,6 @@ import (
|
||||
"net"
|
||||
"strings"
|
||||
|
||||
"joylink.club/bj-rtsts-server/ats/verify/simulation/wayside/model/device"
|
||||
|
||||
"fmt"
|
||||
"net/http"
|
||||
"strconv"
|
||||
@ -199,8 +197,9 @@ func dynamicsRun(verifySimulation *memory.VerifySimulation) {
|
||||
|
||||
func buildLineBaseInfo(vs *memory.VerifyStructure) *dynamics.LineBaseInfo {
|
||||
var links []*dynamics.Link
|
||||
for _, modeller := range vs.LinkModelMap {
|
||||
link := modeller.(*device.LinkModel)
|
||||
var slopes []*dynamics.Slope
|
||||
var curves []*dynamics.Curve
|
||||
for _, link := range vs.LinkModelMap {
|
||||
id, _ := strconv.Atoi(link.Index)
|
||||
var aTurnoutId int
|
||||
if link.ARelatedSwitchRef.SwitchDevice != nil {
|
||||
@ -219,9 +218,31 @@ func buildLineBaseInfo(vs *memory.VerifyStructure) *dynamics.LineBaseInfo {
|
||||
BRelTurnoutPoint: link.BRelatedSwitchRef.Port.Name(),
|
||||
})
|
||||
}
|
||||
for _, slope := range vs.SlopeModelMap {
|
||||
id, _ := strconv.Atoi(slope.Index)
|
||||
slopes = append(slopes, &dynamics.Slope{
|
||||
ID: int32(id),
|
||||
StartLinkId: slope.StartLinkIndex,
|
||||
StartLinkOffset: slope.StartLinkOffset,
|
||||
EndLinkId: slope.EndLinkIndex,
|
||||
EndLinkOffset: slope.EndLinkOffset,
|
||||
DegreeTrig: slope.DegreeTrig,
|
||||
})
|
||||
}
|
||||
for _, curve := range vs.CurveModelMap {
|
||||
id, _ := strconv.Atoi(curve.Index)
|
||||
curves = append(curves, &dynamics.Curve{
|
||||
ID: int32(id),
|
||||
StartLinkId: curve.StartLinkIndex,
|
||||
StartLinkOffset: curve.StartLinkOffset,
|
||||
EndLinkId: curve.EndLinkIndex,
|
||||
EndLinkOffset: curve.EndLinkOffset,
|
||||
Curvature: curve.Curvature,
|
||||
})
|
||||
}
|
||||
return &dynamics.LineBaseInfo{
|
||||
LinkList: links,
|
||||
SlopeList: nil,
|
||||
CurveList: nil,
|
||||
SlopeList: slopes,
|
||||
CurveList: curves,
|
||||
}
|
||||
}
|
||||
|
@ -23,7 +23,7 @@ import (
|
||||
// 仿真存储集合 ID
|
||||
var graphicDataMap sync.Map
|
||||
|
||||
// 轨旁仿真模型结构,注意:这里的key 为 Index!!!
|
||||
// VerifyStructure 轨旁仿真模型结构
|
||||
type VerifyStructure struct {
|
||||
//计轴检测点设备模型集合,key为索引编号
|
||||
AxlePointDeviceModelMap map[string]face.AxlePointDeviceModeller
|
||||
@ -40,19 +40,28 @@ type VerifyStructure struct {
|
||||
//信号机模型集合,key为索引编号
|
||||
SignalDeviceModelMap map[string]face.SignalDeviceModeller
|
||||
//Link模型集合,key为索引编号
|
||||
LinkModelMap map[int32]face.DeviceModeller
|
||||
LinkModelMap map[int32]*device.LinkModel
|
||||
//坡度模型集合,key为id
|
||||
SlopeModelMap map[string]*section.SlopeModel
|
||||
//曲线模型集合,key为id
|
||||
CurveModelMap map[string]*section.CurveModel
|
||||
//点模型集合,key为id
|
||||
PointMap map[string]*device.PointModel
|
||||
}
|
||||
|
||||
// 设备地图ID对应map结构体(建立关系时便于查找使用),注意:这里的key 为 Common.Id !!!
|
||||
// GraphicInfoMapStructure 设备地图ID对应map结构体(建立关系时便于查找使用)
|
||||
type GraphicInfoMapStructure struct {
|
||||
AxlePointMap map[string]*graphicData.AxleCounting
|
||||
TurnoutMap map[string]*graphicData.Turnout
|
||||
LinkMap map[string]*graphicData.SectionLink
|
||||
SectionLinkMap map[string]*graphicData.SectionLink
|
||||
AxleSectionMap map[string]*graphicData.AxleCountingSection
|
||||
PhysicalSectionMap map[string]*graphicData.Section
|
||||
LogicSectionMap map[string]*graphicData.LogicSection
|
||||
SignalMap map[string]*graphicData.Signal
|
||||
CalcLinkMap map[string]*graphicData.CalculateLink
|
||||
//key-index
|
||||
CalcLinkMap map[int32]*graphicData.CalculateLink
|
||||
//设备在link上的位置。key-设备id
|
||||
DevicePositionMap map[string]*ref.DevicePosition
|
||||
}
|
||||
|
||||
// 计算link、物理区段、道岔相互转换时用到的结构体
|
||||
@ -74,18 +83,21 @@ func PublishMapVerifyStructure(graphic *model.PublishedGi) *VerifyStructure {
|
||||
PhysicalSectionModelMap: make(map[string]face.PhysicalSectionModeller),
|
||||
LogicalSectionModelMap: make(map[string]face.LogicalSectionModeller),
|
||||
SignalDeviceModelMap: make(map[string]face.SignalDeviceModeller),
|
||||
LinkModelMap: make(map[int32]face.DeviceModeller),
|
||||
LinkModelMap: make(map[int32]*device.LinkModel),
|
||||
SlopeModelMap: make(map[string]*section.SlopeModel),
|
||||
CurveModelMap: make(map[string]*section.CurveModel),
|
||||
PointMap: make(map[string]*device.PointModel),
|
||||
}
|
||||
// 地图数据转为map存储,建立关系时方便使用
|
||||
graphicInfoMap := &GraphicInfoMapStructure{
|
||||
AxlePointMap: make(map[string]*graphicData.AxleCounting),
|
||||
TurnoutMap: make(map[string]*graphicData.Turnout),
|
||||
LinkMap: make(map[string]*graphicData.SectionLink),
|
||||
SectionLinkMap: make(map[string]*graphicData.SectionLink),
|
||||
AxleSectionMap: make(map[string]*graphicData.AxleCountingSection),
|
||||
PhysicalSectionMap: make(map[string]*graphicData.Section),
|
||||
LogicSectionMap: make(map[string]*graphicData.LogicSection),
|
||||
SignalMap: make(map[string]*graphicData.Signal),
|
||||
CalcLinkMap: make(map[string]*graphicData.CalculateLink),
|
||||
CalcLinkMap: make(map[int32]*graphicData.CalculateLink),
|
||||
}
|
||||
graphicStorage := &graphicData.RtssGraphicStorage{}
|
||||
proto.Unmarshal(graphic.Proto, graphicStorage)
|
||||
@ -137,8 +149,7 @@ func sectionMapToLink(vm *VerifyStructure, id string, offset int64, runDirection
|
||||
var linkId int32
|
||||
// 获取计轴信息
|
||||
axlePointPositionMap := make(map[string]*ref.DevicePosition)
|
||||
for k, v := range vm.LinkModelMap {
|
||||
lm := v.(*device.LinkModel)
|
||||
for k, lm := range vm.LinkModelMap {
|
||||
for _, p := range lm.DevicePositions {
|
||||
_, ok := p.Device.(*device.AxlePointDeviceModel)
|
||||
if ok && sectionModel.AxlePoints[p.Device.GetIndex()] != nil {
|
||||
@ -192,8 +203,7 @@ func turnoutMapToLink(vm *VerifyStructure, id string, port string, offset int64,
|
||||
var linkId int32
|
||||
var isStart bool
|
||||
Outter:
|
||||
for i, v := range vm.LinkModelMap {
|
||||
lm := v.(*device.LinkModel)
|
||||
for i, lm := range vm.LinkModelMap {
|
||||
linkId = i
|
||||
if lm.ARelatedSwitchRef.SwitchDevice.GetIndex() == turnoutModel.Index && lm.ARelatedSwitchRef.Port.Name() == port {
|
||||
isStart = true
|
||||
@ -238,11 +248,10 @@ Outter:
|
||||
// 根据linkID和link相对偏移量返回区段,道岔偏移量
|
||||
// 设备ID、端口、偏移量、上下行
|
||||
func QueryDeviceByCalcLink(vm *VerifyStructure, id int32, offset int64, up, defaultRunDirection bool) (string, string, int64, bool) {
|
||||
lm := vm.LinkModelMap[id]
|
||||
if lm == nil {
|
||||
linkModel := vm.LinkModelMap[id]
|
||||
if linkModel == nil {
|
||||
panic(dto.ErrorDto{Code: dto.DataNotExist, Message: fmt.Sprintf("未找到link【%d】", id)})
|
||||
}
|
||||
linkModel := lm.(*device.LinkModel)
|
||||
if offset > int64(linkModel.Length) {
|
||||
panic(dto.ErrorDto{Code: dto.DataNotExist, Message: fmt.Sprintf("偏移超出link范围【%d】", id)})
|
||||
}
|
||||
@ -345,26 +354,111 @@ func initGraphicStructure(graphicData *graphicData.RtssGraphicStorage, verifyStr
|
||||
initGraphicLogicSections(graphicData.LogicSections, verifyStructure, graphicDataMap)
|
||||
// 初始化信号机信息
|
||||
initGraphicSignal(graphicData.Signals, verifyStructure, graphicDataMap)
|
||||
// 初始化计算link数据
|
||||
initCalcLink(graphicData.CalculateLink, verifyStructure, graphicDataMap)
|
||||
// 初始化Link信息
|
||||
initLink(graphicData.CalculateLink, verifyStructure, graphicDataMap, graphicData)
|
||||
initLinks(graphicData.CalculateLink, verifyStructure, graphicDataMap)
|
||||
// 初始化坡度和曲线端点
|
||||
initPoints(graphicData, verifyStructure, graphicDataMap)
|
||||
// 初始化坡度
|
||||
initSlopes(graphicData.Slopes, verifyStructure, graphicDataMap)
|
||||
// 初始化曲线
|
||||
initCurves(graphicData.Curvatures, verifyStructure, graphicDataMap)
|
||||
}
|
||||
|
||||
func initLink(links []*graphicData.CalculateLink, vs *VerifyStructure, dataMap *GraphicInfoMapStructure, data *graphicData.RtssGraphicStorage) {
|
||||
axleTurnoutIdMap := make(map[string]face.AxlePointDeviceModeller)
|
||||
func initCurves(curves []*graphicData.Curvature, vs *VerifyStructure, dataMap *GraphicInfoMapStructure) {
|
||||
for _, curve := range curves {
|
||||
startDp := dataMap.DevicePositionMap[curve.RefDeviceId[0]]
|
||||
endDp := dataMap.DevicePositionMap[curve.RefDeviceId[1]]
|
||||
startIndex, _ := strconv.Atoi(startDp.Device.GetIndex())
|
||||
endIndex, _ := strconv.Atoi(endDp.Device.GetIndex())
|
||||
vs.CurveModelMap[curve.Common.Id] = §ion.CurveModel{
|
||||
DeviceModel: face.DeviceModel{
|
||||
GraphicId: curve.GetCommon().GetId(),
|
||||
Index: curve.GetCommon().GetId(),
|
||||
},
|
||||
StartLinkIndex: int32(startIndex),
|
||||
StartLinkOffset: startDp.Offset,
|
||||
EndLinkIndex: int32(endIndex),
|
||||
EndLinkOffset: endDp.Offset,
|
||||
Curvature: curve.CurvatureNumber,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func initSlopes(slopes []*graphicData.Slope, vs *VerifyStructure, dataMap *GraphicInfoMapStructure) {
|
||||
for _, slope := range slopes {
|
||||
startDp := dataMap.DevicePositionMap[slope.RefDeviceId[0]]
|
||||
endDp := dataMap.DevicePositionMap[slope.RefDeviceId[1]]
|
||||
startIndex, _ := strconv.Atoi(startDp.Device.GetIndex())
|
||||
endIndex, _ := strconv.Atoi(endDp.Device.GetIndex())
|
||||
vs.SlopeModelMap[slope.Common.Id] = §ion.SlopeModel{
|
||||
DeviceModel: face.DeviceModel{
|
||||
GraphicId: slope.GetCommon().GetId(),
|
||||
Index: slope.GetCommon().GetId(),
|
||||
},
|
||||
StartLinkIndex: int32(startIndex),
|
||||
StartLinkOffset: startDp.Offset,
|
||||
EndLinkIndex: int32(endIndex),
|
||||
EndLinkOffset: endDp.Offset,
|
||||
DegreeTrig: slope.SlopeNumber,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func initPoints(storage *graphicData.RtssGraphicStorage, vs *VerifyStructure, dataMap *GraphicInfoMapStructure) {
|
||||
for _, slopeKm := range storage.SlopeKiloMarker {
|
||||
vs.PointMap[slopeKm.Common.Id] = &device.PointModel{
|
||||
DeviceModel: face.DeviceModel{
|
||||
GraphicId: slopeKm.Common.Id,
|
||||
Index: slopeKm.Common.Id,
|
||||
},
|
||||
Kms: slopeKm.KilometerSystem,
|
||||
}
|
||||
}
|
||||
for _, curvatureKm := range storage.CurvatureKiloMarker {
|
||||
vs.PointMap[curvatureKm.Common.Id] = &device.PointModel{
|
||||
DeviceModel: face.DeviceModel{
|
||||
GraphicId: curvatureKm.Common.Id,
|
||||
Index: curvatureKm.Common.Id,
|
||||
},
|
||||
Kms: curvatureKm.KilometerSystem,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func initLinks(links []*graphicData.CalculateLink, vs *VerifyStructure, dataMap *GraphicInfoMapStructure) {
|
||||
deviceIdMap := make(map[string]face.DeviceModeller)
|
||||
for _, modeller := range vs.AxlePointDeviceModelMap {
|
||||
axleTurnoutIdMap[modeller.GetGraphicId()] = modeller
|
||||
deviceIdMap[modeller.GetGraphicId()] = modeller
|
||||
}
|
||||
for _, modeller := range vs.SwitchDeviceModelMap {
|
||||
axleTurnoutIdMap[modeller.GetGraphicId()] = modeller
|
||||
deviceIdMap[modeller.GetGraphicId()] = modeller
|
||||
}
|
||||
for _, pointModel := range vs.PointMap {
|
||||
deviceIdMap[pointModel.GetGraphicId()] = pointModel
|
||||
}
|
||||
|
||||
for _, link := range links {
|
||||
sectionLinkMap := make(map[string]*graphicData.RelatedRef)
|
||||
linkModel := &device.LinkModel{
|
||||
DeviceModel: face.DeviceModel{
|
||||
GraphicId: link.Common.Id,
|
||||
Index: strconv.Itoa(int(link.Index)),
|
||||
},
|
||||
Length: link.Length,
|
||||
ARelatedSwitchRef: ref.SwitchRef{
|
||||
SwitchDevice: deviceIdMap[link.ARelatedRef.Id],
|
||||
Port: face.GetPortEnum(int8(link.ARelatedRef.DevicePort)),
|
||||
},
|
||||
BRelatedSwitchRef: ref.SwitchRef{
|
||||
SwitchDevice: deviceIdMap[link.BRelatedRef.Id],
|
||||
Port: face.GetPortEnum(int8(link.BRelatedRef.DevicePort)),
|
||||
},
|
||||
}
|
||||
vs.LinkModelMap[link.Index] = linkModel
|
||||
dataMap.CalcLinkMap[link.Index] = link
|
||||
//构建DevicePosition(DP)切片(暂时仅计轴和道岔)
|
||||
var dps []*ref.DevicePosition
|
||||
for _, dp := range link.DevicePositions {
|
||||
modeller := axleTurnoutIdMap[dp.DeviceId]
|
||||
modeller := deviceIdMap[dp.DeviceId]
|
||||
if modeller == nil {
|
||||
continue
|
||||
}
|
||||
@ -372,51 +466,17 @@ func initLink(links []*graphicData.CalculateLink, vs *VerifyStructure, dataMap *
|
||||
Device: modeller,
|
||||
Offset: dp.Offset,
|
||||
})
|
||||
dataMap.DevicePositionMap[dp.DeviceId] = &ref.DevicePosition{
|
||||
Device: linkModel,
|
||||
Offset: dp.Offset,
|
||||
}
|
||||
}
|
||||
//对DP切片按Offset排序
|
||||
sort.Slice(dps, func(i, j int) bool {
|
||||
return dps[i].Offset < dps[j].Offset
|
||||
})
|
||||
//构建SectionLinkMap
|
||||
for i := 1; i < len(dps); i++ {
|
||||
a := dps[i-1]
|
||||
b := dps[i]
|
||||
aId := a.Device.GetGraphicId()
|
||||
bId := b.Device.GetGraphicId()
|
||||
for _, sl := range data.SectionLinks {
|
||||
if aId == sl.ASimRef.Id && bId == sl.BSimRef.Id {
|
||||
sectionLinkMap[aId] = &graphicData.RelatedRef{
|
||||
DeviceType: 0, //这个字段用不到,所以随便赋值
|
||||
Id: strconv.Itoa(int(sl.Index)), //因为发给前端的是索引,所以这里用索引
|
||||
DevicePort: 0,
|
||||
}
|
||||
} else if aId == sl.BSimRef.Id && bId == sl.ASimRef.Id {
|
||||
sectionLinkMap[aId] = &graphicData.RelatedRef{
|
||||
DeviceType: 0, //这个字段用不到,所以随便赋值
|
||||
Id: strconv.Itoa(int(sl.Index)), //因为发给前端的是索引,所以这里用索引
|
||||
DevicePort: 1,
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
vs.LinkModelMap[link.Index] = &device.LinkModel{
|
||||
DeviceModel: face.DeviceModel{
|
||||
GraphicId: link.Common.Id,
|
||||
Index: strconv.Itoa(int(link.Index)),
|
||||
},
|
||||
Length: link.Length,
|
||||
ARelatedSwitchRef: ref.SwitchRef{
|
||||
SwitchDevice: axleTurnoutIdMap[link.ARelatedRef.Id],
|
||||
Port: face.GetPortEnum(int8(link.ARelatedRef.DevicePort)),
|
||||
},
|
||||
BRelatedSwitchRef: ref.SwitchRef{
|
||||
SwitchDevice: axleTurnoutIdMap[link.BRelatedRef.Id],
|
||||
Port: face.GetPortEnum(int8(link.BRelatedRef.DevicePort)),
|
||||
},
|
||||
DevicePositions: dps,
|
||||
SectionLinkMap: sectionLinkMap,
|
||||
}
|
||||
//赋值
|
||||
linkModel.DevicePositions = dps
|
||||
}
|
||||
}
|
||||
|
||||
@ -456,7 +516,7 @@ func initGraphicTurnout(turnouts []*graphicData.Turnout, data *VerifyStructure,
|
||||
// 初始化link信息
|
||||
func initGraphicLink(links []*graphicData.SectionLink, data *VerifyStructure, graphicDataMap *GraphicInfoMapStructure) {
|
||||
for _, s := range links {
|
||||
graphicDataMap.LinkMap[s.Common.Id] = s
|
||||
graphicDataMap.SectionLinkMap[s.Common.Id] = s
|
||||
id := strconv.Itoa(int(s.Index))
|
||||
data.LinkSectionModelMap[id] = §ion.LinkSectionModel{
|
||||
DeviceModel: face.DeviceModel{
|
||||
@ -538,10 +598,7 @@ func initGraphicSignal(signals []*graphicData.Signal, data *VerifyStructure, gra
|
||||
|
||||
// 初始化计算link数据
|
||||
func initCalcLink(calculateLinks []*graphicData.CalculateLink, verifyStructure *VerifyStructure, graphicDataMap *GraphicInfoMapStructure) {
|
||||
for _, l := range calculateLinks {
|
||||
id := strconv.Itoa(int(l.Index))
|
||||
graphicDataMap.CalcLinkMap[id] = l
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// 构建设备间的关系
|
||||
@ -564,7 +621,7 @@ func buildDeviceRef(graphicData *GraphicInfoMapStructure, verifyStructure *Verif
|
||||
|
||||
// 构建link的关联关系(端点间的轨道)
|
||||
func buildLinkDeviceRef(mapData *GraphicInfoMapStructure, verifyStructure *VerifyStructure) {
|
||||
for _, v := range mapData.LinkMap {
|
||||
for _, v := range mapData.SectionLinkMap {
|
||||
link := (verifyStructure.LinkSectionModelMap[strconv.Itoa(int(v.Index))]).(*section.LinkSectionModel)
|
||||
// 轨道A端端点
|
||||
linkSimRefBuildCommMethod(v.Common.Id, v.ASimRef, mapData, verifyStructure, func(f face.AxlePointDeviceModeller) {
|
||||
@ -625,7 +682,7 @@ func linkRefBuildCommMethod(v *graphicData.SectionLink, mapData *GraphicInfoMapS
|
||||
if r != nil {
|
||||
switch r.DeviceType {
|
||||
case graphicData.RelatedRef_SectionLink:
|
||||
d := mapData.LinkMap[r.Id]
|
||||
d := mapData.SectionLinkMap[r.Id]
|
||||
if d != nil {
|
||||
ls := verifyStructure.LinkSectionModelMap[strconv.Itoa(int(d.Index))]
|
||||
lr(&ref.LinkRef{LinkSection: ls, Port: face.PortEnum(r.DevicePort)})
|
||||
|
@ -1,7 +1,6 @@
|
||||
package device
|
||||
|
||||
import (
|
||||
"joylink.club/bj-rtsts-server/ats/verify/protos/graphicData"
|
||||
"joylink.club/bj-rtsts-server/ats/verify/simulation/wayside/face"
|
||||
"joylink.club/bj-rtsts-server/ats/verify/simulation/wayside/model/ref"
|
||||
)
|
||||
@ -14,8 +13,6 @@ type LinkModel struct {
|
||||
ARelatedSwitchRef ref.SwitchRef
|
||||
//B端连接的道岔端点
|
||||
BRelatedSwitchRef ref.SwitchRef
|
||||
//Link上的设备及位置(将A、B端的道岔也填进来了)(按offset排序)
|
||||
//Link上的设备及位置(包括A、B端的设备)(按offset排序)
|
||||
DevicePositions []*ref.DevicePosition
|
||||
//key-在link上最小偏移量端点设备id,value-SectionLink端点
|
||||
SectionLinkMap map[string]*graphicData.RelatedRef
|
||||
}
|
||||
|
12
ats/verify/simulation/wayside/model/device/point.go
Normal file
12
ats/verify/simulation/wayside/model/device/point.go
Normal file
@ -0,0 +1,12 @@
|
||||
package device
|
||||
|
||||
import (
|
||||
"joylink.club/bj-rtsts-server/ats/verify/protos/graphicData"
|
||||
"joylink.club/bj-rtsts-server/ats/verify/simulation/wayside/face"
|
||||
)
|
||||
|
||||
// PointModel 线上某一点(本来是想添加坡度和曲线端点,但是他俩数据没有区别,故合为一个通用概念)
|
||||
type PointModel struct {
|
||||
face.DeviceModel
|
||||
Kms []*graphicData.KilometerSystem
|
||||
}
|
13
ats/verify/simulation/wayside/model/section/curve_model.go
Normal file
13
ats/verify/simulation/wayside/model/section/curve_model.go
Normal file
@ -0,0 +1,13 @@
|
||||
package section
|
||||
|
||||
import "joylink.club/bj-rtsts-server/ats/verify/simulation/wayside/face"
|
||||
|
||||
type CurveModel struct {
|
||||
face.DeviceModel
|
||||
StartLinkIndex int32
|
||||
StartLinkOffset int32
|
||||
EndLinkIndex int32
|
||||
EndLinkOffset int32
|
||||
//曲率(半径)mm
|
||||
Curvature int32
|
||||
}
|
13
ats/verify/simulation/wayside/model/section/slope_model.go
Normal file
13
ats/verify/simulation/wayside/model/section/slope_model.go
Normal file
@ -0,0 +1,13 @@
|
||||
package section
|
||||
|
||||
import "joylink.club/bj-rtsts-server/ats/verify/simulation/wayside/face"
|
||||
|
||||
type SlopeModel struct {
|
||||
face.DeviceModel
|
||||
StartLinkIndex int32
|
||||
StartLinkOffset int32
|
||||
EndLinkIndex int32
|
||||
EndLinkOffset int32
|
||||
//坡度角的三角函数(应该是sin)*1000
|
||||
DegreeTrig int32
|
||||
}
|
@ -19,8 +19,16 @@ func init() {
|
||||
for true {
|
||||
info := <-trainInfoChan
|
||||
for e := handlerList.Front(); e != nil; e = e.Next() {
|
||||
handler := e.Value.(TrainInfoHandler)
|
||||
handler(info)
|
||||
func() {
|
||||
defer func() {
|
||||
r := recover()
|
||||
if r != nil {
|
||||
zap.S().Errorf("列车信息处理函数报错")
|
||||
}
|
||||
}()
|
||||
handler := e.Value.(TrainInfoHandler)
|
||||
handler(info)
|
||||
}()
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
Loading…
Reference in New Issue
Block a user