/* CIF SystemDiagram */ /* CIF Page 1 (1900,1900) */ /* CIF Frame (150,150),(1600,1750) */ /* CIF PackageReference (175,25),(200,100) */ /* CIF Page 2 (1850,1600) */ /* CIF Frame (100,100),(1650,1450) */ /* CIF PackageReference (125,-25),(200,100) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\RailwayCrossing.ssy' */ /* CIF Specific SDT Page 1 Scale 100 Grid (50,50) AutoNumbered */ /* CIF Specific SDT Page 2 Scale 100 Grid (50,50) AutoNumbered */ system RailwayCrossing; /* CIF CurrentPage 1 */ /* CIF Text (450,250),(200,100) */ /* RailwayCross system consists of a controller, a car sensor, a gate, a set of emergency signal, and a number of tracks */ /* Each track consists of a track controller, an InSensor, an OutSensor and a set of train signals */ /* Four Strategies can be used in this system, and they can be switched dynamically when the system is running. They are: 1-- Manual Override 2 --Trains take precedence 3 -- Fast train - many cars - slow train 4 -- Many cars - train */ /* CIF End Text */ /* CIF Text (450,700),(200,100) */ SIGNAL Yes, No,YesE,NoE; /* Yes--more than one car waiting*/ SIGNAL TrainC, Coming; SIGNAL TrainL, Left; SIGNAL GreenRQ, RedRQ; SIGNAL Green, Red; SIGNAL Open, Close; SIGNAL Opened, Closed, Raising, Lowering; SIGNALLIST TrainSignalRQ=GreenRQ, RedRQ; SIGNALLIST TrainSignal=Green, Red; SIGNALLIST GateSignal=Opened, Closed, Raising, Lowering; SIGNALLIST GateControl=Open, Close; SYNONYM NoOfTracks Integer =2; /* Constant--No of tracks*/ SYNONYM NoOfFastTracks Integer =1; /* Constant -- No of fast train tracks*/ /* CIF End Text */ /* CIF Text (450,1350),(200,100) */ /* Emergency Signals */ SIGNAL OpenF, CloseF, SetRedF; SIGNAL OpenFail, CloseFail, SetRedFail; SIGNALLIST Emergency=OpenF, CloseF, SetRedF; SIGNALLIST EmergencyHandle=OpenFail, CloseFail, SetRedFail; /* CIF End Text */ /* CIF Text (450,1650),(200,100) */ /* Manual Override singals */ SIGNAL Strategy(Natural); SIGNAL EStopS; SIGNAL EOpen, EClose; SIGNAL EGreenRQ, ERedRQ; /* CIF End Text */ /* CIF Text (1000,1650),(200,100) */ /* Setup signals */ SIGNAL InSetupRQ, InSetup; SIGNAL OutSetupRQ, OutSetup; SIGNAL SignalSetupRQ; /* CIF End Text */ /* CIF CurrentPage 2 */ /* CIF BlockType (900,200),(300,200) */ /* CIF TextPosition (975,275) */ block type Tracks referenced; /* CIF Channel (100,600),(400,600) */ /* CIF TextPosition (225,525) */ /* CIF TextPosition (180,625) SignalList1 */ /* CIF Arrow1Position (274,600) */ channel ECS from env to CarSensor with YesE, NoE; endchannel ECS; /* CIF Channel (800,600),(875,600),(875,850) */ /* CIF TextPosition (813,550) */ /* CIF TextPosition (725,767) SignalList1 */ /* CIF Arrow1Position (875,814) */ channel CC from CarSensor to Controller with Yes, No; endchannel CC; /* CIF Channel (1150,850),(1150,600),(1400,600) */ /* CIF TextPosition (1075,650) */ /* CIF TextPosition (1175,550) SignalList1 */ /* CIF TextPosition (1175,775) SignalList2 */ /* CIF Arrow1Position (1333,600) */ /* CIF Arrow2Position (1150,784) */ channel CG from Controller to TheGate with (GateControl); from TheGate to Controller with (GateSignal); endchannel CG; /* CIF Channel (1750,950),(1250,950) */ /* CIF TextPosition (1450,900) */ /* CIF TextPosition (1350,975) SignalList1 */ /* CIF Arrow1Position (1627,950) */ channel EC from env to Controller with Strategy,EStopS, EOpen,EClose, EGreenRQ,ERedRQ; endchannel EC; /* CIF Channel (1050,1050),(1050,1300) */ /* CIF TextPosition (975,1150) */ /* CIF TextPosition (1100,1225) SignalList1 */ /* CIF Arrow1Position (1050,1279) */ channel ES from Controller to EmergencySignal with (Emergency); endchannel ES; /* CIF Channel (575,1300),(575,950),(700,950) */ /* CIF TextPosition (600,1125) */ /* CIF TextPosition (315,950) SignalList1 */ /* CIF TextPosition (275,1205) SignalList2 */ /* CIF Arrow1Position (684,950) */ /* CIF Arrow2Position (575,1255) */ channel CT from tr via G3 to Controller with InSetupRQ, OutSetupRQ, SignalSetupRQ, (TrainSignal), Coming, Left; from Controller to tr via G3 with InSetup,OutSetup, (TrainSignalRQ); endchannel CT; /* CIF Channel (1400,1400),(1750,1400) */ /* CIF TextPosition (1488,1325) */ /* CIF TextPosition (1432,1450) SignalList1 */ /* CIF Arrow1Position (1666,1400) */ channel RL from EmergencySignal to env with (EmergencyHandle); endchannel RL; /* CIF Channel (100,1425),(400,1425) */ /* CIF TextPosition (225,1375) */ /* CIF TextPosition (150,1450) SignalList1 */ /* CIF Arrow1Position (176,1425) */ channel ET from env to tr via G2 with TrainC, TrainL; endchannel ET; /* CIF Block (400,500),(400,200) */ /* CIF TextPosition (525,575) */ block CarSensor referenced; /* CIF Block (1400,500),(300,200) */ /* CIF TextPosition (1475,575) */ block TheGate referenced; /* CIF Block (700,850),(550,200) */ /* CIF TextPosition (879,925) */ block Controller referenced; /* CIF Block (400,1300),(450,200) */ /* CIF TextPosition (550,1375) */ /* CIF GateReference (400,1425) */ /* CIF TextPosition (425,1400) */ /* CIF GateReference (575,1300) */ /* CIF TextPosition (550,1325) */ block tr(NoOftracks): Tracks; /* CIF Block (1000,1300),(400,200) */ /* CIF TextPosition (1050,1375) */ block EmergencySignal referenced; /* CIF End SystemDiagram */ endsystem RailwayCrossing; /* CIF BlockTypeDiagram */ /* CIF Page 1 (2300,1900) */ /* CIF Frame (150,200),(2150,1650) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\Tracks.sbt' */ /* CIF Specific SDT Page 1 Scale 100 Grid (50,50) AutoNumbered */ block type Tracks; /* CIF Gate (1100,200),(1100,50) */ /* CIF TextPosition (1025,100) */ /* CIF TextPosition (1175,25) SignalList1 */ /* CIF TextPosition (1475,75) SignalList2 */ gate G3 out with InSetupRQ, OutSetupRQ, SignalSetupRQ, (TrainSignal), Coming, Left; in with InSetup,OutSetup, (TrainSignalRQ); /* CIF Gate (150,1600),(0,1600) */ /* CIF TextPosition (50,1525) */ /* CIF TextPosition (25,1625) SignalList1 */ gate G2 in with TrainC, TrainL; /* CIF CurrentPage 1 */ /* CIF Text (1150,300),(200,100) */ SIGNAL ComingToT, TrainLToT; SIGNAL GreenRQFromT, RedRQFromT; SIGNAL GreenToT, RedToT; SIGNAL InSetupRQToT, InSetupFromT; SIGNAL OutSetupRQToT, OutSetupFromT; SIGNAL SignalSetupRQToT; SIGNALLIST TrainSignalRQFromT=GreenRQFromT, RedRQFromT; SIGNALLIST TrainSignalToT=GreenToT, RedToT; /* CIF End Text */ /* CIF SignalRoute (1100,900),(1100,200) */ /* CIF TextPosition (1000,482) */ /* CIF TextPosition (825,250) SignalList1 */ /* CIF TextPosition (800,675) SignalList2 */ signalroute TCC from TrackControl to env via G3 with InSetupRQ, OutSetupRQ, SignalSetupRQ, (TrainSignal), Coming, Left; from env via G3 to TrackControl with InSetup,OutSetup, (TrainSignalRQ) ; /* CIF SignalRoute (950,1000),(550,1000),(550,1250) */ /* CIF TextPosition (725,1022) */ /* CIF TextPosition (300,1125) SignalList1 */ /* CIF TextPosition (425,950) SignalList2 */ signalroute IT from TrackControl to InSensor with InSetupFromT; from InSensor to TrackControl with ComingToT,InSetupRQToT; /* CIF SignalRoute (1725,1250),(1725,1000),(1250,1000) */ /* CIF TextPosition (1523,1025) */ /* CIF TextPosition (1300,950) SignalList1 */ /* CIF TextPosition (1750,1125) SignalList2 */ signalroute ST from TrainSignal to TrackControl with (TrainSignalToT),SignalSetupRQToT; from TrackControl to TrainSignal with (TrainSignalRQFromT); /* CIF SignalRoute (1100,1500),(1100,1100) */ /* CIF TextPosition (1124,1182) */ /* CIF TextPosition (800,1125) SignalList1 */ /* CIF TextPosition (1125,1450) SignalList2 */ signalroute OT from OutSensor to TrackControl with TrainLtoT, OutSetupRQToT; from TrackControl to OutSensor with OutSetupFromT; /* CIF SignalRoute (150,1600),(400,1450) */ /* CIF TextPosition (250,1525) */ /* CIF TextPosition (189,1499) SignalList1 */ signalroute ch1 from env via G2 to InSensor with TrainC; /* CIF SignalRoute (150,1600),(950,1600) */ /* CIF TextPosition (480,1625) */ /* CIF TextPosition (700,1625) SignalList1 */ signalroute ch2 from env via G2 to OutSensor with TrainL; /* CIF Process (950,900),(300,200) */ /* CIF TextPosition (975,975) */ process TrackControl referenced; /* CIF Process (400,1250),(300,200) */ /* CIF TextPosition (450,1325) */ process InSensor referenced; /* CIF Process (1550,1250),(300,200) */ /* CIF TextPosition (1600,1325) */ process TrainSignal referenced; /* CIF Process (950,1500),(300,200) */ /* CIF TextPosition (1000,1575) */ process OutSensor referenced; /* CIF End BlockTypeDiagram */ endblock type Tracks; /* CIF ProcessDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\OutSensor.spr' */ /* CIF Specific SDT Page 1 Scale 100 Grid (50,50) AutoNumbered */ process OutSensor; /* CIF DefaultSize (200,100) */ /* CIF CurrentPage 1 */ /* CIF Start (250,300) */ start ; /* CIF Line (350,400),(350,425),(450,425),(450,450) */ /* CIF Output (250,450),(400,100) Right */ output OutSetupRQToT; /* CIF Line (450,550),(450,575),(350,575),(350,600) */ /* CIF NextState (250,600) */ nextstate Waiting; /* CIF State (250,600) */ state Waiting; /* CIF Line (350,700),(350,725),(450,725),(450,750) */ /* CIF Input (250,750),(400,100) Right */ input OutSetupFromT; /* CIF Line (450,850),(450,875),(350,875),(350,900) */ /* CIF NextState (250,900) */ nextstate Ready; /* CIF End State */ endstate; /* CIF State (900,450) */ state Ready; /* CIF Line (1000,550),(1000,600) */ /* CIF Input (900,600) Right */ input TrainL; /* CIF Line (1000,700),(1000,750) */ /* CIF Output (900,750) Right */ output TrainLtoT; /* CIF Line (1000,850),(1000,900) */ /* CIF NextState (900,900) */ nextstate -; /* CIF End State */ endstate; /* CIF End ProcessDiagram */ endprocess OutSensor; /* CIF ProcessDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\InSensor.spr' */ /* CIF Specific SDT Page 1 Scale 100 Grid (50,50) AutoNumbered */ process InSensor; /* CIF DefaultSize (200,100) */ /* CIF CurrentPage 1 */ /* CIF Start (300,400) */ start ; /* CIF Line (400,500),(400,525),(500,525),(500,550) */ /* CIF Output (300,550),(400,100) Right */ output InSetupRQToT; /* CIF Line (500,650),(500,675),(400,675),(400,700) */ /* CIF NextState (300,700) */ nextstate Waiting; /* CIF State (300,700) */ state Waiting; /* CIF Line (400,800),(400,825),(500,825),(500,850) */ /* CIF Input (300,850),(400,100) Right */ input InSetupFromT; /* CIF Line (500,950),(500,975),(400,975),(400,1000) */ /* CIF NextState (300,1000) */ nextstate Ready; /* CIF End State */ endstate; /* CIF State (950,550) */ state Ready; /* CIF Line (1050,650),(1050,700) */ /* CIF Input (950,700) Right */ input TrainC; /* CIF Line (1050,800),(1050,825),(1100,825),(1100,850) */ /* CIF Output (950,850),(300,100) Right */ output ComingToT; /* CIF Line (1100,950),(1100,975),(1050,975),(1050,1000) */ /* CIF NextState (950,1000) */ nextstate -; /* CIF End State */ endstate; /* CIF End ProcessDiagram */ endprocess InSensor; /* CIF ProcessDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\TrainSignal.spr' */ /* CIF Specific SDT Page 1 Scale 100 Grid (250,150) AutoNumbered */ process TrainSignal; /* CIF DefaultSize (200,100) */ /* CIF CurrentPage 1 */ /* CIF Start (300,250) */ start ; /* CIF Line (400,350),(400,375),(500,375),(500,400) */ /* CIF Output (300,400),(400,100) Right */ output SignalSetupRQToT; /* CIF Line (500,500),(500,525),(400,525),(400,550) */ /* CIF NextState (300,550) */ nextstate Waiting; /* CIF State (300,550) */ state Waiting; /* CIF Line (400,650),(400,675),(500,675),(500,700) */ /* CIF Input (300,700),(400,100) Right */ input GreenRQFromT; /* CIF Line (500,800),(500,825),(400,825),(400,850) */ /* CIF NextState (300,850) */ nextstate Green; /* CIF Line (400,650),(400,675),(950,675),(950,700) */ /* CIF Input (800,700),(300,100) Right */ input RedRQFromT; /* CIF Line (950,800),(950,825),(900,825),(900,850) */ /* CIF NextState (800,850) */ nextstate Red; /* CIF End State */ endstate; /* CIF State (550,1150) */ state Red, Green; /* CIF Line (650,1250),(650,1275),(500,1275),(500,1300) */ /* CIF Input (300,1300),(400,100) Right */ input GreenRQFromT; /* CIF Line (500,1400),(500,1425),(400,1425),(400,1450) */ /* CIF Output (300,1450) Right */ output GreenToT; /* CIF Line (400,1550),(400,1600) */ /* CIF NextState (300,1600) */ nextstate Green; /* CIF Line (650,1250),(650,1275),(950,1275),(950,1300) */ /* CIF Input (800,1300),(300,100) Right */ input RedRQFromT; /* CIF Line (950,1400),(950,1425),(900,1425),(900,1450) */ /* CIF Output (800,1450) Right */ output RedToT; /* CIF Line (900,1550),(900,1600) */ /* CIF NextState (800,1600) */ nextstate Red; /* CIF End State */ endstate; /* CIF End ProcessDiagram */ endprocess TrainSignal; /* CIF ProcessDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Page 2 (2600,2200) */ /* CIF Frame (0,0),(2600,2200) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\TrackControl.spr' */ /* CIF Specific SDT Page 1 Scale 100 Grid (250,150) AutoNumbered */ /* CIF Specific SDT Page 2 Scale 100 Grid (250,150) AutoNumbered */ process TrackControl; /* CIF DefaultSize (200,100) */ /* CIF CurrentPage 1 */ /* CIF Text (800,100) */ DCL NewTrainC Integer:=1; /*InSensor detects a new train*/ DCL NewTrainL Integer:=1; /*OutSensor detects a new Train*/ TIMER InTimer; TIMER OutTimer; /* CIF End Text */ /* CIF CurrentPage 1 */ /* CIF Start (50,250) */ start ; /* CIF Line (150,350),(150,400) */ /* CIF NextState (50,400) */ nextstate Ready; /* CIF State (50,400) */ state Ready; /* CIF Line (150,500),(150,525),(200,525),(200,550) */ /* CIF Input (50,550),(300,100) Right */ input InSetupRQToT; /* CIF Line (200,650),(200,700) */ /* CIF Output (50,700),(300,100) Right */ output InSetupRQ; /* CIF Line (200,800),(200,825),(150,825),(150,850) */ /* CIF NextState (50,850) */ nextstate -; /* CIF Line (150,500),(150,525),(700,525),(700,550) */ /* CIF Input (500,550),(400,100) Right */ input OutSetupRQToT; /* CIF Line (700,650),(700,700) */ /* CIF Output (550,700),(300,100) Right */ output OutSetupRQ; /* CIF Line (700,800),(700,825),(650,825),(650,850) */ /* CIF NextState (550,850) */ nextstate -; /* CIF Line (150,500),(150,525),(1250,525),(1250,550) */ /* CIF Input (1050,550),(400,100) Right */ input SignalSetupRQToT; /* CIF Line (1250,650),(1250,700) */ /* CIF Output (1050,700),(400,100) Right */ output SignalSetupRQ; /* CIF Line (1250,800),(1250,825),(1150,825),(1150,850) */ /* CIF NextState (1050,850) */ nextstate -; /* CIF End State */ endstate; /* CIF State (50,1150) */ state Ready; /* CIF Line (150,1250),(150,1300) */ /* CIF PriorityInput (50,1300) Right */ priority input InSetup; /* CIF Line (150,1400),(150,1425),(200,1425),(200,1450) */ /* CIF Output (50,1450),(300,100) Right */ output InSetupFromT; /* CIF Line (200,1550),(200,1575),(150,1575),(150,1600) */ /* CIF NextState (50,1600) */ nextstate -; /* CIF Line (150,1250),(150,1275),(650,1275),(650,1300) */ /* CIF PriorityInput (550,1300) Right */ priority input OutSetup; /* CIF Line (650,1400),(650,1425),(700,1425),(700,1450) */ /* CIF Output (550,1450),(300,100) Right */ output OutSetupFromT; /* CIF Line (700,1550),(700,1575),(650,1575),(650,1600) */ /* CIF NextState (550,1600) */ nextstate -; /* CIF End State */ endstate; /* CIF CurrentPage 2 */ /* CIF State (1050,100) */ state Ready; /* CIF Line (1150,200),(1150,225),(450,225),(450,250) */ /* CIF Input (300,250),(300,100) Right */ input ComingToT; /* CIF Line (450,350),(450,400) */ /* CIF Decision (300,400),(300,150) */ decision NewTrainC=1; /* CIF Answer InvisibleBrackets */ /* CIF Line (450,550),(450,575),(400,575),(400,700) */ /* CIF TextPosition (325,600) */ (True): /* CIF Output (300,700) Right */ output Coming; /* CIF Line (400,800),(400,825),(500,825),(500,850) */ /* CIF Set (300,850),(400,100) */ Set (Now+1,InTimer); /* CIF Line (500,950),(500,975),(450,975),(450,1000) */ /* CIF Task (300,1000),(300,100) */ task NewTrainC:=0; /* CIF Line (450,1100),(450,1125),(400,1125),(400,1150) */ /* CIF NextState (300,1150) */ nextstate -; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (600,475),(625,475),(625,675),(950,675),(950,700) */ /* CIF TextPosition (650,700) */ (False): /* CIF Reset (800,700),(300,100) */ Reset (InTimer); /* CIF Line (950,800),(950,825),(1000,825),(1000,850) */ /* CIF Set (800,850),(400,100) */ Set (Now+1,InTimer); /* CIF Line (1000,950),(1000,975),(900,975),(900,1000) */ /* CIF NextState (800,1000) */ nextstate -; /* CIF End Decision */ enddecision; /* CIF Line (1150,200),(1150,225),(900,225),(900,250) */ /* CIF Input (800,250) Right */ input InTimer; /* CIF Line (900,350),(900,400) */ /* CIF Task (750,400),(300,100) */ task NewTrainC:=1; /* CIF Line (900,500),(900,550) */ /* CIF NextState (800,550) */ nextstate -; /* CIF Line (1150,200),(1150,225),(1450,225),(1450,250) */ /* CIF Input (1300,250),(300,100) Right */ input TrainLToT; /* CIF Line (1450,350),(1450,375),(1500,375),(1500,400) */ /* CIF Decision (1300,400),(400,150) */ decision NewTrainL=1; /* CIF Answer InvisibleBrackets */ /* CIF Line (1500,550),(1500,700) */ /* CIF TextPosition (1400,575) */ (True): /* CIF Set (1300,700),(400,100) */ Set (Now+1,OutTimer); /* CIF Line (1500,800),(1500,825),(1450,825),(1450,850) */ /* CIF Task (1300,850),(300,100) */ task NewTrainL:=0; /* CIF Line (1450,950),(1450,975),(1400,975),(1400,1000) */ /* CIF NextState (1300,1000) */ nextstate -; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (1700,475),(1725,475),(1725,750),(1950,750),(1950,850) */ /* CIF TextPosition (1650,575) */ (False): /* CIF Reset (1800,850),(300,100) */ Reset (OutTimer); /* CIF Line (1950,950),(1950,975),(2000,975),(2000,1000) */ /* CIF Set (1800,1000),(400,100) */ Set (Now+1,OutTimer); /* CIF Line (2000,1100),(2000,1125),(1900,1125),(1900,1150) */ /* CIF NextState (1800,1150) */ nextstate -; /* CIF End Decision */ enddecision; /* CIF Line (1150,200),(1150,225),(2150,225),(2150,250) */ /* CIF Input (2050,250) Right */ input OutTimer; /* CIF Line (2150,350),(2150,400) */ /* CIF Output (2050,400) Right */ output Left; /* CIF Line (2150,500),(2150,525),(2200,525),(2200,550) */ /* CIF Task (2050,550),(300,100) */ task NewTrainL:=1; /* CIF Line (2200,650),(2200,675),(2150,675),(2150,700) */ /* CIF NextState (2050,700) */ nextstate -; /* CIF End State */ endstate; /* CIF State (1050,1450) */ state Ready; /* CIF Line (1150,1550),(1150,1575),(400,1575),(400,1600) */ /* CIF PriorityInput (300,1600) Right */ priority input GreenRQ; /* CIF Line (400,1700),(400,1725),(450,1725),(450,1750) */ /* CIF Output (300,1750),(300,100) Right */ output GreenRQFromT; /* CIF Line (450,1850),(450,1875),(400,1875),(400,1900) */ /* CIF NextState (300,1900) */ nextstate -; /* CIF Line (1150,1550),(1150,1575),(900,1575),(900,1600) */ /* CIF PriorityInput (800,1600) Right */ priority input RedRQ; /* CIF Line (900,1700),(900,1725),(950,1725),(950,1750) */ /* CIF Output (800,1750),(300,100) Right */ output RedRQFromT; /* CIF Line (950,1850),(950,1875),(900,1875),(900,1900) */ /* CIF NextState (800,1900) */ nextstate -; /* CIF Line (1150,1550),(1150,1575),(1400,1575),(1400,1600) */ /* CIF Input (1300,1600) Right */ input GreenToT; /* CIF Line (1400,1700),(1400,1750) */ /* CIF Output (1300,1750) Right */ output Green; /* CIF Line (1400,1850),(1400,1900) */ /* CIF NextState (1300,1900) */ nextstate -; /* CIF Line (1150,1550),(1150,1575),(1900,1575),(1900,1600) */ /* CIF Input (1800,1600) Right */ input RedToT; /* CIF Line (1900,1700),(1900,1750) */ /* CIF Output (1800,1750) Right */ output Red; /* CIF Line (1900,1850),(1900,1900) */ /* CIF NextState (1800,1900) */ nextstate -; /* CIF End State */ endstate; /* CIF End ProcessDiagram */ endprocess TrackControl; /* CIF BlockDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (50,150),(1750,2000) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\CarSensor.sbk' */ /* CIF Specific SDT Page 1 Scale 100 Grid (50,50) AutoNumbered */ block CarSensor; /* CIF CurrentPage 1 */ /* CIF SignalRoute (50,650),(650,650) */ /* CIF TextPosition (389,579) */ /* CIF TextPosition (375,675) SignalList1 */ signalroute ECSI from env to CarSensor with YesE,NoE; /* CIF SignalRoute (1050,650),(1800,650) */ /* CIF TextPosition (1308,600) */ /* CIF TextPosition (1300,675) SignalList1 */ signalroute CCO from CarSensor to env with Yes,No; /* CIF Process (650,550),(400,200) */ /* CIF TextPosition (775,625) */ process CarSensor referenced; /* CIF Connect */ /* CIF TextPosition (-25,625) */ connect ECS and ECSI; /* CIF Connect */ /* CIF TextPosition (1825,625) */ connect CC and CCO; /* CIF End BlockDiagram */ endblock CarSensor; /* CIF ProcessDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\CarSensor.spr' */ /* CIF Specific SDT Page 1 Scale 100 Grid (250,150) AutoNumbered */ process CarSensor; /* CIF DefaultSize (200,100) */ /* CIF CurrentPage 1 */ /* CIF Start (550,400) */ start ; /* CIF Line (650,500),(650,550) */ /* CIF NextState (550,550) */ nextstate Idle; /* CIF State (550,550) */ state Idle; /* CIF Line (650,650),(650,700) */ /* CIF Input (550,700) Right */ input YesE; /* CIF Line (650,800),(650,850) */ /* CIF Output (550,850) Right */ output Yes; /* CIF Line (650,950),(650,1000) */ /* CIF NextState (550,1000) */ nextstate -; /* CIF Line (650,650),(650,675),(900,675),(900,700) */ /* CIF Input (800,700) Right */ input NoE; /* CIF Line (900,800),(900,850) */ /* CIF Output (800,850) Right */ output No; /* CIF Line (900,950),(900,1000) */ /* CIF NextState (800,1000) */ nextstate -; /* CIF End State */ endstate; /* CIF End ProcessDiagram */ endprocess CarSensor; /* CIF BlockDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (150,150),(1600,2000) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\TheGate.sbk' */ /* CIF Specific SDT Page 1 Scale 100 Grid (50,50) AutoNumbered */ block TheGate; /* CIF CurrentPage 1 */ /* CIF SignalRoute (800,900),(150,900) */ /* CIF TextPosition (500,826) */ /* CIF TextPosition (175,925) SignalList1 */ /* CIF TextPosition (575,925) SignalList2 */ signalroute CGI from TheGate to env with (GateSignal); from env to TheGate with (GateControl); /* CIF Process (800,800),(300,200) */ /* CIF TextPosition (875,875) */ process TheGate referenced; /* CIF Connect */ /* CIF TextPosition (75,875) */ connect CG and CGI; /* CIF End BlockDiagram */ endblock TheGate; /* CIF ProcessDiagram */ /* CIF Page 1 (2600,2300) */ /* CIF Frame (0,0),(2600,2300) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\TheGate.spr' */ /* CIF Specific SDT Page 1 Scale 100 Grid (250,150) AutoNumbered */ process TheGate; /* CIF DefaultSize (200,100) */ /* CIF Text (800,100) */ TIMER Lowering_TimeOut; /* delay needed when lower the gate*/ TIMER Raising_TimeOut; /* CIF End Text */ /* CIF CurrentPage 1 */ /* CIF Start (50,250) */ start ; /* CIF Line (150,350),(150,400) */ /* CIF NextState (50,400) */ nextstate Up; /* CIF State (50,400) */ state Up; /* CIF Line (150,500),(150,550) */ /* CIF Input (50,550) Right */ input Open; /* CIF Line (150,650),(150,700) */ /* CIF Output (50,700) Right */ output Opened; /* CIF Line (150,800),(150,850) */ /* CIF NextState (50,850) */ nextstate -; /* CIF Line (150,500),(150,525),(400,525),(400,550) */ /* CIF Input (300,550) Right */ input Close; /* CIF Line (400,650),(400,700) */ /* CIF Output (300,700) Right */ output Lowering; /* CIF Line (400,800),(400,825),(500,825),(500,850) */ /* CIF Set (300,850),(400,100) */ SET(NOW+10, Lowering_TimeOut); /* CIF Line (500,950),(500,975),(400,975),(400,1000) */ /* CIF NextState (300,1000) */ nextstate Lowering; /* CIF Line (150,500),(150,525),(650,525),(650,550) */ /* CIF Input (550,550) Right */ input *; /* CIF Line (650,650),(650,700) */ /* CIF NextState (550,700) */ nextstate -; /* CIF End State */ endstate; /* CIF State (800,400) */ state Lowering; /* CIF Line (900,500),(900,525),(1000,525),(1000,550) */ /* CIF Input (800,550),(400,100) Right */ input Lowering_TimeOut; /* CIF Line (1000,650),(1000,675),(900,675),(900,700) */ /* CIF Output (800,700) Right */ output Closed; /* CIF Line (900,800),(900,850) */ /* CIF NextState (800,850) */ nextstate Down; /* CIF Line (900,500),(900,525),(1400,525),(1400,550) */ /* CIF Input (1300,550) Right */ input Close; /* CIF Line (1400,650),(1400,700) */ /* CIF Output (1300,700) Right */ output Lowering; /* CIF Line (1400,800),(1400,850) */ /* CIF NextState (1300,850) */ nextstate -; /* CIF Line (900,500),(900,525),(1650,525),(1650,550) */ /* CIF Input (1550,550) Right */ input Open; /* CIF Line (1650,650),(1650,675),(1800,675),(1800,700) */ /* CIF Reset (1550,700),(500,100) */ RESET(Lowering_TimeOut); /* CIF Line (1800,800),(1800,825),(1650,825),(1650,850) */ /* CIF Output (1550,850) Right */ output Raising; /* CIF Line (1650,950),(1650,975),(1750,975),(1750,1000) */ /* CIF Set (1550,1000),(400,100) */ SET(NOW+10, Raising_TimeOut); /* CIF Line (1750,1100),(1750,1125),(1650,1125),(1650,1150) */ /* CIF NextState (1550,1150) */ nextstate Raising; /* CIF Line (900,500),(900,525),(2400,525),(2400,550) */ /* CIF Input (2300,550) Right */ input *; /* CIF Line (2400,650),(2400,700) */ /* CIF NextState (2300,700) */ nextstate -; /* CIF End State */ endstate; /* CIF State (50,1300) */ state Down; /* CIF Line (150,1400),(150,1450) */ /* CIF Input (50,1450) Right */ input Close; /* CIF Line (150,1550),(150,1600) */ /* CIF Output (50,1600) Right */ output Closed; /* CIF Line (150,1700),(150,1750) */ /* CIF NextState (50,1750) */ nextstate -; /* CIF Line (150,1400),(150,1425),(400,1425),(400,1450) */ /* CIF Input (300,1450) Right */ input Open; /* CIF Line (400,1550),(400,1600) */ /* CIF Output (300,1600) Right */ output Raising; /* CIF Line (400,1700),(400,1725),(500,1725),(500,1750) */ /* CIF Set (300,1750),(400,100) */ SET(NOW+10, Raising_TimeOut); /* CIF Line (500,1850),(500,1875),(400,1875),(400,1900) */ /* CIF NextState (300,1900) */ nextstate Raising; /* CIF Line (150,1400),(150,1425),(650,1425),(650,1450) */ /* CIF Input (550,1450) Right */ input *; /* CIF Line (650,1550),(650,1600) */ /* CIF NextState (550,1600) */ nextstate -; /* CIF End State */ endstate; /* CIF State (1050,1300) */ state Raising; /* CIF Line (1150,1400),(1150,1425),(1200,1425),(1200,1450) */ /* CIF Input (1000,1450),(400,100) Right */ input Raising_TimeOut; /* CIF Line (1200,1550),(1200,1575),(1150,1575),(1150,1600) */ /* CIF Output (1050,1600) Right */ output Opened; /* CIF Line (1150,1700),(1150,1750) */ /* CIF NextState (1050,1750) */ nextstate Up; /* CIF Line (1150,1400),(1150,1425),(1650,1425),(1650,1450) */ /* CIF Input (1550,1450) Right */ input Open; /* CIF Line (1650,1550),(1650,1600) */ /* CIF Output (1550,1600) Right */ output Raising; /* CIF Line (1650,1700),(1650,1750) */ /* CIF NextState (1550,1750) */ nextstate -; /* CIF Line (1150,1400),(1150,1425),(1900,1425),(1900,1450) */ /* CIF Input (1800,1450) Right */ input Close; /* CIF Line (1900,1550),(1900,1575),(2000,1575),(2000,1600) */ /* CIF Reset (1800,1600),(400,100) */ RESET(Raising_TimeOut); /* CIF Line (2000,1700),(2000,1725),(1900,1725),(1900,1750) */ /* CIF Output (1800,1750) Right */ output Lowering; /* CIF Line (1900,1850),(1900,1875),(2000,1875),(2000,1900) */ /* CIF Set (1800,1900),(400,100) */ SET(NOW+10, Lowering_TimeOut); /* CIF Line (2000,2000),(2000,2025),(1900,2025),(1900,2050) */ /* CIF NextState (1800,2050) */ nextstate Lowering; /* CIF Line (1150,1400),(1150,1425),(2400,1425),(2400,1450) */ /* CIF Input (2300,1450) Right */ input *; /* CIF Line (2400,1550),(2400,1600) */ /* CIF NextState (2300,1600) */ nextstate -; /* CIF End State */ endstate; /* CIF End ProcessDiagram */ endprocess TheGate; /* CIF BlockDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (300,150),(1450,1150) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\Controller.sbk' */ /* CIF Specific SDT Page 1 Scale 100 Grid (50,50) AutoNumbered */ block Controller; /* CIF CurrentPage 1 */ /* CIF SignalRoute (850,550),(850,150) */ /* CIF TextPosition (873,275) */ /* CIF TextPosition (875,175) SignalList1 */ /* CIF TextPosition (875,500) SignalList2 */ signalroute CGO from Controller to env with (GateControl); from env to Controller with (GateSignal); /* CIF SignalRoute (900,625),(1750,625) */ /* CIF TextPosition (1300,550) */ /* CIF TextPosition (1550,575) SignalList1 */ signalroute ESO from Controller to env with (Emergency); /* CIF SignalRoute (300,650),(600,650) */ /* CIF TextPosition (350,652) */ /* CIF TextPosition (450,675) SignalList1 */ signalroute CCI from env to Controller with Yes, No; /* CIF SignalRoute (700,1300),(700,750) */ /* CIF TextPosition (600,1050) */ /* CIF TextPosition (425,825) SignalList1 */ /* CIF TextPosition (400,1125) SignalList2 */ signalroute CTCI from env to Controller with InSetupRQ, OutSetupRQ, SignalSetupRQ, Coming, Left, (TrainSignal); from Controller to env with InSetup,OutSetup, (TrainSignalRQ); /* CIF SignalRoute (825,1300),(825,750) */ /* CIF TextPosition (850,1125) */ /* CIF TextPosition (850,875) SignalList1 */ signalroute ECC from env to Controller with Strategy,EStopS, EOpen,EClose, EGreenRQ,ERedRQ ; /* CIF Process (600,550),(300,200) */ /* CIF TextPosition (675,625) */ process Controller referenced; /* CIF Connect */ /* CIF TextPosition (825,75) */ connect CG and CGO; /* CIF Connect */ /* CIF TextPosition (1775,600) */ connect ES and ESO; /* CIF Connect */ /* CIF TextPosition (225,625) */ connect CC and CCI; /* CIF Connect */ /* CIF TextPosition (675,1325) */ connect CT and CTCI; /* CIF Connect */ /* CIF TextPosition (800,1325) */ connect EC and ECC; /* CIF End BlockDiagram */ endblock Controller; /* CIF ProcessDiagram */ /* CIF Page 1 (1900,1900) */ /* CIF Frame (0,0),(1900,1900) */ /* CIF Page 2 (1900,1500) */ /* CIF Frame (0,0),(1900,1500) */ /* CIF Page 3 (2100,2600) */ /* CIF Frame (0,0),(2100,2600) */ /* CIF Page 4 (2200,1950) */ /* CIF Frame (0,0),(2200,1950) */ /* CIF Page 5 (3300,2400) */ /* CIF Frame (0,0),(3300,2400) */ /* CIF Page 6 (2100,2300) */ /* CIF Frame (0,0),(2100,2300) */ /* CIF Page 7 (2700,2500) */ /* CIF Frame (0,0),(2700,2500) */ /* CIF Page 8 (1900,2350) */ /* CIF Frame (0,0),(1900,2350) */ /* CIF Page 9 (2000,2300) */ /* CIF Frame (0,0),(2000,2300) */ /* CIF Page 10 (2100,1900) */ /* CIF Frame (0,0),(2100,1900) */ /* CIF Page 11 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Page 12 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Page 13 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Page 14 (1900,2500) */ /* CIF Frame (0,0),(1900,2500) */ /* CIF Page 15 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\Controller.spr' */ /* CIF Specific SDT Page 1 Scale 100 Grid (250,150) AutoNumbered */ /* CIF Specific SDT Page 2 Scale 100 Grid (50,50) AutoNumbered */ /* CIF Specific SDT Page 3 Scale 100 Grid (50,50) AutoNumbered */ /* CIF Specific SDT Page 4 Scale 100 Grid (50,50) AutoNumbered */ /* CIF Specific SDT Page 5 Scale 100 Grid (50,50) AutoNumbered */ /* CIF Specific SDT Page 6 Scale 100 Grid (50,50) AutoNumbered */ /* CIF Specific SDT Page 7 Scale 100 Grid (250,150) AutoNumbered */ /* CIF Specific SDT Page 8 Scale 100 Grid (50,50) AutoNumbered */ /* CIF Specific SDT Page 9 Scale 100 Grid (50,50) AutoNumbered */ /* CIF Specific SDT Page 10 Scale 100 Grid (50,50) AutoNumbered */ /* CIF Specific SDT Page 11 Scale 100 Grid (50,50) AutoNumbered */ /* CIF Specific SDT Page 12 Scale 100 Grid (50,50) AutoNumbered */ /* CIF Specific SDT Page 13 Scale 100 Grid (50,50) AutoNumbered */ /* CIF Specific SDT Page 14 Scale 100 Grid (50,50) AutoNumbered */ /* CIF Specific SDT Page 15 Scale 100 Grid (50,50) AutoNumbered */ process <> Controller; /* CIF DefaultSize (200,100) */ /* CIF CurrentPage 1 */ /* CIF Text (300,100) */ /* Strategies: 1 Manual Override -- any signal can be sent as long as it is safe 2Trains take precedence -- gate is normally closed 3 Fast train - many cars - slow train -- gate is normally open -- Fast train -- close the gate -- SlowTrain + NoCarWaiting -- close the gate -- SlowTrain + CarWaiting -- Leave the gate open 4 Many cars - train -- gate is normally open -- Any train comes, check if car Waiting. -- NoCarWaiting -- close the gate -- CarWaiting -- Leave the gate open When gate is open, it is for cars, which means no train is moving in the Crossing area, although some trains may be stopped and waiting. Therefore, checking if "NoOfTrains=0" is not necessary */ /* CIF End Text */ /* CIF Text (50,850) */ Newtype TrackPId Array(Integer, PId) endnewtype; DCL TrackNo TrackPId; /* PId of track control process */ /* CIF End Text */ /* CIF Text (1300,850) */ TIMER GateClose_TimeOut1; TIMER GateClose_TimeOut2; TIMER GateOpen_TimeOut1; TIMER GateOpen_TimeOut2; TIMER StopWaiting_TimeOut; TIMER RedWaiting_TimeOut; /* CIF End Text */ /* CIF Text (50,1000) */ Newtype TrackCount Array(Integer, Integer) endnewtype; DCL TrackCounter TrackCount; /* No of trains in a track*/ /* CIF End Text */ /* CIF Text (50,1150) */ Newtype TrackLightType Array(Integer, Character) endnewtype; DCL TrackLight TrackLightType; /* Record each track's current light*/ /* CIF End Text */ /* CIF Text (1300,1150) */ SYNTYPE sValue =Natural DEFAULT 3 CONSTANTS 1:4 ENDSYNTYPE sValue; /* CIF End Text */ /* CIF Text (50,1300) */ DCL CarWaiting Integer:=0; /*CarWaiting(1), NoCarWaiting(0)*/ DCL NoOfTrains Integer:=0; /*In the crossing area*/ DCL NoOfSTrains Integer:=0; /* No. of trains stopped */ DCL n Integer :=0; /*counter*/ DCL m Integer :=0; /*counter*/ DCL ni Integer :=0; /*counter --No. of InSensors already setup*/ DCL nO Integer :=0; /*counter --No. of OutSensors already setup*/ DCL ns Integer :=0; /*counter --No. of train signals already setup*/ DCL rs Integer :=0; /*counter --Times of RedRQ sent, but no response*/ DCL SenderNo Integer := 0; /* Sender's track no */ /* CIF End Text */ /* CIF Text (1300,1450) */ DCL Strategies sValue; DCL S Natural; /* CIF End Text */ /* CIF CurrentPage 6 */ /* CIF Text (550,150) */ /* Don't check for Strategy 4, because "close" signal was just sent, which means not too many cars waiting */ /* CIF End Text */ /* CIF CurrentPage 7 */ /* CIF Text (550,100) */ /* Strategy 4: if carWaiting, and no train running on the same track, stop the train, and try to open the gate Other than this, Always let train go, until no train in gate, then open the gate */ /* RedSetting--Send "red" signal one by one, before send"Open" signal */ /* CIF End Text */ /* CIF CurrentPage 2 */ /* CIF Procedure (150,350),(300,100) */ /* CIF TextPosition (212,375) */ procedure ResetData referenced; /* CIF Procedure (600,350),(400,100) */ /* CIF TextPosition (700,375) */ procedure FindSender referenced; /* CIF Procedure (1150,350),(500,100) */ /* CIF TextPosition (1211,375) */ procedure EmergencyOpenF referenced; /* CIF Procedure (150,500),(300,100) */ /* CIF TextPosition (212,525) */ procedure ResetTimer referenced; /* CIF Procedure (600,500),(250,100) */ /* CIF TextPosition (650,525) */ procedure CloseReq referenced; /* CIF Procedure (1150,500),(500,100) */ /* CIF TextPosition (1225,525) */ procedure EmergencyCloseF referenced; /* CIF Procedure (600,650),(250,100) */ /* CIF TextPosition (643,675) */ procedure SetGreen referenced; /* CIF Procedure (1150,650),(500,100) */ /* CIF TextPosition (1225,675) */ procedure EmergencySetRedF referenced; /* CIF CurrentPage 3 */ /* CIF Start (900,150) */ start ; /* CIF Line (1000,250),(1000,300) */ /* CIF NextState (900,300) */ nextstate Idle; /* CIF State (900,300) */ state Idle; /* CIF Line (1000,400),(1000,425),(250,425),(250,450) */ /* CIF Input (50,450),(400,100) Right */ input InSetupRQ; /* CIF Line (250,550),(250,575),(200,575),(200,600) */ /* CIF Output (50,600),(300,100) Right */ output InSetup TO SENDER; /* CIF Line (200,700),(200,725),(150,725),(150,750) */ /* CIF Extendedtask (50,750) */ task {ni:=ni+1;}; /* CIF Line (150,850),(150,875),(250,875),(250,900) */ /* CIF Extendedtask (50,900),(400,100) */ task {TrackNo(ni):=SENDER;}; /* CIF Line (250,1000),(250,1050) */ /* CIF Extendedtask (50,1050),(400,100) */ task {TrackCounter(ni):=0;}; /* CIF Line (250,1150),(250,1175),(300,1175),(300,1200) */ /* CIF Decision (50,1200),(500,350) */ decision ni=NoOfTracks AND nO=NoOfTracks AND ns=NoOfTracks ; /* CIF Answer InvisibleBrackets */ /* CIF Line (300,1550),(300,1575),(150,1575),(150,1600) */ /* CIF TextPosition (100,1525) */ (False): /* CIF NextState (50,1600) */ nextstate -; /* CIF Answer InvisibleBrackets */ /* CIF Line (300,1550),(300,1575),(450,1575),(450,1600) */ /* CIF TextPosition (425,1525) */ (True): /* CIF Decision (300,1600),(300,100) */ decision Strategies=2; /* CIF Answer InvisibleBrackets */ /* CIF Line (450,1700),(450,1725),(150,1725),(150,1850) */ /* CIF TextPosition (75,1750) */ (True): /* CIF ProcedureCall (50,1850) */ call ResetData; /* CIF Line (150,1950),(150,2000) */ /* CIF NextState (50,2000) */ nextstate GateClosed; /* CIF Answer InvisibleBrackets */ /* CIF Line (450,1700),(450,1850) */ /* CIF TextPosition (475,1725) */ (False): /* CIF ProcedureCall (350,1850) */ call ResetData; /* CIF Line (450,1950),(450,2000) */ /* CIF NextState (350,2000) */ nextstate GateOpened; /* CIF End Decision */ enddecision; /* CIF End Decision */ enddecision; /* CIF Line (1000,400),(1000,425),(850,425),(850,450) */ /* CIF Input (650,450),(400,100) Right */ input OutSetupRQ; /* CIF Line (850,550),(850,575),(800,575),(800,600) */ /* CIF Output (650,600),(300,100) Right */ output OutSetup TO SENDER; /* CIF Line (800,700),(800,725),(750,725),(750,750) */ /* CIF Extendedtask (650,750) */ task {nO:=nO+1;}; /* CIF Line (750,850),(750,875),(850,875),(850,1050) */ /* CIF Extendedtask (650,1050),(400,100) */ task {TrackCounter(nO):=0;}; /* CIF Line (850,1150),(850,1175),(900,1175),(900,1200) */ /* CIF Decision (650,1200),(500,350) */ decision ni=NoOfTracks AND nO=NoOfTracks AND ns=NoOfTracks ; /* CIF Answer InvisibleBrackets */ /* CIF Line (900,1550),(900,1575),(750,1575),(750,1600) */ /* CIF TextPosition (650,1550) */ (False): /* CIF NextState (650,1600) */ nextstate -; /* CIF Answer InvisibleBrackets */ /* CIF Line (900,1550),(900,1575),(1050,1575),(1050,1600) */ /* CIF TextPosition (1075,1575) */ (True): /* CIF Decision (900,1600),(300,100) */ decision Strategies=2; /* CIF Answer InvisibleBrackets */ /* CIF Line (1050,1700),(1050,1725),(750,1725),(750,1850) */ /* CIF TextPosition (675,1750) */ (True): /* CIF ProcedureCall (650,1850) */ call ResetData; /* CIF Line (750,1950),(750,2000) */ /* CIF NextState (650,2000) */ nextstate GateClosed; /* CIF Answer InvisibleBrackets */ /* CIF Line (1050,1700),(1050,1850) */ /* CIF TextPosition (1075,1725) */ (False): /* CIF ProcedureCall (950,1850) */ call ResetData; /* CIF Line (1050,1950),(1050,2000) */ /* CIF NextState (950,2000) */ nextstate GateOpened; /* CIF End Decision */ enddecision; /* CIF End Decision */ enddecision; /* CIF Line (1000,400),(1000,425),(1450,425),(1450,450) */ /* CIF Input (1250,450),(400,100) Right */ input SignalSetupRQ; /* CIF Line (1450,550),(1450,575),(1350,575),(1350,600) */ /* CIF Extendedtask (1250,600) */ task {ns:=ns+1;}; /* CIF Line (1350,700),(1350,725),(1400,725),(1400,750) */ /* CIF Decision (1250,750),(300,100) */ decision Strategies=2; /* CIF Answer InvisibleBrackets */ /* CIF Line (1400,850),(1400,900) */ /* CIF TextPosition (1275,850) */ (True): /* CIF Output (1250,900),(300,100) Right */ output GreenRQ TO SENDER; /* CIF Line (1400,1000),(1400,1025),(1350,1025),(1350,1050) */ /* CIF Extendedtask (1150,1050),(400,100) */ task {TrackLight(ns):='G';}; /* CIF Line (1350,1150),(1350,1175),(1450,1175),(1450,1200) */ /* CIF Answer Right InvisibleBrackets */ /* CIF Line (1550,800),(1575,800),(1575,875),(1750,875),(1750,900) */ /* CIF TextPosition (1475,825) */ (False): /* CIF Output (1600,900),(300,100) Right */ output RedRQ TO SENDER; /* CIF Line (1750,1000),(1750,1025),(1800,1025),(1800,1050) */ /* CIF Extendedtask (1600,1050),(400,100) */ task {TrackLight(ns):='R';}; /* CIF Line (1800,1150),(1800,1175),(1450,1175),(1450,1200) */ /* CIF End Decision */ enddecision; /* CIF Extendedtask (1250,1200),(400,100) */ task {TrackCounter(ns):=0;}; /* CIF Line (1450,1300),(1450,1325),(1500,1325),(1500,1350) */ /* CIF Decision (1250,1350),(500,300) */ decision ni=NoOfTracks AND nO=NoOfTracks AND ns=NoOfTracks; /* CIF Answer InvisibleBrackets */ /* CIF Line (1500,1650),(1500,1675),(1350,1675),(1350,1700) */ /* CIF TextPosition (1325,1650) */ (False): /* CIF NextState (1250,1700) */ nextstate -; /* CIF Answer InvisibleBrackets */ /* CIF Line (1500,1650),(1500,1675),(1650,1675),(1650,1700) */ /* CIF TextPosition (1675,1650) */ (True): /* CIF Decision (1500,1700),(300,100) */ decision Strategies=2; /* CIF Answer InvisibleBrackets */ /* CIF Line (1650,1800),(1650,1825),(1350,1825),(1350,1850) */ /* CIF TextPosition (1325,1800) */ (True): /* CIF ProcedureCall (1250,1850) */ call ResetData; /* CIF Line (1350,1950),(1350,2000) */ /* CIF NextState (1250,2000) */ nextstate GateClosed; /* CIF Answer InvisibleBrackets */ /* CIF Line (1650,1800),(1650,1850) */ /* CIF TextPosition (1700,1800) */ (False): /* CIF ProcedureCall (1550,1850) */ call ResetData; /* CIF Line (1650,1950),(1650,2000) */ /* CIF NextState (1550,2000) */ nextstate GateOpened; /* CIF End Decision */ enddecision; /* CIF End Decision */ enddecision; /* CIF Line (1000,400),(1000,425),(1800,425),(1800,450) */ /* CIF Input (1700,450) Right */ input *; /* CIF Line (1800,550),(1800,600) */ /* CIF NextState (1700,600) */ nextstate -; /* CIF End State */ endstate; /* CIF CurrentPage 1 */ /* CIF CurrentPage 2 */ /* CIF CurrentPage 4 */ /* CIF State (300,100),(500,100) */ state GateOpened,GateOpening; /* CIF Line (550,200),(550,225),(400,225),(400,250) */ /* CIF PriorityInput (300,250) Right */ priority input Coming; /* CIF Line (400,350),(400,375),(500,375),(500,400) */ /* CIF Task (300,400),(400,100) */ task NoOfTrains:=NoOfTrains+1; /* CIF Line (500,500),(500,550) */ /* CIF ProcedureCall (300,550),(400,100) */ call FindSender(SenderNo); /* CIF Line (500,650),(500,675),(450,675),(450,700) */ /* CIF Extendedtask (300,700),(300,100) */ task {n:=SenderNo;}; /* CIF Line (450,800),(450,825),(600,825),(600,850) */ /* CIF Extendedtask (300,850),(600,100) */ task {TrackCounter(n):=TrackCounter(n)+1;}; /* CIF Line (600,950),(600,975),(350,975),(350,1200) */ /* CIF Decision (250,1200) */ decision Strategies; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (450,1250),(850,1250),(850,1300) */ /* CIF TextPosition (875,1250) */ (=3): /* CIF Decision (550,1300),(600,150) */ decision n>NoOfFastTracks AND CarWaiting/=0; /* CIF Answer Left InvisibleBrackets */ /* CIF Line (550,1375),(450,1375),(450,1500) */ /* CIF TextPosition (550,1325) */ (False): /* CIF ProcedureCall (350,1500) */ call CloseReq; /* CIF Line (450,1600),(450,1650) */ /* CIF NextState (350,1650) */ nextstate GateClosing; /* CIF Answer InvisibleBrackets */ /* CIF Line (850,1450),(850,1475),(900,1475),(900,1500) */ /* CIF TextPosition (925,1450) */ (True): /* CIF Extendedtask (650,1500),(500,100) */ task {NoOfSTrains:=NoOfSTrains+1;}; /* CIF Line (900,1600),(900,1625),(850,1625),(850,1650) */ /* CIF Extendedtask (650,1650),(400,100) */ task {TrackLight(n):='R';}; /* CIF Line (850,1750),(850,1775),(800,1775),(800,1800) */ /* CIF NextState (650,1800),(300,100) */ nextstate TrainWaiting; /* CIF End Decision */ enddecision; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (450,1250),(1550,1250),(1550,1300) */ /* CIF TextPosition (1575,1250) */ (=4): /* CIF Decision (1300,1300),(500,100) */ decision CarWaiting/=0; /* CIF Answer Left InvisibleBrackets */ /* CIF Line (1300,1350),(1275,1350),(1275,1475),(1500,1475),(1500,1500) */ /* CIF TextPosition (1300,1400) */ (True): /* CIF Extendedtask (1250,1500),(500,100) */ task {NoOfSTrains:=NoOfSTrains+1;}; /* CIF Line (1500,1600),(1500,1625),(1450,1625),(1450,1650) */ /* CIF Extendedtask (1250,1650),(400,100) */ task {TrackLight(n):='R';}; /* CIF Line (1450,1750),(1450,1775),(1400,1775),(1400,1800) */ /* CIF NextState (1250,1800),(300,100) */ nextstate TrainWaiting; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (1800,1350),(1825,1350),(1825,1475),(1900,1475),(1900,1500) */ /* CIF TextPosition (1725,1400) */ (False): /* CIF ProcedureCall (1800,1500) */ call CloseReq; /* CIF Line (1900,1600),(1900,1650) */ /* CIF NextState (1800,1650) */ nextstate GateClosing; /* CIF End Decision */ enddecision; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (450,1250),(1950,1250),(1950,1300) */ /* CIF TextPosition (1975,1250) */ (=1): /* CIF NextState (1850,1300) */ nextstate Wait2; /* CIF Answer Left InvisibleBrackets */ /* CIF Line (250,1250),(150,1250),(150,1350) */ /* CIF TextPosition (100,1250) */ (=2): /* CIF ProcedureCall (50,1350) */ call CloseReq; /* CIF Line (150,1450),(150,1500) */ /* CIF NextState (50,1500) */ nextstate GateClosing; /* CIF End Decision */ enddecision; /* CIF End State */ endstate; /* CIF State (1050,100),(300,100) */ state GateOpened; /* CIF Line (1200,200),(1200,225),(1150,225),(1150,250) */ /* CIF Input (1050,250) Right */ input No; /* CIF Line (1150,350),(1150,375),(1200,375),(1200,400) */ /* CIF Task (1050,400),(300,100) */ task CarWaiting:=0; /* CIF Line (1200,500),(1200,550) */ /* CIF Decision (1000,550),(400,100) */ decision NoOfTrains/=0; /* CIF Answer InvisibleBrackets */ /* CIF Line (1200,650),(1200,700) */ /* CIF TextPosition (1225,675) */ (True): /* CIF Decision (1000,700),(400,150) */ decision Strategies=3 OR Strategies=4; /* CIF Answer InvisibleBrackets */ /* CIF Line (1200,850),(1200,900) */ /* CIF TextPosition (1225,850) */ (True): /* CIF ProcedureCall (1100,900) */ call CloseReq; /* CIF Line (1200,1000),(1200,1050) */ /* CIF NextState (1100,1050) */ nextstate GateClosing; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (1400,775),(1450,775),(1450,900) */ /* CIF TextPosition (1375,800) */ (False): /* CIF End Decision */ enddecision; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (1400,600),(1450,600),(1450,900) */ /* CIF TextPosition (1375,625) */ (False): /* CIF End Decision */ enddecision; /* CIF NextState (1350,900) */ nextstate -; /* CIF Line (1200,200),(1200,225),(1600,225),(1600,250) */ /* CIF Input (1500,250) Right */ input Yes; /* CIF Line (1600,350),(1600,375),(1650,375),(1650,400) */ /* CIF Task (1500,400),(300,100) */ task CarWaiting:=1; /* CIF Line (1650,500),(1650,525),(1600,525),(1600,550) */ /* CIF NextState (1500,550) */ nextstate -; /* CIF Line (1200,200),(1200,225),(1950,225),(1950,250) */ /* CIF Input (1850,250) Right */ input *; /* CIF Line (1950,350),(1950,400) */ /* CIF NextState (1850,400) */ nextstate -; /* CIF End State */ endstate; /* CIF CurrentPage 5 */ /* CIF State (250,200) */ state TrainWaiting; /* CIF Line (350,300),(350,350) */ /* CIF PriorityInput (250,350) Right */ priority input Coming; /* CIF Line (350,450),(350,475),(450,475),(450,500) */ /* CIF Task (250,500),(400,100) */ task NoOfTrains:=NoOfTrains+1; /* CIF Line (450,600),(450,650) */ /* CIF ProcedureCall (250,650),(400,100) */ call FindSender(SenderNo); /* CIF Line (450,750),(450,775),(400,775),(400,800) */ /* CIF Extendedtask (250,800),(300,100) */ task {n:=SenderNo;}; /* CIF Line (400,900),(400,925),(550,925),(550,950) */ /* CIF Extendedtask (250,950),(600,100) */ task {TrackCounter(n):=TrackCounter(n)+1;}; /* CIF Line (550,1050),(550,1075),(850,1075),(850,1100) */ /* CIF Decision (750,1100) */ decision Strategies; /* CIF Answer Left InvisibleBrackets */ /* CIF Line (750,1150),(200,1150),(200,1200) */ /* CIF TextPosition (150,1150) */ (=2): /* CIF ProcedureCall (100,1200) */ call CloseReq; /* CIF Line (200,1300),(200,1350) */ /* CIF NextState (100,1350) */ nextstate GateClosing; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (950,1150),(1400,1150),(1400,1200) */ /* CIF TextPosition (1425,1175) */ (=4): /* CIF Decision (1200,1200),(400,100) */ decision TrackLight(n)='G'; /* CIF Answer InvisibleBrackets */ /* CIF Line (1400,1300),(1400,1350) */ /* CIF TextPosition (1425,1325) */ (True): /* CIF Decision (1200,1350),(400,100) */ decision TrackCounter(n)=1; /* CIF Answer InvisibleBrackets */ /* CIF Line (1400,1450),(1400,1500) */ /* CIF TextPosition (1425,1450) */ (True): /* CIF Output (1250,1500),(300,100) Right */ output RedRQ TO TrackNo(n); /* CIF Line (1400,1600),(1400,1625),(1450,1625),(1450,1650) */ /* CIF Set (1250,1650),(400,100) */ Set(Now+2, StopWaiting_TimeOut); /* CIF Line (1450,1750),(1450,1775),(1500,1775),(1500,1800) */ /* CIF Extendedtask (1250,1800),(500,100) */ task {NoOfSTrains:=NoOfSTrains+1;}; /* CIF Line (1500,1900),(1500,1925),(1450,1925),(1450,1950) */ /* CIF Extendedtask (1250,1950),(400,100) */ task {TrackLight(n):='R';}; /* CIF Line (1450,2050),(1450,2100) */ /* CIF NextState (1350,2100) */ nextstate -; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (1600,1400),(1750,1400),(1750,1500) */ /* CIF TextPosition (1725,1350) */ (False): /* CIF NextState (1650,1500) */ nextstate -; /* CIF End Decision */ enddecision; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (1600,1250),(2000,1250),(2000,1650) */ /* CIF TextPosition (1625,1200) */ (False): /* CIF Extendedtask (1750,1650),(500,100) */ task {NoOfSTrains:=NoOfSTrains+1;}; /* CIF Line (2000,1750),(2000,1800) */ /* CIF NextState (1900,1800) */ nextstate -; /* CIF End Decision */ enddecision; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (950,1150),(2200,1150),(2200,1200) */ /* CIF TextPosition (2225,1150) */ (=1): /* CIF NextState (2100,1200) */ nextstate Wait2; /* CIF Answer InvisibleBrackets */ /* CIF Line (850,1200),(850,1250) */ /* CIF TextPosition (875,1225) */ (=3): /* CIF Decision (550,1250),(600,150) */ decision n>NoOfFastTracks AND CarWaiting/=0; /* CIF Answer Left InvisibleBrackets */ /* CIF Line (550,1325),(450,1325),(450,1450) */ /* CIF TextPosition (550,1275) */ (False): /* CIF ProcedureCall (350,1450) */ call CloseReq; /* CIF Line (450,1550),(450,1600) */ /* CIF NextState (350,1600) */ nextstate GateClosing; /* CIF Answer InvisibleBrackets */ /* CIF Line (850,1400),(850,1425),(800,1425),(800,1450) */ /* CIF TextPosition (725,1400) */ (True): /* CIF Output (650,1450),(300,100) Right */ output RedRQ TO TrackNo(n); /* CIF Line (800,1550),(800,1575),(850,1575),(850,1600) */ /* CIF Set (650,1600),(400,100) */ Set(Now+2, StopWaiting_TimeOut); /* CIF Line (850,1700),(850,1725),(900,1725),(900,1750) */ /* CIF Extendedtask (650,1750),(500,100) */ task {NoOfSTrains:=NoOfSTrains+1;}; /* CIF Line (900,1850),(900,1875),(850,1875),(850,1900) */ /* CIF Extendedtask (650,1900),(400,100) */ task {TrackLight(n):='R';}; /* CIF Line (850,2000),(850,2025),(800,2025),(800,2050) */ /* CIF NextState (650,2050),(300,100) */ nextstate TrainWaiting; /* CIF End Decision */ enddecision; /* CIF End Decision */ enddecision; /* CIF Line (350,300),(350,325),(850,325),(850,350) */ /* CIF Input (750,350) Right */ input Yes; /* CIF Line (850,450),(850,475),(900,475),(900,500) */ /* CIF Task (750,500),(300,100) */ task CarWaiting:=1; /* CIF Line (900,600),(900,625),(850,625),(850,650) */ /* CIF NextState (750,650) */ nextstate -; /* CIF Line (350,300),(350,325),(1250,325),(1250,350) */ /* CIF Input (1150,350) Right */ input No; /* CIF Line (1250,450),(1250,500) */ /* CIF ProcedureCall (1150,500) */ call CloseReq; /* CIF Line (1250,600),(1250,650) */ /* CIF NextState (1150,650) */ nextstate GateClosing; /* CIF Line (350,300),(350,325),(1550,325),(1550,350) */ /* CIF Input (1450,350) Right */ input Red; /* CIF Line (1550,450),(1550,475),(1650,475),(1650,500) */ /* CIF Reset (1450,500),(400,100) */ RESET (StopWaiting_timeout); /* CIF Line (1650,600),(1650,625),(1550,625),(1550,650) */ /* CIF NextState (1450,650) */ nextstate -; /* CIF Line (350,300),(350,325),(2150,325),(2150,350) */ /* CIF Input (1900,350),(500,100) Right */ input StopWaiting_TimeOut; /* CIF Line (2150,450),(2150,475),(2000,475),(2000,500) */ /* CIF ProcedureCall (1900,500) */ call CloseReq; /* CIF Line (2000,600),(2000,650) */ /* CIF NextState (1900,650) */ nextstate GateClosing; /* CIF Line (350,300),(350,325),(2600,325),(2600,350) */ /* CIF Input (2500,350) Right */ input Left; /* CIF Line (2600,450),(2600,475),(2700,475),(2700,500) */ /* CIF Task (2500,500),(400,100) */ task NoOfTrains:=NoOfTrains-1; /* CIF Line (2700,600),(2700,625),(2750,625),(2750,650) */ /* CIF Decision (2500,650),(500,100) */ decision NoOfTrains=NoOfSTrains; /* CIF Answer Left InvisibleBrackets */ /* CIF Line (2500,700),(2350,700),(2350,850) */ /* CIF TextPosition (2375,725) */ (False): /* CIF NextState (2250,850) */ nextstate -; /* CIF Answer InvisibleBrackets */ /* CIF Line (2750,750),(2750,775),(2650,775),(2650,850) */ /* CIF TextPosition (2675,800) */ (True): /* CIF Task (2500,850),(300,100) */ task n:=NoOfTracks; /* CIF Line (2650,950),(2650,1000) */ /* CIF Output (2500,1000),(300,100) Right */ output RedRQ TO TrackNo(n); /* CIF Line (2650,1100),(2650,1125),(2700,1125),(2700,1150) */ /* CIF Set (2500,1150),(400,100) */ Set(Now+2, RedWaiting_TimeOut); /* CIF Line (2700,1250),(2700,1300) */ /* CIF Extendedtask (2500,1300),(400,100) */ task {TrackLight(n):='R';}; /* CIF Line (2700,1400),(2700,1425),(2600,1425),(2600,1450) */ /* CIF NextState (2500,1450) */ nextstate RedSetting; /* CIF End Decision */ enddecision; /* CIF Line (350,300),(350,325),(3050,325),(3050,350) */ /* CIF Input (2950,350) Right */ input *; /* CIF Line (3050,450),(3050,500) */ /* CIF NextState (2950,500) */ nextstate -; /* CIF End State */ endstate; /* CIF CurrentPage 6 */ /* CIF State (50,250),(300,100) */ state GateClosing, Wait1; /* CIF Line (200,350),(200,375),(150,375),(150,400) */ /* CIF PriorityInput (50,400) Right */ priority input Lowering; /* CIF Line (150,500),(150,525),(250,525),(250,550) */ /* CIF Reset (50,550),(400,100) */ RESET (GateClose_TimeOut2); /* CIF Line (250,650),(250,675),(150,675),(150,700) */ /* CIF NextState (50,700) */ nextstate -; /* CIF Line (200,350),(200,375),(600,375),(600,400) */ /* CIF Input (500,400) Right */ input Closed; /* CIF Line (600,500),(600,525),(700,525),(700,550) */ /* CIF Reset (500,550),(400,100) */ RESET (GateClose_timeout1); /* CIF Line (700,650),(700,700) */ /* CIF Reset (500,700),(400,100) */ RESET (GateClose_timeout2); /* CIF Line (700,800),(700,825),(600,825),(600,850) */ /* CIF ProcedureCall (500,850) */ call SetGreen; /* CIF Line (600,950),(600,975),(650,975),(650,1000) */ /* CIF Task (500,1000),(300,100) */ task NoOfSTrains:=0; /* CIF Line (650,1100),(650,1125),(600,1125),(600,1150) */ /* CIF NextState (500,1150) */ nextstate GateClosed; /* CIF Line (200,350),(200,375),(1200,375),(1200,400) */ /* CIF Input (950,400),(500,100) Right */ input GateClose_TimeOut2; /* CIF Line (1200,500),(1200,525),(1050,525),(1050,550) */ /* CIF Output (950,550) Right */ output Close; /* CIF Line (1050,650),(1050,675),(1150,675),(1150,700) */ /* CIF Set (950,700),(400,100) */ Set(Now+2, GateClose_TimeOut2); /* CIF Line (1150,800),(1150,825),(1050,825),(1050,850) */ /* CIF NextState (950,850) */ nextstate -; /* CIF Line (200,350),(200,375),(1750,375),(1750,400) */ /* CIF Input (1500,400),(500,100) Right */ input GateClose_timeout1; /* CIF Line (1750,500),(1750,525),(1700,525),(1700,550) */ /* CIF ProcedureCall (1500,550),(400,100) */ call EmergencyCloseF; /* CIF Line (1700,650),(1700,675),(1600,675),(1600,700) */ /* CIF NextState (1500,700) */ nextstate StopsLock; /* CIF End State */ endstate; /* CIF State (1000,1250),(300,100) */ state GateClosing; /* CIF Line (1150,1350),(1150,1375),(1100,1375),(1100,1400) */ /* CIF Input (1000,1400) Right */ input Coming; /* CIF Line (1100,1500),(1100,1525),(1200,1525),(1200,1550) */ /* CIF Task (1000,1550),(400,100) */ task NoOfTrains:=NoOfTrains+1; /* CIF Line (1200,1650),(1200,1700) */ /* CIF ProcedureCall (1000,1700),(400,100) */ call FindSender(SenderNo); /* CIF Line (1200,1800),(1200,1825),(1150,1825),(1150,1850) */ /* CIF Extendedtask (1000,1850),(300,100) */ task {n:=SenderNo;}; /* CIF Line (1150,1950),(1150,1975),(1300,1975),(1300,2000) */ /* CIF Extendedtask (1000,2000),(600,100) */ task {TrackCounter(n):=TrackCounter(n)+1;}; /* CIF Line (1300,2100),(1300,2125),(1100,2125),(1100,2150) */ /* CIF NextState (1000,2150) */ nextstate -; /* CIF Line (1150,1350),(1150,1375),(1600,1375),(1600,1400) */ /* CIF Input (1500,1400) Right */ input *; /* CIF Line (1600,1500),(1600,1550) */ /* CIF NextState (1500,1550) */ nextstate -; /* CIF End State */ endstate; /* CIF CurrentPage 7 */ /* CIF State (50,400) */ state GateClosed; /* CIF Line (150,500),(150,550) */ /* CIF Input (50,550) Right */ input Left; /* CIF Line (150,650),(150,675),(250,675),(250,700) */ /* CIF Task (50,700),(400,100) */ task NoOfTrains:=NoOfTrains-1; /* CIF Line (250,800),(250,850) */ /* CIF ProcedureCall (50,850),(400,100) */ call FindSender(SenderNo); /* CIF Line (250,950),(250,975),(200,975),(200,1000) */ /* CIF Extendedtask (50,1000),(300,100) */ task {n:=SenderNo;}; /* CIF Line (200,1100),(200,1125),(350,1125),(350,1150) */ /* CIF Extendedtask (50,1150),(600,100) */ task {TrackCounter(n):=TrackCounter(n)-1;}; /* CIF Line (350,1250),(350,1275),(300,1275),(300,1300) */ /* CIF Decision (50,1300),(500,100) */ decision NoOfTrains/=0; /* CIF Answer InvisibleBrackets */ /* CIF Line (300,1400),(300,1425),(250,1425),(250,1450) */ /* CIF TextPosition (150,1425) */ (False): /* CIF Decision (50,1450),(400,200) */ decision CarWaiting=0 AND Strategies=2; /* CIF Answer InvisibleBrackets */ /* CIF Line (250,1650),(250,1675),(200,1675),(200,1750) */ /* CIF TextPosition (175,1700) */ (False): /* CIF Task (50,1750),(300,100) */ task n:=NoOfTracks; /* CIF Line (200,1850),(200,1900) */ /* CIF Output (50,1900),(300,100) Right */ output RedRQ TO TrackNo(n); /* CIF Line (200,2000),(200,2025),(250,2025),(250,2050) */ /* CIF Set (50,2050),(400,100) */ Set(Now+2, RedWaiting_TimeOut); /* CIF Line (250,2150),(250,2200) */ /* CIF Extendedtask (50,2200),(400,100) */ task {TrackLight(n):='R';}; /* CIF Line (250,2300),(250,2325),(150,2325),(150,2350) */ /* CIF NextState (50,2350) */ nextstate RedSetting; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (450,1550),(475,1550),(475,1725),(650,1725),(650,1750) */ /* CIF TextPosition (525,1675) */ (True): /* CIF NextState (550,1750) */ nextstate -; /* CIF End Decision */ enddecision; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (550,1350),(650,1350),(650,1450) */ /* CIF TextPosition (675,1375) */ (True): /* CIF NextState (550,1450) */ nextstate -; /* CIF End Decision */ enddecision; /* CIF Line (150,500),(150,525),(900,525),(900,550) */ /* CIF PriorityInput (800,550) Right */ priority input Coming; /* CIF Line (900,650),(900,675),(1000,675),(1000,700) */ /* CIF Task (800,700),(400,100) */ task NoOfTrains:=NoOfTrains+1; /* CIF Line (1000,800),(1000,850) */ /* CIF ProcedureCall (800,850),(400,100) */ call FindSender(SenderNo); /* CIF Line (1000,950),(1000,975),(950,975),(950,1000) */ /* CIF Extendedtask (800,1000),(300,100) */ task {n:=SenderNo;}; /* CIF Line (950,1100),(950,1125),(1100,1125),(1100,1150) */ /* CIF Extendedtask (800,1150),(600,100) */ task {TrackCounter(n):=TrackCounter(n)+1;}; /* CIF Line (1100,1250),(1100,1275),(1250,1275),(1250,1300) */ /* CIF Decision (950,1300),(600,300) */ decision Strategies=4 AND CarWaiting/=0 AND TrackCounter(n)=1; /* CIF Answer Left InvisibleBrackets */ /* CIF Line (950,1450),(900,1450),(900,1650) */ /* CIF TextPosition (925,1500) */ (False): /* CIF NextState (800,1650) */ nextstate -; /* CIF Answer InvisibleBrackets */ /* CIF Line (1250,1600),(1250,1625),(1200,1625),(1200,1750) */ /* CIF TextPosition (1225,1750) */ (True): /* CIF Output (1050,1750),(300,100) Right */ output RedRQ TO TrackNo(n); /* CIF Line (1200,1850),(1200,1875),(1250,1875),(1250,1900) */ /* CIF Set (1050,1900),(400,100) */ Set(Now+2, StopWaiting_TimeOut); /* CIF Line (1250,2000),(1250,2025),(1300,2025),(1300,2050) */ /* CIF Task (1050,2050),(500,100) */ task NoOfSTrains:=NoOfSTrains+1; /* CIF Line (1300,2150),(1300,2175),(1200,2175),(1200,2200) */ /* CIF Extendedtask (1050,2200),(300,100) */ task {TrackLight(n):='R';}; /* CIF Line (1200,2300),(1200,2350) */ /* CIF NextState (1050,2350),(300,100) */ nextstate TrainWaiting; /* CIF End Decision */ enddecision; /* CIF Line (150,500),(150,525),(1400,525),(1400,550) */ /* CIF Input (1300,550) Right */ input No; /* CIF Line (1400,650),(1400,675),(1450,675),(1450,700) */ /* CIF Task (1300,700),(300,100) */ task CarWaiting:=0; /* CIF Line (1450,800),(1450,825),(1400,825),(1400,850) */ /* CIF NextState (1300,850) */ nextstate -; /* CIF Line (150,500),(150,525),(1900,525),(1900,550) */ /* CIF Input (1800,550) Right */ input Yes; /* CIF Line (1900,650),(1900,675),(1950,675),(1950,700) */ /* CIF Task (1800,700),(300,100) */ task CarWaiting:=1; /* CIF Line (1950,800),(1950,825),(2000,825),(2000,850) */ /* CIF Decision (1800,850),(400,100) */ decision NoOfTrains/=0 /* CIF Comment (2300,850) Right */ /* CIF Line (2300,900),(2200,900) Dashed */ comment 'NoOfSTrains=0, because otherwise, it will be in Stopwaiting state.' ; /* CIF Answer InvisibleBrackets */ /* CIF Line (2000,950),(2000,975),(1950,975),(1950,1000) */ /* CIF TextPosition (1825,950) */ (False): /* CIF Task (1800,1000),(300,100) */ task n:=NoOfTracks; /* CIF Line (1950,1100),(1950,1150) */ /* CIF Output (1800,1150),(300,100) Right */ output RedRQ TO TrackNo(n); /* CIF Line (1950,1250),(1950,1275),(2000,1275),(2000,1300) */ /* CIF Set (1800,1300),(400,100) */ Set(Now+2, RedWaiting_TimeOut); /* CIF Line (2000,1400),(2000,1450) */ /* CIF Extendedtask (1800,1450),(400,100) */ task {TrackLight(n):='R';}; /* CIF Line (2000,1550),(2000,1575),(1900,1575),(1900,1600) */ /* CIF NextState (1800,1600) */ nextstate RedSetting; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (2200,900),(2225,900),(2225,1725),(2150,1725),(2150,1750) */ /* CIF TextPosition (2150,925) */ (True): /* CIF NextState (2050,1750) */ nextstate -; /* CIF End Decision */ enddecision; /* CIF Line (150,500),(150,525),(2400,525),(2400,550) */ /* CIF Input (2300,550) Right */ input *; /* CIF Line (2400,650),(2400,700) */ /* CIF NextState (2300,700) */ nextstate -; /* CIF End State */ endstate; /* CIF CurrentPage 8 */ /* CIF State (500,200) */ state RedSetting; /* CIF Line (600,300),(600,325),(200,325),(200,350) */ /* CIF Input (100,350) Right */ input Red; /* CIF Line (200,450),(200,475),(350,475),(350,500) */ /* CIF Decision (100,500),(500,100) */ decision TrackNo(m)=SENDER; /* CIF Answer InvisibleBrackets */ /* CIF Line (350,600),(350,650) */ /* CIF TextPosition (200,600) */ (True): /* CIF Reset (100,650),(500,100) */ Reset(StopWaiting_TimeOut); /* CIF Line (350,750),(350,850) */ /* CIF Answer Right InvisibleBrackets */ /* CIF Line (600,550),(625,550),(625,825),(350,825),(350,850) */ /* CIF TextPosition (550,600) */ (False): /* CIF End Decision */ enddecision; /* CIF Decision (100,850),(500,100) */ decision TrackNo(n)=SENDER; /* CIF Answer InvisibleBrackets */ /* CIF Line (350,950),(350,1000) */ /* CIF TextPosition (225,950) */ (True): /* CIF Reset (100,1000),(500,100) */ Reset(RedWaiting_TimeOut); /* CIF Line (350,1100),(350,1125),(200,1125),(200,1150) */ /* CIF Task (100,1150) */ task rs:=0; /* CIF Line (200,1250),(200,1300) */ /* CIF Task (100,1300) */ task n:=n-1; /* CIF Line (200,1400),(200,1450) */ /* CIF Decision (100,1450) */ decision n>0; /* CIF Answer InvisibleBrackets */ /* CIF Line (200,1550),(200,1575),(250,1575),(250,1600) */ /* CIF TextPosition (150,1550) */ (True): /* CIF Output (100,1600),(300,100) Right */ output RedRQ TO TrackNo(n); /* CIF Line (250,1700),(250,1725),(300,1725),(300,1750) */ /* CIF Set (100,1750),(400,100) */ Set(Now+2, RedWaiting_TimeOut); /* CIF Line (300,1850),(300,1900) */ /* CIF Extendedtask (100,1900),(400,100) */ task {TrackLight(n):='R';}; /* CIF Line (300,2000),(300,2025),(200,2025),(200,2050) */ /* CIF Task (100,2050) */ task rs:=1; /* CIF Line (200,2150),(200,2200) */ /* CIF NextState (100,2200) */ nextstate -; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (300,1500),(650,1500),(650,1750) */ /* CIF TextPosition (500,1525) */ (False): /* CIF Output (550,1750) Right */ output Open; /* CIF Line (650,1850),(650,1875),(750,1875),(750,1900) */ /* CIF Set (550,1900),(400,100) */ Set(Now+30, GateOpen_TimeOut1); /* CIF Line (750,2000),(750,2050) */ /* CIF Set (550,2050),(400,100) */ Set(Now+2, GateOpen_TimeOut2); /* CIF Line (750,2150),(750,2175),(700,2175),(700,2200) */ /* CIF NextState (550,2200),(300,100) */ nextstate GateOpening; /* CIF End Decision */ enddecision; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (600,900),(625,900),(625,1275),(500,1275),(500,1300) */ /* CIF TextPosition (525,925) */ (False): /* CIF NextState (400,1300) */ nextstate -; /* CIF End Decision */ enddecision; /* CIF Line (600,300),(600,325),(900,325),(900,350) */ /* CIF Input (650,350),(500,100) Right */ input RedWaiting_timeOut; /* CIF Line (900,450),(900,475),(850,475),(850,500) */ /* CIF Output (700,500),(300,100) Right */ output RedRQ TO TrackNo(n); /* CIF Line (850,600),(850,625),(900,625),(900,650) */ /* CIF Set (700,650),(400,100) */ Set(Now+2, RedWaiting_TimeOut); /* CIF Line (900,750),(900,775),(800,775),(800,800) */ /* CIF Task (700,800) */ task rs:=rs+1; /* CIF Line (800,900),(800,950) */ /* CIF Decision (700,950) */ decision rs<3; /* CIF Answer InvisibleBrackets */ /* CIF Line (800,1050),(800,1100) */ /* CIF TextPosition (775,1050) */ (True): /* CIF NextState (700,1100) */ nextstate -; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (900,1000),(1100,1000),(1100,1250) */ /* CIF TextPosition (900,1025) */ (False): /* CIF ProcedureCall (900,1250),(400,100) */ call EmergencySetRedF; /* CIF Line (1100,1350),(1100,1375),(1050,1375),(1050,1400) */ /* CIF Task (900,1400),(300,100) */ task NoOfSTrains:=0; /* CIF Line (1050,1500),(1050,1525),(1000,1525),(1000,1550) */ /* CIF NextState (900,1550) */ nextstate CloseLock; /* CIF End Decision */ enddecision; /* CIF Line (600,300),(600,325),(1600,325),(1600,350) */ /* CIF Input (1350,350),(500,100) Right */ input StopWaiting_TimeOut; /* CIF Line (1600,450),(1600,475),(1500,475),(1500,500) */ /* CIF Output (1350,500),(300,100) Right */ output GreenRQ TO TrackNo(m) ; /* CIF Line (1500,600),(1500,625),(1450,625),(1450,650) */ /* CIF Task (1350,650) */ task m:=0; /* CIF Line (1450,750),(1450,800) */ /* CIF ProcedureCall (1350,800) */ call SetGreen; /* CIF Line (1450,900),(1450,925),(1600,925),(1600,950) */ /* CIF Extendedtask (1350,950),(500,100) */ task {NoOfSTrains:=NoOfSTrains-1;}; /* CIF Line (1600,1050),(1600,1075),(1450,1075),(1450,1100) */ /* CIF NextState (1350,1100) */ nextstate GateClosed; /* CIF End State */ endstate; /* CIF CurrentPage 9 */ /* CIF State (300,200) */ state RedSetting; /* CIF Line (400,300),(400,350) */ /* CIF PriorityInput (300,350) Right */ priority input Coming; /* CIF Line (400,450),(400,475),(500,475),(500,500) */ /* CIF Task (300,500),(400,100) */ task NoOfTrains:=NoOfTrains+1 /* CIF Comment (50,500) Right */ /* CIF Line (50,550),(25,550),(25,625),(275,625),(275,550),(300,550) Dashed */ comment 'NoOftrains=1' ; /* CIF Line (500,600),(500,650) */ /* CIF ProcedureCall (300,650),(400,100) */ call FindSender(SenderNo); /* CIF Line (500,750),(500,775),(450,775),(450,800) */ /* CIF Extendedtask (300,800),(300,100) */ task {m:=SenderNo;}; /* CIF Line (450,900),(450,925),(600,925),(600,950) */ /* CIF Extendedtask (300,950),(600,100) */ task {TrackCounter(m):=TrackCounter(m)+1;} /* CIF Comment (1000,950) Right */ /* CIF Line (1000,1000),(900,1000) Dashed */ comment 'TrackCounter(m)=1' ; /* CIF Line (600,1050),(600,1100) */ /* CIF Decision (500,1100) */ decision Strategies; /* CIF Answer Left InvisibleBrackets */ /* CIF Line (500,1150),(200,1150),(200,1250) */ /* CIF TextPosition (150,1175) */ (=2): /* CIF Output (50,1250),(300,100) Right */ output GreenRQ TO TrackNo(m) ; /* CIF Line (200,1350),(200,1375),(150,1375),(150,1400) */ /* CIF Task (50,1400) */ task m:=0; /* CIF Line (150,1500),(150,1550) */ /* CIF ProcedureCall (50,1550) */ call SetGreen; /* CIF Line (150,1650),(150,1700) */ /* CIF NextState (50,1700) */ nextstate GateClosed /* CIF Comment (50,1950) Right */ /* CIF Line (50,2000),(25,2000),(25,1750),(50,1750) Dashed */ comment 'Gate is already Closed, before open' ; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (700,1150),(1450,1150),(1450,1300) */ /* CIF TextPosition (1350,1175) */ (=4): /* CIF Output (1250,1300),(400,100) Right */ output RedRQ TO TrackNo(m); /* CIF Line (1450,1400),(1450,1450) */ /* CIF Set (1250,1450),(400,100) */ Set(Now+2, StopWaiting_TimeOut); /* CIF Line (1450,1550),(1450,1600) */ /* CIF Extendedtask (1250,1600),(400,100) */ task {TrackLight(m):='R';}; /* CIF Line (1450,1700),(1450,1725),(1350,1725),(1350,1750) */ /* CIF NextState (1250,1750) */ nextstate -; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (700,1150),(1850,1150),(1850,1300) */ /* CIF TextPosition (1875,1175) */ (=1): /* CIF NextState (1750,1300) */ nextstate Wait2; /* CIF Answer InvisibleBrackets */ /* CIF Line (600,1200),(600,1225),(800,1225),(800,1350) */ /* CIF TextPosition (825,1250) */ (=3): /* CIF Decision (450,1350),(700,150) */ decision m>NoOfFastTracks AND CarWaiting/=0; /* CIF Answer Left InvisibleBrackets */ /* CIF Line (450,1425),(425,1425),(425,1525),(550,1525),(550,1550) */ /* CIF TextPosition (450,1475) */ (False): /* CIF Output (400,1550),(300,100) Right */ output GreenRQ TO TrackNo(m) ; /* CIF Line (550,1650),(550,1675),(500,1675),(500,1700) */ /* CIF Task (400,1700) */ task m:=0; /* CIF Line (500,1800),(500,1850) */ /* CIF ProcedureCall (400,1850) */ call SetGreen; /* CIF Line (500,1950),(500,2000) */ /* CIF NextState (400,2000) */ nextstate GateClosed; /* CIF Answer InvisibleBrackets */ /* CIF Line (800,1500),(800,1525),(950,1525),(950,1550) */ /* CIF TextPosition (975,1500) */ (True): /* CIF Output (750,1550),(400,100) Right */ output RedRQ TO TrackNo(m); /* CIF Line (950,1650),(950,1700) */ /* CIF Set (750,1700),(400,100) */ Set(Now+2, StopWaiting_TimeOut); /* CIF Line (950,1800),(950,1850) */ /* CIF Extendedtask (750,1850),(400,100) */ task {TrackLight(m):='R';}; /* CIF Line (950,1950),(950,1975),(850,1975),(850,2000) */ /* CIF NextState (750,2000) */ nextstate -; /* CIF End Decision */ enddecision; /* CIF End Decision */ enddecision; /* CIF Line (400,300),(400,325),(850,325),(850,350) */ /* CIF Input (750,350) Right */ input Yes; /* CIF Line (850,450),(850,475),(900,475),(900,500) */ /* CIF Task (750,500),(300,100) */ task CarWaiting:=1; /* CIF Line (900,600),(900,625),(850,625),(850,650) */ /* CIF NextState (750,650) */ nextstate -; /* CIF Line (400,300),(400,325),(1250,325),(1250,350) */ /* CIF Input (1150,350) Right */ input No; /* CIF Line (1250,450),(1250,475),(1300,475),(1300,500) */ /* CIF Task (1150,500),(300,100) */ task CarWaiting:=0; /* CIF Line (1300,600),(1300,625),(1250,625),(1250,650) */ /* CIF NextState (1150,650) */ nextstate -; /* CIF Line (400,300),(400,325),(1650,325),(1650,350) */ /* CIF Input (1550,350) Right */ input *; /* CIF Line (1650,450),(1650,500) */ /* CIF NextState (1550,500) */ nextstate -; /* CIF End State */ endstate; /* CIF CurrentPage 10 */ /* CIF State (300,200),(300,100) */ state GateOpening, TrainWaiting; /* CIF Line (450,300),(450,325),(200,325),(200,350) */ /* CIF Input (100,350) Right */ input Raising; /* CIF Line (200,450),(200,475),(300,475),(300,500) */ /* CIF Reset (100,500),(400,100) */ RESET (GateOpen_TimeOut2); /* CIF Line (300,600),(300,625),(200,625),(200,650) */ /* CIF NextState (100,650) */ nextstate -; /* CIF Line (450,300),(450,325),(650,325),(650,350) */ /* CIF Input (550,350) Right */ input Opened; /* CIF Line (650,450),(650,475),(750,475),(750,500) */ /* CIF Reset (550,500),(400,100) */ RESET (GateOpen_TimeOut2); /* CIF Line (750,600),(750,650) */ /* CIF Reset (550,650),(400,100) */ RESET (GateOpen_TimeOut1); /* CIF Line (750,750),(750,775),(650,775),(650,800) */ /* CIF NextState (550,800) */ nextstate GateOpened; /* CIF Line (450,300),(450,325),(1200,325),(1200,350) */ /* CIF Input (950,350),(500,100) Right */ input GateOpen_TimeOut2; /* CIF Line (1200,450),(1200,475),(1100,475),(1100,500) */ /* CIF Output (1000,500) Right */ output Open; /* CIF Line (1100,600),(1100,625),(1200,625),(1200,650) */ /* CIF Set (1000,650),(400,100) */ Set(Now+2, GateOpen_TimeOut2); /* CIF Line (1200,750),(1200,775),(1100,775),(1100,800) */ /* CIF NextState (1000,800) */ nextstate -; /* CIF Line (450,300),(450,325),(1800,325),(1800,350) */ /* CIF Input (1550,350),(500,100) Right */ input GateOpen_TimeOut1; /* CIF Line (1800,450),(1800,475),(1750,475),(1750,500) */ /* CIF ProcedureCall (1550,500),(400,100) */ call EmergencyOpenF; /* CIF Line (1750,600),(1750,625),(1700,625),(1700,650) */ /* CIF Task (1550,650),(300,100) */ task NoOfSTrains:=0; /* CIF Line (1700,750),(1700,775),(1650,775),(1650,800) */ /* CIF NextState (1550,800) */ nextstate CloseLock; /* CIF End State */ endstate; /* CIF State (150,1150),(300,100) */ state GateOpening; /* CIF Line (300,1250),(300,1275),(250,1275),(250,1300) */ /* CIF Input (150,1300) Right */ input Yes; /* CIF Line (250,1400),(250,1425),(300,1425),(300,1450) */ /* CIF Task (150,1450),(300,100) */ task CarWaiting:=1; /* CIF Line (300,1550),(300,1575),(250,1575),(250,1600) */ /* CIF NextState (150,1600) */ nextstate -; /* CIF Line (300,1250),(300,1275),(650,1275),(650,1300) */ /* CIF Input (550,1300) Right */ input No; /* CIF Line (650,1400),(650,1425),(700,1425),(700,1450) */ /* CIF Task (550,1450),(300,100) */ task CarWaiting:=0; /* CIF Line (700,1550),(700,1575),(650,1575),(650,1600) */ /* CIF NextState (550,1600) */ nextstate -; /* CIF Line (300,1250),(300,1275),(1050,1275),(1050,1300) */ /* CIF Input (950,1300) Right */ input *; /* CIF Line (1050,1400),(1050,1450) */ /* CIF NextState (950,1450) */ nextstate -; /* CIF End State */ endstate; /* CIF CurrentPage 11 */ /* CIF State (400,250) */ state * (Idle); /* CIF Line (500,350),(500,375),(250,375),(250,400) */ /* CIF Input (150,400) Right */ input EOpen; /* CIF Line (250,500),(250,550) */ /* CIF Decision (100,550),(300,100) */ decision Strategies=1; /* CIF Answer InvisibleBrackets */ /* CIF Line (250,650),(250,700) */ /* CIF TextPosition (275,650) */ (True): /* CIF ProcedureCall (150,700) */ call ResetTimer; /* CIF Line (250,800),(250,825),(300,825),(300,900) */ /* CIF Decision (50,900),(500,300) */ decision NoOfTrains=0 OR NoOfTrains=NoOfSTrains; /* CIF Answer InvisibleBrackets */ /* CIF Line (300,1200),(300,1225),(150,1225),(150,1300) */ /* CIF TextPosition (200,1175) */ (False): /* CIF NextState (50,1300) */ nextstate Wait1; /* CIF Answer InvisibleBrackets */ /* CIF Line (300,1200),(300,1225),(450,1225),(450,1300) */ /* CIF TextPosition (425,1175) */ (True): /* CIF Task (300,1300),(300,100) */ task n:=NoOfTracks; /* CIF Line (450,1400),(450,1450) */ /* CIF Output (300,1450),(300,100) Right */ output RedRQ TO TrackNo(n); /* CIF Line (450,1550),(450,1575),(500,1575),(500,1600) */ /* CIF Set (300,1600),(400,100) */ Set(Now+2, RedWaiting_TimeOut); /* CIF Line (500,1700),(500,1750) */ /* CIF Extendedtask (300,1750),(400,100) */ task {TrackLight(n):='R';}; /* CIF Line (500,1850),(500,1875),(400,1875),(400,1900) */ /* CIF Task (300,1900) */ task rs:=1; /* CIF Line (400,2000),(400,2050) */ /* CIF NextState (300,2050) */ nextstate RedSetting; /* CIF End Decision */ enddecision; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (400,600),(425,600),(425,925),(575,925),(575,1025),(700,1025), (700,1050) */ /* CIF TextPosition (450,950) */ (False): /* CIF NextState (600,1050) */ nextstate -; /* CIF End Decision */ enddecision; /* CIF Line (500,350),(500,375),(700,375),(700,400) */ /* CIF Input (600,400) Right */ input EClose; /* CIF Line (700,500),(700,550) */ /* CIF ProcedureCall (600,550) */ call ResetTimer; /* CIF Line (700,650),(700,700) */ /* CIF ProcedureCall (600,700) */ call CloseReq; /* CIF Line (700,800),(700,850) */ /* CIF NextState (600,850) */ nextstate GateClosing; /* CIF Line (500,350),(500,375),(1000,375),(1000,400) */ /* CIF PriorityInput (900,400) Right */ priority input EStops; /* CIF Line (1000,500),(1000,525),(1100,525),(1100,550) */ /* CIF ProcedureCall (900,550),(400,100) */ call EmergencyCloseF; /* CIF Line (1100,650),(1100,675),(1000,675),(1000,700) */ /* CIF NextState (900,700) */ nextstate StopsLock; /* CIF End State */ endstate; /* CIF State (1500,250) */ state *; /* CIF Line (1600,350),(1600,375),(1650,375),(1650,400) */ /* CIF Input (1500,400),(300,100) Right */ input Strategy(S); /* CIF Line (1650,500),(1650,550) */ /* CIF Decision (1450,550),(400,150) */ decision S>0 AND S<5; /* CIF Answer InvisibleBrackets */ /* CIF Line (1650,700),(1650,725),(1600,725),(1600,750) */ /* CIF TextPosition (1700,700) */ (True): /* CIF Task (1500,750) */ task Strategies:=S; /* CIF Line (1600,850),(1600,900) */ /* CIF Answer InvisibleBrackets */ /* CIF Line (1650,700),(1650,725),(1475,725),(1475,875),(1600,875),(1600,900) */ /* CIF TextPosition (1500,675) */ (False): /* CIF End Decision */ enddecision; /* CIF NextState (1500,900) */ nextstate -; /* CIF End State */ endstate; /* CIF CurrentPage 12 */ /* CIF State (500,150) */ state Wait1; /* CIF Line (600,250),(600,300) */ /* CIF Input (500,300) Right */ input Left; /* CIF Line (600,400),(600,450) */ /* CIF Task (400,450),(400,100) */ task NoOfTrains:=NoOfTrains-1; /* CIF Line (600,550),(600,600) */ /* CIF ProcedureCall (400,600),(400,100) */ call FindSender(SenderNo); /* CIF Line (600,700),(600,725),(550,725),(550,750) */ /* CIF Extendedtask (400,750),(300,100) */ task {n:=SenderNo;}; /* CIF Line (550,850),(550,875),(400,875),(400,900) */ /* CIF Extendedtask (100,900),(600,100) */ task {TrackCounter(n):=TrackCounter(n)-1;}; /* CIF Line (400,1000),(400,1025),(450,1025),(450,1050) */ /* CIF Decision (200,1050),(500,100) */ decision NoOfTrains=0; /* CIF Answer Left InvisibleBrackets */ /* CIF Line (200,1100),(150,1100),(150,1200) */ /* CIF TextPosition (50,1125) */ (False): /* CIF NextState (50,1200) */ nextstate -; /* CIF Answer InvisibleBrackets */ /* CIF Line (450,1150),(450,1175),(550,1175),(550,1200) */ /* CIF TextPosition (575,1200) */ (True): /* CIF Task (400,1200),(300,100) */ task n:=NoOfTracks; /* CIF Line (550,1300),(550,1350) */ /* CIF Output (400,1350),(300,100) Right */ output RedRQ TO TrackNo(n); /* CIF Line (550,1450),(550,1475),(500,1475),(500,1500) */ /* CIF Set (300,1500),(400,100) */ Set(Now+2, RedWaiting_TimeOut); /* CIF Line (500,1600),(500,1650) */ /* CIF Extendedtask (300,1650),(400,100) */ task {TrackLight(n):='R';}; /* CIF Line (500,1750),(500,1775),(600,1775),(600,1800) */ /* CIF Task (500,1800) */ task rs:=1; /* CIF Line (600,1900),(600,1950) */ /* CIF NextState (500,1950) */ nextstate RedSetting; /* CIF End Decision */ enddecision; /* CIF Line (600,250),(600,275),(950,275),(950,300) */ /* CIF PriorityInput (850,300) Right */ priority input Coming; /* CIF Line (950,400),(950,425),(1050,425),(1050,450) */ /* CIF Task (850,450),(400,100) */ task NoOfTrains:=NoOfTrains+1; /* CIF Line (1050,550),(1050,600) */ /* CIF ProcedureCall (850,600),(400,100) */ call FindSender(SenderNo); /* CIF Line (1050,700),(1050,725),(1000,725),(1000,750) */ /* CIF Extendedtask (850,750),(300,100) */ task {n:=SenderNo;}; /* CIF Line (1000,850),(1000,875),(1150,875),(1150,900) */ /* CIF Extendedtask (850,900),(600,100) */ task {TrackCounter(n):=TrackCounter(n)+1;}; /* CIF Line (1150,1000),(1150,1025),(950,1025),(950,1050) */ /* CIF NextState (850,1050) */ nextstate Wait2; /* CIF Line (600,250),(600,275),(1400,275),(1400,300) */ /* CIF Input (1300,300) Right */ input *; /* CIF Line (1400,400),(1400,450) */ /* CIF NextState (1300,450) */ nextstate -; /* CIF End State */ endstate; /* CIF CurrentPage 13 */ /* CIF State (400,350) */ state Wait2; /* CIF Line (500,450),(500,475),(250,475),(250,500) */ /* CIF Input (150,500) Right */ input ERedRQ; /* CIF Line (250,600),(250,625),(300,625),(300,650) */ /* CIF Output (150,650),(300,100) Right */ output RedRQ TO TrackNo(n); /* CIF Line (300,750),(300,775),(350,775),(350,800) */ /* CIF Set (150,800),(400,100) */ Set(Now+2, StopWaiting_TimeOut); /* CIF Line (350,900),(350,925),(400,925),(400,950) */ /* CIF Extendedtask (150,950),(500,100) */ task {NoOfSTrains:=NoOfSTrains+1;}; /* CIF Line (400,1050),(400,1075),(350,1075),(350,1100) */ /* CIF Extendedtask (150,1100),(400,100) */ task {TrackLight(n):='R';}; /* CIF Line (350,1200),(350,1225),(300,1225),(300,1250) */ /* CIF NextState (150,1250),(300,100) */ nextstate TrainWaiting; /* CIF Line (500,450),(500,475),(800,475),(800,500) */ /* CIF Input (650,500),(300,100) Right */ input EGreenRQ; /* CIF Line (800,600),(800,625),(750,625),(750,650) */ /* CIF ProcedureCall (650,650) */ call CloseReq; /* CIF Line (750,750),(750,800) */ /* CIF NextState (650,800) */ nextstate GateClosing; /* CIF Line (500,450),(500,475),(1150,475),(1150,500) */ /* CIF Input (1050,500) Right */ input Closed; /* CIF Line (1150,600),(1150,625),(1250,625),(1250,650) */ /* CIF Reset (1050,650),(400,100) */ RESET (GateClose_timeout1); /* CIF Line (1250,750),(1250,800) */ /* CIF Reset (1050,800),(400,100) */ RESET (GateClose_timeout2); /* CIF Line (1250,900),(1250,925),(1150,925),(1150,950) */ /* CIF NextState (1050,950) */ nextstate GateClosed; /* CIF Line (500,450),(500,475),(1600,475),(1600,500) */ /* CIF Input (1500,500) Right */ input *; /* CIF Line (1600,600),(1600,650) */ /* CIF NextState (1500,650) */ nextstate -; /* CIF End State */ endstate; /* CIF CurrentPage 14 */ /* CIF State (800,150) */ state CloseLock; /* CIF Line (900,250),(900,275),(250,275),(250,300) */ /* CIF Input (150,300) Right */ input Coming; /* CIF Line (250,400),(250,425),(350,425),(350,450) */ /* CIF Task (150,450),(400,100) */ task NoOfTrains:=NoOfTrains+1; /* CIF Line (350,550),(350,600) */ /* CIF ProcedureCall (150,600),(400,100) */ call FindSender(SenderNo); /* CIF Line (350,700),(350,725),(300,725),(300,750) */ /* CIF Extendedtask (150,750),(300,100) */ task {m:=SenderNo;}; /* CIF Line (300,850),(300,875),(450,875),(450,900) */ /* CIF Extendedtask (150,900),(600,100) */ task {TrackCounter(m):=TrackCounter(m)+1;}; /* CIF Line (450,1000),(450,1025),(250,1025),(250,1050) */ /* CIF NextState (150,1050) */ nextstate -; /* CIF Line (900,250),(900,300) */ /* CIF Input (800,300) Right */ input Left; /* CIF Line (900,400),(900,425),(1000,425),(1000,450) */ /* CIF Task (800,450),(400,100) */ task NoOfTrains:=NoOfTrains-1; /* CIF Line (1000,550),(1000,600) */ /* CIF ProcedureCall (800,600),(400,100) */ call FindSender(SenderNo); /* CIF Line (1000,700),(1000,725),(950,725),(950,750) */ /* CIF Extendedtask (800,750),(300,100) */ task {n:=SenderNo;}; /* CIF Line (950,850),(950,875),(1100,875),(1100,900) */ /* CIF Extendedtask (800,900),(600,100) */ task {TrackCounter(n):=TrackCounter(n)-1;}; /* CIF Line (1100,1000),(1100,1025),(900,1025),(900,1050) */ /* CIF NextState (800,1050) */ nextstate -; /* CIF Line (900,250),(900,275),(1500,275),(1500,300) */ /* CIF Input (1400,300) Right */ input *; /* CIF Line (1500,400),(1500,450) */ /* CIF NextState (1400,450) */ nextstate -; /* CIF End State */ endstate; /* CIF CurrentPage 15 */ /* CIF State (500,250) */ state StopsLock; /* CIF Line (600,350),(600,375),(350,375),(350,400) */ /* CIF Input (250,400) Right */ input Coming; /* CIF Line (350,500),(350,525),(450,525),(450,550) */ /* CIF Task (250,550),(400,100) */ task NoOfTrains:=NoOfTrains+1; /* CIF Line (450,650),(450,700) */ /* CIF ProcedureCall (250,700),(400,100) */ call FindSender(SenderNo); /* CIF Line (450,800),(450,825),(400,825),(400,850) */ /* CIF Extendedtask (250,850),(300,100) */ task {m:=SenderNo;}; /* CIF Line (400,950),(400,975),(550,975),(550,1000) */ /* CIF Extendedtask (250,1000),(600,100) */ task {TrackCounter(m):=TrackCounter(m)+1;}; /* CIF Line (550,1100),(550,1125),(500,1125),(500,1150) */ /* CIF Task (250,1150),(500,100) */ task NoOfSTrains:=NoOfSTrains+1; /* CIF Line (500,1250),(500,1275),(350,1275),(350,1300) */ /* CIF NextState (250,1300) */ nextstate -; /* CIF Line (600,350),(600,375),(900,375),(900,400) */ /* CIF Input (800,400) Right */ input *; /* CIF Line (900,500),(900,550) */ /* CIF NextState (800,550) */ nextstate -; /* CIF End State */ endstate; /* CIF End ProcessDiagram */ endprocess <> Controller; /* CIF ProcedureDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\ResetData.spd' */ /* CIF Specific SDT Page 1 Scale 100 Grid (50,50) AutoNumbered */ procedure ResetData; /* CIF DefaultSize (300,100) */ /* CIF CurrentPage 1 */ /* CIF ProcedureStart (500,100),(200,100) */ start ; /* CIF Line (600,200),(600,250) */ /* CIF Task (450,250) */ task CarWaiting:=0; /* CIF Line (600,350),(600,400) */ /* CIF Task (450,400) */ task NoOfTrains:=0; /* CIF Line (600,500),(600,550) */ /* CIF Task (450,550) */ task NoOfSTrains:=0; /* CIF Line (600,650),(600,700) */ /* CIF Task (450,700) */ task n:=0, m:=0, ni:=0, nO:=0, ns:=0, rs:=0; /* CIF Line (600,800),(600,850) */ /* CIF Task (450,850) */ task SenderNo:=0; /* CIF Line (600,950),(600,1000) */ /* CIF ProcedureCall (450,1000) */ call ResetTimer; /* CIF Line (600,1100),(600,1150) */ /* CIF Return (550,1150),(100,100) */ return ; /* CIF End ProcedureDiagram */ endprocedure ResetData; /* CIF ProcedureDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\ResetTimer.spd' */ /* CIF Specific SDT Page 1 Scale 100 Grid (50,50) AutoNumbered */ procedure ResetTimer; /* CIF DefaultSize (600,100) */ /* CIF CurrentPage 1 */ /* CIF ProcedureStart (650,250),(200,100) */ start ; /* CIF Line (750,350),(750,450) */ /* CIF Reset (450,450) */ RESET(GateClose_TimeOut1); /* CIF Line (750,550),(750,600) */ /* CIF Reset (450,600) */ RESET(GateClose_TimeOut2); /* CIF Line (750,700),(750,750) */ /* CIF Reset (450,750) */ RESET(GateOpen_TimeOut1); /* CIF Line (750,850),(750,900) */ /* CIF Reset (450,900) */ RESET(GateOpen_TimeOut2); /* CIF Line (750,1000),(750,1050) */ /* CIF Reset (450,1050) */ RESET(StopWaiting_TimeOut); /* CIF Line (750,1150),(750,1200) */ /* CIF Reset (450,1200) */ RESET(RedWaiting_TimeOut); /* CIF Line (750,1300),(750,1400) */ /* CIF Return (700,1400),(100,100) */ return ; /* CIF End ProcedureDiagram */ endprocedure ResetTimer; /* CIF ProcedureDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\FindSender.spd' */ /* CIF Specific SDT Page 1 Scale 100 Grid (50,50) AutoNumbered */ procedure FindSender ;FPAR IN/OUT SenderNo Integer; /* CIF DefaultSize (200,100) */ /* CIF CurrentPage 1 */ /* CIF ProcedureStart (400,250) */ start ; /* CIF Line (500,350),(500,400) */ /* CIF Task (400,400) */ task SenderNo:=0; /* CIF Line (500,500),(500,600) */ /* CIF Label Invisible */ grst0: /* CIF Task (300,600),(400,100) */ task SenderNo:=SenderNo+1; /* CIF Line (500,700),(500,725),(525,725),(525,800) */ /* CIF Decision (150,800),(750,100) */ decision TrackNo(SenderNo)=SENDER; /* CIF Answer InvisibleBrackets */ /* CIF Line (525,900),(525,925),(100,925),(100,575),(500,575),(500,600) */ /* CIF TextPosition (275,950) */ (False): /* CIF Answer InvisibleBrackets */ /* CIF Line (525,900),(525,925),(500,925),(500,1100) */ /* CIF TextPosition (525,1025) */ (True): /* CIF Return (450,1100),(100,100) */ return ; /* CIF End Decision */ enddecision; /* CIF Join Invisible */ join grst0; /* CIF End ProcedureDiagram */ endprocedure FindSender; /* CIF ProcedureDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\CloseReq.spd' */ /* CIF Specific SDT Page 1 Scale 100 Grid (50,50) AutoNumbered */ procedure CloseReq; /* CIF DefaultSize (200,100) */ /* CIF CurrentPage 1 */ /* CIF ProcedureStart (500,250) */ start ; /* CIF Line (600,350),(600,400) */ /* CIF Output (500,400) Right */ output Close; /* CIF Line (600,500),(600,550) */ /* CIF Set (400,550),(400,100) */ Set(Now+30, GateClose_TimeOut1); /* CIF Line (600,650),(600,700) */ /* CIF Set (400,700),(400,100) */ Set(Now+2, GateClose_TimeOut2); /* CIF Line (600,800),(600,900) */ /* CIF Return (550,900),(100,100) */ return ; /* CIF End ProcedureDiagram */ endprocedure CloseReq; /* CIF ProcedureDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SetGreen.spd' */ /* CIF Specific SDT Page 1 Scale 100 Grid (50,50) AutoNumbered */ procedure SetGreen; /* CIF DefaultSize (200,100) */ /* CIF CurrentPage 1 */ /* CIF ProcedureStart (350,300) */ start ; /* CIF Line (450,400),(450,450) */ /* CIF Task (300,450),(300,100) */ task n:=NoOfTracks; /* CIF Line (450,550),(450,600) */ /* CIF Label Invisible */ grst1: /* CIF Decision (340,600) */ decision n>0; /* CIF Answer InvisibleBrackets */ /* CIF Line (440,700),(440,725),(500,725),(500,750) */ /* CIF TextPosition (340,700) */ (True): /* CIF Output (350,750),(320,100) Right */ output GreenRQ TO TrackNo(n); /* CIF Line (500,850),(500,875),(440,875),(440,900) */ /* CIF Task (340,900) */ task n:=n-1; /* CIF Line (440,1000),(440,1025),(265,1025),(265,575),(440,575),(440,600) */ /* CIF Answer Right InvisibleBrackets */ /* CIF Line (550,650),(800,650),(800,750) */ /* CIF TextPosition (825,675) */ (False): /* CIF Return (750,750),(100,100) */ return ; /* CIF End Decision */ enddecision; /* CIF Join Invisible */ join grst1; /* CIF End ProcedureDiagram */ endprocedure SetGreen; /* CIF ProcedureDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\EmergencyHandle.spd' */ /* CIF Specific SDT Page 1 Scale 100 Grid (50,50) AutoNumbered */ procedure EmergencyOpenF; /* CIF DefaultSize (200,100) */ /* CIF CurrentPage 1 */ /* CIF ProcedureStart (600,250) */ start ; /* CIF Line (700,350),(700,400) */ /* CIF Output (600,400) Right */ output OpenF; /* CIF Line (700,500),(700,550) */ /* CIF Output (600,550) Right */ output Close; /* CIF Line (700,650),(700,675),(750,675),(750,700) */ /* CIF Task (600,700),(300,100) */ task n:=NoOfTracks; /* CIF Line (750,800),(750,825),(700,825),(700,850) */ /* CIF Label Invisible */ grst2: /* CIF Decision (600,850) */ decision n>0; /* CIF Answer InvisibleBrackets */ /* CIF Line (700,950),(700,975),(750,975),(750,1000) */ /* CIF TextPosition (625,950) */ (True): /* CIF Output (600,1000),(300,100) Right */ output GreenRQ TO TrackNo(n); /* CIF Line (750,1100),(750,1125),(700,1125),(700,1150) */ /* CIF Task (600,1150) */ task n:=n-1; /* CIF Line (700,1250),(700,1275),(525,1275),(525,825),(700,825),(700,850) */ /* CIF Answer InvisibleBrackets */ /* CIF Line (700,950),(700,975),(1000,975),(1000,1250) */ /* CIF TextPosition (1025,1000) */ (False): /* CIF Return (950,1250),(100,100) */ return ; /* CIF End Decision */ enddecision; /* CIF Join Invisible */ join grst2; /* CIF End ProcedureDiagram */ endprocedure EmergencyOpenF; /* CIF ProcedureDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\EmergencyCloseF.spd' */ /* CIF Specific SDT Page 1 Scale 100 Grid (50,50) AutoNumbered */ procedure EmergencyCloseF; /* CIF DefaultSize (200,100) */ /* CIF CurrentPage 1 */ /* CIF ProcedureStart (500,350) */ start ; /* CIF Line (600,450),(600,500) */ /* CIF Output (500,500) Right */ output CloseF; /* CIF Line (600,600),(600,650) */ /* CIF Output (500,650) Right */ output Close; /* CIF Line (600,750),(600,775),(650,775),(650,800) */ /* CIF Task (500,800),(300,100) */ task n:=NoOfTracks; /* CIF Line (650,900),(650,925),(600,925),(600,950) */ /* CIF Label Invisible */ grst3: /* CIF Decision (500,950) */ decision n>0; /* CIF Answer InvisibleBrackets */ /* CIF Line (600,1050),(600,1075),(650,1075),(650,1100) */ /* CIF TextPosition (500,1050) */ (True): /* CIF Output (500,1100),(300,100) Right */ output RedRQ TO TrackNo(n); /* CIF Line (650,1200),(650,1225),(600,1225),(600,1250) */ /* CIF Task (500,1250) */ task n:=n-1; /* CIF Line (600,1350),(600,1375),(400,1375),(400,925),(600,925),(600,950) */ /* CIF Answer InvisibleBrackets */ /* CIF Line (600,1050),(600,1075),(950,1075),(950,1250) */ /* CIF TextPosition (975,1100) */ (False): /* CIF Return (900,1250),(100,100) */ return ; /* CIF End Decision */ enddecision; /* CIF Join Invisible */ join grst3; /* CIF End ProcedureDiagram */ endprocedure EmergencyCloseF; /* CIF ProcedureDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\EmergencySetRedF.spd' */ /* CIF Specific SDT Page 1 Scale 100 Grid (50,50) AutoNumbered */ procedure EmergencySetRedF; /* CIF DefaultSize (200,100) */ /* CIF CurrentPage 1 */ /* CIF ProcedureStart (650,300) */ start ; /* CIF Line (750,400),(750,500) */ /* CIF Output (650,500) Right */ output SetRedF; /* CIF Line (750,600),(750,650) */ /* CIF Output (650,650) Right */ output Close; /* CIF Line (750,750),(750,775),(800,775),(800,800) */ /* CIF Task (650,800),(300,100) */ task n:=NoOfTracks; /* CIF Line (800,900),(800,925),(750,925),(750,950) */ /* CIF Label Invisible */ grst4: /* CIF Decision (650,950) */ decision n>0; /* CIF Answer InvisibleBrackets */ /* CIF Line (750,1050),(750,1075),(800,1075),(800,1100) */ /* CIF TextPosition (675,1050) */ (True): /* CIF Output (650,1100),(300,100) Right */ output GreenRQ TO TrackNo(n); /* CIF Line (800,1200),(800,1225),(750,1225),(750,1250) */ /* CIF Task (650,1250) */ task n:=n-1; /* CIF Line (750,1350),(750,1375),(575,1375),(575,925),(750,925),(750,950) */ /* CIF Answer InvisibleBrackets */ /* CIF Line (750,1050),(750,1075),(1050,1075),(1050,1300) */ /* CIF TextPosition (1075,1100) */ (False): /* CIF Return (1000,1300),(100,100) */ return ; /* CIF End Decision */ enddecision; /* CIF Join Invisible */ join grst4; /* CIF End ProcedureDiagram */ endprocedure EmergencySetRedF; /* CIF BlockDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (150,150),(1600,2000) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\EmergencySignal.sbk' */ /* CIF Specific SDT Page 1 Scale 100 Grid (50,50) AutoNumbered */ block EmergencySignal; /* CIF CurrentPage 1 */ /* CIF SignalRoute (150,900),(850,900) */ /* CIF TextPosition (525,825) */ /* CIF TextPosition (575,925) SignalList1 */ signalroute ESI from env to EmergencySignal with (Emergency); /* CIF SignalRoute (1300,900),(1750,900) */ /* CIF TextPosition (1545,825) */ /* CIF TextPosition (1425,925) SignalList1 */ signalroute RLO from EmergencySignal to env with (EmergencyHandle); /* CIF Process (850,800),(450,250) */ /* CIF TextPosition (911,893) */ process EmergencySignal referenced; /* CIF Connect */ /* CIF TextPosition (75,875) */ connect ES and ESI; /* CIF Connect */ /* CIF TextPosition (1775,875) */ connect RL and RLO; /* CIF End BlockDiagram */ endblock EmergencySignal; /* CIF ProcessDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\EmergencySignal.spr' */ /* CIF Specific SDT Page 1 Scale 100 Grid (250,150) AutoNumbered */ process EmergencySignal; /* CIF DefaultSize (200,100) */ /* CIF CurrentPage 1 */ /* CIF Start (800,400) */ start ; /* CIF Line (900,500),(900,550) */ /* CIF NextState (800,550) */ nextstate Idle; /* CIF State (800,550) */ state Idle; /* CIF Line (900,650),(900,675),(650,675),(650,700) */ /* CIF Input (550,700) Right */ input OpenF; /* CIF Line (650,800),(650,850) */ /* CIF Output (550,850) Right */ output OpenFail; /* CIF Line (650,950),(650,975),(900,975),(900,1000) */ /* CIF Label Invisible */ grst5: /* CIF NextState (800,1000) */ nextstate -; /* CIF Line (900,650),(900,700) */ /* CIF Input (800,700) Right */ input CloseF; /* CIF Line (900,800),(900,850) */ /* CIF Output (800,850) Right */ output CloseFail; /* CIF Line (900,950),(900,1000) */ /* CIF Join Invisible */ join grst5; /* CIF Line (900,650),(900,675),(1150,675),(1150,700) */ /* CIF Input (1050,700) Right */ input SetRedF; /* CIF Line (1150,800),(1150,850) */ /* CIF Output (1050,850) Right */ output SetRedFail; /* CIF Line (1150,950),(1150,975),(900,975),(900,1000) */ /* CIF Join Invisible */ join grst5; /* CIF End State */ endstate; /* CIF End ProcessDiagram */ endprocess EmergencySignal; /* CIF ProcessDiagram */ /* CIF Page 1 (1000,1300) */ /* CIF Frame (0,0),(1000,1300) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\ModifiedCarSensor.spr' */ /* CIF Specific SDT Page 1 Scale 100 Grid (50,50) AutoNumbered */ process ModifiedCarSensor; /* CIF DefaultSize (200,100) */ /* CIF CurrentPage 1 */ /* CIF Start (300,100) */ start ; /* CIF Line (400,200),(400,250) */ /* CIF Output (300,250) Right */ output CarComing; /* CIF Line (400,350),(400,375),(500,375),(500,400) */ /* CIF Set (300,400),(400,100) */ Set(Now+30, CarDelay_TimeOut); /* CIF Line (500,500),(500,525),(400,525),(400,550) */ /* CIF NextState (300,550) */ nextstate Ready; /* CIF State (300,550) */ state Ready; /* CIF Line (400,650),(400,675),(500,675),(500,700) */ /* CIF Input (300,700),(400,100) Right */ input CarDelay_TimeOut; /* CIF Line (500,800),(500,825),(400,825),(400,850) */ /* CIF Output (300,850) Right */ output CarComing; /* CIF Line (400,950),(400,975),(500,975),(500,1000) */ /* CIF Set (300,1000),(400,100) */ Set(Now+30, CarDelay_TimeOut); /* CIF Line (500,1100),(500,1125),(400,1125),(400,1150) */ /* CIF NextState (300,1150) */ nextstate -; /* CIF End State */ endstate; /* CIF End ProcessDiagram */ endprocess ModifiedCarSensor;