| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- Diagram(name = 'FSASimulator',
- author = 'Sadaf Mustafiz and Bruno Barroca and Claudio Gomes',
- description = 'An FSA simulator written in SCCD. It supports after and events.'):
- Top {
- import fsaclasses
- }
- Class(name = 'FSASimulator', default = True):
- Attribute(name = 'timestep')
- Attribute(name = 'elapsed')
- Attribute(name = 'currentState')
- Attribute(name = 'logicalTime')
- Attribute(name = 'currentEvent')
- Attribute(name = 'selectedTransition')
- Attribute(name = 'eventList')
- Attribute(name = 'model')
- Constructor(amodel, events) {
- self.model = amodel
- self.eventList = events
- }
-
- Method getInputEventAt(time) {
- return self.eventList->getInputAt(time)
- }
-
- Method processEvent(event) {
- if (event != None):
- self.eventList->popEvent(event)
- event.processed = True
- end
- }
- StateMachine:
- initial = 'Start'
- final = 'End'
- State('Start'):
- Transition(target='../Check'):
- Actions {
- self.logicalTime = 0
- self.elapsed = 0
- self.timestep = 1.0
- self.currentState = self.model.initialState
- }
- State('Check'):
- Transition(target='../Processing'):
- guard = { self.currentState.final == False }
- Actions {
- print('going to process... ')
- }
- Transition(target='../End'):
- guard = { self.currentState.final == True }
- Actions {
- print('going to end... ')
- }
- OnEnter {
- self.currentEvent = self->getInputEventAt(self.logicalTime)
- self.selectedTransition = self.model->getTransitionFrom(self.currentState, self.currentEvent, self.elapsed)
- }
- State('Processing'):
- Transition(target='../Check'):
- guard = {self.selectedTransition != None}
- Actions {
- self.currentState = self.selectedTransition.target
- self.elapsed = 0
- self->processEvent(self.currentEvent)
-
- print("changing to state: ")
- print(self.currentState->getName())
- print(self.logicalTime)
- print(self.elapsed)
- }
- Transition(target='../Check'):
- guard = {self.selectedTransition == None}
- Actions {
- self.logicalTime = self.logicalTime + self.timestep
- self.elapsed = self.elapsed + self.timestep
- print(self.logicalTime)
- print(self.elapsed)
- }
- State('End')
|