Cruise Control
and
Monitoring System
Giada Carlini
Corso di Ingegneria del Software II
Caso di Studio - seconda parte.
Cosa abbiamo visto
Analysis Model
Strutturazione del Sistema in
Sottosistemi
Cosa vedremo nel caso di studio
Strutturazione del Cruise Control and
Monitoring System in task concorrenti
Cruise Control Subsystem
Monitoring Subsystem
Design delle information hiding class
del Cruise Control and Monitoring System
Sviluppo del Detailed Software Design
del Cruise Control and Monitoring System
Evoluzione del Cruise Control and Monitoring
System in un Distributed Automobile System
Caratteristiche degli I/O device del
Cruise Control and Monitoring System
Asynchronous input device:
Cruise control lever e Drive shaft
Passive input device e frequenza del loro
campionamento:
Brake sensor, Engine sensor : 100 msec
Gas tank sensor : a richiesta
Calibration buttons, Mileage reset buttons : 500 msec
Maintenance reset buttons : ogni secondo
Passive output device frequenza del loro
aggiornamento:
Throttle : 100 msec
Mileage display : ogni secondo
Maintenance display : ogni due secondi
Cosa vedremo nel caso di studio
Strutturazione del Cruise Control and
Monitoring System in task concorrenti
Cruise Control Subsystem
Monitoring Subsystem
Design delle information hiding class
del Cruise Control and Monitoring System
Sviluppo del Detailed Software Design
del Cruise Control and Monitoring System
Evoluzione del Cruise Control and Monitoring
System in un Distributed Automobile System
I sottosistemi del Cruise Control
and Monitoring Subsystem
Cruise Control Subsystem
Shaft Subsystem
Calibration Subsystem
Auto Control Subsystem
Distance and Speed Subsystem
Monitoring Subsystem
Trip Averages Subsystem
Maintenance Subsystem
Strutturazione del sistema in task
concorrenti
Per ogni sottosistema sono mostrate due nuove
figure:
La prima illustra le decisioni di strutturazione in task
prese su ciascun collaboration diagram
La seconda è un concurrent collaboration diagram che
illustra l’architettura task risultante
Shaft Subsystem: task structuring
<<<external input device>>
:Shaft
<<data collection
subsystem>>
:ShaftSubsystem
Shaft Input
<<input device interface>>
:ShaftInterface
Update
<<<entity>>
:ShaftRotationCount
Asynchronous
Device
Interface Task
Scope of Control
of ShaftInterface
Task
Shaft Subsystem: task architecture
<<<external input device>>
:Shaft
<<data collection
subsystem>>
:ShaftSubsystem
ShaftInterrupt
<<asynchronous input device
interface>>
:ShaftInterface
Update()
<<<entity>>
:ShaftRotation Count
Calibration Subsystem: task structuring
<<external input device>>
stopCalibrationButton
<<external input device>>
startCalibrationButton
Start Calibration Input
Stop Calibration Input
<<data analysis subsystem>>
:CalibrationSubsystem
<<input device interface>>
startCalibration
ButtonInterface
Calibration Start
<<state dependent
control>>
:CalibrationControl
Start,
Stop
<<entity>>
:CalibrationConstant
<<input device interface>>
stopCalibration
ButtonInterface
Calibration
Stop
Scope of Control
Calibration Task
Calibration Task
Read
<<entity>>
:ShaftRotation
Count
Shaft
RotationCount Value
Calibration Subsystem: task architecture
<<external input
device>>
startCalibrationButton
read (out start
<<external timer>>
: DigitalClock
timerEvent
CalibrationInput)
<<data analysis
subsystem>>
:Calibration
Subsystem
<<external input
device>>
stopCalibrationButton
read (out stop
CalibrationInput)
<<temporal clustering>>
: Calibration
start ( ),
stop ( )
<<entity>>
: CalibrationConstant
read (out shaft
Rotation
CountValue)
<<entity>>
: ShaftRotation
Count
Auto Control Subsystem: task structuring 1
<<external input
device>>
:CruiseControlLever
<<external input
device>>
:Brake
Cruise Control Input
Engine Input
Brake Input
<<control subsystem>>
:AutoControl
Subsystem
Temporal
Clustering
Task
<<input device
interface>>
:CruiseControl
LeverInterface
Asynchronous
Device
Interface Task
<<input device
interface>>
:BrakeInterface
<<input device
interface>>
:EngineInterface
Brake Pressed
Brake Released
Control Task
Accell,
Cruise,
Resume, Off
<<external input
device>>
:Engine
<<state dependent
control>>
:CruiseControl
Engine off,
Engine on
Auto Control Subsystem: task structuring 2
<<control subsystem>>
:AutoControlSubsystem
Enable Increse Speed,
Disable Increse Speed
Reached Cruising
Enable Maintain Speed,
Disable Maintain Speed
<<algorithm>>
:Acceleration
Select Desired Speed
Clear Deired Speed
<<algorithm>>
:Cruise
Throttle
Value
<<algorithm>>
:Resumption
Read
Throttle
Desired Speed
Value
Value
Mutually
Exclusive
Clustering
Task
Enable Resume Cruising,
Disable Resume Cruising
<<state dependent
control>>
:CruiseControl
Read
Desired Speed
Value
<<entity>>
:DesiredSpeed
<<output device
interface>>
:ThrottleInterface
Throttle
Value
Periodic
Output Task
Throttle Position
Current
Speed
Value
Read
Read
<<external output
device>>
:Throttle
<<entity>>
:CurrentSpeed
Current Speed Value
Read
Current
Speed
Value
Current
Speed
Value
Read
Auto Control Subsystem: task architecture
<<external input device>>
:CruiseControlLevel
cruiseControlInterrupt
(cruiseControlInput)
<<external input device>>
:Brake
<<external timer>>
:DigitalClock
timer
Event
read(out
brakeInput)
<<control subsystem>>
:AutoControl
<<asynchronous input
Subsystem
device interface>>
:CruiseControl
LeverInterface
read(out
engineInput)
<<temporal clustering>>
:AutoSensors
<<control>>
:CruiseControl
cruiseControl
Request
<<external input device>>
:Engine
cruiseControl
Command
cruiseControl
Request
reached
Cruising
<<mutually exclusive clustering>>
:SpeedAdjustment
select( ),
clear( )
<<entity>>
:DesiredSpeed
read(out desired
SpeedValue)
throttleValue
<<periodic output device
interface>>
:ThrottleInterface
throttlePosition
<<external output device>>
:Throttle
read(out current
SpeedValue)
<<entity>>
:CurrentSpeed
read(out current
SpeedValue)
Definizione delle interfacce dei task
del Cruise Control Subsystem
Nei sottosistemi Shaft , Distance&Speed
Calibration i task non interagiscono
direttamente con altri task
Il task invoca le operazioni degli oggetti passivi
Questo non è vero per il sottosistema Auto
Control
e
Definizione delle
Data Abstraction Class
Il design delle task interface include il design
degli entity object acceduti dai task
Gli entity object sono tutti data abstraction
object
Perché:
Bisogna soltanto incapsulare i dati che devono essere
memorizzati
Definizione delle
Data Abstraction Classes
Le operazioni sono determinate considerando
come si accede agli oggetti nei collaboration
diagram
Le Data Abstraction Class sono:
Shaft Rotation Count
Calibration Constant
Current Speed
Desired Speed
Distance
Data abstraction class
<<data abstraction>>
ShaftRotationCount
-counter : Integer
+update ( )
+read (out shaftRotationCountValue)
Shaft Rotation Count
collaboration diagram
<<<external input device>>
:Shaft
<<data collection
subsystem>>
Shaft Input
:ShaftSubsystem
<<external device
interface>>
<<subsystem>>
:Distance&Speed
Subsystem
:ShaftInterface
Update
<<<entity>>
:ShaftRotationCount
Read
<<<entity>>
:Distance
Shaft Routation
Count Value
Definizione delle interfacce tra i
task e i data abstraction object
I data abstraction object sono acceduti da più
task quindi sono modellati come monitor così le
loro operazioni sono eseguite in modo
mutuamente esclusivo
Interfacce sempre tightly coupled ( con risposta
se c’è un parametro di ritorno )
Cruise Control Subsystem: subsystem and task architecture
cruiseControlInterrupt
(cruiseControlInput)
<<subsystem>>
:AutoControl
Subsystem
timer Event
<<asyncronous
input device
interface>>
:CruiseControl
LeverInterface
cruiseControl
Request
timer Event
<<subsystem>>
:Distance&Speed
Subsystem
<<periodic>>
:Distance&Speed
<<temporal clustering>>
:AutoSensors
<<control>>
:CruiseControl
cruiseControl
Command
cruiseControl
Request
reached
Cruising
<<mutually exclusive clustering>>
:SpeedAdjustment
throttleValue
select( ),
clear( )
<<entity>>
:DesiredSpeed
read(out
current
read(out desired SpeedValue)
SpeedValue)
calculate
(out
incremental
Distance)
read(out current
SpeedValue)
<<periodic output device interface>>
:ThrottleInterface
read(out
calibration
Constant Value)
<<temporal clustering>>
: Calibration
start ( ),
stop ( )
<<entity>>
:ShaftRotationCount
<<entity>>
:Distance
read (out shaft
Rotation
CountValue)
timer Event
<<subsystem>>
:Calibration
Subsystem
<<entity>>
:Current
Speed
calculate
(out
incremental
Distance)
<<subsystem>>
:Shaft
Subsystem
shaftInterrupt
read (out shaft
Rotation
CountValue)
<<asyncronous
input device
interface>>
:ShaftInterface
update( )
<<entity>>
: ShaftRotationCount
Cosa vedremo nel caso di studio
Strutturazione del Cruise Control and Monitoring
System in task concorrenti
Cruise Control Subsystem
Monitoring Subsystem
Design delle information hiding class
del Cruise Control and Monitoring System
Sviluppo del Detailed Software Design
del Cruise Control and Monitoring System
Evoluzione del Cruise Control and Monitoring System
in un Distributed Automobile System
Cosa vedremo nel caso di studio
Strutturazione del Cruise Control and Monitoring
System in task concorrenti
Cruise Control Subsystem
Monitoring Subsystem
Design delle information hiding class
del Cruise Control and Monitoring System
Sviluppo del Detailed Software Design
del Cruise Control and Monitoring System
Evoluzione del Cruise Control and Monitoring
System in un Distributed Automobile System
Design delle information hiding class
Le information hiding class per il caso di studio sono:
Input/output device interface class
Input/Output device inteface object: ShaftInterface, ThrottleInterface,
CruiseControlLeverInterface, BrakeInterface, EngineInterface,
StartcalibrationButtonInterface, StopCalibrationButtonInterface…
Entity class
Entity object: ShaftRotationCount, CalibrationConstant, Distance,
CurrentSpeed, DesiredSpeed…
Control class
Control object: CalibrationControl, distanceTimer, CruiseControl..
Algorithm class
Algorithm object: Acceleration, Cruiser, Resumption…
Definizione delle device interface class
Le input device interface class sono:
Engine Interface
Brake Interface
Boolean Input Device Interface {abstract}
Shaft Rotation Interface
Calibration Button Interface
Gas Tank Interface
Trip Reset Button Interface
Maintenance Reset Button interface
Button Interface {abstract}
Input device interface classes 1
<<input device interface>>
BooleanInputDeviceInterface {abstract}
#initialize ( ) {abstract}
#read ( out deviceStatus ) {abstract}
<<input device interface>>
<<input device interface>>
BrakeInterface
EngineInterface
+initialize ( )
+initialize ( )
+read ( out deviceStatus )
+read ( out deviceStatus )
Definizione delle device interface class
Le output device interface class sono:
Throttle Output Interface
Trip Display Interface
Maintenance Display Interface
Display Interface {abstract}
Definizione delle State-Dependent
Class
Le state-dependent class sono
Il Cruise Control
Il Calibration Control
Le state-dependent class sono nel Cruise
Control Subsystem
Il Monitoring Subsystem non è state-dependent
State-dependent class
<<state dependent control>>
StateMachine {abstract}
#processEvent ( in event ) {abstract}
#currentState ( ) : State {abstract}
<<state dependent control>>
CruiseControlStateMachine
<<state dependent control>>
CalibrationControl
+processEvent ( in event ) : Action
+processEvent ( in event )
+currentState ( ) : State
+currentState ( ) : State
Cruise Control State Machine
<<control>>
:Cruise
Control
Engine On/
Clear Desired Speed
Cruise
Control
Request
Idle
select( ),
clear( )
<<entity>>
:DesiredSpeed
read(out desired
SpeedValue)
Initial
Accel
[Brake off]
<<data abstraction>>
DesiredSpeed
Accelerating
Exit/Select Desired Speed
-speed : Real
+select ( )
+clear ( )
+read (out desiredSpeedValue)
Cruise
Definizione delle Algorithm class
Le Algorithm class che vedremo incapsulano i vari
algoritmi usati nel caso di studio
Le operazioni di una algorithm class possono essere
ricavate dal collaboration diagram e/o dallo statechart
associato
<<control>>
:Cruise
Control
Cruising
Enable Maintain Speed,
Disable Maintain Speed
<<algorithm>>
:Cruiser
Do/Maintain Speed
Definizione delle Algorithm class
Le algorithm class del caso di studio sono:
Acceleration
Cruiser
Resumption
Speed Control Algorithm {abstract}
Oil Change Maintenance
Air Filter Maintenance
Major Service Maintenance
Maintenance {abstract}
Trip Speed
Trip Fuel Consumption
Trip Average {abstract}
Speed Control algorithm class
<<algorithm>>
SpeedControlAlgorithm {abstract}
#initialize ( ) {abstract}
#enable ( ) {abstract}
#disable ( ) {abstract}
<<algorithm>>
Acceleration
+initialize ( )
+enable ( )
+disable ( )
<<algorithm>>
Cruiser
+initialize ( )
+enable ( )
+disable ( )
<<algorithm>>
Resumption
+initialize ( )
+enable ( )
+disable ( )
Cosa vedremo nel caso di studio
Strutturazione del Cruise Control and Monitoring
System in task concorrenti
Cruise Control Subsystem
Monitoring Subsystem
Design delle information hiding class
del Cruise Control and Monitoring System
Sviluppo del Detailed Software Design
del Cruise Control and Monitoring System
Evoluzione del Cruise Control and Monitoring System in
un Distributed Automobile System
Design dei clustered task
Consideriamo nell’ordine:
I clustered task nel Cruise Control Subsystem
Speed Adjustment task
Calibration task
Auto Sensors task
I clustered task nel Monitoring Subsystem
Trip Reset Button Interface task
Maintenance Reset Button Interface task
Detailed software design of Speed Adjustment task
<<control>>
:CruiseControl
cruiseControlCommand
<<mutually exclusive
clustering>>
:Speed Adjustment
reachedCruising
<<coordinator>>
:SpeedAdjustment
:SpeedAdjustment
enableIncreaseSpeed,
Coordinator
disableIncreaseSpeed
enableMaintainSpeed
disableMaintainSpeed
<<algorithm>>
:Acceleration
throttle
Value
read(out
current
Speed
Value)
enableResumeCruising(out reached
Cruising),disableResumeCruising
<<algorithm>>
:Resumption
<<algorithm>>
:Cruiser
throttle
Value
<<periodic output
device interface>>
:ThrottleInterface
read(out
desiredSpeed
Value)
read(out
desired
Speed
<<entity>>
Value) :DesiredSpeed
throttlePosition
<<external output device>>
:Throttle
<<entity>>
:CurrentSpeed
read(out
currentSpeed
Value)
read(out
currentSpeed
Value)
Throttle
Value
read(out
current
Speed
Value)
Detailed software design of Speed Adjustment task
<<control>>
:CruiseControl
cruiseControlCommand
<<mutually
enableIncreaseSpeed,
exclusive
clustering>>
disableIncreaseSpeed
:Speed Adjustment
<<coordinator>>
:SpeedAdjustment Coordinator
enableMaintainSpeed
disableMaintainSpeed
<<algorithm>>
:Acceleration
throttleValue
<<algorithm>>
:Cruiser
throttle
Value
<<periodic output device
interface>>
:ThrottleInterface
throttlePosition
<<external output
device>>
:Throttle
Detailed software design of Calibration task
<<external input device>>
startCalibrationButton
read(out
<<external input device>>
stopCalibrationButton
timer
Event
startCalibrationInput)
<<temporal
clustering>>
:Calibration
<<external timer>>
:DigitalClock
read( )
<<coordinator>>
:CalibrationMonitor
<<input device interface>>
startCalibrationButton
Interface
processEvent
(calibrationStart)
read(out stop
CalibrationInput)
read( )
<<input device interface>>
stopCalibrationButton
Interface
<<state dependent
control>>
:CalibrationControl
start( ), stop ( )
<<entity>>
:CalibrationConstant
processEvent
(calibrationStop)
Design dei Connector Object
Come sappiamo:
I connector object sono usati per incapsulare i
dettagli dell’inter-task message communication
Esempi:
caso di loosely coupled Message Comunication
caso di tightly coupled Message Comunication
senza risposta
Design of Cruise Control
connector objects
<<asynchronous input device
interface>>
:CruiseControl
LeverInterface
<<temporal clustering>>
:AutoSensors
<<control>>
:CruiseControl
Cruise
Control
Request
cruiseControl
Command
reached
Cruising
<<mutually exclusive clustering>>
:SpeedAdjustment
Auto Control Subsystem: task architecture
Cruise
Control
Request
Design of Cruise Control
connector objects
<<asynchronous input
device interface>>
:CruiseControlLever
Interface
send( in cruise
ControlRequest)
send( in cruise
ControlRequest)
<<connector>>
cruiseControl
<<temporal clustering>>
MessageQueue
:AutoSensors
<<mutually exclusive
clustering>>
send( in cruise
ControlRequest)
:SpeedAdjustment
cruiseControl
Command
receive( out cruise
ControlRequest)
<<control>>
:Cruise
Control
Design of Cruise Control
connector objects
<<asynchronous input
device interface>>
:CruiseControlLever
Interface
send( in cruise
ControlRequest)
send( in cruise
ControlRequest)
<<connector>>
cruiseControl
<<temporal clustering>>
receive( out cruise
ControlRequest)
MessageQueue
:AutoSensors
<<mutually exclusive
clustering>>
:SpeedAdjustment
send( in cruise
ControlRequest)
send( in cruise
ControlCommand)
receive(out cruise
ControlCommand)
<<connector>>
speedAdjustament
MessageBuffer
<<control>>
:Cruise
Control
Cosa vedremo nel caso di studio
Strutturazione del Cruise Control and Monitoring
System in task concorrenti
Cruise Control Subsystem
Monitoring Subsystem
Design delle information hiding classes
del Cruise Control and Monitoring System
Sviluppo del Detailed Software Design
del Cruise Control and Monitoring System
Evoluzione del Cruise Control and Monitoring
System in un Distributed Automobile System
Evoluzione del Cruise Control and
Monitoring System in un
Distributed Automobile System
Osservazioni
Gli Shaft, Calibration e Distance&Speed Subsystem calcolano la
CumulativeDistance e il CurrentSpeed dell’auto
sono collocati su un Auto Measurement Node
Gli Auto Control, Trip Averages e Maintenance Subsystem leggono
il valore della CumulativeDistance e del CurrentSpeed dell’auto
sono client indipendenti dell’Auto Measurement Node
Distribuited Automobile System
Auto
Control
Node
Trip
Averages
Node
Auto
Maintenance
Node
<<automobile LAN>>
Auto Measurement
Node
<<subsystem>>
Distance&Speed
Subsystem
<<subsystem>>
Calibration
Subsystem
<<subsystem>>
Shaft
Subsystem