package system import ( "fmt" "github.com/yohamta/donburi/filter" "joylink.club/ecs" "joylink.club/rtsssimulation/components" ) // 调试时显示一些信息 type DebugSystem struct { } func NewDebugSystem() *DebugSystem { return &DebugSystem{} } // world 执行 func (me *DebugSystem) Update(w ecs.World) { //debugMovableDevice(w) //debugPsd(w) debugSwitch(w) //debugSignal(w) //debugTowPosButton(w) } // 可按速度移动组件 func debugMovableDevice(w ecs.World) { query := ecs.NewQuery(filter.Contains(components.PercentageDeviceStateComponent, components.MovableDeviceStateComponent)) query.Each(w, func(e *ecs.Entry) { id := components.DeviceIdentityComponent.Get(e).Id if "psd1Cell1" == id { percent := components.PercentageDeviceStateComponent.Get(e) movable := components.MovableDeviceStateComponent.Get(e) fmt.Printf("==>>屏蔽门cell [%s],curRateValue = %d ,targetRateValue = %d , speed = %d position = %d\n", id, percent.Rate, percent.Target, movable.Speed, movable.Position) } }) } // 两档位按钮旋钮 func debugTowPosButton(w ecs.World) { towPosButtonsQuery := ecs.NewQuery(filter.Contains(components.DeviceIdentityComponent, components.TowPositionButtonStateComponent)) towPosButtonsQuery.Each(w, func(e *ecs.Entry) { id := components.DeviceIdentityComponent.Get(e).Id state := components.TowPositionButtonStateComponent.Get(e) switch { case state.Pos1 && !state.Pos2: { fmt.Printf("两档位按钮[%s],处于 一 档稳态\n", id) } case !state.Pos1 && state.Pos2: { fmt.Printf("两档位按钮[%s],处于 二 档稳态\n", id) } case !state.Pos1 && !state.Pos2: { fmt.Printf("两档位按钮[%s],处于未知或变换过程中 ......\n", id) } default: { fmt.Printf("两档位按钮[%s],异常同时处于 一二 档 !!\n", id) } } }) } // 屏蔽门状态 func debugPsd(w ecs.World) { psdQuery := ecs.NewQuery(filter.Contains(components.DeviceIdentityComponent, components.PsdStateComponent, components.PsdTagHandlerComponent)) psdQuery.Each(w, func(e *ecs.Entry) { psdId := components.DeviceIdentityComponent.Get(e).Id psdState := components.PsdStateComponent.Get(e) psdTag := components.PsdTagHandlerComponent.Get(e).Tag fmt.Printf("屏蔽门[%s] ,全关=%t ,全开=%t ,互锁解除=%t > ", psdId, psdState.AllClosed, psdState.AllOpened, psdState.InterlockReleased) // psdCellQuery := ecs.NewQuery(filter.Contains(psdTag)) psdCellQuery.Each(w, func(e *ecs.Entry) { psdCellId := components.DeviceIdentityComponent.Get(e).Id psdCellPercent := components.PercentageDeviceStateComponent.Get(e) psdCellMovable := components.MovableDeviceStateComponent.Get(e) // fmt.Printf("|| cell[%s] ,closeRate=%d ", psdCellId, GetRate(psdCellPercent.Rate)) if psdCellMovable.Speed > 0 { if psdCellMovable.ToH { fmt.Printf("== 关门操作中,移动速率=%d", psdCellMovable.Speed) } else { fmt.Printf("== 开门操作中,移动速率=%d", psdCellMovable.Speed) } } }) // fmt.Println() }) } // 显示信号机状态 func debugSignal(w ecs.World) { siganlQuery := ecs.NewQuery(filter.Contains(components.DeviceIdentityComponent, components.SignalStateComponent)) siganlQuery.Each(w, func(e *ecs.Entry) { id := components.DeviceIdentityComponent.Get(e).Id state := components.SignalStateComponent.Get(e) fmt.Printf("==>>信号机[%s],显示=%d\n", id, state.Display) }) } // 显示道岔状态 func debugSwitch(w ecs.World) { switchesQuery := ecs.NewQuery(filter.Contains(components.DeviceIdentityComponent, components.SwitchRelayStateComponent)) switchesQuery.Each(w, func(e *ecs.Entry) { percent := components.PercentageDeviceStateComponent.Get(e) movable := components.MovableDeviceStateComponent.Get(e) id := components.DeviceIdentityComponent.Get(e).Id curRate := GetRate(percent.Rate) j := components.SwitchRelayStateComponent.Get(e) fmt.Printf("道岔 [%s],当前位置百分比 [%d] ,Dcj = %t, Fcj = %t, Dbj = %t ,Fbj = %t ,", id, curRate, j.DcJ, j.FcJ, j.DbJ, j.FbJ) if movable.Speed > 0 { fmt.Printf(" ==> 正在转动,移动速率[%d]", movable.Speed) } fmt.Println() }) }