diff --git a/fi/relay.go b/fi/relay.go index 34204c9..90f199a 100644 --- a/fi/relay.go +++ b/fi/relay.go @@ -30,8 +30,8 @@ func driveWjRelay(w ecs.World, entry *ecs.Entry, td bool) { } // 驱动继电器到吸起位置 -func DriveRelayUp(w ecs.World, id string) { - w.Execute(func() { +func DriveRelayUp(w ecs.World, id string) error { + result := <-ecs.Request[ecs.EmptyType](w, func() ecs.Result[ecs.EmptyType] { wd := entity.GetWorldData(w) entry, ok := wd.EntityMap[id] if ok { @@ -41,14 +41,16 @@ func DriveRelayUp(w ecs.World, id string) { driveWjRelay(w, entry, true) } } else { - fmt.Printf("未找到id=%s的继电器\n", id) + return ecs.NewErrResult(fmt.Errorf("未找到id=%s的继电器", id)) } + return ecs.NewOkEmptyResult() }) + return result.Err } // 驱动继电器到落下位置 -func DriveRelayDown(w ecs.World, id string) { - w.Execute(func() { +func DriveRelayDown(w ecs.World, id string) error { + result := <-ecs.Request[ecs.EmptyType](w, func() ecs.Result[ecs.EmptyType] { wd := entity.GetWorldData(w) entry, ok := wd.EntityMap[id] if ok { @@ -58,7 +60,9 @@ func DriveRelayDown(w ecs.World, id string) { driveWjRelay(w, entry, false) } } else { - fmt.Printf("未找到id=%s的继电器\n", id) + return ecs.NewErrResult(fmt.Errorf("未找到id=%s的继电器", id)) } + return ecs.NewOkEmptyResult() }) + return result.Err } diff --git a/sys/circuit_sys/psd.go b/sys/circuit_sys/psd.go index b48385d..d212439 100644 --- a/sys/circuit_sys/psd.go +++ b/sys/circuit_sys/psd.go @@ -80,11 +80,11 @@ func (p *PsdSys) Update(world ecs.World) { //设置滑动门电机通断电状态 repo := entity.GetWorldData(world).Repo psd := repo.FindPsd(component.UidType.Get(entry).Id) - if psc.MkxGM { //优先门控箱的关门 - p.gm(asdList) - } else if psc.MkxKM { //其次门控箱的开门 + if psc.MkxKM { //优先门控箱的开门 group := psd.FindAsdGroup(8) p.km(group.Start, group.End, asdList) + } else if psc.MkxKM { //其次门控箱的关门 + p.gm(asdList) } else if !psc.InterlockMPL { //联锁操作没有被旁路 if psc.InterlockGM { p.gm(asdList) diff --git a/sys/device_sys/asd.go b/sys/device_sys/asd.go index 6e453b1..99e37d3 100644 --- a/sys/device_sys/asd.go +++ b/sys/device_sys/asd.go @@ -28,9 +28,11 @@ func (s *AsdSys) Update(world ecs.World) { if entry.HasComponent(component.AsdCannotOpenTag) { pos = consts.TwoPosMin speed = 0 + psdMotorState.TD = false } else if entry.HasComponent(component.AsdCannotCloseTag) { pos = consts.TwoPosMax speed = 0 + psdMotorState.TD = false } else if psdMotorState.TD { if psdMotorState.KM { if pos == consts.TwoPosMax {