merge master branch

This commit is contained in:
walker 2024-01-31 17:24:31 +08:00
commit 61f325bfb3
28 changed files with 896 additions and 1433 deletions

View File

@ -2,15 +2,16 @@ package component
import "joylink.club/ecs"
type BaliseState struct {
ValidTelegram []byte //当前一条有效报文
}
var (
BaliseFB = ecs.NewTag() // 固定应答器
BaliseWB = ecs.NewTag() // 轮径校正应答器
BaliseDB = ecs.NewTag() // 休眠唤醒应答器
BaliseVB = ecs.NewTag() // 主信号应答器
BaliseIB = ecs.NewTag() // 预告应答器
BaliseStateType = ecs.NewComponentType[BaliseState]()
)
var BaliseFixedTelegramType = ecs.NewComponentType[BaliseState]() //应答器固定报文
var BaliseVariableTelegramType = ecs.NewComponentType[BaliseState]() //应答器可变报文
type BaliseState struct {
Telegram []byte //报文
UserTelegram []byte //用户报文
}

View File

@ -1,6 +1,6 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.31.0
// protoc-gen-go v1.32.0
// protoc v4.23.1
// source: component/ci.proto

View File

@ -1,6 +1,6 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.31.0
// protoc-gen-go v1.32.0
// protoc v4.23.1
// source: component/common.proto

View File

@ -1,6 +1,6 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.31.0
// protoc-gen-go v1.32.0
// protoc v4.23.1
// source: component/equipment.proto

View File

@ -1,6 +1,6 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.31.0
// protoc-gen-go v1.32.0
// protoc v4.23.1
// source: component/points.proto

View File

