2023-10-19 09:33:40 +08:00
|
|
|
|
package message
|
2023-08-18 16:20:40 +08:00
|
|
|
|
|
2023-08-23 15:33:07 +08:00
|
|
|
|
import "encoding/binary"
|
|
|
|
|
|
2023-10-19 09:33:40 +08:00
|
|
|
|
// 接收到的列车控制信息
|
|
|
|
|
type TrainControlMsg struct {
|
2023-08-18 16:20:40 +08:00
|
|
|
|
//【0 1】两个字节
|
|
|
|
|
// 生命信号 每个周期+1
|
|
|
|
|
LifeSignal uint16
|
|
|
|
|
//【2】 一个字节
|
|
|
|
|
// TC1激活状态 1=激活
|
|
|
|
|
Tc1Active bool
|
|
|
|
|
// TC2激活状态 1=激活
|
|
|
|
|
Tc2Active bool
|
|
|
|
|
// 列车方向向前 1=方向向前
|
|
|
|
|
DirectionForward bool
|
|
|
|
|
// 列车方向向后 1=方向向后
|
|
|
|
|
DirectionBackward bool
|
|
|
|
|
// 列车牵引状态 1=牵引
|
|
|
|
|
TractionStatus bool
|
|
|
|
|
// 列车制动状态 1=制动
|
|
|
|
|
BrakingStatus bool
|
|
|
|
|
// 列车紧急制动状态 1=紧急制动
|
|
|
|
|
EmergencyBrakingStatus bool
|
|
|
|
|
// 列车折返状态(AR) 1=折返
|
|
|
|
|
TurnbackStatus bool
|
|
|
|
|
//【3】 一个字节
|
|
|
|
|
// 跳跃状态 1=跳跃
|
|
|
|
|
JumpStatus bool
|
|
|
|
|
// ATO模式 1=ATO模式
|
|
|
|
|
ATO bool
|
|
|
|
|
// FAM模式 1=FAM模式
|
|
|
|
|
FAM bool
|
|
|
|
|
// CAM模式 1=CAM模式
|
|
|
|
|
CAM bool
|
|
|
|
|
// 牵引安全回路 1=牵引安全切除
|
|
|
|
|
TractionSafetyCircuit bool
|
|
|
|
|
// 停放制动状态 1=停放施加
|
|
|
|
|
ParkingBrakeStatus bool
|
|
|
|
|
// 保持制动状态 1=保持制动施加
|
|
|
|
|
MaintainBrakeStatus bool
|
|
|
|
|
//【4 5】 两个字节 列车牵引力 100=1KN
|
|
|
|
|
TractionForce uint16
|
|
|
|
|
//【6 7】 列车制动力 100=1KN
|
|
|
|
|
BrakeForce uint16
|
|
|
|
|
//【8 9】 列车载荷 100=1ton
|
|
|
|
|
TrainLoad uint16
|
|
|
|
|
// 【15】 一个字节
|
|
|
|
|
// 列车开左门指令 1=开门
|
|
|
|
|
LeftDoorOpenCommand bool
|
|
|
|
|
// 列车开右门指令 1=开门
|
|
|
|
|
RightDoorOpenCommand bool
|
|
|
|
|
// 列车关左门指令 1=关门
|
|
|
|
|
LeftDoorCloseCommand bool
|
|
|
|
|
// 列车关右门指令 1=关门
|
|
|
|
|
RightDoorCloseCommand bool
|
|
|
|
|
// 整列车门关好 1=门关好
|
|
|
|
|
AllDoorClose bool
|
|
|
|
|
}
|
|
|
|
|
|
2023-08-23 15:33:07 +08:00
|
|
|
|
// 解析VOBC列车信息
|
2023-10-19 09:33:40 +08:00
|
|
|
|
func (r *TrainControlMsg) DecoderVobcTrainInfo(buf []byte) *TrainControlMsg {
|
2023-08-23 15:33:07 +08:00
|
|
|
|
r.LifeSignal = binary.BigEndian.Uint16(buf[0:2])
|
|
|
|
|
b2 := buf[2]
|
|
|
|
|
r.Tc1Active = (b2 & (1 << 7)) != 0
|
|
|
|
|
r.Tc2Active = (b2 & (1 << 6)) != 0
|
|
|
|
|
r.DirectionForward = (b2 & (1 << 5)) != 0
|
|
|
|
|
r.DirectionBackward = (b2 & (1 << 4)) != 0
|
|
|
|
|
r.TractionStatus = (b2 & (1 << 3)) != 0
|
|
|
|
|
r.BrakingStatus = (b2 & (1 << 2)) != 0
|
|
|
|
|
r.EmergencyBrakingStatus = (b2 & (1 << 1)) != 0
|
|
|
|
|
r.TurnbackStatus = (b2 & 1) != 0
|
|
|
|
|
b3 := buf[3]
|
|
|
|
|
r.JumpStatus = (b3 & (1 << 7)) != 0
|
|
|
|
|
r.ATO = (b3 & (1 << 6)) != 0
|
|
|
|
|
r.FAM = (b3 & (1 << 5)) != 0
|
|
|
|
|
r.CAM = (b3 & (1 << 4)) != 0
|
|
|
|
|
r.TractionSafetyCircuit = (b3 & (1 << 3)) != 0
|
|
|
|
|
r.ParkingBrakeStatus = (b3 & (1 << 2)) != 0
|
|
|
|
|
r.MaintainBrakeStatus = (b3 & (1 << 1)) != 0
|
|
|
|
|
r.TractionForce = binary.BigEndian.Uint16(buf[4:6])
|
|
|
|
|
r.BrakeForce = binary.BigEndian.Uint16(buf[6:8])
|
|
|
|
|
r.TrainLoad = binary.BigEndian.Uint16(buf[8:10])
|
|
|
|
|
b4 := buf[15]
|
|
|
|
|
r.LeftDoorOpenCommand = (b4 & (1 << 7)) != 0
|
|
|
|
|
r.RightDoorOpenCommand = (b4 & (1 << 6)) != 0
|
|
|
|
|
r.LeftDoorCloseCommand = (b4 & (1 << 5)) != 0
|
|
|
|
|
r.RightDoorCloseCommand = (b4 & (1 << 4)) != 0
|
|
|
|
|
r.AllDoorClose = (b4 & (1 << 3)) != 0
|
|
|
|
|
return r
|
|
|
|
|
}
|
|
|
|
|
|
2023-08-18 16:20:40 +08:00
|
|
|
|
// 发送列车信息
|
2023-10-19 09:33:40 +08:00
|
|
|
|
type TrainSpeedMsg struct {
|
2023-08-18 16:20:40 +08:00
|
|
|
|
// 生命信号 每个周期+1
|
|
|
|
|
LifeSignal uint16
|
|
|
|
|
// 列车速度 10=1km/h
|
|
|
|
|
Speed uint16
|
|
|
|
|
}
|