![]() |
![]() |
|
02224 Modelling and Analysis of Real-Time Systems Spring 2024 |
Baggage Sorting Project |
The course comprises two assignments (deadlines in parenthesis):
A modelling and verification assignment using UPPAAL.
Baggage Sorting Facility (contd.)
A continuation of part a comprising an elaboration and implementation of the system in Java.
See DTU Learn for the other Assignment 2 options.
Reports and files for each assignment must be uploaded to DTU Learn as described in the assignment.
The optional tasks should be done independently as extensions/elaborations of the basic common work. So there would typically be a common model for the common parts (1.-6.) and additional models/programs for the various optional tasks.
Detailed instructions and other information:
It is possible that certain parts of the assigment descriptions will have to be clarified or augmented. Such notes will appear in this section. So check this page if you encounter problems.
Tips
Below are some tips for issues that are commonly encountered in UPPAAL modelling.
[Many professor and student hours have been wasted due to this ``feature".]
Instead, use the standard technique of declaring an urgent broadcast channel, say go, and add the synchronization go! to the transition.
Consider a template T with a single parameter int
id. Creating two instances of this template could be
done as follows in System declarations:
T0 = T(0);
T1 = T(1);
system T0, T1;
const int N = 2;
typedef int[0,N-1] t_id;
In order to change the number of instances of the template to be
created, only the value of the constant N needs to be modified.
Instantiation is done in System declarations simply by
adding the template to the system as follows:
system T;
Verification of predicates in all or some of these templates can
easily be done with the operators forall and exists,
e.g. checking reachability for all instances of T
reaching the local state B:
E<>forall(i:t_id)T(i).B
Alas, these quantifiers cannot be used with leads-to properties for which explicit enumeration must be made.
The example specified here can be seen in the file: instantiation.xml
const int N = 2;
typedef scalar[N] t_id;
In that case, the verifier can use symmetry reduction to eliminate permutations of instances reducing the verification considerably.
This example can be found in the file: scalar_instantiation.xml
Update:
The benefits of using scalar types are only
applicable for invariant queuries (A[]) or possibility queries
(E<>).
For leads-to properties (-->) scalar types have no effect and it may not even be possible to state relevant properties as specific template-instances (such as T(0)) cannot not be referred to.
Thus: Use scalar types for verification of safety properties (invariants), but replace them with integer range types when verifying liveness properties.
You should then verify that such errors will not occur when your control strategy is applied.
A more elaborate example of fixed period stopping is:
multistop.xml
which demonstrates how to use
stop periods which are multiples of some Delta time