100 lines
2.8 KiB
Go
100 lines
2.8 KiB
Go
package vobc
|
||
|
||
import "encoding/binary"
|
||
|
||
// 接收到的列车信息
|
||
type ReceiveTrainInfo struct {
|
||
//【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
|
||
}
|
||
|
||
// 解析VOBC列车信息
|
||
func (r *ReceiveTrainInfo) DecoderVobcTrainInfo(buf []byte) *ReceiveTrainInfo {
|
||
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
|
||
}
|
||
|
||
// 发送列车信息
|
||
type SendTrainInfo struct {
|
||
// 生命信号 每个周期+1
|
||
LifeSignal uint16
|
||
// 列车速度 10=1km/h
|
||
Speed uint16
|
||
}
|