btm vobc 模块功能
This commit is contained in:
parent
a58a4350c2
commit
31180597a5
33
third_party/btm_vobc/btm_vobc.go
vendored
33
third_party/btm_vobc/btm_vobc.go
vendored
@ -12,7 +12,6 @@ import (
|
|||||||
"joylink.club/bj-rtsts-server/dto/state_proto"
|
"joylink.club/bj-rtsts-server/dto/state_proto"
|
||||||
"joylink.club/bj-rtsts-server/third_party/message"
|
"joylink.club/bj-rtsts-server/third_party/message"
|
||||||
"joylink.club/bj-rtsts-server/third_party/udp"
|
"joylink.club/bj-rtsts-server/third_party/udp"
|
||||||
"joylink.club/bj-rtsts-server/ts/simulation/wayside/memory"
|
|
||||||
"log/slog"
|
"log/slog"
|
||||||
"math"
|
"math"
|
||||||
"reflect"
|
"reflect"
|
||||||
@ -25,6 +24,9 @@ import (
|
|||||||
|
|
||||||
type BtmVobcManage interface {
|
type BtmVobcManage interface {
|
||||||
GetBtmVobcConfig() config.BtmVobcConfig
|
GetBtmVobcConfig() config.BtmVobcConfig
|
||||||
|
|
||||||
|
GetAllTrain() []*state_proto.TrainState
|
||||||
|
GetConnVobcTrain() *state_proto.TrainState
|
||||||
}
|
}
|
||||||
type BtmVobcService interface {
|
type BtmVobcService interface {
|
||||||
Start(btmVobcManage BtmVobcManage)
|
Start(btmVobcManage BtmVobcManage)
|
||||||
@ -138,38 +140,27 @@ func (b *BtmVobcClient) checkTrainTTLIsOver(ctx context.Context) {
|
|||||||
return
|
return
|
||||||
default:
|
default:
|
||||||
}
|
}
|
||||||
slog.Info("检测网络中断情况 前沿ttl 超时...")
|
|
||||||
if time.Now().UnixMilli()-reviceTimeStamp < 1000 {
|
if time.Now().UnixMilli()-reviceTimeStamp < 1000 {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
vs, ok := b.manage.(*memory.VerifySimulation)
|
|
||||||
if !ok {
|
slog.Info("检测网络中断情况 前沿ttl 超时...")
|
||||||
slog.Error("vobc btm 模块管理端初始化错误...")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
newTel := make([]*state_proto.VobcBtmState_TelegramState, 0)
|
newTel := make([]*state_proto.VobcBtmState_TelegramState, 0)
|
||||||
vs.Memory.Status.TrainStateMap.Range(func(k, v any) bool {
|
for _, train := range b.manage.GetAllTrain() {
|
||||||
train := v.(*state_proto.TrainState)
|
|
||||||
for _, state := range train.VobcBtm.TelegramState {
|
for _, state := range train.VobcBtm.TelegramState {
|
||||||
if time.Now().UnixMilli()-state.ArriveTime < 1000 {
|
if time.Now().UnixMilli()-state.ArriveTime < 1000 {
|
||||||
newTel = append(newTel, state)
|
newTel = append(newTel, state)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
train.VobcBtm.TelegramState = newTel
|
}
|
||||||
return true
|
|
||||||
})
|
|
||||||
time.Sleep(time.Second * 1)
|
time.Sleep(time.Second * 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
func (b *BtmVobcClient) handleBtmVobcFrames(cfs []byte) {
|
func (b *BtmVobcClient) handleBtmVobcFrames(cfs []byte) {
|
||||||
reviceTimeStamp = time.Now().UnixMilli()
|
reviceTimeStamp = time.Now().UnixMilli()
|
||||||
vs, ok := b.manage.(*memory.VerifySimulation)
|
|
||||||
if !ok {
|
train := b.manage.GetConnVobcTrain()
|
||||||
slog.Error("vobc btm 模块管理端初始化错误...")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
train := vs.FindConnTrain(state_proto.TrainConnState_VOBC)
|
|
||||||
if train == nil {
|
if train == nil {
|
||||||
slog.Error("vobc btm 未找到VOBC连接的列车...")
|
slog.Error("vobc btm 未找到VOBC连接的列车...")
|
||||||
return
|
return
|
||||||
@ -280,6 +271,8 @@ func (b *BtmVobcClient) unmarshalJson(jsonStr string, obj any) error {
|
|||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 有应答器报文
|
||||||
func (b *BtmVobcClient) balisePackets(requestId string, tel *state_proto.VobcBtmState_TelegramState, receiveTime int64, decodePayMicoTime int64, vobcLifeNum uint32, autoCommandId byte, vobcbtm *state_proto.VobcBtmState) {
|
func (b *BtmVobcClient) balisePackets(requestId string, tel *state_proto.VobcBtmState_TelegramState, receiveTime int64, decodePayMicoTime int64, vobcLifeNum uint32, autoCommandId byte, vobcbtm *state_proto.VobcBtmState) {
|
||||||
|
|
||||||
data, e := hex.DecodeString(tel.Telegram)
|
data, e := hex.DecodeString(tel.Telegram)
|
||||||
@ -329,10 +322,12 @@ func (b *BtmVobcClient) balisePackets(requestId string, tel *state_proto.VobcBtm
|
|||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 无应答器报文
|
||||||
func (b *BtmVobcClient) balisePacketsFree(requestId string, receiveTime int64, vobcLifeNum uint32, autoCommandId byte, vobcbtm *state_proto.VobcBtmState) {
|
func (b *BtmVobcClient) balisePacketsFree(requestId string, receiveTime int64, vobcLifeNum uint32, autoCommandId byte, vobcbtm *state_proto.VobcBtmState) {
|
||||||
repTimeMicro := (receiveTime - time.Now().UnixMicro()) / 100
|
repTimeMicro := (receiveTime - time.Now().UnixMicro()) / 100
|
||||||
data := createFreeBalisePackets()
|
data := createFreeBalisePackets()
|
||||||
freeMsg := &message.BtmVobcMsgFree{BtmStatus: message.BTM_STSTUS_NORMAL, WorkTemperature: 10, Fun1: uint16(0), Fun2: uint16(0), Fun3: uint16(0), Fun4: uint16(0),
|
freeMsg := &message.BtmVobcMsgFree{BtmStatus: message.BTM_STSTUS_NORMAL, Fun1: 0xffff, Fun2: 0x00CF, Fun3: uint16(0), Fun4: uint16(0),
|
||||||
FreeMsg: data, RespTime: byte(repTimeMicro), MsgSerial: message.GetAutoMessageId(), VobcLifeNum: vobcLifeNum, BaseBtmVobc: message.BaseBtmVobc{AutoIdFrame: autoCommandId}}
|
FreeMsg: data, RespTime: byte(repTimeMicro), MsgSerial: message.GetAutoMessageId(), VobcLifeNum: vobcLifeNum, BaseBtmVobc: message.BaseBtmVobc{AutoIdFrame: autoCommandId}}
|
||||||
u32MsgId := uint32(freeMsg.MsgSerial)
|
u32MsgId := uint32(freeMsg.MsgSerial)
|
||||||
jsonArr, _ := json.Marshal(freeMsg)
|
jsonArr, _ := json.Marshal(freeMsg)
|
||||||
|
19
third_party/btm_vobc/btm_vobc2_test.go
vendored
19
third_party/btm_vobc/btm_vobc2_test.go
vendored
@ -143,3 +143,22 @@ func TestDecode232(t *testing.T) {
|
|||||||
fmt.Println(hex.EncodeToString(arr))
|
fmt.Println(hex.EncodeToString(arr))
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestDecode2311(t *testing.T) {
|
||||||
|
var data uint16 // 初始化为0
|
||||||
|
|
||||||
|
// 将第0, 1, 2, 3位设置为1(二进制中的1111)
|
||||||
|
data |= (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3)
|
||||||
|
|
||||||
|
// 第4-5位设置为0(不需要操作,因为初始就是0)
|
||||||
|
// 但如果需要明确设置,可以这样做:
|
||||||
|
// data &= ^((1 << 4) | (1 << 5)) // 使用按位取反和按位与来清除这些位
|
||||||
|
|
||||||
|
// 第6-7位设置为3(二进制中的11)
|
||||||
|
data |= (3 << 6)
|
||||||
|
|
||||||
|
// 打印结果
|
||||||
|
|
||||||
|
fmt.Printf("The modified data is: %04X\n", data)
|
||||||
|
fmt.Printf("The modified data is: %b\n", data)
|
||||||
|
}
|
||||||
|
3
third_party/message/btm_vobc_data.go
vendored
3
third_party/message/btm_vobc_data.go
vendored
@ -738,7 +738,8 @@ func (b *BtmVobcMsgFree) Encode() []byte {
|
|||||||
binary.Write(buf, binary.BigEndian, byte(0)) //保留
|
binary.Write(buf, binary.BigEndian, byte(0)) //保留
|
||||||
binary.Write(buf, binary.BigEndian, b.MsgSerial)
|
binary.Write(buf, binary.BigEndian, b.MsgSerial)
|
||||||
binary.Write(buf, binary.BigEndian, b.BtmStatus)
|
binary.Write(buf, binary.BigEndian, b.BtmStatus)
|
||||||
binary.Write(buf, binary.BigEndian, b.WorkTemperature)
|
//binary.Write(buf, binary.BigEndian, b.WorkTemperature)
|
||||||
|
binary.Write(buf, binary.BigEndian, byte(35))
|
||||||
binary.Write(buf, binary.BigEndian, yuliu3)
|
binary.Write(buf, binary.BigEndian, yuliu3)
|
||||||
binary.Write(buf, binary.BigEndian, b.Fun1)
|
binary.Write(buf, binary.BigEndian, b.Fun1)
|
||||||
binary.Write(buf, binary.BigEndian, b.Fun2)
|
binary.Write(buf, binary.BigEndian, b.Fun2)
|
||||||
|
@ -151,6 +151,26 @@ func (s *VerifySimulation) GetBtmCanetConfig() config.BtmCanetConfig {
|
|||||||
return s.runConfig.BtmCanet
|
return s.runConfig.BtmCanet
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *VerifySimulation) GetAllTrain() []*state_proto.TrainState {
|
||||||
|
return s.collectorAllTrain()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *VerifySimulation) collectorAllTrain() []*state_proto.TrainState {
|
||||||
|
allTrain := make([]*state_proto.TrainState, 0)
|
||||||
|
s.Memory.Status.TrainStateMap.Range(func(k, v any) bool {
|
||||||
|
train := v.(*state_proto.TrainState)
|
||||||
|
if train.Show {
|
||||||
|
allTrain = append(allTrain, train)
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
})
|
||||||
|
return allTrain
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *VerifySimulation) GetConnVobcTrain() *state_proto.TrainState {
|
||||||
|
return s.FindConnTrain(state_proto.TrainConnState_VOBC)
|
||||||
|
}
|
||||||
|
|
||||||
// GetBtmVobcConfig 获取11 号线 btm vobc配置信息
|
// GetBtmVobcConfig 获取11 号线 btm vobc配置信息
|
||||||
func (s *VerifySimulation) GetBtmVobcConfig() config.BtmVobcConfig {
|
func (s *VerifySimulation) GetBtmVobcConfig() config.BtmVobcConfig {
|
||||||
return s.runConfig.BtmVobc
|
return s.runConfig.BtmVobc
|
||||||
|
Loading…
Reference in New Issue
Block a user