File Names and Descriptions elevatorSubsystem Elevator - A class responsiable for holding states, and information regarding the elevator subsystem ElevatorMotor - A class responsible for moving the elevator. Contains the state machine for the elevator ElevatorReceiver - Responsible for receiving, interpreting, and assigning floor request sent via the scheduler ElevatorState - An enumerated type denoting the different states for the elevator scheduler Communicator - A class that handles reading messages and generating responses for them Dispatcher - A class responsible for choosing the most suitable elevator to handle a new request (not used in this iteration) ElevatorListener - A subclass of Communicator that listens for messages from the elevator and deals with them (by responding or passing them to a floor) FloorListener - A subclass of Communicator that listens for messages from the floor and deals with them (by responding or passing them to an elevator) SchedulerRunner - A main class that starts the Elevator and Floor Listeners floorSubsystem Floor - A class that holds the information of each floor such as the doors and the lights FloorSystem - A class that schedules the events from the text file to be sent as packetsto the scheduler and receives packets from the scheulder to open/close doors and turn on lights ElevatorForFloor - A class to control each elevator's lights and floor doors resources Constants - A static class which only holds constant values to be used by other classes Directions - An enumerated type denoting directions that an elevator can move and the possible elevator error states Message - A class responsible for creating and holding all of the users requests SystemFile - A class responsible for validating each line in the systems input file and delegating the creation of the messages to the Message class test elevator - ElevatorTests - JUnit tests for testing the elevator functionality floor - FloorSystemTest - JUnit tests for testing the floor functionality resources - DirectionTest - JUnit tests for testing functionality SystemFileTest - JUnit tests for testing the input validation scheduler - DispatcherTests - JUnit tests for testing the dispatcher in the scheduler system Group Memebers and Responsibilities Iteration 1 Darren Holden Programming the Scheduler system classes Writing documention Writing JUnit test cases Performing end-to-end tests and debugging Callum Kirby Programming the Elevator, ElevatorMotor, and ElevatorReciever Writing JUnit Test Cases Documentation Christopher Molnar Programming SystemFile, Message, and Elevator State Machine Created JUnit Tests Writing documentation Drawing the elevator state machine diagram Logan MacGillivary Programming the Scheduler system classes Drawing UML Class diagram Brandon Hartford Programming the Floor system classes Writing JUnit Test Cases Documentation Iteration 2 Darren Holden Updating the Scheduler subsystem Callum Kirby Updating the Elevator subsystem Christopher Molnar Updating the Elevator subsystem Logan MacGillivary Updating UML and README Brandon Hartford Updating Floor subsystem Iteration 3 Darren Holden Debugging error modes Measuring performance times Callum Kirby Updates to Directions enum class Automated test updates UML Class Diagram Update Christopher Molnar Implementing elevator error modes and error propogation through the system Update State Machine Logan MacGillivary Update UML Class diagram Dispatcher & Communicator logic update to accomodate errors Brandon Hartford Timing diagram Floor subsystem formatting cleanup Iteration 4 Darren Holden Increased accuracy of timing Error fixes Callum Kirby Error fixes Christopher Molnar Error fixes State-Machine Diagram Logan MacGillivary Update UML Class diagram Brandon Hartford Started work on GUI (for Iteration 5) Set Up Instructions/Run 1 - Unzip project 2 - Import the Java project into Eclipse 2.1 - Open Eclipse 2.2 - Create a Java Project (file->new->Java Project) 2.3 - Give Project a Name (ex: ElevatorProjectGroup5) and Finish 2.4 - Import File (file->import) and then General - File System and click Next 2.5 - From Directory: Browse for the java project "ElevatorProject" in the unzipped folder from step 1 2.6 - Check the ElevatorProject box to grab all of the files 2.7 - Into Folder: Select the Java Project you created (ex: ElevatorProjectGroup5) and hit finish 2.8 - If overwrite '.classpath' in folder "your folder name (ElevatorGroupProject5)" click Yes to All 3 - Navigate in the Package Explorer to the Java Project you imported the files into -> src 3.1 - Select from elevatorSubsystem -> ElevatorReciever.java 3.2 - Select from scheduler -> SchedulerRunner.java 3.3 - Select from floorSubsytem -> FloorSystem.java 4 - To run the system on multiple computers, follow the next instructions, otherwise skip to step 5 4.1 Repeat Steps 1 to 3 on each computer that is to be used. 4.2 - In Eclipse, open resources.Constants.java and update the following values: 4.2.1 - SCHED_IP_ADDRESS - This should be the ip address of the computer that will run the Scheduler 4.2.2 - FLOOR_SYS_IP_ADDRESS - This should be the ip address of the computer that will run the Floor System 4.2.3 - ELEVATOR_SYS_IP_ADDRESS - This should be the ip address of the computer that will run the Elevator System 4.3 - Repeat step 4.2 on each computer that is being used 5 - To run our project run ElevatorReciever.java, SchedulerRunner.java and floorSystem.java (in that order) 5.1 - The elevatorReciever output will show the progress of the elevator (where its going and what state its in) 6 - To acces JUnit Tests navigate to ElevatorProject -> src -> test 6.1 - Included are JUnit Tests for all of the subsystems (elevator, floor, scheduler and resources) 6.2 - To run a JUnit Test navigate to the desired JUnit file and select run Errors List (1) Scheduler subsystem receives back a response message with an id that does not exist (2) Scheduler subsystem does not receive a response after sending voluntary requests (3) Scheduler, Elevator, and Floor subsystems receive invalid message type (4) Scheduler subsystem experiences request starvation when a denied request consistently gets denied (5) Scheduler, Elevator, and Floor subsystems all experience packet loss Performance Notes Currently the Elevators travel at 1 floor per second with instantaneous acceleration The doors open and close instantaneously, with 1 second between open and close Times were measured without any elevator errors Service Times Service time was measured as the time it takes between a passenger pressing a button on a floor and an elevator going in the correct direction opening its doors on that floor As seen below, the system is much more efficient with 4 elevators as opposed to 1, increasing the number of elevators to 4 decreases the average service time by 86% 4 Elevators, 11 Floors: Average: 3.8 seconds Minimum: 0 seconds Maximum: 9 seconds 1 Elevator, 11 Floors: Average: 27.3 seconds Minimum: 4 seconds Maximum: 53 seconds Travel Times Travel time was measured as the time it takes between an elevator opening its doors to pick up the passenger and the elevator opening its doors at the destination floor As seen below, the average travel time does not significantly change with more elevators, however the range is much less volatile with more elvators, the maximum travel time being 27 seconds higher for 1 elevator 4 Elevators, 11 Floors: Average: 10.1 seconds Minimum: 3 seconds Maximum: 20 seconds 1 Elevator, 11 Floors: Average: 12.4 seconds Minimum: 3 seconds Maximum: 47 seconds