Copier Paper Path Simulator

The objective of this project is to simulate the operation of a copier, particularly the way paper moves through it, for the purpose of testing copier software.  When developing copier software, before they run the software on the actual hardware, the engineers would run their software using this simulator, and use it to find bugs.  This provides three advantages:

The simulator and the application software interact through sensors, motors and command signals.  The hardware senses events (such as the paper having entered a particular component), and informs the software by triggering the sensor.  The application starts up the motors in the hardware to make the paper move through the copier, and sends it commands to initiate operation, such as stapling or putting the image on paper.  The interaction between the application software and the simulator can be viewed as shown below.

Since we are building a copier simulator, first we need to have a physical model of how the copier operates.  For our purpose, the copier consists of a number of components with materials (such as paper, cardboard dividers etc.) moving through them.  The diagram below shows a conceptual model of the paper path structure for a particular copier. Dashed lines indicate the paperpath – paths along which paper moves through the copier.

Copier Paper Path Component Description

The operation of each component is indicated below.  This description is primarily for understanding how copiers work, more details on the simulation are provided later.

You are not simulating the scanner, which scans the images on the sheets to be copied.

Copier Configuration

This phase of the project will simulate the functioning of the above copier configuration.  It will plan and execute simple jobs, involving feeding sheets from feeders, moving them through each of the components in turn, stacking and stapling them if needed and delivering them at the output.  In this version of the simulator, paper movement is sequential i.e. a second sheet of paper will not be fed until the first sheet of paper has completed its movement and either been stacked at the stapler or delivered to the TopTray.

The initial machine state is predefined:

Job Description

The description of a printing job can be described by the following regular expression

BEGINJOB [STAPLE] { SHEET { LEGAL | LETTER } string1 [ , string2] }+ ENDJOB

Below is an example job:

BEGINJOB

STAPLE

SHEET LEGAL side1content side2content

SHEET LETTER sheet2side1image

ENDJOB

Your simulator must execute this job correctly, feeding the first sheet from Feeder2, mark it with the first image, duplex it, put the second image on it, then stack it at the stapler.  Then it must feed the second sheet from Feeder1, mark it with its image, and send it to the stapler.  Then the stapler staples the sheets together and delivers the resulting job to the output bin.

Timing Aspects in the Simulator

Your simulation must also include timing aspects.  The copier has the following timing characteristics:

Testing Your Simulator

To test your simulation, you will need to create some simple application software to drive it.   This software reacts immediately to sensor triggers, issuing the needed commands to the motors or devices at the right time, either immediately or at the instant that the devices need to perform their operation (where a delay is appropriate).  In addition to starting and stopping motors, the application software sends commands to certain devices: the Marker, Stapler and PathSplitters.  These commands are in the form of packets (like network packets – in a physical machine these would be actual packets sent over the link to the device) containing the command and parameters (if any).  You may invent your own format for the packets.

The output of your simulation should include a description of the job produced, together with event and event timing information.  For example, the job indicated might have output that looks something like this:

SET STAPLED

SHEET LEGAL

  Side1: side1content

  Side2: side2content

   0: feed Feeder2

  10: Feeder2 exited

  10: FeedPath entered

  40: FeedPath sensor triggered

  40: FeedPath motor turned on

  60: FeedPath exited

  60: PathMerger1 entered

  60: PathMerger1 exited

  60: Marker entered

  70: Marker sensor triggered

  90: Marker transferred “side1content”

 …

END SHEET

SHEET LETTER

   Side1: sheet2side1image  

   nnn: feed Feeder1

   …

END SHEET

END SET

General Information

Assessment

Component Percent Comments
Presentation 20 Quality of the team's presentation of their product (including prototype demonstration).
Design Quality 50 Quality of the product design, including the degree to which it addresses the functional and non-functional requirements, the appropriate use of patterns, and adherence to proven software engineering design principles.
Design Diagramming 10 Quality of the design diagrams provided in the documentation and presentation. Elements of this grading will be readability of diagrams at 100% zoom and when projected during the presentation, provision of the necessary complement of diagrams (component, class, sequence, collaboration) to understand the design, and correlation between the diagrams and delivered code.
Implementation 20 Quality of the implementation in implementing the functionality of this simulator. An element of this will also be the adherence of the implementation to the design described in the diagrams and presentation, and to C++ coding style standards from previous coursework. Variations to these conventions must be approved by your instructor, and, if approved, must be adhered to by all team members.

Submission Instructions

  1. A zip file named p362-unit2project-SSX.zip where SS is the section number and X is your team letter (lower case), where the zip file contains:
    1. The final design documentation will be submitted as a single Word document, including at a minimum:
      1. Title information, including the name of your team, the name of your product, the date, and a list of all the team members.
      2. A short overview section describing the product and the features included.
      3. A UML class diagrams showing the main classes and interfaces in your design, along with inheritance (generalization), association, aggregation, and composition relationships. Include cardinality and role indicators as you deem appropriate to make the diagram clear. DO NOT include state or method information. You will need several class diagrams at different levels of abstraction and for different subsystems to completely document your design in a way that the reader can physically see and intelligently understand.
      4. Other UML diagrams (e.g., sequence charts, collaboration diagrams) to provide insight into the key dynamic characteristics of your design.
      5. A table summarizing the responsibility(ies) of each major class. A table of the object data defined by the class and the signatures of the methods in the class other than the accessors and mutators.
      6. A narrative outlining how the design reflects a balance among competing criteria such as low coupling, high cohesion, separation of concerns, information hiding, the Law of Demeter, extensibility, reusability, etc. This should include a discussion of the design patterns used to achieve this balance in the context of expected further product development.
      7. A short reflection on the two strongest and the two weakest aspects of your design.
    2. A copy of the final PowerPoint presentation.
    3. All the C++ source files required to compile, link, and run your project. A Makefile or script file to rebuild the system must be included.
    4. A Testing directory which contains a set of test input files and files with the associated output generated by the system when each test was executed. In this directory place a file place a spreadsheet TestIndex.xls that lists the name of each test input/output file and provides a short description of the test and the results. In TestIndex.xls tests that pass simply need to be labeled as such; if a test fails provide a description of the nature of the failure. Test output files will be annotated. After capturing the output generated by the implementation into a file open the file in an editor. Add annotations, i.e. comments, to the test output that will guide the reader to understand the results being shown. You can consider this annotation to be what you would say in your response to your instructor's question when reviewing test output, "Describe why you think this works/fails."
  • A file README.txt that includes any other information the team wishes the instructor to know.
  • Upload the zip file to the myCourses site for this course and section, placing it in the Unit 3 Project folder of Collaborative Files. The title of the submission should be "Unit 2 Project for Team SSX", where SS and X are the same as in step (1) above.
  • The zip file must be submitted by the end of the day on which the presentations for this unit are made. Late submissions will not be accepted; teams are advised to submit something early to ensure they receive at least minimal credit.
  • Note: In Windows/XP you can create a zip file simply by creating a new compressed folder.

    Documentation and Presentation Instructions

    You can find general instructions for your documentation and presentation on the Unit Activities page.

    Revision: 1.4, 2005/03/15 11:52:03