rssp axle test

This commit is contained in:
xzb 2023-11-15 13:20:44 +08:00
parent 1cbdf59876
commit 84ce75a3d2
2 changed files with 36 additions and 21 deletions

View File

@ -14,10 +14,17 @@ import (
func AxleSectionDrstDrive(w ecs.World, sectionId string, set bool) error { func AxleSectionDrstDrive(w ecs.World, sectionId string, set bool) error {
r := <-ecs.Request[ecs.EmptyType](w, func() ecs.Result[ecs.EmptyType] { r := <-ecs.Request[ecs.EmptyType](w, func() ecs.Result[ecs.EmptyType] {
wd := entity.GetWorldData(w) wd := entity.GetWorldData(w)
//
sectionModel := wd.Repo.FindPhysicalSection(sectionId) sectionModel := wd.Repo.FindPhysicalSection(sectionId)
if sectionModel == nil { if sectionModel == nil {
return ecs.NewErrResult(fmt.Errorf("区段模型[%s]不存实体", sectionId)) 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()) faDcAxleDeviceEntry := entity.FindAxleManageDevice(wd, sectionModel.CentralizedStation())
@ -46,6 +53,12 @@ func AxleSectionPdrstDrive(w ecs.World, sectionId string, set bool) error {
if sectionModel == nil { if sectionModel == nil {
return ecs.NewErrResult(fmt.Errorf("区段模型[%s]不存实体", sectionId)) 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()) faDcAxleDeviceEntry := entity.FindAxleManageDevice(wd, sectionModel.CentralizedStation())
@ -79,17 +92,14 @@ func AxleSectionFaultOccDrive(w ecs.World, sectionId string, set bool) error {
if sectionEntry == nil { if sectionEntry == nil {
return ecs.NewErrResult(fmt.Errorf("区段[%s]实体不存在", sectionId)) return ecs.NewErrResult(fmt.Errorf("区段[%s]实体不存在", sectionId))
} }
axleDevice := component.AxlePhysicalSectionType.Get(sectionEntry)
if set { //计轴故障设置 if set { //计轴故障设置
if !sectionEntry.HasComponent(component.AxleSectionFaultTag) { if !sectionEntry.HasComponent(component.AxleSectionFaultTag) {
sectionEntry.AddComponent(component.AxleSectionFaultTag) sectionEntry.AddComponent(component.AxleSectionFaultTag)
} }
axleDevice.UpdateCount(1)
} else { //计轴故障取消 } else { //计轴故障取消
if sectionEntry.HasComponent(component.AxleSectionFaultTag) { if sectionEntry.HasComponent(component.AxleSectionFaultTag) {
sectionEntry.RemoveComponent(component.AxleSectionFaultTag) sectionEntry.RemoveComponent(component.AxleSectionFaultTag)
} }
axleDevice.UpdateCount(0)
} }
// //
return ecs.NewOkEmptyResult() return ecs.NewOkEmptyResult()

View File

@ -28,12 +28,13 @@ func (s *FaDcAxleDeviceSystem) Update(w ecs.World) {
sectionState := component.PhysicalSectionStateType.Get(axleSectionEntry) sectionState := component.PhysicalSectionStateType.Get(axleSectionEntry)
axleDevice := component.AxlePhysicalSectionType.Get(axleSectionEntry) axleDevice := component.AxlePhysicalSectionType.Get(axleSectionEntry)
// //
s.calculateHf(axleSectionEntry, sectionState, axleDevice, axleRuntime) sectionFault := axleSectionEntry.HasComponent(component.AxleSectionFaultTag)
s.calculateDrst(sectionState, axleDevice, axleRuntime) s.calculateHf(sectionFault, axleSectionEntry, sectionState, axleDevice, axleRuntime)
s.calculatePdrst(sectionState, axleDevice, axleRuntime) s.calculateDrst(axleSectionEntry, sectionState, axleDevice, axleRuntime)
s.calculateSectionState(sectionState, axleDevice, axleRuntime) s.calculatePdrst(axleSectionEntry, sectionState, axleDevice, axleRuntime)
s.calculateSectionState(sectionFault, sectionState, axleDevice, axleRuntime)
if "北京_12_酒仙桥_12G" == axleSectionId && false { if "北京_12_酒仙桥_15G" == axleSectionId && false {
sectionFault := axleSectionEntry.HasComponent(component.AxleSectionFaultTag) sectionFault := axleSectionEntry.HasComponent(component.AxleSectionFaultTag)
slog.Info(axleSectionId, slog.Info(axleSectionId,
"Drst", axleRuntime.Drst, "Drst", axleRuntime.Drst,
@ -52,39 +53,43 @@ func (s *FaDcAxleDeviceSystem) Update(w ecs.World) {
} }
// 计算计轴区段状态 // 计算计轴区段状态
func (s *FaDcAxleDeviceSystem) calculateSectionState(sectionState *component.PhysicalSectionState, axleDevice *component.AxlePhysicalSection, axleRuntime *component.AxleDeviceRuntime) { func (s *FaDcAxleDeviceSystem) calculateSectionState(sectionFault bool, sectionState *component.PhysicalSectionState, axleDevice *component.AxlePhysicalSection, axleRuntime *component.AxleDeviceRuntime) {
isIdle := axleDevice.Count <= 0 && !axleRuntime.DoingPdrst //区段空闲:区段内车轴数为零且没有预复位 sectionState.Occ = axleDevice.Count > 0 || sectionFault
sectionState.Occ = !isIdle
} }
// 计轴直接复位 // 计轴直接复位
func (s *FaDcAxleDeviceSystem) calculateDrst(sectionState *component.PhysicalSectionState, axleDevice *component.AxlePhysicalSection, axleRuntime *component.AxleDeviceRuntime) { func (s *FaDcAxleDeviceSystem) calculateDrst(axleSectionEntry *ecs.Entry, sectionState *component.PhysicalSectionState, axleDevice *component.AxlePhysicalSection, axleRuntime *component.AxleDeviceRuntime) {
isFault := axleSectionEntry.HasComponent(component.AxleSectionFaultTag)
if axleRuntime.Drst && !axleRuntime.Rjo && !axleRuntime.Rjt { //直接复位且没有拒绝原因 if axleRuntime.Drst && !axleRuntime.Rjo && !axleRuntime.Rjt && isFault { //直接复位且没有拒绝原因
axleDevice.UpdateCount(0) axleDevice.UpdateCount(0)
axleDevice.ResetCountPulse() axleDevice.ResetCountPulse()
axleRuntime.DoingPdrst = false axleRuntime.DoingPdrst = false
//清除故障
if axleSectionEntry.HasComponent(component.AxleSectionFaultTag) {
axleSectionEntry.RemoveComponent(component.AxleSectionFaultTag)
}
} }
} }
// 计轴预复位 // 计轴预复位
func (s *FaDcAxleDeviceSystem) calculatePdrst(sectionState *component.PhysicalSectionState, axleDevice *component.AxlePhysicalSection, axleRuntime *component.AxleDeviceRuntime) { func (s *FaDcAxleDeviceSystem) calculatePdrst(axleSectionEntry *ecs.Entry, sectionState *component.PhysicalSectionState, axleDevice *component.AxlePhysicalSection, axleRuntime *component.AxleDeviceRuntime) {
isFault := axleSectionEntry.HasComponent(component.AxleSectionFaultTag)
if axleRuntime.Pdrst && !axleRuntime.Rjo && !axleRuntime.Rjt && !axleRuntime.DoingPdrst { //预复位且没有拒绝原因 if axleRuntime.Pdrst && !axleRuntime.Rjo && !axleRuntime.Rjt && !axleRuntime.DoingPdrst && isFault { //预复位且没有拒绝原因
axleDevice.UpdateCount(0) axleDevice.UpdateCount(0)
axleDevice.ResetCountPulse() axleDevice.ResetCountPulse()
axleRuntime.DoingPdrst = true axleRuntime.DoingPdrst = true
} }
//压道车通过该计轴区段,完成计轴预复位 //压道车通过该计轴区段,完成计轴预复位
if axleDevice.IsCount010Pulse() { if axleRuntime.DoingPdrst && isFault && axleDevice.IsCount010Pulse() {
axleRuntime.DoingPdrst = false axleRuntime.DoingPdrst = false
//清除故障
axleSectionEntry.RemoveComponent(component.AxleSectionFaultTag)
} }
} }
// 复位回复运算 // 复位回复运算
func (s *FaDcAxleDeviceSystem) calculateHf(axleSectionEntry *ecs.Entry, sectionState *component.PhysicalSectionState, axleDevice *component.AxlePhysicalSection, axleRuntime *component.AxleDeviceRuntime) { func (s *FaDcAxleDeviceSystem) calculateHf(sectionFault bool, axleSectionEntry *ecs.Entry, sectionState *component.PhysicalSectionState, axleDevice *component.AxlePhysicalSection, axleRuntime *component.AxleDeviceRuntime) {
sectionFault := axleSectionEntry.HasComponent(component.AxleSectionFaultTag)
axleRuntime.Rac = axleRuntime.Drst || axleRuntime.Pdrst axleRuntime.Rac = axleRuntime.Drst || axleRuntime.Pdrst
axleRuntime.Rjo = axleRuntime.Rac && !sectionState.Occ && !axleRuntime.DoingPdrst //空闲拒绝复位(排除预复位过程中) axleRuntime.Rjo = axleRuntime.Rac && !sectionState.Occ && !axleRuntime.DoingPdrst //空闲拒绝复位(排除预复位过程中)
axleRuntime.Rjt = axleRuntime.Rac && sectionFault // 技术原因拒绝复位 axleRuntime.Rjt = false // 技术原因拒绝复位
} }