[修改]北京12号线计轴通信配置
This commit is contained in:
parent
4bdd91c18b
commit
8a6de531c8
@ -178,9 +178,10 @@ type RsspAxleConfig struct {
|
|||||||
type RsspNetConfig struct {
|
type RsspNetConfig struct {
|
||||||
RemoteIp string `json:"remoteIp" description:"远端IP"`
|
RemoteIp string `json:"remoteIp" description:"远端IP"`
|
||||||
RemotePort int `json:"remotePort" description:"远端端口"`
|
RemotePort int `json:"remotePort" description:"远端端口"`
|
||||||
|
LocalIp string `json:"localIp" description:"本地IP"`
|
||||||
LocalPort int `json:"localPort" description:"本地端口"`
|
LocalPort int `json:"localPort" description:"本地端口"`
|
||||||
SourceAddr string `json:"sourceAddr" description:"源地址(16进制,2字节)"`
|
RemoteAddr string `json:"sourceAddr" description:"联锁地址(16进制,2字节)"`
|
||||||
TargetAddr string `json:"targetAddr" description:"目的地址(16进制,2字节)"`
|
LocalAddr string `json:"targetAddr" description:"计轴地址(16进制,2字节)"`
|
||||||
Sid1 string `json:"sid1" description:"联锁SID_1(16进制,4字节)"`
|
Sid1 string `json:"sid1" description:"联锁SID_1(16进制,4字节)"`
|
||||||
Sid2 string `json:"sid2" description:"联锁SID_2(16进制,4字节)"`
|
Sid2 string `json:"sid2" description:"联锁SID_2(16进制,4字节)"`
|
||||||
LocalSid1 string `json:"remoteSid" description:"计轴SID_1(16进制,4字节)"`
|
LocalSid1 string `json:"remoteSid" description:"计轴SID_1(16进制,4字节)"`
|
||||||
|
44
third_party/axle_device/beijing12/service.go
vendored
44
third_party/axle_device/beijing12/service.go
vendored
@ -38,8 +38,8 @@ type serviceContext struct {
|
|||||||
cancelFunc context.CancelFunc
|
cancelFunc context.CancelFunc
|
||||||
ciSectionIndexConfigs []*proto.CiSectionCodePoint
|
ciSectionIndexConfigs []*proto.CiSectionCodePoint
|
||||||
|
|
||||||
sourceAddr uint16 //源地址 从配置中的16进制字符串转来的
|
remoteAddr uint16 //联锁地址 从配置中的16进制字符串转来的
|
||||||
targetAddr uint16 //目的地址 从配置中的16进制字符串转来的
|
localAddr uint16 //计轴地址 从配置中的16进制字符串转来的
|
||||||
sid1 uint32 //联锁SID1 从配置中的16进制字符串转来的
|
sid1 uint32 //联锁SID1 从配置中的16进制字符串转来的
|
||||||
sid2 uint32 //联锁SID2 从配置中的16进制字符串转来的
|
sid2 uint32 //联锁SID2 从配置中的16进制字符串转来的
|
||||||
localSid1 uint32 //计轴SID1 从配置中的16进制字符串转来的
|
localSid1 uint32 //计轴SID1 从配置中的16进制字符串转来的
|
||||||
@ -78,13 +78,13 @@ func Start(simulation *memory.VerifySimulation) {
|
|||||||
logger().Warn(fmt.Sprintf("集中站[%s]无区段编码数据,服务不启动", rsspConfig.StationCode))
|
logger().Warn(fmt.Sprintf("集中站[%s]无区段编码数据,服务不启动", rsspConfig.StationCode))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
sourceAddr, err := strconv.ParseUint(rsspConfig.NetAConfig.SourceAddr, 16, 16)
|
sourceAddr, err := strconv.ParseUint(rsspConfig.NetAConfig.RemoteAddr, 16, 16)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(sys_error.New(fmt.Sprintf("%s集中站[%s]解析源地址[%s]出错", logTag, rsspConfig.StationCode, rsspConfig.NetAConfig.SourceAddr)))
|
panic(sys_error.New(fmt.Sprintf("%s集中站[%s]解析源地址[%s]出错", logTag, rsspConfig.StationCode, rsspConfig.NetAConfig.RemoteAddr)))
|
||||||
}
|
}
|
||||||
targetAddr, err := strconv.ParseUint(rsspConfig.NetAConfig.TargetAddr, 16, 16)
|
targetAddr, err := strconv.ParseUint(rsspConfig.NetAConfig.LocalAddr, 16, 16)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(sys_error.New(fmt.Sprintf("%s集中站[%s]解析目的地址[%s]出错", logTag, rsspConfig.StationCode, rsspConfig.NetAConfig.TargetAddr)))
|
panic(sys_error.New(fmt.Sprintf("%s集中站[%s]解析目的地址[%s]出错", logTag, rsspConfig.StationCode, rsspConfig.NetAConfig.LocalAddr)))
|
||||||
}
|
}
|
||||||
sid1, err := strconv.ParseUint(rsspConfig.NetAConfig.Sid1, 16, 32)
|
sid1, err := strconv.ParseUint(rsspConfig.NetAConfig.Sid1, 16, 32)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -116,8 +116,8 @@ func Start(simulation *memory.VerifySimulation) {
|
|||||||
sim: simulation,
|
sim: simulation,
|
||||||
config: rsspConfig,
|
config: rsspConfig,
|
||||||
ciSectionIndexConfigs: ref.SectionCodePoints,
|
ciSectionIndexConfigs: ref.SectionCodePoints,
|
||||||
sourceAddr: uint16(sourceAddr),
|
remoteAddr: uint16(sourceAddr),
|
||||||
targetAddr: uint16(targetAddr),
|
localAddr: uint16(targetAddr),
|
||||||
sid1: uint32(sid1),
|
sid1: uint32(sid1),
|
||||||
sid2: uint32(sid2),
|
sid2: uint32(sid2),
|
||||||
localSid1: uint32(localSid1),
|
localSid1: uint32(localSid1),
|
||||||
@ -130,7 +130,7 @@ func Start(simulation *memory.VerifySimulation) {
|
|||||||
lfsr2: lfsr{value: uint32(localSid2)},
|
lfsr2: lfsr{value: uint32(localSid2)},
|
||||||
}
|
}
|
||||||
netAConfig := rsspConfig.NetAConfig
|
netAConfig := rsspConfig.NetAConfig
|
||||||
server := udp.NewServer(fmt.Sprintf(":%d", netAConfig.LocalPort), func(b []byte) {
|
server := udp.NewServer(fmt.Sprintf("%s:%d", netAConfig.LocalIp, netAConfig.LocalPort), func(b []byte) {
|
||||||
msgChan <- b
|
msgChan <- b
|
||||||
})
|
})
|
||||||
client := udp.NewClient(fmt.Sprintf("%s:%d", netAConfig.RemoteIp, netAConfig.RemotePort))
|
client := udp.NewClient(fmt.Sprintf("%s:%d", netAConfig.RemoteIp, netAConfig.RemotePort))
|
||||||
@ -179,7 +179,7 @@ func (s *serviceContext) runCollectTask(ctx context.Context) {
|
|||||||
s.runCollectTask(ctx)
|
s.runCollectTask(ctx)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
for range time.Tick(time.Millisecond * time.Duration(s.config.NetAConfig.Period)) {
|
for range time.Tick(time.Millisecond * time.Duration(s.config.NetAConfig.Period) * time.Millisecond) {
|
||||||
select {
|
select {
|
||||||
case <-ctx.Done():
|
case <-ctx.Done():
|
||||||
return
|
return
|
||||||
@ -250,8 +250,8 @@ func (s *serviceContext) collect() *msg.RsdMsgBuilder {
|
|||||||
MsgHeader: msg.MsgHeader{
|
MsgHeader: msg.MsgHeader{
|
||||||
ProtocolType: msg.ProtocolType_Sync,
|
ProtocolType: msg.ProtocolType_Sync,
|
||||||
MessageType: msg.MessageType_A,
|
MessageType: msg.MessageType_A,
|
||||||
SourceAddr: s.sourceAddr,
|
SourceAddr: s.localAddr,
|
||||||
TargetAddr: s.targetAddr,
|
TargetAddr: s.remoteAddr,
|
||||||
},
|
},
|
||||||
SeqNum: s.seqNum,
|
SeqNum: s.seqNum,
|
||||||
Svc1: s.calculateSvc1(userData),
|
Svc1: s.calculateSvc1(userData),
|
||||||
@ -292,6 +292,8 @@ func (s *serviceContext) handleRsdMsg(data []byte) {
|
|||||||
return
|
return
|
||||||
} else if validateResult == 2 {
|
} else if validateResult == 2 {
|
||||||
//开启时序校正流程
|
//开启时序校正流程
|
||||||
|
logger().Error("时序校验失败,开始时序校正")
|
||||||
|
return
|
||||||
}
|
}
|
||||||
//流程处理
|
//流程处理
|
||||||
cmdInfos := msg.CmdInfos{}
|
cmdInfos := msg.CmdInfos{}
|
||||||
@ -331,8 +333,8 @@ func (s *serviceContext) handleSseMsg(data []byte) {
|
|||||||
MsgHeader: msg.MsgHeader{
|
MsgHeader: msg.MsgHeader{
|
||||||
ProtocolType: msg.ProtocolType_Sync,
|
ProtocolType: msg.ProtocolType_Sync,
|
||||||
MessageType: msg.MessageType_SSR,
|
MessageType: msg.MessageType_SSR,
|
||||||
SourceAddr: s.sourceAddr,
|
SourceAddr: s.remoteAddr,
|
||||||
TargetAddr: s.targetAddr,
|
TargetAddr: s.localAddr,
|
||||||
},
|
},
|
||||||
SeqNumSsr: s.seqNum,
|
SeqNumSsr: s.seqNum,
|
||||||
SeqNumSse: sseMsg.SeqNum,
|
SeqNumSse: sseMsg.SeqNum,
|
||||||
@ -371,8 +373,8 @@ func (s *serviceContext) startSeeProgress() {
|
|||||||
MsgHeader: msg.MsgHeader{
|
MsgHeader: msg.MsgHeader{
|
||||||
ProtocolType: msg.ProtocolType_Sync,
|
ProtocolType: msg.ProtocolType_Sync,
|
||||||
MessageType: msg.MessageType_SSE,
|
MessageType: msg.MessageType_SSE,
|
||||||
SourceAddr: s.sourceAddr,
|
SourceAddr: s.remoteAddr,
|
||||||
TargetAddr: s.targetAddr,
|
TargetAddr: s.localAddr,
|
||||||
},
|
},
|
||||||
SeqNum: s.seqNum,
|
SeqNum: s.seqNum,
|
||||||
SeqEnq1: s.calculateSeqEnq1(),
|
SeqEnq1: s.calculateSeqEnq1(),
|
||||||
@ -390,14 +392,12 @@ func (s *serviceContext) startSeeProgress() {
|
|||||||
// 校验RSD消息
|
// 校验RSD消息
|
||||||
// return 0-时序校验之外的失败 1-成功 2-时序异常
|
// return 0-时序校验之外的失败 1-成功 2-时序异常
|
||||||
func (s *serviceContext) validateRsdMsg(rsdMsg *msg.RsdMsg) int {
|
func (s *serviceContext) validateRsdMsg(rsdMsg *msg.RsdMsg) int {
|
||||||
sourceAddr, _ := strconv.ParseUint(s.config.NetAConfig.SourceAddr, 16, 16)
|
if rsdMsg.SourceAddr != s.remoteAddr {
|
||||||
if rsdMsg.SourceAddr != uint16(sourceAddr) {
|
logger().Error(fmt.Sprintf("源地址[%x]不正确[%s]", rsdMsg.SourceAddr, s.config.NetAConfig.RemoteAddr))
|
||||||
logger().Error(fmt.Sprintf("源地址[%x]不正确[%s]", rsdMsg.SourceAddr, s.config.NetAConfig.SourceAddr))
|
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
targetAddr, _ := strconv.ParseUint(s.config.NetAConfig.TargetAddr, 16, 16)
|
if rsdMsg.TargetAddr != s.localAddr {
|
||||||
if rsdMsg.TargetAddr != uint16(targetAddr) {
|
logger().Error(fmt.Sprintf("目的地址[%x]不正确[%s]", rsdMsg.TargetAddr, s.config.NetAConfig.LocalAddr))
|
||||||
logger().Error(fmt.Sprintf("目的地址[%x]不正确[%s]", rsdMsg.TargetAddr, s.config.NetAConfig.TargetAddr))
|
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
if len(rsdMsg.UserData) != len(s.ciSectionIndexConfigs) {
|
if len(rsdMsg.UserData) != len(s.ciSectionIndexConfigs) {
|
||||||
|
@ -146,16 +146,16 @@ func filterOtherLineDevice(data *data_proto.RtssGraphicStorage) {
|
|||||||
for _, d := range data.Section {
|
for _, d := range data.Section {
|
||||||
did := GetMapElementId(d.Common)
|
did := GetMapElementId(d.Common)
|
||||||
if otherDeviceIdMap[did] {
|
if otherDeviceIdMap[did] {
|
||||||
slog.Warn("区段[id:%v][code:%s]设备是其他线路设备已过滤", did, d.Code)
|
slog.Warn(fmt.Sprintf("区段[id:%v][code:%s]设备是其他线路设备已过滤", did, d.Code))
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if d.PaRef != nil && otherDeviceIdMap[d.PaRef.Id] {
|
if d.PaRef != nil && otherDeviceIdMap[d.PaRef.Id] {
|
||||||
d.PaRef = nil
|
d.PaRef = nil
|
||||||
slog.Warn("区段[id:%v][code:%s]设备A端是其他线路设备已置空", did, d.Code)
|
slog.Warn(fmt.Sprintf("区段[id:%v][code:%s]设备A端是其他线路设备已置空", did, d.Code))
|
||||||
}
|
}
|
||||||
if d.PbRef != nil && otherDeviceIdMap[d.PbRef.Id] {
|
if d.PbRef != nil && otherDeviceIdMap[d.PbRef.Id] {
|
||||||
d.PbRef = nil
|
d.PbRef = nil
|
||||||
slog.Warn("区段[id:%v][code:%s]设备B端是其他线路设备已置空", did, d.Code)
|
slog.Warn(fmt.Sprintf("区段[id:%v][code:%s]设备B端是其他线路设备已置空", did, d.Code))
|
||||||
}
|
}
|
||||||
var acs []uint32
|
var acs []uint32
|
||||||
for _, id := range d.AxleCountings {
|
for _, id := range d.AxleCountings {
|
||||||
@ -176,7 +176,7 @@ func filterOtherLineDevice(data *data_proto.RtssGraphicStorage) {
|
|||||||
for _, d := range data.AxleCountings {
|
for _, d := range data.AxleCountings {
|
||||||
did := GetMapElementId(d.Common)
|
did := GetMapElementId(d.Common)
|
||||||
if otherDeviceIdMap[did] {
|
if otherDeviceIdMap[did] {
|
||||||
slog.Warn("计轴[id:%v][code:%s]设备其他线路设备已过滤", did, d.Code)
|
slog.Warn(fmt.Sprintf("计轴[id:%v][code:%s]设备其他线路设备已过滤", did, d.Code))
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
var refs []*data_proto.RelatedRef
|
var refs []*data_proto.RelatedRef
|
||||||
@ -195,20 +195,20 @@ func filterOtherLineDevice(data *data_proto.RtssGraphicStorage) {
|
|||||||
for _, d := range data.Turnouts {
|
for _, d := range data.Turnouts {
|
||||||
did := GetMapElementId(d.Common)
|
did := GetMapElementId(d.Common)
|
||||||
if otherDeviceIdMap[did] {
|
if otherDeviceIdMap[did] {
|
||||||
slog.Warn("道岔[id:%v][code:%s]设备其他线路设备已过滤", did, d.Code)
|
slog.Warn(fmt.Sprintf("道岔[id:%v][code:%s]设备其他线路设备已过滤", did, d.Code))
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if d.PaRef != nil && otherDeviceIdMap[d.PaRef.Id] {
|
if d.PaRef != nil && otherDeviceIdMap[d.PaRef.Id] {
|
||||||
d.PaRef = nil
|
d.PaRef = nil
|
||||||
slog.Warn("道岔[id:%v][code:%s]设备A端是其他线路设备已置空", did, d.Code)
|
slog.Warn(fmt.Sprintf("道岔[id:%v][code:%s]设备A端是其他线路设备已置空", did, d.Code))
|
||||||
}
|
}
|
||||||
if d.PbRef != nil && otherDeviceIdMap[d.PbRef.Id] {
|
if d.PbRef != nil && otherDeviceIdMap[d.PbRef.Id] {
|
||||||
d.PbRef = nil
|
d.PbRef = nil
|
||||||
slog.Warn("道岔[id:%v][code:%s]设备B端是其他线路设备已置空", did, d.Code)
|
slog.Warn(fmt.Sprintf("道岔[id:%v][code:%s]设备B端是其他线路设备已置空", did, d.Code))
|
||||||
}
|
}
|
||||||
if d.PcRef != nil && otherDeviceIdMap[d.PcRef.Id] {
|
if d.PcRef != nil && otherDeviceIdMap[d.PcRef.Id] {
|
||||||
d.PcRef = nil
|
d.PcRef = nil
|
||||||
slog.Warn("道岔[id:%v][code:%s]设备C端是其他线路设备已置空", did, d.Code)
|
slog.Warn(fmt.Sprintf("道岔[id:%v][code:%s]设备C端是其他线路设备已置空", did, d.Code))
|
||||||
}
|
}
|
||||||
if d.PaTrackSectionId != 0 && otherDeviceIdMap[d.PaTrackSectionId] {
|
if d.PaTrackSectionId != 0 && otherDeviceIdMap[d.PaTrackSectionId] {
|
||||||
d.PaTrackSectionId = 0
|
d.PaTrackSectionId = 0
|
||||||
@ -227,7 +227,7 @@ func filterOtherLineDevice(data *data_proto.RtssGraphicStorage) {
|
|||||||
for _, d := range data.Signals {
|
for _, d := range data.Signals {
|
||||||
did := GetMapElementId(d.Common)
|
did := GetMapElementId(d.Common)
|
||||||
if otherDeviceIdMap[did] {
|
if otherDeviceIdMap[did] {
|
||||||
slog.Warn("信号机[id:%v][code:%s]设备其他线路设备已过滤", did, d.Code)
|
slog.Warn(fmt.Sprintf("信号机[id:%v][code:%s]设备其他线路设备已过滤", did, d.Code))
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
signals = append(signals, d)
|
signals = append(signals, d)
|
||||||
@ -238,7 +238,7 @@ func filterOtherLineDevice(data *data_proto.RtssGraphicStorage) {
|
|||||||
for _, d := range data.Transponders {
|
for _, d := range data.Transponders {
|
||||||
did := GetMapElementId(d.Common)
|
did := GetMapElementId(d.Common)
|
||||||
if otherDeviceIdMap[did] {
|
if otherDeviceIdMap[did] {
|
||||||
slog.Warn("应答器[id:%v][code:%s]设备其他线路设备已过滤", did, d.Code)
|
slog.Warn(fmt.Sprintf("应答器[id:%v][code:%s]设备其他线路设备已过滤", did, d.Code))
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
transponders = append(transponders, d)
|
transponders = append(transponders, d)
|
||||||
|
Loading…
Reference in New Issue
Block a user