@ -1,6 +1,6 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.31.0
// protoc-gen-go v1.32.0
// protoc v4.23.1
// source: component/psd.proto
@ -75,6 +75,7 @@ type PsdState struct {
unknownFields protoimpl.UnknownFields
Close bool `protobuf:"varint,1,opt,name=close,proto3" json:"close,omitempty"`
Obstacle bool `protobuf:"varint,2,opt,name=obstacle,proto3" json:"obstacle,omitempty"`
}
func (x *PsdState) Reset() {
@ -116,6 +117,13 @@ func (x *PsdState) GetClose() bool {
return false
}
func (x *PsdState) GetObstacle() bool {
if x != nil {
return x.Obstacle
}
return false
}
type Psd struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@ -222,20 +230,22 @@ var File_component_psd_proto protoreflect.FileDescriptor
var file_component_psd_proto_rawDesc = []byte{
0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x70, 0x73, 0x64, 0x2e,
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x09, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74,
0x22, 0x20, 0x0a, 0x08, 0x50, 0x73, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05,
0x22, 0x3c, 0x0a, 0x08, 0x50, 0x73, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05,
0x63, 0x6c, 0x6f, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x63, 0x6c, 0x6f,
0x73, 0x65, 0x22, 0x44, 0x0a, 0x03, 0x50, 0x73, 0x64, 0x22, 0x3d, 0x0a, 0x05, 0x46, 0x61, 0x75,
0x6c, 0x74, 0x12, 0x0d, 0x0a, 0x09, 0x55, 0x6e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x10,
0x00, 0x12, 0x12, 0x0a, 0x0e, 0x41, 0x73, 0x64, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x43, 0x6c,
0x6f, 0x73, 0x65, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x41, 0x73, 0x64, 0x43, 0x61, 0x6e, 0x6e,
0x6f, 0x74, 0x4f, 0x70, 0x65, 0x6e, 0x10, 0x02, 0x22, 0x44, 0x0a, 0x08, 0x41, 0x73, 0x64, 0x53,
0x74, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x67, 0x6d, 0x64, 0x77, 0x18, 0x01, 0x20, 0x01,
0x28, 0x08, 0x52, 0x04, 0x67, 0x6d, 0x64, 0x77, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x6d, 0x64, 0x77,
0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x6b, 0x6d, 0x64, 0x77, 0x12, 0x10, 0x0a, 0x03,
0x6d, 0x67, 0x6a, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6d, 0x67, 0x6a, 0x42, 0x1d,
0x5a, 0x1b, 0x2e, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x63, 0x6f,
0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70,
0x72, 0x6f, 0x74, 0x6f, 0x33,
0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x62, 0x73, 0x74, 0x61, 0x63, 0x6c, 0x65, 0x18, 0x02,
0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6f, 0x62, 0x73, 0x74, 0x61, 0x63, 0x6c, 0x65, 0x22, 0x44,
0x0a, 0x03, 0x50, 0x73, 0x64, 0x22, 0x3d, 0x0a, 0x05, 0x46, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x0d,
0x0a, 0x09, 0x55, 0x6e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x10, 0x00, 0x12, 0x12, 0x0a,
0x0e, 0x41, 0x73, 0x64, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x10,
0x01, 0x12, 0x11, 0x0a, 0x0d, 0x41, 0x73, 0x64, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x4f, 0x70,
0x65, 0x6e, 0x10, 0x02, 0x22, 0x44, 0x0a, 0x08, 0x41, 0x73, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65,
0x12, 0x12, 0x0a, 0x04, 0x67, 0x6d, 0x64, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04,
0x67, 0x6d, 0x64, 0x77, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x6d, 0x64, 0x77, 0x18, 0x02, 0x20, 0x01,
0x28, 0x08, 0x52, 0x04, 0x6b, 0x6d, 0x64, 0x77, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x67, 0x6a, 0x18,
0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6d, 0x67, 0x6a, 0x42, 0x1d, 0x5a, 0x1b, 0x2e, 0x2f,
0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e,
0x65, 0x6e, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f,
0x33,
}
var (

View File

@ -1,6 +1,6 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.31.0
// protoc-gen-go v1.32.0
// protoc v4.23.1
// source: component/signal.proto

View File

@ -65,6 +65,12 @@ type AsdMotorState struct {
var AsdStateType = ecs.NewComponentType[component_proto.AsdState]()
// AsdForceType ture强制开门 false强制关门
var AsdForceType = ecs.NewComponentType[BitState]()
// AsdHasObstacleTag 滑动门有障碍物
var AsdHasObstacleTag = ecs.NewTag()
var PlatformMkxCircuitType = ecs.NewComponentType[PlatformMkxCircuit]()
// PlatformMkxCircuit 站台门控箱电路
@ -99,6 +105,6 @@ type Psc struct {
QDTC bool
TZTC bool
ZAW bool
//ZAW bool
JXTCPL bool
}

View File

@ -28,9 +28,9 @@ func SetBitOfBytes(bs []byte, bitIndex int, v bool) []byte {
}
by := bs[bi]
if v {
by |= (1 << (7 - i))
by |= (1 << i)
} else {
by &= ((1 << (7 - i)) ^ byte(0xff))
by &= ((1 << i) ^ byte(0xff))
}
bs[bi] = by
return bs

View File

@ -33,9 +33,15 @@ func newBaliseEntity(w ecs.World, td *repository.Transponder, worldData *compone
uid := td.Id()
entry, ok := worldData.EntityMap[uid]
if !ok {
entry = w.Entry(w.Create(component.UidType, component.BaliseStateType, component.LinkPositionType, component.KmType))
entry = w.Entry(w.Create(component.UidType, component.BaliseFixedTelegramType, component.LinkPositionType, component.KmType))
component.UidType.SetValue(entry, component.Uid{Id: uid})
component.BaliseStateType.Set(entry, &component.BaliseState{})
component.BaliseFixedTelegramType.Set(entry, &component.BaliseState{
Telegram: td.FixedTelegram(),
UserTelegram: td.FixedUserTelegram(),
})
if proto.Transponder_IB == td.BaliseType() || proto.Transponder_VB == td.BaliseType() {
entry.AddComponent(component.BaliseVariableTelegramType)
}
component.LinkPositionType.SetValue(entry, component_data.LinkPosition{
LinkId: td.LinkPosition().Link().Id(),
Offset: td.LinkPosition().Offset(),

View File

@ -2,10 +2,11 @@ package fi
import (
"fmt"
"strings"
"joylink.club/ecs"
"joylink.club/rtsssimulation/component"
"joylink.club/rtsssimulation/entity"
"strings"
)
// AxleSectionDrstDrive 计轴直接复位操作
@ -19,12 +20,12 @@ func AxleSectionDrstDrive(w ecs.World, sectionId string, set bool) error {
if sectionModel == nil {
return ecs.NewErrResult(fmt.Errorf("区段模型[%s]不存实体", sectionId))
}
if set {
axleSectionEntry := wd.EntityMap[sectionId]
if !axleSectionEntry.HasComponent(component.AxleSectionFaultTag) {
return ecs.NewErrResult(fmt.Errorf("区段[%s]非故障占用,无法进行复位操作", sectionId))
}
}
// if set {
// axleSectionEntry := wd.EntityMap[sectionId]
// if !axleSectionEntry.HasComponent(component.AxleSectionFaultTag) {
// return ecs.NewErrResult(fmt.Errorf("区段[%s]非故障占用,无法进行复位操作", sectionId))
// }
// }
//
faDcAxleDeviceEntry := entity.FindAxleManageDevice(wd, sectionModel.CentralizedStation())
@ -53,12 +54,12 @@ func AxleSectionPdrstDrive(w ecs.World, sectionId string, set bool) error {
if sectionModel == nil {
return ecs.NewErrResult(fmt.Errorf("区段模型[%s]不存实体", sectionId))
}
if set {
axleSectionEntry := wd.EntityMap[sectionId]
if !axleSectionEntry.HasComponent(component.AxleSectionFaultTag) {
return ecs.NewErrResult(fmt.Errorf("区段[%s]非故障占用,无法进行复位操作", sectionId))
}
}
// if set {
// axleSectionEntry := wd.EntityMap[sectionId]
// if !axleSectionEntry.HasComponent(component.AxleSectionFaultTag) {
// return ecs.NewErrResult(fmt.Errorf("区段[%s]非故障占用,无法进行复位操作", sectionId))
// }
// }
//
faDcAxleDeviceEntry := entity.FindAxleManageDevice(wd, sectionModel.CentralizedStation())

View File

@ -2,6 +2,7 @@ package fi
import (
"fmt"
"joylink.club/ecs"
"joylink.club/rtsssimulation/component"
"joylink.club/rtsssimulation/component/component_proto"
@ -44,6 +45,31 @@ func UpdateSignalLightFault(w ecs.World, signalId string, light component_proto.
return r.Err
}
// 更新信号机灯丝断丝故障
func UpdateSignalFaultDS(w ecs.World, uid string, light []component_proto.Light_Color) error {
r := <-ecs.Request[ecs.EmptyType](w, func() ecs.Result[ecs.EmptyType] {
wd := entity.GetWorldData(w)
signalEntry, ok := wd.EntityMap[uid]
if ok {
lights := component.SignalLightsType.Get(signalEntry)
// 先清除所有故障
for _, e := range lights.Lights {
e.RemoveComponent(component.LightFaultDsType)
}
// 设置故障
for _, light := range light {
lightEntry := component.SignalLightsType.Get(signalEntry).GetLightByColor(light)
if lightEntry == nil {
return ecs.NewErrResult(fmt.Errorf("信号机[%s]没有色灯[%d]", uid, light))
}
lightEntry.AddComponent(component.LightFaultDsType)
}
}
return ecs.NewOkEmptyResult()
})
return r.Err
}
// SignalLightDrive 当没有电路时,直接驱动信号机灯位上的灯
// ldLights : 需要亮的灯;当为空时则信号机所有色灯灭灯
func SignalLightDrive(w ecs.World, signalId string, ldLights ...component_proto.Light_Color) error {

11
go.mod
View File

@ -3,7 +3,7 @@ module joylink.club/rtsssimulation
go 1.21
require (
github.com/stretchr/testify v1.8.3
github.com/stretchr/testify v1.8.4
google.golang.org/protobuf v1.31.0
joylink.club/ecs v0.0.1
)
@ -11,10 +11,11 @@ require (
replace joylink.club/ecs => ./jl-ecs-go
require (
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/google/go-cmp v0.5.9 // indirect
github.com/kr/text v0.2.0 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
github.com/google/go-cmp v0.6.0 // indirect
github.com/kr/pretty v0.3.1 // indirect
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
github.com/yohamta/donburi v1.3.9 // indirect
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)

19
go.sum
View File

@ -1,18 +1,14 @@
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY=
github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8=
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
github.com/yohamta/donburi v1.3.9 h1:sYAPaelSnxmoTGjgH9ZlYt4pUKrnwvAv4YGXxLZCK6E=
github.com/yohamta/donburi v1.3.9/go.mod h1:5QkyraUjkzbMVTD2b8jaPFy1Uwjm/zdFN1c1lZGaezg=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@ -20,7 +16,6 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0
google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

View File

@ -1,8 +1,10 @@
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/ebitengine/purego v0.0.0-20220905075623-aeed57cda744/go.mod h1:Eh8I3yvknDYZeCuXH9kRNaPuHEwvXDCk378o9xszmHg=
github.com/ebitengine/purego v0.1.0/go.mod h1:Eh8I3yvknDYZeCuXH9kRNaPuHEwvXDCk378o9xszmHg=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20220806181222-55e207c401ad/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/hajimehoshi/bitmapfont/v2 v2.2.2/go.mod h1:Ua/x9Dkz7M9CU4zr1VHWOqGwjKdXbOTRsH7lWfb1Co0=
github.com/hajimehoshi/ebiten/v2 v2.4.13/go.mod h1:BZcqCU4XHmScUi+lsKexocWcf4offMFwfp8dVGIB/G4=
github.com/hajimehoshi/file2byteslice v0.0.0-20210813153925-5340248a8f41/go.mod h1:CqqAHp7Dk/AqQiwuhV1yT2334qbA/tFWQW0MD2dGqUE=
@ -14,15 +16,21 @@ github.com/jakecoffman/cp v1.2.1/go.mod h1:JjY/Fp6d8E1CHnu74gWNnU0+b9VzEdUVPoJxg
github.com/jezek/xgb v1.0.1/go.mod h1:nrhwO0FX/enq75I7Y7G8iN1ubpSGZEiA3v9e9GyRFlk=
github.com/jfreymuth/oggvorbis v1.0.4/go.mod h1:1U4pqWmghcoVsCJJ4fRBKv9peUJMBHixthRlBeD6uII=
github.com/jfreymuth/vorbis v1.0.2/go.mod h1:DoftRo4AznKnShRl1GxiTFCseHr4zR9BN3TWXyuzrqQ=
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI=
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
go.uber.org/goleak v1.2.0/go.mod h1:XJYK+MuIchqpmGmUSAzotztawfKvYLUIgg7guXrwVUo=
@ -81,4 +89,5 @@ golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

@ -1 +1 @@
Subproject commit 2757e2c4e06b03afab94727cee9d948dae6d1754
Subproject commit 9c5dde7b2ec28c555488eee7dec81bb1f612c443

View File

@ -6,6 +6,7 @@ option go_package = "./component/component_proto";
message PsdState {
bool close = 1;
bool obstacle = 2;
}
message Psd {

View File

@ -159,6 +159,7 @@ message Transponder {
DevicePort turnoutPort = 4; //
bytes fixedTelegram = 5;//
Type type = 6;//
bytes fixedUserTelegram = 7; //
enum Type {
FB = 0; //
WB = 1; //

View File

@ -1,6 +1,6 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.31.0
// protoc-gen-go v1.32.0
// protoc v4.23.1
// source: cg_repo.proto

File diff suppressed because it is too large Load Diff

View File

@ -1,657 +0,0 @@

1"
3
3
1"
5
4
2"
6
5
3"
11
6
4"
12
15
14"
17
16
8"
18
17
15"
20
18
16"
19
21
20"
22
22
21"
23
23
22"
25
24
19"
26
25
23"
29
26
24"
30
29
25"
32
30
26"
31
31
30"
34
32
29"
33
33
32"
36
34
31"
38
36
33"
42
38
34"
39
44
42"
45
45
44"
46
46
45"
47
47
46"
48
48
47
50
43"
51
51
50"
52
52
51"
53
53
52"
54
54
53
379
43
1519
8"
8
1521
19"
19
1522
20"
19
1523
41"
41
1524
42"
41
39
38"
40
40
39"
41
2"
4
1525812
8"
8!
15261114
11"
8
152719
19"
19
152820
20"
19"
15294143
41"
41
153042
42"
41"+
532¤¯ã MAIN_LINE"
1"
3"-
533ÿ›ã MAIN_LINE"
2"
4"-
535ÿ’æ MAIN_LINE"
4"
6"+
534¤¦æ MAIN_LINE"
3"
5",
536çüï MAIN_LINE"
5"
11".
537çüï MAIN_LINE"
6"
12".
578¹Ëñ MAIN_LINE"
8"
11"-
579Ùçò MAIN_LINE"
12"
14"-
538ª¶ô MAIN_LINE"
15"
14".
540ª¶ô MAIN_LINE"
16"
8"-
539Ü­÷ MAIN_LINE"
15"
17"/
541Ü­÷ MAIN_LINE"
16"
18"/
543ú…<C3BA> MAIN_LINE"
18"
19"-
542¬Ÿ<C2AC> MAIN_LINE"
17"
20"-
580 <>ƒ MAIN_LINE"
19"
20"/
548ꨅ MAIN_LINE"
24"
19"-
544œÂ… MAIN_LINE"
21"
20"-
545䀓 MAIN_LINE"
21"
22"-
546ð©Æ MAIN_LINE"
22"
23"/
549àÌÊ MAIN_LINE"
24"
26"-
547àÌÊ MAIN_LINE"
23"
25"-
550€ÎÔ MAIN_LINE"
25"
29"/
551€ÎÔ MAIN_LINE"
26"
30"-
552‘šú MAIN_LINE"
29"
32"-
555<08>½þ MAIN_LINE"
32"
33"/
554<08>½þ MAIN_LINE"
31"
34"-
556¡¾ˆ MAIN_LINE"
33"
36"/
557¡¾ˆ MAIN_LINE"
34"
38"/
560Ùá’ MAIN_LINE"
39"
40"-
558迤 MAIN_LINE"
36"
42"/
561»¨  MAIN_LINE"
40"
41"/
582迤 MAIN_LINE"
41"
42"0
572Ýð¥ MAIN_LINE"
379"
43"/
567êè MAIN_LINE"
50"
43"/
568ŠÅ² MAIN_LINE"
50"
51"-
563ŠÅ² MAIN_LINE"
44"
45"-
562Ø⨠MAIN_LINE"
44"
42"/
569úç¶ MAIN_LINE"
51"
52"-
564úç¶ MAIN_LINE"
45"
46"-
565ìüà MAIN_LINE"
46"
47"/
570´âÄ MAIN_LINE"
52"
53"-
566ÜŸÈ MAIN_LINE"
47"
48"/
571¦ƒÉ MAIN_LINE"
53"
54"!
575ÖÏÔ MAIN_LINE"
48"#
576ÖÏÔ MAIN_LINE"
54"
573þâ× MAIN_LINE"
1""
574þâ× MAIN_LINE"
2"/
559‘ጠMAIN_LINE"
38"
39"/
553ððØ MAIN_LINE"
30"
31*7
8Š—ô MAIN_LINE
16"
12*
1519*5
11‡œð MAIN_LINE
5"
14*
1519*6
14Š—ô MAIN_LINE
15"
11*
1519*8
19š¥<C5A1> MAIN_LINE
18"
24*
1521*6
20ž … MAIN_LINE
21"
17*
1521*:
41ÛÇ  MAIN_LINE
1523"
43*
1523*6
42¸Ã¨ MAIN_LINE
44"
36*
1523*7
43×Ó¢ MAIN_LINE
41"
50*
379*6
12‡œð MAIN_LINE
6"
8*
15192
212¶ú× MAIN_LINE12
217¶ú× MAIN_LINE22
484ì—ã MAIN_LINE32
485Ç„ã MAIN_LINE22
491Ỿ MAIN_LINE42
492¯åï MAIN_LINE15262
493¯åï MAIN_LINE15192#
494<08>´ñ MAIN_LINE"
112
490ܽæ MAIN_LINE32
495‘ÿò MAIN_LINE15262
496”Å÷ MAIN_LINE152
497”Å÷ MAIN_LINE162
498ô‡<C3B4> MAIN_LINE15222
499¯åï MAIN_LINE182
500Ø´ƒ MAIN_LINE15222
501ÔÙ… MAIN_LINE212
502¢À… MAIN_LINE15212
504¬é’ MAIN_LINE222
505˜äÊ MAIN_LINE252
506˜äÊ MAIN_LINE262
507ȶÔ MAIN_LINE252
508ȶÔ MAIN_LINE302
509¹Ôþ MAIN_LINE332
510¹Ôþ MAIN_LINE342
511馈 MAIN_LINE332
512馈 MAIN_LINE342
514‘ù’ MAIN_LINE402
515°¨¤ MAIN_LINE15242
516ƒ‘  MAIN_LINE15232#
518¢Û¨ MAIN_LINE"
432!
519¨ò¨ MAIN_LINE"
422
520•ˆ¦ MAIN_LINE15232
521°¨¤ MAIN_LINE15232
522Ò­² MAIN_LINE442
523Ò­² MAIN_LINE502
524²ÿ¶ MAIN_LINE452
525²ÿ¶ MAIN_LINE512
526´åà MAIN_LINE462
527üÊÄ MAIN_LINE522
528”·È MAIN_LINE472
529ÞšÉ MAIN_LINE532
530ž¸Ô MAIN_LINE482
531ž¸Ô MAIN_LINE54:
1170„«Ú MAIN_LINE1:
1171ÄéÚ MAIN_LINE1:
1172œ Û MAIN_LINE1:
1173ÿ³Û MAIN_LINE2:
1174ŸÖÚ MAIN_LINE2:
1175÷ŒÛ MAIN_LINE2:
1176„¬Ý MAIN_LINE1:
1177ÄêÝ MAIN_LINE1:
1178œ¡Þ MAIN_LINE1:
1179ߘÝ MAIN_LINE2:
1180Ÿ×Ý MAIN_LINE2:
1181÷<>Þ MAIN_LINE2:
1182ÜÉâ MAIN_LINE1:
1183´€ã MAIN_LINE1:
1184ᦉ MAIN_LINE2:
1185<08>íâ MAIN_LINE2:
1186”Õæ MAIN_LINE5:
1187ì‹ç MAIN_LINE5:
1188¬Êç MAIN_LINE5:
1189<>è MAIN_LINE5:
1190ïÁæ MAIN_LINE6:
1191”Öé MAIN_LINE5:
1192ìŒê MAIN_LINE5:
1193¬Ëê MAIN_LINE5:
1194„‚ë MAIN_LINE5:
1195¬µî MAIN_LINE5:
1196„ìî MAIN_LINE5:
1197Īï MAIN_LINE5:
1198÷Íï MAIN_LINE5:
1199Çøæ MAIN_LINE6:
1200‡·ç MAIN_LINE6:
1201ßíç MAIN_LINE6:
1202ïÂé MAIN_LINE6:
1203Çùé MAIN_LINE6:
1204ßñé MAIN_LINE6:
1205ßîê MAIN_LINE6:
1206࢔ MAIN_LINE6:
1207ßØî MAIN_LINE6:
1208Ÿ—ï MAIN_LINE6:
1209÷Íï MAIN_LINE6:
1210üÕô MAIN_LINE15:
1211üÕô MAIN_LINE16:
1212ÌÜ÷ MAIN_LINE17:
1213ìû÷ MAIN_LINE17:
1214¬ºø MAIN_LINE17:
1215„ñø MAIN_LINE17:
1216”èü MAIN_LINE17:
1217ìžý MAIN_LINE17:
1218¬Ýý MAIN_LINE17:
1219„”þ MAIN_LINE17:
1220´Ìÿ MAIN_LINE17:
1221Œƒ€ MAIN_LINE17:
1224ÌÜ÷ MAIN_LINE18:
1225ìû÷ MAIN_LINE18:
1226¬ºø MAIN_LINE18:
1227„ñø MAIN_LINE18:
1228´©ú MAIN_LINE18:
1229Œàú MAIN_LINE18:
1230Ìžû MAIN_LINE18:
1231¤Õû MAIN_LINE18:
1232´Ìÿ MAIN_LINE18:
1233Œƒ€ MAIN_LINE18:
1234Ò¿€ MAIN_LINE18:
1235òÞ€ MAIN_LINE18:
1236Œñ… MAIN_LINE21:
1237”˜† MAIN_LINE21:
1238þîŠ MAIN_LINE21:
1239æì” MAIN_LINE24:
1240牴 MAIN_LINE24:
1241Å<> MAIN_LINE22:
1242Öù© MAIN_LINE22:
1243ç㸠MAIN_LINE22:
1244<08>ض MAIN_LINE24:
1245øÍÇ MAIN_LINE24:
1246ÐûÊ MAIN_LINE25:
1247Ø¢Ë MAIN_LINE25:
1248€éË MAIN_LINE25:
1249ØŸÌ MAIN_LINE25:
1250°ÍÏ MAIN_LINE25:
1251€ŒÑ MAIN_LINE25:
1252ØÂÑ MAIN_LINE25:
1253ˆøÓ MAIN_LINE25:
1254<08>ŸÔ MAIN_LINE25:
1255ˆûÒ MAIN_LINE25:
1256ÐûÊ MAIN_LINE26:
1257Ø¢Ë MAIN_LINE26:
1258€éË MAIN_LINE26:
1259ØŸÌ MAIN_LINE26:
1260ˆØÍ MAIN_LINE26:
1261àŽÎ MAIN_LINE26:
1262 ÍÎ MAIN_LINE26:
1263øƒÏ MAIN_LINE26:
1264ˆûÒ MAIN_LINE26:
1265à±Ó MAIN_LINE26:
1266ˆøÓ MAIN_LINE26:
1267<08>ŸÔ MAIN_LINE26:
1268èÌ× MAIN_LINE30:
1269ÁÅé MAIN_LINE31:
1270èÌ× MAIN_LINE29:
1271ÁÅé MAIN_LINE29:
1272™¾û MAIN_LINE31:
1273™¾û MAIN_LINE32:
1274ñëþ MAIN_LINE33:
1275ù’ÿ MAIN_LINE33:
1276¡Ùÿ MAIN_LINE33:
1277ù<> MAIN_LINE33:
1278‰‡„ MAIN_LINE33:
1279ὄ MAIN_LINE33:
1280¡ü„ MAIN_LINE33:
1281ù²… MAIN_LINE33:
1282<08>¢‡ MAIN_LINE33:
1283©ë† MAIN_LINE33:
1284©è‡ MAIN_LINE33:
1285±<>ˆ MAIN_LINE33:
1286ñëþ MAIN_LINE34:
1287ù’ÿ MAIN_LINE34:
1288¡Ùÿ MAIN_LINE34:
1289ù<> MAIN_LINE34:
1290©È<C2A9> MAIN_LINE34:
1291<08>ÿ<EFBFBD> MAIN_LINE34:
1292Á½‚ MAIN_LINE34:
1293†þ… MAIN_LINE34:
1294©ë† MAIN_LINE34:
1295<08>¢‡ MAIN_LINE34:
1296©è‡ MAIN_LINE34:
1297±<>ˆ MAIN_LINE34:
1298‰½‹ MAIN_LINE36:
1299‰½‹ MAIN_LINE38:
1300ÊÔ˜ MAIN_LINE36:
1301ÐÄ¥ MAIN_LINE1524:
1302ûøš MAIN_LINE40:
1303ÃÒŸ MAIN_LINE40:
1304ËùŸ MAIN_LINE40:"
1305ˆÜ¥ MAIN_LINE"
42:
1306‚Å¥ MAIN_LINE1523:
1307à‰© MAIN_LINE44:
1308€©© MAIN_LINE44:
1309Šà© MAIN_LINE44:
1310â–ª MAIN_LINE44:
1311ò<>® MAIN_LINE44:
1312ÊÄ® MAIN_LINE44:
1313Šƒ¯ MAIN_LINE44:
1314⹯ MAIN_LINE44:
1315’ò° MAIN_LINE44:
1316ꨱ MAIN_LINE44:
1317’ï± MAIN_LINE44:
1318š–² MAIN_LINE44:
1319Úò¨ MAIN_LINE50:
1320♩ MAIN_LINE50:
1321Šà© MAIN_LINE50:
1322â–ª MAIN_LINE50:
1323’Ï« MAIN_LINE50:
1324ê…¬ MAIN_LINE50:
1325ªÄ¬ MAIN_LINE50:
1326‚û¬ MAIN_LINE50:
1327’ò° MAIN_LINE50:
1328ꨱ MAIN_LINE50:
1329’ï± MAIN_LINE50:
1330š–² MAIN_LINE50:
1331òõ MAIN_LINE45:
1332òõ MAIN_LINE51:
1333ê–· MAIN_LINE46:
1334ò½· MAIN_LINE46:
1335Ú³½ MAIN_LINE46:
1336ê–· MAIN_LINE52:
1337ò½· MAIN_LINE52:
1338Êâ½ MAIN_LINE52:
1339úºÅ MAIN_LINE47:
1340š×Æ MAIN_LINE47:
1341ºóÇ MAIN_LINE47:
1342úºÅ MAIN_LINE53:
1343š×Æ MAIN_LINE53:
1344ºóÇ MAIN_LINE53:
1345´É€ MAIN_LINE17:
1346¼ð€ MAIN_LINE17:"
1347ÉŒ„ MAIN_LINE"
20B1
1356½ôÕ MAIN_LINE€ñõ MAIN_LINEÐB-
1378ÎøÕ MAIN_LINE€ñõ MAIN_LINEÐB5
1379€ñõ MAIN_LINE¸Ïˆ MAIN_LINE°ðÿÿÿÿÿÿÿB5
1382¨¹Ÿ MAIN_LINEúôÆ MAIN_LINEß±ÿÿÿÿÿÿÿB.
1385¨…Ú MAIN_LINEñ<>ø MAIN_LINEÝ‹B*
1386ñ<>ø MAIN_LINE°–‹ MAIN_LINEB5
1387°–‹ MAIN_LINE𡜠MAIN_LINEèŠÿÿÿÿÿÿÿB*
1388𡜠MAIN_LINE Á¶ MAIN_LINEB-
1389 Á¶ MAIN_LINEÐ<>Æ MAIN_LINEð.B*
1390Ð<>Æ MAIN_LINEúŒÙ MAIN_LINEB9
1391€ñõ MAIN_LINE¸Ïˆ MAIN_LINE°ðÿÿÿÿÿÿÿB2
1393œ‰Ú MAIN_LINEñ<>ø MAIN_LINEãŒB.
1394ñ<>ø MAIN_LINE°–‹ MAIN_LINEB9
1395°–‹ MAIN_LINE𡜠MAIN_LINEèŠÿÿÿÿÿÿÿB.
1396𡜠MAIN_LINE Á¶ MAIN_LINEB1
1397 Á¶ MAIN_LINEÐ<>Æ MAIN_LINEð.B.
1398Ð<>Æ MAIN_LINE°©Ø MAIN_LINEB5
1399¸Ïˆ MAIN_LINE¨¹Ÿ MAIN_LINE¬¡þÿÿÿÿÿÿB-
1400úôÆ MAIN_LINE¨…Ú MAIN_LINEÐB9
1401¸Ïˆ MAIN_LINE¨¹Ÿ MAIN_LINE¬¡þÿÿÿÿÿÿB9
1402¨¹Ÿ MAIN_LINEˆŸÇ MAIN_LINEð±ÿÿÿÿÿÿÿB1
1403ˆŸÇ MAIN_LINEœ‰Ú MAIN_LINEÐJ2
1406á½Í MAIN_LINEà¥ï MAIN_LINEðý9J.
1433â½Í MAIN_LINE…¹ï MAIN_LINEø¤:J*
1434…¹ï MAIN_LINE<08>ß“ MAIN_LINEJ*
1437š<>» MAIN_LINEÙî¾ MAIN_LINEJ5
1438Ùî¾ MAIN_LINE¡ÿÊ MAIN_LINEÀ°ÛÿÿÿÿÿÿJ*
1439¡ÿÊ MAIN_LINEȧÔ MAIN_LINEJ5
1440ȧÔ MAIN_LINEÈ<>å MAIN_LINE°¾æÿÿÿÿÿÿJ*
1441È<>å MAIN_LINEîçç MAIN_LINEJ.
1442îçç MAIN_LINEðýý MAIN_LINE¸ÉJ*
1443ðýý MAIN_LINE¾Ÿ² MAIN_LINEJ5
1444¾Ÿ² MAIN_LINEô¯É MAIN_LINEÀƒêÿÿÿÿÿÿJ.
1445à¥ï MAIN_LINEÛª„ MAIN_LINEJ2
1446Ûª„ MAIN_LINEâÞŒ MAIN_LINE€‰zJ.
1447âÞŒ MAIN_LINE¾–— MAIN_LINEJ9
1449Æ¿À MAIN_LINEÿ<>Ì MAIN_LINEÀ°ÛÿÿÿÿÿÿJ.
1450ÿ<>Ì MAIN_LINE€‚Ô MAIN_LINEJ9
1451€‚Ô MAIN_LINE<08>ëä MAIN_LINE°¾æÿÿÿÿÿÿJ.
1452<08>ëä MAIN_LINEƒòç MAIN_LINEJ2
1453ƒòç MAIN_LINE¬îý MAIN_LINE ÑJ.
1454¬îý MAIN_LINE ¸± MAIN_LINEJ9
1455 ¸± MAIN_LINE˜ÙÊ MAIN_LINE€ËçÿÿÿÿÿÿJ.
1456<08>ß“ MAIN_LINEš<>» MAIN_LINE<18>©6J2
1457¾–— MAIN_LINE—̺ MAIN_LINEÐð3J.
1458—̺ MAIN_LINEÆ¿À MAIN_LINER#
Š—ô MAIN_LINE  MAIN_LINER
‡œð MAIN_LINER
Š—ô MAIN_LINER#
š¥<C5A1> MAIN_LINE  MAIN_LINER
ž … MAIN_LINER#
ÛÇ  MAIN_LINE  MAIN_LINER
¸Ã¨ MAIN_LINER#
×Ó¢ MAIN_LINE  MAIN_LINER#
‡œð MAIN_LINE  MAIN_LINER
½ôÕ MAIN_LINER
€ñõ MAIN_LINER
¸Ïˆ MAIN_LINER
¨¹Ÿ MAIN_LINER
ˆŸÇ MAIN_LINER
œ‰Ú MAIN_LINER
ñ<>ø MAIN_LINER
°–‹ MAIN_LINER
𡜠MAIN_LINER
 Á¶ MAIN_LINER
Ð<>Æ MAIN_LINER
°©Ø MAIN_LINER
úŒÙ MAIN_LINER
Ð<>Æ MAIN_LINER
ÎøÕ MAIN_LINER
€ñõ MAIN_LINER
¸Ïˆ MAIN_LINER
¨¹Ÿ MAIN_LINER
úôÆ MAIN_LINER
¨…Ú MAIN_LINER
ñ<>ø MAIN_LINER
°–‹ MAIN_LINER
𡜠MAIN_LINER
 Á¶ MAIN_LINER
á½Í MAIN_LINER
à¥ï MAIN_LINER
Ûª„ MAIN_LINER
âÞŒ MAIN_LINER
¾–— MAIN_LINER
—̺ MAIN_LINER
Æ¿À MAIN_LINER
ÿ<>Ì MAIN_LINER
€‚Ô MAIN_LINER
<08>ëä MAIN_LINER
ƒòç MAIN_LINER
¬îý MAIN_LINER
 ¸± MAIN_LINER
˜ÙÊ MAIN_LINER
â½Í MAIN_LINER
…¹ï MAIN_LINER
<08>ß“ MAIN_LINER
š<>» MAIN_LINER
Ùî¾ MAIN_LINER
¡ÿÊ MAIN_LINER
ȧÔ MAIN_LINER
È<>å MAIN_LINER
îçç MAIN_LINER
ðýý MAIN_LINER
¾Ÿ² MAIN_LINER
ô¯É MAIN_LINE

View File

@ -9,18 +9,25 @@ import (
// 对数据做基础检查
func baseCheck(source *proto.Repository) []string {
var errMsg []string
uidMap := make(map[string]bool)
//区段
sectionMap := make(map[string]*proto.PhysicalSection)
for _, section := range source.PhysicalSections {
sectionMap[section.Id] = section
if uidMap[section.Id] {
errMsg = append(errMsg, fmt.Sprintf("uid[%s]重复", section.Id))
continue
}
uidMap[section.Id] = true
if len(section.TurnoutIds) == 0 && section.ADevicePort == nil && section.BDevicePort == nil {
errMsg = append(errMsg, fmt.Sprintf("区段[%s]缺少关联的道岔或区段", section.Id))
}
}
//道岔
turnoutMap := make(map[string]*proto.Turnout)
for _, turnout := range source.Turnouts {
turnoutMap[turnout.Id] = turnout
if uidMap[turnout.Id] {
errMsg = append(errMsg, fmt.Sprintf("uid[%s]重复", turnout.Id))
continue
}
uidMap[turnout.Id] = true
if turnout.Km == nil {
errMsg = append(errMsg, fmt.Sprintf("道岔[%s]缺少公里标", turnout.Id))
}
@ -30,15 +37,23 @@ func baseCheck(source *proto.Repository) []string {
}
}
//检测点
checkPointMap := make(map[string]*proto.CheckPoint)
for _, point := range source.CheckPoints {
checkPointMap[point.Id] = point
if uidMap[point.Id] {
errMsg = append(errMsg, fmt.Sprintf("uid[%s]重复", point.Id))
continue
}
uidMap[point.Id] = true
if point.Km == nil {
errMsg = append(errMsg, fmt.Sprintf("检测点[%s]缺少公里标", point.Id))
}
}
//信号机
for _, signal := range source.Signals {
if uidMap[signal.Id] {
errMsg = append(errMsg, fmt.Sprintf("uid[%s]重复", signal.Id))
continue
}
uidMap[signal.Id] = true
if signal.Km == nil || signal.Km.CoordinateSystem == "" {
errMsg = append(errMsg, fmt.Sprintf("信号机[%s]缺少公里标", signal.Id))
}
@ -48,6 +63,11 @@ func baseCheck(source *proto.Repository) []string {
}
//应答器
for _, transponder := range source.Transponders {
if uidMap[transponder.Id] {
errMsg = append(errMsg, fmt.Sprintf("uid[%s]重复", transponder.Id))
continue
}
uidMap[transponder.Id] = true
if transponder.Km == nil || transponder.Km.CoordinateSystem == "" {
errMsg = append(errMsg, fmt.Sprintf("应答器[%s]缺少公里标", transponder.Id))
}

View File

@ -17,11 +17,7 @@ var repositoryMap = make(map[string]*Repository)
func BuildRepository(source *proto.Repository) (*Repository, error) {
errMsg := baseCheck(source)
if len(errMsg) != 0 {
println("-------------------- 数据异常信息 --------------------")
for _, s := range errMsg {
println(s)
}
return nil, errors.New("数据校验未通过")
return nil, errors.New(strings.Join(errMsg, "\n"))
}
repository := newRepository(source.Id, source.Version)
err := buildModels(source, repository)
@ -84,7 +80,7 @@ func buildModels(source *proto.Repository, repository *Repository) error {
repository.signalMap[m.Id()] = m
}
for _, protoData := range source.Transponders {
m := NewTransponder(protoData.Id, protoData.Km, protoData.FixedTelegram, protoData.Type)
m := NewTransponder(protoData.Id, protoData.Km, protoData.FixedTelegram, protoData.FixedUserTelegram, protoData.Type)
repository.responderMap[m.Id()] = m
}
for _, protoData := range source.Slopes {
@ -751,6 +747,7 @@ func relateDevicesAndLink(repo *Repository, link *Link, startKm *proto.Kilometer
case proto.DeviceType_DeviceType_Transponder:
device.(*Transponder).bindLinkPosition(linkPosition)
}
link.bindDevices(device)
}
return nil
}

View File

@ -9,15 +9,17 @@ type Transponder struct {
//section *PhysicalSection
//turnoutPort TurnoutPort
linkPosition *LinkPosition //此位置是应答器初始位置,当前位置需从应答器实体中获取
fixedTelegram []byte //无源应答器固定报文
fixedTelegram []byte //应答器固定报文
fixedUserTelegram []byte //应答器固定用户报文
baliseType proto.Transponder_Type //应答器类型
}
func NewTransponder(id string, km *proto.Kilometer, fixedTelegram []byte, baliseType proto.Transponder_Type) *Transponder {
func NewTransponder(id string, km *proto.Kilometer, fixedTelegram []byte, fixedUserTelegram []byte, baliseType proto.Transponder_Type) *Transponder {
return &Transponder{
Identity: identity{id, proto.DeviceType_DeviceType_Transponder},
km: km,
fixedTelegram: fixedTelegram,
fixedUserTelegram: fixedUserTelegram,
baliseType: baliseType,
}
}
@ -27,6 +29,9 @@ func (t *Transponder) TransponderType() proto.Transponder_Type {
func (t *Transponder) FixedTelegram() []byte {
return t.fixedTelegram
}
func (t *Transponder) FixedUserTelegram() []byte {
return t.fixedUserTelegram
}
func (t *Transponder) bindLinkPosition(position *LinkPosition) {
t.linkPosition = position
}
@ -38,3 +43,7 @@ func (t *Transponder) LinkPosition() *LinkPosition {
func (t *Transponder) Km() *proto.Kilometer {
return t.km
}
func (t *Transponder) BaliseType() proto.Transponder_Type {
return t.baliseType
}

View File

@ -313,5 +313,8 @@ func (t *TurnoutPort) Device() PortedDevice {
}
func (t *TurnoutPort) Turnout() *Turnout {
if t == nil {
return nil
}
return t.turnout
}

View File

@ -20,99 +20,104 @@ package circuit_sys
// }
// }
// func (p *PsdSys) Update(world ecs.World) {
// worldData := entity.GetWorldData(world)
// p.query.Each(world, func(entry *ecs.Entry) {
// psc := component.PscType.Get(entry)
// //更新屏蔽门电路及PSC相关状态
// asdList := component.AsdListType.Get(entry)
// psdState := component.PsdStateType.Get(entry)
// if entry.HasComponent(component.PsdCircuitType) { //有屏蔽门电路
// psdCircuit := component.PsdCircuitType.Get(entry)
// //屏蔽门驱动
// if psdCircuit.GMJ != nil {
// p.exciteGMJ(worldData, psdCircuit)
// psc.InterlockGM = component.BitStateType.Get(psdCircuit.GMJ).Val
// }
// for group, kmj := range psdCircuit.KMJMap {
// p.exciteKMJ(worldData, psdCircuit, kmj)
// psc.InterlockKmGroup[group] = component.BitStateType.Get(kmj).Val
// }
func (p *PsdSys) Update(world ecs.World) {
worldData := entity.GetWorldData(world)
p.query.Each(world, func(entry *ecs.Entry) {
psc := component.PscType.Get(entry)
//更新屏蔽门电路及PSC相关状态
asdList := component.AsdListType.Get(entry)
psdState := component.PsdStateType.Get(entry)
if entry.HasComponent(component.PsdCircuitType) { //有屏蔽门电路
psdCircuit := component.PsdCircuitType.Get(entry)
//屏蔽门驱动
if psdCircuit.GMJ != nil {
p.driveGMJ(worldData, psdCircuit)
psc.InterlockGM = component.BitStateType.Get(psdCircuit.GMJ).Val
}
for group, kmj := range psdCircuit.KMJMap {
p.driveKMJ(worldData, psdCircuit, kmj)
psc.InterlockKmGroup[group] = component.BitStateType.Get(kmj).Val
}
// if psdCircuit.MGJ != nil {
// p.exciteMGJ(psdCircuit, asdList)
// psdState.Close = component.BitStateType.Get(psdCircuit.MGJ).Val
// }
// if psdCircuit.MPLJ != nil {
// p.exciteMPLJ(world, psdCircuit, component.UidType.Get(entry))
// psc.InterlockMPL = component.BitStateType.Get(psdCircuit.MPLJ).Val
// }
// //间隙探测
// if psdCircuit.QDTCJ != nil && psdCircuit.TZTCJ != nil {
// p.exciteQDTCJ(worldData, psdCircuit)
// p.exciteTZTCJ(worldData, psdCircuit)
// psc.QDTC = component.BitStateType.Get(psdCircuit.QDTCJ).Val
// psc.TZTC = component.BitStateType.Get(psdCircuit.TZTCJ).Val
// }
// } else {
// psdState.Close = p.isAllAsdMotorClosed(asdList)
// }
// //更新站台门控箱电路及PSC相关状态
// if entry.HasComponent(component.PlatformMkxCircuitType) {
// pmc := component.PlatformMkxCircuitType.Get(entry)
// var pcbTd bool
// var pobTd bool
// var pabTd bool
// for _, mkxEntry := range pmc.MkxList {
// mkx := component.MkxType.Get(mkxEntry)
// if mkx.PCB != nil && component.BitStateType.Get(mkx.PCB).Val {
// pcbTd = true
// }
// if mkx.POB != nil && component.BitStateType.Get(mkx.POB).Val {
// pobTd = true
// }
// if mkx.PAB != nil && component.BitStateType.Get(mkx.PAB).Val {
// pabTd = true
// }
// }
// if pmc.PCBJ != nil {
// component.RelayDriveType.Get(pmc.PCBJ).Td = pcbTd
// psc.MkxGM = component.BitStateType.Get(pmc.PCBJ).Val
// }
// if pmc.POBJ != nil {
// component.RelayDriveType.Get(pmc.POBJ).Td = pobTd
// psc.MkxKM = component.BitStateType.Get(pmc.POBJ).Val
// }
// if pmc.PABJ != nil {
// component.RelayDriveType.Get(pmc.PABJ).Td = pabTd
// }
// }
// //设置滑动门电机通断电状态
// repo := entity.GetWorldData(world).Repo
// psd := repo.FindPsd(component.UidType.Get(entry).Id)
// if psc.MkxKM { //优先门控箱的开门
// p.allKm(asdList)
// } else if psc.MkxGM { //其次门控箱的关门
// p.gm(asdList)
// } else if !psc.InterlockMPL { //联锁操作没有被旁路
// if psc.InterlockGM {
// p.gm(asdList)
// } else {
// for group, km := range psc.InterlockKmGroup {
// if km {
// var asdGroup *proto.AsdGroup
// if group == 0 {
// asdGroup = psd.FindFirstAsdGroup()
// } else {
// asdGroup = psd.FindAsdGroup(group)
// }
// p.km(asdGroup.Start, asdGroup.End, asdList)
// }
// }
// }
// }
// })
// }
if psdCircuit.MGJ != nil {
p.driveMGJ(psdCircuit, asdList)
psdState.Close = component.BitStateType.Get(psdCircuit.MGJ).Val
}
if psdCircuit.MPLJ != nil {
p.driveMPLJ(world, psdCircuit, component.UidType.Get(entry))
psc.InterlockMPL = component.BitStateType.Get(psdCircuit.MPLJ).Val
}
//间隙探测驱动
if psdCircuit.QDTCJ != nil && psdCircuit.TZTCJ != nil {
p.exciteQDTCJ(worldData, psdCircuit)
p.exciteTZTCJ(worldData, psdCircuit)
psc.QDTC = component.BitStateType.Get(psdCircuit.QDTCJ).Val
psc.TZTC = component.BitStateType.Get(psdCircuit.TZTCJ).Val
}
//间隙探测
if psdCircuit.ZAWJ != nil {
p.exciteZAWJ(psdCircuit, asdList)
psdState.Obstacle = component.BitStateType.Get(psdCircuit.ZAWJ).Val
}
} else {
psdState.Close = p.isAllAsdMotorClosed(asdList)
}
//更新站台门控箱电路及PSC相关状态
if entry.HasComponent(component.PlatformMkxCircuitType) {
pmc := component.PlatformMkxCircuitType.Get(entry)
var pcbTd bool
var pobTd bool
var pabTd bool
for _, mkxEntry := range pmc.MkxList {
mkx := component.MkxType.Get(mkxEntry)
if mkx.PCB != nil && component.BitStateType.Get(mkx.PCB).Val {
pcbTd = true
}
if mkx.POB != nil && component.BitStateType.Get(mkx.POB).Val {
pobTd = true
}
if mkx.PAB != nil && component.BitStateType.Get(mkx.PAB).Val {
pabTd = true
}
}
if pmc.PCBJ != nil {
component.RelayDriveType.Get(pmc.PCBJ).Td = pcbTd
psc.MkxGM = component.BitStateType.Get(pmc.PCBJ).Val
}
if pmc.POBJ != nil {
component.RelayDriveType.Get(pmc.POBJ).Td = pobTd
psc.MkxKM = component.BitStateType.Get(pmc.POBJ).Val
}
if pmc.PABJ != nil {
component.RelayDriveType.Get(pmc.PABJ).Td = pabTd
}
}
//设置滑动门电机通断电状态
repo := entity.GetWorldData(world).Repo
psd := repo.FindPsd(component.UidType.Get(entry).Id)
if psc.MkxKM { //优先门控箱的开门
p.allKm(asdList)
} else if psc.MkxGM { //其次门控箱的关门
p.gm(asdList)
} else if !psc.InterlockMPL { //联锁操作没有被旁路
if psc.InterlockGM {
p.gm(asdList)
} else {
for group, km := range psc.InterlockKmGroup {
if km {
var asdGroup *proto.AsdGroup
if group == 0 {
asdGroup = psd.FindFirstAsdGroup()
} else {
asdGroup = psd.FindAsdGroup(group)
}
p.km(asdGroup.Start, asdGroup.End, asdList)
}
}
}
}
})
}
// func (p *PsdSys) km(start int32, end int32, asdList *component.AsdList) {
// for i := start - 1; i < end; i++ {
@ -136,51 +141,51 @@ package circuit_sys
// }
// }
// func (p *PsdSys) exciteGMJ(data *component.WorldData, circuit *component.PsdCircuit) {
// bit, err := data.QueryQdBit(component.UidType.Get(circuit.GMJ).Id)
// if err != nil {
// return
// }
// if bit { //驱动
// component.RelayDriveType.Get(circuit.GMJ).Td = true
// } else if component.BitStateType.Get(circuit.GMJ).Val { //判断自保持
// for _, entry := range circuit.KMJMap {
// if component.BitStateType.Get(entry).Val { //无法自保持
// component.RelayDriveType.Get(circuit.GMJ).Td = false
// return
// }
// }
// //自保持
// component.RelayDriveType.Get(circuit.GMJ).Td = true
// }
// }
func (p *PsdSys) driveGMJ(data *component.WorldData, circuit *component.PsdCircuit) {
bit, err := data.QueryQdBit(component.UidType.Get(circuit.GMJ).Id)
if err != nil {
return
}
if bit { //驱动
component.RelayDriveType.Get(circuit.GMJ).Td = true
} else if component.BitStateType.Get(circuit.GMJ).Val { //判断自保持
for _, entry := range circuit.KMJMap {
if component.BitStateType.Get(entry).Val { //无法自保持
component.RelayDriveType.Get(circuit.GMJ).Td = false
return
}
}
//自保持
component.RelayDriveType.Get(circuit.GMJ).Td = true
}
}
// func (p *PsdSys) exciteKMJ(data *component.WorldData, circuit *component.PsdCircuit, kmj *ecs.Entry) {
// bit, err := data.QueryQdBit(component.UidType.Get(kmj).Id)
// if err != nil {
// return
// }
// if bit { //驱动
// component.RelayDriveType.Get(kmj).Td = true
// } else if component.BitStateType.Get(kmj).Val { //判断自保持
// if component.BitStateType.Get(circuit.GMJ).Val {
// component.RelayDriveType.Get(kmj).Td = false
// return
// }
// for _, entry := range circuit.KMJMap {
// if entry != kmj && component.BitStateType.Get(entry).Val {
// component.RelayDriveType.Get(kmj).Td = false
// return
// }
// }
// //自保持
// component.RelayDriveType.Get(kmj).Td = true
// }
// }
func (p *PsdSys) driveKMJ(data *component.WorldData, circuit *component.PsdCircuit, kmj *ecs.Entry) {
bit, err := data.QueryQdBit(component.UidType.Get(kmj).Id)
if err != nil {
return
}
if bit { //驱动
component.RelayDriveType.Get(kmj).Td = true
} else if component.BitStateType.Get(kmj).Val { //判断自保持
if component.BitStateType.Get(circuit.GMJ).Val {
component.RelayDriveType.Get(kmj).Td = false
return
}
for _, entry := range circuit.KMJMap {
if entry != kmj && component.BitStateType.Get(entry).Val {
component.RelayDriveType.Get(kmj).Td = false
return
}
}
//自保持
component.RelayDriveType.Get(kmj).Td = true
}
}
// func (p *PsdSys) exciteMGJ(psdCircuit *component.PsdCircuit, asdList *component.AsdList) {
// component.BitStateType.Get(psdCircuit.MGJ).Val = p.isAllAsdMotorClosed(asdList)
// }
func (p *PsdSys) driveMGJ(psdCircuit *component.PsdCircuit, asdList *component.AsdList) {
component.RelayDriveType.Get(psdCircuit.MGJ).Td = p.isAllAsdMotorClosed(asdList)
}
// // 是否所有滑动门电机都是关闭状态(继电器表示)
// func (p *PsdSys) isAllAsdMotorClosed(asdList *component.AsdList) bool {
@ -193,11 +198,11 @@ package circuit_sys
// return true
// }
// func (p *PsdSys) exciteMPLJ(world ecs.World, circuit *component.PsdCircuit, uid *component.Uid) {
// data := entity.GetWorldData(world)
// psd := data.Repo.FindPsd(uid.Id)
// platform := psd.Platform()
// station := platform.Station()
func (p *PsdSys) driveMPLJ(world ecs.World, circuit *component.PsdCircuit, uid *component.Uid) {
data := entity.GetWorldData(world)
psd := data.Repo.FindPsd(uid.Id)
platform := psd.Platform()
station := platform.Station()
// var buttonCode string
// if strings.Contains(platform.Code(), "上行") {
@ -233,16 +238,30 @@ package circuit_sys
// }
// }
// func (p *PsdSys) exciteTZTCJ(data *component.WorldData, circuit *component.PsdCircuit) {
// bit, err := data.QueryQdBit(component.UidType.Get(circuit.TZTCJ).Id)
// if err != nil {
// return
// }
// tztcj := component.BitStateType.Get(circuit.TZTCJ)
// qdtcj := component.BitStateType.Get(circuit.QDTCJ)
// if bit { //驱动
// component.RelayDriveType.Get(circuit.TZTCJ).Td = true
// } else if tztcj.Val { //自保持
// component.RelayDriveType.Get(circuit.TZTCJ).Td = !qdtcj.Val
// }
// }
func (p *PsdSys) exciteTZTCJ(data *component.WorldData, circuit *component.PsdCircuit) {
bit, err := data.QueryQdBit(component.UidType.Get(circuit.TZTCJ).Id)
if err != nil {
return
}
tztcj := component.BitStateType.Get(circuit.TZTCJ)
qdtcj := component.BitStateType.Get(circuit.QDTCJ)
if bit { //驱动
component.RelayDriveType.Get(circuit.TZTCJ).Td = true
} else if tztcj.Val { //自保持
component.RelayDriveType.Get(circuit.TZTCJ).Td = !qdtcj.Val
}
}
func (p *PsdSys) exciteZAWJ(circuit *component.PsdCircuit, asdList *component.AsdList) {
if component.BitStateType.Get(circuit.QDTCJ).Val {
for _, asd := range asdList.List {
if asd.HasComponent(component.AsdHasObstacleTag) {
component.RelayDriveType.Get(circuit.ZAWJ).Td = true
return
}
}
component.RelayDriveType.Get(circuit.ZAWJ).Td = false
} else {
component.RelayDriveType.Get(circuit.ZAWJ).Td = false
}
}

View File

@ -18,7 +18,7 @@ func NewAsdSys() *AsdSys {
}
func (s *AsdSys) Update(world ecs.World) {
var speed int32 = consts.TwoPosMax / 4
var speed int32 = int32(consts.TwoPosMax / (4 * 1000 / world.Tick()))
s.query.Each(world, func(entry *ecs.Entry) {
//设置两位置转换速度
psdMotorState := component.AsdMotorStateType.Get(entry)
@ -51,7 +51,12 @@ func (s *AsdSys) Update(world ecs.World) {
}
}
//门关继电器状态
if entry.HasComponent(component.AsdForceType) {
force := component.AsdForceType.Get(entry)
psdMotorState.MG = !force.Val
} else {
psdMotorState.MG = pos == consts.TwoPosMin
}
asdState.Mgj = psdMotorState.MG
//滑动门状态
if pos == consts.TwoPosMax {

View File

@ -4,7 +4,6 @@ import (
"joylink.club/ecs"
"joylink.club/ecs/filter"
"joylink.club/rtsssimulation/component"
"joylink.club/rtsssimulation/entity"
)
type BaliseSystem struct {
@ -12,7 +11,7 @@ type BaliseSystem struct {
}
func NewBaliseSystem() *BaliseSystem {
return &BaliseSystem{baliseQuery: ecs.NewQuery(filter.Contains(component.UidType, component.BaliseStateType))}
return &BaliseSystem{baliseQuery: ecs.NewQuery(filter.Contains(component.UidType, component.BaliseFixedTelegramType))}
}
func (s *BaliseSystem) Update(w ecs.World) {
s.baliseQuery.Each(w, func(entry *ecs.Entry) {
@ -22,25 +21,25 @@ func (s *BaliseSystem) Update(w ecs.World) {
// 更新应答器有效报文
func (s *BaliseSystem) updateValidTelegram(w ecs.World, entry *ecs.Entry) {
wd := entity.GetWorldData(w)
id := component.UidType.Get(entry).Id
baliseState := component.BaliseStateType.Get(entry)
if entry.HasComponent(component.BaliseFB) { //固定应答器
if len(baliseState.ValidTelegram) == 0 {
baliseModel := wd.Repo.FindTransponder(id)
telegram := baliseModel.FixedTelegram()
if len(telegram) == 0 { //测试用
telegram = []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}
}
baliseState.ValidTelegram = telegram
}
} else if entry.HasComponent(component.BaliseDB) { //休眠唤醒应答器
} else if entry.HasComponent(component.BaliseIB) { //预告应答器
} else if entry.HasComponent(component.BaliseVB) { //主信号应答器
} else if entry.HasComponent(component.BaliseWB) { //轮径校正应答器
}
//wd := entity.GetWorldData(w)
//id := component.UidType.Get(entry).Id
//baliseState := component.BaliseFixedTelegramType.Get(entry)
//if entry.HasComponent(component.BaliseFB) { //固定应答器
// if len(baliseState.FixedTelegram) == 0 {
// baliseModel := wd.Repo.FindTransponder(id)
// telegram := baliseModel.FixedTelegram()
// if len(telegram) == 0 { //测试用
// telegram = []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}
// }
// baliseState.FixedTelegram = telegram
// }
//} else if entry.HasComponent(component.BaliseDB) { //休眠唤醒应答器
//
//} else if entry.HasComponent(component.BaliseIB) { //预告应答器
//
//} else if entry.HasComponent(component.BaliseVB) { //主信号应答器
//
//} else if entry.HasComponent(component.BaliseWB) { //轮径校正应答器
//
//}
}