rssp axle test
This commit is contained in:
parent
1cbdf59876
commit
84ce75a3d2
@ -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()
|
||||||
|
@ -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 // 技术原因拒绝复位
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user