merge问题修改

This commit is contained in:
walker 2024-02-04 11:24:36 +08:00
parent 61f325bfb3
commit 6e15c7548e
2 changed files with 191 additions and 194 deletions

View File

@ -4,19 +4,33 @@ import (
"joylink.club/ecs" "joylink.club/ecs"
"joylink.club/rtsssimulation/component/singleton" "joylink.club/rtsssimulation/component/singleton"
"joylink.club/rtsssimulation/modelrepo" "joylink.club/rtsssimulation/modelrepo"
"joylink.club/rtsssimulation/modelrepo/model"
) )
// 加载城轨仿真实体 // 加载城轨仿真实体
func Loading(w ecs.World, repo modelrepo.Repo) error { func Loading(w ecs.World, repo modelrepo.Repo) error {
singleton.LoadSingletons(w, repo) singleton.LoadSingletons(w, repo)
err := loadTrackside(w, repo)
if err != nil {
return err
}
return nil
}
// 加载轨旁设备实体
func loadTrackside(w ecs.World, repo modelrepo.Repo) error {
for _, s := range repo.GetEcses() { for _, s := range repo.GetEcses() {
// 加载道岔 // 加载道岔
loadPoints(w, s.GetTurnouts()) for _, p := range s.GetTurnouts() {
NewPoints(w, p)
}
// 加载继电器 // 加载继电器
loadRelays(w, s.GetRelays()) for _, r := range s.GetRelays() {
NewRelay(w, r)
}
// 加载断相保护器 // 加载断相保护器
loadDbqs(w, s.GetDbqs()) for _, d := range s.GetDbqs() {
NewDbq(w, d)
}
// 加载联锁驱采卡 // 加载联锁驱采卡
qckEntry, err := loadCiQck(w, s) qckEntry, err := loadCiQck(w, s)
if err != nil { if err != nil {
@ -30,21 +44,3 @@ func Loading(w ecs.World, repo modelrepo.Repo) error {
} }
return nil return nil
} }
func loadDbqs(w ecs.World, dbqs []model.Dbq) {
for _, d := range dbqs {
NewDbq(w, d)
}
}
func loadRelays(w ecs.World, relays []model.Relay) {
for _, r := range relays {
NewRelay(w, r)
}
}
func loadPoints(w ecs.World, points []model.Points) {
for _, p := range points {
NewPoints(w, p)
}
}

View File

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