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

View File

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