Professional Documents
Culture Documents
Example: Model Train Controller.: Computers As Components 3e © 2012 Marilyn Wolf
Example: Model Train Controller.: Computers As Components 3e © 2012 Marilyn Wolf
Computers as Components 3e
© 2012 Marilyn Wolf
Purposes of example
Computers as Components 3e
© 2012 Marilyn Wolf
Model train setup
rcvr motor
power
supply
console
Computers as Components 3e
© 2012 Marilyn Wolf
Requirements form
name model train controller
purpose control speed of <= 8 model trains
inputs throttle, inertia, emergency stop,
train #
outputs train control signals
functions set engine speed w. inertia;
emergency stop
performance can update train speed at least 10
times/sec
manufacturing cost $50
power wall powered
physical console comfortable for 2 hands; < 2
size/weight lbs.
Computers as Components 3e
© 2012 Marilyn Wolf
Digital Command Control
Computers as Components 3e
© 2012 Marilyn Wolf
DCC electrical standard
Voltage moves
around the power logic 1 logic 0
supply voltage; adds
no DC component.
1 is 58 ms, 0 is at
time
least 100 ms.
58 ms >= 100 ms
Computers as Components 3e
© 2012 Marilyn Wolf
DCC communication
standard
Computers as Components 3e
© 2012 Marilyn Wolf
Conceptual specification
Computers as Components 3e
© 2012 Marilyn Wolf
Basic system commands
set-speed speed
(positive/negative)
set-inertia inertia-value (non-
negative)
estop none
Computers as Components 3e
© 2012 Marilyn Wolf
Typical control sequence
:console :train_rcvr
set-inertia
set-speed
set-speed
estop
set-speed
Computers as Components 3e
© 2012 Marilyn Wolf
Message classes
command
Computers as Components 3e
© 2012 Marilyn Wolf
Roles of message classes
1..n: command
:console :receiver
Computers as Components 3e
© 2012 Marilyn Wolf
System structure modeling
Computers as Components 3e
© 2012 Marilyn Wolf
Major subsystem roles
Console:
read state of front panel;
format messages;
transmit messages.
Train:
receive message;
interpret message;
control the train.
Computers as Components 3e
© 2012 Marilyn Wolf
Console system classes
console
1 1
1 1 1 1
1 1 1 1
receiver* sender*
Computers as Components 3e
© 2012 Marilyn Wolf
Console class roles
Computers as Components 3e
© 2012 Marilyn Wolf
Train system classes
train set
1 1..t
1 1
train
1 1 motor
receiver interface
1 1
1 1 controller 1 1
detector* pulser*
Computers as Components 3e
© 2012 Marilyn Wolf
Train class roles
Computers as Components 3e
© 2012 Marilyn Wolf
Detailed specification
Computers as Components 3e
© 2012 Marilyn Wolf
Train speed control
duty
cycle +
V
-
Computers as Components 3e
© 2012 Marilyn Wolf
Console physical object
classes
knobs* pulser*
train-knob: integer pulse-width: unsigned-
speed-knob: integer integer
inertia-knob: unsigned- direction: boolean
integer
emergency-stop: boolean
sender* detector*
Computers as Components 3e
© 2012 Marilyn Wolf
Panel and motor interface
classes
panel motor-interface
speed: integer
train-number() : integer
speed() : integer
inertia() : integer
estop() : boolean
new-settings()
Computers as Components 3e
© 2012 Marilyn Wolf
Class descriptions
Computers as Components 3e
© 2012 Marilyn Wolf
Transmitter and receiver
classes
transmitter receiver
current: command
send-speed(adrs: integer, new: boolean
speed: integer)
send-inertia(adrs: integer, read-cmd()
val: integer) new-cmd() : boolean
set-estop(adrs: integer) rcv-type(msg-type:
command)
rcv-speed(val: integer)
rcv-inertia(val:integer)
Computers as Components 3e
© 2012 Marilyn Wolf
Class descriptions
Computers as Components 3e
© 2012 Marilyn Wolf
Formatter class
formatter
current-train: integer
current-speed[ntrains]: integer
current-inertia[ntrains]:
unsigned-integer
current-estop[ntrains]: boolean
send-command()
panel-active() : boolean
operate()
Computers as Components 3e
© 2012 Marilyn Wolf
Formatter class
description
Computers as Components 3e
© 2012 Marilyn Wolf
Control input cases
control panel-active
train number inertia/estop
update-panel()
Computers as Components 3e
© 2012 Marilyn Wolf
Panel-active behavior
T current-train = train-knob
panel*:read-train() update-screen
changed = true
F
T
panel*:read-speed() current-speed = throttle
changed = true
F
... ...
Computers as Components 3e
© 2012 Marilyn Wolf
Controller class
controller
current-train: integer
current-speed[ntrains]: integer
current-direction[ntrains]: boolean
current-inertia[ntrains]:
unsigned-integer
operate()
issue-command()
Computers as Components 3e
© 2012 Marilyn Wolf
Setting the speed
Computers as Components 3e
© 2012 Marilyn Wolf
Sequence diagram for set-
speed command
:receiver :controller :motor-interface :pulser*
new-cmd
cmd-type
rcv-speed set-speed set-pulse
set-pulse
set-pulse
set-pulse
set-pulse
Computers as Components 3e
© 2012 Marilyn Wolf
Controller operate
behavior
wait for a
command
from receiver
receive-command()
issue-command()
Computers as Components 3e
© 2012 Marilyn Wolf
Refined command classes
command
type: 3-bits
address: 3-bits
parity: 1-bit
Computers as Components 3e
© 2012 Marilyn Wolf
Summary
Computers as Components 3e
© 2012 Marilyn Wolf