/* CIF PackageDiagram */ /* CIF Page 1 (3334,3238) */ /* CIF Frame (95,95),(1667,1619) */ /* CIF TextPosition (119,185) */ /* CIF TextPosition (1666,119) PageName */ /* CIF Page 2 (3334,3238) */ /* CIF Frame (95,95),(1667,1619) */ /* CIF TextPosition (119,185) */ /* CIF TextPosition (1666,119) PageName */ /* CIF Specific CSDL Version 1.1 */ /* CIF Specific SDT OriginalFileName 'RailroadCrossing.sun' */ /* CIF Specific SDT Page 1 Scale 90 Grid (50,50) AutoNumbered */ PACKAGE RailroadCrossing ; /* CIF CurrentPage 1 */ /* CIF Text (952,190),(738,691) */ /* CIF TextPosition (952,190) */ /* track layout */ synonym posSensor1 Real=3000; /* position of the "approaching sensor" */ synonym posSignal Real=4000; /* position of the "signal" */ synonym posSensor2 Real=4500; /* position of the "leaving sensor" */ synonym posEnd Real=5000; /* end of the track*/ /* track parameters */ synonym fastSpeed Real=80; /* maximal speed of fast trains*/ synonym regularSpeed Real=50; /* maximal speed of regular trains*/ /* CIF End Text */ /* CIF Text (142,190),(762,1238) */ /* CIF TextPosition (142,190) */ /* signal definitions */ signal openGate; signal closeGate; signal gateOpen; signal gateClosed; signal trainApproaching( TrackId ); signal trainLeaving( TrackId ); signal detectLeaving( TrackId ); signal detectApproaching( TrackId ); signal trainSignal( SignalStatus ); signal setSignals( TrackList, SignalStatus ); signal settingDone( TrackList, SignalStatus ); signal leaving; signal carsWaiting; signal manyCarsWaiting; signal trackAnnounce( TrackId,Real ); signal inSight( TrackId,PId ); signal position( Real,Real ); /* signallist definitions */ signallist trainSensor=detectApproaching, detectLeaving; signallist trainDetection=trainApproaching, trainLeaving; signallist carSensor=carsWaiting, manyCarsWaiting; signallist gateControl=closeGate,openGate; signallist gateStatus=gateClosed, gateOpen; /* CIF End Text */ /* CIF CurrentPage 2 */ /* CIF Text (1071,214),(548,95) */ /* CIF TextPosition (1071,214) */ /* general purpose procedures*/ /* CIF End Text */ /* CIF Text (142,214),(834,1119) */ /* CIF TextPosition (142,214) */ /* type definitions */ /* signal status */ value type SignalStatus; literals red, green endvalue type; /* track identifier */ syntype TrackId=PId endsyntype; /* list of all tracks */ syntype TrackList=String(TrackId,Emptylist) endsyntype; /* information about a track */ value type TrackInfo struct speed Real; /* maximal speed */ count Integer; /* number of trains between the sensors*/ sight PId; /* trains which ist in range of sight of signal */ sig SignalStatus; /* signal status */ endvalue type; syntype TrackTable=Array(TrackId,TrackInfo) endsyntype; /* CIF End Text */ /* CIF Procedure (1071,357),(191,95) */ /* CIF TextPosition (1071,357) */ PROCEDURE minmax REFERENCED; /* CIF End PackageDiagram */ ENDPACKAGE; /* CIF ProcedureDiagram */ /* CIF Page 1 (3190,3190) */ /* CIF Frame (95,95),(1595,1595) */ /* CIF TextPosition (119,185) */ /* CIF TextPosition (1595,119) PageName */ /* CIF Specific CSDL Version 1.1 */ /* CIF Specific SDT OriginalFileName 'minmax.spd' */ /* CIF Specific SDT Page 1 Scale 90 Grid (50,50) AutoNumbered */ PROCEDURE<> minmax ; FPAR lowerBound Real,upperBound Real,val Real;RETURNS Real; /* CIF CurrentPage 1 */ /* CIF ProcedureStart (428,357),(191,95) */ /* CIF TextPosition (428,357) */ START; /* CIF Line (523,452),(523,619) */ /* CIF Decision (428,619),(191,95) */ /* CIF TextPosition (428,619) */ DECISION valupperBound ; /* CIF Answer InvisibleBrackets */ /* CIF Line (619,1000),(809,1000),(809,1143) */ /* CIF TextPosition (833,1071) */ ( true ): /* CIF Task (714,1143),(190,95) */ /* CIF TextPosition (714,1143) */ TASK val:=upperBound; /* CIF Line (809,1238),(809,1309),(523,1309),(523,1452) */ /* CIF Join Invisible */ JOIN minmaxLRailroadCrossingCGRlooplabel117__i; /* CIF Answer InvisibleBrackets */ /* CIF Line (523,1047),(523,1452) */ /* CIF TextPosition (547,1071) */ ( false ): /* CIF Join Invisible */ JOIN minmaxLRailroadCrossingCGRlooplabel117__i; /* CIF End Decision */ ENDDECISION; /* CIF End Decision */ ENDDECISION; /* CIF End ProcedureDiagram */ ENDPROCEDURE; /* CIF SystemDiagram */ /* CIF Page 1 (3428,3238) */ /* CIF Frame (95,166),(1714,1619) */ /* CIF TextPosition (119,256) */ /* CIF TextPosition (1714,190) PageName */ /* CIF PackageReference (95,47),(381,95) */ /* CIF TextPosition (95,47) */ /* CIF Specific CSDL Version 1.1 */ /* CIF Specific SDT OriginalFileName 'RailroadCrossing.ssy' */ /* CIF Specific SDT Page 1 Scale 90 Grid (50,50) AutoNumbered */ use RailroadCrossing; SYSTEM RailroadCrossing ; /* CIF CurrentPage 1 */ /* CIF Channel (1809,1047),(1119,1047) */ /* CIF TextPosition (1381,1000) */ /* CIF TextPosition (1166,1071) Signallist1 */ CHANNEL PanelChannel NODELAY FROM ENV TO theController WITH(gateControl) ; ENDCHANNEL; /* CIF Text (142,285),(477,96) */ /* CIF TextPosition (142,285) */ synonym nrTracks Integer=4; /* number of tracks */ /* CIF End Text */ /* CIF Channel (881,1119),(881,1524) */ /* CIF TextPosition (904,1309) */ /* CIF TextPosition (666,1452) Signallist1 */ /* CIF TextPosition (476,1143) Signallist2 */ CHANNEL CrossingChannel NODELAY FROM theController TO theCrossing WITH(gateControl) ; FROM theCrossing TO theController WITH(carSensor), (gateStatus) ; ENDCHANNEL; /* CIF Block (642,1524),(477,142) */ /* CIF TextPosition (642,1524) */ BLOCK theCrossing(1)REFERENCED; /* CIF Channel (881,595),(881,976) */ /* CIF TextPosition (904,762) */ /* CIF TextPosition (333,904) Signallist1 */ /* CIF TextPosition (666,642) Signallist2 */ CHANNEL TrackChannel NODELAY FROM theTracks VIA g1 TO theController WITH(trainSensor), inSight, trackAnnounce ; FROM theController TO theTracks VIA g1 WITH trainSignal ; ENDCHANNEL; /* CIF BlockType (166,476),(238,95) */ /* CIF TextPosition (166,476) */ BLOCK TYPE Track REFERENCED; /* CIF Block (642,452),(477,143) */ /* CIF TextPosition (642,452) */ BLOCK theTracks(nrTracks):Track; /* CIF Block (642,976),(477,143) */ /* CIF TextPosition (642,976) */ BLOCK theController(1)REFERENCED; /* CIF End SystemDiagram */ ENDSYSTEM; /* CIF ServiceTypeDiagram */ /* CIF Page 1 (3238,4096) */ /* CIF Frame (95,95),(1619,2048) */ /* CIF TextPosition (119,185) */ /* CIF TextPosition (1619,119) PageName */ /* CIF Specific CSDL Version 1.1 */ /* CIF Specific SDT OriginalFileName 'FastTrainsPrecedenceController.sst' */ /* CIF Specific SDT Page 1 Scale 90 Grid (50,50) AutoNumbered */ SERVICE TYPE<> FastTrainsPrecedenceController INHERITS BasicController; /* CIF CurrentPage 1 */ /* CIF Text (1023,357),(548,143) */ /* CIF TextPosition (1023,357) */ /* timer */ timer t1:=closureTime; /* CIF End Text */ /* CIF Text (1023,214),(548,119) */ /* CIF TextPosition (1023,214) */ synonym closureTime Duration=120; /* closure time of the gate */ /* CIF End Text */ /* CIF Procedure (1023,690),(191,95) */ /* CIF TextPosition (1023,690) */ PROCEDURE switchFast REFERENCED /* CIF Comment (1309,690),(334,95) */ /* CIF TextPosition (1309,690) */ /* CIF Line (1309,738),(1214,738) Dashed */ COMMENT ' signals of regular tracks to red, close the gate '; /* CIF Procedure (1023,547),(191,95) */ /* CIF TextPosition (1023,547) */ PROCEDURE regularTracks REFERENCED /* CIF Comment (1309,547),(334,95) */ /* CIF TextPosition (1309,547) */ /* CIF Line (1309,595),(1214,595) Dashed */ COMMENT ' returns all regular tracks '; /* CIF State (166,928),(191,95) */ /* CIF TextPosition (166,928) */ STATE trains ; /* CIF Line (261,1023),(261,1095) */ /* CIF Input (166,1095),(191,95) Right */ /* CIF TextPosition (166,1095) */ INPUT redefined carsWaiting ; /* CIF Line (261,1190),(261,1381) */ /* CIF Decision (166,1381),(191,95) */ /* CIF TextPosition (166,1381) */ DECISION call totalCount ; /* CIF Answer InvisibleBrackets */ /* CIF Line (261,1476),(261,1643) */ /* CIF TextPosition (285,1524) */ ( 0 ): /* CIF ProcedureCall (166,1643),(191,95) */ /* CIF TextPosition (166,1643) */ CALL switchCars ; /* CIF Line (261,1738),(261,1809) */ /* CIF Set (166,1809),(191,96) */ /* CIF TextPosition (166,1809) */ set(t1) ; /* CIF Line (261,1905),(261,1976) */ /* CIF NextState (166,1976),(191,95) */ /* CIF TextPosition (166,1976) */ NEXTSTATE cars ; /* CIF Answer InvisibleBrackets */ /* CIF Line (357,1428),(547,1428),(547,1643) */ /* CIF TextPosition (571,1500) */ ELSE: /* CIF ProcedureCall (452,1643),(190,95) */ /* CIF TextPosition (452,1643) */ CALL switchFast ; /* CIF Line (547,1738),(547,1976) */ /* CIF NextState (452,1976),(190,95) */ /* CIF TextPosition (452,1976) */ NEXTSTATE fast ; /* CIF End Decision */ ENDDECISION; /* CIF End State */ ENDSTATE; /* CIF State (881,928),(190,95) */ /* CIF TextPosition (881,928) */ STATE fast ; /* CIF Line (976,1023),(976,1095) */ /* CIF Input (881,1095),(190,95) Right */ /* CIF TextPosition (881,1095) */ INPUT redefined trainLeaving(track) ; /* CIF Line (976,1190),(976,1238) */ /* CIF Task (881,1238),(190,95) */ /* CIF TextPosition (881,1238) */ TASK trackTbl(track).count:= trackTbl(track).count-1; /* CIF Line (976,1333),(976,1381) */ /* CIF Decision (881,1381),(190,95) */ /* CIF TextPosition (881,1381) */ DECISION call totalCount /* CIF Comment (1357,1357),(333,143) */ /* CIF TextPosition (1357,1357) */ /* CIF Line (1357,1428),(1095,1428),(1095,1428),(1071,1428) Dashed */ COMMENT ' total number of trains (all tracks) between the sensors '; /* CIF Answer InvisibleBrackets */ /* CIF Line (976,1476),(976,1643) */ /* CIF TextPosition (1000,1547) */ ( 0 ): /* CIF ProcedureCall (881,1643),(190,95) */ /* CIF TextPosition (881,1643) */ CALL switchCars ; /* CIF Line (976,1738),(976,1809) */ /* CIF Set (881,1809),(190,96) */ /* CIF TextPosition (881,1809) */ set(t1) ; /* CIF Line (976,1905),(976,1976) */ /* CIF NextState (881,1976),(190,95) */ /* CIF TextPosition (881,1976) */ NEXTSTATE cars ; /* CIF Answer InvisibleBrackets */ /* CIF Line (1071,1428),(1262,1428),(1262,1976) */ /* CIF TextPosition (1285,1547) */ ELSE: /* CIF NextState (1166,1976),(191,95) */ /* CIF TextPosition (1166,1976) */ NEXTSTATE - ; /* CIF End Decision */ ENDDECISION; /* CIF End State */ ENDSTATE; /* CIF State (166,309),(191,95) */ /* CIF TextPosition (166,309) */ STATE cars ; /* CIF Line (261,404),(261,452) */ /* CIF Input (166,452),(191,95) Right */ /* CIF TextPosition (166,452) */ INPUT t1 ; /* CIF Line (261,547),(261,619) */ /* CIF ProcedureCall (166,619),(191,95) */ /* CIF TextPosition (166,619) */ CALL switchTrains ; /* CIF Line (261,714),(261,762) */ /* CIF NextState (166,762),(191,95) */ /* CIF TextPosition (166,762) */ NEXTSTATE trains ; /* CIF End State */ ENDSTATE; /* CIF End ServiceTypeDiagram */ ENDSERVICE TYPE; /* CIF ProcedureDiagram */ /* CIF Page 1 (3190,3190) */ /* CIF Frame (95,95),(1595,1595) */ /* CIF TextPosition (119,185) */ /* CIF TextPosition (1595,119) PageName */ /* CIF Specific CSDL Version 1.1 */ /* CIF Specific SDT OriginalFileName 'breakingDist.spd' */ /* CIF Specific SDT Page 1 Scale 90 Grid (50,50) AutoNumbered */ PROCEDURE<> breakingDist ; RETURNS Real; /* CIF CurrentPage 1 */ /* CIF Text (1190,261),(357,167) */ /* CIF TextPosition (1190,261) */ /* variables */ DCL sp, dist Real; /* CIF End Text */ /* CIF ProcedureStart (238,381),(190,95) */ /* CIF TextPosition (238,381) */ START; /* CIF Line (333,476),(333,523) */ /* CIF Task (238,523),(190,96) */ /* CIF TextPosition (238,523) */ TASK sp:=speed; dist:=0; /* CIF Line (333,619),(333,666) */ /* CIF Label Invisible */ breakingDistLRailroadCrossingAGRlooplabel118__i: /* CIF Decision (238,666),(190,96) */ /* CIF TextPosition (238,666) */ DECISION sp ; /* CIF Answer InvisibleBrackets */ /* CIF Line (333,762),(333,809) */ /* CIF TextPosition (357,762) */ (>0 ): /* CIF Task (238,809),(190,95) */ /* CIF TextPosition (238,809) */ TASK dist:=dist+sp; /* CIF Line (333,904),(333,952) */ /* CIF Task (238,952),(190,95) */ /* CIF TextPosition (238,952) */ TASK sp:=sp+minAccel; /* CIF Line (333,1047),(333,1095),(166,1095),(166,642),(333,642),(333,666) */ /* CIF Join Invisible */ JOIN breakingDistLRailroadCrossingAGRlooplabel118__i; /* CIF Answer InvisibleBrackets */ /* CIF Line (428,714),(571,714),(571,1095) */ /* CIF TextPosition (619,762) */ ELSE: /* CIF Return (523,1095),(96,95) */ /* CIF TextPosition (642,1095) */ RETURN dist ; /* CIF End Decision */ ENDDECISION; /* CIF End ProcedureDiagram */ ENDPROCEDURE; /* CIF ServiceDiagram */ /* CIF Page 1 (3238,3334) */ /* CIF Frame (95,95),(1619,1667) */ /* CIF TextPosition (119,185) */ /* CIF TextPosition (1619,119) PageName */ /* CIF Specific CSDL Version 1.1 */ /* CIF Specific SDT OriginalFileName 'theSignalControl.ssr' */ /* CIF Specific SDT Page 1 Scale 90 Grid (50,50) AutoNumbered */ SERVICE<> theSignalControl ; /* CIF CurrentPage 1 */ /* CIF Text (1166,214),(477,500) */ /* CIF TextPosition (1166,214) */ /* variables */ DCL tracks TrackList; /* tracks to set */ DCL lstCopy TrackList; /* current tracks */ DCL toDo TrackList; /* remaining tracks*/ DCL tr TrackId; /* current track */ DCL sigStatus SignalStatus; /* desired signal status */ /* CIF End Text */ /* CIF Procedure (1166,762),(191,95) */ /* CIF TextPosition (1166,762) */ PROCEDURE setSignal REFERENCED /* CIF Comment (1452,762),(191,95) */ /* CIF TextPosition (1452,762) */ /* CIF Line (1452,809),(1357,809) Dashed */ COMMENT ' set a signal '; /* CIF Start (285,190),(191,95) */ /* CIF TextPosition (285,190) */ START; /* CIF Line (381,285),(381,333) */ /* CIF NextState (285,333),(191,95) */ /* CIF TextPosition (285,333) */ NEXTSTATE idle ; /* CIF State (571,333),(191,95) */ /* CIF TextPosition (571,333) */ STATE waiting /* CIF Comment (809,309),(286,143) */ /* CIF TextPosition (809,309) */ /* CIF Line (809,381),(785,381),(785,381),(762,381) Dashed */ COMMENT ' not all signals have been set, waiting for a leaving train '; /* CIF Line (666,428),(666,476) */ /* CIF Input (571,476),(191,95) Right */ /* CIF TextPosition (571,476) */ INPUT leaving ; /* CIF Line (666,571),(666,595),(381,595),(381,642) */ /* CIF Label Invisible */ theSignalControlKRailroadCrossingAGRlooplabel119__i: /* CIF Task (285,642),(191,143) */ /* CIF TextPosition (285,642) */ TASK lstCopy:=toDo; tracks:=toDo; toDo:=Emptylist; /* CIF Line (381,785),(381,881) */ /* CIF Label Invisible */ theSignalControlKRailroadCrossingAGRlooplabel120__i: /* CIF Decision (285,881),(191,95) */ /* CIF TextPosition (285,881) */ DECISION lstCopy /* CIF Comment (595,881),(238,95) */ /* CIF TextPosition (595,881) */ /* CIF Line (595,928),(476,928) Dashed */ COMMENT ' for all signals in the list lstCopy '; /* CIF Answer InvisibleBrackets */ /* CIF Line (381,976),(381,1000),(1190,1000),(1190,1047) */ /* CIF TextPosition (1214,1000) */ ( Emptylist ): /* CIF Decision (1095,1047),(190,96) */ /* CIF TextPosition (1095,1047) */ DECISION toDo ; /* CIF Answer InvisibleBrackets */ /* CIF Line (1285,1095),(1452,1095),(1452,1428) */ /* CIF TextPosition (1476,1166) */ ( Emptylist ): /* CIF Output (1357,1428),(190,96) Right */ /* CIF TextPosition (1357,1428) */ OUTPUT settingDone (tracks, sigStatus) ; /* CIF Line (1452,1524),(1452,1595) */ /* CIF NextState (1357,1595),(190,95) */ /* CIF TextPosition (1357,1595) */ NEXTSTATE idle ; /* CIF Answer InvisibleBrackets */ /* CIF Line (1190,1143),(1190,1595) */ /* CIF TextPosition (1214,1166) */ ELSE: /* CIF NextState (1095,1595),(190,95) */ /* CIF TextPosition (1095,1595) */ NEXTSTATE waiting ; /* CIF End Decision */ ENDDECISION; /* CIF Answer InvisibleBrackets */ /* CIF Line (381,976),(381,1071) */ /* CIF TextPosition (404,1000) */ ELSE: /* CIF Task (285,1071),(191,95) */ /* CIF TextPosition (285,1071) */ TASK tr:=first(lstCopy); /* CIF Line (381,1166),(381,1214) */ /* CIF Decision (285,1214),(191,95) */ /* CIF TextPosition (285,1214) */ DECISION trackTbl(tr).count=0 or sigStatus=green /* CIF Comment (904,1214),(191,95) */ /* CIF TextPosition (904,1214) */ /* CIF Line (904,1262),(476,1262) Dashed */ COMMENT ' signal can be set '; /* CIF Answer InvisibleBrackets */ /* CIF Line (476,1262),(714,1262),(714,1428) */ /* CIF TextPosition (738,1357) */ ( false ): /* CIF Task (619,1428),(190,96) */ /* CIF TextPosition (619,1428) */ TASK toDo:=toDo//mkstring(tr); /* CIF Line (714,1524),(714,1571),(381,1571),(381,1619) */ /* CIF Label Invisible */ theSignalControlKRailroadCrossingAGRlooplabel121__i: /* CIF Task (285,1619),(191,95) */ /* CIF TextPosition (285,1619) */ TASK lstCopy:= substring(lstCopy,2,length(lstCopy)-1); /* CIF Line (381,1714),(381,1738),(166,1738),(166,857),(381,857),(381,881) */ /* CIF Join Invisible */ JOIN theSignalControlKRailroadCrossingAGRlooplabel120__i; /* CIF Answer InvisibleBrackets */ /* CIF Line (381,1309),(381,1428) */ /* CIF TextPosition (404,1333) */ ( true ): /* CIF ProcedureCall (285,1428),(191,96) */ /* CIF TextPosition (285,1428) */ CALL setSignal (tr,sigStatus) ; /* CIF Line (381,1524),(381,1619) */ /* CIF Join Invisible */ JOIN theSignalControlKRailroadCrossingAGRlooplabel121__i; /* CIF End Decision */ ENDDECISION; /* CIF End Decision */ ENDDECISION; /* CIF End State */ ENDSTATE; /* CIF State (285,333),(191,95) */ /* CIF TextPosition (285,333) */ STATE idle ; /* CIF Line (381,428),(381,476) */ /* CIF Input (285,476),(191,95) Right */ /* CIF TextPosition (285,476) */ INPUT setSignals (toDo, sigStatus) ; /* CIF Line (381,571),(381,642) */ /* CIF Join Invisible */ JOIN theSignalControlKRailroadCrossingAGRlooplabel119__i; /* CIF End State */ ENDSTATE; /* CIF End ServiceDiagram */ ENDSERVICE; /* CIF ProcedureDiagram */ /* CIF Page 1 (3190,3190) */ /* CIF Frame (95,95),(1595,1595) */ /* CIF TextPosition (119,185) */ /* CIF TextPosition (1595,119) PageName */ /* CIF Specific CSDL Version 1.1 */ /* CIF Specific SDT OriginalFileName 'switchTrains.spd' */ /* CIF Specific SDT Page 1 Scale 90 Grid (50,50) AutoNumbered */ PROCEDURE<> switchTrains ; /* CIF CurrentPage 1 */ /* CIF ProcedureStart (190,285),(191,96) */ /* CIF TextPosition (190,285) */ START; /* CIF Line (285,381),(285,452) */ /* CIF Output (190,452),(191,95) Right */ /* CIF TextPosition (190,452) */ OUTPUT closeGate via g1 /* CIF Comment (928,452),(286,95) */ /* CIF TextPosition (928,452) */ /* CIF Line (928,500),(381,500) Dashed */ COMMENT ' close the gate '; /* CIF Line (285,547),(285,619) */ /* CIF NextState (190,619),(191,95) */ /* CIF TextPosition (190,619) */ NEXTSTATE waiting /* CIF Comment (928,619),(286,95) */ /* CIF TextPosition (928,619) */ /* CIF Line (928,666),(381,666) Dashed */ COMMENT ' wait until the gate has been closed '; /* CIF State (190,619),(191,95) */ /* CIF TextPosition (190,619) */ STATE waiting /* CIF Comment (928,619),(286,95) */ /* CIF TextPosition (928,619) */ /* CIF Line (928,666),(381,666) Dashed */ COMMENT ' wait until the gate has been closed '; /* CIF Line (285,714),(285,738),(547,738),(547,809) */ /* CIF Save (452,809),(190,95) */ /* CIF TextPosition (452,809) */ SAVE* ; /* CIF Line (285,714),(285,785) */ /* CIF Input (190,785),(191,96) Right */ /* CIF TextPosition (190,785) */ INPUT gateClosed ; /* CIF Line (285,881),(285,952) */ /* CIF Output (190,952),(191,95) Right */ /* CIF TextPosition (190,952) */ OUTPUT setSignals (trackLst,green) /* CIF Comment (928,952),(286,95) */ /* CIF TextPosition (928,952) */ /* CIF Line (928,1000),(381,1000) Dashed */ COMMENT ' finally clear all stopping signals '; /* CIF Line (285,1047),(285,1119) */ /* CIF Return (238,1119),(95,95) */ /* CIF TextPosition (370,1095) */ RETURN; /* CIF End State */ ENDSTATE; /* CIF End ProcedureDiagram */ ENDPROCEDURE; /* CIF ProcedureDiagram */ /* CIF Page 1 (3190,3190) */ /* CIF Frame (95,95),(1595,1595) */ /* CIF TextPosition (119,185) */ /* CIF TextPosition (1595,119) PageName */ /* CIF Specific CSDL Version 1.1 */ /* CIF Specific SDT OriginalFileName 'switchBoth.spd' */ /* CIF Specific SDT Page 1 Scale 90 Grid (50,50) AutoNumbered */ PROCEDURE<> switchBoth ; /* CIF CurrentPage 1 */ /* CIF ProcedureStart (238,309),(190,95) */ /* CIF TextPosition (238,309) */ START; /* CIF Line (333,404),(333,476) */ /* CIF Output (238,476),(190,95) Right */ /* CIF TextPosition (238,476) */ OUTPUT openGate via g1 /* CIF Comment (785,476),(238,95) */ /* CIF TextPosition (785,476) */ /* CIF Line (785,523),(428,523) Dashed */ COMMENT ' open the gate '; /* CIF Line (333,571),(333,642) */ /* CIF Output (238,642),(190,96) Right */ /* CIF TextPosition (238,642) */ OUTPUT setSignals(trackLst,green) /* CIF Comment (785,642),(238,96) */ /* CIF TextPosition (785,642) */ /* CIF Line (785,690),(428,690) Dashed */ COMMENT ' clear all stopping signals '; /* CIF Line (333,738),(333,833) */ /* CIF Return (285,833),(96,95) */ /* CIF TextPosition (441,881) */ RETURN; /* CIF End ProcedureDiagram */ ENDPROCEDURE; /* CIF ProcedureDiagram */ /* CIF Page 1 (3190,3190) */ /* CIF Frame (95,95),(1595,1595) */ /* CIF TextPosition (119,185) */ /* CIF TextPosition (1595,119) PageName */ /* CIF Specific CSDL Version 1.1 */ /* CIF Specific SDT OriginalFileName 'switchCars.spd' */ /* CIF Specific SDT Page 1 Scale 90 Grid (50,50) AutoNumbered */ PROCEDURE<> switchCars ; /* CIF CurrentPage 1 */ /* CIF Text (1262,214),(357,143) */ /* CIF TextPosition (1262,214) */ DCL tr TrackList; DCL st SignalStatus; /* CIF End Text */ /* CIF ProcedureStart (238,285),(190,96) */ /* CIF TextPosition (238,285) */ START; /* CIF Line (333,381),(333,452) */ /* CIF Output (238,452),(190,95) Right */ /* CIF TextPosition (238,452) */ OUTPUT setSignals(trackLst,red) /* CIF Comment (904,452),(334,95) */ /* CIF TextPosition (904,452) */ /* CIF Line (904,500),(428,500) Dashed */ COMMENT ' set all stopping signals '; /* CIF Line (333,547),(333,619) */ /* CIF Label Invisible */ switchCarsLRailroadCrossingAGRlooplabel122__i: /* CIF NextState (238,619),(190,95) */ /* CIF TextPosition (238,619) */ NEXTSTATE waiting2 /* CIF Comment (904,619),(334,95) */ /* CIF TextPosition (904,619) */ /* CIF Line (904,666),(428,666) Dashed */ COMMENT ' wait until all signals have been set '; /* CIF State (238,619),(190,95) */ /* CIF TextPosition (238,619) */ STATE waiting2 /* CIF Comment (904,619),(334,95) */ /* CIF TextPosition (904,619) */ /* CIF Line (904,666),(428,666) Dashed */ COMMENT ' wait until all signals have been set '; /* CIF Line (333,714),(333,738),(595,738),(595,809) */ /* CIF Save (500,809),(190,95) */ /* CIF TextPosition (500,809) */ SAVE* ; /* CIF Line (333,714),(333,809) */ /* CIF Input (238,809),(190,95) Right */ /* CIF TextPosition (238,809) */ INPUT settingDone(tr,st) ; /* CIF Line (333,904),(333,976) */ /* CIF Decision (238,976),(190,95) */ /* CIF TextPosition (238,976) */ DECISION tr=trackLst and st=red ; /* CIF Answer InvisibleBrackets */ /* CIF Line (238,1023),(166,1023),(166,595),(333,595),(333,619) */ /* CIF TextPosition (166,1047) */ ( false ): /* CIF NextState (238,619),(190,95) */ /* CIF TextPosition (238,619) */ NEXTSTATE waiting2 /* CIF Comment (904,619),(334,95) */ /* CIF TextPosition (904,619) */ /* CIF Line (904,666),(428,666) Dashed */ COMMENT ' wait until all signals have been set '; /* CIF Answer InvisibleBrackets */ /* CIF Line (333,1071),(333,1214) */ /* CIF TextPosition (357,1143) */ ( true ): /* CIF Output (238,1214),(190,95) Right */ /* CIF TextPosition (238,1214) */ OUTPUT openGate via g1 /* CIF Comment (904,1190),(334,143) */ /* CIF TextPosition (904,1190) */ /* CIF Line (904,1262),(452,1262),(452,1262),(428,1262) Dashed */ COMMENT ' open the gate (C1: no trains between the sensors) '; /* CIF Line (333,1309),(333,1404) */ /* CIF Return (285,1404),(96,96) */ /* CIF TextPosition (394,1190) */ RETURN; /* CIF End Decision */ ENDDECISION; /* CIF End State */ ENDSTATE; /* CIF End ProcedureDiagram */ ENDPROCEDURE; /* CIF ProcedureDiagram */ /* CIF Page 1 (3190,3190) */ /* CIF Frame (95,95),(1595,1595) */ /* CIF TextPosition (119,185) */ /* CIF TextPosition (1595,119) PageName */ /* CIF Specific CSDL Version 1.1 */ /* CIF Specific SDT OriginalFileName 'totalCount.spd' */ /* CIF Specific SDT Page 1 Scale 90 Grid (50,50) AutoNumbered */ PROCEDURE<> totalCount ; RETURNS Integer; /* CIF CurrentPage 1 */ /* CIF Text (1143,214),(476,238) */ /* CIF TextPosition (1143,214) */ /* variables */ DCL lstCopy TrackList; DCL i Integer; DCL tr TrackId; /* CIF End Text */ /* CIF ProcedureStart (261,285),(191,96) */ /* CIF TextPosition (261,285) */ START; /* CIF Line (357,381),(357,452) */ /* CIF Task (261,452),(191,95) */ /* CIF TextPosition (261,452) */ TASK lstCopy:=trackLst; i:=0; /* CIF Line (357,547),(357,642) */ /* CIF Label Invisible */ totalCountLRailroadCrossingAGRlooplabel123__i: /* CIF Decision (261,642),(191,96) */ /* CIF TextPosition (261,642) */ DECISION lstCopy /* CIF Comment (976,642),(190,96) */ /* CIF TextPosition (976,642) */ /* CIF Line (976,690),(452,690) Dashed */ COMMENT ' for all tracks '; /* CIF Answer InvisibleBrackets */ /* CIF Line (452,690),(642,690),(642,904) */ /* CIF TextPosition (476,642) */ ( Emptylist ): /* CIF Return (595,904),(95,96) */ /* CIF TextPosition (714,904) */ RETURN i ; /* CIF Answer InvisibleBrackets */ /* CIF Line (357,738),(357,833) */ /* CIF TextPosition (381,762) */ ELSE: /* CIF Task (261,833),(191,95) */ /* CIF TextPosition (261,833) */ TASK tr:=first(lstCopy); /* CIF Line (357,928),(357,1000) */ /* CIF Task (261,1000),(191,95) */ /* CIF TextPosition (261,1000) */ TASK i:=i+trackTbl(tr).count; /* CIF Line (357,1095),(357,1166) */ /* CIF Task (261,1166),(191,96) */ /* CIF TextPosition (261,1166) */ TASK lstCopy:= substring(lstCopy,2,length(lstCopy)-1); /* CIF Line (357,1262),(357,1285),(142,1285),(142,619),(357,619),(357,642) */ /* CIF Join Invisible */ JOIN totalCountLRailroadCrossingAGRlooplabel123__i; /* CIF End Decision */ ENDDECISION; /* CIF End ProcedureDiagram */ ENDPROCEDURE; /* CIF ServiceDiagram */ /* CIF Page 1 (3190,3190) */ /* CIF Frame (95,95),(1595,1595) */ /* CIF TextPosition (119,185) */ /* CIF TextPosition (1595,119) PageName */ /* CIF Specific CSDL Version 1.1 */ /* CIF Specific SDT OriginalFileName 'theSensorDebouncer.ssr' */ /* CIF Specific SDT Page 1 Scale 90 Grid (50,50) AutoNumbered */ SERVICE<> theSensorDebouncer ; /* CIF CurrentPage 1 */ /* CIF Text (142,190),(524,286) */ /* CIF TextPosition (142,190) */ /* timer */ timer t1(TrackId); timer t2(TrackId); /* variables */ DCL track TrackId; /* CIF End Text */ /* CIF Text (738,190),(524,119) */ /* CIF TextPosition (738,190) */ synonym threshold Duration=1; /* debouncing threshold */ /* CIF End Text */ /* CIF Start (142,523),(191,96) */ /* CIF TextPosition (142,523) */ START; /* CIF Line (238,619),(238,690) */ /* CIF NextState (142,690),(191,95) */ /* CIF TextPosition (142,690) */ NEXTSTATE idle ; /* CIF State (142,690),(191,95) */ /* CIF TextPosition (142,690) */ STATE idle ; /* CIF Line (238,785),(238,809),(1262,809),(1262,881) */ /* CIF Input (1166,881),(191,95) Right */ /* CIF TextPosition (1166,881) */ INPUT t2(track) /* CIF Comment (1381,857),(285,143) */ /* CIF TextPosition (1381,857) */ /* CIF Line (1381,928),(1367,928),(1367,928),(1357,928) Dashed */ COMMENT ' no sensor signal for at least threshold time units '; /* CIF Line (1262,976),(1262,1262) */ /* CIF Output (1166,1262),(191,95) Right */ /* CIF TextPosition (1166,1262) */ OUTPUT trainLeaving (track) ; /* CIF Line (1262,1357),(1262,1381) */ /* CIF Output (1166,1381),(191,95) Right */ /* CIF TextPosition (1166,1381) */ OUTPUT leaving /* CIF Comment (1381,1381),(285,95) */ /* CIF TextPosition (1381,1381) */ /* CIF Line (1381,1428),(1357,1428) Dashed */ COMMENT ' wake up theSignalControl '; /* CIF Line (1262,1476),(1262,1500),(238,1500),(238,1524) */ /* CIF Label Invisible */ theSensorDebouncerKRailroadCrossingAGRlooplabel124__i: /* CIF NextState (142,1524),(191,95) */ /* CIF TextPosition (142,1524) */ NEXTSTATE - ; /* CIF Line (238,785),(238,809),(1023,809),(1023,881) */ /* CIF Input (928,881),(191,95) Right */ /* CIF TextPosition (928,881) */ INPUT t1(track) ; /* CIF Line (1023,976),(1023,1262) */ /* CIF Output (928,1262),(191,95) Right */ /* CIF TextPosition (928,1262) */ OUTPUT trainApproaching (track) ; /* CIF Line (1023,1357),(1023,1500),(238,1500),(238,1524) */ /* CIF NextState (142,1524),(191,95) */ /* CIF TextPosition (142,1524) */ NEXTSTATE - ; /* CIF Line (238,785),(238,809),(523,809),(523,881) */ /* CIF Input (428,881),(191,95) Right */ /* CIF TextPosition (428,881) */ INPUT detectLeaving (track) ; /* CIF Line (523,976),(523,1071) */ /* CIF Set (428,1071),(191,95) */ /* CIF TextPosition (428,1071) */ set(NOW+threshold, t2(track)) /* CIF Comment (690,1000),(286,238) */ /* CIF TextPosition (690,1000) */ /* CIF Line (690,1119),(642,1119),(642,1119),(619,1119) Dashed */ COMMENT ' sensor signals in the next threshold time units will not be passed to theCentralController '; /* CIF Line (523,1166),(523,1190),(238,1190),(238,1524) */ /* CIF NextState (142,1524),(191,95) */ /* CIF TextPosition (142,1524) */ NEXTSTATE - ; /* CIF Line (238,785),(238,881) */ /* CIF Input (142,881),(191,95) Right */ /* CIF TextPosition (142,881) */ INPUT detectApproaching (track) ; /* CIF Line (238,976),(238,1071) */ /* CIF Set (142,1071),(191,95) */ /* CIF TextPosition (142,1071) */ set(NOW+threshold, t1(track)); /* CIF Line (238,1166),(238,1524) */ /* CIF NextState (142,1524),(191,95) */ /* CIF TextPosition (142,1524) */ NEXTSTATE - ; /* CIF End State */ ENDSTATE; /* CIF End ServiceDiagram */ ENDSERVICE; /* CIF ServiceTypeDiagram */ /* CIF Page 1 (3238,3238) */ /* CIF Frame (95,95),(1619,1619) */ /* CIF TextPosition (119,185) */ /* CIF TextPosition (1619,119) PageName */ /* CIF Page 2 (3190,3190) */ /* CIF Frame (95,95),(1595,1595) */ /* CIF TextPosition (119,185) */ /* CIF TextPosition (1595,119) PageName */ /* CIF Page 3 (3238,3334) */ /* CIF Frame (95,95),(1619,1667) */ /* CIF TextPosition (119,185) */ /* CIF TextPosition (1619,119) PageName */ /* CIF Page 4 (3238,3334) */ /* CIF Frame (95,95),(1619,1667) */ /* CIF TextPosition (119,185) */ /* CIF TextPosition (1619,119) PageName */ /* CIF Specific CSDL Version 1.1 */ /* CIF Specific SDT OriginalFileName 'BasicController.sst' */ /* CIF Specific SDT Page 1 Scale 90 Grid (50,50) AutoNumbered */ SERVICE TYPE<> BasicController ; /* CIF CurrentPage 1 */ /* CIF Gate (809,1714),(809,2024) */ /* CIF TextPosition (762,1833) */ /* CIF TextPosition (833,1762) SignalList1 */ /* CIF TextPosition (833,1928) SignalList2 */ /* CIF Service (785,2071),(96,48) */ GATE g3 IN WITH trackAnnounce, inSight ; OUT WITH trainSignal ; /* CIF Gate (1166,1714),(1166,2024) */ /* CIF TextPosition (1119,1833) */ /* CIF TextPosition (1190,1762) SignalList1 */ /* CIF TextPosition (1190,1928) SignalList2 */ /* CIF Service (1143,2071),(95,48) */ GATE g4 IN WITH settingDone ; OUT WITH setSignals ; /* CIF Gate (1476,2024),(1476,1714) */ /* CIF TextPosition (1428,1833) */ /* CIF TextPosition (1500,1762) SignalList1 */ /* CIF Service (1428,2024),(96,47) */ GATE g5 IN WITH(gateControl) ; /* CIF Gate (166,1714),(166,2024) */ /* CIF TextPosition (119,1833) */ /* CIF TextPosition (190,1762) SignalList1 */ /* CIF TextPosition (190,1928) SignalList2 */ /* CIF Service (0,2047),(0,48) */ GATE g1 IN WITH(gateStatus), (carSensor) ; OUT WITH(gateControl) ; /* CIF Gate (476,2024),(476,1714) */ /* CIF TextPosition (428,1833) */ /* CIF TextPosition (500,1762) SignalList1 */ /* CIF Service (428,2047),(95,48) */ GATE g2 IN WITH(trainDetection) ; /* CIF Text (1143,261),(476,262) */ /* CIF TextPosition (1143,261) */ /* variables */ DCL train PId; DCL track TrackId; DCL speed Real; /* CIF End Text */ /* CIF CurrentPage 3 */ /* CIF Procedure (166,1285),(191,96) */ /* CIF TextPosition (166,1285) */ PROCEDURE switchTrains REFERENCED /* CIF Comment (404,1285),(429,96) */ /* CIF TextPosition (404,1285) */ /* CIF Line (404,1333),(357,1333) Dashed */ COMMENT ' close the gate, signals to green '; /* CIF Procedure (166,1404),(191,96) */ /* CIF TextPosition (166,1404) */ PROCEDURE switchBoth REFERENCED /* CIF Comment (404,1404),(429,96) */ /* CIF TextPosition (404,1404) */ /* CIF Line (404,1452),(357,1452) Dashed */ COMMENT ' open the gate, signals to green '; /* CIF Procedure (166,1524),(191,95) */ /* CIF TextPosition (166,1524) */ PROCEDURE switchCars REFERENCED /* CIF Comment (404,1524),(429,95) */ /* CIF TextPosition (404,1524) */ /* CIF Line (404,1571),(357,1571) Dashed */ COMMENT ' signals to red, open the gate '; /* CIF Procedure (904,1285),(191,96) */ /* CIF TextPosition (904,1285) */ PROCEDURE totalCount REFERENCED /* CIF Comment (1143,1285),(476,96) */ /* CIF TextPosition (1143,1285) */ /* CIF Line (1143,1333),(1095,1333) Dashed */ COMMENT ' returns total number of trains (all tracks) between the sensors '; /* CIF CurrentPage 1 */ /* CIF Start (214,309),(190,95) */ /* CIF TextPosition (214,309) */ START virtual ; /* CIF Line (309,404),(309,500) */ /* CIF NextState (214,500),(190,95) */ /* CIF TextPosition (214,500) */ NEXTSTATE trains /* CIF Comment (666,500),(381,95) */ /* CIF TextPosition (666,500) */ /* CIF Line (666,547),(404,547) Dashed */ COMMENT ' initially the gate is closed and all signals are green '; /* CIF State (214,809),(190,95) */ /* CIF TextPosition (214,809) */ STATE* ; /* CIF Line (309,904),(309,976) */ /* CIF Input (214,976),(190,95) Right */ /* CIF TextPosition (214,976) */ INPUT trackAnnounce(track, speed) ; /* CIF Line (309,1071),(309,1143) */ /* CIF Task (214,1143),(190,95) */ /* CIF TextPosition (214,1143) */ TASK trackLst:=trackLst // mkstring(track); trackTbl(track).speed:=speed; /* CIF Line (309,1238),(309,1333) */ /* CIF NextState (214,1333),(190,95) */ /* CIF TextPosition (214,1333) */ NEXTSTATE - ; /* CIF End State */ ENDSTATE; /* CIF CurrentPage 2 */ /* CIF State (214,309),(190,95) */ /* CIF TextPosition (214,309) */ STATE* ; /* CIF Line (309,404),(309,476) */ /* CIF Input (214,476),(190,95) Right */ /* CIF TextPosition (214,476) */ INPUT inSight(track,train) /* CIF Comment (928,476),(334,95) */ /* CIF TextPosition (928,476) */ /* CIF Line (928,523),(404,523) Dashed */ COMMENT ' handover requested '; /* CIF Line (309,571),(309,642) */ /* CIF Task (214,642),(190,96) */ /* CIF TextPosition (214,642) */ TASK trackTbl(track).sight:=train; /* CIF Line (309,738),(309,833) */ /* CIF Decision (214,833),(190,95) */ /* CIF TextPosition (214,833) */ DECISION train ; /* CIF Answer InvisibleBrackets */ /* CIF Line (404,881),(547,881),(547,1285),(309,1285),(309,1309) */ /* CIF TextPosition (452,833) */ ( null ): /* CIF Label Invisible */ BasicControllerHRailroadCrossingAGRlooplabel125__i: /* CIF NextState (214,1309),(190,95) */ /* CIF TextPosition (214,1309) */ NEXTSTATE - ; /* CIF Answer InvisibleBrackets */ /* CIF Line (309,928),(309,1000) */ /* CIF TextPosition (333,928) */ ELSE: /* CIF Output (214,1000),(190,95) Right */ /* CIF TextPosition (214,1000) */ OUTPUT trainSignal(trackTbl(track).sig) to trackTbl(track).sight /* CIF Comment (928,976),(334,143) */ /* CIF TextPosition (928,976) */ /* CIF Line (928,1047),(428,1047),(428,1047),(404,1047) Dashed */ COMMENT ' send signal status to train which is now in range of sight '; /* CIF Line (309,1095),(309,1309) */ /* CIF NextState (214,1309),(190,95) */ /* CIF TextPosition (214,1309) */ NEXTSTATE - ; /* CIF End Decision */ ENDDECISION; /* CIF End State */ ENDSTATE; /* CIF CurrentPage 3 */ /* CIF State (214,404),(190,96) */ /* CIF TextPosition (214,404) */ STATE* /* CIF Comment (523,404),(286,96) */ /* CIF TextPosition (523,404) */ /* CIF Line (523,452),(404,452) Dashed */ COMMENT ' standard behaviour '; /* CIF Line (309,500),(309,523),(1500,523),(1500,642) */ /* CIF Input (1404,642),(191,96) Right */ /* CIF TextPosition (1404,642) */ INPUT virtual manyCarsWaiting ; /* CIF Line (1500,738),(1500,952) */ /* CIF NextState (1404,952),(191,95) */ /* CIF TextPosition (1404,952) */ NEXTSTATE - ; /* CIF Line (309,500),(309,523),(1119,523),(1119,642) */ /* CIF Input (1023,642),(191,96) Right */ /* CIF TextPosition (1023,642) */ INPUT virtual carsWaiting ; /* CIF Line (1119,738),(1119,952) */ /* CIF NextState (1023,952),(191,95) */ /* CIF TextPosition (1023,952) */ NEXTSTATE - ; /* CIF Line (309,500),(309,523),(714,523),(714,642) */ /* CIF Input (619,642),(190,96) Right */ /* CIF TextPosition (619,642) */ INPUT virtual trainApproaching(track) ; /* CIF Line (714,738),(714,785) */ /* CIF Task (619,785),(190,96) */ /* CIF TextPosition (619,785) */ TASK trackTbl(track).count:= trackTbl(track).count+1 ; /* CIF Line (714,881),(714,952) */ /* CIF NextState (619,952),(190,95) */ /* CIF TextPosition (619,952) */ NEXTSTATE - ; /* CIF Line (309,500),(309,642) */ /* CIF Input (214,642),(190,96) Right */ /* CIF TextPosition (214,642) */ INPUT virtual trainLeaving(track) ; /* CIF Line (309,738),(309,785) */ /* CIF Task (214,785),(190,96) */ /* CIF TextPosition (214,785) */ TASK trackTbl(track).count:= trackTbl(track).count-1 ; /* CIF Line (309,881),(309,952) */ /* CIF NextState (214,952),(190,95) */ /* CIF TextPosition (214,952) */ NEXTSTATE - ; /* CIF End State */ ENDSTATE; /* CIF CurrentPage 4 */ /* CIF State (190,976),(191,95) */ /* CIF TextPosition (190,976) */ STATE trains ; /* CIF Line (285,1071),(285,1119) */ /* CIF Input (190,1119),(191,95) Right */ /* CIF TextPosition (190,1119) */ INPUT openGate /* CIF Comment (762,1119),(333,95) */ /* CIF TextPosition (762,1119) */ /* CIF Line (762,1166),(381,1166) Dashed */ COMMENT '"manual open" request '; /* CIF Line (285,1214),(285,1262) */ /* CIF Decision (190,1262),(191,95) */ /* CIF TextPosition (190,1262) */ DECISION call totalCount /* CIF Comment (762,1262),(333,95) */ /* CIF TextPosition (762,1262) */ /* CIF Line (762,1309),(381,1309) Dashed */ COMMENT ' safe to open the gate '; /* CIF Answer InvisibleBrackets */ /* CIF Line (285,1357),(285,1404) */ /* CIF TextPosition (309,1357) */ ( 0 ): /* CIF ProcedureCall (190,1404),(191,96) */ /* CIF TextPosition (190,1404) */ CALL switchCars ; /* CIF Line (285,1500),(285,1571) */ /* CIF NextState (190,1571),(191,95) */ /* CIF TextPosition (190,1571) */ NEXTSTATE cars ; /* CIF Answer InvisibleBrackets */ /* CIF Line (381,1309),(595,1309),(595,1571) */ /* CIF TextPosition (642,1357) */ ELSE: /* CIF NextState (500,1571),(190,95) */ /* CIF TextPosition (500,1571) */ NEXTSTATE - ; /* CIF End Decision */ ENDDECISION; /* CIF End State */ ENDSTATE; /* CIF State (190,333),(191,95) */ /* CIF TextPosition (190,333) */ STATE cars,both ; /* CIF Line (285,428),(285,476) */ /* CIF Input (190,476),(191,95) Right */ /* CIF TextPosition (190,476) */ INPUT closeGate /* CIF Comment (762,476),(333,95) */ /* CIF TextPosition (762,476) */ /* CIF Line (762,523),(381,523) Dashed */ COMMENT '"manual close" request '; /* CIF Line (285,571),(285,619) */ /* CIF ProcedureCall (190,619),(191,95) */ /* CIF TextPosition (190,619) */ CALL switchTrains ; /* CIF Line (285,714),(285,762) */ /* CIF NextState (190,762),(191,95) */ /* CIF TextPosition (190,762) */ NEXTSTATE trains ; /* CIF End State */ ENDSTATE; /* CIF End ServiceTypeDiagram */ ENDSERVICE TYPE; /* CIF ProcedureDiagram */ /* CIF Page 1 (3190,3190) */ /* CIF Frame (95,95),(1595,1595) */ /* CIF TextPosition (119,185) */ /* CIF TextPosition (1595,119) PageName */ /* CIF Specific CSDL Version 1.1 */ /* CIF Specific SDT OriginalFileName 'setSignal.spd' */ /* CIF Specific SDT Page 1 Scale 90 Grid (50,50) AutoNumbered */ PROCEDURE<> setSignal ; FPAR tr TrackId,sigstat SignalStatus; /* CIF CurrentPage 1 */ /* CIF ProcedureStart (238,357),(190,95) */ /* CIF TextPosition (238,357) */ START; /* CIF Line (333,452),(333,547) */ /* CIF Task (238,547),(190,95) */ /* CIF TextPosition (238,547) */ TASK trackTbl(tr).sig:=sigstat; /* CIF Line (333,642),(333,738) */ /* CIF Decision (238,738),(190,95) */ /* CIF TextPosition (238,738) */ DECISION trackTbl(tr).sight ; /* CIF Answer InvisibleBrackets */ /* CIF Line (428,785),(738,785),(738,1071),(333,1071),(333,1119) */ /* CIF TextPosition (785,833) */ ( null ): /* CIF Label Invisible */ setSignalLRailroadCrossingAGRlooplabel126__i: /* CIF Return (285,1119),(96,95) */ /* CIF TextPosition (584,1047) */ RETURN; /* CIF Answer InvisibleBrackets */ /* CIF Line (333,833),(333,904) */ /* CIF TextPosition (357,833) */ ELSE: /* CIF Output (238,904),(190,96) Right */ /* CIF TextPosition (238,904) */ OUTPUT trainSignal(sigstat) to trackTbl(tr).sight ; /* CIF Line (333,1000),(333,1119) */ /* CIF Join Invisible */ JOIN setSignalLRailroadCrossingAGRlooplabel126__i; /* CIF End Decision */ ENDDECISION; /* CIF End ProcedureDiagram */ ENDPROCEDURE; /* CIF ProcessTypeDiagram */ /* CIF ServicePage 1 (3428,4000) */ /* CIF Frame (71,95),(1714,2000) */ /* CIF TextPosition (95,185) */ /* CIF TextPosition (1690,119) PageName */ /* CIF Specific CSDL Version 1.1 */ /* CIF Specific SDT OriginalFileName 'Controller.spt' */ /* CIF Specific SDT Page 1 Scale 90 Grid (50,50) AutoNumbered */ PROCESS TYPE<> Controller ; /* CIF CurrentPage 1 */ /* CIF Gate (190,2095),(190,2333) */ /* CIF TextPosition (142,2190) */ /* CIF TextPosition (222,2119) SignalList1 */ /* CIF TextPosition (214,2238) SignalList2 */ /* CIF Process (158,3048),(96,47) */ GATE g1 IN WITH(gateStatus),(carSensor) ; OUT WITH(gateControl) ; /* CIF Gate (928,2095),(928,2333) */ /* CIF TextPosition (881,2166) */ /* CIF TextPosition (952,2143) SignalList1 */ /* CIF TextPosition (952,2262) SignalList2 */ /* CIF Process (1275,2976),(95,48) */ GATE g2 IN WITH trackAnnounce, inSight, (trainSensor) ; OUT WITH trainSignal ; /* CIF Gate (1690,2309),(1690,2095) */ /* CIF TextPosition (1643,2166) */ /* CIF TextPosition (1714,2143) SignalList1 */ /* CIF Process (2947,1643),(95,47) */ GATE g3 IN WITH(gateControl) ; /* CIF ServiceType (904,476),(286,95) */ /* CIF TextPosition (904,476) */ SERVICE TYPE ManyCarsPrecedenceController REFERENCED /* CIF Comment (1285,476),(429,95) */ /* CIF TextPosition (1285,476) */ /* CIF Line (1285,523),(1190,523) Dashed */ COMMENT ' cars take precedence, if there are too many waiting '; /* CIF ServiceType (904,333),(286,95) */ /* CIF TextPosition (904,333) */ SERVICE TYPE TrainsPrecedenceController REFERENCED /* CIF Comment (1285,333),(429,95) */ /* CIF TextPosition (1285,333) */ /* CIF Line (1285,381),(1190,381) Dashed */ COMMENT ' all trains take precedence '; /* CIF ServiceType (904,619),(286,95) */ /* CIF TextPosition (904,619) */ SERVICE TYPE FastTrainsPrecedenceController REFERENCED /* CIF Comment (1285,619),(429,95) */ /* CIF TextPosition (1285,619) */ /* CIF Line (1285,666),(1190,666) Dashed */ COMMENT ' regular trains wait for fast trains '; /* CIF SignalRoute (690,1404),(1214,1404) */ /* CIF TextPosition (762,1357) */ /* CIF TextPosition (1047,1428) Signallist1 */ SIGNALROUTE S8 FROM theSensorDebouncer TO theSignalControl WITH leaving ; /* CIF SignalRoute (1690,2095),(1690,881),(1166,881) */ /* CIF TextPosition (1619,904) */ /* CIF TextPosition (1238,809) Signallist1 */ SIGNALROUTE S5 FROM ENV VIA g3 TO theCentralController VIA g5 WITH(gateControl) ; /* CIF SignalRoute (690,881),(190,881),(190,2095) */ /* CIF TextPosition (238,904) */ /* CIF TextPosition (214,2024) Signallist1 */ /* CIF TextPosition (238,809) Signallist2 */ SIGNALROUTE S1 FROM theCentralController VIA g1 TO ENV VIA g1 WITH(gateControl) ; FROM ENV VIA g1 TO theCentralController VIA g1 WITH(gateStatus),(carSensor) ; /* CIF SignalRoute (1071,952),(1428,1333) */ /* CIF TextPosition (1285,1143) */ /* CIF TextPosition (1404,1238) Signallist1 */ /* CIF TextPosition (1143,976) Signallist2 */ SIGNALROUTE S4 FROM theCentralController VIA g4 TO theSignalControl WITH setSignals ; FROM theSignalControl TO theCentralController VIA g4 WITH settingDone ; /* CIF SignalRoute (476,1333),(785,952) */ /* CIF TextPosition (571,1143) */ /* CIF TextPosition (476,976) Signallist1 */ SIGNALROUTE S2 FROM theSensorDebouncer TO theCentralController VIA g2 WITH(trainDetection) ; /* CIF SignalRoute (1381,1476),(928,2095) */ /* CIF TextPosition (1262,1524) */ /* CIF TextPosition (1023,1976) Signallist1 */ SIGNALROUTE S7 FROM theSignalControl TO ENV VIA g2 WITH trainSignal ; /* CIF SignalRoute (928,952),(928,2095) */ /* CIF TextPosition (881,1547) */ /* CIF TextPosition (952,1714) Signallist1 */ /* CIF TextPosition (952,1166) Signallist2 */ SIGNALROUTE S3 FROM theCentralController VIA g3 TO ENV VIA g2 WITH trainSignal ; FROM ENV VIA g2 TO theCentralController VIA g3 WITH trackAnnounce, inSight ; /* CIF SignalRoute (928,2095),(476,1476) */ /* CIF TextPosition (595,1547) */ /* CIF TextPosition (309,1547) Signallist1 */ SIGNALROUTE S6 FROM ENV VIA g2 TO theSensorDebouncer WITH(trainSensor) ; /* CIF Service (1214,1333),(429,143) */ /* CIF TextPosition (1214,1333) */ SERVICE theSignalControl REFERENCED; /* CIF Service (261,1333),(429,143) */ /* CIF TextPosition (261,1333) */ SERVICE theSensorDebouncer REFERENCED; /* CIF Service (690,809),(476,143) */ /* CIF TextPosition (690,809) */ SERVICE theCentralController:FastTrainsPrecedenceController; /* CIF ServiceType (904,190),(286,95) */ /* CIF TextPosition (904,190) */ SERVICE TYPE BasicController REFERENCED /* CIF Comment (1285,190),(429,95) */ /* CIF TextPosition (1285,190) */ /* CIF Line (1285,238),(1190,238) Dashed */ COMMENT ' basic functionality of all controllers '; /* CIF Text (119,190),(666,238) */ /* CIF TextPosition (119,190) */ DCL trackLst TrackList:=Emptylist; /* tracks of the system */ DCL trackTbl TrackTable:=(. (. 0,0,null,green .) .); /* information about all the tracks */ /* CIF End Text */ /* CIF End ProcessTypeDiagram */ ENDPROCESS TYPE; /* CIF ProcessDiagram */ /* CIF Page 1 (3238,3334) */ /* CIF Frame (95,95),(1619,1667) */ /* CIF TextPosition (119,185) */ /* CIF TextPosition (1619,119) PageName */ /* CIF Page 2 (3238,3334) */ /* CIF Frame (95,95),(1619,1667) */ /* CIF TextPosition (119,185) */ /* CIF TextPosition (1619,119) PageName */ /* CIF Specific CSDL Version 1.1 */ /* CIF Specific SDT OriginalFileName 'theCarSensor.spr' */ /* CIF Specific SDT Page 1 Scale 90 Grid (50,50) AutoNumbered */ PROCESS<> theCarSensor (1,1); /* CIF CurrentPage 1 */ /* CIF Text (1000,190),(595,286) */ /* CIF TextPosition (1000,190) */ synonym arrival Duration=30; /* delay between the cars */ synonym threshold Integer=2; /* minimum #cars the sensors detects */ synonym manyThreshold Integer=10; /* indication: too many cars */ /* CIF End Text */ /* CIF Text (1000,523),(595,334) */ /* CIF TextPosition (1000,523) */ /* timer */ timer t1:=arrival; /* variables */ DCL cars Integer:=0; DCL gateClosed Boolean:=true; /* CIF End Text */ /* CIF Start (261,333),(191,95) */ /* CIF TextPosition (261,333) */ START; /* CIF Line (357,428),(357,476) */ /* CIF Set (261,476),(191,95) */ /* CIF TextPosition (261,476) */ set(t1); /* CIF Line (357,571),(357,619) */ /* CIF NextState (261,619),(191,95) */ /* CIF TextPosition (261,619) */ NEXTSTATE detecting ; /* CIF State (261,928),(191,95) */ /* CIF TextPosition (261,928) */ STATE* ; /* CIF Line (357,1023),(357,1071),(1095,1071),(1095,1119) */ /* CIF Input (1000,1119),(190,95) Right */ /* CIF TextPosition (1000,1119) */ INPUT gateClosed ; /* CIF Line (1095,1214),(1095,1285) */ /* CIF Task (1000,1285),(190,96) */ /* CIF TextPosition (1000,1285) */ TASK gateClosed:=true ; /* CIF Line (1095,1381),(1095,1619) */ /* CIF NextState (1000,1619),(190,95) */ /* CIF TextPosition (1000,1619) */ NEXTSTATE - ; /* CIF Line (357,1023),(357,1119) */ /* CIF Input (261,1119),(191,95) Right */ /* CIF TextPosition (261,1119) */ INPUT gateOpen ; /* CIF Line (357,1214),(357,1285) */ /* CIF Task (261,1285),(191,96) */ /* CIF TextPosition (261,1285) */ TASK gateClosed:=false ; /* CIF Line (357,1381),(357,1452) */ /* CIF Task (261,1452),(191,95) */ /* CIF TextPosition (261,1452) */ TASK cars:=0 /* CIF Comment (571,1452),(286,95) */ /* CIF TextPosition (571,1452) */ /* CIF Line (571,1500),(452,1500) Dashed */ COMMENT ' all waiting cars pass the crossing '; /* CIF Line (357,1547),(357,1619) */ /* CIF NextState (261,1619),(191,95) */ /* CIF TextPosition (261,1619) */ NEXTSTATE - ; /* CIF End State */ ENDSTATE; /* CIF CurrentPage 2 */ /* CIF State (166,214),(191,95) */ /* CIF TextPosition (166,214) */ STATE detecting ; /* CIF Line (261,309),(261,357) */ /* CIF Input (166,357),(191,95) Right */ /* CIF TextPosition (166,357) */ INPUT t1 ; /* CIF Line (261,452),(261,500) */ /* CIF Decision (166,500),(191,95) */ /* CIF TextPosition (166,500) */ DECISION gateClosed ; /* CIF Answer InvisibleBrackets */ /* CIF Line (357,547),(690,547),(690,1452),(261,1452),(261,1476) */ /* CIF TextPosition (381,500) */ ( false ): /* CIF Label Invisible */ theCarSensorJRailroadCrossingAGRlooplabel127__i: /* CIF Set (166,1476),(191,95) */ /* CIF TextPosition (166,1476) */ set(t1); /* CIF Line (261,1571),(261,1619) */ /* CIF NextState (166,1619),(191,95) */ /* CIF TextPosition (166,1619) */ NEXTSTATE - ; /* CIF Answer InvisibleBrackets */ /* CIF Line (261,595),(261,642) */ /* CIF TextPosition (285,595) */ ( true ): /* CIF Task (166,642),(191,96) */ /* CIF TextPosition (166,642) */ TASK cars:=cars+1; /* CIF Line (261,738),(261,785) */ /* CIF Decision (166,785),(191,96) */ /* CIF TextPosition (166,785) */ DECISION cars ; /* CIF Answer InvisibleBrackets */ /* CIF Line (261,881),(261,952) */ /* CIF TextPosition (285,881) */ ( threshold ): /* CIF Output (166,952),(191,95) Right */ /* CIF TextPosition (166,952) */ OUTPUT carsWaiting ; /* CIF Line (261,1047),(261,1119) */ /* CIF Label Invisible */ theCarSensorJRailroadCrossingAGRlooplabel128__i: /* CIF Decision (166,1119),(191,95) */ /* CIF TextPosition (166,1119) */ DECISION cars /* CIF Comment (952,1119),(238,95) */ /* CIF TextPosition (952,1119) */ /* CIF Line (952,1166),(357,1166) Dashed */ COMMENT ' too many cars are waiting '; /* CIF Answer InvisibleBrackets */ /* CIF Line (261,1214),(261,1285) */ /* CIF TextPosition (285,1214) */ ( manyThreshold ): /* CIF Output (166,1285),(191,96) Right */ /* CIF TextPosition (166,1285) */ OUTPUT manyCarsWaiting ; /* CIF Line (261,1381),(261,1476) */ /* CIF Join Invisible */ JOIN theCarSensorJRailroadCrossingAGRlooplabel127__i; /* CIF Answer InvisibleBrackets */ /* CIF Line (357,1166),(547,1166),(547,1452),(261,1452),(261,1476) */ /* CIF TextPosition (381,1119) */ ELSE: /* CIF Join Invisible */ JOIN theCarSensorJRailroadCrossingAGRlooplabel127__i; /* CIF End Decision */ ENDDECISION; /* CIF Answer InvisibleBrackets */ /* CIF Line (357,833),(547,833),(547,1095),(261,1095),(261,1119) */ /* CIF TextPosition (381,785) */ ELSE: /* CIF Join Invisible */ JOIN theCarSensorJRailroadCrossingAGRlooplabel128__i; /* CIF End Decision */ ENDDECISION; /* CIF End Decision */ ENDDECISION; /* CIF End State */ ENDSTATE; /* CIF End ProcessDiagram */ ENDPROCESS; /* CIF ProcedureDiagram */ /* CIF Page 1 (3238,3620) */ /* CIF Frame (95,95),(1619,1810) */ /* CIF TextPosition (119,185) */ /* CIF TextPosition (1619,119) PageName */ /* CIF Specific CSDL Version 1.1 */ /* CIF Specific SDT OriginalFileName 'update.spd' */ /* CIF Specific SDT Page 1 Scale 90 Grid (50,50) AutoNumbered */ PROCEDURE<> update ; /* CIF CurrentPage 1 */ /* CIF ProcedureStart (381,261),(190,96) */ /* CIF TextPosition (381,261) */ START; /* CIF Line (476,357),(476,404) */ /* CIF Task (190,404),(572,96) */ /* CIF TextPosition (190,404) */ TASK posX:=pos; /* CIF Line (476,500),(476,571) */ /* CIF Decision (381,571),(190,95) */ /* CIF TextPosition (381,571) */ DECISION ppos ; /* CIF Answer InvisibleBrackets */ /* CIF Line (571,619),(809,619),(809,904) */ /* CIF TextPosition (595,571) */ (-1 ): /* CIF Task (523,904),(572,96) */ /* CIF TextPosition (523,904) */ TASK accel:=maxAccel; /* CIF Line (809,1000),(809,1023),(476,1023),(476,1095) */ /* CIF Label Invisible */ updateLRailroadCrossingAGRlooplabel129__i: /* CIF Task (190,1095),(572,95) */ /* CIF TextPosition (190,1095) */ TASK accel:= call minmax(minAccel,sigAccel, accel); /* CIF Line (476,1190),(476,1238) */ /* CIF Task (190,1238),(572,143) */ /* CIF TextPosition (190,1238) */ TASK speed:=speed+accel; speed:= call minmax(minSpeed,maxSpeed,speed); /* CIF Line (476,1381),(476,1428) */ /* CIF Task (190,1428),(572,96) */ /* CIF TextPosition (190,1428) */ TASK pos:=pos+speed; /* CIF Line (476,1524),(476,1595) */ /* CIF Return (428,1595),(95,95) */ /* CIF TextPosition (394,1595) */ RETURN; /* CIF Answer InvisibleBrackets */ /* CIF Line (476,666),(476,738) */ /* CIF TextPosition (500,690) */ ELSE: /* CIF Task (190,738),(572,95) */ /* CIF TextPosition (190,738) */ TASK accel:= (ppos-pos)+(ppos-pposX-speed)-minDist; /* CIF Line (476,833),(476,1095) */ /* CIF Join Invisible */ JOIN updateLRailroadCrossingAGRlooplabel129__i; /* CIF End Decision */ ENDDECISION; /* CIF End ProcedureDiagram */ ENDPROCEDURE; /* CIF ProcessDiagram */ /* CIF Page 1 (3238,3334) */ /* CIF Frame (95,95),(1619,1667) */ /* CIF TextPosition (119,185) */ /* CIF TextPosition (1619,119) PageName */ /* CIF Page 2 (3238,3334) */ /* CIF Frame (95,95),(1619,1667) */ /* CIF TextPosition (119,185) */ /* CIF TextPosition (1619,119) PageName */ /* CIF Specific CSDL Version 1.1 */ /* CIF Specific SDT OriginalFileName 'theSensor.spr' */ /* CIF Specific SDT Page 1 Scale 90 Grid (50,50) AutoNumbered */ PROCESS<> theSensor (1,1); /* CIF CurrentPage 1 */ /* CIF Text (1143,214),(523,262) */ /* CIF TextPosition (1143,214) */ /* variables*/ DCL maxSpeed Real; /* maximum speed for this track */ DCL trackId TrackId; /* unique track identifier */ /* CIF End Text */ /* CIF CurrentPage 2 */ /* CIF Text (1119,190),(524,191) */ /* CIF TextPosition (1119,190) */ /* variables*/ DCL p1,p2 Real; /* position of the train */ /* CIF End Text */ /* CIF CurrentPage 1 */ /* CIF Start (190,285),(191,96) */ /* CIF TextPosition (190,285) */ START; /* CIF Line (285,381),(285,428) */ /* CIF Task (190,428),(191,95) */ /* CIF TextPosition (190,428) */ TASK trackId:=self; /* CIF Line (285,523),(285,571) */ /* CIF Decision (190,571),(191,95) */ /* CIF TextPosition (190,571) */ DECISION ANY ; /* CIF Answer InvisibleBrackets */ /* CIF Line (285,666),(285,714) */ /* CIF TextPosition (428,881) */ (): /* CIF Task (190,714),(191,95) */ /* CIF TextPosition (190,714) */ TASK maxSpeed:= regularSpeed; /* CIF Line (285,809),(285,928) */ /* CIF Label Invisible */ theSensorJRailroadCrossingAGRlooplabel130__i: /* CIF Output (190,928),(191,95) Right */ /* CIF TextPosition (190,928) */ OUTPUT trackAnnounce (trackId,maxSpeed) /* CIF Comment (809,928),(286,95) */ /* CIF TextPosition (809,928) */ /* CIF Line (809,976),(381,976) Dashed */ COMMENT ' announce the track to the controller '; /* CIF Line (285,1023),(285,1095) */ /* CIF NextState (190,1095),(191,95) */ /* CIF TextPosition (190,1095) */ NEXTSTATE startTrain ; /* CIF Answer InvisibleBrackets */ /* CIF Line (381,619),(642,619),(642,714) */ /* CIF TextPosition (571,785) */ (): /* CIF Task (547,714),(191,95) */ /* CIF TextPosition (547,714) */ TASK maxSpeed:= fastSpeed; /* CIF Line (642,809),(642,857),(285,857),(285,928) */ /* CIF Join Invisible */ JOIN theSensorJRailroadCrossingAGRlooplabel130__i; /* CIF End Decision */ ENDDECISION; /* CIF State (190,1095),(191,95) */ /* CIF TextPosition (190,1095) */ STATE startTrain ; /* CIF Line (285,1190),(285,1238) */ /* CIF None (190,1238),(191,95) */ /* CIF TextPosition (190,1238) */ INPUT NONE; /* CIF Line (285,1333),(285,1381) */ /* CIF Create (190,1381),(191,95) */ /* CIF TextPosition (190,1381) */ CREATE aTrain (trackId,maxSpeed,true) /* CIF Comment (809,1381),(286,95) */ /* CIF TextPosition (809,1381) */ /* CIF Line (809,1428),(381,1428) Dashed */ COMMENT ' create the first train (at an arbitrary time) '; /* CIF Line (285,1476),(285,1524) */ /* CIF NextState (190,1524),(191,95) */ /* CIF TextPosition (190,1524) */ NEXTSTATE detecting ; /* CIF End State */ ENDSTATE; /* CIF CurrentPage 2 */ /* CIF State (190,285),(191,96) */ /* CIF TextPosition (190,285) */ STATE detecting ; /* CIF Line (285,381),(285,428) */ /* CIF Input (190,428),(191,95) Right */ /* CIF TextPosition (190,428) */ INPUT position(p1,p2) /* CIF Comment (952,428),(429,95) */ /* CIF TextPosition (952,428) */ /* CIF Line (952,476),(381,476) Dashed */ COMMENT ' train at position (p1,p2) '; /* CIF Line (285,523),(285,571) */ /* CIF Decision (190,571),(191,95) */ /* CIF TextPosition (190,571) */ DECISION p1 < posSensor1 AND posSensor1 <= p2 /* CIF Comment (952,571),(429,95) */ /* CIF TextPosition (952,571) */ /* CIF Line (952,619),(381,619) Dashed */ COMMENT ' train is passing first sensor '; /* CIF Answer InvisibleBrackets */ /* CIF Line (381,619),(642,619),(642,762) */ /* CIF TextPosition (666,690) */ ( true ): /* CIF Output (547,762),(191,95) Right */ /* CIF TextPosition (547,762) */ OUTPUT detectApproaching (trackId) ; /* CIF Line (642,857),(642,881) */ /* CIF Output (547,881),(191,95) Right */ /* CIF TextPosition (547,881) */ OUTPUT detectApproaching (trackId) ; /* CIF Line (642,976),(642,1023),(285,1023),(285,1071) */ /* CIF Label Invisible */ theSensorJRailroadCrossingAGRlooplabel131__i: /* CIF Decision (190,1071),(191,95) */ /* CIF TextPosition (190,1071) */ DECISION p1 < posSensor2 AND posSensor2 <=p2 /* CIF Comment (952,1071),(429,95) */ /* CIF TextPosition (952,1071) */ /* CIF Line (952,1119),(381,1119) Dashed */ COMMENT ' train is passing second sensor '; /* CIF Answer InvisibleBrackets */ /* CIF Line (285,1166),(285,1595) */ /* CIF TextPosition (309,1190) */ ( false ): /* CIF Label Invisible */ theSensorJRailroadCrossingAGRlooplabel132__i: /* CIF NextState (190,1595),(191,95) */ /* CIF TextPosition (190,1595) */ NEXTSTATE - ; /* CIF Answer InvisibleBrackets */ /* CIF Line (381,1119),(666,1119),(666,1285) */ /* CIF TextPosition (690,1190) */ ( true ): /* CIF Output (571,1285),(191,96) Right */ /* CIF TextPosition (571,1285) */ OUTPUT detectLeaving (trackId) ; /* CIF Line (666,1381),(666,1404) */ /* CIF Output (571,1404),(191,96) Right */ /* CIF TextPosition (571,1404) */ OUTPUT detectLeaving (trackId) ; /* CIF Line (666,1500),(666,1524),(285,1524),(285,1595) */ /* CIF NextState (190,1595),(191,95) */ /* CIF TextPosition (190,1595) */ NEXTSTATE - ; /* CIF End Decision */ ENDDECISION; /* CIF Answer InvisibleBrackets */ /* CIF Line (285,666),(285,1071) */ /* CIF TextPosition (309,690) */ ( false ): /* CIF Join Invisible */ JOIN theSensorJRailroadCrossingAGRlooplabel131__i; /* CIF End Decision */ ENDDECISION; /* CIF End State */ ENDSTATE; /* CIF End ProcessDiagram */ ENDPROCESS; /* CIF ProcessDiagram */ /* CIF Page 1 (3238,3334) */ /* CIF Frame (95,95),(1619,1667) */ /* CIF TextPosition (119,185) */ /* CIF TextPosition (1619,119) PageName */ /* CIF Page 2 (3238,4190) */ /* CIF Frame (95,95),(1619,2095) */ /* CIF TextPosition (119,185) */ /* CIF TextPosition (1619,119) PageName */ /* CIF Page 3 (3238,3334) */ /* CIF Frame (95,95),(1619,1667) */ /* CIF TextPosition (119,185) */ /* CIF TextPosition (1619,119) PageName */ /* CIF Page 4 (3238,3334) */ /* CIF Frame (95,95),(1619,1667) */ /* CIF TextPosition (119,185) */ /* CIF TextPosition (1619,119) PageName */ /* CIF Specific CSDL Version 1.1 */ /* CIF Specific SDT OriginalFileName 'aTrain.spr' */ /* CIF Specific SDT Page 1 Scale 90 Grid (50,50) AutoNumbered */ PROCESS<> aTrain (0,nrTrains); FPAR track TrackId,maxSpeed Real,requestSig Boolean; /* CIF CurrentPage 1 */ /* CIF Text (928,595),(715,190) */ /* CIF TextPosition (928,595) */ SIGNALSET position; /* CIF End Text */ /* CIF Text (928,595),(715,190) */ /* CIF TextPosition (928,595) */ /* extend input alphabet */ signalset position; /* inter train communication */ /* CIF End Text */ /* CIF Text (928,238),(715,333) */ /* CIF TextPosition (928,238) */ synonym maxAccel Real=3; /* maximum acceleration */ synonym minAccel Real=-10; /* maximum brake acceleration */ synonym minSpeed Real=0; /* minimum speed */ synonym minDist Real=100; /* minimum distance between the trains */ /* CIF End Text */ /* CIF Text (928,809),(715,929) */ /* CIF TextPosition (928,809) */ /* timer */ timer step; DCL lastStep Time; synonym stepTime Duration=10; /* variables */ DCL pos, posX Real; /* current position */ DCL pposX, ppos Real :=-1; /* current position of previous train */ DCL speed Real; /* current speed */ DCL accel Real; /* current acceleration */ DCL sigAccel Real:=maxAccel; /* maximum acceleration permitted by the signal */ DCL nextTrain PId:=null; /* next train */ DCL rs Boolean:=false; /* next train has to request signal */ DCL handoverDone Boolean:=false; /* handing over of signal notification done */ /* CIF End Text */ /* CIF CurrentPage 2 */ /* CIF Procedure (1071,952),(238,95) */ /* CIF TextPosition (1071,952) */ PROCEDURE handover REFERENCED /* CIF Comment (1381,928),(285,143) */ /* CIF TextPosition (1381,928) */ /* CIF Line (1381,1000),(1333,1000),(1333,1000),(1309,1000) Dashed */ COMMENT ' hands over signal notification to the next train '; /* CIF Procedure (1071,809),(238,95) */ /* CIF TextPosition (1071,809) */ PROCEDURE breakingDist REFERENCED /* CIF Comment (1381,809),(285,95) */ /* CIF TextPosition (1381,809) */ /* CIF Line (1381,857),(1309,857) Dashed */ COMMENT ' calculates minimum braking distance '; /* CIF Procedure (1071,666),(238,96) */ /* CIF TextPosition (1071,666) */ PROCEDURE update REFERENCED /* CIF Comment (1381,666),(285,96) */ /* CIF TextPosition (1381,666) */ /* CIF Line (1381,714),(1309,714) Dashed */ COMMENT ' calculates position, speed, acceleration '; /* CIF CurrentPage 3 */ /* CIF Text (166,285),(357,96) */ /* CIF TextPosition (166,285) */ DCL sig SignalStatus; /* CIF End Text */ /* CIF CurrentPage 1 */ /* CIF Start (190,309),(191,95) */ /* CIF TextPosition (190,309) */ START; /* CIF Line (285,404),(285,452) */ /* CIF Task (190,452),(191,95) */ /* CIF TextPosition (190,452) */ TASK lastStep:=NOW; /* CIF Line (285,547),(285,595) */ /* CIF Task (190,595),(191,143) */ /* CIF TextPosition (190,595) */ TASK pos:=0; speed:=0; accel:=maxAccel; /* CIF Line (285,738),(285,785) */ /* CIF Set (190,785),(191,96) */ /* CIF TextPosition (190,785) */ set (lastStep+stepTime, step) ; /* CIF Line (285,881),(285,952) */ /* CIF Decision (190,952),(191,95) */ /* CIF TextPosition (190,952) */ DECISION requestSig ; /* CIF Answer InvisibleBrackets */ /* CIF Line (381,1000),(476,1000),(476,1190) */ /* CIF TextPosition (500,1071) */ ( true ): /* CIF Output (381,1190),(190,95) Right */ /* CIF TextPosition (381,1190) */ OUTPUT inSight(track,self) ; /* CIF Line (476,1285),(476,1309),(285,1309),(285,1381) */ /* CIF Label Invisible */ aTrainJRailroadCrossingAGRlooplabel133__i: /* CIF NextState (190,1381),(191,95) */ /* CIF TextPosition (190,1381) */ NEXTSTATE enRoute ; /* CIF Answer InvisibleBrackets */ /* CIF Line (285,1047),(285,1381) */ /* CIF TextPosition (309,1071) */ ( false ): /* CIF NextState (190,1381),(191,95) */ /* CIF TextPosition (190,1381) */ NEXTSTATE enRoute ; /* CIF End Decision */ ENDDECISION; /* CIF CurrentPage 2 */ /* CIF State (309,285),(191,96) */ /* CIF TextPosition (309,285) */ STATE enRoute ; /* CIF Line (404,381),(404,428) */ /* CIF Input (309,428),(191,95) Right */ /* CIF TextPosition (309,428) */ INPUT step ; /* CIF Line (404,523),(404,571) */ /* CIF ProcedureCall (309,571),(191,95) */ /* CIF TextPosition (309,571) */ CALL update /* CIF Comment (666,571),(381,95) */ /* CIF TextPosition (666,571) */ /* CIF Line (666,619),(500,619) Dashed */ COMMENT ' update current acceleration, speed and position '; /* CIF Line (404,666),(404,714) */ /* CIF Decision (309,714),(191,95) */ /* CIF TextPosition (309,714) */ DECISION nextTrain ; /* CIF Answer InvisibleBrackets */ /* CIF Line (309,762),(166,762),(166,1000),(404,1000),(404,1023) */ /* CIF TextPosition (190,714) */ ( null ): /* CIF Label Invisible */ aTrainJRailroadCrossingAGRlooplabel134__i: /* CIF Output (309,1023),(191,96) Right */ /* CIF TextPosition (309,1023) */ OUTPUT position(posX,pos) to theSensor ; /* CIF Line (404,1119),(404,1166) */ /* CIF Decision (309,1166),(191,96) */ /* CIF TextPosition (309,1166) */ DECISION handoverDone or (posSignal-pos)> (call breakingDist) /* CIF Comment (666,1119),(381,190) */ /* CIF TextPosition (666,1119) */ /* CIF Line (666,1214),(523,1214),(523,1214),(500,1214) Dashed */ COMMENT ' possible to stop in front of the signal or handing over of signal already done '; /* CIF Answer InvisibleBrackets */ /* CIF Line (309,1214),(166,1214),(166,1500),(404,1500),(404,1547) */ /* CIF TextPosition (190,1166) */ ( true ): /* CIF Label Invisible */ aTrainJRailroadCrossingAGRlooplabel135__i: /* CIF Set (309,1547),(191,96) */ /* CIF TextPosition (309,1547) */ set (NOW+stepTime, step) ; /* CIF Line (404,1643),(404,1690) */ /* CIF Decision (309,1690),(191,95) */ /* CIF TextPosition (309,1690) */ DECISION pos>posEnd ; /* CIF Answer InvisibleBrackets */ /* CIF Line (404,1785),(404,2047) */ /* CIF TextPosition (333,1785) */ ( false ): /* CIF NextState (309,2047),(191,96) */ /* CIF TextPosition (309,2047) */ NEXTSTATE - ; /* CIF Answer InvisibleBrackets */ /* CIF Line (500,1738),(642,1738),(642,1785) */ /* CIF TextPosition (523,1690) */ ( true ): /* CIF Decision (547,1785),(191,96) */ /* CIF TextPosition (547,1785) */ DECISION nextTrain ; /* CIF Answer InvisibleBrackets */ /* CIF Line (738,1833),(809,1833),(809,1905) */ /* CIF TextPosition (738,1785) */ ( null ): /* CIF Create (714,1905),(190,95) */ /* CIF TextPosition (714,1905) */ CREATE aTrain (track,maxSpeed,rs) /* CIF Comment (1119,1905),(333,95) */ /* CIF TextPosition (1119,1905) */ /* CIF Line (1119,1952),(904,1952) Dashed */ COMMENT ' create next train before leaving the track '; /* CIF Line (809,2000),(809,2024),(642,2024),(642,2047) */ /* CIF Label Invisible */ aTrainJRailroadCrossingAGRlooplabel136__i: /* CIF Stop (595,2047),(95,96) */ STOP; /* CIF Answer InvisibleBrackets */ /* CIF Line (642,1881),(642,2047) */ /* CIF TextPosition (571,1881) */ ELSE: /* CIF Join Invisible */ JOIN aTrainJRailroadCrossingAGRlooplabel136__i; /* CIF End Decision */ ENDDECISION; /* CIF End Decision */ ENDDECISION; /* CIF Answer InvisibleBrackets */ /* CIF Line (404,1262),(404,1357) */ /* CIF TextPosition (428,1309) */ ( false ): /* CIF ProcedureCall (309,1357),(191,95) */ /* CIF TextPosition (309,1357) */ CALL handover ; /* CIF Line (404,1452),(404,1547) */ /* CIF Join Invisible */ JOIN aTrainJRailroadCrossingAGRlooplabel135__i; /* CIF End Decision */ ENDDECISION; /* CIF Answer InvisibleBrackets */ /* CIF Line (404,809),(404,881) */ /* CIF TextPosition (428,809) */ ELSE: /* CIF Output (309,881),(191,95) Right */ /* CIF TextPosition (309,881) */ OUTPUT position(posX,pos) to nextTrain ; /* CIF Line (404,976),(404,1023) */ /* CIF Join Invisible */ JOIN aTrainJRailroadCrossingAGRlooplabel134__i; /* CIF End Decision */ ENDDECISION; /* CIF End State */ ENDSTATE; /* CIF CurrentPage 3 */ /* CIF State (166,452),(191,95) */ /* CIF TextPosition (166,452) */ STATE* ; /* CIF Line (261,547),(261,595) */ /* CIF PriorityInput (166,595),(191,95) Right */ /* CIF TextPosition (166,595) */ INPUT trainSignal(sig) /* CIF Comment (928,595),(476,95) */ /* CIF TextPosition (928,595) */ /* CIF Line (928,642),(357,642) Dashed */ COMMENT ' immediately react to signal changes '; /* CIF Line (261,690),(261,738) */ /* CIF Decision (166,738),(191,95) */ /* CIF TextPosition (166,738) */ DECISION sig ; /* CIF Answer InvisibleBrackets */ /* CIF Line (357,785),(571,785),(571,952) */ /* CIF TextPosition (595,857) */ ( red ): /* CIF Task (476,952),(190,95) */ /* CIF TextPosition (476,952) */ TASK sigAccel:=minAccel; /* CIF Line (571,1047),(571,1071),(261,1071),(261,1143) */ /* CIF Label Invisible */ aTrainJRailroadCrossingAGRlooplabel137__i: /* CIF NextState (166,1143),(191,95) */ /* CIF TextPosition (166,1143) */ NEXTSTATE - ; /* CIF Answer InvisibleBrackets */ /* CIF Line (261,833),(261,952) */ /* CIF TextPosition (285,857) */ ( green ): /* CIF Task (166,952),(191,95) */ /* CIF TextPosition (166,952) */ TASK sigAccel:=maxAccel; /* CIF Line (261,1047),(261,1143) */ /* CIF NextState (166,1143),(191,95) */ /* CIF TextPosition (166,1143) */ NEXTSTATE - ; /* CIF End Decision */ ENDDECISION; /* CIF End State */ ENDSTATE; /* CIF CurrentPage 4 */ /* CIF State (1071,404),(191,96) */ /* CIF TextPosition (1071,404) */ STATE* ; /* CIF Line (1166,500),(1166,547) */ /* CIF None (1071,547),(191,95) */ /* CIF TextPosition (1071,547) */ INPUT NONE; /* CIF Line (1166,642),(1166,690) */ /* CIF EnablingCondition (1071,690),(191,95) */ /* CIF TextPosition (1071,690) */ PROVIDED nextTrain=null ; /* CIF Line (1166,785),(1166,833) */ /* CIF Create (1071,833),(191,95) */ /* CIF TextPosition (1071,833) */ CREATE aTrain (track,maxSpeed,rs) /* CIF Comment (1404,833),(239,95) */ /* CIF TextPosition (1404,833) */ /* CIF Line (1404,881),(1262,881) Dashed */ COMMENT ' create next train '; /* CIF Line (1166,928),(1166,976) */ /* CIF Task (1071,976),(191,95) */ /* CIF TextPosition (1071,976) */ TASK nextTrain:=offspring ; /* CIF Line (1166,1071),(1166,1119) */ /* CIF NextState (1071,1119),(191,95) */ /* CIF TextPosition (1071,1119) */ NEXTSTATE - ; /* CIF End State */ ENDSTATE; /* CIF State (142,404),(191,96) */ /* CIF TextPosition (142,404) */ STATE* ; /* CIF Line (238,500),(238,547) */ /* CIF Input (142,547),(191,95) Right */ /* CIF TextPosition (142,547) */ INPUT position(pposX,ppos) /* CIF Comment (642,547),(239,95) */ /* CIF TextPosition (642,547) */ /* CIF Line (642,595),(333,595) Dashed */ COMMENT ' position of previous train '; /* CIF Line (238,642),(238,714) */ /* CIF NextState (142,714),(191,95) */ /* CIF TextPosition (142,714) */ NEXTSTATE - ; /* CIF End State */ ENDSTATE; /* CIF End ProcessDiagram */ ENDPROCESS; /* CIF BlockTypeDiagram */ /* CIF Page 1 (3334,3334) */ /* CIF Frame (95,95),(1667,1667) */ /* CIF TextPosition (119,185) */ /* CIF TextPosition (1666,119) PageName */ /* CIF Specific CSDL Version 1.1 */ /* CIF Specific SDT OriginalFileName 'Track.sbt' */ /* CIF Specific SDT Page 1 Scale 90 Grid (50,50) AutoNumbered */ BLOCK TYPE<> Track ; /* CIF CurrentPage 1 */ /* CIF Gate (952,1762),(952,2047) */ /* CIF TextPosition (881,1881) */ /* CIF TextPosition (976,1809) SignalList1 */ /* CIF TextPosition (976,1952) SignalList2 */ /* CIF Block (910,2077),(95,47) */ GATE g1 IN WITH trainSignal ; OUT WITH(trainSensor), inSight, trackAnnounce ; /* CIF CreateLine (1262,857),(619,857)*/ /* CIF SignalRoute (1428,952),(952,1762) */ /* CIF TextPosition (1166,1262) */ /* CIF TextPosition (1047,1547) Signallist1 */ SIGNALROUTE S2 FROM theSensor TO ENV VIA g1 WITH(trainSensor), trackAnnounce ; /* CIF SignalRoute (428,952),(952,1762) */ /* CIF TextPosition (666,1262) */ /* CIF TextPosition (690,1547) Signallist1 */ /* CIF TextPosition (238,1000) Signallist2 */ SIGNALROUTE S1 FROM aTrain TO ENV VIA g1 WITH inSight ; FROM ENV VIA g1 TO aTrain WITH trainSignal ; /* CIF Text (142,261),(596,96) */ /* CIF TextPosition (142,261) */ synonym nrTrains Integer=3; /* maximum number of trains per track */ /* CIF End Text */ /* CIF SignalRoute (619,904),(1262,904) */ /* CIF TextPosition (904,928) */ /* CIF TextPosition (1095,928) Signallist1 */ SIGNALROUTE S0 FROM aTrain TO theSensor WITH position ; /* CIF Process (1262,809),(333,143) */ /* CIF TextPosition (1262,809) */ PROCESS theSensor(1,1)REFERENCED; /* CIF Process (238,809),(381,143) */ /* CIF TextPosition (238,809) */ PROCESS aTrain(0,nrTrains)REFERENCED; /* CIF End BlockTypeDiagram */ ENDBLOCK TYPE; /* CIF BlockDiagram */ /* CIF Page 1 (3238,3334) */ /* CIF Frame (95,95),(1619,1667) */ /* CIF TextPosition (119,185) */ /* CIF TextPosition (1619,119) PageName */ /* CIF Specific CSDL Version 1.1 */ /* CIF Specific SDT OriginalFileName 'theController.sbl' */ /* CIF Specific SDT Page 1 Scale 90 Grid (50,50) AutoNumbered */ BLOCK<> theController (1); /* CIF CurrentPage 1 */ /* CIF ProcessType (166,833),(238,95) */ /* CIF TextPosition (166,833) */ PROCESS TYPE Controller REFERENCED; /* CIF SignalRoute (1714,881),(1095,881) */ /* CIF TextPosition (1381,833) */ /* CIF TextPosition (1143,904) Signallist1 */ SIGNALROUTE S3 FROM ENV TO theController VIA g3 WITH(gateControl) ; /* CIF SignalRoute (904,952),(904,1762) */ /* CIF TextPosition (928,1333) */ /* CIF TextPosition (690,1690) Signallist1 */ /* CIF TextPosition (500,1000) Signallist2 */ SIGNALROUTE S1 FROM theController VIA g1 TO ENV WITH(gateControl) ; FROM ENV TO theController VIA g1 WITH(gateStatus), (carSensor) ; /* CIF SignalRoute (904,809),(904,95) */ /* CIF TextPosition (928,452) */ /* CIF TextPosition (690,119) Signallist1 */ /* CIF TextPosition (357,714) Signallist2 */ SIGNALROUTE S2 FROM theController VIA g2 TO ENV WITH trainSignal ; FROM ENV TO theController VIA g2 WITH(trainSensor), inSight, trackAnnounce ; /* CIF Process (714,809),(381,143) */ /* CIF TextPosition (714,809) */ PROCESS theController(1,1):Controller; /* CIF Connect */ /* CIF TextPosition (809,47) */ CONNECT TrackChannel AND S2; /* CIF Connect */ /* CIF TextPosition (809,1762) */ CONNECT CrossingChannel AND S1; /* CIF Connect */ /* CIF TextPosition (1738,857) */ CONNECT PanelChannel AND S3; /* CIF End BlockDiagram */ ENDBLOCK; /* CIF BlockDiagram */ /* CIF Page 1 (3238,3334) */ /* CIF Frame (95,95),(1619,1667) */ /* CIF TextPosition (119,185) */ /* CIF TextPosition (1619,119) PageName */ /* CIF Specific CSDL Version 1.1 */ /* CIF Specific SDT OriginalFileName 'theCrossing.sbl' */ /* CIF Specific SDT Page 1 Scale 90 Grid (50,50) AutoNumbered */ BLOCK<> theCrossing (1); /* CIF CurrentPage 1 */ /* CIF SignalRoute (952,976),(642,976) */ /* CIF TextPosition (785,904) */ /* CIF TextPosition (714,1000) Signallist1 */ SIGNALROUTE S3 FROM theGate TO theCarSensor WITH(gateStatus) ; /* CIF SignalRoute (500,904),(785,95) */ /* CIF TextPosition (571,476) */ /* CIF TextPosition (523,214) Signallist1 */ SIGNALROUTE S1 FROM theCarSensor TO ENV WITH(carSensor) ; /* CIF Process (309,904),(333,143) */ /* CIF TextPosition (309,904) */ PROCESS theCarSensor(1,1)REFERENCED; /* CIF SignalRoute (809,95),(1119,904) */ /* CIF TextPosition (1000,476) */ /* CIF TextPosition (1143,809) Signallist1 */ /* CIF TextPosition (904,214) Signallist2 */ SIGNALROUTE S2 FROM ENV TO theGate WITH(gateControl) ; FROM theGate TO ENV WITH(gateStatus) ; /* CIF Process (952,904),(333,143) */ /* CIF TextPosition (952,904) */ PROCESS theGate(1,1)REFERENCED; /* CIF Connect */ /* CIF TextPosition (690,47) */ CONNECT CrossingChannel AND S1,S2; /* CIF End BlockDiagram */ ENDBLOCK; /* CIF ProcessDiagram */ /* CIF Page 1 (3238,3334) */ /* CIF Frame (95,95),(1619,1667) */ /* CIF TextPosition (119,185) */ /* CIF TextPosition (1619,119) PageName */ /* CIF Page 2 (3190,3190) */ /* CIF Frame (95,95),(1595,1595) */ /* CIF TextPosition (119,185) */ /* CIF TextPosition (1595,119) PageName */ /* CIF Specific CSDL Version 1.1 */ /* CIF Specific SDT OriginalFileName 'theGate.spr' */ /* CIF Specific SDT Page 1 Scale 90 Grid (50,50) AutoNumbered */ PROCESS<> theGate (1,1); /* CIF CurrentPage 1 */ /* CIF Text (1023,476),(572,119) */ /* CIF TextPosition (1023,476) */ /* timers */ timer t1; /* CIF End Text */ /* CIF Text (1023,261),(572,191) */ /* CIF TextPosition (1023,261) */ synonym openingTime Duration=30; /* time to open the gate */ synonym closingTime Duration=30; /* time to close the gate */ /* CIF End Text */ /* CIF Start (190,238),(191,95) */ /* CIF TextPosition (190,238) */ START; /* CIF Line (285,333),(285,381) */ /* CIF Output (190,381),(191,95) Right */ /* CIF TextPosition (190,381) */ OUTPUT gateClosed via S2 ; /* CIF Line (285,476),(285,523) */ /* CIF Output (190,523),(191,96) Right */ /* CIF TextPosition (190,523) */ OUTPUT gateClosed via S3 ; /* CIF Line (285,619),(285,690) */ /* CIF NextState (190,690),(191,95) */ /* CIF TextPosition (190,690) */ NEXTSTATE closed /* CIF Comment (523,690),(239,95) */ /* CIF TextPosition (523,690) */ /* CIF Line (523,738),(381,738) Dashed */ COMMENT ' initially the gate is closed '; /* CIF State (952,1023),(191,96) */ /* CIF TextPosition (952,1023) */ STATE closing ; /* CIF Line (1047,1119),(1047,1143),(1404,1143),(1404,1166) */ /* CIF Input (1309,1166),(191,96) Right */ /* CIF TextPosition (1309,1166) */ INPUT openGate ; /* CIF Line (1404,1262),(1404,1309) */ /* CIF Set (1309,1309),(191,95) */ /* CIF TextPosition (1309,1309) */ set (NOW+openingTime,t1) ; /* CIF Line (1404,1404),(1404,1571) */ /* CIF NextState (1309,1571),(191,95) */ /* CIF TextPosition (1309,1571) */ NEXTSTATE opening ; /* CIF Line (1047,1119),(1047,1166) */ /* CIF Input (952,1166),(191,96) Right */ /* CIF TextPosition (952,1166) */ INPUT t1 ; /* CIF Line (1047,1262),(1047,1309) */ /* CIF Output (952,1309),(191,95) Right */ /* CIF TextPosition (952,1309) */ OUTPUT gateClosed via S2 ; /* CIF Line (1047,1404),(1047,1571) */ /* CIF NextState (952,1571),(191,95) */ /* CIF TextPosition (952,1571) */ NEXTSTATE closed ; /* CIF End State */ ENDSTATE; /* CIF State (190,1023),(191,96) */ /* CIF TextPosition (190,1023) */ STATE closed ; /* CIF Line (285,1119),(285,1143),(642,1143),(642,1166) */ /* CIF Input (547,1166),(191,96) Right */ /* CIF TextPosition (547,1166) */ INPUT closeGate ; /* CIF Line (642,1262),(642,1309) */ /* CIF Output (547,1309),(191,95) Right */ /* CIF TextPosition (547,1309) */ OUTPUT gateClosed via S2 ; /* CIF Line (642,1404),(642,1452) */ /* CIF NextState (547,1452),(191,95) */ /* CIF TextPosition (547,1452) */ NEXTSTATE - ; /* CIF Line (285,1119),(285,1166) */ /* CIF Input (190,1166),(191,96) Right */ /* CIF TextPosition (190,1166) */ INPUT openGate ; /* CIF Line (285,1262),(285,1309) */ /* CIF Set (190,1309),(191,95) */ /* CIF TextPosition (190,1309) */ set (NOW+openingTime,t1) ; /* CIF Line (285,1404),(285,1571) */ /* CIF NextState (190,1571),(191,95) */ /* CIF TextPosition (190,1571) */ NEXTSTATE opening ; /* CIF End State */ ENDSTATE; /* CIF CurrentPage 2 */ /* CIF State (976,285),(190,96) */ /* CIF TextPosition (976,285) */ STATE opening ; /* CIF Line (1071,381),(1071,404),(1404,404),(1404,428) */ /* CIF Input (1309,428),(191,95) Right */ /* CIF TextPosition (1309,428) */ INPUT closeGate ; /* CIF Line (1404,523),(1404,619) */ /* CIF Set (1309,619),(191,95) */ /* CIF TextPosition (1309,619) */ set (NOW+closingTime,t1) ; /* CIF Line (1404,714),(1404,952) */ /* CIF NextState (1309,952),(191,95) */ /* CIF TextPosition (1309,952) */ NEXTSTATE closing ; /* CIF Line (1071,381),(1071,428) */ /* CIF Input (976,428),(190,95) Right */ /* CIF TextPosition (976,428) */ INPUT t1 ; /* CIF Line (1071,523),(1071,619) */ /* CIF Output (976,619),(190,95) Right */ /* CIF TextPosition (976,619) */ OUTPUT gateOpen via S2 ; /* CIF Line (1071,714),(1071,785) */ /* CIF Output (976,785),(190,96) Right */ /* CIF TextPosition (976,785) */ OUTPUT gateOpen via S3 ; /* CIF Line (1071,881),(1071,952) */ /* CIF NextState (976,952),(190,95) */ /* CIF TextPosition (976,952) */ NEXTSTATE open ; /* CIF End State */ ENDSTATE; /* CIF State (166,285),(191,96) */ /* CIF TextPosition (166,285) */ STATE open ; /* CIF Line (261,381),(261,404),(666,404),(666,452) */ /* CIF Input (571,452),(191,95) Right */ /* CIF TextPosition (571,452) */ INPUT openGate ; /* CIF Line (666,547),(666,619) */ /* CIF Output (571,619),(191,95) Right */ /* CIF TextPosition (571,619) */ OUTPUT gateOpen via S2 ; /* CIF Line (666,714),(666,785) */ /* CIF NextState (571,785),(191,96) */ /* CIF TextPosition (571,785) */ NEXTSTATE - ; /* CIF Line (261,381),(261,452) */ /* CIF Input (166,452),(191,95) Right */ /* CIF TextPosition (166,452) */ INPUT closeGate ; /* CIF Line (261,547),(261,619) */ /* CIF Set (166,619),(191,95) */ /* CIF TextPosition (166,619) */ set (NOW+closingTime,t1) ; /* CIF Line (261,714),(261,785) */ /* CIF Output (166,785),(191,96) Right */ /* CIF TextPosition (166,785) */ OUTPUT gateClosed via S3 /* CIF Comment (476,1143),(333,142) */ /* CIF TextPosition (476,1143) */ /* CIF Line (476,1214),(381,1214),(381,833),(357,833) Dashed */ COMMENT ' cars are not allowed to pass while closing the gate '; /* CIF Line (261,881),(261,952) */ /* CIF NextState (166,952),(191,95) */ /* CIF TextPosition (166,952) */ NEXTSTATE closing ; /* CIF End State */ ENDSTATE; /* CIF End ProcessDiagram */ ENDPROCESS; /* CIF ProcedureDiagram */ /* CIF Page 1 (3190,3190) */ /* CIF Frame (95,95),(1595,1595) */ /* CIF TextPosition (119,185) */ /* CIF TextPosition (1595,119) PageName */ /* CIF Specific CSDL Version 1.1 */ /* CIF Specific SDT OriginalFileName 'handover.spd' */ /* CIF Specific SDT Page 1 Scale 90 Grid (50,50) AutoNumbered */ PROCEDURE<> handover ; /* CIF CurrentPage 1 */ /* CIF ProcedureStart (333,357),(190,95) */ /* CIF TextPosition (333,357) */ START; /* CIF Line (428,452),(428,571) */ /* CIF Output (333,571),(190,95) Right */ /* CIF TextPosition (333,571) */ OUTPUT inSight (track,nextTrain) /* CIF Comment (904,571),(381,95) */ /* CIF TextPosition (904,571) */ /* CIF Line (904,619),(523,619) Dashed */ COMMENT ' hand over signal notification to the next train '; /* CIF Line (428,666),(428,714) */ /* CIF Decision (333,714),(190,95) */ /* CIF TextPosition (333,714) */ DECISION nextTrain ; /* CIF Answer InvisibleBrackets */ /* CIF Line (428,809),(428,881) */ /* CIF TextPosition (452,809) */ ( null ): /* CIF Task (333,881),(190,95) */ /* CIF TextPosition (333,881) */ TASK rs:=true; /* CIF Line (428,976),(428,1119) */ /* CIF Label Invisible */ handoverLRailroadCrossingAGRlooplabel138__i: /* CIF Task (333,1119),(190,95) */ /* CIF TextPosition (333,1119) */ TASK handoverDone:=true; /* CIF Line (428,1214),(428,1285) */ /* CIF Return (381,1285),(95,96) */ /* CIF TextPosition (465,1190) */ RETURN; /* CIF Answer InvisibleBrackets */ /* CIF Line (333,762),(238,762),(238,1071),(428,1071),(428,1119) */ /* CIF TextPosition (238,714) */ ELSE: /* CIF Join Invisible */ JOIN handoverLRailroadCrossingAGRlooplabel138__i; /* CIF End Decision */ ENDDECISION; /* CIF End ProcedureDiagram */ ENDPROCEDURE; /* CIF ProcedureDiagram */ /* CIF Page 1 (3190,3190) */ /* CIF Frame (95,95),(1595,1595) */ /* CIF TextPosition (119,185) */ /* CIF TextPosition (1595,119) PageName */ /* CIF Specific CSDL Version 1.1 */ /* CIF Specific SDT OriginalFileName 'regularTracks.spd' */ /* CIF Specific SDT Page 1 Scale 90 Grid (50,50) AutoNumbered */ PROCEDURE<> regularTracks ; RETURNS TrackList; /* CIF CurrentPage 1 */ /* CIF Text (1143,214),(476,238) */ /* CIF TextPosition (1143,214) */ /* variables */ DCL lstCopy TrackList; DCL regular TrackList; DCL tr TrackId; /* CIF End Text */ /* CIF ProcedureStart (261,285),(191,96) */ /* CIF TextPosition (261,285) */ START; /* CIF Line (357,381),(357,452) */ /* CIF Task (261,452),(191,95) */ /* CIF TextPosition (261,452) */ TASK lstCopy:=trackLst; regular:=Emptylist; /* CIF Line (357,547),(357,642) */ /* CIF Label Invisible */ regularTracksLRailroadCrossingAGRlooplabel139__i: /* CIF Decision (261,642),(191,96) */ /* CIF TextPosition (261,642) */ DECISION lstCopy /* CIF Comment (976,642),(190,96) */ /* CIF TextPosition (976,642) */ /* CIF Line (976,690),(452,690) Dashed */ COMMENT ' for all tracks '; /* CIF Answer InvisibleBrackets */ /* CIF Line (452,690),(857,690),(857,904) */ /* CIF TextPosition (476,642) */ ( Emptylist ): /* CIF Return (809,904),(95,96) */ /* CIF TextPosition (928,904) */ RETURN regular ; /* CIF Answer InvisibleBrackets */ /* CIF Line (357,738),(357,833) */ /* CIF TextPosition (381,762) */ ELSE: /* CIF Task (261,833),(191,95) */ /* CIF TextPosition (261,833) */ TASK tr:=first(lstCopy); /* CIF Line (357,928),(357,976) */ /* CIF Decision (261,976),(191,95) */ /* CIF TextPosition (261,976) */ DECISION trackTbl(tr).speed=fastSpeed ; /* CIF Answer InvisibleBrackets */ /* CIF Line (357,1071),(357,1190) */ /* CIF TextPosition (381,1095) */ ( false ): /* CIF Task (261,1190),(191,95) */ /* CIF TextPosition (261,1190) */ TASK regular:= regular//mkstring(tr); /* CIF Line (357,1285),(357,1381) */ /* CIF Label Invisible */ regularTracksLRailroadCrossingAGRlooplabel140__i: /* CIF Task (261,1381),(191,95) */ /* CIF TextPosition (261,1381) */ TASK lstCopy:= substring(lstCopy,2,length(lstCopy)-1); /* CIF Line (357,1476),(357,1524),(142,1524),(142,619),(357,619),(357,642) */ /* CIF Join Invisible */ JOIN regularTracksLRailroadCrossingAGRlooplabel139__i; /* CIF Answer InvisibleBrackets */ /* CIF Line (452,1023),(547,1023),(547,1333),(357,1333),(357,1381) */ /* CIF TextPosition (571,1095) */ ( true ): /* CIF Join Invisible */ JOIN regularTracksLRailroadCrossingAGRlooplabel140__i; /* CIF End Decision */ ENDDECISION; /* CIF End Decision */ ENDDECISION; /* CIF End ProcedureDiagram */ ENDPROCEDURE; /* CIF ProcedureDiagram */ /* CIF Page 1 (3238,3334) */ /* CIF Frame (95,95),(1619,1667) */ /* CIF TextPosition (119,185) */ /* CIF TextPosition (1619,119) PageName */ /* CIF Specific CSDL Version 1.1 */ /* CIF Specific SDT OriginalFileName 'switchFast.spd' */ /* CIF Specific SDT Page 1 Scale 90 Grid (50,50) AutoNumbered */ PROCEDURE<> switchFast ; /* CIF CurrentPage 1 */ /* CIF Text (1262,238),(357,214) */ /* CIF TextPosition (1262,238) */ /* variables */ DCL tr, tr2 TrackList; DCL st SignalStatus; /* CIF End Text */ /* CIF ProcedureStart (238,214),(190,95) */ /* CIF TextPosition (238,214) */ START; /* CIF Line (333,309),(333,333) */ /* CIF Task (238,333),(190,95) */ /* CIF TextPosition (238,333) */ TASK tr:=call regularTracks; /* CIF Line (333,428),(333,452) */ /* CIF Output (238,452),(190,95) Right */ /* CIF TextPosition (238,452) */ OUTPUT setSignals (tr,red) /* CIF Comment (833,452),(333,95) */ /* CIF TextPosition (833,452) */ /* CIF Line (833,500),(428,500) Dashed */ COMMENT ' set all stopping signals of regular Tracks '; /* CIF Line (333,547),(333,619) */ /* CIF Label Invisible */ switchFastLRailroadCrossingAGRlooplabel141__i: /* CIF NextState (238,619),(190,95) */ /* CIF TextPosition (238,619) */ NEXTSTATE waiting2 /* CIF Comment (833,619),(333,95) */ /* CIF TextPosition (833,619) */ /* CIF Line (833,666),(428,666) Dashed */ COMMENT ' wait until all signals have been set '; /* CIF State (238,1333),(190,95) */ /* CIF TextPosition (238,1333) */ STATE waiting /* CIF Comment (833,1333),(286,95) */ /* CIF TextPosition (833,1333) */ /* CIF Line (833,1381),(428,1381) Dashed */ COMMENT ' wait until the gate has been closed '; /* CIF Line (333,1428),(333,1452),(595,1452),(595,1524) */ /* CIF Save (500,1524),(190,95) */ /* CIF TextPosition (500,1524) */ SAVE* ; /* CIF Line (333,1428),(333,1500) */ /* CIF Input (238,1500),(190,95) Right */ /* CIF TextPosition (238,1500) */ INPUT gateClosed ; /* CIF Line (333,1595),(333,1643) */ /* CIF Return (285,1643),(96,95) */ /* CIF TextPosition (394,1428) */ RETURN; /* CIF End State */ ENDSTATE; /* CIF State (238,619),(190,95) */ /* CIF TextPosition (238,619) */ STATE waiting2 /* CIF Comment (833,619),(333,95) */ /* CIF TextPosition (833,619) */ /* CIF Line (833,666),(428,666) Dashed */ COMMENT ' wait until all signals have been set '; /* CIF Line (333,714),(333,738),(595,738),(595,809) */ /* CIF Save (500,809),(190,95) */ /* CIF TextPosition (500,809) */ SAVE* ; /* CIF Line (333,714),(333,809) */ /* CIF Input (238,809),(190,95) Right */ /* CIF TextPosition (238,809) */ INPUT settingDone(tr2,st) ; /* CIF Line (333,904),(333,976) */ /* CIF Decision (238,976),(190,95) */ /* CIF TextPosition (238,976) */ DECISION tr=tr2 and st=red ; /* CIF Answer InvisibleBrackets */ /* CIF Line (333,1071),(333,1166) */ /* CIF TextPosition (357,1119) */ ( true ): /* CIF Output (238,1166),(190,96) Right */ /* CIF TextPosition (238,1166) */ OUTPUT closeGate via g1 /* CIF Comment (833,1166),(286,96) */ /* CIF TextPosition (833,1166) */ /* CIF Line (833,1214),(428,1214) Dashed */ COMMENT ' close the gate '; /* CIF Line (333,1262),(333,1333) */ /* CIF NextState (238,1333),(190,95) */ /* CIF TextPosition (238,1333) */ NEXTSTATE waiting /* CIF Comment (833,1333),(286,95) */ /* CIF TextPosition (833,1333) */ /* CIF Line (833,1381),(428,1381) Dashed */ COMMENT ' wait until the gate has been closed '; /* CIF Answer InvisibleBrackets */ /* CIF Line (238,1023),(166,1023),(166,595),(333,595),(333,619) */ /* CIF TextPosition (166,1047) */ ( false ): /* CIF NextState (238,619),(190,95) */ /* CIF TextPosition (238,619) */ NEXTSTATE waiting2 /* CIF Comment (833,619),(333,95) */ /* CIF TextPosition (833,619) */ /* CIF Line (833,666),(428,666) Dashed */ COMMENT ' wait until all signals have been set '; /* CIF End Decision */ ENDDECISION; /* CIF End State */ ENDSTATE; /* CIF End ProcedureDiagram */ ENDPROCEDURE; /* CIF ServiceTypeDiagram */ /* CIF Page 1 (3238,3334) */ /* CIF Frame (95,95),(1619,1667) */ /* CIF TextPosition (119,185) */ /* CIF TextPosition (1619,119) PageName */ /* CIF Specific CSDL Version 1.1 */ /* CIF Specific SDT OriginalFileName 'TrainsPrecedenceController.sst' */ /* CIF Specific SDT Page 1 Scale 90 Grid (50,50) AutoNumbered */ SERVICE TYPE<> TrainsPrecedenceController INHERITS BasicController; /* CIF CurrentPage 1 */ /* CIF Start (190,261),(191,96) */ /* CIF TextPosition (190,261) */ START redefined ; /* CIF Line (285,357),(285,404) */ /* CIF ProcedureCall (190,404),(191,96) */ /* CIF TextPosition (190,404) */ CALL switchBoth ; /* CIF Line (285,500),(285,547) */ /* CIF NextState (190,547),(191,95) */ /* CIF TextPosition (190,547) */ NEXTSTATE both /* CIF Comment (476,547),(333,95) */ /* CIF TextPosition (476,547) */ /* CIF Line (476,595),(381,595) Dashed */ COMMENT ' initially the gate is open and all signals are green '; /* CIF State (1047,714),(191,95) */ /* CIF TextPosition (1047,714) */ STATE both ; /* CIF Line (1143,809),(1143,857) */ /* CIF Input (1047,857),(191,95) Right */ /* CIF TextPosition (1047,857) */ INPUT redefined trainApproaching(track) /* CIF Comment (1428,857),(191,95) */ /* CIF TextPosition (1428,857) */ /* CIF Line (1428,904),(1238,904) Dashed */ COMMENT ' first train approaching '; /* CIF Line (1143,952),(1143,1000) */ /* CIF Task (1047,1000),(191,95) */ /* CIF TextPosition (1047,1000) */ TASK trackTbl(track).count:= trackTbl(track).count+1; /* CIF Line (1143,1095),(1143,1404) */ /* CIF ProcedureCall (1047,1404),(191,96) */ /* CIF TextPosition (1047,1404) */ CALL switchTrains ; /* CIF Line (1143,1500),(1143,1595) */ /* CIF NextState (1047,1595),(191,95) */ /* CIF TextPosition (1047,1595) */ NEXTSTATE trains ; /* CIF End State */ ENDSTATE; /* CIF State (190,714),(191,95) */ /* CIF TextPosition (190,714) */ STATE trains ; /* CIF Line (285,809),(285,857) */ /* CIF Input (190,857),(191,95) Right */ /* CIF TextPosition (190,857) */ INPUT redefined trainLeaving(track) ; /* CIF Line (285,952),(285,1000) */ /* CIF Task (190,1000),(191,95) */ /* CIF TextPosition (190,1000) */ TASK trackTbl(track).count:= trackTbl(track).count-1; /* CIF Line (285,1095),(285,1166) */ /* CIF Decision (190,1166),(191,96) */ /* CIF TextPosition (190,1166) */ DECISION call totalCount /* CIF Comment (642,1143),(334,142) */ /* CIF TextPosition (642,1143) */ /* CIF Line (642,1214),(404,1214),(404,1214),(381,1214) Dashed */ COMMENT ' total number of trains (all tracks) between the sensors '; /* CIF Answer InvisibleBrackets */ /* CIF Line (285,1262),(285,1404) */ /* CIF TextPosition (309,1309) */ ( 0 ): /* CIF ProcedureCall (190,1404),(191,96) */ /* CIF TextPosition (190,1404) */ CALL switchBoth ; /* CIF Line (285,1500),(285,1595) */ /* CIF NextState (190,1595),(191,95) */ /* CIF TextPosition (190,1595) */ NEXTSTATE both ; /* CIF Answer InvisibleBrackets */ /* CIF Line (381,1214),(571,1214),(571,1595) */ /* CIF TextPosition (595,1309) */ ELSE: /* CIF NextState (476,1595),(190,95) */ /* CIF TextPosition (476,1595) */ NEXTSTATE - ; /* CIF End Decision */ ENDDECISION; /* CIF End State */ ENDSTATE; /* CIF End ServiceTypeDiagram */ ENDSERVICE TYPE; /* CIF ServiceTypeDiagram */ /* CIF Page 1 (3190,3190) */ /* CIF Frame (95,95),(1595,1595) */ /* CIF TextPosition (119,185) */ /* CIF TextPosition (1595,119) PageName */ /* CIF Specific CSDL Version 1.1 */ /* CIF Specific SDT OriginalFileName 'ManyCarsPrecedenceController.sst' */ /* CIF Specific SDT Page 1 Scale 90 Grid (50,50) AutoNumbered */ SERVICE TYPE<> ManyCarsPrecedenceController INHERITS TrainsPrecedenceController; /* CIF CurrentPage 1 */ /* CIF Text (1071,381),(548,142) */ /* CIF TextPosition (1071,381) */ /* timer */ timer t1:=closureTime; /* CIF End Text */ /* CIF Text (1071,238),(548,119) */ /* CIF TextPosition (1071,238) */ synonym closureTime Duration=30; /* closure time of the gate */ /* CIF End Text */ /* CIF State (738,523),(190,96) */ /* CIF TextPosition (738,523) */ STATE cars ; /* CIF Line (833,619),(833,690) */ /* CIF Input (738,690),(190,95) Right */ /* CIF TextPosition (738,690) */ INPUT t1 ; /* CIF Line (833,785),(833,857) */ /* CIF Decision (738,857),(190,95) */ /* CIF TextPosition (738,857) */ DECISION call totalCount /* CIF Comment (1262,809),(333,191) */ /* CIF TextPosition (1262,809) */ /* CIF Line (1262,904),(952,904),(952,904),(928,904) Dashed */ COMMENT ' number of trains between the sensors (should be 0 due to change C1) '; /* CIF Answer InvisibleBrackets */ /* CIF Line (833,952),(833,1143) */ /* CIF TextPosition (857,976) */ ( 0 ): /* CIF ProcedureCall (738,1143),(190,95) */ /* CIF TextPosition (738,1143) */ CALL switchBoth ; /* CIF Line (833,1238),(833,1452) */ /* CIF NextState (738,1452),(190,95) */ /* CIF TextPosition (738,1452) */ NEXTSTATE both ; /* CIF Answer InvisibleBrackets */ /* CIF Line (928,904),(1095,904),(1095,1143) */ /* CIF TextPosition (1119,976) */ ELSE: /* CIF ProcedureCall (1000,1143),(190,95) */ /* CIF TextPosition (1000,1143) */ CALL switchTrains ; /* CIF Line (1095,1238),(1095,1452) */ /* CIF NextState (1000,1452),(190,95) */ /* CIF TextPosition (1000,1452) */ NEXTSTATE trains ; /* CIF End Decision */ ENDDECISION; /* CIF End State */ ENDSTATE; /* CIF State (190,523),(191,96) */ /* CIF TextPosition (190,523) */ STATE* ; /* CIF Line (285,619),(285,690) */ /* CIF Input (190,690),(191,95) Right */ /* CIF TextPosition (190,690) */ INPUT redefined manyCarsWaiting /* CIF Comment (476,690),(190,95) */ /* CIF TextPosition (476,690) */ /* CIF Line (476,738),(381,738) Dashed */ COMMENT ' a lot of cars are waiting '; /* CIF Line (285,785),(285,1143) */ /* CIF ProcedureCall (190,1143),(191,95) */ /* CIF TextPosition (190,1143) */ CALL switchCars ; /* CIF Line (285,1238),(285,1285) */ /* CIF Set (190,1285),(191,96) */ /* CIF TextPosition (190,1285) */ set(t1) ; /* CIF Line (285,1381),(285,1452) */ /* CIF NextState (190,1452),(191,95) */ /* CIF TextPosition (190,1452) */ NEXTSTATE cars ; /* CIF End State */ ENDSTATE; /* CIF End ServiceTypeDiagram */ ENDSERVICE TYPE;