Compare commits
No commits in common. "cc71c128cfad465e2aee999d2a464c5fdea5d400" and "f43de7bf7113a7cc3f6ee5f9ec6f52ec35654bd1" have entirely different histories.
cc71c128cf
...
f43de7bf71
1
third_party/interlock/beijing11/msg.go
vendored
1
third_party/interlock/beijing11/msg.go
vendored
@ -11,6 +11,7 @@ const ( //不知道对不对,问也不回,先瞎写吧
|
|||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
SignalAspect_No = 0x99 //灭灯,这个值目前未知,先用一个应该没被使用的值占位
|
||||||
SignalAspect_H = 0x01 //红灯
|
SignalAspect_H = 0x01 //红灯
|
||||||
SignalAspect_L = 0x04 //绿灯
|
SignalAspect_L = 0x04 //绿灯
|
||||||
SignalAspect_U = 0x02 //黄灯
|
SignalAspect_U = 0x02 //黄灯
|
||||||
|
4
third_party/interlock/beijing11/msg_test.go
vendored
4
third_party/interlock/beijing11/msg_test.go
vendored
@ -9,7 +9,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func TestFromInterlockFrame_Decode(t *testing.T) {
|
func TestFromInterlockFrame_Decode(t *testing.T) {
|
||||||
str := "58bea4c65e0e583f5bdedc310800450000c949950000801100003d0b0a0d3d0b7814413c40d800b5fcfd8200a63c0363010003000400000500000900000200040000080000020004aaaa0008aaaa0000000f000d01000e01000f060010060021060023010011060012060026060027010013060014010022060024060025010010001300001400001500001600001700001800001900001a00002c00002d00002e00002f00003000003100003200003300000000000004000daaaa000eaaaa000faaaa0010aaaa0000000000000000000000007a91cfc2"
|
str := "58bea4c65e0e583f5bdedc310800450000c9d0770000801100003d0b0a0d3d0b7814413c40d800b5fcfd8200a63c0363010003000400000500000900000200040000080000020004aaaa0008aaaa0000000f000d06000e01000f060010060021060023060011060012060026060027010013060014010022060024060025060010001300001400001500001600001700001800001900001a00002c00002d00002e00002f00003000003100003200003300000000000004000daaaa000eaaaa000faaaa0010aaaa00000000000000000000000058f24545"
|
||||||
data, err := hex.DecodeString(str)
|
data, err := hex.DecodeString(str)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
@ -112,7 +112,7 @@ func TestFromInterlockFrame_Decode(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestToInterlockFrame_Decode(t *testing.T) {
|
func TestToInterlockFrame_Decode(t *testing.T) {
|
||||||
str := "583f5bdedc315871778a9d89080045000172f6950000801146ae3d0b78143d0b0a0d40d8413c015ef35583014f63013c0200030004010005010009010006000202eeaaaaaa000302eeaaaaaa000402eeaaaaaa000602eeaaaaaa000702eeaaaaaa000802eeaaaaaa00060002aa000003aa000004aa000006aa000007aa000008aa000000001b000806000901000a06000b06000c06000d06000e01000f06001006001106001206001306001401001c01001d06001e01001f06002006002106002206002306002406002506002606002701002801002b01001e000b00000c00000d00000e00000f00001000001100001200001300001400001500001600001700001800001900001a00002600002700002800002900002a00002b00002c00002d00002e00002f0000300000310000320000330000000000000c0005aaff0006aaff0007aaff0008aaff0009aaff000aaaff000baaff000caaff000daaff000eaaff000faaff0010aa0400000100000000000000000000000000000000a0313220"
|
str := "583f5bdedc3158bea4c65e0e080045000172b52c4000401188173d0b78143d0b0a0d40d8413c015ebe7f83014f63013c0200030004010005010009020006000202eeaaaaaa000302eeaaaaaa000402eeaaaaaa000602eeaaaaaa000702eeaaaaaa000802eeaaaaaa00060002aaaa0003aaaa0004aaaa0006aaaa0007aaaa0008aaaa0000001b000800000900000a00000b00000c00000d06000e01000f06001006001106001206001306001401001c00001d00001e00001f00002000002106002206002306002406002506002606002701002800002b00001e000b00000c00000d00000e00000f00001000001100001200001300001400001500001600001700001800001900001a00002600002700002800002900002a00002b00002c00002d00002e00002f0000300000310000320000330000000000000c0005aaaa0006aaaa0007aaaa0008aaaa0009aaaa000aaaaa000baaaa000caaaa000daaaa000eaaaa000faaaa0010aaaa00000100000000000000000000000000000000328ef0af"
|
||||||
data, err := hex.DecodeString(str)
|
data, err := hex.DecodeString(str)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
|
157
third_party/interlock/beijing11/service.go
vendored
157
third_party/interlock/beijing11/service.go
vendored
@ -203,6 +203,9 @@ func (s *serviceContext) handleDriveMsg(data []byte) {
|
|||||||
if entry.HasComponent(component.Signal2XH1ElectronicType) { // 2XH1信号机
|
if entry.HasComponent(component.Signal2XH1ElectronicType) { // 2XH1信号机
|
||||||
signal2XH1 := component.Signal2XH1ElectronicType.Get(entry)
|
signal2XH1 := component.Signal2XH1ElectronicType.Get(entry)
|
||||||
switch cmd.Cmd {
|
switch cmd.Cmd {
|
||||||
|
case SignalAspect_No:
|
||||||
|
wd.SetQdBit(component.UidType.Get(signal2XH1.Z2XH1_DDJ).Id, true)
|
||||||
|
wd.SetQdBit(component.UidType.Get(signal2XH1.Z2XH1_LXJ).Id, false)
|
||||||
case SignalAspect_H:
|
case SignalAspect_H:
|
||||||
wd.SetQdBit(component.UidType.Get(signal2XH1.Z2XH1_DDJ).Id, false)
|
wd.SetQdBit(component.UidType.Get(signal2XH1.Z2XH1_DDJ).Id, false)
|
||||||
wd.SetQdBit(component.UidType.Get(signal2XH1.Z2XH1_LXJ).Id, false)
|
wd.SetQdBit(component.UidType.Get(signal2XH1.Z2XH1_LXJ).Id, false)
|
||||||
@ -210,12 +213,16 @@ func (s *serviceContext) handleDriveMsg(data []byte) {
|
|||||||
wd.SetQdBit(component.UidType.Get(signal2XH1.Z2XH1_DDJ).Id, false)
|
wd.SetQdBit(component.UidType.Get(signal2XH1.Z2XH1_DDJ).Id, false)
|
||||||
wd.SetQdBit(component.UidType.Get(signal2XH1.Z2XH1_LXJ).Id, true)
|
wd.SetQdBit(component.UidType.Get(signal2XH1.Z2XH1_LXJ).Id, true)
|
||||||
default:
|
default:
|
||||||
wd.SetQdBit(component.UidType.Get(signal2XH1.Z2XH1_DDJ).Id, true)
|
logger().Error(fmt.Sprintf("信号机[%s]无法开放[%x]信号", uid, cmd.Cmd))
|
||||||
wd.SetQdBit(component.UidType.Get(signal2XH1.Z2XH1_LXJ).Id, false)
|
|
||||||
}
|
}
|
||||||
} else if entry.HasComponent(component.Signal3XH1ElectronicType) { // 3XH1信号机
|
} else if entry.HasComponent(component.Signal3XH1ElectronicType) { // 3XH1信号机
|
||||||
signal3XH1 := component.Signal3XH1ElectronicType.Get(entry)
|
signal3XH1 := component.Signal3XH1ElectronicType.Get(entry)
|
||||||
switch cmd.Cmd {
|
switch cmd.Cmd {
|
||||||
|
case SignalAspect_No:
|
||||||
|
wd.SetQdBit(component.UidType.Get(signal3XH1.Z3XH1_DDJ).Id, true)
|
||||||
|
wd.SetQdBit(component.UidType.Get(signal3XH1.Z3XH1_LXJ).Id, false)
|
||||||
|
wd.SetQdBit(component.UidType.Get(signal3XH1.Z3XH1_ZXJ).Id, false)
|
||||||
|
wd.SetQdBit(component.UidType.Get(signal3XH1.Z3XH1_YXJ).Id, false)
|
||||||
case SignalAspect_H:
|
case SignalAspect_H:
|
||||||
wd.SetQdBit(component.UidType.Get(signal3XH1.Z3XH1_DDJ).Id, false)
|
wd.SetQdBit(component.UidType.Get(signal3XH1.Z3XH1_DDJ).Id, false)
|
||||||
wd.SetQdBit(component.UidType.Get(signal3XH1.Z3XH1_LXJ).Id, false)
|
wd.SetQdBit(component.UidType.Get(signal3XH1.Z3XH1_LXJ).Id, false)
|
||||||
@ -237,14 +244,15 @@ func (s *serviceContext) handleDriveMsg(data []byte) {
|
|||||||
wd.SetQdBit(component.UidType.Get(signal3XH1.Z3XH1_ZXJ).Id, false)
|
wd.SetQdBit(component.UidType.Get(signal3XH1.Z3XH1_ZXJ).Id, false)
|
||||||
wd.SetQdBit(component.UidType.Get(signal3XH1.Z3XH1_YXJ).Id, true)
|
wd.SetQdBit(component.UidType.Get(signal3XH1.Z3XH1_YXJ).Id, true)
|
||||||
default:
|
default:
|
||||||
wd.SetQdBit(component.UidType.Get(signal3XH1.Z3XH1_DDJ).Id, true)
|
logger().Error(fmt.Sprintf("信号机[%s]无法开放[%x]信号", uid, cmd.Cmd))
|
||||||
wd.SetQdBit(component.UidType.Get(signal3XH1.Z3XH1_LXJ).Id, false)
|
|
||||||
wd.SetQdBit(component.UidType.Get(signal3XH1.Z3XH1_ZXJ).Id, false)
|
|
||||||
wd.SetQdBit(component.UidType.Get(signal3XH1.Z3XH1_YXJ).Id, false)
|
|
||||||
}
|
}
|
||||||
} else if entry.HasComponent(component.Signal3XH2ElectronicType) { // 3XH2信号机
|
} else if entry.HasComponent(component.Signal3XH2ElectronicType) { // 3XH2信号机
|
||||||
signal3XH2 := component.Signal3XH2ElectronicType.Get(entry)
|
signal3XH2 := component.Signal3XH2ElectronicType.Get(entry)
|
||||||
switch cmd.Cmd {
|
switch cmd.Cmd {
|
||||||
|
case SignalAspect_No:
|
||||||
|
wd.SetQdBit(component.UidType.Get(signal3XH2.Z3XH2_DDJ).Id, true)
|
||||||
|
wd.SetQdBit(component.UidType.Get(signal3XH2.Z3XH2_LXJ).Id, false)
|
||||||
|
wd.SetQdBit(component.UidType.Get(signal3XH2.Z3XH2_YXJ).Id, false)
|
||||||
case SignalAspect_H:
|
case SignalAspect_H:
|
||||||
wd.SetQdBit(component.UidType.Get(signal3XH2.Z3XH2_DDJ).Id, false)
|
wd.SetQdBit(component.UidType.Get(signal3XH2.Z3XH2_DDJ).Id, false)
|
||||||
wd.SetQdBit(component.UidType.Get(signal3XH2.Z3XH2_LXJ).Id, false)
|
wd.SetQdBit(component.UidType.Get(signal3XH2.Z3XH2_LXJ).Id, false)
|
||||||
@ -258,13 +266,15 @@ func (s *serviceContext) handleDriveMsg(data []byte) {
|
|||||||
wd.SetQdBit(component.UidType.Get(signal3XH2.Z3XH2_LXJ).Id, false)
|
wd.SetQdBit(component.UidType.Get(signal3XH2.Z3XH2_LXJ).Id, false)
|
||||||
wd.SetQdBit(component.UidType.Get(signal3XH2.Z3XH2_YXJ).Id, true)
|
wd.SetQdBit(component.UidType.Get(signal3XH2.Z3XH2_YXJ).Id, true)
|
||||||
default:
|
default:
|
||||||
wd.SetQdBit(component.UidType.Get(signal3XH2.Z3XH2_DDJ).Id, true)
|
logger().Error(fmt.Sprintf("信号机[%s]无法开放[%x]信号", uid, cmd.Cmd))
|
||||||
wd.SetQdBit(component.UidType.Get(signal3XH2.Z3XH2_LXJ).Id, false)
|
|
||||||
wd.SetQdBit(component.UidType.Get(signal3XH2.Z3XH2_YXJ).Id, false)
|
|
||||||
}
|
}
|
||||||
} else if entry.HasComponent(component.Signal3XH3ElectronicType) { // 3XH3信号机
|
} else if entry.HasComponent(component.Signal3XH3ElectronicType) { // 3XH3信号机
|
||||||
signal3XH3 := component.Signal3XH3ElectronicType.Get(entry)
|
signal3XH3 := component.Signal3XH3ElectronicType.Get(entry)
|
||||||
switch cmd.Cmd {
|
switch cmd.Cmd {
|
||||||
|
case SignalAspect_No:
|
||||||
|
wd.SetQdBit(component.UidType.Get(signal3XH3.Z3XH3_DDJ).Id, true)
|
||||||
|
wd.SetQdBit(component.UidType.Get(signal3XH3.Z3XH3_LXJ).Id, false)
|
||||||
|
wd.SetQdBit(component.UidType.Get(signal3XH3.Z3XH3_YXJ).Id, false)
|
||||||
case SignalAspect_H:
|
case SignalAspect_H:
|
||||||
wd.SetQdBit(component.UidType.Get(signal3XH3.Z3XH3_DDJ).Id, false)
|
wd.SetQdBit(component.UidType.Get(signal3XH3.Z3XH3_DDJ).Id, false)
|
||||||
wd.SetQdBit(component.UidType.Get(signal3XH3.Z3XH3_LXJ).Id, false)
|
wd.SetQdBit(component.UidType.Get(signal3XH3.Z3XH3_LXJ).Id, false)
|
||||||
@ -278,13 +288,15 @@ func (s *serviceContext) handleDriveMsg(data []byte) {
|
|||||||
wd.SetQdBit(component.UidType.Get(signal3XH3.Z3XH3_LXJ).Id, false)
|
wd.SetQdBit(component.UidType.Get(signal3XH3.Z3XH3_LXJ).Id, false)
|
||||||
wd.SetQdBit(component.UidType.Get(signal3XH3.Z3XH3_YXJ).Id, true)
|
wd.SetQdBit(component.UidType.Get(signal3XH3.Z3XH3_YXJ).Id, true)
|
||||||
default:
|
default:
|
||||||
wd.SetQdBit(component.UidType.Get(signal3XH3.Z3XH3_DDJ).Id, true)
|
logger().Error(fmt.Sprintf("信号机[%s]无法开放[%x]信号", uid, cmd.Cmd))
|
||||||
wd.SetQdBit(component.UidType.Get(signal3XH3.Z3XH3_LXJ).Id, false)
|
|
||||||
wd.SetQdBit(component.UidType.Get(signal3XH3.Z3XH3_YXJ).Id, false)
|
|
||||||
}
|
}
|
||||||
} else if entry.HasComponent(component.Signal3XH4ElectronicType) { // 3XH4信号机
|
} else if entry.HasComponent(component.Signal3XH4ElectronicType) { // 3XH4信号机
|
||||||
signal3XH4 := component.Signal3XH4ElectronicType.Get(entry)
|
signal3XH4 := component.Signal3XH4ElectronicType.Get(entry)
|
||||||
switch cmd.Cmd {
|
switch cmd.Cmd {
|
||||||
|
case SignalAspect_No:
|
||||||
|
wd.SetQdBit(component.UidType.Get(signal3XH4.Z3XH4_DDJ).Id, true)
|
||||||
|
wd.SetQdBit(component.UidType.Get(signal3XH4.Z3XH4_LXJ).Id, false)
|
||||||
|
wd.SetQdBit(component.UidType.Get(signal3XH4.Z3XH4_ZXJ).Id, false)
|
||||||
case SignalAspect_H:
|
case SignalAspect_H:
|
||||||
wd.SetQdBit(component.UidType.Get(signal3XH4.Z3XH4_DDJ).Id, false)
|
wd.SetQdBit(component.UidType.Get(signal3XH4.Z3XH4_DDJ).Id, false)
|
||||||
wd.SetQdBit(component.UidType.Get(signal3XH4.Z3XH4_LXJ).Id, false)
|
wd.SetQdBit(component.UidType.Get(signal3XH4.Z3XH4_LXJ).Id, false)
|
||||||
@ -298,29 +310,24 @@ func (s *serviceContext) handleDriveMsg(data []byte) {
|
|||||||
wd.SetQdBit(component.UidType.Get(signal3XH4.Z3XH4_LXJ).Id, true)
|
wd.SetQdBit(component.UidType.Get(signal3XH4.Z3XH4_LXJ).Id, true)
|
||||||
wd.SetQdBit(component.UidType.Get(signal3XH4.Z3XH4_ZXJ).Id, false)
|
wd.SetQdBit(component.UidType.Get(signal3XH4.Z3XH4_ZXJ).Id, false)
|
||||||
default:
|
default:
|
||||||
wd.SetQdBit(component.UidType.Get(signal3XH4.Z3XH4_DDJ).Id, true)
|
logger().Error(fmt.Sprintf("信号机[%s]无法开放[%x]信号", uid, cmd.Cmd))
|
||||||
wd.SetQdBit(component.UidType.Get(signal3XH4.Z3XH4_LXJ).Id, false)
|
|
||||||
wd.SetQdBit(component.UidType.Get(signal3XH4.Z3XH4_ZXJ).Id, false)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
logger().Error(fmt.Sprintf("信号机[%s]的型号未知", uid))
|
logger().Error(fmt.Sprintf("信号机[%s]的型号未知", uid))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//{ //采集状态赋值
|
{ //采集状态赋值
|
||||||
// signalAspectMap := make(map[uint16]byte)
|
signalAspectMap := make(map[uint16]byte)
|
||||||
// for _, cmd := range frame.SignalData.CmdList {
|
for _, cmd := range frame.SignalData.CmdList {
|
||||||
// signalAspectMap[cmd.Id] = cmd.Cmd
|
signalAspectMap[cmd.Id] = cmd.Cmd
|
||||||
// }
|
}
|
||||||
// for _, interlockFrame := range s.toInterlockFrames {
|
for _, interlockFrame := range s.toInterlockFrames {
|
||||||
// for _, state := range interlockFrame.SignalStates {
|
for _, state := range interlockFrame.SignalStates {
|
||||||
// b := signalAspectMap[state.Id]
|
state.State = signalAspectMap[state.Id]
|
||||||
// if b != 0 {
|
}
|
||||||
// state.State = b
|
}
|
||||||
// }
|
}
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
for _, cmd := range frame.AxleSectionData.CmdList {
|
for _, cmd := range frame.AxleSectionData.CmdList {
|
||||||
if cmd.Cmd == 0x80 {
|
if cmd.Cmd == 0x80 {
|
||||||
uid := s.deviceTable.AxleSectionMap[cmd.Id].uid
|
uid := s.deviceTable.AxleSectionMap[cmd.Id].uid
|
||||||
@ -660,54 +667,50 @@ func (s *serviceContext) collectDeviceState() {
|
|||||||
state.State = GetStateByte(!component.BitStateType.Get(relay).Val)
|
state.State = GetStateByte(!component.BitStateType.Get(relay).Val)
|
||||||
state.PlState = GetStateByte(component.BitStateType.Get(pla).Val)
|
state.PlState = GetStateByte(component.BitStateType.Get(pla).Val)
|
||||||
}
|
}
|
||||||
//信号机
|
////信号机
|
||||||
for _, state := range frame.SignalStates {
|
//for _, state := range frame.SignalStates {
|
||||||
row := s.deviceTable.SignalMap[state.Id]
|
// row := s.deviceTable.SignalMap[state.Id]
|
||||||
entry := wd.EntityMap[row.uid]
|
// entry := wd.EntityMap[row.uid]
|
||||||
if entry == nil {
|
// lights := component.SignalLightsType.Get(entry)
|
||||||
continue
|
// isL := false
|
||||||
}
|
// isH := false
|
||||||
lights := component.SignalLightsType.Get(entry)
|
// isU := false
|
||||||
isL := false
|
// isA := false
|
||||||
isH := false
|
// isB := false
|
||||||
isU := false
|
// for _, light := range lights.Lights {
|
||||||
isA := false
|
// switch {
|
||||||
isB := false
|
// case light.HasComponent(component.LdTag):
|
||||||
for _, light := range lights.Lights {
|
// isL = component.BitStateType.Get(light).Val
|
||||||
switch {
|
// case light.HasComponent(component.HdTag):
|
||||||
case light.HasComponent(component.LdTag):
|
// isH = component.BitStateType.Get(light).Val
|
||||||
isL = component.BitStateType.Get(light).Val
|
// case light.HasComponent(component.UdTag):
|
||||||
case light.HasComponent(component.HdTag):
|
// isU = component.BitStateType.Get(light).Val
|
||||||
isH = component.BitStateType.Get(light).Val
|
// case light.HasComponent(component.BdTag):
|
||||||
case light.HasComponent(component.UdTag):
|
// isB = component.BitStateType.Get(light).Val
|
||||||
isU = component.BitStateType.Get(light).Val
|
// case light.HasComponent(component.AdTag):
|
||||||
case light.HasComponent(component.BdTag):
|
// isA = component.BitStateType.Get(light).Val
|
||||||
isB = component.BitStateType.Get(light).Val
|
// }
|
||||||
case light.HasComponent(component.AdTag):
|
// }
|
||||||
isA = component.BitStateType.Get(light).Val
|
// var stateByte byte
|
||||||
}
|
// if isH && isU {
|
||||||
}
|
// stateByte = 0x03
|
||||||
var stateByte byte
|
// } else {
|
||||||
if isH && isU {
|
// switch {
|
||||||
stateByte = 0x03
|
// case isL:
|
||||||
} else {
|
// stateByte = 0x04
|
||||||
switch {
|
// case isH:
|
||||||
case isL:
|
// stateByte = 0x01
|
||||||
stateByte = 0x04
|
// case isU:
|
||||||
case isH:
|
// stateByte = 0x02
|
||||||
stateByte = 0x01
|
// case isB:
|
||||||
case isU:
|
// stateByte = 0x08
|
||||||
stateByte = 0x02
|
// case isA:
|
||||||
case isB:
|
// stateByte = 0x09
|
||||||
stateByte = 0x08
|
// }
|
||||||
case isA:
|
// }
|
||||||
stateByte = 0x09
|
//
|
||||||
default:
|
// state.State = stateByte
|
||||||
stateByte = 0x06
|
//}
|
||||||
}
|
|
||||||
}
|
|
||||||
state.State = stateByte
|
|
||||||
}
|
|
||||||
//计轴区段
|
//计轴区段
|
||||||
for _, state := range frame.AxleSectionStates {
|
for _, state := range frame.AxleSectionStates {
|
||||||
row := s.deviceTable.AxleSectionMap[state.Id]
|
row := s.deviceTable.AxleSectionMap[state.Id]
|
||||||
|
Loading…
Reference in New Issue
Block a user