|
@@ -0,0 +1,174 @@
|
|
|
+import models/RAM_PetriNets_Runtime as RAM_PN_R
|
|
|
+
|
|
|
+RAM_PN_R s {
|
|
|
+ Composite schedule {
|
|
|
+ {Contains} Failure failure {}
|
|
|
+ {Contains} Success success {}
|
|
|
+ {Contains} Atomic mark {
|
|
|
+ LHS {
|
|
|
+ Pre_Transition {
|
|
|
+ label = "1"
|
|
|
+ constraint = $
|
|
|
+ include "primitives.alh"
|
|
|
+ include "modelling.alh"
|
|
|
+ include "object_operations.alh"
|
|
|
+ Boolean function constraint(host_model : Element, name : String):
|
|
|
+ Element links
|
|
|
+ String link
|
|
|
+ String place
|
|
|
+ links = allIncomingAssociationInstances(host_model, name, "P2T")
|
|
|
+ while (read_nr_out(links) > 0):
|
|
|
+ link = set_pop(links)
|
|
|
+ place = readAssociationSource(host_model, link)
|
|
|
+ if (integer_lt(read_attribute(host_model, place, "tokens"), read_attribute(host_model, link, "weight"))):
|
|
|
+ return False!
|
|
|
+ return True!
|
|
|
+ $
|
|
|
+ }
|
|
|
+ }
|
|
|
+ RHS {
|
|
|
+ Post_Transition {
|
|
|
+ label = "1"
|
|
|
+ action = $
|
|
|
+ include "primitives.alh"
|
|
|
+ include "modelling.alh"
|
|
|
+ Void function action(host_model : Element, name : String, mapping : Element):
|
|
|
+ unset_attribute(host_model, name, "executing")
|
|
|
+ instantiate_attribute(host_model, name, "executing", True)
|
|
|
+ return!
|
|
|
+ $
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ {Contains} ForAll consume {
|
|
|
+ LHS {
|
|
|
+ Pre_Transition lhs_consume_t{
|
|
|
+ label = "0"
|
|
|
+ constraint = $
|
|
|
+ include "primitives.alh"
|
|
|
+ include "modelling.alh"
|
|
|
+ Boolean function constraint(host_model : Element, name : String):
|
|
|
+ // Check if this node is executing currently
|
|
|
+ return value_eq(read_attribute(host_model, name, "executing"), True)!
|
|
|
+ $
|
|
|
+ }
|
|
|
+ Pre_Place lhs_consume_p{
|
|
|
+ label = "1"
|
|
|
+ }
|
|
|
+ Pre_P2T lhs_consume_p2t(lhs_consume_p, lhs_consume_t){
|
|
|
+ label = "2"
|
|
|
+ }
|
|
|
+ }
|
|
|
+ RHS {
|
|
|
+ Post_Transition rhs_consume_t {
|
|
|
+ label = "0"
|
|
|
+ }
|
|
|
+ Post_Place rhs_consume_p {
|
|
|
+ label = "1"
|
|
|
+ action = $
|
|
|
+ include "primitives.alh"
|
|
|
+ include "modelling.alh"
|
|
|
+ Void function action(host_model : Element, name : String, mapping : Element):
|
|
|
+ Integer tokens
|
|
|
+ Integer weight
|
|
|
+ tokens = read_attribute(host_model, name, "tokens")
|
|
|
+ weight = read_attribute(host_model, mapping["2"], "weight")
|
|
|
+ unset_attribute(host_model, name, "tokens")
|
|
|
+ instantiate_attribute(host_model, name, "tokens", tokens - weight)
|
|
|
+ log("Consume for " + cast_v2s(read_attribute(host_model, name, "name")))
|
|
|
+ log("Previous: " + cast_v2s(tokens))
|
|
|
+ log("Now: " + cast_v2s(tokens - weight))
|
|
|
+ return!
|
|
|
+ $
|
|
|
+ }
|
|
|
+ Post_P2T (rhs_consume_p, rhs_consume_t){
|
|
|
+ label = "2"
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ {Contains} ForAll produce {
|
|
|
+ LHS {
|
|
|
+ Pre_Transition lhs_produce_t{
|
|
|
+ label = "0"
|
|
|
+ constraint = $
|
|
|
+ include "primitives.alh"
|
|
|
+ include "modelling.alh"
|
|
|
+ Boolean function constraint(host_model : Element, name : String):
|
|
|
+ // Check if this node is executing currently
|
|
|
+ return value_eq(read_attribute(host_model, name, "executing"), True)!
|
|
|
+ $
|
|
|
+ }
|
|
|
+ Pre_Place lhs_produce_p{
|
|
|
+ label = "1"
|
|
|
+ }
|
|
|
+ Pre_T2P (lhs_produce_t, lhs_produce_p){
|
|
|
+ label = "2"
|
|
|
+ }
|
|
|
+ }
|
|
|
+ RHS {
|
|
|
+ Post_Transition rhs_produce_t{
|
|
|
+ label = "0"
|
|
|
+ }
|
|
|
+ Post_Place rhs_produce_p{
|
|
|
+ label = "1"
|
|
|
+ action = $
|
|
|
+ include "primitives.alh"
|
|
|
+ include "modelling.alh"
|
|
|
+ Void function action(host_model : Element, name : String, mapping : Element):
|
|
|
+ Integer tokens
|
|
|
+ Integer weight
|
|
|
+ tokens = read_attribute(host_model, name, "tokens")
|
|
|
+ weight = read_attribute(host_model, mapping["2"], "weight")
|
|
|
+ unset_attribute(host_model, name, "tokens")
|
|
|
+ instantiate_attribute(host_model, name, "tokens", tokens + weight)
|
|
|
+ log("Produce for " + cast_v2s(read_attribute(host_model, name, "name")))
|
|
|
+ log("Previous: " + cast_v2s(tokens))
|
|
|
+ log("Now: " + cast_v2s(tokens + weight))
|
|
|
+ return!
|
|
|
+ $
|
|
|
+ }
|
|
|
+ Post_T2P (rhs_produce_t, rhs_produce_p){
|
|
|
+ label = "2"
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ {Contains} Atomic unmark_transition {
|
|
|
+ LHS {
|
|
|
+ Pre_Transition {
|
|
|
+ label = "0"
|
|
|
+ constraint = $
|
|
|
+ include "primitives.alh"
|
|
|
+ include "modelling.alh"
|
|
|
+ Boolean function constraint(host_model : Element, name : String):
|
|
|
+ // Check if this node is executing currently
|
|
|
+ return value_eq(read_attribute(host_model, name, "executing"), True)!
|
|
|
+ $
|
|
|
+ }
|
|
|
+ }
|
|
|
+ RHS {
|
|
|
+ Post_Transition {
|
|
|
+ label = "0"
|
|
|
+ action = $
|
|
|
+ include "primitives.alh"
|
|
|
+ include "modelling.alh"
|
|
|
+ Void function action(host_model : Element, name : String, mapping : Element):
|
|
|
+ unset_attribute(host_model, name, "executing")
|
|
|
+ instantiate_attribute(host_model, name, "executing", False)
|
|
|
+ return!
|
|
|
+ $
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ OnSuccess (mark, consume) {}
|
|
|
+ OnFailure (mark, failure) {}
|
|
|
+ OnSuccess (consume, produce) {}
|
|
|
+ OnFailure (consume, produce) {}
|
|
|
+ OnSuccess (produce, unmark_transition) {}
|
|
|
+ OnFailure (produce, unmark_transition) {}
|
|
|
+ OnSuccess (unmark_transition, success) {}
|
|
|
+ OnFailure (unmark_transition, failure) {}
|
|
|
+ Initial (schedule, mark) {}
|
|
|
+}
|
|
|
+
|
|
|
+export s to models/pn_simulate
|