Skip to content
This repository has been archived by the owner on Sep 9, 2024. It is now read-only.

Commit

Permalink
Small fixes. Still need to fix obstruction timer not reacting when be…
Browse files Browse the repository at this point in the history
…ing activated in idle
  • Loading branch information
SveinIsdahl committed Mar 14, 2024
1 parent cda5b44 commit 207fe84
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 16 deletions.
13 changes: 8 additions & 5 deletions elevatorAlgorithm/fsm/fsm.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,12 +43,14 @@ func FSM(orderAssignment chan [][]bool, clearOrders chan orders.ClearFloorOrders
if isObstructed {
break
}
elevState.Behaviour, elevState.Direction = OnDoorTimeOut(elevState, doorTimer, inactivityTimer)
elevState.Behaviour, elevState.Direction = OnDoorTimeOut(elevState, doorTimer, inactivityTimer, obstructionTimer, isObstructed)

var clearOrder orders.ClearFloorOrders
clearOrder.Floor = elevState.Floor
clearOrder.Cab = true
clearOrder.HallUp = orders.ShouldClearHallUp(elevState.Floor, elevState.Direction, elevState.Orders)
clearOrder.HallDown = orders.ShouldClearHallDown(elevState.Floor, elevState.Direction, elevState.Orders)

clearOrders <- clearOrder

case isObstructed = <-obstructionEvent:
Expand Down Expand Up @@ -78,15 +80,15 @@ func FSM(orderAssignment chan [][]bool, clearOrders chan orders.ClearFloorOrders
func resetElevatorTimers(isObstructed bool, obstructionTimer *time.Timer, doorTimer *time.Timer) { //Add doorTImerReset here as well
if isObstructed {
log.Println("Obstruction occured!")
obstructionTimer.Reset(inactivityTimeout)
obstructionTimer.Reset(obstructionTimeout)
} else {
obstructionTimer.Stop()
}
doorTimer.Reset(elevator.DOOR_OPEN_DURATION)
}

func updateOrders(elevState elevator.Elevator, doorTimer *time.Timer, inactivityTimer *time.Timer) (elevator.ElevatorBehaviour, elevio.MotorDirection) {
if orders.HaveOrders(elevState.Floor, elevState.Orders) { //Consider movign if statement out of function
if orders.HaveOrders(elevState.Floor, elevState.Orders) {
switch elevState.Behaviour {
case elevator.EB_Idle:
pair := orders.ChooseDirection(elevState.Direction, elevState.Floor, elevState.Orders)
Expand Down Expand Up @@ -140,7 +142,7 @@ func OnFloorArrival(elevState elevator.Elevator, doorTimer *time.Timer, inactivi
return elevState.Behaviour, clearOrder
}

func OnDoorTimeOut(elevState elevator.Elevator, doorTimer *time.Timer, inactivityTimer *time.Timer) (elevator.ElevatorBehaviour, elevio.MotorDirection) {
func OnDoorTimeOut(elevState elevator.Elevator, doorTimer *time.Timer, inactivityTimer *time.Timer, obstructionTimer *time.Timer, isObstructed bool) (elevator.ElevatorBehaviour, elevio.MotorDirection) {
switch elevState.Behaviour {
case elevator.EB_DoorOpen:
pair := orders.ChooseDirection(elevState.Direction, elevState.Floor, elevState.Orders)
Expand All @@ -150,7 +152,8 @@ func OnDoorTimeOut(elevState elevator.Elevator, doorTimer *time.Timer, inactivit
switch elevState.Behaviour {
case elevator.EB_DoorOpen:
//inactivityTimer.Reset(inactivityTimeout)
doorTimer.Reset(elevator.DOOR_OPEN_DURATION)
resetElevatorTimers(isObstructed, obstructionTimer, doorTimer)
//doorTimer.Reset(elevator.DOOR_OPEN_DURATION)
case elevator.EB_Idle:
elevio.SetDoorOpenLamp(false)
elevio.SetMotorDirection(elevState.Direction)
Expand Down
1 change: 0 additions & 1 deletion main.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ import (
const peersPort int = 25566

func main() {
// elevatorID := "0"
log.Println("Elevator starting 🛗")
elevatorPort, elevatorId := cmd.InitCommandLineArgs(os.Args)
elevio.Init(fmt.Sprintf("localhost:%d", elevatorPort), elevator.N_FLOORS)
Expand Down
11 changes: 1 addition & 10 deletions orderSync/orderSync.go
Original file line number Diff line number Diff line change
Expand Up @@ -119,9 +119,6 @@ func Sync(elevatorSystemFromFSM chan elevator.Elevator, localId string, orderAss

case orderToClear := <-orderCompleted:
syncOrderSystem = RemoveOrder(localId, orderToClear, syncOrderSystem)
if orderToClear.Cab {
log.Println("Removed order")
}

case <-timer.C: //Timer reset, send new state update
msgCounter += 1
Expand Down Expand Up @@ -156,12 +153,9 @@ func Transition(localId string, networkMsg StateMsg, updatedSyncOrderSystem Sync

updatedSyncOrderSystem = AddElevatorToSyncOrderSystem(localId, networkMsg, updatedSyncOrderSystem)

//Should this be changed?
orderSystem := SyncOrderSystemToOrderSystem(localId, updatedSyncOrderSystem)
orderSystem.HallOrders = transition.Hall(orderSystem.HallOrders, networkMsg.OrderSystem.HallOrders)
//Check if Sync
log.Println(localId, "OrderSystem cabs:", orderSystem.CabOrders)
log.Println(networkMsg.Id, "NetworkMSG cabs:", networkMsg.OrderSystem.CabOrders)
log.Println(localId, "Sync cabs:", updatedSyncOrderSystem.CabOrders)

updatedSyncOrderSystem = UpdateSyncOrderSystem(localId, updatedSyncOrderSystem, orderSystem)

Expand All @@ -178,7 +172,6 @@ func AddElevatorToSyncOrderSystem(localId string, networkMsg StateMsg, syncOrder
_, ok := syncOrderSystem.CabOrders[elevId]
if ok {
for floor, order := range orders {
//This must be a for loop, because we need to add the world view of everyone
for syncID := range networkMsg.OrderSystem.CabOrders {
_, ok := syncOrderSystem.CabOrders[elevId][floor][syncID]
if ok {
Expand Down Expand Up @@ -217,10 +210,8 @@ func ConsensusTransitionSingleCab(localId string, CabOrders []SyncOrder, peers [
if ConsensusAmongPeers(order, peers) { //Consensus
ourorder := order[localId]
if ourorder == servicedOrder {
log.Println("Consensus")
return reqFloor, noOrder
} else if ourorder == unconfirmedOrder {
log.Println("Consensus")
return reqFloor, confirmedOrder
}
}
Expand Down

0 comments on commit 207fe84

Please sign in to comment.