Dynamic Updates
Example
Getting Started
Step-by-Step Guide
system specification PickAndPlaceRobotSpecification { domain PickAndPlaceSystem // domain model package name define Controller as controllable define Arm as uncontrollable define TableSensor as uncontrollable define DepositBelt as uncontrollable non-spontaneous events { Controller.arrivedAtBelt, Controller.arrivedAtTable } collaboration PickAndPlaceBehavior { static role TableSensor ts static role Controller c static role Arm a static role DepositBelt belt /* S1 */ specification scenario ArmPickUpPieceAndMoveToBelt { message ts->c.pieceArrived() strict requested wait until [c.armAtTable] message strict requested c->a.pickUp() message strict requested c->belt.startWindBelt() message strict requested c->a.moveToBelt() } /* needed to know when pick-up is possible */ specification scenario SetArmAtTableFalse { message c->a.moveToBelt() message strict requested c->c.setArmAtTable(false) } /* needed to know when pick-up is possible */ specification scenario SetArmAtTableTrue { message a->c.arrivedAtTable() message strict requested c->c.setArmAtTable(true) } /* S2 */ specification scenario ArmReleasePieceOntoBelt { message a->c.arrivedAtBelt() message strict requested c->a.release() } /* S3 */ specification scenario ArmMoveToTableAfterRelease { message c->a.release() message strict requested c->a.moveToTable() } /* S4 */ specification scenario ReleaseAfterArrivedAtBelt { message a -> c.arrivedAtBelt() message strict requested c -> belt.stopWindBelt() message strict requested c -> a.release() } /* S5 */ requirement scenario ReleaseOntoBeltAfterStartWind { message c -> belt.startWindBelt() message strict requested c -> belt.stopWindBelt() } /* A1 */ assumption scenario ArmMoveFromTableToBelt { message c->a.moveToBelt() message strict requested a->c.arrivedAtBelt() } /* A2 */ assumption scenario ArmMoveFromBeltToTable { message c->a.moveToTable() message strict requested a->c.arrivedAtTable() } /* A3 */ assumption scenario NoNewPieceArrivesBeforeArmPicksUp { message ts->c.pieceArrived() message strict c->a.pickUp() } } }