列车pc仿真调整
All checks were successful
local-test分支打包构建docker并发布运行 / Docker-Build (push) Successful in 1m55s
All checks were successful
local-test分支打包构建docker并发布运行 / Docker-Build (push) Successful in 1m55s
This commit is contained in:
parent
117ff89562
commit
92d21d559f
@ -34,6 +34,8 @@ func InitSimulationRouter(api *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddle
|
||||
authed.POST("/train/update", updateTrain)
|
||||
authed.POST("/train/control", controlTrain)
|
||||
authed.POST("/train/conn", trainConnThird)
|
||||
authed.POST("/train/unconn/:trainId/:id", trainUnConnThird)
|
||||
|
||||
authed.GET("/train/conn/type/:id", trainConnTypeList)
|
||||
|
||||
authed.POST("/switch/operation", turnoutOperation)
|
||||
@ -311,6 +313,30 @@ func trainConnThird(c *gin.Context) {
|
||||
c.JSON(http.StatusOK, "ok")
|
||||
}
|
||||
|
||||
// ATS测试仿真-取消列车连接三方
|
||||
//
|
||||
// @Summary ATS测试仿真-取消列车连接三方
|
||||
//
|
||||
// @Security JwtAuth
|
||||
//
|
||||
// @Description ATS测试仿真-取消列车连接三方
|
||||
// @Tags ATS测试仿真Api
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Param Authorization header string true "JWT Token"
|
||||
// @Param trainId path string true "列车id"
|
||||
// @Param id path string true "仿真id"
|
||||
// @Success 200 {object} dto.AddTrainRspDto
|
||||
// @Failure 500 {object} dto.ErrorDto
|
||||
// @Router /api/v1/simulation/train/conn [post]
|
||||
func trainUnConnThird(c *gin.Context) {
|
||||
trainId := c.Param("trainId")
|
||||
simId := c.Param("id")
|
||||
simulation := checkDeviceDataAndReturn(simId)
|
||||
memory.TrainUnConn(simulation, trainId)
|
||||
c.JSON(http.StatusOK, "ok")
|
||||
}
|
||||
|
||||
// ATS测试仿真-列车连接三方类型列表
|
||||
//
|
||||
// @Summary ATS测试仿真-列车连接三方类型列表
|
||||
|
@ -525,17 +525,6 @@ func convertDynamicConfig(config, dest interface{}) {
|
||||
}
|
||||
}
|
||||
|
||||
/*func convertDynamicConfig(config *common_proto.TrainDynamicConfig, dest *state_proto.TrainDynamicConfigMqtt) {
|
||||
configType := reflect.TypeOf(config).Elem()
|
||||
for index := 0; index < configType.NumField(); index++ {
|
||||
field := configType.Field(index)
|
||||
if field.IsExported() {
|
||||
fieldName := field.Name
|
||||
setVal(config, dest, fieldName)
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
||||
func setVal(source, dest interface{}, fieldName string) {
|
||||
destVal := reflect.ValueOf(dest).Elem().FieldByName(fieldName)
|
||||
sourceType := reflect.ValueOf(source).Elem().FieldByName(fieldName)
|
||||
@ -548,7 +537,7 @@ func setVal(source, dest interface{}, fieldName string) {
|
||||
}
|
||||
}()
|
||||
if destVal.Kind() == reflect.Invalid {
|
||||
slog.Warn(fieldName, "赋值失败,源数据类型", sourceType.Kind().String(), "目标数据类型:", destVal.Kind().String())
|
||||
//slog.Warn(fieldName, "赋值失败,源数据类型", sourceType.Kind().String(), "目标数据类型:", destVal.Kind().String())
|
||||
return
|
||||
}
|
||||
if destVal.Kind() == reflect.String {
|
||||
|
@ -1 +1 @@
|
||||
Subproject commit df112c429875bb39908c0a387f49ef095c82fabe
|
||||
Subproject commit acbfbf8b92d3702a9c0e6434f26fd6db2f57292d
|
14
third_party/message/train_pc_sim_message.go
vendored
14
third_party/message/train_pc_sim_message.go
vendored
@ -90,11 +90,11 @@ func (tp *TrainSpeedPlaceReportMsg) ParsePulseCount1(s1, s2 uint32) {
|
||||
}
|
||||
func (tp *TrainSpeedPlaceReportMsg) Encode(runDir bool, s1, s2 uint32) []byte {
|
||||
data := make([]byte, 0)
|
||||
binary.BigEndian.AppendUint16(data, uint16(IsTrue(runDir)))
|
||||
binary.BigEndian.AppendUint32(data, s1)
|
||||
binary.BigEndian.AppendUint32(data, s2)
|
||||
binary.BigEndian.AppendUint32(data, tp.PulseCount1)
|
||||
binary.BigEndian.AppendUint32(data, tp.PulseCount2)
|
||||
data = binary.BigEndian.AppendUint16(data, uint16(IsTrue(runDir)))
|
||||
data = binary.BigEndian.AppendUint32(data, s1)
|
||||
data = binary.BigEndian.AppendUint32(data, s2)
|
||||
data = binary.BigEndian.AppendUint32(data, tp.PulseCount1)
|
||||
data = binary.BigEndian.AppendUint32(data, tp.PulseCount2)
|
||||
now := time.Now().UTC()
|
||||
// 将时间转换为毫秒
|
||||
millis := now.UnixNano() / int64(time.Millisecond)
|
||||
@ -103,8 +103,8 @@ func (tp *TrainSpeedPlaceReportMsg) Encode(runDir bool, s1, s2 uint32) []byte {
|
||||
|
||||
second, _ := strconv.Atoi(string(strs[:len(strs)-3]))
|
||||
mm, _ := strconv.Atoi(string(strs[len(strs)-3:]))
|
||||
binary.BigEndian.AppendUint32(data, uint32(second))
|
||||
binary.BigEndian.AppendUint16(data, uint16(mm))
|
||||
data = binary.BigEndian.AppendUint32(data, uint32(second))
|
||||
data = binary.BigEndian.AppendUint16(data, uint16(mm))
|
||||
|
||||
return data
|
||||
}
|
||||
|
14
third_party/tcp/tcp_client.go
vendored
14
third_party/tcp/tcp_client.go
vendored
@ -36,7 +36,7 @@ func StartTcpClient(rAddr string, handler func(n int, data []byte), readErr func
|
||||
l, err := conn.Read(data)
|
||||
if err != nil {
|
||||
if opErr, ok := err.(*net.OpError); ok {
|
||||
slog.Error(fmt.Sprintf("TCP客户端[rAddr:%s]读取数据异常:", rAddr), opErr)
|
||||
slog.Error(fmt.Sprintf("TCP客户端[rAddr:%s]读取数据异常连接可能断开:", rAddr), opErr)
|
||||
readErr(err)
|
||||
}
|
||||
if err == io.EOF {
|
||||
@ -57,11 +57,15 @@ func (c *TcpClient) Close() {
|
||||
c.conn = nil
|
||||
}
|
||||
}
|
||||
func (c *TcpClient) Send(data []byte) error {
|
||||
func (c *TcpClient) Send(data []byte) {
|
||||
if c.conn == nil {
|
||||
slog.Error("tcp client send error,conn is nil")
|
||||
return
|
||||
}
|
||||
_, err := c.conn.Write(data)
|
||||
if err != nil {
|
||||
slog.Error("udp client send error", "error", err)
|
||||
return err
|
||||
slog.Error("tcp client send error", "error", err)
|
||||
|
||||
}
|
||||
return nil
|
||||
|
||||
}
|
||||
|
87
third_party/train_pc_sim/train_pc_sim.go
vendored
87
third_party/train_pc_sim/train_pc_sim.go
vendored
@ -27,7 +27,10 @@ type TrainPcSim interface {
|
||||
//发送驾驶端激活
|
||||
SendDriverActive(tc *state_proto.TrainConnState, vobc *state_proto.TrainVobcState)
|
||||
//发送牵引制动手柄
|
||||
SendHandleSwitch(oldTraction, oldBrakeForce int64, tc *state_proto.TrainConnState, vobc *state_proto.TrainVobcState)
|
||||
SendHandleSwitch(oldTraction, oldBrakeForce int64, isBrake bool, tc *state_proto.TrainConnState, vobc *state_proto.TrainVobcState)
|
||||
//列车运行方向
|
||||
//因文档说明不清楚,在调用的时候目前是注释状态,现场调试可能会用到
|
||||
SendTrainDirection(trainForward, trainBackward bool)
|
||||
//发送应答器信息数据
|
||||
SendBaliseData(msgType uint16, data []byte)
|
||||
//发布列车控制的相关事件
|
||||
@ -87,6 +90,7 @@ type trainPcSimService struct {
|
||||
cancleContext context.CancelFunc
|
||||
trainPcSimManage TrainPcSimManage
|
||||
speedPlace *message.TrainSpeedPlaceReportMsg
|
||||
config config.VehiclePCSimConfig
|
||||
}
|
||||
|
||||
// 接受来自pc仿真的消息
|
||||
@ -94,6 +98,22 @@ func (d *trainPcSimService) readError(err error) {
|
||||
slog.Error("连接车载pc仿真tcp服务断开", err)
|
||||
d.updateState(tpapi.ThirdPartyState_Broken)
|
||||
d.pcSimClient.Close()
|
||||
d.connTrainPcSim()
|
||||
}
|
||||
func (d *trainPcSimService) connTrainPcSim() {
|
||||
reconnIndex := 0
|
||||
for {
|
||||
client, err := tcp.StartTcpClient(fmt.Sprintf("%v:%v", d.config.PcSimIp, d.config.PcSimPort), d.reivceData, d.readError)
|
||||
if err != nil {
|
||||
reconnIndex++
|
||||
slog.Error("连接车载pc平台失败,尝试=", reconnIndex, err)
|
||||
d.updateState(tpapi.ThirdPartyState_Broken)
|
||||
} else {
|
||||
d.pcSimClient = client
|
||||
return
|
||||
}
|
||||
time.Sleep(time.Second * 1)
|
||||
}
|
||||
}
|
||||
func (d *trainPcSimService) Start(wd ecs.World, pcSimManage TrainPcSimManage) {
|
||||
config := pcSimManage.GetTrainPcSimConfig()
|
||||
@ -101,14 +121,8 @@ func (d *trainPcSimService) Start(wd ecs.World, pcSimManage TrainPcSimManage) {
|
||||
slog.Info("车载pc仿真配置未开启")
|
||||
return
|
||||
}
|
||||
|
||||
client, err := tcp.StartTcpClient(fmt.Sprintf("%v:%v", config.PcSimIp, config.PcSimPort), d.reivceData, d.readError)
|
||||
if err != nil {
|
||||
slog.Error("连接车载pc平台失败", err)
|
||||
d.updateState(tpapi.ThirdPartyState_Broken)
|
||||
return
|
||||
}
|
||||
d.pcSimClient = client
|
||||
d.config = config
|
||||
d.connTrainPcSim()
|
||||
ctx, ctxFun := context.WithCancel(context.Background())
|
||||
d.cancleContext = ctxFun
|
||||
d.trainPcSimManage = pcSimManage
|
||||
@ -161,13 +175,7 @@ func (d *trainPcSimService) sendTrainLocationAndSpeedTask(ctx context.Context) {
|
||||
train.PluseCount.PulseCount1 = 0
|
||||
train.PluseCount.PulseCount2 = 0
|
||||
d.pcSimClient.Send(bm.Encode())
|
||||
} /*else {
|
||||
m1 := "未找到对应连接车载pc仿真的列车"
|
||||
if train != nil {
|
||||
m1 = fmt.Sprintf("对应的列车没有连接上车载pc仿真,列车ID:%v", train.Id)
|
||||
}
|
||||
slog.Info(m1)
|
||||
}*/
|
||||
}
|
||||
time.Sleep(time.Millisecond * 80)
|
||||
}
|
||||
}
|
||||
@ -185,30 +193,46 @@ func (d *trainPcSimService) SendDriverActive(tc *state_proto.TrainConnState, vob
|
||||
d.pcSimClient.Send(msg.Encode())
|
||||
}
|
||||
}
|
||||
func (d *trainPcSimService) SendHandleSwitch(oldTraction, oldBrakeForce int64, tc *state_proto.TrainConnState, vobc *state_proto.TrainVobcState) {
|
||||
func (d *trainPcSimService) SendHandleSwitch(oldTraction, oldBrakeForce int64, isBrake bool, tc *state_proto.TrainConnState, vobc *state_proto.TrainVobcState) {
|
||||
if tc.Conn && tc.ConnType == state_proto.TrainConnState_PC_SIM {
|
||||
msg := &message.TrainPcSimBaseMessage{}
|
||||
newTraction := vobc.TractionForce
|
||||
newBrake := vobc.BrakeForce
|
||||
if newTraction <= oldTraction && newTraction == 0 {
|
||||
//手柄取消前进
|
||||
msg.Type = RECIVE_TRAIN_HAND_KEY_CANCLE_FORWARD
|
||||
} else if newTraction > oldTraction {
|
||||
//手柄前进
|
||||
msg.Type = SENDER_TRAIN_HAND_KEY_FORWARD
|
||||
} else if newBrake >= oldBrakeForce && newBrake == 0 {
|
||||
//手柄取消后退
|
||||
msg.Type = RECIVE_TRAIN_HAND_KEY_CACLE_BACKWARD
|
||||
} else if newBrake < oldBrakeForce {
|
||||
//手柄后退
|
||||
msg.Type = RECIVE_TRAIN_HAND_KEY_BACKWARD
|
||||
if isBrake {
|
||||
if newBrake < oldBrakeForce && newBrake == 0 {
|
||||
//手柄取消后退
|
||||
msg.Type = RECIVE_TRAIN_HAND_KEY_CACLE_BACKWARD
|
||||
} else if newBrake > oldBrakeForce {
|
||||
//手柄后退
|
||||
msg.Type = RECIVE_TRAIN_HAND_KEY_BACKWARD
|
||||
}
|
||||
} else {
|
||||
slog.Error("")
|
||||
return
|
||||
if newTraction < oldTraction && newTraction == 0 {
|
||||
//手柄取消前进
|
||||
msg.Type = RECIVE_TRAIN_HAND_KEY_CANCLE_FORWARD
|
||||
} else if newTraction > oldTraction {
|
||||
//手柄前进
|
||||
msg.Type = SENDER_TRAIN_HAND_KEY_FORWARD
|
||||
}
|
||||
}
|
||||
d.pcSimClient.Send(msg.Encode())
|
||||
}
|
||||
}
|
||||
func (d *trainPcSimService) SendTrainDirection(trainForward, trainBackward bool) {
|
||||
|
||||
baseMsgs := make([]*message.TrainPcSimBaseMessage, 0)
|
||||
if !trainForward && !trainBackward {
|
||||
baseMsgs = append(baseMsgs, &message.TrainPcSimBaseMessage{Type: RECIVE_TRAIN_HAND_KEY_CANCLE_FORWARD})
|
||||
baseMsgs = append(baseMsgs, &message.TrainPcSimBaseMessage{Type: RECIVE_TRAIN_HAND_KEY_CACLE_BACKWARD})
|
||||
} else if trainForward {
|
||||
baseMsgs = append(baseMsgs, &message.TrainPcSimBaseMessage{Type: SENDER_TRAIN_HAND_KEY_FORWARD})
|
||||
} else if trainBackward {
|
||||
baseMsgs = append(baseMsgs, &message.TrainPcSimBaseMessage{Type: RECIVE_TRAIN_HAND_KEY_BACKWARD})
|
||||
}
|
||||
for _, msg := range baseMsgs {
|
||||
d.pcSimClient.Send(msg.Encode())
|
||||
}
|
||||
}
|
||||
|
||||
func (d *trainPcSimService) SendBaliseData(msgType uint16, data []byte) {
|
||||
msg := &message.TrainPcSimBaseMessage{}
|
||||
@ -218,7 +242,6 @@ func (d *trainPcSimService) SendBaliseData(msgType uint16, data []byte) {
|
||||
}
|
||||
|
||||
func (d *trainPcSimService) trainControlEventHandle(w ecs.World, event TrainControlEvent) {
|
||||
fmt.Println(event.Status)
|
||||
msg := &message.TrainPcSimBaseMessage{}
|
||||
msg.Type = SENDER_TRAIN_OUTR_INFO
|
||||
data := []byte{event.Command, event.Status}
|
||||
|
@ -132,10 +132,7 @@ func TrainConnTypeUpdate(vs *VerifySimulation, ct *dto.TrainConnThirdDto) {
|
||||
panic(sys_error.New(fmt.Sprintf("列车【%s】不存在", ct.Id)))
|
||||
}
|
||||
train := data.(*state_proto.TrainState)
|
||||
var conn = true
|
||||
if ct.ConnType == state_proto.TrainConnState_NONE {
|
||||
conn = false
|
||||
}
|
||||
|
||||
if ct.ConnType != state_proto.TrainConnState_NONE {
|
||||
//列车连接 半实物或车载pc仿真
|
||||
allTrainMap.Range(func(k, v any) bool {
|
||||
@ -151,11 +148,27 @@ func TrainConnTypeUpdate(vs *VerifySimulation, ct *dto.TrainConnThirdDto) {
|
||||
return true
|
||||
})
|
||||
}
|
||||
train.ConnState.Conn = conn
|
||||
train.ConnState.Conn = true
|
||||
train.ConnState.ConnType = ct.ConnType
|
||||
TrainPcSimConnOrRemoveHandle(train)
|
||||
}
|
||||
if train.ConnState.ConnType == state_proto.TrainConnState_PC_SIM {
|
||||
TrainPcSimConnOrRemoveHandle(train)
|
||||
}
|
||||
|
||||
}
|
||||
func TrainUnConn(vs *VerifySimulation, trainId string) {
|
||||
allTrainMap := &vs.Memory.Status.TrainStateMap
|
||||
data, ok := allTrainMap.Load(trainId)
|
||||
if !ok {
|
||||
panic(sys_error.New(fmt.Sprintf("列车【%s】不存在", trainId)))
|
||||
}
|
||||
train := data.(*state_proto.TrainState)
|
||||
oldType := train.ConnState.ConnType
|
||||
train.ConnState.Conn = false
|
||||
train.ConnState.ConnType = state_proto.TrainConnState_NONE
|
||||
if oldType == state_proto.TrainConnState_PC_SIM {
|
||||
TrainPcSimConnOrRemoveHandle(train)
|
||||
}
|
||||
}
|
||||
func createOrUpdateStateDynamicConfig(trainState *state_proto.TrainState, configTrainData dto.ConfigTrainData, trainEndsA dto.ConfigTrainEnds,
|
||||
trainEndsB dto.ConfigTrainEnds) {
|
||||
trainState.TrainDynamicConfig = service.TrainConfigToProtoConvert(&configTrainData)
|
||||
|
@ -37,33 +37,32 @@ func ControlTrainUpdate(s *VerifySimulation, ct *request_proto.TrainControl) {
|
||||
sta := data.(*state_proto.TrainState)
|
||||
var tce []train_pc_sim.TrainControlEvent = nil
|
||||
if ct.ControlType == request_proto.TrainControl_EMERGENT_BUTTON {
|
||||
trainControlEB(sta, ct.Button, ct.DeviceId, tccGraphicData)
|
||||
tce = trainControlEB(sta, ct.Button, ct.DeviceId, tccGraphicData)
|
||||
} else if ct.ControlType == request_proto.TrainControl_DRIVER_KEY_SWITCH {
|
||||
tce = trainControlDriverKey(sta, ct.DriverKey, ct.DeviceId, tccGraphicData)
|
||||
train_pc_sim.Default().SendDriverActive(sta.ConnState, sta.VobcState)
|
||||
|
||||
} else if ct.ControlType == request_proto.TrainControl_DIRECTION_KEY_SWITCH {
|
||||
trainControlDirKey(sta, ct.DirKey, ct.DeviceId, tccGraphicData)
|
||||
tce = trainControlDirKey(sta, ct.DirKey, ct.DeviceId, tccGraphicData)
|
||||
|
||||
} else if ct.ControlType == request_proto.TrainControl_HANDLER {
|
||||
oldTraction := sta.VobcState.TractionForce
|
||||
oldBrakeForce := sta.VobcState.BrakeForce
|
||||
isBrake := ct.Handler.Val < 0 //是否制动
|
||||
tce = trainControlHandle(sta, ct.Handler, ct.DeviceId, tccGraphicData)
|
||||
train_pc_sim.Default().SendHandleSwitch(oldTraction, oldBrakeForce, sta.ConnState, sta.VobcState)
|
||||
train_pc_sim.Default().SendHandleSwitch(oldTraction, oldBrakeForce, isBrake, sta.ConnState, sta.VobcState)
|
||||
}
|
||||
|
||||
if sta.ConnState.Conn && sta.ConnState.ConnType == state_proto.TrainConnState_PC_SIM && tce != nil {
|
||||
train_pc_sim.Default().PublishTrainControlEvent(s.World, tce)
|
||||
}
|
||||
//cm := &message.TrainControlMsg{TrainId: ct.TrainId, ControlInfo: sta.VobcState}
|
||||
//dynamics.Default().SendTrainControl(cm)
|
||||
}
|
||||
|
||||
func trainControlEB(trainState *state_proto.TrainState, request *request_proto.TrainControl_EmergentButton, deviceId uint32, tccGraphic *data_proto.TccGraphicStorage) {
|
||||
func trainControlEB(trainState *state_proto.TrainState, request *request_proto.TrainControl_EmergentButton, deviceId uint32, tccGraphic *data_proto.TccGraphicStorage) []train_pc_sim.TrainControlEvent {
|
||||
|
||||
_, find := findTrainTccGraphicDataButton(tccGraphic, deviceId)
|
||||
if !find {
|
||||
slog.Error("未找到对应的紧急停车摁钮,deviceId:", deviceId)
|
||||
return
|
||||
return nil
|
||||
}
|
||||
trainState.VobcState.EmergencyBrakingStatus = request.Active
|
||||
if trainState.Tcc.Ebutton == nil {
|
||||
@ -71,17 +70,21 @@ func trainControlEB(trainState *state_proto.TrainState, request *request_proto.T
|
||||
} else {
|
||||
trainState.Tcc.Ebutton.Passed = request.Active
|
||||
}
|
||||
return nil
|
||||
//return []train_pc_sim.TrainControlEvent{{Command: message.KEY_STATE, Status: message.IsTrue(request.Val)}}
|
||||
}
|
||||
|
||||
// 列车方向
|
||||
func trainControlDirKey(trainState *state_proto.TrainState, request *request_proto.TrainControl_DirectionKeySwitch, deviceId uint32, tccGraphic *data_proto.TccGraphicStorage) {
|
||||
func trainControlDirKey(trainState *state_proto.TrainState, request *request_proto.TrainControl_DirectionKeySwitch, deviceId uint32, tccGraphic *data_proto.TccGraphicStorage) []train_pc_sim.TrainControlEvent {
|
||||
_, find := findTrainTccGraphicDataKey(tccGraphic, deviceId)
|
||||
if !find {
|
||||
slog.Error("未找到对应的列车方向键deviceId:", deviceId)
|
||||
return
|
||||
return nil
|
||||
}
|
||||
|
||||
trainState.VobcState.DirectionForward = false
|
||||
trainState.VobcState.DirectionBackward = false
|
||||
|
||||
if request.Val == 1 {
|
||||
trainState.VobcState.DirectionForward = true
|
||||
} else if request.Val == 0 {
|
||||
@ -92,7 +95,7 @@ func trainControlDirKey(trainState *state_proto.TrainState, request *request_pro
|
||||
} else {
|
||||
trainState.Tcc.DirKey.Val = request.Val
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// 列车驾驶端激活
|
||||
@ -102,9 +105,6 @@ func trainControlDriverKey(trainState *state_proto.TrainState, request *request_
|
||||
slog.Error("未找到对应的驾驶端激活设备deviceId:", deviceId)
|
||||
return nil
|
||||
}
|
||||
//trainState.VobcState.Tc1Active = false
|
||||
//trainState.VobcState.Tc2Active = false
|
||||
|
||||
if obj.Code == "SKQYS1" {
|
||||
trainState.VobcState.Tc1Active = request.Val
|
||||
} else if obj.Code == "SKQYS2" {
|
||||
@ -138,21 +138,20 @@ func trainControlHandle(trainState *state_proto.TrainState, request *request_pro
|
||||
trainState.VobcState.TractionForce = 0
|
||||
trainState.VobcState.BrakingStatus = false
|
||||
trainState.VobcState.BrakeForce = 0
|
||||
trainState.VobcState.MaintainBrakeStatus = false
|
||||
tce := make([]train_pc_sim.TrainControlEvent, 0)
|
||||
tce = append(tce, train_pc_sim.TrainControlEvent{Command: message.HANDLE_FORWORD, Status: 0})
|
||||
tce = append(tce, train_pc_sim.TrainControlEvent{Command: message.HANDLE_BACKWORD, Status: 0})
|
||||
tce = append(tce, train_pc_sim.TrainControlEvent{Command: message.HANDLE_TO_ZERO, Status: 0})
|
||||
if request.Val > 0 {
|
||||
trainState.VobcState.MaintainBrakeStatus = false
|
||||
trainState.VobcState.TractionStatus = true
|
||||
trainState.VobcState.TractionForce = int64(request.Val * 180)
|
||||
tce = append(tce, train_pc_sim.TrainControlEvent{Command: message.HANDLE_FORWORD, Status: 1})
|
||||
} else if request.Val < 0 {
|
||||
trainState.VobcState.MaintainBrakeStatus = true
|
||||
trainState.VobcState.BrakingStatus = true
|
||||
trainState.VobcState.BrakeForce = int64(-request.Val * 180)
|
||||
//trainState.VobcState.BrakeForce = 19400
|
||||
tce = append(tce, train_pc_sim.TrainControlEvent{Command: message.HANDLE_BACKWORD, Status: 1})
|
||||
tce = append(tce, train_pc_sim.TrainControlEvent{Command: message.TRAIN_BRAKE_STATE, Status: 1})
|
||||
} else {
|
||||
|
||||
tce = append(tce, train_pc_sim.TrainControlEvent{Command: message.HANDLE_TO_ZERO, Status: 1})
|
||||
@ -290,14 +289,14 @@ func (s *VerifySimulation) TrainPcSimDigitalOutInfoHandle(data []byte) {
|
||||
//dynamics.Default().SendTrainControl(cm)
|
||||
}
|
||||
func trainPcSimDigitalOutInfoHandleCode39_32(d byte, vobc *state_proto.TrainVobcState) {
|
||||
vobc.MostUseBrake = message.IsTrueForByte(message.GetBit(d, 0)) //? //常用制动
|
||||
vobc.SplittingOut = message.IsTrueForByte(message.GetBit(d, 1)) //? //过分相输出
|
||||
vobc.ModeRelay = message.IsTrueForByte(message.GetBit(d, 2)) //? //模式继电器
|
||||
vobc.TractionEffective = message.IsTrueForByte(message.GetBit(d, 3)) //? //牵引有效
|
||||
vobc.BrakeEffective = message.IsTrueForByte(message.GetBit(d, 4)) //? //制动有效
|
||||
vobc.LifeDoorState = message.IsTrueForByte(message.GetBit(d, 5)) //逃生门使能
|
||||
vobc.BrakeQuarantine = message.IsTrueForByte(message.GetBit(d, 6)) //? //制动隔离
|
||||
vobc.StopNotAllBrake = message.IsTrueForByte(message.GetBit(d, 7)) //? //停放制动缓解
|
||||
vobc.MostUseBrake = message.IsTrueForByte(message.GetBit(d, 0)) //? 常用制动
|
||||
vobc.SplittingOut = message.IsTrueForByte(message.GetBit(d, 1)) //? 过分相输出
|
||||
vobc.ModeRelay = message.IsTrueForByte(message.GetBit(d, 2)) //? 模式继电器
|
||||
vobc.TractionEffective = message.IsTrueForByte(message.GetBit(d, 3)) //? 牵引有效
|
||||
vobc.BrakeEffective = message.IsTrueForByte(message.GetBit(d, 4)) //? 制动有效
|
||||
vobc.LifeDoorState = message.IsTrueForByte(message.GetBit(d, 5)) //?逃生门使能
|
||||
vobc.BrakeQuarantine = message.IsTrueForByte(message.GetBit(d, 6)) //? 制动隔离
|
||||
vobc.StopNotAllBrake = message.IsTrueForByte(message.GetBit(d, 7)) //? 停放制动缓解
|
||||
|
||||
}
|
||||
func trainPcSimDigitalOutInfoHandleCode31_24(d byte, vobc *state_proto.TrainVobcState) {
|
||||
@ -314,28 +313,28 @@ func trainPcSimDigitalOutInfoHandleCode31_24(d byte, vobc *state_proto.TrainVobc
|
||||
func trainPcSimDigitalOutInfoHandleCode23_16(d byte, vobc *state_proto.TrainVobcState) {
|
||||
vobc.DirectionForward = message.IsTrueForByte(message.GetBit(d, 0)) //列车方向1
|
||||
vobc.DirectionBackward = message.IsTrueForByte(message.GetBit(d, 1)) //列车方向2
|
||||
vobc.AtoLazyCommandOut = message.IsTrueForByte(message.GetBit(d, 2)) //?//ATO惰行命令输出
|
||||
vobc.SleepBtn = message.IsTrueForByte(message.GetBit(d, 3)) //休眠指令
|
||||
vobc.WakeUpBtn = message.IsTrueForByte(message.GetBit(d, 4)) //唤醒指令
|
||||
vobc.AtoSendTrainBtn = message.IsTrueForByte(message.GetBit(d, 5)) //ATO发车指示灯
|
||||
vobc.TurnbackStatus = message.IsTrueForByte(message.GetBit(d, 6)) //?//AR灯命令
|
||||
vobc.AtoAlwaysBrake = message.IsTrueForByte(message.GetBit(d, 7)) //? //ATO保持制动
|
||||
vobc.AtoLazyCommandOut = message.IsTrueForByte(message.GetBit(d, 2)) //?ATO惰行命令输出
|
||||
vobc.SleepBtn = message.IsTrueForByte(message.GetBit(d, 3)) //?休眠指令
|
||||
vobc.WakeUpBtn = message.IsTrueForByte(message.GetBit(d, 4)) //?唤醒指令
|
||||
vobc.AtoSendTrainBtn = message.IsTrueForByte(message.GetBit(d, 5)) //?ATO发车指示灯
|
||||
vobc.TurnbackStatus = message.IsTrueForByte(message.GetBit(d, 6)) //?AR灯命令
|
||||
vobc.AtoAlwaysBrake = message.IsTrueForByte(message.GetBit(d, 7)) //? ATO保持制动
|
||||
|
||||
}
|
||||
func trainPcSimDigitalOutInfoHandleCode15_8(d byte, vobc *state_proto.TrainVobcState) {
|
||||
vobc.LocalAtpControl = message.IsTrueForByte(message.GetBit(d, 0)) //?//本端ATP控车
|
||||
vobc.LocalAtpControl = message.IsTrueForByte(message.GetBit(d, 0)) //?本端ATP控车
|
||||
vobc.Ato = message.IsTrueForByte(message.GetBit(d, 1)) //ATO模式
|
||||
vobc.AtoTractionCommandOut = message.IsTrueForByte(message.GetBit(d, 2)) //?//ATO牵引命令输出
|
||||
vobc.AtoTractionCommand1 = message.IsTrueForByte(message.GetBit(d, 3)) //?//ATO牵引指令1
|
||||
vobc.AtoTractionCommand2 = message.IsTrueForByte(message.GetBit(d, 4)) //?//ATO牵引指令2
|
||||
vobc.AtoTractionCommand3 = message.IsTrueForByte(message.GetBit(d, 5)) //?//ATO牵引指令3
|
||||
vobc.AtoBrakeCommand = message.IsTrueForByte(message.GetBit(d, 6)) //?//ATO制动命令输出
|
||||
vobc.AtoTractionCommandOut = message.IsTrueForByte(message.GetBit(d, 2)) //?ATO牵引命令输出
|
||||
vobc.AtoTractionCommand1 = message.IsTrueForByte(message.GetBit(d, 3)) //?ATO牵引指令1
|
||||
vobc.AtoTractionCommand2 = message.IsTrueForByte(message.GetBit(d, 4)) //?ATO牵引指令2
|
||||
vobc.AtoTractionCommand3 = message.IsTrueForByte(message.GetBit(d, 5)) //?ATO牵引指令3
|
||||
vobc.AtoBrakeCommand = message.IsTrueForByte(message.GetBit(d, 6)) //?ATO制动命令输出
|
||||
vobc.JumpStatus = message.IsTrueForByte(message.GetBit(d, 7)) //跳跃指令
|
||||
|
||||
}
|
||||
func trainPcSimDigitalOutInfoHandleCode7_0(d byte, vobc *state_proto.TrainVobcState) {
|
||||
vobc.TractionSafetyCircuit = message.IsTrueForByte(message.GetBit(d, 0)) //切牵引
|
||||
vobc.TrainDoorOutLed = message.IsTrueForByte(message.GetBit(d, 1)) //? 说明暂无此属性
|
||||
vobc.TrainDoorOutLed = message.IsTrueForByte(message.GetBit(d, 1)) //? 车门外指示灯
|
||||
vobc.ParkingBrakeStatus = message.IsTrueForByte(message.GetBit(d, 2)) //停放制动施加
|
||||
vobc.EmergencyBrakingStatus = message.IsTrueForByte(message.GetBit(d, 3)) //紧急制动
|
||||
vobc.LeftDoorOpenCommand = message.IsTrueForByte(message.GetBit(d, 4)) //开左门允许
|
||||
@ -373,10 +372,6 @@ func (s *VerifySimulation) TrainPcSimDigitalReportHandle(data []byte) {
|
||||
|
||||
// 创建/删除列车
|
||||
func TrainPcSimConnOrRemoveHandle(train *state_proto.TrainState) {
|
||||
if train.ConnState.ConnType != state_proto.TrainConnState_PC_SIM {
|
||||
slog.Error("创建移除列车类型不正确 conType:", train.ConnState.ConnType)
|
||||
return
|
||||
}
|
||||
var data byte = 0x01
|
||||
if train.ConnState.Conn == false {
|
||||
data = 0x00
|
||||
|
Loading…
Reference in New Issue
Block a user