#VRML V2.0 utf8 # Example PetriNet # Split and Laminate Process # # # PETRI NET DYNAMIC MODEL TEMPLATES EXTERNPROTO PN [ field SFVec3f position field MFNode places field MFNode transitions field MFNode trace_places field MFNode trace_transitions field MFNode inputs eventIn SFFloat set_clock ] "pnprotos.wrl#PN" EXTERNPROTO PN_PLACE [ exposedField MFNode geometry field MFNode behavior field SFInt32 number_start_tokens exposedField SFInt32 tokencount eventIn SFFloat set_clock eventIn SFBool token_arrive eventOut SFBool token_start eventOut SFBool token_available ] "pnprotos.wrl#PN_PLACE" EXTERNPROTO PN_TRANSITION [ exposedField MFNode geometry field MFNode behavior field MFNode placefrom field MFNode placeto field SFInt32 ready_token_count field SFFloat fireSpeed field SFFloat startInterval eventIn SFFloat set_clock eventIn SFBool inform_transition eventOut SFBool fire_transition ] "pnprotos.wrl#PN_TRANSITION" EXTERNPROTO PN_TRACE_PLACE [ field SFVec3f position field MFNode geometry ] "pnprotos.wrl#PN_TRACE_PLACE" EXTERNPROTO PN_TRACE_TRANSITION [ field SFVec3f position field MFNode geometry ] "pnprotos.wrl#PN_TRACE_TRANSITION" EXTERNPROTO PN_INPUT [ field SFVec3f position eventIn SFTime touched eventOut SFBool startsim ] "pnprotos.wrl#PN_INPUT" # OBJECTS EXTERNPROTO ACCUMULATOR [ exposedField SFFloat transparency field SFVec3f text_position field MFString name field SFVec3f position ] "pnobjects.wrl#ACCUMULATOR" EXTERNPROTO OPERATION [ exposedField SFFloat transparency field SFVec3f text_position field MFString name field SFVec3f position field SFRotation rotation ] "pnobjects.wrl#OPERATION" EXTERNPROTO PLACETOTRANSITIONTRACE [ field SFRotation rotation field SFVec3f position field SFVec3f scale ] "pnobjects.wrl#PLACETOTRANSITIONTRACE" EXTERNPROTO TRANSITIONTOPLACETRACE [ field SFRotation rotation field SFVec3f position field SFVec3f scale ] "pnobjects.wrl#TRANSITIONTOPLACETRACE" EXTERNPROTO TOKEN_STATUS [ field SFNode itsplace field SFVec3f position eventIn SFInt32 set_clock field MFString behavior ] "pnobjects.wrl#TOKEN_STATUS" EXTERNPROTO OBJECT [ exposedField SFBool input field MFNode behavior field MFNode contains ] "pnobjects.wrl#OBJECT" NavigationInfo { headlight TRUE type [ "EXAMINE", "ANY" ]} # # Views # DEF Top_View Viewpoint { position 0 0 80 fieldOfView 1 description "Top View" } # # World # DEF World OBJECT { contains [ DEF Clock TimeSensor { cycleInterval 10000} DEF SplitLaminateProcess PN { inputs [ DEF Inputstart PN_INPUT { position 60 -30 0 } ] places [ DEF WholeSheetAccumulator PN_PLACE { number_start_tokens 9 tokencount 9 geometry DEF WSAcc ACCUMULATOR { position -60 0 0 text_position -8 -4 0 name "whole sheet accumulator" } behavior DEF TS_WSAcc TOKEN_STATUS { position -60 2.5 0 itsplace USE WholeSheetAccumulator } } #DEF WholeSheetAccumulator DEF HalfSheetTopAccumulator PN_PLACE { number_start_tokens 5 tokencount 5 geometry DEF HSTAcc ACCUMULATOR { position 0 10 0 text_position -8 4 0 name "top sheet accumulator" } behavior DEF TS_HSTAcc TOKEN_STATUS { position 0 6 0 itsplace USE HalfSheetTopAccumulator } #Transform } #DEF HalfSheetTopAccumulator DEF HalfSheetBottomAccumulator PN_PLACE { number_start_tokens 0 tokencount 0 geometry DEF HSBAcc ACCUMULATOR { position 0 -10 0 text_position -8 -4 0 name "bottom sheet accumulator" } behavior DEF TS_HSBAcc TOKEN_STATUS { position 0 -7.5 0 itsplace USE HalfSheetBottomAccumulator } } #DEF HalfSheetBottomAccumulator DEF FinishedAccumulator PN_PLACE { number_start_tokens 0 tokencount 0 geometry DEF FAcc ACCUMULATOR { position 60 0 0 text_position -8 -4 0 name "finished accumulator" } behavior DEF TS_FAcc TOKEN_STATUS { position 60 2.5 0 itsplace USE FinishedAccumulator } #Transform } #DEF FinishedAccumulator ] #places transitions [ DEF Splitter PN_TRANSITION { placefrom [USE WholeSheetAccumulator] placeto [USE HalfSheetTopAccumulator, USE HalfSheetBottomAccumulator] fireSpeed .0006 geometry DEF T0control OPERATION { text_position -8 4 0 name "SPLITTER" position -30 0 0 } } #DEF Splitter DEF Laminator PN_TRANSITION { placefrom [USE HalfSheetTopAccumulator, USE HalfSheetBottomAccumulator] placeto [USE FinishedAccumulator] fireSpeed .0006 geometry DEF T1control OPERATION { text_position -8 4 0 name "LAMINATOR" position 30 0 0 } }#DEF Laminator ] #transitions trace_places [ DEF WSApSt PN_TRACE_PLACE { geometry DEF wsaPsT PLACETOTRANSITIONTRACE { position -45.5 0 0 rotation 0 0 1 1.57 scale 0.3 12.5 0.3 } }#DEF WSApSt DEF HSTApLt PN_TRACE_PLACE { geometry DEF hstaPlT PLACETOTRANSITIONTRACE { position 15 5 0 rotation 0 0 1 1.2 scale 0.3 14.4 0.3 } #DEF hstaPlT }#DEF HSTApLt DEF HSBApLt PN_TRACE_PLACE { geometry DEF hsbaPlT PLACETOTRANSITIONTRACE { position 15 -5 0 rotation 0 0 1 -1.2 scale 0.3 14.4 0.3 } }#DEF hsbaPlT ] trace_transitions [ DEF StHSTAp PN_TRACE_TRANSITION { geometry DEF sThstaP TRANSITIONTOPLACETRACE { position -15 5 0 rotation 0 0 1 -1.2 scale .3 14.4 .3 } }#DEF sThstaP DEF StHSBAp PN_TRACE_TRANSITION { geometry DEF sThsbaP TRANSITIONTOPLACETRACE { position -15 -5 0 rotation 0 0 1 1.2 scale .3 14.4 .3 } }#DEF sThsbaP DEF LtFAp PN_TRACE_TRANSITION { geometry DEF lTfaP TRANSITIONTOPLACETRACE { position 45.5 0 0 rotation 0 0 1 1.57 scale .3 12.5 .3 } }#DEF lTfaP ] }#DEF Table ] } # # Routes # ROUTE Inputstart.startsim TO Clock.enabled ROUTE Clock.enabled TO Clock.set_loop ROUTE Clock.fraction_changed TO SplitLaminateProcess.set_clock ROUTE WholeSheetAccumulator.token_available TO Splitter.inform_transition ROUTE Splitter.fire_transition TO HalfSheetTopAccumulator.token_arrive ROUTE Splitter.fire_transition TO HalfSheetBottomAccumulator.token_arrive ROUTE HalfSheetTopAccumulator.token_available TO Laminator.inform_transition ROUTE HalfSheetBottomAccumulator.token_available TO Laminator.inform_transition ROUTE Laminator.fire_transition TO FinishedAccumulator.token_arrive