/* CIF PackageDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (150,150),(1600,2000) */ /* CIF PackageReference (175,25),(200,100) */ /* CIF Page 2 (1900,2300) */ /* CIF Frame (150,150),(1600,2000) */ /* CIF PackageReference (175,25),(200,100) */ /* CIF Page 3 (1900,2300) */ /* CIF Frame (150,150),(1600,2000) */ /* CIF PackageReference (175,25),(200,100) */ /* CIF Page 4 (1900,2300) */ /* CIF Frame (150,150),(1600,2000) */ /* CIF PackageReference (175,25),(200,100) */ /* CIF Page 5 (1900,2300) */ /* CIF Frame (150,150),(1600,2000) */ /* CIF PackageReference (175,25),(200,100) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\Utils\Utils.sun' */ /* CIF Specific SDT Page 1 Scale 84 Grid (50,50) AutoNumbered */ /* CIF Specific SDT Page 2 Scale 97 Grid (50,50) AutoNumbered */ /* CIF Specific SDT Page 3 ShowMeFirst Scale 84 Grid (50,50) AutoNumbered */ /* CIF Specific SDT Page 4 Scale 100 Grid (50,50) AutoNumbered */ /* CIF Specific SDT Page 5 Scale 82 Grid (50,50) AutoNumbered */ Package Utils; /* CIF CurrentPage 1 */ /* CIF Text (450,250),(200,100) */ /*** USER DEFINED TYPES ***/ /* All user defined types need to be prepared for distribution in such a way that two operators for serializing/deserializing the data are defined. If the type is named one operator to convert the type to string, ToStr, and one operator to convert a given string to the type, to, is needed. */ /* NOTE: Within operator definitions no SDL-procedures can be called! Only operators and external C-functions that return values are available. */ /* CIF End Text */ /* CIF Text (450,700),(200,100) */ /*** SYNTYPES ***/ /* CIF End Text */ /* CIF Text (450,850),(200,100) */ SYNTYPE Analog=Real ENDSYNTYPE; /* CIF End Text */ /* CIF Text (450,1000),(200,100) */ /*** USER DEFINED C-FUNCTIONS ***/ /* CIF End Text */ /* CIF Text (450,1150),(200,100) */ /* Proz. zur Umwandlung von duration nach Real */ procedure dur2Real; fpar IN dur Duration; RETURNS REAL; EXTERNAL; /*#CODE #HEADING extern SDL_Real dur2Real(SDL_Duration); */ /* CIF End Text */ /* CIF Text (450,1550),(200,100) */ /*** I/O-FUNCTIONS ***/ /* CIF End Text */ /* CIF Text (1150,1550),(200,100) */ /*#include 'file.pr' */ /* CIF End Text */ /* CIF Text (450,1700),(200,100) */ /* Proz zum Ausdruck eines beliebigen Strings mit der aktuellen Zeit */ procedure printIt; fpar IN c CharString, IN dur Time; EXTERNAL; /*#CODE #HEADING extern void printIt(SDL_Charstring, SDL_Time); */ /* CIF End Text */ /* CIF CurrentPage 2 */ /* CIF Text (200,400),(200,100) */ /*was Caltimetype*/ /* CIF End Text */ /* CIF Procedure (250,550),(400,250) */ /* CIF TextPosition (333,643) */ procedure UseNULLetc referenced; /* CIF CurrentPage 3 */ /* CIF Text (450,250),(200,100) */ /*** PREDEFINED TYPES ***/ /* conversion functions implemented in C to be able to use them within operator definitions! */ /* CIF End Text */ /* CIF Text (200,450),(200,100) */ /* INTEGER */ procedure integerToStr; fpar in i Integer; returns Charstring; external; procedure toInteger; fpar in s Charstring; returns Integer; external; /*#CODE #HEADING extern SDL_Charstring integerToStr(SDL_Integer); extern SDL_Integer toInteger(SDL_Charstring); */ /* CIF End Text */ /* CIF Text (1050,450),(200,100) */ /* REAL */ procedure realToStr; fpar in r Real; returns Charstring; external; procedure toReal; fpar in s Charstring; returns Real; external; /*#CODE #HEADING extern SDL_Charstring realToStr(SDL_Real); extern SDL_Real toReal(SDL_Charstring); */ /* CIF End Text */ /* CIF Text (200,1150),(200,100) */ /* DURATION */ procedure durationToStr; fpar in d Duration; returns Charstring; external; procedure toDuration; fpar in s Charstring; returns Duration; external; /*#CODE #HEADING extern SDL_Charstring durationToStr(SDL_Duration); extern SDL_Duration toDuration(SDL_Charstring); */ /* CIF End Text */ /* CIF Text (1100,1150),(200,100) */ /* TIME */ procedure timeToStr; fpar in t Time; returns Charstring; external; /* CIF End Text */ /* CIF Text (200,1800),(200,100) */ /* PID */ /* NOTE: PIDs are only valid within a single partition. Therefore, Sending PID data across partitions makes no sense! Thus, the following functions will return an error. */ /* CIF End Text */ /* CIF CurrentPage 4 */ /* CIF Text (450,250),(200,100) */ /*** STRING-FUNCTIONS ***/ /* defined in C to be able to use them within operator definitions also */ /* CIF End Text */ /* CIF Text (200,450),(200,100) */ /* the following procedures handle strings that are separated by spaces */ /* CIF End Text */ /* CIF Text (200,600),(200,100) */ procedure to1stString; fpar in s Charstring; returns Charstring; external; /*#CODE #HEADING extern SDL_Charstring to1stString(SDL_Charstring); */ /* CIF End Text */ /* CIF Text (950,600),(200,100) */ procedure to2ndString; fpar in s Charstring; returns Charstring; external; /*#CODE #HEADING extern SDL_Charstring to2ndString(SDL_Charstring); */ /* CIF End Text */ /* CIF Text (300,950),(200,100) */ /*** USER-DEFINED PROCEDURES ***/ /* used during signal propagation */ /* CIF End Text */ /* CIF Text (200,1100),(200,100) */ /* used in setPhysVal */ /* CIF End Text */ /* CIF Text (200,1250),(200,100) */ /*** STANDARD SIGNALS ***/ /* CIF End Text */ /* CIF Text (800,1250),(200,100) */ SIGNAL go(Charstring); /* CIF End Text */ /* CIF Text (200,1400),(200,100) */ /*** RPC-DEFINITIONS ***/ /* CIF End Text */ /* CIF Text (200,1550),(200,100) */ REMOTE PROCEDURE setPhysVal; FPAR IN CharString; REMOTE PROCEDURE setPhysServerVal; FPAR IN CharString; REMOTE PROCEDURE putAnalogVal; FPAR IN CharString, Analog; REMOTE PROCEDURE putPanelVal; FPAR IN CharString, CharString; REMOTE PROCEDURE pollPhysVal; FPAR IN CharString; REMOTE PROCEDURE putPhysServerVal; FPAR IN CharString, Charstring; REMOTE PROCEDURE setPhysEventMode; FPAR IN CharString; REMOTE PROCEDURE announceInstance; FPAR IN PID, CharString; REMOTE PROCEDURE revokeInstance; FPAR IN PID; REMOTE PROCEDURE getPID; FPAR CharString; RETURNS PID; REMOTE PROCEDURE pollPhysData; FPAR IN CharString, IN Real; REMOTE PROCEDURE putPhysData; FPAR IN CharString, IN Charstring, IN Analog, IN Time; /* CIF End Text */ /* CIF Procedure (650,1100),(300,100) */ /* CIF TextPosition (700,1125) */ procedure getLastId referenced; /* CIF Procedure (1000,1100),(350,100) */ /* CIF TextPosition (1050,1125) */ procedure cutFirstId referenced; /* CIF Procedure (1400,1100),(300,100) */ /* CIF TextPosition (1450,1125) */ procedure cutLastId referenced; /* CIF CurrentPage 5 */ /* CIF Text (450,250),(200,100) */ /*** DISTRIBUTION ***/ /* CIF End Text */ /* CIF Text (200,400),(200,100) */ /* is called by ProtoCtrl to send serialized signal from ProtoDriver of the remote partition to ProtoStubs */ REMOTE PROCEDURE setSignalVal; FPAR IN Charstring, Charstring; /* CIF End Text */ /* CIF Text (200,550),(200,100) */ /* is called by ProtoStub to send serialized signal to remote partition containing ProtoDriver via ProtoCtrl */ REMOTE PROCEDURE putProtoStubSignal; FPAR IN CharString, Charstring, Charstring; /* CIF End Text */ /* CIF End PackageDiagram */ endpackage Utils; /* CIF ProcedureDiagram */ /* CIF Page 1 (1900,2000) */ /* CIF Frame (0,0),(1900,1750) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\Utils\getLastId.spd' */ /* CIF Specific SDT Page 1 Scale 100 Grid (250,150) AutoNumbered */ Procedure getLastId ;FPAR IN s CharString; RETURNS CharString; /* CIF DefaultSize (200,100) */ /* CIF Text (550,100) */ DCL rs CharString; DCL sLen, no INTEGER; /*RR DCL firstNumber Boolean := False; RR*/ /* CIF End Text */ /* CIF Text (800,250) */ /* returns the first id of the string s */ /* CIF End Text */ /* CIF CurrentPage 1 */ /* CIF ProcedureStart (550,250) */ start ; /* CIF Line (650,350),(650,400) */ /* CIF Task (550,400) */ task sLen:= Length (s), rs:=''; /* CIF Line (650,500),(650,550) */ /* CIF Decision (550,550) */ decision sLen=0; /* CIF Answer Left InvisibleBrackets */ /* CIF Line (550,600),(150,600),(150,700) */ /* CIF TextPosition (125,625) */ (true): /* CIF Return (100,700),(100,100) */ return rs; /* CIF Answer InvisibleBrackets */ /* CIF Line (650,650),(650,700) */ /* CIF TextPosition (675,675) */ (false): /* CIF Task (550,700) */ task no:=SLen; /* CIF Line (650,800),(650,850) */ /* CIF End Decision */ enddecision; /* CIF Label Invisible */ grst25: /* CIF Decision (550,850) */ decision (s(no) >='0') AND (s(no)<='9'); /* CIF Answer Left InvisibleBrackets */ /* CIF Line (550,900),(400,900),(400,1000) */ /* CIF TextPosition (375,925) */ (true): /* CIF Task (300,1000) */ task no:= no-1; /* CIF Line (400,1100),(400,1125),(225,1125),(225,825),(650,825),(650,850) */ /* CIF Join Invisible */ join grst25; /* CIF Answer InvisibleBrackets */ /* CIF Line (650,950),(650,1150) */ /* CIF TextPosition (675,975) */ (false): /* CIF Label Invisible */ grst26: /* CIF Decision (550,1150) */ decision no=1; /* CIF Answer Left InvisibleBrackets */ /* CIF Line (550,1200),(150,1200),(150,1300) */ /* CIF TextPosition (125,1225) */ (true): /* CIF Return (100,1300),(100,100) */ return s; /* CIF Answer InvisibleBrackets */ /* CIF Line (650,1250),(650,1300) */ /* CIF TextPosition (675,1275) */ (false): /* CIF Task (550,1300) */ task no := no-1; /* CIF Line (650,1400),(650,1450) */ /* CIF Decision (550,1450) */ decision (s(no) >='0') AND (s(no)<='9'); /* CIF Answer Left InvisibleBrackets */ /* CIF Line (550,1500),(525,1500),(525,1125),(650,1125),(650,1150) */ /* CIF TextPosition (550,1450) */ (false): /* CIF Answer Right InvisibleBrackets */ /* CIF Line (750,1500),(900,1500),(900,1125),(1150,1125),(1150,1150) */ /* CIF TextPosition (925,1150) */ (true): /* CIF Task (1050,1150) */ task rs:= SubString(s, no+1, SLen-no); /* CIF Line (1150,1250),(1150,1300) */ /* CIF Return (1100,1300),(100,100) */ return rs; /* CIF End Decision */ enddecision; /* CIF End Decision */ enddecision; /* CIF Join Invisible */ join grst26; /* CIF End Decision */ enddecision; /* CIF Comment (800,700) Right */ /* no will point to the first character, which is not part of the first id */ /* CIF End ProcedureDiagram */ endprocedure getLastId; /* CIF ProcedureDiagram */ /* CIF Page 1 (1900,2000) */ /* CIF Frame (0,0),(1900,1750) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\Utils\cutFirstId.spd' */ /* CIF Specific SDT Page 1 Scale 100 Grid (250,150) AutoNumbered */ Procedure cutFirstId ;FPAR IN s CharString; RETURNS CharString; /* CIF DefaultSize (200,100) */ /* CIF Text (550,100) */ DCL rs CharString; DCL sLen, no INTEGER; /*RR DCL firstNumber Boolean := False; RR*/ /* CIF End Text */ /* CIF Text (800,250) */ /* cuts the first id of the string s and returns the resulting string*/ /* CIF End Text */ /* CIF CurrentPage 1 */ /* CIF ProcedureStart (550,250) */ start ; /* CIF Line (650,350),(650,400) */ /* CIF Task (550,400) */ task sLen:= Length (s), rs:='',no:=0; /* CIF Line (650,500),(650,550) */ /* CIF Decision (550,550) */ decision sLen=no; /* CIF Answer Left InvisibleBrackets */ /* CIF Line (550,600),(150,600),(150,700) */ /* CIF TextPosition (125,625) */ (true): /* CIF Return (100,700),(100,100) */ return rs; /* CIF Answer InvisibleBrackets */ /* CIF Line (650,650),(650,700) */ /* CIF TextPosition (675,675) */ (false): /* CIF End Decision */ enddecision; /* CIF Label Invisible */ grst27: /* CIF Task (550,700) */ task no:=no+1 /* CIF Comment (800,700) Right */ /* CIF Line (800,750),(750,750) Dashed */ comment 'no will point to the first character, which is not part of the first id' ; /* CIF Line (650,800),(650,850) */ /* CIF Decision (550,850) */ decision (s(no) >='0') AND (s(no)<='9'); /* CIF Answer Left InvisibleBrackets */ /* CIF Line (550,900),(450,900),(450,675),(650,675),(650,700) */ /* CIF TextPosition (475,700) */ (false): /* CIF Join Invisible */ join grst27; /* CIF Answer InvisibleBrackets */ /* CIF Line (650,950),(650,1000) */ /* CIF TextPosition (675,975) */ (true): /* CIF Label Invisible */ grst28: /* CIF Decision (550,1000) */ decision sLen=no; /* CIF Answer Left InvisibleBrackets */ /* CIF Line (550,1050),(150,1050),(150,1150) */ /* CIF TextPosition (125,1075) */ (true): /* CIF Return (100,1150),(100,100) */ return ''; /* CIF Answer InvisibleBrackets */ /* CIF Line (650,1100),(650,1150) */ /* CIF TextPosition (675,1125) */ (false): /* CIF Task (550,1150) */ task no := no+1; /* CIF Line (650,1250),(650,1300) */ /* CIF Decision (550,1300) */ decision (s(no) >='0') AND (s(no)<='9'); /* CIF Answer Left InvisibleBrackets */ /* CIF Line (550,1350),(450,1350),(450,975),(650,975),(650,1000) */ /* CIF TextPosition (475,1300) */ (true): /* CIF Answer Right InvisibleBrackets */ /* CIF Line (750,1350),(900,1350),(900,1125),(1150,1125),(1150,1150) */ /* CIF TextPosition (750,1350) */ (false): /* CIF Task (1050,1150) */ task rs:= SubString(s, no, SLen-no+1); /* CIF Line (1150,1250),(1150,1300) */ /* CIF Return (1100,1300),(100,100) */ return rs; /* CIF End Decision */ enddecision; /* CIF End Decision */ enddecision; /* CIF Join Invisible */ join grst28; /* CIF End Decision */ enddecision; /* CIF End ProcedureDiagram */ endprocedure cutFirstId; /* CIF ProcedureDiagram */ /* CIF Page 1 (1900,2000) */ /* CIF Frame (0,0),(1900,1750) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\Utils\cutLastId.spd' */ /* CIF Specific SDT Page 1 Scale 100 Grid (250,150) AutoNumbered */ Procedure cutLastId ;FPAR IN s CharString; RETURNS CharString; /* CIF DefaultSize (200,100) */ /* CIF Text (550,100) */ DCL rs CharString; DCL sLen, no INTEGER; /*RR DCL firstNumber Boolean := False; RR*/ /* CIF End Text */ /* CIF Text (800,250) */ /* returns all ids of the string s but the last*/ /* CIF End Text */ /* CIF CurrentPage 1 */ /* CIF ProcedureStart (550,250) */ start ; /* CIF Line (650,350),(650,400) */ /* CIF Task (550,400) */ task sLen:= Length (s), rs:=''; /* CIF Line (650,500),(650,550) */ /* CIF Decision (550,550) */ decision sLen=0; /* CIF Answer Left InvisibleBrackets */ /* CIF Line (550,600),(150,600),(150,700) */ /* CIF TextPosition (125,625) */ (true): /* CIF Return (100,700),(100,100) */ return rs; /* CIF Answer InvisibleBrackets */ /* CIF Line (650,650),(650,700) */ /* CIF TextPosition (675,675) */ (false): /* CIF Task (550,700) */ task no:=SLen; /* CIF Line (650,800),(650,850) */ /* CIF End Decision */ enddecision; /* CIF Label Invisible */ grst29: /* CIF Decision (550,850) */ decision (s(no) >='0') AND (s(no)<='9'); /* CIF Answer Left InvisibleBrackets */ /* CIF Line (550,900),(400,900),(400,1000) */ /* CIF TextPosition (375,925) */ (true): /* CIF Task (300,1000) */ task no:= no-1; /* CIF Line (400,1100),(400,1125),(225,1125),(225,825),(650,825),(650,850) */ /* CIF Join Invisible */ join grst29; /* CIF Answer InvisibleBrackets */ /* CIF Line (650,950),(650,1150) */ /* CIF TextPosition (675,975) */ (false): /* CIF Label Invisible */ grst30: /* CIF Decision (550,1150) */ decision no=1; /* CIF Answer Left InvisibleBrackets */ /* CIF Line (550,1200),(150,1200),(150,1300) */ /* CIF TextPosition (125,1225) */ (true): /* CIF Return (100,1300),(100,100) */ return s; /* CIF Answer InvisibleBrackets */ /* CIF Line (650,1250),(650,1300) */ /* CIF TextPosition (675,1275) */ (false): /* CIF Task (550,1300) */ task no := no-1; /* CIF Line (650,1400),(650,1450) */ /* CIF Decision (550,1450) */ decision (s(no) >='0') AND (s(no)<='9'); /* CIF Answer Left InvisibleBrackets */ /* CIF Line (550,1500),(525,1500),(525,1125),(650,1125),(650,1150) */ /* CIF TextPosition (550,1450) */ (false): /* CIF Answer Right InvisibleBrackets */ /* CIF Line (750,1500),(900,1500),(900,1125),(1150,1125),(1150,1150) */ /* CIF TextPosition (925,1150) */ (true): /* CIF Task (1050,1150) */ task rs:= SubString(s, 1, no); /* CIF Line (1150,1250),(1150,1300) */ /* CIF Return (1100,1300),(100,100) */ return rs; /* CIF End Decision */ enddecision; /* CIF End Decision */ enddecision; /* CIF Join Invisible */ join grst30; /* CIF End Decision */ enddecision; /* CIF Comment (800,700) Right */ /* no will point to the first character, which is not part of the first id */ /* CIF End ProcedureDiagram */ endprocedure cutLastId; /* CIF ProcedureDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\Utils\UseNULLetc.spd' */ /* CIF Specific SDT Page 1 Scale 100 Grid (50,50) AutoNumbered */ procedure UseNULLetc ;FPAR f FileName; RETURNS FileName; /* CIF Text (50,250),(200,100) */ /* dummy procedure to use NULL etc from SDT package adt which otherwise generate the warnings: #SDTREF(TEXT,C:\Telelogic\SDL_TTCN_Suite4.3\sdt\include\adt\file.pr,25,9) 1: WARNING 324 NULL : synonym not used #SDTREF(TEXT,C:\Telelogic\SDL_TTCN_Suite4.3\sdt\include\adt\file.pr,26,9) 2: WARNING 324 stdin : synonym not used #SDTREF(TEXT,C:\Telelogic\SDL_TTCN_Suite4.3\sdt\include\adt\file.pr,27,9) 3: WARNING 324 stdout : synonym not used #SDTREF(TEXT,C:\Telelogic\SDL_TTCN_Suite4.3\sdt\include\adt\file.pr,28,9) 4: WARNING 324 stderr : synonym not used */ /* CIF End Text */ /* CIF CurrentPage 1 */ /* CIF ProcedureStart (550,800),(200,100) */ start ; /* CIF Line (650,900),(650,950) */ /* CIF Return (600,950),(100,100) */ return IF (f = NULL) AND (f= stdin) AND (f=stdout) AND (f=stderr) AND (f/=NULL) THEN CALL UseNULLetc(f) /*recursion forces use but unreachable */ ELSE f FI; /* CIF End ProcedureDiagram */ endprocedure UseNULLetc; /* CIF PackageDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (150,150),(1600,2000) */ /* CIF PackageReference (175,25),(200,100) */ /* CIF Page 2 (1900,2300) */ /* CIF Frame (150,150),(1600,2000) */ /* CIF PackageReference (175,25),(200,100) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\Project\Project.sun' */ /* CIF Specific SDT Page 1 Scale 88 Grid (50,50) AutoNumbered */ /* CIF Specific SDT Page 2 Scale 100 Grid (50,50) AutoNumbered */ Use Utils/to1stString,to2ndString,toDuration; Package Project; /* CIF CurrentPage 1 */ /* CIF Text (200,400),(200,100) */ NEWTYPE SignalStateType LITERALS halt, go; operators signalStateTypeToStr:SignalStateType->Charstring; operator signalStateTypeToStr referenced; ENDNEWTYPE; /* CIF End Text */ /* CIF Text (200,650),(200,100) */ NEWTYPE CreationModeType LITERALS period, event; ENDNEWTYPE; /* CIF End Text */ /* CIF Text (200,800),(200,100) */ NEWTYPE TrackType LITERALS regular, fast; operators trackTypeToStr:TrackType->Charstring; toTrackType:Charstring->TrackType; operator trackTypeToStr referenced; operator toTrackType referenced; ENDNEWTYPE; /* CIF End Text */ /* CIF Text (200,1150),(200,100) */ NEWTYPE GateStateType LITERALS opened, closed; operators gateStateTypeToStr:GateStateType->Charstring; operator gateStateTypeToStr referenced; ENDNEWTYPE; /* CIF End Text */ /* CIF Text (200,1400),(200,100) */ NEWTYPE TrackDurationType STRUCT trType TrackType; ts1Dur Duration; ts1SigDur Duration; sigTs2Dur Duration; breakDur Duration; minDistDur Duration; operators toTrackDurationType:Charstring->TrackDurationType; operator toTrackDurationType referenced; ENDNEWTYPE; /* CIF End Text */ /* CIF Operator signalStateTypeToStr (1050,450),(500,100) */ /* CIF TextPosition (1100,500) */ /* CIF Operator trackTypeToStr (1050,800),(400,100) */ /* CIF TextPosition (1100,850) */ /* CIF Operator toTrackType (1050,950),(400,100) */ /* CIF TextPosition (1125,1000) */ /* CIF Operator gateStateTypeToStr (1100,1150),(450,150) */ /* CIF TextPosition (1162,1225) */ /* CIF Operator toTrackDurationType (1200,1550),(500,150) */ /* CIF TextPosition (1275,1625) */ /* CIF CurrentPage 2 */ /* CIF Text (850,300),(200,100) */ /* Signals used for reporting and monitoring */ SIGNAL repTrain (CharString, Duration, Duration); /* CIF End Text */ /* CIF Text (200,400),(200,100) */ /* Signals of EnvTrainSens: */ Signal newTrain (CharString); /* CIF End Text */ /* CIF Text (200,550),(200,100) */ /* Signals of EnvTrain: */ /*RR Signal setMinDelayDur (CharString, Duration); RR*/ Signal trainPassed (CharString); SIGNAL trainArrived (CharString); SIGNAL newTrainStart (CharString); SIGNAL newTrainStop (CharString, Real); Signal newSeqTrain (CharString, CharString); Signal initTrain (CharString, TrackDurationType, SignalStateType); /* CIF End Text */ /* CIF Text (200,850),(200,100) */ /* Signals of EnvSignal: */ Signal newSignalState (CharString, SignalStateType); Signal getSignalState (CharString); /* CIF End Text */ /* CIF Text (200,1000),(200,100) */ /* Signals of EnvTrack: */ Signal setPerToCreTrain (CharString, Duration); Signal creNewTrain (CharString); SIGNAL initTrack (CharString, TrackDurationType, Duration); /* CIF End Text */ /* CIF Text (200,1250),(200,100) */ /* Signals of EnvGate: */ Signal newGateState (GateStateType); Signal getGateState; /* CIF End Text */ /* CIF Text (200,1400),(200,100) */ /* Signals of EnvRoad: */ Signal genCars (Integer); Signal setPeriod (Duration); Signal gateOpened; Signal gateClosed; Signal setDecrPer (Duration); /* CIF End Text */ /* CIF Text (900,1400),(200,100) */ /* Signals of CrossingCtrl */ Signal setStrategy (CharString); /* CIF End Text */ /* CIF Text (850,1650),(200,100) */ /* SIgnals of TrackCtrl */ Signal askForGo (CharString); Signal noTrains (CharString); /* CIF End Text */ /* CIF Text (200,1700),(200,100) */ /* SIGNALS of GateCtrl*/ Signal setGate (GateStateType); /* CIF End Text */ /* CIF Text (200,1850),(200,100) */ /* Signals of SignalCtrl: */ Signal setSignalState (CharString, SignalStateType); /* CIF End Text */ /* CIF Text (200,2000),(200,100) */ /* Signals of RoadCtrl: */ Signal newCars (Boolean); /* CIF End Text */ /* CIF Text (800,2000),(200,100) */ /* Signals of EnvCrossing: */ SIGNAL initTracks(Integer, TrackDurationType, Duration); SIGNAL initTracksDone; /* CIF End Text */ /* CIF End PackageDiagram */ endpackage Project; /* CIF OperatorDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\Project\SignalStateTypeToStr.sop' */ /* CIF Specific SDT Page 1 Scale 100 Grid (250,150) AutoNumbered */ operator SignalStateTypeToStr ;fpar r SignalStateType; returns Charstring; /* CIF DefaultSize (200,100) */ /* CIF Text (800,400) */ DCL rs CharString; /* CIF End Text */ /* CIF CurrentPage 1 */ /* CIF ProcedureStart (300,550) */ start ; /* CIF Line (400,650),(400,850) */ /* CIF Decision (300,850) */ decision r; /* CIF Answer InvisibleBrackets */ /* CIF Line (400,950),(400,975),(650,975),(650,1000) */ /* CIF TextPosition (475,925) */ (halt): /* CIF Task (550,1000) */ task rs := 'halt'; /* CIF Line (650,1100),(650,1125),(400,1125),(400,1150) */ /* CIF Answer Right InvisibleBrackets */ /* CIF Line (500,900),(900,900),(900,1000) */ /* CIF TextPosition (925,925) */ (go): /* CIF Task (800,1000) */ task rs := 'go'; /* CIF Line (900,1100),(900,1125),(400,1125),(400,1150) */ /* CIF End Decision */ enddecision; /* CIF Return (350,1150),(100,100) */ return rs; /* CIF End OperatorDiagram */ endoperator SignalStateTypeToStr; /* CIF OperatorDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\Project\trackTypeToStr.sop' */ /* CIF Specific SDT Page 1 Scale 100 Grid (250,150) AutoNumbered */ operator trackTypeToStr ;fpar r TrackType; returns Charstring; /* CIF DefaultSize (200,100) */ /* CIF Text (550,250) */ DCL s Charstring; /* CIF End Text */ /* CIF CurrentPage 1 */ /* CIF ProcedureStart (50,250) */ start ; /* CIF Line (150,350),(150,400) */ /* CIF Task (50,400) */ task s := ''; /* CIF Line (150,500),(150,550) */ /* CIF Decision (50,550) */ decision r; /* CIF Answer InvisibleBrackets */ /* CIF Line (150,650),(150,675),(400,675),(400,700) */ /* CIF TextPosition (225,625) */ (regular): /* CIF Task (300,700) */ task s := 'regular'; /* CIF Line (400,800),(400,825),(150,825),(150,850) */ /* CIF Answer Right InvisibleBrackets */ /* CIF Line (250,600),(650,600),(650,700) */ /* CIF TextPosition (675,625) */ (fast): /* CIF Task (550,700) */ task s := 'fast'; /* CIF Line (650,800),(650,825),(150,825),(150,850) */ /* CIF End Decision */ enddecision; /* CIF Return (100,850),(100,100) */ return s; /* CIF End OperatorDiagram */ endoperator trackTypeToStr; /* CIF OperatorDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\Project\toTrackType.sop' */ /* CIF Specific SDT Page 1 Scale 100 Grid (250,150) AutoNumbered */ operator toTrackType ;fpar s Charstring; returns TrackType; /* CIF DefaultSize (200,100) */ /* CIF Text (550,250) */ DCL r TrackType; /* CIF End Text */ /* CIF CurrentPage 1 */ /* CIF ProcedureStart (50,400) */ start ; /* CIF Line (150,500),(150,700) */ /* CIF Decision (50,700) */ decision s; /* CIF Answer InvisibleBrackets */ /* CIF Line (150,800),(150,825),(400,825),(400,850) */ /* CIF TextPosition (225,775) */ ('regular'): /* CIF Task (300,850) */ task r := regular; /* CIF Line (400,950),(400,975),(150,975),(150,1000) */ /* CIF Answer Right InvisibleBrackets */ /* CIF Line (250,750),(650,750),(650,850) */ /* CIF TextPosition (675,775) */ ('fast'): /* CIF Task (550,850) */ task r := fast; /* CIF Line (650,950),(650,975),(150,975),(150,1000) */ /* CIF End Decision */ enddecision; /* CIF Return (100,1000),(100,100) */ return r; /* CIF End OperatorDiagram */ endoperator toTrackType; /* CIF OperatorDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\Project\gateStateTypeToStr.sop' */ /* CIF Specific SDT Page 1 Scale 100 Grid (250,150) AutoNumbered */ operator gateStateTypeToStr ;fpar r GateStateType; returns Charstring; /* CIF DefaultSize (200,100) */ /* CIF Text (550,250) */ DCL s Charstring; /* CIF End Text */ /* CIF CurrentPage 1 */ /* CIF ProcedureStart (50,250) */ start ; /* CIF Line (150,350),(150,400) */ /* CIF Task (50,400) */ task s := ''; /* CIF Line (150,500),(150,550) */ /* CIF Decision (50,550) */ decision r; /* CIF Answer InvisibleBrackets */ /* CIF Line (150,650),(150,675),(400,675),(400,700) */ /* CIF TextPosition (225,625) */ (opened): /* CIF Task (300,700) */ task s := 'opened'; /* CIF Line (400,800),(400,825),(150,825),(150,850) */ /* CIF Answer Right InvisibleBrackets */ /* CIF Line (250,600),(650,600),(650,700) */ /* CIF TextPosition (675,625) */ (closed): /* CIF Task (550,700) */ task s := 'closed'; /* CIF Line (650,800),(650,825),(150,825),(150,850) */ /* CIF End Decision */ enddecision; /* CIF Return (100,850),(100,100) */ return s; /* CIF End OperatorDiagram */ endoperator gateStateTypeToStr; /* CIF OperatorDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\Project\toTrackDurationType.sop' */ /* CIF Specific SDT Page 1 Scale 100 Grid (250,150) AutoNumbered */ operator toTrackDurationType ;fpar s Charstring; returns TrackDurationType; /* CIF DefaultSize (200,100) */ /* CIF Text (550,100) */ DCL r TrackDurationType; DCL ts1 Charstring; DCL ts2 Charstring; /* CIF End Text */ /* CIF CurrentPage 1 */ /* CIF ProcedureStart (50,400) */ start ; /* CIF Line (150,500),(150,550) */ /* CIF Task (50,550) */ task ts1 := call to1stString(s); /* CIF Line (150,650),(150,850) */ /* CIF Task (50,850) */ task r!trType := toTrackType(ts1); /* CIF Line (150,950),(150,1150) */ /* CIF Task (50,1150) */ task ts2 := call to2ndString(s); /* CIF Line (150,1250),(150,1275),(275,1275),(275,525),(400,525),(400,550) */ /* CIF Task (300,550) */ task ts1 := call to1stString(ts2); /* CIF Line (400,650),(400,850) */ /* CIF Task (300,850) */ task r!ts1Dur := call toDuration(ts1); /* CIF Line (400,950),(400,1150) */ /* CIF Task (300,1150) */ task ts2 := call to2ndString(ts2); /* CIF Line (400,1250),(400,1275),(525,1275),(525,525),(650,525),(650,550) */ /* CIF Task (550,550) */ task ts1 := call to1stString(ts2); /* CIF Line (650,650),(650,850) */ /* CIF Task (550,850) */ task r!ts1SigDur := call toDuration(ts1); /* CIF Line (650,950),(650,1150) */ /* CIF Task (550,1150) */ task ts2 := call to2ndString(ts2); /* CIF Line (650,1250),(650,1275),(775,1275),(775,525),(900,525),(900,550) */ /* CIF Task (800,550) */ task ts1 := call to1stString(ts2); /* CIF Line (900,650),(900,850) */ /* CIF Task (800,850) */ task r!sigTs2Dur := call toDuration(ts1); /* CIF Line (900,950),(900,1150) */ /* CIF Task (800,1150) */ task ts2 := call to2ndString(ts2); /* CIF Line (900,1250),(900,1275),(1025,1275),(1025,525),(1150,525),(1150,550) */ /* CIF Task (1050,550) */ task ts1 := call to1stString(ts2); /* CIF Line (1150,650),(1150,850) */ /* CIF Task (1050,850) */ task r!breakDur := call toDuration(ts1); /* CIF Line (1150,950),(1150,1150) */ /* CIF Task (1050,1150) */ task ts2 := call to2ndString(ts2); /* CIF Line (1150,1250),(1150,1275),(1275,1275),(1275,525),(1400,525),(1400,550) */ /* CIF Task (1300,550) */ task ts1 := call to1stString(ts2); /* CIF Line (1400,650),(1400,850) */ /* CIF Task (1300,850) */ task r!minDistDur := call toDuration(ts1); /* CIF Line (1400,950),(1400,1150) */ /* CIF Return (1350,1150),(100,100) */ return r; /* CIF End OperatorDiagram */ endoperator toTrackDurationType; /* CIF PackageDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (150,150),(1600,2000) */ /* CIF PackageReference (175,25),(200,100) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\EnvRoad\EnvRoad.sun' */ /* CIF Specific SDT Page 1 Scale 100 Grid (50,50) AutoNumbered */ USE Utils; USE Project; Package EnvRoad; /* CIF CurrentPage 1 */ /* CIF Text (600,550),(200,100) */ SIGNALLIST EnvRoadInp = go, genCars, setPeriod, gateClosed, gateOpened, setDecrPer; /*RR SIGNALLIST EnvRoadOutp = dummy; RR*/ /* CIF End Text */ /* CIF BlockType (250,500),(300,200) */ /* CIF TextPosition (275,575) */ block type EnvRoad referenced; /* CIF End PackageDiagram */ endpackage EnvRoad; /* CIF BlockTypeDiagram */ /* CIF BlockPage 1 (1900,1000) */ /* CIF Frame (250,100),(1400,850) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\EnvRoad\EnvRoad.sbt' */ /* CIF Specific SDT Page 1 Scale 80 Grid (50,50) AutoNumbered */ Block Type EnvRoad; /* CIF Gate (250,375),(100,375) */ /* CIF TextPosition (200,325) */ /* CIF TextPosition (125,400) SignalList1 */ gate oi in with (EnvRoadInp); /* CIF SubstructureDiagram Invisible */ substructure EnvRoad; /* CIF CurrentPage 1 */ /* CIF Channel (250,375),(650,375) */ /* CIF TextPosition (272,324) */ /* CIF TextPosition (350,400) SignalList1 */ /* CIF Arrow1Position (350,375) */ channel oi from env via oi to EnvRoadCtrl with (EnvRoadInp); endchannel oi; /* CIF Block (650,350),(650,150) */ /* CIF TextPosition (725,400) */ block EnvRoadCtrl referenced; /* CIF End SubstructureDiagram */ endsubstructure EnvRoad; /* CIF End BlockTypeDiagram */ endblock type EnvRoad; /* CIF BlockDiagram */ /* CIF Page 1 (1900,2100) */ /* CIF Frame (150,150),(1600,1100) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\EnvRoad\EnvRoadCtrl.sbk' */ /* CIF Specific SDT Page 1 Scale 80 Grid (50,50) AutoNumbered */ Block EnvRoadCtrl; /* CIF CurrentPage 1 */ /* CIF SignalRoute (150,700),(650,700) */ /* CIF TextPosition (175,650) */ /* CIF TextPosition (175,725) SignalList1 */ signalroute oi from env to EnvRoadCtrl with (EnvRoadInp); /* CIF Process (650,650),(600,250) */ /* CIF TextPosition (675,750) */ process EnvRoadCtrl referenced; /* CIF Connect */ /* CIF TextPosition (75,675) */ connect oi and oi; /* CIF End BlockDiagram */ endblock EnvRoadCtrl; /* CIF ProcessDiagram */ /* CIF Page 1 (1700,1700) */ /* CIF Frame (0,0),(1700,1700) */ /* CIF Page 2 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Page 3 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\EnvRoad\EnvRoadCtrl.spr' */ /* CIF Specific SDT Page 1 Scale 100 Grid (250,150) AutoNumbered */ /* CIF Specific SDT Page 2 Scale 100 Grid (250,150) AutoNumbered */ /* CIF Specific SDT Page 3 Scale 100 Grid (250,150) AutoNumbered */ Process EnvRoadCtrl; /* CIF DefaultSize (200,100) */ /* CIF CurrentPage 1 */ /* CIF Text (700,100) */ DCL instName Charstring; DCL maxNoOfCars Integer := 5; DCL perDur Duration := 5; Timer perTimer; DCl noOfCars Integer := 0; DCL carsLow Boolean := True; /* CIF End Text */ /* CIF CurrentPage 2 */ /* CIF Text (300,100) */ DCL tempNo Integer; /* CIF End Text */ /* CIF CurrentPage 3 */ /* CIF Text (800,100) */ DCL decrPer Duration := 3; Timer decrT; DCL gateState GateStateType := opened; /* CIF End Text */ /* CIF CurrentPage 2 */ /* CIF Procedure (1300,250) */ /* CIF TextPosition (1325,275) */ procedure checkNo referenced; /* CIF CurrentPage 1 */ /* CIF Start (50,400) */ start ; /* CIF Line (150,500),(150,550) */ /* CIF NextState (50,550) */ nextstate Init1; /* CIF State (50,550) */ state Init1; /* CIF Line (150,650),(150,700) */ /* CIF Input (50,700) Right */ input go (instName); /* CIF Line (150,800),(150,850) */ /* CIF ProcedureCall (50,850) */ call announceInstance (self, instName); /* CIF Line (150,950),(150,1000) */ /* CIF Set (50,1000) */ set (NOW+perDur, perTimer); /* CIF Line (150,1100),(150,1150) */ /* CIF Set (50,1150) */ set(NOW+ decrPer, decrT); /* CIF Line (150,1250),(150,1300) */ /* CIF NextState (50,1300) */ nextstate period; /* CIF End State */ endstate; /* CIF CurrentPage 2 */ /* CIF State (50,250) */ state event; /* CIF End State */ endstate; /* CIF State (300,250) */ state * (Init1); /* CIF Line (400,350),(400,400) */ /* CIF Input (300,400) Right */ input genCars (tempNo); /* CIF Line (400,500),(400,550) */ /* CIF Task (300,550) */ task noOfCars := noOfCars + tempNo; /* CIF Line (400,650),(400,700) */ /* CIF ProcedureCall (300,700) */ call checkNo; /* CIF Line (400,800),(400,850) */ /* CIF Reset (300,850) */ reset (perTimer); /* CIF Line (400,950),(400,1000) */ /* CIF ProcedureCall (300,1000) */ call putPanelVal('obj1', instName//' '// (call integerToStr(noOfCars))); /* CIF Line (400,1100),(400,1150) */ /* CIF NextState (300,1150) */ nextstate event; /* CIF End State */ endstate; /* CIF State (800,250) */ state * (Init1); /* CIF Line (900,350),(900,400) */ /* CIF Input (800,400) Right */ input setPeriod (perDur); /* CIF Line (900,500),(900,550) */ /* CIF Reset (800,550) */ reset (perTimer); /* CIF Line (900,650),(900,700) */ /* CIF Set (800,700) */ set (NOW+perDur, perTimer); /* CIF Line (900,800),(900,850) */ /* CIF NextState (800,850) */ nextstate period; /* CIF End State */ endstate; /* CIF State (1050,250) */ state period; /* CIF Line (1150,350),(1150,400) */ /* CIF Input (1050,400) Right */ input perTimer; /* CIF Line (1150,500),(1150,550) */ /* CIF Task (1050,550) */ task noOfCars := noOfCars + 1; /* CIF Line (1150,650),(1150,700) */ /* CIF Decision (1050,700) */ decision gateState; /* CIF Answer InvisibleBrackets */ /* CIF Line (1150,800),(1150,850) */ /* CIF TextPosition (1175,825) */ (closed): /* CIF ProcedureCall (1050,850) */ call checkNo; /* CIF Line (1150,950),(1150,1000) */ /* CIF Answer Right InvisibleBrackets */ /* CIF Line (1250,750),(1275,750),(1275,975),(1150,975),(1150,1000) */ /* CIF TextPosition (1300,1000) */ (opened): /* CIF End Decision */ enddecision; /* CIF Set (1050,1000) */ set (NOW+perDur, perTimer); /* CIF Line (1150,1100),(1150,1150) */ /* CIF ProcedureCall (1050,1150) */ call putPanelVal('obj1', instName//' '// (call integerToStr(noOfCars))); /* CIF Line (1150,1250),(1150,1300) */ /* CIF NextState (1050,1300) */ nextstate period; /* CIF End State */ endstate; /* CIF CurrentPage 3 */ /* CIF State (300,250) */ state *; /* CIF Line (400,350),(400,400) */ /* CIF Input (300,400) Right */ input decrT; /* CIF Line (400,500),(400,550) */ /* CIF Decision (300,550) */ decision noOfCars <=0; /* CIF Answer InvisibleBrackets */ /* CIF Line (400,650),(400,700) */ /* CIF TextPosition (425,675) */ (false): /* CIF Decision (300,700) */ decision gateState; /* CIF Answer InvisibleBrackets */ /* CIF Line (400,800),(400,850) */ /* CIF TextPosition (425,825) */ (opened): /* CIF Task (300,850) */ task noOfCars:= noOfCars-1; /* CIF Line (400,950),(400,1000) */ /* CIF ProcedureCall (300,1000) */ call putPanelVal('obj1', instName//' '// (call integerToStr(noOfCars))); /* CIF Line (400,1100),(400,1150) */ /* CIF ProcedureCall (300,1150) */ call checkNo; /* CIF Line (400,1250),(400,1300) */ /* CIF Label Invisible */ grst31: /* CIF Set (300,1300) */ set(NOW+ decrPer, decrT); /* CIF Line (400,1400),(400,1450) */ /* CIF Label Invisible */ grst32: /* CIF NextState (300,1450) */ nextstate -; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (500,750),(575,750),(575,1425),(400,1425),(400,1450) */ /* CIF TextPosition (600,1450) */ (closed): /* CIF Join Invisible */ join grst32; /* CIF End Decision */ enddecision; /* CIF Answer Left InvisibleBrackets */ /* CIF Line (300,600),(275,600),(275,1275),(400,1275),(400,1300) */ /* CIF TextPosition (200,600) */ (true): /* CIF Join Invisible */ join grst31; /* CIF End Decision */ enddecision; /* CIF End State */ endstate; /* CIF State (800,250) */ state *; /* CIF Line (900,350),(900,400) */ /* CIF Input (800,400) Right */ input gateOpened; /* CIF Line (900,500),(900,550) */ /* CIF Task (800,550) */ task gateState:= opened; /* CIF Line (900,650),(900,700) */ /* CIF Set (800,700) */ set(NOW+ decrPer, decrT); /* CIF Line (900,800),(900,850) */ /* CIF NextState (800,850) */ nextstate -; /* CIF End State */ endstate; /* CIF State (1050,250) */ state *; /* CIF Line (1150,350),(1150,400) */ /* CIF Input (1050,400) Right */ input gateClosed; /* CIF Line (1150,500),(1150,550) */ /* CIF Reset (1050,550) */ reset (decrT); /* CIF Line (1150,650),(1150,700) */ /* CIF Task (1050,700) */ task gateState:= closed; /* CIF Line (1150,800),(1150,850) */ /* CIF NextState (1050,850) */ nextstate -; /* CIF End State */ endstate; /* CIF State (1550,250) */ state *; /* CIF Line (1650,350),(1650,400) */ /* CIF Input (1550,400) Right */ input setDecrPer (decrPer); /* CIF Line (1650,500),(1650,550) */ /* CIF Reset (1550,550) */ reset (decrT); /* CIF Line (1650,650),(1650,700) */ /* CIF Decision (1550,700) */ decision gateState; /* CIF Answer InvisibleBrackets */ /* CIF Line (1650,800),(1650,850) */ /* CIF TextPosition (1675,800) */ (opened): /* CIF Set (1550,850) */ set(NOW+ decrPer, decrT); /* CIF Line (1650,950),(1650,1000) */ /* CIF Answer Right InvisibleBrackets */ /* CIF Line (1750,750),(1850,750),(1850,975),(1650,975),(1650,1000) */ /* CIF TextPosition (1800,700) */ (closed): /* CIF End Decision */ enddecision; /* CIF NextState (1550,1000) */ nextstate -; /* CIF End State */ endstate; /* CIF End ProcessDiagram */ endprocess EnvRoadCtrl; /* CIF ProcedureDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\EnvRoad\checkNo.spd' */ /* CIF Specific SDT Page 1 Scale 100 Grid (250,150) AutoNumbered */ procedure checkNo; /* CIF DefaultSize (200,100) */ /* CIF CurrentPage 1 */ /* CIF ProcedureStart (550,250) */ start ; /* CIF Line (650,350),(650,400) */ /* CIF Decision (550,400) */ decision noOfCars > maxNoOfCars; /* CIF Answer InvisibleBrackets */ /* CIF Line (650,500),(650,550) */ /* CIF TextPosition (675,525) */ (true): /* CIF Decision (550,550) */ decision carsLow; /* CIF Answer InvisibleBrackets */ /* CIF Line (650,650),(650,700) */ /* CIF TextPosition (675,675) */ (true): /* CIF ProcedureCall (550,700) */ call putAnalogVal (instName, 1); /* CIF Line (650,800),(650,850) */ /* CIF Task (550,850) */ task carsLow:= False; /* CIF Line (650,950),(650,1000) */ /* CIF Answer Left InvisibleBrackets */ /* CIF Line (550,600),(525,600),(525,975),(650,975),(650,1000) */ /* CIF TextPosition (550,1000) */ (false): /* CIF End Decision */ enddecision; /* CIF Return (600,1000),(100,100) */ return ; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (750,450),(900,450),(900,550) */ /* CIF TextPosition (925,475) */ (false): /* CIF Decision (800,550) */ decision carsLow; /* CIF Answer InvisibleBrackets */ /* CIF Line (900,650),(900,700) */ /* CIF TextPosition (925,675) */ (false): /* CIF ProcedureCall (800,700) */ call putAnalogVal (instName, 0); /* CIF Line (900,800),(900,850) */ /* CIF Task (800,850) */ task carsLow := True; /* CIF Line (900,950),(900,1000) */ /* CIF Answer Right InvisibleBrackets */ /* CIF Line (1000,600),(1025,600),(1025,975),(900,975),(900,1000) */ /* CIF TextPosition (1050,1000) */ (true): /* CIF End Decision */ enddecision; /* CIF Return (850,1000),(100,100) */ return ; /* CIF End Decision */ enddecision; /* CIF End ProcedureDiagram */ endprocedure checkNo; /* CIF PackageDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (150,150),(1600,2000) */ /* CIF PackageReference (175,25),(200,100) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\EnvGate\EnvGate.sun' */ /* CIF Specific SDT Page 1 Scale 100 Grid (50,50) AutoNumbered */ USE Utils; USE Project; Package EnvGate; /* CIF CurrentPage 1 */ /* CIF Text (600,550),(200,100) */ SIGNALLIST EnvGateInp = go, getGateState; SIGNALLIST EnvGateOutp = newGateState; /* CIF End Text */ /* CIF BlockType (250,500),(300,200) */ /* CIF TextPosition (275,575) */ block type EnvGate referenced; /* CIF End PackageDiagram */ endpackage EnvGate; /* CIF BlockTypeDiagram */ /* CIF BlockPage 1 (1900,1000) */ /* CIF Frame (250,100),(1400,850) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\EnvGate\EnvGate.sbt' */ /* CIF Specific SDT Page 1 Scale 80 Grid (50,50) AutoNumbered */ Block Type EnvGate; /* CIF Gate (250,375),(100,375) */ /* CIF TextPosition (200,325) */ /* CIF TextPosition (125,400) SignalList1 */ gate oi in with (EnvGateInp); /* CIF Gate (1650,375),(1800,375) */ /* CIF TextPosition (1675,325) */ /* CIF TextPosition (1625,400) SignalList1 */ gate oo out with (EnvGateOutp); /* CIF SubstructureDiagram Invisible */ substructure EnvGate; /* CIF CurrentPage 1 */ /* CIF Channel (250,375),(650,375) */ /* CIF TextPosition (272,324) */ /* CIF TextPosition (350,400) SignalList1 */ /* CIF Arrow1Position (350,375) */ channel oi from env via oi to EnvGateCtrl with (EnvGateInp); endchannel oi; /* CIF Channel (1300,375),(1650,375) */ /* CIF TextPosition (1575,325) */ /* CIF TextPosition (1325,400) SignalList1 */ /* CIF Arrow1Position (1562,375) */ channel oo from EnvGateCtrl to env via oo with (EnvGateOutp); endchannel oo; /* CIF Block (650,350),(650,150) */ /* CIF TextPosition (725,400) */ block EnvGateCtrl referenced; /* CIF End SubstructureDiagram */ endsubstructure EnvGate; /* CIF End BlockTypeDiagram */ endblock type EnvGate; /* CIF BlockDiagram */ /* CIF Page 1 (1900,2100) */ /* CIF Frame (150,150),(1600,1100) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\EnvGate\EnvGateCtrl.sbk' */ /* CIF Specific SDT Page 1 Scale 80 Grid (50,50) AutoNumbered */ Block EnvGateCtrl; /* CIF CurrentPage 1 */ /* CIF SignalRoute (150,700),(650,700) */ /* CIF TextPosition (175,650) */ /* CIF TextPosition (175,725) SignalList1 */ signalroute oi from env to EnvGateCtrl with (EnvGateInp); /* CIF SignalRoute (1250,700),(1750,700) */ /* CIF TextPosition (1675,650) */ /* CIF TextPosition (1275,725) SignalList1 */ signalroute oo from EnvGateCtrl to env with (EnvGateOutp); /* CIF Process (650,650),(600,250) */ /* CIF TextPosition (675,750) */ process EnvGateCtrl referenced; /* CIF Connect */ /* CIF TextPosition (75,675) */ connect oi and oi; /* CIF Connect */ /* CIF TextPosition (1775,675) */ connect oo and oo; /* CIF End BlockDiagram */ endblock EnvGateCtrl; /* CIF ProcessDiagram */ /* CIF Page 1 (1700,1700) */ /* CIF Frame (0,0),(1700,1700) */ /* CIF Page 2 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\EnvGate\EnvGateCtrl.spr' */ /* CIF Specific SDT Page 1 Scale 100 Grid (250,150) AutoNumbered */ /* CIF Specific SDT Page 2 Scale 100 Grid (250,150) AutoNumbered */ Process EnvGateCtrl; /* CIF DefaultSize (200,100) */ /* CIF CurrentPage 1 */ /* CIF Text (700,100) */ DCL instName Charstring; DCL rs CharString; /* CIF End Text */ /* CIF CurrentPage 2 */ /* CIF Text (300,100) */ DCL newGateInVal GateStateType; /* CIF End Text */ /* CIF CurrentPage 1 */ /* CIF Procedure (1050,400) */ /* CIF TextPosition (1075,425) */ procedure report referenced; /* CIF CurrentPage 2 */ /* CIF Procedure (1050,250),(350,150) */ /* CIF TextPosition (1112,287) */ EXPORTED procedure setPhysVal referenced; /* CIF CurrentPage 1 */ /* CIF Start (50,250) */ start ; /* CIF Line (150,350),(150,400) */ /* CIF NextState (50,400) */ nextstate Init; /* CIF State (50,400) */ state Init; /* CIF Line (150,500),(150,550) */ /* CIF Input (50,550) Right */ input go (instName); /* CIF Line (150,650),(150,700) */ /* CIF ProcedureCall (50,700) */ call announceInstance (self, instName); /* CIF Line (150,800),(150,850) */ /* CIF ProcedureCall (50,850) */ call report (opened); /* CIF Line (150,950),(150,1000) */ /* CIF ProcedureCall (50,1000) */ call putPanelVal ('obj1', rs); /* CIF Line (150,1100),(150,1150) */ /* CIF NextState (50,1150) */ nextstate opened; /* CIF End State */ endstate; /* CIF State (550,400) */ state opened; /* CIF Line (650,500),(650,550) */ /* CIF Input (550,550) Right */ input getGateState; /* CIF Line (650,650),(650,700) */ /* CIF Output (550,700) Right */ output newGateState (opened); /* CIF Line (650,800),(650,850) */ /* CIF NextState (550,850) */ nextstate opened; /* CIF End State */ endstate; /* CIF State (800,400) */ state closed; /* CIF Line (900,500),(900,550) */ /* CIF Input (800,550) Right */ input getGateState; /* CIF Line (900,650),(900,700) */ /* CIF Output (800,700) Right */ output newGateState (closed); /* CIF Line (900,800),(900,850) */ /* CIF NextState (800,850) */ nextstate closed; /* CIF End State */ endstate; /* CIF CurrentPage 2 */ /* CIF State (50,250) */ state closed; /* CIF Line (150,350),(150,400) */ /* CIF Input (50,400) Right */ input setPhysVal; /* CIF Line (150,500),(150,550) */ /* CIF Output (50,550) Right */ output newGateState (newGateInVal); /* CIF Line (150,650),(150,700) */ /* CIF Decision (50,700) */ decision newGateInVal; /* CIF Answer InvisibleBrackets */ /* CIF Line (150,800),(150,850) */ /* CIF TextPosition (175,825) */ (opened): /* CIF ProcedureCall (50,850) */ call printIt (instName// ' Opened', NOW); /* CIF Line (150,950),(150,1000) */ /* CIF ProcedureCall (50,1000) */ call report (opened); /* CIF Line (150,1100),(150,1150) */ /* CIF ProcedureCall (50,1150) */ call putPanelVal ('obj1', rs); /* CIF Line (150,1250),(150,1300) */ /* CIF NextState (50,1300) */ nextstate opened; /* CIF Answer Right */ /* CIF Line (250,750),(400,750),(400,1000) */ /* CIF TextPosition (425,775) */ else: /* CIF NextState (300,1000) */ nextstate closed; /* CIF End Decision */ enddecision; /* CIF End State */ endstate; /* CIF State (800,250) */ state opened; /* CIF Line (900,350),(900,400) */ /* CIF Input (800,400) Right */ input setPhysVal; /* CIF Line (900,500),(900,550) */ /* CIF Output (800,550) Right */ output newGateState (newGateInVal); /* CIF Line (900,650),(900,700) */ /* CIF Decision (800,700) */ decision newGateInVal; /* CIF Answer InvisibleBrackets */ /* CIF Line (900,800),(900,850) */ /* CIF TextPosition (925,825) */ (closed): /* CIF ProcedureCall (800,850) */ call printIt (instName// ' Closed', NOW); /* CIF Line (900,950),(900,1000) */ /* CIF ProcedureCall (800,1000) */ call report (closed); /* CIF Line (900,1100),(900,1150) */ /* CIF ProcedureCall (800,1150) */ call putPanelVal ('obj1', rs); /* CIF Line (900,1250),(900,1300) */ /* CIF NextState (800,1300) */ nextstate closed; /* CIF Answer Right */ /* CIF Line (1000,750),(1150,750),(1150,1000) */ /* CIF TextPosition (1175,775) */ else: /* CIF NextState (1050,1000) */ nextstate opened; /* CIF End Decision */ enddecision; /* CIF End State */ endstate; /* CIF End ProcessDiagram */ endprocess EnvGateCtrl; /* CIF ProcedureDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\EnvGate\report.spd' */ /* CIF Specific SDT Page 1 Scale 100 Grid (250,150) AutoNumbered */ procedure report ;FPAR IN gateState GateStateType; /* CIF DefaultSize (200,100) */ /* CIF CurrentPage 1 */ /* CIF ProcedureStart (300,250) */ start ; /* CIF Line (400,350),(400,400) */ /* CIF Task (300,400) */ task rs := instName // ' '; /* CIF Line (400,500),(400,550) */ /* CIF Task (300,550) */ task rs:=rs// (call timeToStr (NOW)) // ' '; /* CIF Line (400,650),(400,700) */ /* CIF Task (300,700) */ task rs := rs// gateStateTypeToStr (gateState)//' '; /* CIF Line (400,800),(400,1000) */ /* CIF Return (350,1000),(100,100) */ return ; /* CIF End ProcedureDiagram */ endprocedure report; /* CIF ProcedureDiagram */ /* CIF Page 1 (1900,2000) */ /* CIF Frame (0,0),(1900,1750) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\EnvGate\setPhysVal1.spd' */ /* CIF Specific SDT Page 1 Scale 100 Grid (250,150) AutoNumbered */ Procedure setPhysVal ;FPAR IN newValue CharString; /* CIF DefaultSize (200,100) */ /* CIF Text (800,100) */ DCL r Real; /* CIF End Text */ /* CIF CurrentPage 1 */ /* CIF ProcedureStart (300,250) */ start ; /* CIF Line (400,350),(400,400) */ /* CIF Task (300,400) */ task r:= call toReal (newValue); /* CIF Line (400,500),(400,550) */ /* CIF Decision (300,550) */ decision r=1; /* CIF Answer InvisibleBrackets */ /* CIF Line (400,650),(400,700) */ /* CIF TextPosition (425,675) */ (true): /* CIF Task (300,700) */ task newGateInVal := opened; /* CIF Line (400,800),(400,850) */ /* CIF Answer Right */ /* CIF Line (500,600),(650,600),(650,700) */ /* CIF TextPosition (675,625) */ else: /* CIF Task (550,700) */ task newGateInVal := closed; /* CIF Line (650,800),(650,825),(400,825),(400,850) */ /* CIF End Decision */ enddecision; /* CIF Return (350,850),(100,100) */ return ; /* CIF End ProcedureDiagram */ endprocedure setPhysVal; /* CIF PackageDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (150,150),(1600,2000) */ /* CIF PackageReference (175,25),(200,100) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\EnvSignal\EnvSignal.sun' */ /* CIF Specific SDT Page 1 Scale 100 Grid (50,50) AutoNumbered */ USE Utils; USE Project; Package EnvSignal; /* CIF CurrentPage 1 */ /* CIF Text (600,550),(200,100) */ SIGNALLIST EnvSignalInp = go, getSignalState; SIGNALLIST EnvSignalOutp = newSignalState; /* CIF End Text */ /* CIF BlockType (250,500),(300,200) */ /* CIF TextPosition (275,575) */ block type EnvSignal referenced; /* CIF End PackageDiagram */ endpackage EnvSignal; /* CIF BlockTypeDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (150,150),(1600,2000) */ /* CIF BlockPage 2 (1900,2100) */ /* CIF Frame (250,100),(1400,1950) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\EnvSignal\EnvSignal.sbt' */ /* CIF Specific SDT Page 1 Scale 100 Grid (50,50) AutoNumbered */ /* CIF Specific SDT Page 2 Scale 80 Grid (50,50) AutoNumbered */ Block Type EnvSignal; /* CIF Gate (250,375),(100,375) */ /* CIF TextPosition (200,325) */ /* CIF TextPosition (125,400) SignalList1 */ gate oi in with (EnvSignalInp); /* CIF Gate (1650,375),(1800,375) */ /* CIF TextPosition (1675,325) */ /* CIF TextPosition (1600,425) SignalList1 */ gate oo out with (EnvSignalOutp); /* CIF CurrentPage 1 */ /* CIF SubstructureDiagram Invisible */ substructure EnvSignal; /* CIF CurrentPage 2 */ /* CIF Channel (250,375),(650,375) */ /* CIF TextPosition (272,324) */ /* CIF TextPosition (275,450) SignalList1 */ /* CIF Arrow1Position (350,375) */ channel oi from env via oi to EnvSignalCtrl with (EnvSignalInp); endchannel oi; /* CIF Channel (1300,375),(1650,375) */ /* CIF TextPosition (1575,325) */ /* CIF TextPosition (1325,400) SignalList1 */ /* CIF Arrow1Position (1562,375) */ channel oo from EnvSignalCtrl to env via oo with (EnvSignalOutp); endchannel oo; /* CIF Block (650,350),(650,150) */ /* CIF TextPosition (725,400) */ block EnvSignalCtrl referenced; /* CIF End SubstructureDiagram */ endsubstructure EnvSignal; /* CIF End BlockTypeDiagram */ endblock type EnvSignal; /* CIF BlockDiagram */ /* CIF Page 1 (1900,2100) */ /* CIF Frame (150,150),(1600,1100) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\EnvSignal\EnvSignalCtrl.sbk' */ /* CIF Specific SDT Page 1 Scale 80 Grid (50,50) AutoNumbered */ Block EnvSignalCtrl; /* CIF CurrentPage 1 */ /* CIF SignalRoute (150,400),(650,400) */ /* CIF TextPosition (175,349) */ /* CIF TextPosition (175,425) SignalList1 */ signalroute oi from env to EnvSignalMasterCtrl with (EnvSignalInp); /* CIF SignalRoute (900,450),(900,650) */ /* CIF TextPosition (925,475) */ /* CIF TextPosition (925,575) SignalList1 */ signalroute mo from EnvSignalMasterCtrl to EnvSignalCtrl with (EnvSignalInp); /* CIF SignalRoute (1150,700),(1750,700) */ /* CIF TextPosition (1657,650) */ /* CIF TextPosition (1275,725) SignalList1 */ signalroute oo from EnvSignalCtrl to env with (EnvSignalOutp); /* CIF Process (650,350),(600,100) */ /* CIF TextPosition (749,388) */ process EnvSignalMasterCtrl (1,1) referenced; /* CIF Process (650,650),(500,150) */ /* CIF TextPosition (725,700) */ process EnvSignalCtrl (0, ) referenced; /* CIF Connect */ /* CIF TextPosition (75,375) */ connect oi and oi; /* CIF Connect */ /* CIF TextPosition (1775,675) */ connect oo and oo; /* CIF End BlockDiagram */ endblock EnvSignalCtrl; /* CIF ProcessDiagram */ /* CIF Page 1 (1700,1700) */ /* CIF Frame (0,0),(1700,1700) */ /* CIF Page 2 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\EnvSignal\EnvSignalMasterCtrl.spr' */ /* CIF Specific SDT Page 1 Scale 100 Grid (250,150) AutoNumbered */ /* CIF Specific SDT Page 2 Scale 100 Grid (250,150) AutoNumbered */ Process EnvSignalMasterCtrl; /* CIF DefaultSize (200,100) */ /* CIF CurrentPage 1 */ /* CIF Text (700,100) */ DCL instName Charstring; /*RR DCL ts, ts1 CharString; RR*/ /* CIF End Text */ /* CIF CurrentPage 2 */ /* CIF Text (550,100) */ DCL t1 CharString; DCL instPID PID; /* CIF End Text */ /* CIF CurrentPage 1 */ /* CIF Start (50,250) */ start ; /* CIF Line (150,350),(150,400) */ /* CIF NextState (50,400) */ nextstate main; /* CIF State (50,400) */ state main; /* CIF Line (150,500),(150,550) */ /* CIF Input (50,550) Right */ input go (instName); /* CIF Line (150,650),(150,700) */ /* CIF Create (50,700) */ create EnvSignalCtrl; /* CIF Line (150,800),(150,850) */ /* CIF Decision (50,850) */ decision offspring; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (250,900),(650,900),(650,1000) */ /* CIF TextPosition (675,925) */ (null): /* CIF ProcedureCall (550,1000) */ call printIt(instName//' ERROR: '// 'cannot dynamically create process', NOW); /* CIF Line (650,1100),(650,1150) */ /* CIF NextState (550,1150) */ nextstate main; /* CIF Answer */ /* CIF Line (150,950),(150,1000) */ /* CIF TextPosition (175,975) */ else: /* CIF Output (50,1000) Right */ output go(instName) to offspring; /* CIF Line (150,1100),(150,1150) */ /* CIF ProcedureCall (50,1150) */ call announceInstance (offspring, instName); /* CIF Line (150,1250),(150,1300) */ /* CIF NextState (50,1300) */ nextstate main; /* CIF End Decision */ enddecision; /* CIF End State */ endstate; /* CIF CurrentPage 2 */ /* CIF State (50,250) */ state main; /* CIF Line (150,350),(150,400) */ /* CIF Input (50,400) Right */ input getSignalState (t1); /* CIF Line (150,500),(150,550) */ /* CIF Task (50,550) */ task instPID := call getPID (t1); /* CIF Line (150,650),(150,700) */ /* CIF Decision (50,700) */ decision instPID; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (250,750),(650,750),(650,850) */ /* CIF TextPosition (675,775) */ (NULL): /* CIF ProcedureCall (550,850) */ call printIt(t1//' ERROR: '// 'no matching process instance found', NOW); /* CIF Line (650,950),(650,1000) */ /* CIF NextState (550,1000) */ nextstate main; /* CIF Answer */ /* CIF Line (150,800),(150,850) */ /* CIF TextPosition (175,825) */ else: /* CIF Output (50,850) Right */ output getSignalState (t1) to instPID; /* CIF Line (150,950),(150,1000) */ /* CIF NextState (50,1000) */ nextstate main; /* CIF End Decision */ enddecision; /* CIF End State */ endstate; /* CIF End ProcessDiagram */ endprocess EnvSignalMasterCtrl; /* CIF ProcessDiagram */ /* CIF Page 1 (1700,1700) */ /* CIF Frame (0,0),(1700,1700) */ /* CIF Page 2 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\EnvSignal\EnvSignalCtrl.spr' */ /* CIF Specific SDT Page 1 Scale 100 Grid (250,150) AutoNumbered */ /* CIF Specific SDT Page 2 Scale 100 Grid (250,150) AutoNumbered */ Process EnvSignalCtrl; /* CIF DefaultSize (200,100) */ /* CIF CurrentPage 1 */ /* CIF Text (700,100) */ DCL instName Charstring; DCL ts CharString := ''; DCL rs CharString; DCL newSIgInVal SignalStateType; /* CIF End Text */ /* CIF Procedure (1050,400),(300,150) */ /* CIF TextPosition (1112,437) */ EXPORTED procedure setPhysVal referenced; /* CIF Procedure (1050,700) */ /* CIF TextPosition (1075,725) */ procedure report referenced; /* CIF CurrentPage 1 */ /* CIF Start (50,250) */ start ; /* CIF Line (150,350),(150,400) */ /* CIF NextState (50,400) */ nextstate Init; /* CIF State (50,400) */ state Init; /* CIF Line (150,500),(150,550) */ /* CIF Input (50,550) Right */ input go (instName); /* CIF Line (150,650),(150,700) */ /* CIF ProcedureCall (50,700) */ call report (halt); /* CIF Line (150,800),(150,850) */ /* CIF ProcedureCall (50,850) */ call putPanelVal ('obj1', rs); /* CIF Line (150,950),(150,1000) */ /* CIF NextState (50,1000) */ nextstate halt; /* CIF End State */ endstate; /* CIF State (300,400) */ state halt; /* CIF Line (400,500),(400,550) */ /* CIF Input (300,550) Right */ input getSignalState (ts); /* CIF Line (400,650),(400,700) */ /* CIF Output (300,700) Right */ output newSignalState (instName, halt); /* CIF Line (400,800),(400,850) */ /* CIF NextState (300,850) */ nextstate halt; /* CIF End State */ endstate; /* CIF State (550,400) */ state go; /* CIF Line (650,500),(650,550) */ /* CIF Input (550,550) Right */ input getSignalState (ts); /* CIF Line (650,650),(650,700) */ /* CIF Output (550,700) Right */ output newSignalState (instName, go); /* CIF Line (650,800),(650,850) */ /* CIF NextState (550,850) */ nextstate go; /* CIF End State */ endstate; /* CIF CurrentPage 2 */ /* CIF State (50,250) */ state halt; /* CIF Line (150,350),(150,400) */ /* CIF Input (50,400) Right */ input setPhysVal; /* CIF Line (150,500),(150,550) */ /* CIF Output (50,550) Right */ output newSignalState (instName, newSigInVal); /* CIF Line (150,650),(150,700) */ /* CIF Decision (50,700) */ decision newSigInVal; /* CIF Answer InvisibleBrackets */ /* CIF Line (150,800),(150,850) */ /* CIF TextPosition (175,825) */ (go): /* CIF ProcedureCall (50,850) */ call printIt (instName// ' GREEN1', NOW); /* CIF Line (150,950),(150,1000) */ /* CIF ProcedureCall (50,1000) */ call report (go); /* CIF Line (150,1100),(150,1150) */ /* CIF ProcedureCall (50,1150) */ call putPanelVal ('obj1', rs); /* CIF Line (150,1250),(150,1300) */ /* CIF NextState (50,1300) */ nextstate go; /* CIF Answer Right */ /* CIF Line (250,750),(400,750),(400,850) */ /* CIF TextPosition (425,775) */ else: /* CIF ProcedureCall (300,850) */ call printIt (instName// ' RED2', NOW); /* CIF Line (400,950),(400,1000) */ /* CIF NextState (300,1000) */ nextstate halt; /* CIF End Decision */ enddecision; /* CIF End State */ endstate; /* CIF State (800,250) */ state go; /* CIF Line (900,350),(900,400) */ /* CIF Input (800,400) Right */ input setPhysVal; /* CIF Line (900,500),(900,550) */ /* CIF Output (800,550) Right */ output newSignalState (instName, newSigInVal); /* CIF Line (900,650),(900,700) */ /* CIF Decision (800,700) */ decision newSigInVal; /* CIF Answer InvisibleBrackets */ /* CIF Line (900,800),(900,850) */ /* CIF TextPosition (925,825) */ (halt): /* CIF ProcedureCall (800,850) */ call printIt (instName// ' RED1', NOW); /* CIF Line (900,950),(900,1000) */ /* CIF ProcedureCall (800,1000) */ call report (halt); /* CIF Line (900,1100),(900,1150) */ /* CIF ProcedureCall (800,1150) */ call putPanelVal ('obj1', rs); /* CIF Line (900,1250),(900,1300) */ /* CIF NextState (800,1300) */ nextstate halt; /* CIF Answer Right */ /* CIF Line (1000,750),(1150,750),(1150,850) */ /* CIF TextPosition (1175,775) */ else: /* CIF ProcedureCall (1050,850) */ call printIt (instName// ' GREEN2', NOW); /* CIF Line (1150,950),(1150,1000) */ /* CIF NextState (1050,1000) */ nextstate go; /* CIF End Decision */ enddecision; /* CIF End State */ endstate; /* CIF End ProcessDiagram */ endprocess EnvSignalCtrl; /* CIF ProcedureDiagram */ /* CIF Page 1 (1900,2000) */ /* CIF Frame (0,0),(1900,1750) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\EnvSignal\setPhysVal.spd' */ /* CIF Specific SDT Page 1 Scale 100 Grid (250,150) AutoNumbered */ Procedure setPhysVal ;FPAR IN newValue CharString; /* CIF DefaultSize (200,100) */ /* CIF Text (800,100) */ DCL r Real; /* CIF End Text */ /* CIF CurrentPage 1 */ /* CIF ProcedureStart (300,250) */ start ; /* CIF Line (400,350),(400,400) */ /* CIF Task (300,400) */ task r:= call toReal (newValue); /* CIF Line (400,500),(400,550) */ /* CIF Decision (300,550) */ decision r=1; /* CIF Answer InvisibleBrackets */ /* CIF Line (400,650),(400,700) */ /* CIF TextPosition (425,675) */ (true): /* CIF Task (300,700) */ task newSigInVal := go; /* CIF Line (400,800),(400,850) */ /* CIF Answer Right */ /* CIF Line (500,600),(650,600),(650,700) */ /* CIF TextPosition (675,625) */ else: /* CIF Task (550,700) */ task newSigInVal := halt; /* CIF Line (650,800),(650,825),(400,825),(400,850) */ /* CIF End Decision */ enddecision; /* CIF Return (350,850),(100,100) */ return ; /* CIF End ProcedureDiagram */ endprocedure setPhysVal; /* CIF ProcedureDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\EnvSignal\report.spd' */ /* CIF Specific SDT Page 1 Scale 100 Grid (250,150) AutoNumbered */ procedure report ;FPAR IN sigState SIgnalStateType; /* CIF DefaultSize (200,100) */ /* CIF CurrentPage 1 */ /* CIF ProcedureStart (300,250) */ start ; /* CIF Line (400,350),(400,400) */ /* CIF Task (300,400) */ task rs := instName // ' '; /* CIF Line (400,500),(400,550) */ /* CIF Task (300,550) */ task rs:=rs// (call timeToStr (NOW)) // ' '; /* CIF Line (400,650),(400,700) */ /* CIF Task (300,700) */ task rs := rs// signalStateTypeToStr (sigState)//' '; /* CIF Line (400,800),(400,850) */ /* CIF Return (350,850),(100,100) */ return ; /* CIF End ProcedureDiagram */ endprocedure report; /* CIF PackageDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (150,150),(1600,2000) */ /* CIF PackageReference (175,25),(200,100) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\EnvTrainSens\EnvTrainSens.sun' */ /* CIF Specific SDT Page 1 Scale 100 Grid (50,50) AutoNumbered */ USE Utils; USE Project; Package EnvTrainSens; /* CIF CurrentPage 1 */ /* CIF Text (600,550),(200,100) */ SIGNALLIST EnvTrainSensInp = go, newTrain; /*RR SIGNALLIST EnvTrainSensOutp = dummy; RR*/ /* CIF End Text */ /* CIF BlockType (250,500),(300,200) */ /* CIF TextPosition (275,575) */ block type EnvTrainSens referenced; /* CIF End PackageDiagram */ endpackage EnvTrainSens; /* CIF BlockTypeDiagram */ /* CIF BlockPage 1 (1900,1000) */ /* CIF Frame (250,100),(1400,850) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\EnvTrainSens\EnvTrainSens.sbt' */ /* CIF Specific SDT Page 1 Scale 80 Grid (50,50) AutoNumbered */ Block Type EnvTrainSens; /* CIF Gate (250,375),(100,375) */ /* CIF TextPosition (200,325) */ /* CIF TextPosition (125,400) SignalList1 */ gate oi in with (EnvTrainSensInp); /* CIF SubstructureDiagram Invisible */ substructure EnvTrainSens; /* CIF CurrentPage 1 */ /* CIF Channel (250,375),(650,375) */ /* CIF TextPosition (272,324) */ /* CIF TextPosition (300,475) SignalList1 */ /* CIF Arrow1Position (350,375) */ channel oi from env via oi to EnvTrainSensCtrl with (EnvTrainSensInp); endchannel oi; /* CIF Block (650,350),(650,150) */ /* CIF TextPosition (725,400) */ block EnvTrainSensCtrl referenced; /* CIF End SubstructureDiagram */ endsubstructure EnvTrainSens; /* CIF End BlockTypeDiagram */ endblock type EnvTrainSens; /* CIF BlockDiagram */ /* CIF Page 1 (1900,2100) */ /* CIF Frame (150,150),(1600,1100) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\EnvTrainSens\EnvTrainSensCtrl.sbk' */ /* CIF Specific SDT Page 1 Scale 80 Grid (50,50) AutoNumbered */ Block EnvTrainSensCtrl; /* CIF CurrentPage 1 */ /* CIF SignalRoute (150,450),(700,450) */ /* CIF TextPosition (180,396) */ /* CIF TextPosition (225,475) SignalList1 */ signalroute oi from env to EnvTrainSensMasterCtrl with (EnvTrainSensInp); /* CIF SignalRoute (1000,550),(1000,850) */ /* CIF TextPosition (1025,625) */ /* CIF TextPosition (1025,775) SignalList1 */ signalroute mo from EnvTrainSensMasterCtrl to EnvTrainSensCtrl with (EnvTrainSensInp); /* CIF Process (700,350),(650,200) */ /* CIF TextPosition (768,425) */ process EnvTrainSensMasterCtrl (1,1) referenced; /* CIF Process (750,850),(450,150) */ /* CIF TextPosition (785,900) */ process EnvTrainSensCtrl (0, ) referenced; /* CIF Connect */ /* CIF TextPosition (75,425) */ connect oi and oi; /* CIF End BlockDiagram */ endblock EnvTrainSensCtrl; /* CIF ProcessDiagram */ /* CIF Page 1 (1700,1700) */ /* CIF Frame (0,0),(1700,1700) */ /* CIF Page 2 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\EnvTrainSens\EnvTrainSensMasterCtrl1.spr' */ /* CIF Specific SDT Page 1 Scale 100 Grid (250,150) AutoNumbered */ /* CIF Specific SDT Page 2 Scale 100 Grid (250,150) AutoNumbered */ Process EnvTrainSensMasterCtrl; /* CIF DefaultSize (200,100) */ /* CIF CurrentPage 1 */ /* CIF Text (700,100) */ DCL instName Charstring; /*RR DCL ts, ts1 CharString; RR*/ /* CIF End Text */ /* CIF CurrentPage 2 */ /* CIF Text (550,100) */ DCL t1 CharString; DCL instPID PID; /* CIF End Text */ /* CIF CurrentPage 1 */ /* CIF Start (50,250) */ start ; /* CIF Line (150,350),(150,400) */ /* CIF NextState (50,400) */ nextstate main; /* CIF State (50,400) */ state main; /* CIF Line (150,500),(150,550) */ /* CIF Input (50,550) Right */ input go (instName); /* CIF Line (150,650),(150,700) */ /* CIF Create (50,700) */ create EnvTrainSensCtrl; /* CIF Line (150,800),(150,850) */ /* CIF Decision (50,850) */ decision offspring; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (250,900),(650,900),(650,1000) */ /* CIF TextPosition (675,925) */ (null): /* CIF ProcedureCall (550,1000) */ call printIt(instName//' ERROR: '// 'cannot dynamically create process', NOW); /* CIF Line (650,1100),(650,1150) */ /* CIF NextState (550,1150) */ nextstate main; /* CIF Answer */ /* CIF Line (150,950),(150,1000) */ /* CIF TextPosition (175,975) */ else: /* CIF Output (50,1000) Right */ output go(instName) to offspring; /* CIF Line (150,1100),(150,1150) */ /* CIF ProcedureCall (50,1150) */ call announceInstance (offspring, instName); /* CIF Line (150,1250),(150,1300) */ /* CIF NextState (50,1300) */ nextstate main; /* CIF End Decision */ enddecision; /* CIF End State */ endstate; /* CIF CurrentPage 2 */ /* CIF State (50,250) */ state main; /* CIF Line (150,350),(150,400) */ /* CIF Input (50,400) Right */ input newTrain (t1); /* CIF Line (150,500),(150,550) */ /* CIF Task (50,550) */ task instPID := call getPID (t1); /* CIF Line (150,650),(150,700) */ /* CIF Decision (50,700) */ decision instPID; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (250,750),(650,750),(650,850) */ /* CIF TextPosition (675,775) */ (NULL): /* CIF ProcedureCall (550,850) */ call printIt(t1//' ERROR: '// 'no matching process instance found', NOW); /* CIF Line (650,950),(650,1000) */ /* CIF NextState (550,1000) */ nextstate main; /* CIF Answer */ /* CIF Line (150,800),(150,850) */ /* CIF TextPosition (175,825) */ else: /* CIF Output (50,850) Right */ output newTrain (t1) to instPID; /* CIF Line (150,950),(150,1000) */ /* CIF NextState (50,1000) */ nextstate main; /* CIF End Decision */ enddecision; /* CIF End State */ endstate; /* CIF End ProcessDiagram */ endprocess EnvTrainSensMasterCtrl; /* CIF ProcessDiagram */ /* CIF Page 1 (1700,1700) */ /* CIF Frame (0,0),(1700,1700) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\EnvTrainSens\EnvTrainSensCtrl.spr' */ /* CIF Specific SDT Page 1 Scale 100 Grid (250,150) AutoNumbered */ Process EnvTrainSensCtrl; /* CIF DefaultSize (200,100) */ /* CIF Text (300,100) */ DCL instName Charstring; DCL t1 CharString; /* CIF End Text */ /* CIF Text (800,100) */ DCL nbrWheels Integer := 8; DCL wheelCtr Integer; DCL distWheels Duration := 0.5; TIMER wheelT; /* CIF End Text */ /* CIF CurrentPage 1 */ /* CIF Start (50,400) */ start ; /* CIF Line (150,500),(150,550) */ /* CIF NextState (50,550) */ nextstate Init; /* CIF State (50,550) */ state Init; /* CIF Line (150,650),(150,700) */ /* CIF Input (50,700) Right */ input go (instName); /* CIF Line (150,800),(150,850) */ /* CIF NextState (50,850) */ nextstate idle; /* CIF End State */ endstate; /* CIF State (1050,400) */ state Idle; /* CIF Line (1150,500),(1150,550) */ /* CIF Input (1050,550) Right */ input wheelT; /* CIF Line (1150,650),(1150,700) */ /* CIF Task (1050,700) */ task wheelCtr := wheelCtr -1; /* CIF Line (1150,800),(1150,850) */ /* CIF ProcedureCall (1050,850) */ call putAnalogVal (instName, 1); /* CIF Line (1150,950),(1150,1000) */ /* CIF Decision (1050,1000) */ decision wheelCtr; /* CIF Answer InvisibleBrackets */ /* CIF Line (1150,1100),(1150,1300) */ /* CIF TextPosition (1175,1100) */ (0): /* CIF NextState (1050,1300) */ nextstate -; /* CIF Answer Left */ /* CIF Line (1050,1050),(1025,1050),(1025,1125),(650,1125),(650,1150) */ /* CIF TextPosition (950,1075) */ else: /* CIF End Decision */ enddecision; /* CIF Label Invisible */ grst33: /* CIF Set (550,1150) */ set(NOW+distWheels, wheelT); /* CIF Line (650,1250),(650,1300) */ /* CIF NextState (550,1300) */ nextstate -; /* CIF End State */ endstate; /* CIF State (550,550) */ state Idle; /* CIF Line (650,650),(650,700) */ /* CIF Input (550,700) Right */ input newTrain (t1); /* CIF Line (650,800),(650,850) */ /* CIF ProcedureCall (550,850) */ call printIt ('new train in ' // instName, NOW); /* CIF Line (650,950),(650,1000) */ /* CIF Task (550,1000) */ task wheelCtr := nbrWheels; /* CIF Line (650,1100),(650,1150) */ /* CIF Join Invisible */ join grst33; /* CIF End State */ endstate; /* CIF End ProcessDiagram */ endprocess EnvTrainSensCtrl; /* CIF PackageDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (150,150),(1600,2000) */ /* CIF PackageReference (175,25),(200,100) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\EnvTrain\EnvTrain.sun' */ /* CIF Specific SDT Page 1 Scale 100 Grid (50,50) AutoNumbered */ USE Utils; USE Project; Package EnvTrain; /* CIF CurrentPage 1 */ /* CIF Text (600,550),(200,100) */ SIGNALLIST EnvTrainInp = go, initTrain, newSeqTrain, newSignalState, newTrainStart, newTrainStop; SIGNALLIST EnvTrainOutp = trainArrived, trainPassed, newTrainStart, newTrainStop, repTrain; /* CIF End Text */ /* CIF BlockType (250,500),(300,200) */ /* CIF TextPosition (275,575) */ block type EnvTrain referenced; /* CIF End PackageDiagram */ endpackage EnvTrain; /* CIF BlockTypeDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (150,150),(1600,2000) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\EnvTrain\EnvTrain.sbt' */ /* CIF Specific SDT Page 1 Scale 100 Grid (50,50) AutoNumbered */ Block Type EnvTrain; /* CIF Gate (150,550),(0,550) */ /* CIF TextPosition (50,475) */ /* CIF TextPosition (100,575) SignalList1 */ gate oi in with (EnvTrainInp); /* CIF Gate (1750,975),(1900,975) */ /* CIF TextPosition (1800,900) */ /* CIF TextPosition (1700,1000) SignalList1 */ gate oo out with (EnvTrainOutp); /* CIF CurrentPage 1 */ /* CIF SignalRoute (150,550),(600,550) */ /* CIF TextPosition (400,475) */ /* CIF TextPosition (400,575) SignalList1 */ signalroute ooi from env via oi to EnvTrainMasterCtrl with (EnvTrainInp); /* CIF SignalRoute (800,650),(800,900) */ /* CIF TextPosition (825,700) */ /* CIF TextPosition (825,825) SignalList1 */ signalroute mo from EnvTrainMasterCtrl to EnvTrainCtrl with (EnvTrainInp); /* CIF SignalRoute (950,975),(1750,975) */ /* CIF TextPosition (1375,900) */ /* CIF TextPosition (1325,1000) SignalList1 */ signalroute ooo from EnvTrainCtrl to env via oo with (EnvTrainOutp); /* CIF Process (600,450),(500,200) */ /* CIF TextPosition (625,525) */ process EnvTrainMasterCtrl (1,1) referenced; /* CIF Process (650,900),(300,200) */ /* CIF TextPosition (675,975) */ process EnvTrainCtrl(0, ) referenced; /* CIF End BlockTypeDiagram */ endblock type EnvTrain; /* CIF ProcessDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Page 2 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Page 3 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\EnvTrain\EnvTrainMasterCtrl.spr' */ /* CIF Specific SDT Page 1 Scale 100 Grid (250,150) AutoNumbered */ /* CIF Specific SDT Page 2 Scale 100 Grid (250,150) AutoNumbered */ /* CIF Specific SDT Page 3 Scale 100 Grid (250,150) AutoNumbered */ process EnvTrainMasterCtrl; /* CIF DefaultSize (200,100) */ /* CIF CurrentPage 1 */ /* CIF Text (550,100) */ DCL instName Charstring; /* CIF End Text */ /* CIF CurrentPage 2 */ /* CIF Text (550,100) */ DCL instPID PID; DCL td TrackDurationType; /*RR DCL dur Duration; RR*/ DCL t1, t2 CharString; DCL sigState SignalStateType; /* CIF End Text */ /* CIF CurrentPage 3 */ /* CIF Text (550,100) */ DCL tr Real; /* CIF End Text */ /* CIF CurrentPage 1 */ /* CIF Start (50,250) */ start ; /* CIF Line (150,350),(150,400) */ /* CIF NextState (50,400) */ nextstate main; /* CIF State (50,400) */ state main; /* CIF Line (150,500),(150,550) */ /* CIF Input (50,550) Right */ input go (instName); /* CIF Line (150,650),(150,700) */ /* CIF Create (50,700) */ create EnvTrainCtrl; /* CIF Line (150,800),(150,850) */ /* CIF Decision (50,850) */ decision offspring; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (250,900),(650,900),(650,1000) */ /* CIF TextPosition (675,925) */ (null): /* CIF ProcedureCall (550,1000) */ call printIt(instName//' ERROR: '// 'cannot dynamically create process', NOW); /* CIF Line (650,1100),(650,1150) */ /* CIF NextState (550,1150) */ nextstate main; /* CIF Answer */ /* CIF Line (150,950),(150,1000) */ /* CIF TextPosition (175,975) */ else: /* CIF Output (50,1000) Right */ output go(instName) to offspring; /* CIF Line (150,1100),(150,1150) */ /* CIF ProcedureCall (50,1150) */ call announceInstance (offspring, instName); /* CIF Line (150,1250),(150,1300) */ /* CIF NextState (50,1300) */ nextstate main; /* CIF End Decision */ enddecision; /* CIF End State */ endstate; /* CIF CurrentPage 2 */ /* CIF State (50,250) */ state main; /* CIF Line (150,350),(150,400) */ /* CIF Input (50,400) Right */ input initTrain (t1, td, sigState); /* CIF Line (150,500),(150,550) */ /* CIF Task (50,550) */ task instPID := call getPID (t1); /* CIF Line (150,650),(150,700) */ /* CIF Decision (50,700) */ decision instPID; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (250,750),(650,750),(650,850) */ /* CIF TextPosition (675,775) */ (NULL): /* CIF ProcedureCall (550,850) */ call printIt(t1//' ERROR: '// 'no matching process instance found', NOW); /* CIF Line (650,950),(650,1000) */ /* CIF NextState (550,1000) */ nextstate main; /* CIF Answer */ /* CIF Line (150,800),(150,850) */ /* CIF TextPosition (175,825) */ else: /* CIF Output (50,850) Right */ output initTrain (t1, td, sigState) to instPID; /* CIF Line (150,950),(150,1000) */ /* CIF NextState (50,1000) */ nextstate main; /* CIF End Decision */ enddecision; /* CIF End State */ endstate; /* CIF State (1050,250) */ state main; /* CIF Line (1150,350),(1150,400) */ /* CIF Input (1050,400) Right */ input newSignalState (t1, sigState); /* CIF Line (1150,500),(1150,550) */ /* CIF Task (1050,550) */ task instPID := call getPID (t1); /* CIF Line (1150,650),(1150,700) */ /* CIF Decision (1050,700) */ decision instPID; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (1250,750),(1650,750),(1650,850) */ /* CIF TextPosition (1675,775) */ (NULL): /* CIF ProcedureCall (1550,850) */ call printIt(t1//' ERROR: '// 'no matching process instance found', NOW); /* CIF Line (1650,950),(1650,1000) */ /* CIF NextState (1550,1000) */ nextstate main; /* CIF Answer */ /* CIF Line (1150,800),(1150,850) */ /* CIF TextPosition (1175,825) */ else: /* CIF Output (1050,850) Right */ output newSignalState (t1, sigState) to instPID; /* CIF Line (1150,950),(1150,1000) */ /* CIF NextState (1050,1000) */ nextstate main; /* CIF End Decision */ enddecision; /* CIF End State */ endstate; /* CIF State (50,1150) */ state main; /* CIF Line (150,1250),(150,1300) */ /* CIF Input (50,1300) Right */ input newSeqTrain (t1, t2); /* CIF Line (150,1400),(150,1450) */ /* CIF Task (50,1450) */ task instPID := call getPID (t1); /* CIF Line (150,1550),(150,1600) */ /* CIF Decision (50,1600) */ decision instPID; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (250,1650),(650,1650),(650,1750) */ /* CIF TextPosition (675,1675) */ (NULL): /* CIF ProcedureCall (550,1750) */ call printIt(t1//' ERROR: '// 'no matching process instance found', NOW); /* CIF Line (650,1850),(650,1900) */ /* CIF NextState (550,1900) */ nextstate main; /* CIF Answer */ /* CIF Line (150,1700),(150,1750) */ /* CIF TextPosition (175,1725) */ else: /* CIF Output (50,1750) Right */ output newSeqTrain (t1, t2) to instPID; /* CIF Line (150,1850),(150,1900) */ /* CIF NextState (50,1900) */ nextstate main; /* CIF End Decision */ enddecision; /* CIF End State */ endstate; /* CIF CurrentPage 3 */ /* CIF State (50,250) */ state main; /* CIF Line (150,350),(150,400) */ /* CIF Input (50,400) Right */ input newTrainStart (t1); /* CIF Line (150,500),(150,550) */ /* CIF Task (50,550) */ task instPID := call getPID (t1); /* CIF Line (150,650),(150,700) */ /* CIF Decision (50,700) */ decision instPID; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (250,750),(650,750),(650,850) */ /* CIF TextPosition (675,775) */ (NULL): /* CIF ProcedureCall (550,850) */ call printIt(t1//' ERROR: '// 'no matching process instance found', NOW); /* CIF Line (650,950),(650,1000) */ /* CIF NextState (550,1000) */ nextstate main; /* CIF Answer */ /* CIF Line (150,800),(150,850) */ /* CIF TextPosition (175,825) */ else: /* CIF Output (50,850) Right */ output newTrainStart (t1) to instPID; /* CIF Line (150,950),(150,1000) */ /* CIF NextState (50,1000) */ nextstate main; /* CIF End Decision */ enddecision; /* CIF End State */ endstate; /* CIF State (1050,250) */ state main; /* CIF Line (1150,350),(1150,400) */ /* CIF Input (1050,400) Right */ input newTrainStop (t1, tr); /* CIF Line (1150,500),(1150,550) */ /* CIF Task (1050,550) */ task instPID := call getPID (t1); /* CIF Line (1150,650),(1150,700) */ /* CIF Decision (1050,700) */ decision instPID; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (1250,750),(1650,750),(1650,850) */ /* CIF TextPosition (1675,775) */ (NULL): /* CIF ProcedureCall (1550,850) */ call printIt(t1//' ERROR: '// 'no matching process instance found', NOW); /* CIF Line (1650,950),(1650,1000) */ /* CIF NextState (1550,1000) */ nextstate main; /* CIF Answer */ /* CIF Line (1150,800),(1150,850) */ /* CIF TextPosition (1175,825) */ else: /* CIF Output (1050,850) Right */ output newTrainStop (t1, tr) to instPID; /* CIF Line (1150,950),(1150,1000) */ /* CIF NextState (1050,1000) */ nextstate main; /* CIF End Decision */ enddecision; /* CIF End State */ endstate; /* CIF End ProcessDiagram */ endprocess EnvTrainMasterCtrl; /* CIF ProcessDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Page 2 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Page 3 (1900,2350) */ /* CIF Frame (0,0),(1900,2350) */ /* CIF Page 4 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Page 5 (1900,2350) */ /* CIF Frame (0,0),(1900,2350) */ /* CIF Page 6 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Page 7 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\EnvTrain\EnvTrainCtrl.spr' */ /* CIF Specific SDT Page 1 Scale 100 Grid (250,150) AutoNumbered */ /* CIF Specific SDT Page 2 Scale 100 Grid (250,150) AutoNumbered */ /* CIF Specific SDT Page 3 Scale 100 Grid (250,150) AutoNumbered */ /* CIF Specific SDT Page 4 Scale 100 Grid (250,150) AutoNumbered */ /* CIF Specific SDT Page 5 Scale 100 Grid (250,150) AutoNumbered */ /* CIF Specific SDT Page 6 Scale 100 Grid (250,150) AutoNumbered */ /* CIF Specific SDT Page 7 Scale 100 Grid (250,150) AutoNumbered */ process EnvTrainCtrl; /* CIF DefaultSize (200,100) */ /* CIF CurrentPage 1 */ /* CIF Text (50,250) */ /* EnvTrainTask 1 */ /* CIF End Text */ /* CIF Text (550,250) */ DCL instName Charstring; /* CIF End Text */ /* CIF Text (1050,250) */ DCL sigState SignalStateType; DCL td TrackDurationType; DCL curPos Real := 100; DCL ts CharString; DCL startTime Time; Timer ts1Timer; DCL seqTrain CharString := ''; DCL wholeDist Real; DCL repF TextFile; DCL ts1Pos, sigPos, breakPos, minDistPos Real; /* CIF End Text */ /* CIF CurrentPage 2 */ /* CIF Text (800,100) */ DCL precPos Real; DCL stopDur, goDur Duration; Timer sigTimer, gateTimer, startTimer; /* CIF End Text */ /* CIF CurrentPage 3 */ /* CIF Text (1050,100) */ Timer sigStopTimer; /* CIF End Text */ /* CIF CurrentPage 4 */ /* CIF Text (550,100) */ Timer trainStopTimer; /* CIF End Text */ /* CIF CurrentPage 6 */ /* CIF Text (800,100) */ DCL repStopDur Duration; DCL repLifeDur Duration; DCL neutrDur Duration := 1; /* CIF End Text */ /* CIF CurrentPage 7 */ /* CIF Text (800,100) */ Timer repT; DCL repDur Duration := 2.5; DCL creTime Time; DCL /*RR newMovType, RR*/ movType SignalStateType; /*RR DCL repPos Duration:=0; RR*/ /* CIF End Text */ /* CIF CurrentPage 1 */ /* CIF Procedure (550,100),(300,100) */ /* CIF TextPosition (612,125) */ procedure setCurPos referenced; /* CIF Procedure (1050,100),(300,100) */ /* CIF TextPosition (1100,125) */ procedure compDistDur referenced; /* CIF CurrentPage 7 */ /* CIF Procedure (550,100) */ /* CIF TextPosition (575,125) */ procedure report referenced; /* CIF CurrentPage 1 */ /* CIF Start (300,400) */ start ; /* CIF Line (400,500),(400,550) */ /* CIF NextState (300,550) */ nextstate Init; /* CIF State (300,550) */ state Init; /* CIF Line (400,650),(400,700) */ /* CIF Input (300,700) Right */ input go (instName); /* CIF Line (400,800),(400,850) */ /* CIF NextState (300,850) */ nextstate Init1; /* CIF End State */ endstate; /* CIF State (300,850) */ state Init1; /* CIF Line (400,950),(400,1000) */ /* CIF Input (300,1000) Right */ input initTrain (ts, td, sigState); /* CIF Line (400,1100),(400,1150) */ /* CIF Task (300,1150) */ task wholeDist := (call dur2Real(td!ts1Dur))+ (call dur2Real(td!ts1SigDur))+ (call dur2Real(td!sigTs2Dur)); /* CIF Line (400,1250),(400,1300) */ /* CIF Task (300,1300) */ task ts1Pos := (call dur2Real(td!ts1SigDur+td!sigTs2Dur))/ wholeDist*100; /* CIF Line (400,1400),(400,1450) */ /* CIF Task (300,1450) */ task sigPos := (call dur2Real(td!sigTs2Dur))/ wholeDist*100; /* CIF Line (400,1550),(400,1600) */ /* CIF Task (300,1600) */ task minDistPos :=(call dur2Real(td!minDistDur))/ wholeDist*100; /* CIF Line (400,1700),(400,1750) */ /* CIF Task (300,1750) */ task breakPos :=(call dur2Real(td!breakDur))/ wholeDist*100; /* CIF Line (400,1850),(400,1875),(525,1875),(525,525),(900,525),(900,550) */ /* CIF Set (800,550) */ set (NOW+ td!ts1Dur, ts1Timer); /* CIF Line (900,650),(900,700) */ /* CIF Task (800,700) */ task startTime := NOW; /* CIF Line (900,800),(900,850) */ /* CIF Task (800,850) */ task creTime := NOW; /* CIF Line (900,950),(900,1000) */ /* CIF Set (800,1000) */ set (NOW+repDur, repT); /* CIF Line (900,1100),(900,1150) */ /* CIF Task (800,1150) */ task repF:= OpenW ('logs/'// instName//'Log'); /* CIF Line (900,1250),(900,1300) */ /* CIF Decision (800,1300) */ decision IsOpened (repF); /* CIF Answer Right InvisibleBrackets */ /* CIF Line (1000,1350),(1150,1350),(1150,1450) */ /* CIF TextPosition (1175,1375) */ (false): /* CIF ProcedureCall (1050,1450) */ call printIt(instName//' WARNING: logfile not OK' ,Now); /* CIF Line (1150,1550),(1150,1575),(900,1575),(900,1600) */ /* CIF Answer InvisibleBrackets */ /* CIF Line (900,1400),(900,1600) */ /* CIF TextPosition (925,1425) */ (true): /* CIF End Decision */ enddecision; /* CIF NextState (800,1600) */ nextstate appGo; /* CIF End State */ endstate; /* CIF State (800,1750) */ state *(appStop, sigStop, trainStop); /* CIF Line (900,1850),(900,1900) */ /* CIF Input (800,1900) Right */ input newSeqTrain (ts, seqTrain); /* CIF Line (900,2000),(900,2050) */ /* CIF NextState (800,2050) */ nextstate -; /* CIF End State */ endstate; /* CIF State (1050,1750) */ state * (sigStop, sigBreak); /* CIF Line (1150,1850),(1150,1900) */ /* CIF Input (1050,1900) Right */ input newSignalState (ts, sigState); /* CIF Line (1150,2000),(1150,2050) */ /* CIF NextState (1050,2050) */ nextstate -; /* CIF End State */ endstate; /* CIF CurrentPage 2 */ /* CIF State (50,250) */ state appGo; /* CIF Line (150,350),(150,400) */ /* CIF Input (50,400) Right */ input ts1Timer; /* CIF Line (150,500),(150,550) */ /* CIF Output (50,550) Right */ output trainArrived (instName); /* CIF Line (150,650),(150,700) */ /* CIF Set (50,700) */ set (NOW+ td!ts1SigDur- td!breakDur,sigTimer); /* CIF Line (150,800),(150,850) */ /* CIF ProcedureCall (50,850) */ call setCurPos; /* CIF Line (150,950),(150,1000) */ /* CIF NextState (50,1000) */ nextstate sigGo; /* CIF End State */ endstate; /* CIF State (300,250) */ state appGo; /* CIF Line (400,350),(400,400) */ /* CIF Input (300,400) Right */ input newTrainStop (ts, precPos); /* CIF Line (400,500),(400,550) */ /* CIF ProcedureCall (300,550) */ call setCurPos; /* CIF Line (400,650),(400,700) */ /* CIF Task (300,700) */ task stopDur := call compDistDur (precPos+minDistPos); /* CIF Line (400,800),(400,850) */ /* CIF Set (300,850) */ set (NOW+ stopDur, trainStopTimer); /* CIF Line (400,950),(400,1000) */ /* CIF NextState (300,1000) */ nextstate appGo; /* CIF End State */ endstate; /* CIF State (800,250) */ state appGo; /* CIF Line (900,350),(900,400) */ /* CIF Input (800,400) Right */ input trainStopTimer; /* CIF Line (900,500),(900,550) */ /* CIF ProcedureCall (800,550) */ call setCurPos; /* CIF Line (900,650),(900,700) */ /* CIF Reset (800,700) */ reset (ts1Timer); /* CIF Line (900,800),(900,850) */ /* CIF Decision (800,850) */ decision seqTrain = ''; /* CIF Answer InvisibleBrackets */ /* CIF Line (900,950),(900,1000) */ /* CIF TextPosition (925,975) */ (false): /* CIF Output (800,1000) Right */ output newTrainStop (seqTrain, curPos) via oo; /* CIF Line (900,1100),(900,1150) */ /* CIF Answer Left InvisibleBrackets */ /* CIF Line (800,900),(775,900),(775,1125),(900,1125),(900,1150) */ /* CIF TextPosition (700,925) */ (true): /* CIF End Decision */ enddecision; /* CIF NextState (800,1150) */ nextstate appStop; /* CIF End State */ endstate; /* CIF State (1300,250) */ state appStop; /* CIF Line (1400,350),(1400,400) */ /* CIF Input (1300,400) Right */ input startTimer; /* CIF Line (1400,500),(1400,550) */ /* CIF Task (1300,550) */ task goDur := call compDistDur (ts1Pos); /* CIF Line (1400,650),(1400,700) */ /* CIF Set (1300,700) */ set (NOW+ goDur, ts1Timer); /* CIF Line (1400,800),(1400,850) */ /* CIF Task (1300,850) */ task startTime := NOW; /* CIF Line (1400,950),(1400,1000) */ /* CIF Decision (1300,1000) */ decision seqTrain= ''; /* CIF Answer InvisibleBrackets */ /* CIF Line (1400,1100),(1400,1150) */ /* CIF TextPosition (1425,1125) */ (false): /* CIF Output (1300,1150) Right */ output newTrainStart (seqTrain) via oo; /* CIF Line (1400,1250),(1400,1300) */ /* CIF Answer Right InvisibleBrackets */ /* CIF Line (1500,1050),(1550,1050),(1550,1275),(1400,1275),(1400,1300) */ /* CIF TextPosition (1575,1300) */ (true): /* CIF End Decision */ enddecision; /* CIF NextState (1300,1300) */ nextstate appGo; /* CIF End State */ endstate; /* CIF State (50,1300) */ state appStop; /* CIF Line (150,1400),(150,1450) */ /* CIF Input (50,1450) Right */ input newTrainStart (ts); /* CIF Line (150,1550),(150,1600) */ /* CIF Reset (50,1600) */ reset (trainStopTimer); /* CIF Line (150,1700),(150,1750) */ /* CIF Set (50,1750) */ set (NOW+ td!breakDur, startTimer); /* CIF Line (150,1850),(150,1900) */ /* CIF NextState (50,1900) */ nextstate appStop; /* CIF End State */ endstate; /* CIF State (300,1300) */ state appGo; /* CIF Line (400,1400),(400,1450) */ /* CIF Input (300,1450) Right */ input newTrainStart (ts); /* CIF Line (400,1550),(400,1600) */ /* CIF Reset (300,1600) */ reset (trainStopTimer); /* CIF Line (400,1700),(400,1750) */ /* CIF NextState (300,1750) */ nextstate appGo; /* CIF End State */ endstate; /* CIF State (550,1300) */ state appStop; /* CIF Line (650,1400),(650,1450) */ /* CIF Input (550,1450) Right */ input newSeqTrain (ts, seqTrain); /* CIF Line (650,1550),(650,1600) */ /* CIF Decision (550,1600) */ decision seqTrain = ''; /* CIF Answer InvisibleBrackets */ /* CIF Line (650,1700),(650,1750) */ /* CIF TextPosition (575,1700) */ (false): /* CIF Output (550,1750) Right */ output newTrainStop (seqTrain, curPos) via oo; /* CIF Line (650,1850),(650,1900) */ /* CIF Answer Right InvisibleBrackets */ /* CIF Line (750,1650),(775,1650),(775,1875),(650,1875),(650,1900) */ /* CIF TextPosition (800,1900) */ (true): /* CIF End Decision */ enddecision; /* CIF NextState (550,1900) */ nextstate appStop; /* CIF End State */ endstate; /* CIF CurrentPage 3 */ /* CIF State (50,250) */ state sigGo; /* CIF Line (150,350),(150,400) */ /* CIF Input (50,400) Right */ input sigTimer; /* CIF Line (150,500),(150,550) */ /* CIF Decision (50,550) */ decision sigState; /* CIF Answer InvisibleBrackets */ /* CIF Line (150,650),(150,700) */ /* CIF TextPosition (175,675) */ (go): /* CIF ProcedureCall (50,700) */ call setCurPos; /* CIF Line (150,800),(150,850) */ /* CIF Set (50,850) */ set(NOW+ td!sigTS2Dur+td!breakDur, gateTimer); /* CIF Line (150,950),(150,1000) */ /* CIF NextState (50,1000) */ nextstate gateGo; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (250,600),(650,600),(650,700) */ /* CIF TextPosition (675,625) */ (halt): /* CIF Set (550,700) */ set (NOW+td!breakDur, sigStopTimer); /* CIF Line (650,800),(650,850) */ /* CIF NextState (550,850) */ nextstate sigBreak; /* CIF End Decision */ enddecision; /* CIF End State */ endstate; /* CIF State (1050,250) */ state sigBreak; /* CIF Line (1150,350),(1150,400) */ /* CIF Input (1050,400) Right */ input newSignalState (ts, sigState); /* CIF Line (1150,500),(1150,550) */ /* CIF Reset (1050,550) */ reset (sigStopTimer); /* CIF Line (1150,650),(1150,700) */ /* CIF ProcedureCall (1050,700) */ call setCurPos; /* CIF Line (1150,800),(1150,850) */ /* CIF Task (1050,850) */ task goDur := call compDistDur (0); /* CIF Line (1150,950),(1150,1000) */ /* CIF Set (1050,1000) */ set (NOW+ goDur, gateTimer); /* CIF Line (1150,1100),(1150,1150) */ /* CIF NextState (1050,1150) */ nextstate gateGo; /* CIF End State */ endstate; /* CIF State (1300,250) */ state sigBreak; /* CIF Line (1400,350),(1400,400) */ /* CIF Input (1300,400) Right */ input sigStopTimer; /* CIF Line (1400,500),(1400,550) */ /* CIF ProcedureCall (1300,550) */ call setCurPos; /* CIF Line (1400,650),(1400,700) */ /* CIF Reset (1300,700) */ reset (sigTimer); /* CIF Line (1400,800),(1400,850) */ /* CIF Decision (1300,850) */ decision seqTrain = ''; /* CIF Answer InvisibleBrackets */ /* CIF Line (1400,950),(1400,1000) */ /* CIF TextPosition (1425,975) */ (false): /* CIF Output (1300,1000) Right */ output newTrainStop (seqTrain, curPos) via oo; /* CIF Line (1400,1100),(1400,1150) */ /* CIF Answer Right InvisibleBrackets */ /* CIF Line (1500,900),(1600,900),(1600,1125),(1400,1125),(1400,1150) */ /* CIF TextPosition (1625,1150) */ (true): /* CIF End Decision */ enddecision; /* CIF NextState (1300,1150) */ nextstate sigStop; /* CIF End State */ endstate; /* CIF State (50,1150) */ state sigGo; /* CIF Line (150,1250),(150,1300) */ /* CIF Input (50,1300) Right */ input newTrainStart (ts); /* CIF Line (150,1400),(150,1450) */ /* CIF Reset (50,1450) */ reset (trainStopTimer); /* CIF Line (150,1550),(150,1600) */ /* CIF NextState (50,1600) */ nextstate sigGo; /* CIF End State */ endstate; /* CIF CurrentPage 4 */ /* CIF State (50,250) */ state sigGo; /* CIF Line (150,350),(150,400) */ /* CIF Input (50,400) Right */ input newTrainStop (ts, precPos); /* CIF Line (150,500),(150,550) */ /* CIF ProcedureCall (50,550) */ call setCurPos; /* CIF Line (150,650),(150,700) */ /* CIF Task (50,700) */ task stopDur := call compDistDur (precPos+minDistPos); /* CIF Line (150,800),(150,850) */ /* CIF Set (50,850) */ set (NOW+ stopDur, trainStopTimer); /* CIF Line (150,950),(150,1000) */ /* CIF NextState (50,1000) */ nextstate sigGo; /* CIF End State */ endstate; /* CIF State (300,250) */ state sigGo; /* CIF Line (400,350),(400,400) */ /* CIF Input (300,400) Right */ input trainStopTimer; /* CIF Line (400,500),(400,550) */ /* CIF ProcedureCall (300,550) */ call setCurPos; /* CIF Line (400,650),(400,700) */ /* CIF Reset (300,700) */ reset (sigTimer); /* CIF Line (400,800),(400,850) */ /* CIF Decision (300,850) */ decision seqTrain = ''; /* CIF Answer InvisibleBrackets */ /* CIF Line (400,950),(400,1000) */ /* CIF TextPosition (425,975) */ (false): /* CIF Output (300,1000) Right */ output newTrainStop (seqTrain, curPos) via oo; /* CIF Line (400,1100),(400,1150) */ /* CIF Answer Right InvisibleBrackets */ /* CIF Line (500,900),(525,900),(525,1125),(400,1125),(400,1150) */ /* CIF TextPosition (550,1150) */ (true): /* CIF End Decision */ enddecision; /* CIF NextState (300,1150) */ nextstate trainStop; /* CIF End State */ endstate; /* CIF State (550,250) */ state sigStop; /* CIF Line (650,350),(650,400) */ /* CIF Input (550,400) Right */ input newSignalState (ts, sigState); /* CIF Line (650,500),(650,550) */ /* CIF Decision (550,550) */ decision sigState; /* CIF Answer InvisibleBrackets */ /* CIF Line (650,650),(650,700) */ /* CIF TextPosition (675,675) */ (go): /* CIF Set (550,700) */ set (NOW+td!breakDur, startTimer); /* CIF Line (650,800),(650,850) */ /* CIF NextState (550,850) */ nextstate sigStop; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (750,600),(1150,600),(1150,700) */ /* CIF TextPosition (1175,625) */ (halt): /* CIF ProcedureCall (1050,700) */ call printIt(instName// ' ERROR: conflicting signal state', NOW); /* CIF Line (1150,800),(1150,850) */ /* CIF NextState (1050,850) */ nextstate sigStop; /* CIF End Decision */ enddecision; /* CIF End State */ endstate; /* CIF State (1550,250) */ state sigStop; /* CIF Line (1650,350),(1650,400) */ /* CIF Input (1550,400) Right */ input startTimer; /* CIF Line (1650,500),(1650,550) */ /* CIF Task (1550,550) */ task goDur := call compDistDur (0); /* CIF Line (1650,650),(1650,700) */ /* CIF Set (1550,700) */ set (NOW+ goDur, gateTimer); /* CIF Line (1650,800),(1650,850) */ /* CIF Task (1550,850) */ task startTime := NOW; /* CIF Line (1650,950),(1650,1000) */ /* CIF Decision (1550,1000) */ decision seqTrain = ''; /* CIF Answer InvisibleBrackets */ /* CIF Line (1650,1100),(1650,1150) */ /* CIF TextPosition (1675,1125) */ (false): /* CIF Output (1550,1150) Right */ output newTrainStart (seqTrain) via oo; /* CIF Line (1650,1250),(1650,1300) */ /* CIF Answer Right InvisibleBrackets */ /* CIF Line (1750,1050),(1775,1050),(1775,1275),(1650,1275),(1650,1300) */ /* CIF TextPosition (1800,1300) */ (true): /* CIF End Decision */ enddecision; /* CIF NextState (1550,1300) */ nextstate gateGo; /* CIF End State */ endstate; /* CIF CurrentPage 5 */ /* CIF State (50,250) */ state trainStop; /* CIF Line (150,350),(150,400) */ /* CIF Input (50,400) Right */ input newTrainStart (ts); /* CIF Line (150,500),(150,550) */ /* CIF Set (50,550) */ set (NOW+ td!breakDur, startTimer); /* CIF Line (150,650),(150,700) */ /* CIF NextState (50,700) */ nextstate trainStop; /* CIF End State */ endstate; /* CIF State (300,250) */ state trainStop; /* CIF Line (400,350),(400,400) */ /* CIF Input (300,400) Right */ input startTimer; /* CIF Line (400,500),(400,550) */ /* CIF Task (300,550) */ task goDur := call compDistDur (sigPos+breakPos); /* CIF Line (400,650),(400,700) */ /* CIF Set (300,700) */ set (NOW+ goDur, sigTimer); /* CIF Line (400,800),(400,850) */ /* CIF Task (300,850) */ task startTime := NOW; /* CIF Line (400,950),(400,1000) */ /* CIF Decision (300,1000) */ decision seqTrain = ''; /* CIF Answer InvisibleBrackets */ /* CIF Line (400,1100),(400,1150) */ /* CIF TextPosition (425,1125) */ (false): /* CIF Output (300,1150) Right */ output newTrainStart (seqTrain) via oo; /* CIF Line (400,1250),(400,1300) */ /* CIF Answer Right InvisibleBrackets */ /* CIF Line (500,1050),(525,1050),(525,1275),(400,1275),(400,1300) */ /* CIF TextPosition (550,1300) */ (true): /* CIF End Decision */ enddecision; /* CIF NextState (300,1300) */ nextstate sigGo; /* CIF End State */ endstate; /* CIF State (800,250) */ state sigStop, trainStop; /* CIF Line (900,350),(900,400) */ /* CIF Input (800,400) Right */ input newSeqTrain (ts, seqTrain); /* CIF Line (900,500),(900,550) */ /* CIF Decision (800,550) */ decision seqTrain = ''; /* CIF Answer InvisibleBrackets */ /* CIF Line (900,650),(900,700) */ /* CIF TextPosition (925,675) */ (false): /* CIF Output (800,700) Right */ output newTrainStop (seqTrain, curPos) via oo; /* CIF Line (900,800),(900,850) */ /* CIF Answer Right InvisibleBrackets */ /* CIF Line (1000,600),(1050,600),(1050,825),(900,825),(900,850) */ /* CIF TextPosition (1075,600) */ (true): /* CIF End Decision */ enddecision; /* CIF NextState (800,850) */ nextstate -; /* CIF End State */ endstate; /* CIF CurrentPage 6 */ /* CIF State (300,100) */ state gateGo; /* CIF Line (400,200),(400,250) */ /* CIF Input (300,250) Right */ input gateTimer; /* CIF Line (400,350),(400,400) */ /* CIF Output (300,400) Right */ output trainPassed (instName) via oo; /* CIF Line (400,500),(400,550) */ /* CIF Reset (300,550) */ reset (repT); /* CIF Line (400,650),(400,700) */ /* CIF Task (300,700) */ task curPos := 0, movType := halt; /* CIF Line (400,800),(400,850) */ /* CIF ProcedureCall (300,850) */ call report; /* CIF Line (400,950),(400,1000) */ /* CIF Task (300,1000) */ task repLifeDur := NOW-creTime; /* CIF Line (400,1100),(400,1150) */ /* CIF Task (300,1150) */ task repStopDur:= repLifeDur- (neutrDur*wholeDist); /* CIF Line (400,1250),(400,1300) */ /* CIF Output (300,1300) Right */ output repTrain (instName, repLifeDur, repStopDur) via oo; /* CIF Line (400,1400),(400,1450) */ /* CIF Task (300,1450) */ task repF := close (repF); /* CIF Line (400,1550),(400,1600) */ /* CIF ProcedureCall (300,1600) */ call revokeInstance (self); /* CIF Line (400,1700),(400,1750) */ /* CIF Stop (350,1750),(100,100) */ stop ; /* CIF End State */ endstate; /* CIF CurrentPage 7 */ /* CIF State (50,250) */ state appGo,sigGo, sigBreak,gateGo; /* CIF Line (150,350),(150,400) */ /* CIF Input (50,400) Right */ input repT; /* CIF Line (150,500),(150,550) */ /* CIF Task (50,550) */ task movType:= go; /* CIF Line (150,650),(150,700) */ /* CIF ProcedureCall (50,700) */ call setCurPos; /* CIF Line (150,800),(150,850) */ /* CIF Label Invisible */ grst34: /* CIF Set (50,850) */ set (NOW+repDur, repT); /* CIF Line (150,950),(150,1000) */ /* CIF ProcedureCall (50,1000) */ call report; /* CIF Line (150,1100),(150,1150) */ /* CIF NextState (50,1150) */ nextstate -; /* CIF End State */ endstate; /* CIF State (300,250) */ state appStop, trainStop, sigStop; /* CIF Line (400,350),(400,400) */ /* CIF Input (300,400) Right */ input repT; /* CIF Line (400,500),(400,550) */ /* CIF Task (300,550) */ task movType:= halt; /* CIF Line (400,650),(400,825),(150,825),(150,850) */ /* CIF Join Invisible */ join grst34; /* CIF End State */ endstate; /* CIF End ProcessDiagram */ endprocess EnvTrainCtrl; /* CIF ProcedureDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\EnvTrain\setCurPos.spd' */ /* CIF Specific SDT Page 1 Scale 100 Grid (250,150) AutoNumbered */ procedure setCurPos; /* CIF DefaultSize (200,100) */ /* CIF Text (800,250) */ DCL tempR Real; /* CIF End Text */ /* CIF CurrentPage 1 */ /* CIF ProcedureStart (300,250) */ start ; /* CIF Line (400,350),(400,400) */ /* CIF Task (300,400) */ task tempR :=(call dur2Real(NOW-startTime))/ wholeDist*100; /* CIF Line (400,500),(400,550) */ /* CIF Task (300,550) */ task curPos := curPos - tempR; /* CIF Line (400,650),(400,700) */ /* CIF Task (300,700) */ task startTime:= NOW; /* CIF Line (400,800),(400,850) */ /* CIF Return (350,850),(100,100) */ return ; /* CIF End ProcedureDiagram */ endprocedure setCurPos; /* CIF ProcedureDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\EnvTrain\compDistDur.spd' */ /* CIF Specific SDT Page 1 Scale 100 Grid (250,150) AutoNumbered */ procedure compDistDur ;FPAR IN dest Real; RETURNS Duration; /* CIF DefaultSize (200,100) */ /* CIF Text (800,100) */ DCL diffR Real; DCL diffD Duration; /* CIF End Text */ /* CIF CurrentPage 1 */ /* CIF ProcedureStart (50,250) */ start ; /* CIF Line (150,350),(150,400) */ /* CIF Task (50,400) */ task diffR := curPos-dest; /* CIF Line (150,500),(150,550) */ /* CIF Decision (50,550) */ decision diffR < 1; /* CIF Answer InvisibleBrackets */ /* CIF Line (150,650),(150,700) */ /* CIF TextPosition (175,675) */ (false): /* CIF Task (50,700) */ task diffR := diffR * wholeDist/100; /* CIF Line (150,800),(150,1000) */ /* CIF Answer Right InvisibleBrackets */ /* CIF Line (250,600),(400,600),(400,700) */ /* CIF TextPosition (425,625) */ (true): /* CIF Task (300,700) */ task diffr := 1; /* CIF Line (400,800),(400,850) */ /* CIF ProcedureCall (300,850) */ call printIt ('Negativ value in compDistDur', NOW); /* CIF Line (400,950),(400,975),(150,975),(150,1000) */ /* CIF End Decision */ enddecision; /* CIF Task (50,1000) */ task diffD := neutrDur*diffR; /* CIF Line (150,1100),(150,1150) */ /* CIF Return (100,1150),(100,100) */ return diffD; /* CIF End ProcedureDiagram */ endprocedure compDistDur; /* CIF ProcedureDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\EnvTrain\report.spd' */ /* CIF Specific SDT Page 1 Scale 100 Grid (250,150) AutoNumbered */ procedure report; /* CIF DefaultSize (200,100) */ /* CIF Text (800,100) */ DCL ts CharString; /*RR DCL tempR Real; RR*/ /* CIF End Text */ /* CIF CurrentPage 1 */ /* CIF ProcedureStart (300,100) */ start ; /* CIF Line (400,200),(400,250) */ /* CIF Task (300,250) */ task ts := instName; /* CIF Line (400,350),(400,550) */ /* CIF Task (300,550) */ task ts:=ts//' '// (call realToStr (curPos)); /* CIF Line (400,650),(400,700) */ /* CIF Task (300,700) */ task ts:=ts//' '// signalStateTypeToStr (movType); /* CIF Line (400,800),(400,850) */ /* CIF Task (300,850) */ task ts:=ts//' '// trackTypeToStr (td!trType); /* CIF Line (400,950),(400,1000) */ /* CIF Task (300,1000) */ task ts:=ts//' '// (call durationToStr (NOW-creTime)); /* CIF Line (400,1100),(400,1150) */ /* CIF Task (300,1150) */ task ts:=ts// ' at '; /* CIF Line (400,1250),(400,1275),(600,1275),(600,675),(900,675),(900,700) */ /* CIF Task (800,700) */ task repF:=PutCharString (repF,ts); /* CIF Line (900,800),(900,850) */ /* CIF Task (800,850) */ task repF:=PutTime (repF,NOW); /* CIF Line (900,950),(900,1000) */ /* CIF Task (800,1000) */ task repF:=PutNewLine(repF), repF:=Flush(repF); /* CIF Line (900,1100),(900,1150) */ /* CIF Return (850,1150),(100,100) */ return ; /* CIF End ProcedureDiagram */ endprocedure report; /* CIF PackageDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (150,150),(1600,2000) */ /* CIF PackageReference (175,25),(200,100) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\EnvTrack\EnvTrack.sun' */ /* CIF Specific SDT Page 1 Scale 100 Grid (50,50) AutoNumbered */ USE Utils; USE Project; USE EnvSignal; USE EnvTrain; USE EnvTrainSens; Package EnvTrack; /* CIF CurrentPage 1 */ /* CIF Text (600,550),(200,100) */ SIGNALLIST EnvTrackInp = go, initTrack, setPerToCreTrain, creNewTrain; /*RR SIGNALLIST EnvTrackOutp = dummy; RR*/ /* CIF End Text */ /* CIF BlockType (250,500),(300,200) */ /* CIF TextPosition (275,575) */ block type EnvTrack referenced; /* CIF End PackageDiagram */ endpackage EnvTrack; /* CIF BlockTypeDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (150,150),(1600,2000) */ /* CIF BlockPage 2 (1900,2100) */ /* CIF Frame (250,100),(1400,1950) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\EnvTrack\EnvTrack.sbt' */ /* CIF Specific SDT Page 1 Scale 100 Grid (50,50) AutoNumbered */ /* CIF Specific SDT Page 2 Scale 80 Grid (50,50) AutoNumbered */ Block Type EnvTrack; /* CIF Gate (250,375),(100,375) */ /* CIF TextPosition (200,325) */ /* CIF TextPosition (125,400) SignalList1 */ gate oi in with (EnvTrackInp); /* CIF CurrentPage 1 */ /* CIF Text (500,600),(200,100) */ /* Signals to subobjects via a */ SIGNALLIST ai2 = (EnvTrainSensInp) ; /* */ SIGNALLIST ai3 = (EnvSignalInp) ; /* */ SIGNALLIST ai4 = (EnvTrainInp) ; /* */ /* CIF End Text */ /* CIF Text (500,800),(200,100) */ /* Signals from subobjects via b */ /*RR SIGNALLIST bi2 = (EnvTrainSensOutp); RR*//* */ SIGNALLIST bi3 = (EnvSignalOutp); /* */ SIGNALLIST bi4 = (EnvTrainOutp); /* */ /* CIF End Text */ /* CIF SubstructureDiagram Invisible */ substructure EnvTrack; /* CIF CurrentPage 2 */ /* CIF Channel (250,375),(650,375) */ /* CIF TextPosition (272,324) */ /* CIF TextPosition (350,400) SignalList1 */ /* CIF Arrow1Position (350,375) */ channel oi from env via oi to EnvTrackCtrl with (EnvTrackInp); endchannel oi; /* CIF Channel (650,475),(275,475),(275,1050),(650,1050) */ /* CIF TextPosition (300,1000) */ /* CIF TextPosition (441,1075) SignalList1 */ /* CIF Arrow1Position (560,1050) */ channel a.i2 from EnvTrackCtrl to ts via oi with (ai2); endchannel a.i2; /* CIF Channel (650,475),(275,475),(275,1200),(650,1200) */ /* CIF TextPosition (300,1150) */ /* CIF TextPosition (441,1225) SignalList1 */ /* CIF Arrow1Position (560,1200) */ channel a.i3 from EnvTrackCtrl to sig1 via oi with (ai3); endchannel a.i3; /* CIF Channel (650,475),(275,475),(275,1350),(650,1350) */ /* CIF TextPosition (300,1300) */ /* CIF TextPosition (441,1375) SignalList1 */ /* CIF Arrow1Position (560,1350) */ channel a.i4 from EnvTrackCtrl to trains via oi with (ai4); endchannel a.i4; /* CIF Channel (1200,1200),(1625,1200),(1625,475),(1300,475) */ /* CIF TextPosition (1210,1150) */ /* CIF TextPosition (1475,1225) SignalList1 */ /* CIF Arrow1Position (1381,475) */ channel b.i3 from sig1 via oo to EnvTrackCtrl with (bi3); endchannel b.i3; /* CIF Channel (1200,1350),(1625,1350),(1625,475),(1300,475) */ /* CIF TextPosition (1212,1301) */ /* CIF TextPosition (1475,1375) SignalList1 */ /* CIF Arrow1Position (1381,475) */ channel b.i4 from trains via oo to EnvTrackCtrl with (bi4); endchannel b.i4; /* CIF Block (650,350),(650,150) */ /* CIF TextPosition (725,400) */ block EnvTrackCtrl referenced; /* CIF Block (650,1000),(550,100) */ /* CIF TextPosition (725,1025) */ /* CIF GateReference (650,1050) */ /* CIF TextPosition (675,1025) */ block ts:EnvTrainSens; /* CIF Block (650,1150),(550,100) */ /* CIF TextPosition (725,1175) */ /* CIF GateReference (650,1200) */ /* CIF TextPosition (675,1175) */ /* CIF GateReference (1200,1200) */ /* CIF TextPosition (1150,1175) */ block sig1:EnvSignal; /* CIF Block (650,1300),(550,100) */ /* CIF TextPosition (725,1325) */ /* CIF GateReference (650,1350) */ /* CIF TextPosition (675,1325) */ /* CIF GateReference (1200,1350) */ /* CIF TextPosition (1150,1325) */ block trains:EnvTrain; /* CIF End SubstructureDiagram */ endsubstructure EnvTrack; /* CIF End BlockTypeDiagram */ endblock type EnvTrack; /* CIF BlockDiagram */ /* CIF Page 1 (1900,2100) */ /* CIF Frame (150,150),(1600,1700) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\EnvTrack\EnvTrackCtrl.sbk' */ /* CIF Specific SDT Page 1 Scale 80 Grid (50,50) AutoNumbered */ Block EnvTrackCtrl; /* CIF CurrentPage 1 */ /* CIF Text (500,250),(200,100) */ SIGNALLIST aOut=(ai2),(ai3),(ai4); SIGNALLIST bIn= /*(bi2), */ (bi3),(bi4); /* CIF End Text */ /* CIF SignalRoute (150,700),(650,700) */ /* CIF TextPosition (175,650) */ /* CIF TextPosition (175,725) SignalList1 */ signalroute oi from env to EnvTrackMasterCtrl with (EnvTrackInp); /* CIF SignalRoute (1750,775),(1250,775) */ /* CIF TextPosition (1500,725) */ /* CIF TextPosition (1275,800) SignalList1 */ signalroute b from env to EnvTrackMasterCtrl with (bIn); /* CIF SignalRoute (975,900),(975,1200) */ /* CIF TextPosition (1000,975) */ /* CIF TextPosition (1000,1125) SignalList1 */ signalroute mo from EnvTrackMasterCtrl to EnvTrackCtrl with (EnvTrackInp), (bIn); /* CIF SignalRoute (800,1350),(150,1350) */ /* CIF TextPosition (197,1350) */ /* CIF TextPosition (400,1375) SignalList1 */ signalroute a from EnvTrackCtrl to env with (aOut); /* CIF Process (650,650),(600,250) */ /* CIF TextPosition (675,750) */ process EnvTrackMasterCtrl(1,1) referenced; /* CIF Process (800,1200),(350,200) */ /* CIF TextPosition (825,1275) */ process EnvTrackCtrl(0, ) referenced; /* CIF Connect */ /* CIF TextPosition (75,675) */ connect oi and oi; /* CIF Connect */ /* CIF TextPosition (50,1325) */ connect a.i2, a.i3, a.i4 and a; /* CIF Connect */ /* CIF TextPosition (1775,750) */ connect /* b.i2,*/ b.i3, b.i4 and b; /* CIF End BlockDiagram */ endblock EnvTrackCtrl; /* CIF ProcessDiagram */ /* CIF Page 1 (1700,1700) */ /* CIF Frame (0,0),(1700,1700) */ /* CIF Page 2 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Page 3 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Page 4 (1900,2350) */ /* CIF Frame (0,0),(1900,2350) */ /* CIF Page 5 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\EnvTrack\EnvTrackMasterCtrl.spr' */ /* CIF Specific SDT Page 1 Scale 100 Grid (250,150) AutoNumbered */ /* CIF Specific SDT Page 2 Scale 82 Grid (250,150) AutoNumbered */ /* CIF Specific SDT Page 3 Scale 100 Grid (250,150) AutoNumbered */ /* CIF Specific SDT Page 4 Scale 100 Grid (250,150) AutoNumbered */ /* CIF Specific SDT Page 5 Scale 100 Grid (250,150) AutoNumbered */ Process EnvTrackMasterCtrl; /* CIF DefaultSize (200,100) */ /* CIF CurrentPage 1 */ /* CIF Text (700,100) */ DCL instName Charstring; /*RR DCL ts, ts1 CharString; RR*/ /* CIF End Text */ /* CIF CurrentPage 2 */ /* CIF Text (550,400) */ /*RR DCL creMode CreationModeType; RR*/ /*RR DCl trType TrackType; RR*/ DCL perToCreTrain Duration; DCL td TrackDurationType; DCL t1 CharString; DCL instPID PID; /* CIF End Text */ /* CIF CurrentPage 4 */ /* CIF Text (550,100) */ DCL sigState SignalStateType; DCL t2 CharString; DCL dur, dur1 Duration; DCL tr Real; /* CIF End Text */ /* CIF CurrentPage 1 */ /* CIF Start (50,250) */ start ; /* CIF Line (150,350),(150,400) */ /* CIF NextState (50,400) */ nextstate Main; /* CIF State (50,400) */ state Main; /* CIF Line (150,500),(150,550) */ /* CIF Input (50,550) Right */ input go (instName); /* CIF Line (150,650),(150,700) */ /* CIF Create (50,700) */ create EnvTrackCtrl; /* CIF Line (150,800),(150,850) */ /* CIF Decision (50,850) */ decision offspring; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (250,900),(650,900),(650,1000) */ /* CIF TextPosition (675,925) */ (null): /* CIF ProcedureCall (550,1000) */ call printIt(instName//' ERROR: '// 'cannot dynamically create process', NOW); /* CIF Line (650,1100),(650,1150) */ /* CIF NextState (550,1150) */ nextstate main; /* CIF Answer */ /* CIF Line (150,950),(150,1000) */ /* CIF TextPosition (175,950) */ else: /* CIF Output (50,1000) Right */ output go(instName) to offspring; /* CIF Line (150,1100),(150,1150) */ /* CIF ProcedureCall (50,1150) */ call announceInstance (offspring, instName); /* CIF Line (150,1250),(150,1300) */ /* CIF NextState (50,1300) */ nextstate main; /* CIF End Decision */ enddecision; /* CIF End State */ endstate; /* CIF State (550,400) */ state main; /* CIF End State */ endstate; /* CIF CurrentPage 2 */ /* CIF State (50,1150) */ state main; /* CIF Line (150,1250),(150,1300) */ /* CIF Input (50,1300) Right */ input setPerToCreTrain (t1, perToCreTrain); /* CIF Line (150,1400),(150,1450) */ /* CIF Task (50,1450) */ task instPID := call getPID (t1); /* CIF Line (150,1550),(150,1600) */ /* CIF Decision (50,1600) */ decision instPID; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (250,1650),(650,1650),(650,1750) */ /* CIF TextPosition (675,1675) */ (NULL): /* CIF ProcedureCall (550,1750) */ call printIt(t1//' ERROR: '// 'no matching process instance found', NOW); /* CIF Line (650,1850),(650,1900) */ /* CIF NextState (550,1900) */ nextstate main; /* CIF Answer */ /* CIF Line (150,1700),(150,1750) */ /* CIF TextPosition (175,1725) */ else: /* CIF Output (50,1750) Right */ output setPerToCreTrain (t1, perToCreTrain) to instPID; /* CIF Line (150,1850),(150,1900) */ /* CIF NextState (50,1900) */ nextstate main; /* CIF End Decision */ enddecision; /* CIF End State */ endstate; /* CIF State (1050,1150) */ state main; /* CIF Line (1150,1250),(1150,1300) */ /* CIF Input (1050,1300) Right */ input creNewTrain (t1); /* CIF Line (1150,1400),(1150,1450) */ /* CIF Task (1050,1450) */ task instPID := call getPID (t1); /* CIF Line (1150,1550),(1150,1600) */ /* CIF Decision (1050,1600) */ decision instPID; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (1250,1650),(1650,1650),(1650,1750) */ /* CIF TextPosition (1675,1675) */ (NULL): /* CIF ProcedureCall (1550,1750) */ call printIt(t1//' ERROR: '// 'no matching process instance found', NOW); /* CIF Line (1650,1850),(1650,1900) */ /* CIF NextState (1550,1900) */ nextstate main; /* CIF Answer */ /* CIF Line (1150,1700),(1150,1750) */ /* CIF TextPosition (1175,1725) */ else: /* CIF Output (1050,1750) Right */ output creNewTrain (t1) to instPID; /* CIF Line (1150,1850),(1150,1900) */ /* CIF NextState (1050,1900) */ nextstate main; /* CIF End Decision */ enddecision; /* CIF End State */ endstate; /* CIF CurrentPage 3 */ /* CIF State (50,250) */ state main; /* CIF Line (150,350),(150,400) */ /* CIF Input (50,400) Right */ input initTrack (t1, td, perToCreTrain); /* CIF Line (150,500),(150,850) */ /* CIF Task (50,850) */ task instPID := call getPID (t1); /* CIF Line (150,950),(150,1000) */ /* CIF Decision (50,1000) */ decision instPID; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (250,1050),(900,1050),(900,1150) */ /* CIF TextPosition (925,1075) */ (NULL): /* CIF ProcedureCall (800,1150) */ call printIt(t1//' ERROR: '// 'no matching process instance found', NOW); /* CIF Line (900,1250),(900,1450) */ /* CIF NextState (800,1450) */ nextstate main; /* CIF Answer */ /* CIF Line (150,1100),(150,1150) */ /* CIF TextPosition (175,1125) */ else: /* CIF Output (50,1150) Right */ output initTrack (t1, td, perToCreTrain) to instPID; /* CIF Line (150,1250),(150,1450) */ /* CIF NextState (50,1450) */ nextstate main; /* CIF End Decision */ enddecision; /* CIF End State */ endstate; /* CIF CurrentPage 4 */ /* CIF State (50,250) */ state main; /* CIF Line (150,350),(150,400) */ /* CIF Input (50,400) Right */ input newSIgnalState (t1, sigState); /* CIF Line (150,500),(150,550) */ /* CIF Task (50,550) */ task t2 := call cutFirstId (t1); /* CIF Line (150,650),(150,700) */ /* CIF Task (50,700) */ task instPID := call getPID (t2); /* CIF Line (150,800),(150,850) */ /* CIF Decision (50,850) */ decision instPID; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (250,900),(650,900),(650,1000) */ /* CIF TextPosition (675,925) */ (NULL): /* CIF ProcedureCall (550,1000) */ call printIt(t1//' ERROR: '// 'no matching process instance found', NOW); /* CIF Line (650,1100),(650,1150) */ /* CIF NextState (550,1150) */ nextstate main; /* CIF Answer */ /* CIF Line (150,950),(150,1000) */ /* CIF TextPosition (175,975) */ else: /* CIF Output (50,1000) Right */ output newSIgnalState (t1, sigState) to instPID; /* CIF Line (150,1100),(150,1150) */ /* CIF NextState (50,1150) */ nextstate main; /* CIF End Decision */ enddecision; /* CIF End State */ endstate; /* CIF State (1050,250) */ state main; /* CIF Line (1150,350),(1150,400) */ /* CIF Input (1050,400) Right */ input newTrainStop (t1, tr); /* CIF Line (1150,500),(1150,550) */ /* CIF Task (1050,550) */ task t2 := call cutFirstId (t1); /* CIF Line (1150,650),(1150,700) */ /* CIF Task (1050,700) */ task instPID := call getPID (t2); /* CIF Line (1150,800),(1150,850) */ /* CIF Decision (1050,850) */ decision instPID; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (1250,900),(1650,900),(1650,1000) */ /* CIF TextPosition (1675,925) */ (NULL): /* CIF ProcedureCall (1550,1000) */ call printIt(t1//' ERROR: '// 'no matching process instance found', NOW); /* CIF Line (1650,1100),(1650,1150) */ /* CIF NextState (1550,1150) */ nextstate main; /* CIF Answer */ /* CIF Line (1150,950),(1150,1000) */ /* CIF TextPosition (1175,975) */ else: /* CIF Output (1050,1000) Right */ output newTrainStop (t1, tr) to instPID; /* CIF Line (1150,1100),(1150,1150) */ /* CIF NextState (1050,1150) */ nextstate main; /* CIF End Decision */ enddecision; /* CIF End State */ endstate; /* CIF State (50,1300) */ state main; /* CIF Line (150,1400),(150,1450) */ /* CIF Input (50,1450) Right */ input repTrain (t1, dur, dur1); /* CIF Line (150,1550),(150,1600) */ /* CIF Task (50,1600) */ task t2 := call cutFirstId (t1); /* CIF Line (150,1700),(150,1750) */ /* CIF Task (50,1750) */ task instPID := call getPID (t2); /* CIF Line (150,1850),(150,1900) */ /* CIF Decision (50,1900) */ decision instPID; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (250,1950),(650,1950),(650,2050) */ /* CIF TextPosition (675,1975) */ (NULL): /* CIF ProcedureCall (550,2050) */ call printIt(t1//' ERROR: '// 'no matching process instance found', NOW); /* CIF Line (650,2150),(650,2200) */ /* CIF NextState (550,2200) */ nextstate main; /* CIF Answer */ /* CIF Line (150,2000),(150,2050) */ /* CIF TextPosition (175,2025) */ else: /* CIF Output (50,2050) Right */ output repTrain (t1, dur, dur1) to instPID; /* CIF Line (150,2150),(150,2200) */ /* CIF NextState (50,2200) */ nextstate main; /* CIF End Decision */ enddecision; /* CIF End State */ endstate; /* CIF State (1050,1300) */ state main; /* CIF Line (1150,1400),(1150,1450) */ /* CIF Input (1050,1450) Right */ input newTrainStart (t1); /* CIF Line (1150,1550),(1150,1600) */ /* CIF Task (1050,1600) */ task t2 := call cutFirstId (t1); /* CIF Line (1150,1700),(1150,1750) */ /* CIF Task (1050,1750) */ task instPID := call getPID (t2); /* CIF Line (1150,1850),(1150,1900) */ /* CIF Decision (1050,1900) */ decision instPID; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (1250,1950),(1650,1950),(1650,2050) */ /* CIF TextPosition (1675,1975) */ (NULL): /* CIF ProcedureCall (1550,2050) */ call printIt(t1//' ERROR: '// 'no matching process instance found', NOW); /* CIF Line (1650,2150),(1650,2200) */ /* CIF NextState (1550,2200) */ nextstate main; /* CIF Answer */ /* CIF Line (1150,2000),(1150,2050) */ /* CIF TextPosition (1175,2025) */ else: /* CIF Output (1050,2050) Right */ output newTrainStart (t1) to instPID; /* CIF Line (1150,2150),(1150,2200) */ /* CIF NextState (1050,2200) */ nextstate main; /* CIF End Decision */ enddecision; /* CIF End State */ endstate; /* CIF CurrentPage 5 */ /* CIF State (50,250) */ state main; /* CIF Line (150,350),(150,400) */ /* CIF Input (50,400) Right */ input trainArrived (t1); /* CIF Line (150,500),(150,550) */ /* CIF Task (50,550) */ task t2 := call cutFirstId (t1); /* CIF Line (150,650),(150,700) */ /* CIF Task (50,700) */ task instPID := call getPID (t2); /* CIF Line (150,800),(150,850) */ /* CIF Decision (50,850) */ decision instPID; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (250,900),(650,900),(650,1000) */ /* CIF TextPosition (675,925) */ (NULL): /* CIF ProcedureCall (550,1000) */ call printIt(t1//' ERROR: '// 'no matching process instance found', NOW); /* CIF Line (650,1100),(650,1150) */ /* CIF NextState (550,1150) */ nextstate main; /* CIF Answer */ /* CIF Line (150,950),(150,1000) */ /* CIF TextPosition (175,975) */ else: /* CIF Output (50,1000) Right */ output trainArrived (t1) to instPID; /* CIF Line (150,1100),(150,1150) */ /* CIF NextState (50,1150) */ nextstate main; /* CIF End Decision */ enddecision; /* CIF End State */ endstate; /* CIF State (1050,250) */ state main; /* CIF Line (1150,350),(1150,400) */ /* CIF Input (1050,400) Right */ input trainPassed (t1); /* CIF Line (1150,500),(1150,550) */ /* CIF Task (1050,550) */ task t2 := call cutFirstId (t1); /* CIF Line (1150,650),(1150,700) */ /* CIF Task (1050,700) */ task instPID := call getPID (t2); /* CIF Line (1150,800),(1150,850) */ /* CIF Decision (1050,850) */ decision instPID; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (1250,900),(1650,900),(1650,1000) */ /* CIF TextPosition (1675,925) */ (NULL): /* CIF ProcedureCall (1550,1000) */ call printIt(t1//' ERROR: '// 'no matching process instance found', NOW); /* CIF Line (1650,1100),(1650,1150) */ /* CIF NextState (1550,1150) */ nextstate main; /* CIF Answer */ /* CIF Line (1150,950),(1150,1000) */ /* CIF TextPosition (1175,975) */ else: /* CIF Output (1050,1000) Right */ output trainPassed (t1) to instPID; /* CIF Line (1150,1100),(1150,1150) */ /* CIF NextState (1050,1150) */ nextstate main; /* CIF End Decision */ enddecision; /* CIF End State */ endstate; /* CIF End ProcessDiagram */ endprocess EnvTrackMasterCtrl; /* CIF ProcessDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Page 2 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Page 3 (1900,2800) */ /* CIF Frame (0,0),(1900,2800) */ /* CIF Page 4 (1900,2800) */ /* CIF Frame (0,0),(1900,2800) */ /* CIF Page 5 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\EnvTrack\EnvTrackCtrl.spr' */ /* CIF Specific SDT Page 1 Scale 100 Grid (250,150) AutoNumbered */ /* CIF Specific SDT Page 2 Scale 100 Grid (250,150) AutoNumbered */ /* CIF Specific SDT Page 3 Scale 100 Grid (250,150) AutoNumbered */ /* CIF Specific SDT Page 4 Scale 100 Grid (250,150) AutoNumbered */ /* CIF Specific SDT Page 5 Scale 100 Grid (250,150) AutoNumbered */ process EnvTrackCtrl; /* CIF DefaultSize (200,100) */ /* CIF CurrentPage 1 */ /* CIF Text (550,100) */ DCL instName Charstring; DCL t1 CharString; /* CIF End Text */ /* CIF Text (50,250) */ /* EnvTrackTask */ /* CIF End Text */ /* CIF Text (550,250) */ /*RR DCL typeOfTrack TrackType; RR*/ DCL lastTrainNo Integer := 0; DCL perToCreateTrain Duration; DCL sigState SignalStateType; DCL creationMode CreationModeType := period; DCL td TrackDurationType; DCL tr Real; Timer creTimer; /* CIF End Text */ /* CIF Text (1300,250) */ NEWTYPE TrainArrayType ARRAY (Integer, CharString) ENDNEWTYPE; DCL maxNo Integer := 0; DCL trainArray TrainArrayType; /* CIF End Text */ /* CIF CurrentPage 2 */ /* CIF Text (550,100) */ DCL i Integer; DCL t2 CharString; /* CIF End Text */ /* CIF CurrentPage 3 */ /* CIF Text (550,100) */ DCL precTrain CharString; DCL precPID PID; /* CIF End Text */ /* CIF CurrentPage 4 */ /* CIF Text (1300,700) */ /*RR DCL dur Duration; RR*/ /* CIF End Text */ /* CIF CurrentPage 5 */ /* CIF Text (800,100) */ DCL repLifeDur, repStopDur Duration; DCL ti Integer; /* CIF End Text */ /* CIF Text (800,250) */ NEWTYPE TrainRepArrayType ARRAY (Integer, Real) ENDNEWTYPE; DCL maxRepNo Integer := 0; DCL trainRepArray TrainRepArrayType; /* CIF End Text */ /* CIF CurrentPage 1 */ /* CIF Start (300,400) */ start ; /* CIF Line (400,500),(400,550) */ /* CIF NextState (300,550) */ nextstate Init; /* CIF State (300,550) */ state Init; /* CIF Line (400,650),(400,700) */ /* CIF Input (300,700) Right */ input go (instName); /* CIF Line (400,800),(400,850) */ /* CIF Output (300,850) Right */ output go ('sig1'//instName) via a.i3; /* CIF Line (400,950),(400,1000) */ /* CIF Output (300,1000) Right */ output go ('ts1'//instName) via a.i2; /* CIF Line (400,1100),(400,1150) */ /* CIF Output (300,1150) Right */ output go ('ts2'//instName) via a.i2; /* CIF Line (400,1250),(400,1300) */ /* CIF NextState (300,1300) */ nextstate Init1; /* CIF End State */ endstate; /* CIF State (300,1300) */ state Init1; /* CIF Line (400,1400),(400,1450) */ /* CIF Input (300,1450) Right */ input initTrack (t1, td, perToCreateTrain) ; /* CIF Line (400,1550),(400,1750) */ /* CIF Output (300,1750) Right */ output getSignalState ('sig1'//instName) via a.i3; /* CIF Line (400,1850),(400,1900) */ /* CIF NextState (300,1900) */ nextstate init2; /* CIF End State */ endstate; /* CIF State (50,850) */ state init; /* CIF Line (150,950),(150,1000) */ /* CIF Save (50,1000) */ save initTrack; /* CIF End State */ endstate; /* CIF State (800,850) */ state Init2; /* CIF Line (900,950),(900,1000) */ /* CIF Input (800,1000) Right */ input newSignalState (t1, sigState); /* CIF Line (900,1100),(900,1150) */ /* CIF Decision (800,1150) */ decision creationMode; /* CIF Answer InvisibleBrackets */ /* CIF Line (900,1250),(900,1300) */ /* CIF TextPosition (925,1275) */ (period): /* CIF Set (800,1300) */ set (NOW+ perToCreateTrain, creTimer); /* CIF Line (900,1400),(900,1450) */ /* CIF NextState (800,1450) */ nextstate period; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (1000,1200),(1150,1200),(1150,1450) */ /* CIF TextPosition (1175,1225) */ (event): /* CIF NextState (1050,1450) */ nextstate event; /* CIF End Decision */ enddecision; /* CIF End State */ endstate; /* CIF CurrentPage 2 */ /* CIF State (50,250) */ state period, event; /* CIF Line (150,350),(150,400) */ /* CIF Input (50,400) Right */ input newSignalState (t1, sigState); /* CIF Line (150,500),(150,550) */ /* CIF Task (50,550) */ task i:=0; /* CIF Line (150,650),(150,700) */ /* CIF Label Invisible */ grst35: /* CIF Decision (50,700) */ decision i<= maxNo; /* CIF Answer InvisibleBrackets */ /* CIF Line (150,800),(150,850) */ /* CIF TextPosition (175,825) */ (true): /* CIF Task (50,850) */ task t1 := trainArray(i); /* CIF Line (150,950),(150,1000) */ /* CIF Decision (50,1000) */ decision t1 = ''; /* CIF Answer InvisibleBrackets */ /* CIF Line (150,1100),(150,1150) */ /* CIF TextPosition (175,1125) */ (false): /* CIF Output (50,1150) Right */ output newSignalState (t1, sigState) via a.i4; /* CIF Line (150,1250),(150,1300) */ /* CIF Answer Right InvisibleBrackets */ /* CIF Line (250,1050),(275,1050),(275,1275),(150,1275),(150,1300) */ /* CIF TextPosition (275,1050) */ (true): /* CIF End Decision */ enddecision; /* CIF Task (50,1300) */ task i:=i+1; /* CIF Line (150,1400),(150,1425),(25,1425),(25,675),(150,675),(150,700) */ /* CIF Answer Right InvisibleBrackets */ /* CIF Line (250,750),(400,750),(400,850) */ /* CIF TextPosition (425,775) */ (false): /* CIF NextState (300,850) */ nextstate -; /* CIF End Decision */ enddecision; /* CIF Join Invisible */ join grst35; /* CIF End State */ endstate; /* CIF State (550,250) */ state period, event; /* CIF Line (650,350),(650,400) */ /* CIF Input (550,400) Right */ input trainArrived (t1); /* CIF Line (650,500),(650,550) */ /* CIF Output (550,550) Right */ output newTrain ('ts1'//instName) via a.i2; /* CIF Line (650,650),(650,700) */ /* CIF NextState (550,700) */ nextstate -; /* CIF End State */ endstate; /* CIF State (800,250) */ state period, event; /* CIF Line (900,350),(900,400) */ /* CIF Input (800,400) Right */ input trainPassed (t1); /* CIF Line (900,500),(900,550) */ /* CIF Output (800,550) Right */ output newTrain ('ts2'//instName) via a.i2; /* CIF Line (900,650),(900,700) */ /* CIF Task (800,700) */ task i:=0; /* CIF Line (900,800),(900,850) */ /* CIF Label Invisible */ grst36: /* CIF Decision (800,850) */ decision i<= maxNo; /* CIF Answer InvisibleBrackets */ /* CIF Line (900,950),(900,1000) */ /* CIF TextPosition (925,975) */ (true): /* CIF Task (800,1000) */ task t2 := trainArray(i); /* CIF Line (900,1100),(900,1150) */ /* CIF Decision (800,1150) */ decision t1 = t2; /* CIF Answer InvisibleBrackets */ /* CIF Line (900,1250),(900,1300) */ /* CIF TextPosition (925,1275) */ (false): /* CIF Task (800,1300) */ task i:=i+1; /* CIF Line (900,1400),(900,1425),(750,1425),(750,875),(775,875),(775,825), (900,825),(900,850) */ /* CIF Answer Right InvisibleBrackets */ /* CIF Line (1000,1200),(1150,1200),(1150,1300) */ /* CIF TextPosition (1175,1225) */ (true): /* CIF Task (1050,1300) */ task trainArray(i) := ''; /* CIF Line (1150,1400),(1150,1450) */ /* CIF NextState (1050,1450) */ nextstate -; /* CIF End Decision */ enddecision; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (1000,900),(1400,900),(1400,1000) */ /* CIF TextPosition (1425,925) */ (false): /* CIF ProcedureCall (1300,1000) */ call printIt (t1 // 'not found', NOW); /* CIF Line (1400,1100),(1400,1150) */ /* CIF NextState (1300,1150) */ nextstate -; /* CIF End Decision */ enddecision; /* CIF Join Invisible */ join grst36; /* CIF End State */ endstate; /* CIF CurrentPage 3 */ /* CIF State (300,250) */ state period; /* CIF Line (400,350),(400,400) */ /* CIF Input (300,400) Right */ input creTimer; /* CIF Line (400,500),(400,550) */ /* CIF Decision (300,550) */ decision lastTrainNo> 0; /* CIF Answer InvisibleBrackets */ /* CIF Line (400,650),(400,700) */ /* CIF TextPosition (425,675) */ (false): /* CIF Task (300,700) */ task precTrain := ''; /* CIF Line (400,800),(400,850) */ /* CIF Answer Right InvisibleBrackets */ /* CIF Line (500,600),(650,600),(650,700) */ /* CIF TextPosition (675,625) */ (true): /* CIF Task (550,700) */ task precTrain := 'train' // (call integerToStr (lastTrainNo))// instName ; /* CIF Line (650,800),(650,825),(400,825),(400,850) */ /* CIF End Decision */ enddecision; /* CIF Task (300,850) */ task lastTrainNo:= lastTrainNo+1; /* CIF Line (400,950),(400,1000) */ /* CIF Task (300,1000) */ task t1:= 'train' // (call integerToStr (lastTrainNo))// instName; /* CIF Line (400,1100),(400,1150) */ /* CIF Task (300,1150) */ task i:=0; /* CIF Line (400,1250),(400,1300) */ /* CIF Label Invisible */ grst37: /* CIF Decision (300,1300) */ decision i< maxNo; /* CIF Answer InvisibleBrackets */ /* CIF Line (400,1400),(400,1450) */ /* CIF TextPosition (425,1425) */ (true): /* CIF Decision (300,1450) */ decision trainArray(i) = ''; /* CIF Answer InvisibleBrackets */ /* CIF Line (400,1550),(400,1600) */ /* CIF TextPosition (425,1575) */ (false): /* CIF Task (300,1600) */ task i:=i+1; /* CIF Line (400,1700),(400,1725),(250,1725),(250,1275),(400,1275),(400,1300) */ /* CIF Join Invisible */ join grst37; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (500,1500),(650,1500),(650,1600) */ /* CIF TextPosition (675,1525) */ (true): /* CIF Task (550,1600) */ task trainArray(i):= t1; /* CIF Line (650,1700),(650,1750) */ /* CIF Label Invisible */ grst38: /* CIF Output (550,1750) Right */ output go(t1) via a.i4; /* CIF Line (650,1850),(650,1900) */ /* CIF Output (550,1900) Right */ output initTrain (t1, td, sigState) via a.i4; /* CIF Line (650,2000),(650,2050) */ /* CIF Task (550,2050) */ task precPID := call getPID(precTrain); /* CIF Line (650,2150),(650,2200) */ /* CIF Decision (550,2200) */ decision precTrain = '' OR precPID = Null; /* CIF Answer InvisibleBrackets */ /* CIF Line (650,2300),(650,2350) */ /* CIF TextPosition (675,2325) */ (false): /* CIF Output (550,2350) Right */ output newSeqTrain (precTrain, t1) via a.i4; /* CIF Line (650,2450),(650,2500) */ /* CIF Answer Right InvisibleBrackets */ /* CIF Line (750,2250),(850,2250),(850,2475),(650,2475),(650,2500) */ /* CIF TextPosition (875,2500) */ (true): /* CIF End Decision */ enddecision; /* CIF Set (550,2500) */ set (NOW+ perToCreateTrain, creTimer); /* CIF Line (650,2600),(650,2650) */ /* CIF NextState (550,2650) */ nextstate period; /* CIF End Decision */ enddecision; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (500,1350),(900,1350),(900,1450) */ /* CIF TextPosition (925,1375) */ (false): /* CIF Task (800,1450) */ task maxNo := maxNo+1; /* CIF Line (900,1550),(900,1600) */ /* CIF Task (800,1600) */ task trainArray(maxNo):= t1; /* CIF Line (900,1700),(900,1725),(650,1725),(650,1750) */ /* CIF Join Invisible */ join grst38; /* CIF End Decision */ enddecision; /* CIF End State */ endstate; /* CIF State (1050,250) */ state period; /* CIF Line (1150,350),(1150,400) */ /* CIF Input (1050,400) Right */ input setPerToCreTrain (t1, perToCreateTrain); /* CIF Line (1150,500),(1150,550) */ /* CIF Reset (1050,550) */ reset (creTimer); /* CIF Line (1150,650),(1150,700) */ /* CIF Set (1050,700) */ set (NOW+ perToCreateTrain, creTimer); /* CIF Line (1150,800),(1150,850) */ /* CIF NextState (1050,850) */ nextstate period; /* CIF End State */ endstate; /* CIF CurrentPage 4 */ /* CIF State (300,250) */ state event, period; /* CIF Line (400,350),(400,400) */ /* CIF Input (300,400) Right */ input creNewTrain (t1); /* CIF Line (400,500),(400,550) */ /* CIF Reset (300,550) */ reset (creTimer); /* CIF Line (400,650),(400,700) */ /* CIF Decision (300,700) */ decision lastTrainNo> 0; /* CIF Answer InvisibleBrackets */ /* CIF Line (400,800),(400,850) */ /* CIF TextPosition (425,825) */ (false): /* CIF Task (300,850) */ task precTrain := ''; /* CIF Line (400,950),(400,1000) */ /* CIF Answer Right InvisibleBrackets */ /* CIF Line (500,750),(650,750),(650,850) */ /* CIF TextPosition (675,775) */ (true): /* CIF Task (550,850) */ task precTrain := 'train' // (call integerToStr (lastTrainNo))// instName ; /* CIF Line (650,950),(650,975),(400,975),(400,1000) */ /* CIF End Decision */ enddecision; /* CIF Task (300,1000) */ task lastTrainNo:= lastTrainNo+1; /* CIF Line (400,1100),(400,1150) */ /* CIF Task (300,1150) */ task t1:= 'train' // (call integerToStr (lastTrainNo))// instName; /* CIF Line (400,1250),(400,1300) */ /* CIF Task (300,1300) */ task i:=0; /* CIF Line (400,1400),(400,1450) */ /* CIF Label Invisible */ grst39: /* CIF Decision (300,1450) */ decision i< maxNo; /* CIF Answer InvisibleBrackets */ /* CIF Line (400,1550),(400,1600) */ /* CIF TextPosition (425,1575) */ (true): /* CIF Decision (300,1600) */ decision trainArray(i) = ''; /* CIF Answer InvisibleBrackets */ /* CIF Line (400,1700),(400,1750) */ /* CIF TextPosition (425,1725) */ (false): /* CIF Task (300,1750) */ task i:=i+1; /* CIF Line (400,1850),(400,1875),(250,1875),(250,1425),(400,1425),(400,1450) */ /* CIF Join Invisible */ join grst39; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (500,1650),(650,1650),(650,1750) */ /* CIF TextPosition (675,1675) */ (true): /* CIF Task (550,1750) */ task trainArray(i):= t1; /* CIF Line (650,1850),(650,1900) */ /* CIF Label Invisible */ grst40: /* CIF Output (550,1900) Right */ output go(t1) via a.i4; /* CIF Line (650,2000),(650,2050) */ /* CIF Output (550,2050) Right */ output initTrain (t1, td, sigState) via a.i4; /* CIF Line (650,2150),(650,2200) */ /* CIF Task (550,2200) */ task precPID := call getPID(precTrain); /* CIF Line (650,2300),(650,2350) */ /* CIF Decision (550,2350) */ decision precTrain = '' OR precPID = NULL; /* CIF Answer InvisibleBrackets */ /* CIF Line (650,2450),(650,2500) */ /* CIF TextPosition (675,2475) */ (false): /* CIF Output (550,2500) Right */ output newSeqTrain (precTrain, t1) via a.i4; /* CIF Line (650,2600),(650,2650) */ /* CIF Answer Right InvisibleBrackets */ /* CIF Line (750,2400),(800,2400),(800,2625),(650,2625),(650,2650) */ /* CIF TextPosition (825,2650) */ (true): /* CIF End Decision */ enddecision; /* CIF NextState (550,2650) */ nextstate event; /* CIF End Decision */ enddecision; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (500,1500),(900,1500),(900,1600) */ /* CIF TextPosition (925,1525) */ (false): /* CIF Task (800,1600) */ task maxNo := maxNo+1; /* CIF Line (900,1700),(900,1750) */ /* CIF Task (800,1750) */ task trainArray(maxNo):= t1; /* CIF Line (900,1850),(900,1875),(650,1875),(650,1900) */ /* CIF Join Invisible */ join grst40; /* CIF End Decision */ enddecision; /* CIF End State */ endstate; /* CIF State (1050,250) */ state event; /* CIF Line (1150,350),(1150,400) */ /* CIF Input (1050,400) Right */ input setPerToCreTrain (t1, perToCreateTrain); /* CIF Line (1150,500),(1150,550) */ /* CIF Set (1050,550) */ set (NOW+ perToCreateTrain, creTimer); /* CIF Line (1150,650),(1150,700) */ /* CIF NextState (1050,700) */ nextstate period; /* CIF End State */ endstate; /* CIF State (1050,850) */ state *; /* CIF Line (1150,950),(1150,1000) */ /* CIF Input (1050,1000) Right */ input newTrainStart (t1); /* CIF Line (1150,1100),(1150,1150) */ /* CIF Output (1050,1150) Right */ output newTrainStart (t1) via a.i4; /* CIF Line (1150,1250),(1150,1300) */ /* CIF NextState (1050,1300) */ nextstate -; /* CIF End State */ endstate; /* CIF State (1300,850) */ state *; /* CIF Line (1400,950),(1400,1000) */ /* CIF Input (1300,1000) Right */ input newTrainStop (t1, tr); /* CIF Line (1400,1100),(1400,1150) */ /* CIF Output (1300,1150) Right */ output newTrainStop (t1, tr) via a.i4; /* CIF Line (1400,1250),(1400,1300) */ /* CIF NextState (1300,1300) */ nextstate -; /* CIF End State */ endstate; /* CIF CurrentPage 5 */ /* CIF State (300,250) */ state *; /* CIF Line (400,350),(400,400) */ /* CIF Input (300,400) Right */ input repTrain (t1, repLifeDur, repStopDur); /* CIF Line (400,500),(400,550) */ /* CIF Task (300,550) */ task tr :=(call dur2Real(repStopDur))/ (call dur2Real(repLifeDur)); /* CIF Line (400,650),(400,700) */ /* CIF Task (300,700) */ task maxRepNo:= maxRepNo+1; /* CIF Line (400,800),(400,850) */ /* CIF Task (300,850) */ task ti := Fix (tr*100); /* CIF Line (400,950),(400,1000) */ /* CIF Task (300,1000) */ task tr := Float (ti); /* CIF Line (400,1100),(400,1150) */ /* CIF Task (300,1150) */ task trainRepArray (maxRepNo):= tr; /* CIF Line (400,1250),(400,1275),(525,1275),(525,675),(900,675),(900,700) */ /* CIF Task (800,700) */ task i:=1, tr := 0; /* CIF Line (900,800),(900,850) */ /* CIF Label Invisible */ grst41: /* CIF Decision (800,850) */ decision i> maxRepNo; /* CIF Answer InvisibleBrackets */ /* CIF Line (900,950),(900,1000) */ /* CIF TextPosition (925,975) */ (false): /* CIF Task (800,1000) */ task tr := tr+ trainRepArray (i); /* CIF Line (900,1100),(900,1150) */ /* CIF Task (800,1150) */ task i:=i+1; /* CIF Line (900,1250),(900,1300),(750,1300),(750,825),(900,825),(900,850) */ /* CIF Answer Right InvisibleBrackets */ /* CIF Line (1000,900),(1150,900),(1150,1000) */ /* CIF TextPosition (1175,925) */ (true): /* CIF Task (1050,1000) */ task tr := tr/ Float(maxRepNo); /* CIF Line (1150,1100),(1150,1150) */ /* CIF Task (1050,1150) */ task t1 := instName // ' '; /* CIF Line (1150,1250),(1150,1300) */ /* CIF Task (1050,1300) */ task t1 := t1//(call realToStr (tr)); /* CIF Line (1150,1400),(1150,1450) */ /* CIF ProcedureCall (1050,1450) */ call putPanelVal( 'obj1',t1); /* CIF Line (1150,1550),(1150,1600) */ /* CIF NextState (1050,1600) */ nextstate -; /* CIF End Decision */ enddecision; /* CIF Join Invisible */ join grst41; /* CIF End State */ endstate; /* CIF End ProcessDiagram */ endprocess EnvTrackCtrl; /* CIF PackageDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (150,150),(1600,2000) */ /* CIF PackageReference (175,25),(200,100) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\EnvCrossing\EnvCrossing.sun' */ /* CIF Specific SDT Page 1 Scale 100 Grid (50,50) AutoNumbered */ USE Utils; USE Project; USE EnvRoad; USE EnvTrack; USE EnvGate; Package EnvCrossing; /* CIF CurrentPage 1 */ /* CIF Text (600,550),(200,100) */ SIGNALLIST EnvCrossingInp = go, initTracks, initTracksDone, setPeriod, setDecrPer, genCars, setPerToCreTrain, creNewTrain; /*RR SIGNALLIST EnvCrossingOutp = dummy; RR*/ /* CIF End Text */ /* CIF BlockType (250,500),(300,200) */ /* CIF TextPosition (275,575) */ block type EnvCrossing referenced; /* CIF End PackageDiagram */ endpackage EnvCrossing; /* CIF BlockTypeDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (150,150),(1600,2000) */ /* CIF BlockPage 2 (1900,2100) */ /* CIF Frame (250,100),(1400,1950) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\EnvCrossing\EnvCrossing.sbt' */ /* CIF Specific SDT Page 1 Scale 100 Grid (50,50) AutoNumbered */ /* CIF Specific SDT Page 2 Scale 80 Grid (50,50) AutoNumbered */ block type EnvCrossing; /* CIF Gate (250,375),(100,375) */ /* CIF TextPosition (200,325) */ /* CIF TextPosition (50,400) SignalList1 */ gate oi in with (Env_ Crossing_ Inp); /* CIF CurrentPage 1 */ /* CIF Text (500,600),(200,100) */ /* Signals to subobjects via a */ SIGNALLIST ai2 = (EnvGateInp) ; /* */ SIGNALLIST ai3 = (EnvTrackInp) ; /* */ SIGNALLIST ai4 = (EnvRoadInp) ; /* */ /* CIF End Text */ /* CIF Text (500,800),(200,100) */ /* Signals from subobjects via b */ SIGNALLIST bi2 = (EnvGateOutp); /* */ /*RR SIGNALLIST bi3 = (EnvTrackOutp); *//* */ /*RR SIGNALLIST bi4 = (EnvRoadOutp); RR*//* */ /* CIF End Text */ /* CIF SubstructureDiagram Invisible */ substructure EnvCrossing; /* CIF CurrentPage 2 */ /* CIF Channel (250,375),(650,375) */ /* CIF TextPosition (272,324) */ /* CIF TextPosition (350,400) SignalList1 */ /* CIF Arrow1Position (350,375) */ channel oi from env via oi to EnvCrossingCtrl with (EnvCrossingInp); endchannel oi; /* CIF Channel (650,475),(275,475),(275,1200),(650,1200) */ /* CIF TextPosition (300,1150) */ /* CIF TextPosition (441,1225) SignalList1 */ /* CIF Arrow1Position (560,1200) */ channel a.i3 from EnvCrossingCtrl to tracks via oi with (ai3); endchannel a.i3; /* CIF Channel (650,475),(275,475),(275,1050),(650,1050) */ /* CIF TextPosition (300,1000) */ /* CIF TextPosition (441,1075) SignalList1 */ /* CIF Arrow1Position (560,1050) */ channel a.i2 from EnvCrossingCtrl to gate1 via oi with (ai2); endchannel a.i2; /* CIF Channel (650,475),(275,475),(275,1350),(650,1350) */ /* CIF TextPosition (300,1300) */ /* CIF TextPosition (441,1375) SignalList1 */ /* CIF Arrow1Position (560,1350) */ channel a.i4 from EnvCrossingCtrl to road1 via oi with (ai4); endchannel a.i4; /* CIF Channel (1200,1050),(1625,1050),(1625,475),(1300,475) */ /* CIF TextPosition (1229,1000) */ /* CIF TextPosition (1475,1075) SignalList1 */ /* CIF Arrow1Position (1381,475) */ channel b.i2 from gate1 via oo to EnvCrossingCtrl with (bi2); endchannel b.i2; /* CIF Block (650,350),(650,150) */ /* CIF TextPosition (725,400) */ block EnvCrossingCtrl referenced; /* CIF Block (650,1000),(550,100) */ /* CIF TextPosition (725,1025) */ /* CIF GateReference (650,1050) */ /* CIF TextPosition (675,1025) */ /* CIF GateReference (1200,1050) */ /* CIF TextPosition (1150,1025) */ block gate1:EnvGate; /* CIF Block (650,1150),(550,100) */ /* CIF TextPosition (725,1175) */ /* CIF GateReference (650,1200) */ /* CIF TextPosition (675,1175) */ block tracks:EnvTrack; /* CIF Block (650,1300),(550,100) */ /* CIF TextPosition (725,1325) */ /* CIF GateReference (650,1350) */ /* CIF TextPosition (675,1325) */ block road1:EnvRoad; /* CIF End SubstructureDiagram */ endsubstructure EnvCrossing; /* CIF End BlockTypeDiagram */ endblock type EnvCrossing; /* CIF BlockDiagram */ /* CIF Page 1 (1900,2100) */ /* CIF Frame (150,150),(1600,1700) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\EnvCrossing\EnvCrossingCtrl.sbk' */ /* CIF Specific SDT Page 1 Scale 80 Grid (50,50) AutoNumbered */ Block EnvCrossingCtrl; /* CIF CurrentPage 1 */ /* CIF Text (500,250),(200,100) */ SIGNALLIST aOut=(ai2),(ai3),(ai4); SIGNALLIST bIn=(bi2); /* CIF End Text */ /* CIF SignalRoute (150,700),(650,700) */ /* CIF TextPosition (175,650) */ /* CIF TextPosition (175,725) SignalList1 */ signalroute oi from env to EnvCrossingCtrl with (EnvCrossingInp); /* CIF SignalRoute (1750,700),(1250,700) */ /* CIF TextPosition (1500,650) */ /* CIF TextPosition (1275,725) SignalList1 */ signalroute b from env to EnvCrossingCtrl with (bIn); /* CIF SignalRoute (650,850),(150,850) */ /* CIF TextPosition (425,800) */ /* CIF TextPosition (400,875) SignalList1 */ signalroute a from EnvCrossingCtrl to env with (aOut); /* CIF Process (650,650),(600,250) */ /* CIF TextPosition (675,750) */ process EnvCrossingCtrl referenced; /* CIF Connect */ /* CIF TextPosition (75,675) */ connect oi and oi; /* CIF Connect */ /* CIF TextPosition (50,800) */ connect a.i2, a.i3, a.i4 and a; /* CIF Connect */ /* CIF TextPosition (1775,625) */ connect b.i2 and b; /* CIF End BlockDiagram */ endblock EnvCrossingCtrl; /* CIF ProcessDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Page 2 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Page 3 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Page 4 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Page 5 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\EnvCrossing\EnvCrossingCtrl.spr' */ /* CIF Specific SDT Page 1 Scale 100 Grid (250,150) AutoNumbered */ /* CIF Specific SDT Page 2 Scale 100 Grid (250,150) AutoNumbered */ /* CIF Specific SDT Page 3 Scale 100 Grid (250,150) AutoNumbered */ /* CIF Specific SDT Page 4 Scale 100 Grid (250,150) AutoNumbered */ /* CIF Specific SDT Page 5 Scale 100 Grid (250,150) AutoNumbered */ process EnvCrossingCtrl; /* CIF DefaultSize (200,100) */ /* CIF CurrentPage 1 */ /* CIF Text (550,100) */ DCL instName Charstring; DCL t1 CharString; /* CIF End Text */ /* CIF CurrentPage 2 */ /* CIF Text (1300,100) */ DCL td TrackDurationType; DCL perToCreTrains Duration; DCL curTrackNbr Integer := 1; DCL i Integer; DCL nbr Integer; DCL perToCreCars Duration := 5; DCL perToDecrCars Duration := 3; /* CIF End Text */ /* CIF CurrentPage 3 */ /* CIF Text (300,100) */ /* EnvCrossingTask1 */ /* CIF End Text */ /* CIF Text (800,100) */ DCL gateState GateStateType; /* CIF End Text */ /* CIF CurrentPage 5 */ /* CIF Text (300,100) */ DCL trackName Charstring; /* CIF End Text */ /* CIF CurrentPage 1 */ /* CIF Start (300,400) */ start ; /* CIF Line (400,500),(400,550) */ /* CIF NextState (300,550) */ nextstate Init; /* CIF State (300,550) */ state Init; /* CIF Line (400,650),(400,700) */ /* CIF Input (300,700) Right */ input go (instName); /* CIF Line (400,800),(400,850) */ /* CIF ProcedureCall (300,850) */ call announceInstance (self, instName); /* CIF Line (400,950),(400,1000) */ /* CIF Output (300,1000) Right */ output go ('gate1'//instName) via a.i2; /* CIF Line (400,1100),(400,1150) */ /* CIF Output (300,1150) Right */ output go ('road1'//instName) via a.i4; /* CIF Line (400,1250),(400,1300) */ /* CIF NextState (300,1300) */ nextstate init; /* CIF End State */ endstate; /* CIF CurrentPage 2 */ /* CIF State (300,400) */ state init; /* CIF Line (400,500),(400,550) */ /* CIF Input (300,550) Right */ input initTracks (nbr, td, perToCreTrains); /* CIF Line (400,650),(400,700) */ /* CIF Extendedtask (300,700) */ task {i := 1;}; /* CIF Line (400,800),(400,850) */ /* CIF Label Invisible */ grst42: /* CIF Decision (300,850) */ decision i > nbr; /* CIF Answer InvisibleBrackets */ /* CIF Line (400,950),(400,1000) */ /* CIF TextPosition (425,950) */ (false): /* CIF Task (300,1000) */ task t1 := 'track'//(call integerToStr(curTrackNbr))// instName; /* CIF Line (400,1100),(400,1150) */ /* CIF Output (300,1150) Right */ output go(t1) via a.i3; /* CIF Line (400,1250),(400,1300) */ /* CIF Output (300,1300) Right */ output initTrack(t1, td, perToCreTrains) via a.i3; /* CIF Line (400,1400),(400,1450) */ /* CIF Extendedtask (300,1450) */ task {curTrackNbr := curTrackNbr + 1; i := i + 1;}; /* CIF Line (400,1550),(400,1575),(75,1575),(75,825),(400,825),(400,850) */ /* CIF Answer Right InvisibleBrackets */ /* CIF Line (500,900),(650,900),(650,1600) */ /* CIF TextPosition (675,925) */ (true): /* CIF NextState (550,1600) */ nextstate init; /* CIF End Decision */ enddecision; /* CIF Join Invisible */ join grst42; /* CIF End State */ endstate; /* CIF State (800,400) */ state init; /* CIF Line (900,500),(900,550) */ /* CIF Input (800,550) Right */ input initTracksDone; /* CIF Line (900,650),(900,700) */ /* CIF Output (800,700) Right */ output getGateState via a.i2 /* CIF Comment (1300,700) Right */ /* CIF Line (1300,750),(1000,750) Dashed */ comment 'reception of newGateState is end of initialization for EnvCrossingCtrl' ; /* CIF Line (900,800),(900,850) */ /* CIF Output (800,850) Right */ output setDecrPer(perToDecrCars) via a.i4; /* CIF Line (900,950),(900,1000) */ /* CIF Output (800,1000) Right */ output setPeriod(perToCreCars) via a.i4 /* CIF Comment (1050,1450) Right */ /* CIF Line (1050,1500),(1025,1500),(1025,1050),(1000,1050) Dashed */ comment 'starts the creation of cars' ; /* CIF Line (900,1100),(900,1150) */ /* CIF NextState (800,1150) */ nextstate init; /* CIF End State */ endstate; /* CIF CurrentPage 3 */ /* CIF State (50,250) */ state init; /* CIF Line (150,350),(150,400) */ /* CIF Input (50,400) Right */ input newGateState (gateState); /* CIF Line (150,500),(150,550) */ /* CIF Decision (50,550) */ decision gateState; /* CIF Answer InvisibleBrackets */ /* CIF Line (150,650),(150,700) */ /* CIF TextPosition (175,675) */ (opened): /* CIF Output (50,700) Right */ output gateOpened via a.i4; /* CIF Line (150,800),(150,850) */ /* CIF NextState (50,850) */ nextstate opened; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (250,600),(400,600),(400,700) */ /* CIF TextPosition (425,625) */ (closed): /* CIF Output (300,700) Right */ output gateClosed via a.i4; /* CIF Line (400,800),(400,850) */ /* CIF NextState (300,850) */ nextstate closed; /* CIF End Decision */ enddecision; /* CIF End State */ endstate; /* CIF State (800,250) */ state closed; /* CIF Line (900,350),(900,400) */ /* CIF Input (800,400) Right */ input newGateState (gateState); /* CIF Line (900,500),(900,550) */ /* CIF Decision (800,550) */ decision gateState; /* CIF Answer InvisibleBrackets */ /* CIF Line (900,650),(900,700) */ /* CIF TextPosition (925,675) */ (opened): /* CIF Output (800,700) Right */ output gateOpened via a.i4; /* CIF Line (900,800),(900,850) */ /* CIF NextState (800,850) */ nextstate opened; /* CIF Answer Right */ /* CIF Line (1000,600),(1150,600),(1150,700) */ /* CIF TextPosition (1175,625) */ else: /* CIF NextState (1050,700) */ nextstate closed; /* CIF End Decision */ enddecision; /* CIF End State */ endstate; /* CIF State (800,1000) */ state opened; /* CIF Line (900,1100),(900,1150) */ /* CIF Input (800,1150) Right */ input newGateState (gateState); /* CIF Line (900,1250),(900,1300) */ /* CIF Decision (800,1300) */ decision gateState; /* CIF Answer InvisibleBrackets */ /* CIF Line (900,1400),(900,1450) */ /* CIF TextPosition (925,1425) */ (closed): /* CIF Output (800,1450) Right */ output gateClosed via a.i4; /* CIF Line (900,1550),(900,1600) */ /* CIF NextState (800,1600) */ nextstate closed; /* CIF Answer Right */ /* CIF Line (1000,1350),(1150,1350),(1150,1450) */ /* CIF TextPosition (1175,1375) */ else: /* CIF NextState (1050,1450) */ nextstate opened; /* CIF End Decision */ enddecision; /* CIF End State */ endstate; /* CIF CurrentPage 4 */ /* CIF State (300,250) */ state init; /* CIF Line (400,350),(400,400) */ /* CIF Input (300,400) Right */ input setPeriod (perToCreCars) ; /* CIF Line (400,500),(400,550) */ /* CIF Output (300,550) Right */ output setPeriod (perToCreCars) via a.i4; /* CIF Line (400,650),(400,700) */ /* CIF NextState (300,700) */ nextstate -; /* CIF End State */ endstate; /* CIF State (800,250) */ state *; /* CIF Line (900,350),(900,400) */ /* CIF Input (800,400) Right */ input setDecrPer (perToDecrCars) ; /* CIF Line (900,500),(900,550) */ /* CIF Output (800,550) Right */ output setDecrPer (perToDecrCars) via a.i4; /* CIF Line (900,650),(900,700) */ /* CIF NextState (800,700) */ nextstate -; /* CIF End State */ endstate; /* CIF State (300,850) */ state * (Init); /* CIF Line (400,950),(400,1000) */ /* CIF Input (300,1000) Right */ input setPeriod (perToCreCars); /* CIF Line (400,1100),(400,1150) */ /* CIF Output (300,1150) Right */ output setPeriod (perToCreCars) via a.i4; /* CIF Line (400,1250),(400,1300) */ /* CIF NextState (300,1300) */ nextstate -; /* CIF End State */ endstate; /* CIF State (800,850) */ state * (Init); /* CIF Line (900,950),(900,1000) */ /* CIF Input (800,1000) Right */ input genCars(nbr); /* CIF Line (900,1100),(900,1150) */ /* CIF Output (800,1150) Right */ output genCars(nbr) via a.i4; /* CIF Line (900,1250),(900,1300) */ /* CIF NextState (800,1300) */ nextstate -; /* CIF End State */ endstate; /* CIF CurrentPage 5 */ /* CIF State (300,250) */ state *; /* CIF Line (400,350),(400,400) */ /* CIF Input (300,400) Right */ input setPerToCreTrain (trackName, perToCreTrains); /* CIF Line (400,500),(400,550) */ /* CIF Output (300,550) Right */ output setPerToCreTrain (trackName, perToCreTrains) via a.i3; /* CIF Line (400,650),(400,700) */ /* CIF NextState (300,700) */ nextstate -; /* CIF End State */ endstate; /* CIF State (800,250) */ state *; /* CIF Line (900,350),(900,400) */ /* CIF Input (800,400) Right */ input creNewTrain (trackName); /* CIF Line (900,500),(900,550) */ /* CIF Output (800,550) Right */ output creNewTrain (trackName) via a.i3; /* CIF Line (900,650),(900,700) */ /* CIF NextState (800,700) */ nextstate -; /* CIF End State */ endstate; /* CIF End ProcessDiagram */ endprocess EnvCrossingCtrl; /* CIF PackageDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (150,150),(1600,2000) */ /* CIF PackageReference (175,25),(200,100) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\RoadCtrl\RoadCtrl.sun' */ /* CIF Specific SDT Page 1 Scale 100 Grid (50,50) AutoNumbered */ USE Utils; USE Project; Package RoadCtrl; /* CIF CurrentPage 1 */ /* CIF Text (600,550),(200,100) */ SIGNALLIST RoadCtrlInp = go; SIGNALLIST RoadCtrlOutp = newCars; /* CIF End Text */ /* CIF BlockType (250,500),(300,200) */ /* CIF TextPosition (275,575) */ block type RoadCtrl referenced; /* CIF End PackageDiagram */ endpackage RoadCtrl; /* CIF BlockTypeDiagram */ /* CIF BlockPage 1 (1900,2100) */ /* CIF Frame (250,100),(1400,1950) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\RoadCtrl\RoadCtrl.sbt' */ /* CIF Specific SDT Page 1 Scale 80 Grid (50,50) AutoNumbered */ Block Type RoadCtrl; /* CIF Gate (250,375),(100,375) */ /* CIF TextPosition (200,325) */ /* CIF TextPosition (125,400) SignalList1 */ gate oi in with (RoadCtrlInp); /* CIF Gate (1650,375),(1800,375) */ /* CIF TextPosition (1675,325) */ /* CIF TextPosition (1600,400) SignalList1 */ gate oo out with (RoadCtrlOutp); /* CIF SubstructureDiagram Invisible */ substructure RoadCtrl; /* CIF CurrentPage 1 */ /* CIF Channel (250,375),(650,375) */ /* CIF TextPosition (272,324) */ /* CIF TextPosition (400,400) SignalList1 */ /* CIF Arrow1Position (350,375) */ channel oi from env via oi to RoadCtrlCtrl with (RoadCtrlInp); endchannel oi; /* CIF Channel (1300,375),(1650,375) */ /* CIF TextPosition (1575,325) */ /* CIF TextPosition (1325,400) SignalList1 */ /* CIF Arrow1Position (1562,375) */ channel oo from RoadCtrlCtrl to env via oo with (RoadCtrlOutp); endchannel oo; /* CIF Block (650,350),(650,150) */ /* CIF TextPosition (725,400) */ block RoadCtrlCtrl referenced; /* CIF End SubstructureDiagram */ endsubstructure RoadCtrl; /* CIF End BlockTypeDiagram */ endblock type RoadCtrl; /* CIF BlockDiagram */ /* CIF Page 1 (1900,2100) */ /* CIF Frame (100,150),(1650,1650) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\RoadCtrl\RoadCtrlCtrl.sbk' */ /* CIF Specific SDT Page 1 Scale 80 Grid (50,50) AutoNumbered */ Block RoadCtrlCtrl; /* CIF CurrentPage 1 */ /* CIF SignalRoute (100,700),(650,700) */ /* CIF TextPosition (128,650) */ /* CIF TextPosition (175,725) SignalList1 */ signalroute oi from env to RoadCtrlCtrl with (RoadCtrlInp); /* CIF SignalRoute (1250,775),(1750,775) */ /* CIF TextPosition (1675,770) */ /* CIF TextPosition (1275,800) SignalList1 */ signalroute oo from RoadCtrlCtrl to env with (RoadCtrlOutp); /* CIF Process (650,650),(600,250) */ /* CIF TextPosition (675,750) */ process RoadCtrlCtrl referenced; /* CIF Connect */ /* CIF TextPosition (25,675) */ connect oi and oi; /* CIF Connect */ /* CIF TextPosition (1775,750) */ connect oo and oo; /* CIF End BlockDiagram */ endblock RoadCtrlCtrl; /* CIF ProcessDiagram */ /* CIF Page 1 (1700,1700) */ /* CIF Frame (0,0),(1700,1700) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\RoadCtrl\RoadCtrlCtrl.spr' */ /* CIF Specific SDT Page 1 Scale 100 Grid (250,150) AutoNumbered */ Process RoadCtrlCtrl; /* CIF DefaultSize (200,100) */ /* CIF Text (700,100) */ DCL instName Charstring; /*RR DCL ts, ts1 CharString; RR*/ /* CIF End Text */ /* CIF Text (800,250) */ DCL newCarsInVal Boolean; /* CIF End Text */ /* CIF Procedure (1050,400),(300,150) */ /* CIF TextPosition (1112,437) */ EXPORTED procedure setPhysVal referenced; /* CIF CurrentPage 1 */ /* CIF Start (50,250) */ start ; /* CIF Line (150,350),(150,400) */ /* CIF NextState (50,400) */ nextstate Init; /* CIF State (50,400) */ state Init; /* CIF Line (150,500),(150,550) */ /* CIF Input (50,550) Right */ input go (instName); /* CIF Line (150,650),(150,700) */ /* CIF ProcedureCall (50,700) */ call announceInstance (self, instName); /* CIF Line (150,800),(150,850) */ /* CIF NextState (50,850) */ nextstate idle; /* CIF End State */ endstate; /* CIF State (550,400) */ state idle; /* CIF Line (650,500),(650,550) */ /* CIF Input (550,550) Right */ input setPhysVal; /* CIF Line (650,650),(650,850) */ /* CIF Output (550,850) Right */ output newCars (newCarsInVal) via oo; /* CIF Line (650,950),(650,1000) */ /* CIF NextState (550,1000) */ nextstate idle; /* CIF End State */ endstate; /* CIF End ProcessDiagram */ endprocess RoadCtrlCtrl; /* CIF ProcedureDiagram */ /* CIF Page 1 (1900,2000) */ /* CIF Frame (0,0),(1900,1750) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\RoadCtrl\setPhysVal1.spd' */ /* CIF Specific SDT Page 1 Scale 100 Grid (250,150) AutoNumbered */ Procedure setPhysVal ;FPAR IN newValue CharString; /* CIF DefaultSize (200,100) */ /* CIF Text (800,250) */ DCL r Real; /* CIF End Text */ /* CIF CurrentPage 1 */ /* CIF ProcedureStart (300,250) */ start ; /* CIF Line (400,350),(400,400) */ /* CIF Task (300,400) */ task r:= call toReal (newValue); /* CIF Line (400,500),(400,550) */ /* CIF ProcedureCall (300,550) */ call printIt (instName//': '// newValue, NOW); /* CIF Line (400,650),(400,700) */ /* CIF Decision (300,700) */ decision r=1; /* CIF Answer InvisibleBrackets */ /* CIF Line (400,800),(400,850) */ /* CIF TextPosition (425,825) */ (true): /* CIF Task (300,850) */ task newCarsInVal := true; /* CIF Line (400,950),(400,1000) */ /* CIF Answer Right */ /* CIF Line (500,750),(650,750),(650,850) */ /* CIF TextPosition (675,775) */ else: /* CIF Task (550,850) */ task newCarsInVal := false; /* CIF Line (650,950),(650,975),(400,975),(400,1000) */ /* CIF End Decision */ enddecision; /* CIF Return (350,1000),(100,100) */ return ; /* CIF End ProcedureDiagram */ endprocedure setPhysVal; /* CIF PackageDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (150,150),(1600,2000) */ /* CIF PackageReference (175,25),(200,100) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\SignalCtrl\SignalCtrl.sun' */ /* CIF Specific SDT Page 1 Scale 100 Grid (50,50) AutoNumbered */ USE Utils; USE Project; Package SignalCtrl; /* CIF CurrentPage 1 */ /* CIF Text (600,550),(200,100) */ SIGNALLIST SignalCtrlInp = go, getSignalState, setSignalState; SIGNALLIST SignalCtrlOutp = newSignalState; /* CIF End Text */ /* CIF BlockType (250,500),(300,200) */ /* CIF TextPosition (275,575) */ block type SignalCtrl referenced; /* CIF End PackageDiagram */ endpackage SignalCtrl; /* CIF BlockTypeDiagram */ /* CIF BlockPage 1 (1900,2100) */ /* CIF Frame (250,100),(1400,1950) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\SignalCtrl\SignalCtrl.sbt' */ /* CIF Specific SDT Page 1 Scale 80 Grid (50,50) AutoNumbered */ Block Type SignalCtrl; /* CIF Gate (250,375),(100,375) */ /* CIF TextPosition (200,325) */ /* CIF TextPosition (125,400) SignalList1 */ gate oi in with (SignalCtrlInp); /* CIF Gate (1650,375),(1800,375) */ /* CIF TextPosition (1675,325) */ /* CIF TextPosition (1675,400) SignalList1 */ gate oo out with (SignalCtrlOutp); /* CIF SubstructureDiagram Invisible */ substructure SignalCtrl; /* CIF CurrentPage 1 */ /* CIF Channel (250,375),(650,375) */ /* CIF TextPosition (272,324) */ /* CIF TextPosition (400,400) SignalList1 */ /* CIF Arrow1Position (350,375) */ channel oi from env via oi to SignalCtrlCtrl with (SignalCtrlInp); endchannel oi; /* CIF Channel (1300,375),(1650,375) */ /* CIF TextPosition (1575,325) */ /* CIF TextPosition (1325,400) SignalList1 */ /* CIF Arrow1Position (1562,375) */ channel oo from SignalCtrlCtrl to env via oo with (SignalCtrlOutp); endchannel oo; /* CIF Block (650,350),(650,150) */ /* CIF TextPosition (725,400) */ block SignalCtrlCtrl referenced; /* CIF End SubstructureDiagram */ endsubstructure SignalCtrl; /* CIF End BlockTypeDiagram */ endblock type SignalCtrl; /* CIF BlockDiagram */ /* CIF Page 1 (1900,2100) */ /* CIF Frame (100,150),(1650,1650) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\SignalCtrl\SignalCtrlCtrl.sbk' */ /* CIF Specific SDT Page 1 Scale 80 Grid (50,50) AutoNumbered */ Block SignalCtrlCtrl; /* CIF CurrentPage 1 */ /* CIF SignalRoute (100,700),(650,700) */ /* CIF TextPosition (128,650) */ /* CIF TextPosition (175,725) SignalList1 */ signalroute oi from env to SignalCtrlMasterCtrl with (SignalCtrlInp); /* CIF SignalRoute (950,900),(950,1250) */ /* CIF TextPosition (975,1000) */ /* CIF TextPosition (975,1175) SignalList1 */ signalroute mo from SignalCtrlMasterCtrl to SignalCtrlCtrl with (SignalCtrlInp); /* CIF SignalRoute (1250,1350),(1750,1350) */ /* CIF TextPosition (1675,1338) */ /* CIF TextPosition (1275,1375) SignalList1 */ signalroute oo from SignalCtrlCtrl to env with (SignalCtrlOutp); /* CIF Process (650,650),(600,250) */ /* CIF TextPosition (675,750) */ process SignalCtrlMasterCtrl(1,1) referenced; /* CIF Process (650,1250),(600,200) */ /* CIF TextPosition (750,1325) */ process SignalCtrlCtrl (0, ) referenced; /* CIF Connect */ /* CIF TextPosition (25,675) */ connect oi and oi; /* CIF Connect */ /* CIF TextPosition (1775,1325) */ connect oo and oo; /* CIF End BlockDiagram */ endblock SignalCtrlCtrl; /* CIF ProcessDiagram */ /* CIF Page 1 (1700,1700) */ /* CIF Frame (0,0),(1700,1700) */ /* CIF Page 2 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\SignalCtrl\SignalCtrlMasterCtrl.spr' */ /* CIF Specific SDT Page 1 Scale 100 Grid (250,150) AutoNumbered */ /* CIF Specific SDT Page 2 Scale 100 Grid (250,150) AutoNumbered */ Process SignalCtrlMasterCtrl; /* CIF DefaultSize (200,100) */ /* CIF CurrentPage 1 */ /* CIF Text (700,100) */ DCL instName Charstring; /*RR DCL ts, ts1 CharString; RR*/ /* CIF End Text */ /* CIF CurrentPage 2 */ /* CIF Text (550,100) */ DCL t1 CharString; DCL instPID PID; DCL sigState SignalStateType; /* CIF End Text */ /* CIF CurrentPage 1 */ /* CIF Start (50,250) */ start ; /* CIF Line (150,350),(150,400) */ /* CIF NextState (50,400) */ nextstate main; /* CIF State (50,400) */ state main; /* CIF Line (150,500),(150,550) */ /* CIF Input (50,550) Right */ input go (instName); /* CIF Line (150,650),(150,700) */ /* CIF Create (50,700) */ create SignalCtrlCtrl; /* CIF Line (150,800),(150,850) */ /* CIF Decision (50,850) */ decision offspring; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (250,900),(650,900),(650,1000) */ /* CIF TextPosition (675,925) */ (null): /* CIF ProcedureCall (550,1000) */ call printIt(instName//' ERROR: '// 'cannot dynamically create process', NOW); /* CIF Line (650,1100),(650,1150) */ /* CIF NextState (550,1150) */ nextstate main; /* CIF Answer */ /* CIF Line (150,950),(150,1000) */ /* CIF TextPosition (175,975) */ else: /* CIF Output (50,1000) Right */ output go(instName) to offspring; /* CIF Line (150,1100),(150,1150) */ /* CIF ProcedureCall (50,1150) */ call announceInstance (offspring, instName); /* CIF Line (150,1250),(150,1300) */ /* CIF NextState (50,1300) */ nextstate main; /* CIF End Decision */ enddecision; /* CIF End State */ endstate; /* CIF CurrentPage 2 */ /* CIF State (50,250) */ state main; /* CIF Line (150,350),(150,400) */ /* CIF Input (50,400) Right */ input setSignalState (t1, sigState); /* CIF Line (150,500),(150,550) */ /* CIF Task (50,550) */ task instPID := call getPID (t1); /* CIF Line (150,650),(150,700) */ /* CIF Decision (50,700) */ decision instPID; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (250,750),(650,750),(650,850) */ /* CIF TextPosition (675,775) */ (NULL): /* CIF ProcedureCall (550,850) */ call printIt(t1//' ERROR: '// 'no matching process instance found', NOW); /* CIF Line (650,950),(650,1000) */ /* CIF NextState (550,1000) */ nextstate main; /* CIF Answer */ /* CIF Line (150,800),(150,850) */ /* CIF TextPosition (175,825) */ else: /* CIF Output (50,850) Right */ output setSignalState (t1, sigState) to instPID; /* CIF Line (150,950),(150,1000) */ /* CIF NextState (50,1000) */ nextstate main; /* CIF End Decision */ enddecision; /* CIF End State */ endstate; /* CIF State (1050,250) */ state main; /* CIF Line (1150,350),(1150,400) */ /* CIF Input (1050,400) Right */ input getSignalState (t1); /* CIF Line (1150,500),(1150,550) */ /* CIF Task (1050,550) */ task instPID := call getPID (t1); /* CIF Line (1150,650),(1150,700) */ /* CIF Decision (1050,700) */ decision instPID; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (1250,750),(1650,750),(1650,850) */ /* CIF TextPosition (1675,775) */ (NULL): /* CIF ProcedureCall (1550,850) */ call printIt(t1//' ERROR: '// 'no matching process instance found', NOW); /* CIF Line (1650,950),(1650,1000) */ /* CIF NextState (1550,1000) */ nextstate main; /* CIF Answer */ /* CIF Line (1150,800),(1150,850) */ /* CIF TextPosition (1175,825) */ else: /* CIF Output (1050,850) Right */ output getSignalState (t1) to instPID; /* CIF Line (1150,950),(1150,1000) */ /* CIF NextState (1050,1000) */ nextstate main; /* CIF End Decision */ enddecision; /* CIF End State */ endstate; /* CIF End ProcessDiagram */ endprocess SignalCtrlMasterCtrl; /* CIF ProcessDiagram */ /* CIF Page 1 (1700,1700) */ /* CIF Frame (0,0),(1700,1700) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\SignalCtrl\SignalCtrlCtrl.spr' */ /* CIF Specific SDT Page 1 Scale 100 Grid (250,150) AutoNumbered */ Process SignalCtrlCtrl; /* CIF DefaultSize (200,100) */ /* CIF Text (700,100) */ DCL instName Charstring; DCL /*RR ts, RR*/ ts1 CharString; DCL newSigState SignalStateType; /* CIF End Text */ /* CIF CurrentPage 1 */ /* CIF Start (50,250) */ start ; /* CIF Line (150,350),(150,400) */ /* CIF NextState (50,400) */ nextstate Init; /* CIF State (50,400) */ state Init; /* CIF Line (150,500),(150,550) */ /* CIF Input (50,550) Right */ input go (instName); /* CIF Line (150,650),(150,850) */ /* CIF NextState (50,850) */ nextstate halt; /* CIF End State */ endstate; /* CIF State (550,400) */ state halt; /* CIF Line (650,500),(650,550) */ /* CIF Input (550,550) Right */ input setSignalState (ts1, newSigState); /* CIF Line (650,650),(650,700) */ /* CIF Decision (550,700) */ decision newSigState; /* CIF Answer InvisibleBrackets */ /* CIF Line (650,800),(650,850) */ /* CIF TextPosition (675,825) */ (go): /* CIF ProcedureCall (550,850) */ call putAnalogVal (instName, 1); /* CIF Line (650,950),(650,1150) */ /* CIF NextState (550,1150) */ nextstate go; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (750,750),(900,750),(900,850) */ /* CIF TextPosition (925,775) */ (halt): /* CIF ProcedureCall (800,850) */ call printIt ( 'ERROR1 in '//instname, NOW); /* CIF Line (900,950),(900,1000) */ /* CIF NextState (800,1000) */ nextstate halt; /* CIF End Decision */ enddecision; /* CIF End State */ endstate; /* CIF State (1050,400) */ state go; /* CIF Line (1150,500),(1150,550) */ /* CIF Input (1050,550) Right */ input setSignalState (ts1, newSigState); /* CIF Line (1150,650),(1150,700) */ /* CIF Decision (1050,700) */ decision newSigState; /* CIF Answer InvisibleBrackets */ /* CIF Line (1150,800),(1150,850) */ /* CIF TextPosition (1175,825) */ (halt): /* CIF ProcedureCall (1050,850) */ call putAnalogVal (instName, 0); /* CIF Line (1150,950),(1150,1150) */ /* CIF NextState (1050,1150) */ nextstate halt; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (1250,750),(1400,750),(1400,850) */ /* CIF TextPosition (1425,775) */ (go): /* CIF ProcedureCall (1300,850) */ call printIt ( 'ERROR2 in '//instname, NOW); /* CIF Line (1400,950),(1400,1000) */ /* CIF NextState (1300,1000) */ nextstate go; /* CIF End Decision */ enddecision; /* CIF End State */ endstate; /* CIF State (50,1000) */ state halt; /* CIF Line (150,1100),(150,1150) */ /* CIF Input (50,1150) Right */ input getSignalState (ts1); /* CIF Line (150,1250),(150,1300) */ /* CIF Output (50,1300) Right */ output newSignalState (ts1, halt); /* CIF Line (150,1400),(150,1450) */ /* CIF NextState (50,1450) */ nextstate halt; /* CIF End State */ endstate; /* CIF State (300,1000) */ state go; /* CIF Line (400,1100),(400,1150) */ /* CIF Input (300,1150) Right */ input getSignalState (ts1); /* CIF Line (400,1250),(400,1300) */ /* CIF Output (300,1300) Right */ output newSignalState (ts1, go); /* CIF Line (400,1400),(400,1450) */ /* CIF NextState (300,1450) */ nextstate go; /* CIF End State */ endstate; /* CIF End ProcessDiagram */ endprocess SignalCtrlCtrl; /* CIF PackageDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (150,150),(1600,2000) */ /* CIF PackageReference (175,25),(200,100) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\Gatectrl\GateCtrl.sun' */ /* CIF Specific SDT Page 1 Scale 100 Grid (50,50) AutoNumbered */ USE Utils; USE Project; Package GateCtrl; /* CIF CurrentPage 1 */ /* CIF Text (600,550),(200,100) */ SIGNALLIST GateCtrlInp = go, setGate; /*RR SIGNALLIST GateCtrlOutp = dummy; RR*/ /* CIF End Text */ /* CIF BlockType (250,500),(300,200) */ /* CIF TextPosition (275,575) */ block type GateCtrl referenced; /* CIF End PackageDiagram */ endpackage GateCtrl; /* CIF BlockTypeDiagram */ /* CIF BlockPage 1 (1900,2100) */ /* CIF Frame (250,100),(1400,1950) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\Gatectrl\GateCtrl.sbt' */ /* CIF Specific SDT Page 1 Scale 80 Grid (50,50) AutoNumbered */ Block Type GateCtrl; /* CIF Gate (250,375),(100,375) */ /* CIF TextPosition (200,325) */ /* CIF TextPosition (125,400) SignalList1 */ gate oi in with (GateCtrlInp); /* CIF SubstructureDiagram Invisible */ substructure GateCtrl; /* CIF CurrentPage 1 */ /* CIF Channel (250,375),(650,375) */ /* CIF TextPosition (272,324) */ /* CIF TextPosition (375,400) SignalList1 */ /* CIF Arrow1Position (350,375) */ channel oi from env via oi to GateCtrlCtrl with (GateCtrlInp); endchannel oi; /* CIF Block (650,350),(650,150) */ /* CIF TextPosition (725,400) */ block GateCtrlCtrl referenced; /* CIF End SubstructureDiagram */ endsubstructure GateCtrl; /* CIF End BlockTypeDiagram */ endblock type GateCtrl; /* CIF BlockDiagram */ /* CIF Page 1 (1900,2100) */ /* CIF Frame (150,150),(1600,1100) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\Gatectrl\GateCtrlCtrl.sbk' */ /* CIF Specific SDT Page 1 Scale 80 Grid (50,50) AutoNumbered */ Block GateCtrlCtrl; /* CIF CurrentPage 1 */ /* CIF SignalRoute (150,700),(650,700) */ /* CIF TextPosition (175,650) */ /* CIF TextPosition (175,725) SignalList1 */ signalroute oi from env to GateCtrlCtrl with (GateCtrlInp); /* CIF Process (650,650),(600,250) */ /* CIF TextPosition (675,750) */ process GateCtrlCtrl referenced; /* CIF Connect */ /* CIF TextPosition (75,675) */ connect oi and oi; /* CIF End BlockDiagram */ endblock GateCtrlCtrl; /* CIF ProcessDiagram */ /* CIF Page 1 (1700,1700) */ /* CIF Frame (0,0),(1700,1700) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\Gatectrl\GateCtrlCtrl.spr' */ /* CIF Specific SDT Page 1 Scale 100 Grid (250,150) AutoNumbered */ Process GateCtrlCtrl; /* CIF DefaultSize (200,100) */ /* CIF Text (700,100) */ DCL instName Charstring; DCL newState GateStateType; /* CIF End Text */ /* CIF CurrentPage 1 */ /* CIF Start (50,250) */ start ; /* CIF Line (150,350),(150,400) */ /* CIF NextState (50,400) */ nextstate Init; /* CIF State (50,400) */ state Init; /* CIF Line (150,500),(150,550) */ /* CIF Input (50,550) Right */ input go (instName); /* CIF Line (150,650),(150,700) */ /* CIF ProcedureCall (50,700) */ call announceInstance (self, instName); /* CIF Line (150,800),(150,850) */ /* CIF NextState (50,850) */ nextstate closed; /* CIF End State */ endstate; /* CIF State (550,400) */ state closed; /* CIF Line (650,500),(650,550) */ /* CIF Input (550,550) Right */ input setGate (newState); /* CIF Line (650,650),(650,700) */ /* CIF Decision (550,700) */ decision newState; /* CIF Answer InvisibleBrackets */ /* CIF Line (650,800),(650,850) */ /* CIF TextPosition (675,825) */ (opened): /* CIF ProcedureCall (550,850) */ call putAnalogVal (instName, 1); /* CIF Line (650,950),(650,1000) */ /* CIF NextState (550,1000) */ nextstate opened; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (750,750),(900,750),(900,850) */ /* CIF TextPosition (925,775) */ (closed): /* CIF ProcedureCall (800,850) */ call printIt (instName // ' ERROR1', NOW); /* CIF Line (900,950),(900,1000) */ /* CIF NextState (800,1000) */ nextstate closed; /* CIF End Decision */ enddecision; /* CIF End State */ endstate; /* CIF State (1050,400) */ state opened; /* CIF Line (1150,500),(1150,550) */ /* CIF Input (1050,550) Right */ input setGate (newState); /* CIF Line (1150,650),(1150,700) */ /* CIF Decision (1050,700) */ decision newState; /* CIF Answer InvisibleBrackets */ /* CIF Line (1150,800),(1150,850) */ /* CIF TextPosition (1175,825) */ (closed): /* CIF ProcedureCall (1050,850) */ call putAnalogVal (instName, 0); /* CIF Line (1150,950),(1150,1000) */ /* CIF NextState (1050,1000) */ nextstate closed; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (1250,750),(1400,750),(1400,850) */ /* CIF TextPosition (1425,775) */ (opened): /* CIF ProcedureCall (1300,850) */ call printIt (instName // ' ERROR2', NOW); /* CIF Line (1400,950),(1400,1000) */ /* CIF NextState (1300,1000) */ nextstate opened; /* CIF End Decision */ enddecision; /* CIF End State */ endstate; /* CIF End ProcessDiagram */ endprocess GateCtrlCtrl; /* CIF PackageDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (150,150),(1600,2000) */ /* CIF PackageReference (175,25),(200,100) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\TrainSensCtrl\TrainSensCtrl.sun' */ /* CIF Specific SDT Page 1 Scale 100 Grid (50,50) AutoNumbered */ USE Utils; USE Project; Package TrainSensCtrl; /* CIF CurrentPage 1 */ /* CIF Text (600,550),(200,100) */ SIGNALLIST TrainSensCtrlInp = go; SIGNALLIST TrainSensCtrlOutp = newTrain; /* CIF End Text */ /* CIF BlockType (250,500),(300,200) */ /* CIF TextPosition (275,575) */ block type TrainSensCtrl referenced; /* CIF End PackageDiagram */ endpackage TrainSensCtrl; /* CIF BlockTypeDiagram */ /* CIF BlockPage 1 (1900,2100) */ /* CIF Frame (250,100),(1400,1950) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\TrainSensCtrl\TrainSensCtrl.sbt' */ /* CIF Specific SDT Page 1 Scale 80 Grid (50,50) AutoNumbered */ Block Type TrainSensCtrl; /* CIF Gate (250,375),(100,375) */ /* CIF TextPosition (200,325) */ /* CIF TextPosition (125,400) SignalList1 */ gate oi in with (TrainSensCtrlInp); /* CIF Gate (1650,375),(1800,375) */ /* CIF TextPosition (1675,325) */ /* CIF TextPosition (1600,400) SignalList1 */ gate oo out with (TrainSensCtrlOutp); /* CIF SubstructureDiagram Invisible */ substructure TrainSensCtrl; /* CIF CurrentPage 1 */ /* CIF Channel (250,375),(650,375) */ /* CIF TextPosition (272,324) */ /* CIF TextPosition (400,400) SignalList1 */ /* CIF Arrow1Position (350,375) */ channel oi from env via oi to TrainSensCtrlCtrl with (TrainSensCtrlInp); endchannel oi; /* CIF Channel (1300,375),(1650,375) */ /* CIF TextPosition (1575,325) */ /* CIF TextPosition (1325,400) SignalList1 */ /* CIF Arrow1Position (1562,375) */ channel oo from TrainSensCtrlCtrl to env via oo with (TrainSensCtrlOutp); endchannel oo; /* CIF Block (650,350),(650,150) */ /* CIF TextPosition (725,400) */ block TrainSensCtrlCtrl referenced; /* CIF End SubstructureDiagram */ endsubstructure TrainSensCtrl; /* CIF End BlockTypeDiagram */ endblock type TrainSensCtrl; /* CIF BlockDiagram */ /* CIF Page 1 (1900,2100) */ /* CIF Frame (100,150),(1650,1650) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\TrainSensCtrl\TrainSensCtrlCtrl.sbk' */ /* CIF Specific SDT Page 1 Scale 80 Grid (50,50) AutoNumbered */ Block TrainSensCtrlCtrl; /* CIF CurrentPage 1 */ /* CIF SignalRoute (100,700),(650,700) */ /* CIF TextPosition (128,650) */ /* CIF TextPosition (175,725) SignalList1 */ signalroute oi from env to TrainSensCtrlMasterCtrl with (TrainSensCtrlInp); /* CIF SignalRoute (950,900),(950,1250) */ /* CIF TextPosition (975,1000) */ /* CIF TextPosition (975,1175) SignalList1 */ signalroute mo from TrainSensCtrlMasterCtrl to TrainSensCtrlCtrl with (TrainSensCtrlInp); /* CIF SignalRoute (1250,1350),(1750,1350) */ /* CIF TextPosition (1675,1338) */ /* CIF TextPosition (1275,1375) SignalList1 */ signalroute oo from TrainSensCtrlCtrl to env with (TrainSensCtrlOutp); /* CIF Process (650,650),(600,250) */ /* CIF TextPosition (675,750) */ process TrainSensCtrlMasterCtrl(1,1) referenced; /* CIF Process (650,1250),(600,200) */ /* CIF TextPosition (750,1325) */ process TrainSensCtrlCtrl (0, ) referenced; /* CIF Connect */ /* CIF TextPosition (25,675) */ connect oi and oi; /* CIF Connect */ /* CIF TextPosition (1775,1325) */ connect oo and oo; /* CIF End BlockDiagram */ endblock TrainSensCtrlCtrl; /* CIF ProcessDiagram */ /* CIF Page 1 (1700,1700) */ /* CIF Frame (0,0),(1700,1700) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\TrainSensCtrl\TrainSensCtrlMasterCtrl.spr' */ /* CIF Specific SDT Page 1 Scale 100 Grid (250,150) AutoNumbered */ Process TrainSensCtrlMasterCtrl; /* CIF DefaultSize (200,100) */ /* CIF Text (700,100) */ DCL instName Charstring; /*RR DCL ts, ts1 CharString; RR*/ /* CIF End Text */ /* CIF CurrentPage 1 */ /* CIF Start (50,250) */ start ; /* CIF Line (150,350),(150,400) */ /* CIF NextState (50,400) */ nextstate main; /* CIF State (50,400) */ state main; /* CIF Line (150,500),(150,550) */ /* CIF Input (50,550) Right */ input go (instName); /* CIF Line (150,650),(150,700) */ /* CIF Create (50,700) */ create TrainSensCtrlCtrl; /* CIF Line (150,800),(150,850) */ /* CIF Decision (50,850) */ decision offspring; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (250,900),(650,900),(650,1000) */ /* CIF TextPosition (675,925) */ (null): /* CIF ProcedureCall (550,1000) */ call printIt(instName//' ERROR: '// 'cannot dynamically create process', NOW); /* CIF Line (650,1100),(650,1150) */ /* CIF NextState (550,1150) */ nextstate main; /* CIF Answer */ /* CIF Line (150,950),(150,1000) */ /* CIF TextPosition (175,975) */ else: /* CIF Output (50,1000) Right */ output go(instName) to offspring; /* CIF Line (150,1100),(150,1150) */ /* CIF ProcedureCall (50,1150) */ call announceInstance (offspring, instName); /* CIF Line (150,1250),(150,1300) */ /* CIF NextState (50,1300) */ nextstate main; /* CIF End Decision */ enddecision; /* CIF End State */ endstate; /* CIF End ProcessDiagram */ endprocess TrainSensCtrlMasterCtrl; /* CIF ProcessDiagram */ /* CIF Page 1 (1700,1700) */ /* CIF Frame (0,0),(1700,1700) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\TrainSensCtrl\TrainSensCtrlCtrl.spr' */ /* CIF Specific SDT Page 1 Scale 100 Grid (250,150) AutoNumbered */ Process TrainSensCtrlCtrl; /* CIF DefaultSize (200,100) */ /* CIF Text (700,100) */ DCL instName Charstring; /*RR DCL ts, ts1 CharString; RR*/ DCL wheelDelay Duration := 2; TIMER wheelT; /* CIF End Text */ /* CIF Procedure (1300,100),(300,150) */ /* CIF TextPosition (1362,137) */ EXPORTED procedure setPhysVal referenced; /* CIF CurrentPage 1 */ /* CIF Start (50,250) */ start ; /* CIF Line (150,350),(150,400) */ /* CIF NextState (50,400) */ nextstate Init; /* CIF State (50,400) */ state Init; /* CIF Line (150,500),(150,550) */ /* CIF Input (50,550) Right */ input go (instName); /* CIF Line (150,650),(150,850) */ /* CIF NextState (50,850) */ nextstate idle; /* CIF End State */ endstate; /* CIF State (550,400) */ state idle; /* CIF Line (650,500),(650,550) */ /* CIF Input (550,550) Right */ input setPhysVal; /* CIF Line (650,650),(650,700) */ /* CIF Output (550,700) Right */ output newTrain (instname) via oo; /* CIF Line (650,800),(650,850) */ /* CIF Reset (550,850) */ reset(wheelT); /* CIF Line (650,950),(650,1000) */ /* CIF Set (550,1000) */ set(NOW+wheelDelay, wheelT); /* CIF Line (650,1100),(650,1150) */ /* CIF NextState (550,1150) */ nextstate TrainPassing; /* CIF End State */ endstate; /* CIF State (1050,400) */ state TrainPassing; /* CIF Line (1150,500),(1150,550) */ /* CIF Input (1050,550) Right */ input wheelT; /* CIF Line (1150,650),(1150,700) */ /* CIF NextState (1050,700) */ nextstate idle; /* CIF End State */ endstate; /* CIF State (1300,400) */ state TrainPassing; /* CIF Line (1400,500),(1400,550) */ /* CIF Input (1300,550) Right */ input setPhysVal; /* CIF Line (1400,650),(1400,700) */ /* CIF Reset (1300,700) */ reset(wheelT); /* CIF Line (1400,800),(1400,850) */ /* CIF Set (1300,850) */ set(NOW+wheelDelay, wheelT); /* CIF Line (1400,950),(1400,1000) */ /* CIF NextState (1300,1000) */ nextstate TrainPassing; /* CIF End State */ endstate; /* CIF End ProcessDiagram */ endprocess TrainSensCtrlCtrl; /* CIF ProcedureDiagram */ /* CIF Page 1 (1900,2000) */ /* CIF Frame (0,0),(1900,1750) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\TrainSensCtrl\setPhysVal1.spd' */ /* CIF Specific SDT Page 1 Scale 100 Grid (250,150) AutoNumbered */ Procedure setPhysVal ;FPAR IN newValue CharString; /* CIF DefaultSize (200,100) */ /* CIF CurrentPage 1 */ /* CIF ProcedureStart (300,250) */ start ; /* CIF Line (400,350),(400,400) */ /* CIF Task (300,400) */ task newvalue:= newvalue /*use it*/; /* CIF Line (400,500),(400,550) */ /* CIF Return (350,550),(100,100) */ return ; /* CIF End ProcedureDiagram */ endprocedure setPhysVal; /* CIF PackageDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (150,150),(1600,2000) */ /* CIF PackageReference (175,25),(200,100) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\TrackCtrl\TrackCtrl.sun' */ /* CIF Specific SDT Page 1 Scale 100 Grid (50,50) AutoNumbered */ USE Utils; USE Project; USE SignalCtrl; USE TrainSensCtrl; Package TrackCtrl; /* CIF CurrentPage 1 */ /* CIF Text (600,550),(200,100) */ SIGNALLIST TrackCtrlInp = go, setSignalState; SIGNALLIST TrackCtrlOutp = askForGo, noTrains, newSignalState; /* CIF End Text */ /* CIF BlockType (250,500),(300,200) */ /* CIF TextPosition (275,575) */ block type TrackCtrl referenced; /* CIF End PackageDiagram */ endpackage TrackCtrl; /* CIF BlockTypeDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (150,150),(1600,2000) */ /* CIF BlockPage 2 (1900,2100) */ /* CIF Frame (250,100),(1400,1950) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\TrackCtrl\TrackCtrl.sbt' */ /* CIF Specific SDT Page 1 Scale 100 Grid (50,50) AutoNumbered */ /* CIF Specific SDT Page 2 Scale 80 Grid (50,50) AutoNumbered */ Block Type TrackCtrl; /* CIF Gate (250,375),(100,375) */ /* CIF TextPosition (200,325) */ /* CIF TextPosition (125,400) SignalList1 */ gate oi in with (TrackCtrlInp); /* CIF Gate (1650,375),(1800,375) */ /* CIF TextPosition (1675,325) */ /* CIF TextPosition (1575,400) SignalList1 */ gate oo out with (TrackCtrlOutp); /* CIF CurrentPage 1 */ /* CIF Text (500,600),(200,100) */ /* Signals to subobjects via a */ SIGNALLIST ai1 = (TrainSensCtrlInp) ; /* */ SIGNALLIST ai2 = (SignalCtrlInp) ; /* */ /* CIF End Text */ /* CIF Text (500,800),(200,100) */ /* Signals from subobjects via b */ SIGNALLIST bi1 = (TrainSensCtrlOutp); /* */ SIGNALLIST bi2 = (SignalCtrlOutp); /* */ /* CIF End Text */ /* CIF SubstructureDiagram Invisible */ substructure TrackCtrl; /* CIF CurrentPage 2 */ /* CIF Channel (250,375),(650,375) */ /* CIF TextPosition (272,324) */ /* CIF TextPosition (350,400) SignalList1 */ /* CIF Arrow1Position (350,375) */ channel oi from env via oi to TrackCtrlCtrl with (TrackCtrlInp); endchannel oi; /* CIF Channel (1300,375),(1650,375) */ /* CIF TextPosition (1575,325) */ /* CIF TextPosition (1325,400) SignalList1 */ /* CIF Arrow1Position (1562,375) */ channel oo from TrackCtrlCtrl to env via oo with (TrackCtrlOutp); endchannel oo; /* CIF Channel (650,475),(275,475),(275,1050),(650,1050) */ /* CIF TextPosition (300,1000) */ /* CIF TextPosition (441,1075) SignalList1 */ /* CIF Arrow1Position (560,1050) */ channel a.i1 from TrackCtrlCtrl to ts via oi with (ai1); endchannel a.i1; /* CIF Channel (650,475),(275,475),(275,1200),(650,1200) */ /* CIF TextPosition (300,1150) */ /* CIF TextPosition (441,1225) SignalList1 */ /* CIF Arrow1Position (560,1200) */ channel a.i2 from TrackCtrlCtrl to sig1 via oi with (ai2); endchannel a.i2; /* CIF Channel (1200,1050),(1625,1050),(1625,475),(1300,475) */ /* CIF TextPosition (1229,1000) */ /* CIF TextPosition (1475,1075) SignalList1 */ /* CIF Arrow1Position (1381,475) */ channel b.i1 from ts via oo to TrackCtrlCtrl with (bi1); endchannel b.i1; /* CIF Channel (1200,1200),(1625,1200),(1625,475),(1300,475) */ /* CIF TextPosition (1210,1150) */ /* CIF TextPosition (1475,1225) SignalList1 */ /* CIF Arrow1Position (1381,475) */ channel b.i2 from sig1 via oo to TrackCtrlCtrl with (bi2); endchannel b.i2; /* CIF Block (650,350),(650,150) */ /* CIF TextPosition (725,400) */ block TrackCtrlCtrl referenced; /* CIF Block (650,1000),(550,100) */ /* CIF TextPosition (725,1025) */ /* CIF GateReference (650,1050) */ /* CIF TextPosition (675,1025) */ /* CIF GateReference (1200,1050) */ /* CIF TextPosition (1150,1025) */ block ts:TrainSensCtrl; /* CIF Block (650,1150),(550,100) */ /* CIF TextPosition (725,1175) */ /* CIF GateReference (650,1200) */ /* CIF TextPosition (675,1175) */ /* CIF GateReference (1200,1200) */ /* CIF TextPosition (1150,1175) */ block sig1:SignalCtrl; /* CIF End SubstructureDiagram */ endsubstructure TrackCtrl; /* CIF End BlockTypeDiagram */ endblock type TrackCtrl; /* CIF BlockDiagram */ /* CIF Page 1 (1900,2100) */ /* CIF Frame (150,150),(1600,1700) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\TrackCtrl\TrackCtrlCtrl.sbk' */ /* CIF Specific SDT Page 1 Scale 80 Grid (50,50) AutoNumbered */ Block TrackCtrlCtrl; /* CIF CurrentPage 1 */ /* CIF Text (500,250),(200,100) */ SIGNALLIST aOut=(ai1),(ai2); SIGNALLIST bIn=(bi1),(bi2); /* CIF End Text */ /* CIF SignalRoute (150,700),(650,700) */ /* CIF TextPosition (175,650) */ /* CIF TextPosition (175,725) SignalList1 */ signalroute oi from env to TrackCtrlMasterCtrl with (TrackCtrlInp); /* CIF SignalRoute (1750,775),(1250,775) */ /* CIF TextPosition (1500,725) */ /* CIF TextPosition (1275,800) SignalList1 */ signalroute b from env to TrackCtrlMasterCtrl with (bIn); /* CIF SignalRoute (975,900),(975,1200) */ /* CIF TextPosition (1000,975) */ /* CIF TextPosition (1000,1125) SignalList1 */ signalroute mo from TrackCtrlMasterCtrl to TrackCtrlCtrl with (TrackCtrlInp), (bIn); /* CIF SignalRoute (1150,1250),(1750,1250) */ /* CIF TextPosition (1650,1200) */ /* CIF TextPosition (1275,1200) SignalList1 */ signalroute oo from TrackCtrlCtrl to env with (TrackCtrlOutp); /* CIF SignalRoute (800,1350),(150,1350) */ /* CIF TextPosition (197,1350) */ /* CIF TextPosition (400,1375) SignalList1 */ signalroute a from TrackCtrlCtrl to env with (aOut); /* CIF Process (650,650),(600,250) */ /* CIF TextPosition (675,750) */ process TrackCtrlMasterCtrl(1,1) referenced; /* CIF Process (800,1200),(350,200) */ /* CIF TextPosition (825,1275) */ process TrackCtrlCtrl(0, ) referenced; /* CIF Connect */ /* CIF TextPosition (75,675) */ connect oi and oi; /* CIF Connect */ /* CIF TextPosition (1775,1225) */ connect oo and oo; /* CIF Connect */ /* CIF TextPosition (50,1325) */ connect a.i1, a.i2 and a; /* CIF Connect */ /* CIF TextPosition (1775,750) */ connect b.i1, b.i2 and b; /* CIF End BlockDiagram */ endblock TrackCtrlCtrl; /* CIF ProcessDiagram */ /* CIF Page 1 (1700,1700) */ /* CIF Frame (0,0),(1700,1700) */ /* CIF Page 2 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Page 3 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\TrackCtrl\TrackCtrlMasterCtrl.spr' */ /* CIF Specific SDT Page 1 Scale 100 Grid (250,150) AutoNumbered */ /* CIF Specific SDT Page 2 Scale 100 Grid (250,150) AutoNumbered */ /* CIF Specific SDT Page 3 Scale 100 Grid (250,150) AutoNumbered */ Process TrackCtrlMasterCtrl; /* CIF DefaultSize (200,100) */ /* CIF CurrentPage 1 */ /* CIF Text (700,100) */ DCL instName Charstring; /* CIF End Text */ /* CIF CurrentPage 2 */ /* CIF Text (550,100) */ DCL sigState SignalStateType; DCL t1, t2 CharString; DCL instPID PID; /* CIF End Text */ /* CIF CurrentPage 1 */ /* CIF Start (50,250) */ start ; /* CIF Line (150,350),(150,400) */ /* CIF NextState (50,400) */ nextstate Main; /* CIF State (50,400) */ state Main; /* CIF Line (150,500),(150,550) */ /* CIF Input (50,550) Right */ input go (instName); /* CIF Line (150,650),(150,700) */ /* CIF Create (50,700) */ create TrackCtrlCtrl; /* CIF Line (150,800),(150,850) */ /* CIF Decision (50,850) */ decision offspring; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (250,900),(650,900),(650,1000) */ /* CIF TextPosition (675,925) */ (null): /* CIF ProcedureCall (550,1000) */ call printIt(instName//' ERROR: '// 'cannot dynamically create process', NOW); /* CIF Line (650,1100),(650,1150) */ /* CIF NextState (550,1150) */ nextstate main; /* CIF Answer */ /* CIF Line (150,950),(150,1000) */ /* CIF TextPosition (175,950) */ else: /* CIF Output (50,1000) Right */ output go(instName) to offspring; /* CIF Line (150,1100),(150,1150) */ /* CIF ProcedureCall (50,1150) */ call announceInstance (offspring, instName); /* CIF Line (150,1250),(150,1300) */ /* CIF NextState (50,1300) */ nextstate main; /* CIF End Decision */ enddecision; /* CIF End State */ endstate; /* CIF State (550,400) */ state main; /* CIF End State */ endstate; /* CIF CurrentPage 2 */ /* CIF State (50,250) */ state main; /* CIF Line (150,350),(150,400) */ /* CIF Input (50,400) Right */ input setSignalState (t1, sigState); /* CIF Line (150,500),(150,700) */ /* CIF Task (50,700) */ task instPID := call getPID (t1); /* CIF Line (150,800),(150,850) */ /* CIF Decision (50,850) */ decision instPID; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (250,900),(650,900),(650,1000) */ /* CIF TextPosition (675,925) */ (NULL): /* CIF ProcedureCall (550,1000) */ call printIt(t1//' ERROR: '// 'no matching process instance found', NOW); /* CIF Line (650,1100),(650,1150) */ /* CIF NextState (550,1150) */ nextstate main; /* CIF Answer */ /* CIF Line (150,950),(150,1000) */ /* CIF TextPosition (175,975) */ else: /* CIF Output (50,1000) Right */ output setSIgnalState (t1, sigState) to instPID; /* CIF Line (150,1100),(150,1150) */ /* CIF NextState (50,1150) */ nextstate main; /* CIF End Decision */ enddecision; /* CIF End State */ endstate; /* CIF State (1050,250) */ state main; /* CIF Line (1150,350),(1150,400) */ /* CIF Input (1050,400) Right */ input newSIgnalState (t1, sigState); /* CIF Line (1150,500),(1150,550) */ /* CIF Task (1050,550) */ task t2 := call cutFirstId (t1); /* CIF Line (1150,650),(1150,700) */ /* CIF Task (1050,700) */ task instPID := call getPID (t2); /* CIF Line (1150,800),(1150,850) */ /* CIF Decision (1050,850) */ decision instPID; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (1250,900),(1650,900),(1650,1000) */ /* CIF TextPosition (1675,925) */ (NULL): /* CIF ProcedureCall (1550,1000) */ call printIt(t1//' ERROR: '// 'no matching process instance found', NOW); /* CIF Line (1650,1100),(1650,1150) */ /* CIF NextState (1550,1150) */ nextstate main; /* CIF Answer */ /* CIF Line (1150,950),(1150,1000) */ /* CIF TextPosition (1175,975) */ else: /* CIF Output (1050,1000) Right */ output newSIgnalState (t1, sigState) to instPID; /* CIF Line (1150,1100),(1150,1150) */ /* CIF NextState (1050,1150) */ nextstate main; /* CIF End Decision */ enddecision; /* CIF End State */ endstate; /* CIF CurrentPage 3 */ /* CIF State (50,250) */ state main; /* CIF Line (150,350),(150,400) */ /* CIF Input (50,400) Right */ input newTrain (t1); /* CIF Line (150,500),(150,550) */ /* CIF Task (50,550) */ task t2 := call cutFirstId (t1); /* CIF Line (150,650),(150,700) */ /* CIF Task (50,700) */ task instPID := call getPID (t2); /* CIF Line (150,800),(150,850) */ /* CIF Decision (50,850) */ decision instPID; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (250,900),(650,900),(650,1000) */ /* CIF TextPosition (675,925) */ (NULL): /* CIF ProcedureCall (550,1000) */ call printIt(t1//' ERROR: '// 'no matching process instance found', NOW); /* CIF Line (650,1100),(650,1150) */ /* CIF NextState (550,1150) */ nextstate main; /* CIF Answer */ /* CIF Line (150,950),(150,1000) */ /* CIF TextPosition (175,975) */ else: /* CIF Output (50,1000) Right */ output newTrain (t1) to instPID; /* CIF Line (150,1100),(150,1150) */ /* CIF NextState (50,1150) */ nextstate main; /* CIF End Decision */ enddecision; /* CIF End State */ endstate; /* CIF End ProcessDiagram */ endprocess TrackCtrlMasterCtrl; /* CIF ProcessDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Page 2 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Page 3 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Page 4 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\TrackCtrl\TrackCtrlCtrl.spr' */ /* CIF Specific SDT Page 1 Scale 100 Grid (250,150) AutoNumbered */ /* CIF Specific SDT Page 2 Scale 100 Grid (250,150) AutoNumbered */ /* CIF Specific SDT Page 3 Scale 100 Grid (250,150) AutoNumbered */ /* CIF Specific SDT Page 4 Scale 100 Grid (250,150) AutoNumbered */ process TrackCtrlCtrl; /* CIF DefaultSize (200,100) */ /* CIF CurrentPage 1 */ /* CIF Text (550,100) */ DCL instName Charstring; DCL t1 CharString; /* CIF End Text */ /* CIF Text (1050,100) */ /*RR Timer tt; RR*/ /* CIF End Text */ /* CIF Text (50,250) */ /* EnvTrackTask */ /* CIF End Text */ /* CIF Text (550,250) */ DCL curTrainNo Integer := 0; /* CIF End Text */ /* CIF CurrentPage 2 */ /* CIF Text (550,100) */ DCL sigState SignalStateType; /* CIF End Text */ /* CIF CurrentPage 1 */ /* CIF Start (300,400) */ start ; /* CIF Line (400,500),(400,550) */ /* CIF NextState (300,550) */ nextstate Init; /* CIF State (300,550) */ state Init; /* CIF Line (400,650),(400,700) */ /* CIF Input (300,700) Right */ input go (instName); /* CIF Line (400,800),(400,850) */ /* CIF Output (300,850) Right */ output go ('sig1'//instName) via a.i2; /* CIF Line (400,950),(400,1000) */ /* CIF Output (300,1000) Right */ output go ('ts1'//instName) via a.i1; /* CIF Line (400,1100),(400,1150) */ /* CIF Output (300,1150) Right */ output go ('ts2'//instName) via a.i1; /* CIF Line (400,1250),(400,1300) */ /* CIF Output (300,1300) Right */ output getSignalState ('sig1'//instName) via a.i2; /* CIF Line (400,1400),(400,1450) */ /* CIF NextState (300,1450) */ nextstate Init; /* CIF End State */ endstate; /* CIF State (800,400) */ state Init; /* CIF Line (900,500),(900,550) */ /* CIF Input (800,550) Right */ input newSignalState (t1, sigState); /* CIF Line (900,650),(900,700) */ /* CIF Decision (800,700) */ decision sigState; /* CIF Answer InvisibleBrackets */ /* CIF Line (900,800),(900,850) */ /* CIF TextPosition (925,825) */ (halt): /* CIF NextState (800,850) */ nextstate halt; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (1000,750),(1150,750),(1150,850) */ /* CIF TextPosition (1175,775) */ (go): /* CIF NextState (1050,850) */ nextstate go; /* CIF End Decision */ enddecision; /* CIF End State */ endstate; /* CIF CurrentPage 2 */ /* CIF State (50,250) */ state halt; /* CIF Line (150,350),(150,400) */ /* CIF Input (50,400) Right */ input newTrain (t1); /* CIF Line (150,500),(150,550) */ /* CIF Decision (50,550) */ decision t1 = 'ts1'//instname; /* CIF Answer InvisibleBrackets */ /* CIF Line (150,650),(150,700) */ /* CIF TextPosition (175,675) */ (true): /* CIF Task (50,700) */ task curTrainNo := curTrainNo + 1; /* CIF Line (150,800),(150,850) */ /* CIF Output (50,850) Right */ output askForGo (instName) via oo; /* CIF Line (150,950),(150,1000) */ /* CIF NextState (50,1000) */ nextstate -; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (250,600),(400,600),(400,700) */ /* CIF TextPosition (425,625) */ (false): /* CIF Decision (300,700) */ decision curTrainNo = 0; /* CIF Answer InvisibleBrackets */ /* CIF Line (400,800),(400,850) */ /* CIF TextPosition (425,825) */ (false): /* CIF Task (300,850) */ task curTrainNo := curTrainNo - 1; /* CIF Line (400,950),(400,1000) */ /* CIF Decision (300,1000) */ decision curTrainNo = 0; /* CIF Answer InvisibleBrackets */ /* CIF Line (400,1100),(400,1150) */ /* CIF TextPosition (425,1125) */ (true): /* CIF Output (300,1150) Right */ output noTrains (instname); /* CIF Line (400,1250),(400,1300) */ /* CIF Answer Right InvisibleBrackets */ /* CIF Line (500,1050),(550,1050),(550,1275),(400,1275),(400,1300) */ /* CIF TextPosition (575,1300) */ (false): /* CIF End Decision */ enddecision; /* CIF NextState (300,1300) */ nextstate -; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (500,750),(900,750),(900,850) */ /* CIF TextPosition (925,775) */ (true): /* CIF ProcedureCall (800,850) */ call printIt ( 'ERROR1 in '//instname, NOW); /* CIF Line (900,950),(900,1000) */ /* CIF NextState (800,1000) */ nextstate -; /* CIF End Decision */ enddecision; /* CIF End Decision */ enddecision; /* CIF End State */ endstate; /* CIF CurrentPage 3 */ /* CIF State (50,250) */ state go; /* CIF Line (150,350),(150,400) */ /* CIF Input (50,400) Right */ input newTrain (t1); /* CIF Line (150,500),(150,550) */ /* CIF Decision (50,550) */ decision t1 = 'ts1'//instname; /* CIF Answer InvisibleBrackets */ /* CIF Line (150,650),(150,700) */ /* CIF TextPosition (175,675) */ (true): /* CIF Task (50,700) */ task curTrainNo := curTrainNo + 1; /* CIF Line (150,800),(150,850) */ /* CIF NextState (50,850) */ nextstate -; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (250,600),(400,600),(400,700) */ /* CIF TextPosition (425,625) */ (false): /* CIF Decision (300,700) */ decision curTrainNo =0; /* CIF Answer InvisibleBrackets */ /* CIF Line (400,800),(400,850) */ /* CIF TextPosition (425,825) */ (false): /* CIF Task (300,850) */ task curTrainNo := curTrainNo - 1; /* CIF Line (400,950),(400,1000) */ /* CIF Decision (300,1000) */ decision curTrainNo =0; /* CIF Answer InvisibleBrackets */ /* CIF Line (400,1100),(400,1150) */ /* CIF TextPosition (425,1125) */ (true): /* CIF Output (300,1150) Right */ output setSignalState ('sig1'//instName, halt) via a.i2; /* CIF Line (400,1250),(400,1300) */ /* CIF Output (300,1300) Right */ output newSignalState (instName, halt) via oo; /* CIF Line (400,1400),(400,1450) */ /* CIF Output (300,1450) Right */ output noTrains (instName); /* CIF Line (400,1550),(400,1600) */ /* CIF NextState (300,1600) */ nextstate halt; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (500,1050),(650,1050),(650,1150) */ /* CIF TextPosition (675,1075) */ (false): /* CIF End Decision */ enddecision; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (500,750),(650,750),(650,850) */ /* CIF TextPosition (675,775) */ (true): /* CIF ProcedureCall (550,850) */ call printIt ( 'ERROR2 in '//instname, NOW); /* CIF Line (650,950),(650,1150) */ /* CIF End Decision */ enddecision; /* CIF NextState (550,1150) */ nextstate -; /* CIF End Decision */ enddecision; /* CIF End State */ endstate; /* CIF CurrentPage 4 */ /* CIF State (300,250) */ state go; /* CIF Line (400,350),(400,400) */ /* CIF Input (300,400) Right */ input setSignalState (t1, sigState); /* CIF Line (400,500),(400,550) */ /* CIF Output (300,550) Right */ output setSignalState ('sig1'//instName, halt) via a.i2; /* CIF Line (400,650),(400,700) */ /* CIF Output (300,700) Right */ output newSignalState (instname, halt) via oo; /* CIF Line (400,800),(400,850) */ /* CIF NextState (300,850) */ nextstate go; /* CIF End State */ endstate; /* CIF State (550,250) */ state halt; /* CIF Line (650,350),(650,400) */ /* CIF Input (550,400) Right */ input setSignalState (t1, sigState); /* CIF Line (650,500),(650,550) */ /* CIF Output (550,550) Right */ output setSignalState ('sig1'//instName, go) via a.i2; /* CIF Line (650,650),(650,700) */ /* CIF Output (550,700) Right */ output newSignalState (instname, go) via oo; /* CIF Line (650,800),(650,850) */ /* CIF NextState (550,850) */ nextstate go; /* CIF End State */ endstate; /* CIF End ProcessDiagram */ endprocess TrackCtrlCtrl; /* CIF PackageDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (150,150),(1600,2000) */ /* CIF PackageReference (175,25),(200,100) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\CrossingCtrl\CrossingCtrl.sun' */ /* CIF Specific SDT Page 1 Scale 100 Grid (50,50) AutoNumbered */ USE Utils; USE Project; USE RoadCtrl; USE TrackCtrl; USE GateCtrl; Package CrossingCtrl; /* CIF CurrentPage 1 */ /* CIF Text (600,550),(200,100) */ SIGNALLIST CrossingCtrlInp = go, initTracks, initTracksDone, setStrategy; /*RR SIGNALLIST CrossingCtrlOutp = dummy; RR*/ /* CIF End Text */ /* CIF BlockType (250,500),(300,200) */ /* CIF TextPosition (275,575) */ block type CrossingCtrl referenced; /* CIF End PackageDiagram */ endpackage CrossingCtrl; /* CIF BlockTypeDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (150,150),(1600,2000) */ /* CIF BlockPage 2 (1900,2100) */ /* CIF Frame (250,100),(1400,1950) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\CrossingCtrl\CrossingCtrl.sbt' */ /* CIF Specific SDT Page 1 Scale 100 Grid (50,50) AutoNumbered */ /* CIF Specific SDT Page 2 Scale 80 Grid (50,50) AutoNumbered */ block type CrossingCtrl; /* CIF Gate (250,375),(100,375) */ /* CIF TextPosition (200,325) */ /* CIF TextPosition (125,400) SignalList1 */ gate oi in with (CrossingCtrlInp); /* CIF CurrentPage 1 */ /* CIF Text (500,600),(200,100) */ /* Signals to subobjects via a */ SIGNALLIST ai2 = (GateCtrlInp) ; /* */ SIGNALLIST ai3 = (TrackCtrlInp) ; /* */ SIGNALLIST ai4 = (RoadCtrlInp) ; /* */ /* CIF End Text */ /* CIF Text (500,800),(200,100) */ /* Signals from subobjects via b */ /*RR SIGNALLIST bi2 = (GateCtrlOutp); RR*//* */ SIGNALLIST bi3 = (TrackCtrlOutp); /* */ SIGNALLIST bi4 = (RoadCtrlOutp); /* */ /* CIF End Text */ /* CIF SubstructureDiagram Invisible */ substructure CrossingCtrl; /* CIF CurrentPage 2 */ /* CIF Channel (250,375),(650,375) */ /* CIF TextPosition (272,324) */ /* CIF TextPosition (350,400) SignalList1 */ /* CIF Arrow1Position (350,375) */ channel oi from env via oi to CrossingCtrl with (CrossingCtrlInp); endchannel oi; /* CIF Channel (650,475),(275,475),(275,1050),(650,1050) */ /* CIF TextPosition (300,1000) */ /* CIF TextPosition (441,1075) SignalList1 */ /* CIF Arrow1Position (560,1050) */ channel a.i2 from CrossingCtrl to gate1 via oi with (ai2); endchannel a.i2; /* CIF Channel (650,475),(275,475),(275,1200),(650,1200) */ /* CIF TextPosition (300,1150) */ /* CIF TextPosition (441,1225) SignalList1 */ /* CIF Arrow1Position (560,1200) */ channel a.i3 from CrossingCtrl to tracks via oi with (ai3); endchannel a.i3; /* CIF Channel (650,475),(275,475),(275,1350),(650,1350) */ /* CIF TextPosition (300,1300) */ /* CIF TextPosition (441,1375) SignalList1 */ /* CIF Arrow1Position (560,1350) */ channel a.i4 from CrossingCtrl to road1 via oi with (ai4); endchannel a.i4; /* CIF Channel (1200,1200),(1625,1200),(1625,475),(1300,475) */ /* CIF TextPosition (1210,1150) */ /* CIF TextPosition (1475,1225) SignalList1 */ /* CIF Arrow1Position (1381,475) */ channel b.i3 from tracks via oo to CrossingCtrl with (bi3); endchannel b.i3; /* CIF Channel (1200,1350),(1625,1350),(1625,475),(1300,475) */ /* CIF TextPosition (1212,1301) */ /* CIF TextPosition (1475,1375) SignalList1 */ /* CIF Arrow1Position (1381,475) */ channel b.i4 from road1 via oo to CrossingCtrl with (bi4); endchannel b.i4; /* CIF Block (650,350),(650,150) */ /* CIF TextPosition (725,400) */ block CrossingCtrl referenced; /* CIF Block (650,1000),(550,100) */ /* CIF TextPosition (725,1025) */ /* CIF GateReference (650,1050) */ /* CIF TextPosition (675,1025) */ block gate1:GateCtrl; /* CIF Block (650,1150),(550,100) */ /* CIF TextPosition (725,1175) */ /* CIF GateReference (650,1200) */ /* CIF TextPosition (675,1175) */ /* CIF GateReference (1200,1200) */ /* CIF TextPosition (1150,1175) */ block tracks:TrackCtrl; /* CIF Block (650,1300),(550,100) */ /* CIF TextPosition (725,1325) */ /* CIF GateReference (650,1350) */ /* CIF TextPosition (675,1325) */ /* CIF GateReference (1200,1350) */ /* CIF TextPosition (1150,1325) */ block road1:RoadCtrl; /* CIF End SubstructureDiagram */ endsubstructure CrossingCtrl; /* CIF End BlockTypeDiagram */ endblock type CrossingCtrl; /* CIF BlockDiagram */ /* CIF Page 1 (1900,2100) */ /* CIF Frame (150,150),(1600,1700) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\CrossingCtrl\CrossingCtrl.sbk' */ /* CIF Specific SDT Page 1 Scale 80 Grid (50,50) AutoNumbered */ Block CrossingCtrl; /* CIF CurrentPage 1 */ /* CIF Text (500,250),(200,100) */ SIGNALLIST aOut=(ai2),(ai3),(ai4); SIGNALLIST bIn=(bi3),(bi4); /* CIF End Text */ /* CIF SignalRoute (150,700),(650,700) */ /* CIF TextPosition (175,650) */ /* CIF TextPosition (175,725) SignalList1 */ signalroute oi from env to CrossingCtrlCtrl with (CrossingCtrlInp); /* CIF SignalRoute (1750,700),(1250,700) */ /* CIF TextPosition (1500,650) */ /* CIF TextPosition (1275,725) SignalList1 */ signalroute b from env to CrossingCtrlCtrl with (bIn); /* CIF SignalRoute (650,850),(150,850) */ /* CIF TextPosition (425,800) */ /* CIF TextPosition (400,875) SignalList1 */ signalroute a from CrossingCtrlCtrl to env with (aOut); /* CIF Process (650,650),(600,250) */ /* CIF TextPosition (675,750) */ process CrossingCtrlCtrl referenced; /* CIF Connect */ /* CIF TextPosition (75,675) */ connect oi and oi; /* CIF Connect */ /* CIF TextPosition (50,800) */ connect a.i2, a.i3, a.i4 and a; /* CIF Connect */ /* CIF TextPosition (1775,675) */ connect b.i3, b.i4 and b; /* CIF End BlockDiagram */ endblock CrossingCtrl; /* CIF ProcessDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Page 2 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Page 3 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Page 4 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Page 5 (2400,3000) */ /* CIF Frame (0,0),(2400,3000) */ /* CIF Page 6 (2500,2500) */ /* CIF Frame (0,0),(2500,2500) */ /* CIF Page 7 (2100,2100) */ /* CIF Frame (0,0),(2100,2100) */ /* CIF Page 8 (2500,2500) */ /* CIF Frame (0,0),(2500,2500) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\CrossingCtrl\CrossingCtrlCtrl.spr' */ /* CIF Specific SDT Page 1 Scale 100 Grid (250,150) AutoNumbered */ /* CIF Specific SDT Page 2 Scale 100 Grid (250,150) AutoNumbered */ /* CIF Specific SDT Page 3 Scale 100 Grid (250,150) AutoNumbered */ /* CIF Specific SDT Page 4 Scale 100 Grid (250,150) AutoNumbered */ /* CIF Specific SDT Page 5 Scale 100 Grid (250,150) AutoNumbered */ /* CIF Specific SDT Page 6 Scale 100 Grid (250,150) AutoNumbered */ /* CIF Specific SDT Page 7 Scale 100 Grid (250,150) AutoNumbered */ /* CIF Specific SDT Page 8 Scale 100 Grid (250,150) AutoNumbered */ process CrossingCtrlCtrl; /* CIF DefaultSize (200,100) */ /* CIF CurrentPage 1 */ /* CIF Text (550,100) */ DCL instName Charstring; DCL t1 CharString; /* CIF End Text */ /* CIF Text (1050,100) */ NEWTYPE TrackEntryType struct sig SignalStateType; train Boolean; trType TrackType; trDur Duration; ENDNEWTYPE; NEWTYPE TrackArrayType ARRAY (CharString, TrackEntryType) ENDNEWTYPE; /* CIF End Text */ /* CIF Text (50,250) */ /* EnvTrackTask */ /* CIF End Text */ /* CIF Text (550,250) */ DCL noOfTracks Integer := 0; DCL tracks TrackArrayType; /*RR DCL maxTracks Integer := 25; RR*/ /* CIF End Text */ /* CIF CurrentPage 2 */ /* CIF Text (1300,100) */ DCL td TrackDurationType; DCL perToCreTrains Duration; DCL curTrackNbr Integer := 1; DCL i Integer; DCL nbr Integer; /*RR DCL perToCreCars Duration := 5; RR*/ /*RR DCL perToDecrCars Duration := 3; RR*/ /* CIF End Text */ /* CIF CurrentPage 4 */ /* CIF Text (800,100) */ DCL allHalt Boolean := True; DCL sigState SignalStateType; /* CIF End Text */ /* CIF CurrentPage 5 */ /* CIF Text (550,250) */ DCL fastTrainWait Boolean := False; /* CIF End Text */ /* CIF CurrentPage 6 */ /* CIF Text (800,100) */ DCL carsWait Boolean; DCL oneTrack Boolean; /* CIF End Text */ /* CIF CurrentPage 4 */ /* CIF Procedure (50,1150),(350,100) */ /* CIF TextPosition (131,1175) */ procedure checkForHalt referenced; /* CIF CurrentPage 5 */ /* CIF Procedure (1050,400),(400,100) */ /* CIF TextPosition (1100,425) */ procedure checkFastTrains referenced; /* CIF CurrentPage 6 */ /* CIF Procedure (300,100) */ /* CIF TextPosition (325,125) */ procedure sendGo referenced; /* CIF CurrentPage 1 */ /* CIF Start (50,400) */ start ; /* CIF Line (150,500),(150,550) */ /* CIF NextState (50,550) */ nextstate Init; /* CIF State (50,550) */ state Init; /* CIF Line (150,650),(150,700) */ /* CIF Input (50,700) Right */ input go (instName); /* CIF Line (150,800),(150,850) */ /* CIF ProcedureCall (50,850) */ call announceInstance (self, instName); /* CIF Line (150,950),(150,1000) */ /* CIF Output (50,1000) Right */ output go ('gate1'//instName) via a.i2; /* CIF Line (150,1100),(150,1150) */ /* CIF Output (50,1150) Right */ output go ('road1'//instName) via a.i4; /* CIF Line (150,1250),(150,1300) */ /* CIF NextState (50,1300) */ nextstate init; /* CIF End State */ endstate; /* CIF CurrentPage 2 */ /* CIF State (550,100) */ state init; /* CIF Line (650,200),(650,250) */ /* CIF Input (550,250) Right */ input initTracks (nbr, td, perToCreTrains); /* CIF Line (650,350),(650,400) */ /* CIF Extendedtask (550,400) */ task {i := 1;}; /* CIF Line (650,500),(650,550) */ /* CIF Label Invisible */ grst43: /* CIF Decision (550,550) */ decision i > nbr; /* CIF Answer InvisibleBrackets */ /* CIF Line (650,650),(650,700) */ /* CIF TextPosition (675,650) */ (false): /* CIF Task (550,700) */ task t1 := 'track'//(call integerToStr(curTrackNbr))// instName; /* CIF Line (650,800),(650,850) */ /* CIF Output (550,850) Right */ output go(t1) via a.i3; /* CIF Line (650,950),(650,1000) */ /* CIF Task (550,1000) */ task tracks(t1)! sig := Halt; /* CIF Line (650,1100),(650,1150) */ /* CIF Task (550,1150) */ task tracks(t1)! trType := td!trType; /* CIF Line (650,1250),(650,1300) */ /* CIF Task (550,1300) */ task tracks(t1)! train := false; /* CIF Line (650,1400),(650,1450) */ /* CIF Task (550,1450) */ task tracks(t1)!trDur:= td!ts1Dur+td!ts1SigDur+ td!sigTs2Dur; /* CIF Line (650,1550),(650,1600) */ /* CIF Extendedtask (550,1600) */ task {curTrackNbr := curTrackNbr + 1; i := i + 1;}; /* CIF Line (650,1700),(650,1725),(325,1725),(325,525),(650,525),(650,550) */ /* CIF Answer Right InvisibleBrackets */ /* CIF Line (750,600),(900,600),(900,1300) */ /* CIF TextPosition (925,625) */ (true): /* CIF NextState (800,1300) */ nextstate init; /* CIF End Decision */ enddecision; /* CIF Join Invisible */ join grst43; /* CIF End State */ endstate; /* CIF State (1300,550) */ state init; /* CIF Line (1400,650),(1400,700) */ /* CIF Input (1300,700) Right */ input initTracksDone; /* CIF Line (1400,800),(1400,850) */ /* CIF Output (1300,850) Right */ output setGate (opened) via a.i2; /* CIF Line (1400,950),(1400,1000) */ /* CIF Task (1300,1000) */ task noOfTracks := curTrackNbr - 1; /* CIF Line (1400,1100),(1400,1150) */ /* CIF NextState (1300,1150) */ nextstate CPFTOpened; /* CIF End State */ endstate; /* CIF CurrentPage 3 */ /* CIF State (550,400) */ state *; /* CIF Line (650,500),(650,550) */ /* CIF Input (550,550) Right */ input noTrains (t1); /* CIF Line (650,650),(650,700) */ /* CIF Task (550,700) */ task tracks(t1)!train:= false; /* CIF Line (650,800),(650,850) */ /* CIF NextState (550,850) */ nextstate -; /* CIF End State */ endstate; /* CIF State (300,550) */ state * (CPOpened, CPFTOpened); /* CIF Line (400,650),(400,700) */ /* CIF Input (300,700) Right */ input newCars (carsWait); /* CIF Line (400,800),(400,850) */ /* CIF NextState (300,850) */ nextstate -; /* CIF End State */ endstate; /* CIF CurrentPage 4 */ /* CIF State (50,250) */ state TPClosed; /* CIF Line (150,350),(150,400) */ /* CIF Input (50,400) Right */ input askForGo (t1); /* CIF Line (150,500),(150,550) */ /* CIF Task (50,550) */ task tracks(t1)!train := true; /* CIF Line (150,650),(150,700) */ /* CIF Output (50,700) Right */ output setSignalState (t1, go) via a.i3; /* CIF Line (150,800),(150,850) */ /* CIF NextState (50,850) */ nextstate TPClosed; /* CIF End State */ endstate; /* CIF State (300,250) */ state TPOpened; /* CIF Line (400,350),(400,400) */ /* CIF Input (300,400) Right */ input askForGo (t1); /* CIF Line (400,500),(400,550) */ /* CIF Task (300,550) */ task tracks(t1)!train := true; /* CIF Line (400,650),(400,700) */ /* CIF Output (300,700) Right */ output setSignalState (t1, go) via a.i3; /* CIF Line (400,800),(400,850) */ /* CIF Output (300,850) Right */ output setGate (closed) via a.i2; /* CIF Line (400,950),(400,1000) */ /* CIF NextState (300,1000) */ nextstate TPClosed; /* CIF End State */ endstate; /* CIF State (800,250) */ state TPClosed; /* CIF Line (900,350),(900,400) */ /* CIF Input (800,400) Right */ input newSignalState (t1, sigState); /* CIF Line (900,500),(900,550) */ /* CIF Task (800,550) */ task tracks(t1)!sig := sigState; /* CIF Line (900,650),(900,700) */ /* CIF ProcedureCall (800,700) */ call checkForHalt; /* CIF Line (900,800),(900,850) */ /* CIF Decision (800,850) */ decision allHalt; /* CIF Answer InvisibleBrackets */ /* CIF Line (900,950),(900,1000) */ /* CIF TextPosition (925,975) */ (true): /* CIF Output (800,1000) Right */ output setGate (opened); /* CIF Line (900,1100),(900,1150) */ /* CIF NextState (800,1150) */ nextstate TPOpened; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (1000,900),(1150,900),(1150,1000) */ /* CIF TextPosition (1175,925) */ (false): /* CIF NextState (1050,1000) */ nextstate TPClosed; /* CIF End Decision */ enddecision; /* CIF End State */ endstate; /* CIF State (1300,250) */ state TPOpened; /* CIF Line (1400,350),(1400,400) */ /* CIF Input (1300,400) Right */ input newSignalState (t1, sigState); /* CIF Line (1400,500),(1400,550) */ /* CIF Task (1300,550) */ task tracks(t1)!sig := sigState; /* CIF Line (1400,650),(1400,700) */ /* CIF NextState (1300,700) */ nextstate TPOpened; /* CIF End State */ endstate; /* CIF CurrentPage 5 */ /* CIF State (50,250) */ state TPOpened, CPOpened, CPFTOpened, UHOpened; /* CIF Line (150,350),(150,400) */ /* CIF Input (50,400) Right */ input setStrategy (t1); /* CIF Line (150,500),(150,550) */ /* CIF Decision (50,550) */ decision t1; /* CIF Answer InvisibleBrackets */ /* CIF Line (150,650),(150,700) */ /* CIF TextPosition (175,675) */ ('TrainsPrec'): /* CIF Task (50,700) */ task oneTrack:= call sendGo; /* CIF Line (150,800),(150,850) */ /* CIF Decision (50,850) */ decision oneTrack; /* CIF Answer InvisibleBrackets */ /* CIF Line (150,950),(150,1000) */ /* CIF TextPosition (175,975) */ (true): /* CIF Output (50,1000) Right */ output setGate (closed) via a.i2; /* CIF Line (150,1100),(150,1150) */ /* CIF NextState (50,1150) */ nextstate TPClosed; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (250,900),(400,900),(400,1150) */ /* CIF TextPosition (425,925) */ (false): /* CIF NextState (300,1150) */ nextstate TPOpened; /* CIF End Decision */ enddecision; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (250,600),(400,600),(400,700) */ /* CIF TextPosition (425,625) */ ('CarsPrec'): /* CIF NextState (300,700) */ nextstate CPOpened; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (250,600),(650,600),(650,700) */ /* CIF TextPosition (825,625) */ ('CarsFTPrec'): /* CIF Decision (550,700) */ decision carsWait; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (750,750),(1150,750),(1150,850) */ /* CIF TextPosition (1175,775) */ (true): /* CIF ProcedureCall (1050,850) */ call checkFastTrains; /* CIF Line (1150,950),(1150,1000) */ /* CIF Decision (1050,1000) */ decision fastTrainWait; /* CIF Answer Left InvisibleBrackets */ /* CIF Line (1050,1050),(650,1050),(650,1150) */ /* CIF TextPosition (1050,1050) */ (true): /* CIF Answer InvisibleBrackets */ /* CIF Line (1150,1100),(1150,1300) */ /* CIF TextPosition (1175,1125) */ (false): /* CIF NextState (1050,1300) */ nextstate CPFTOpened; /* CIF End Decision */ enddecision; /* CIF Answer InvisibleBrackets */ /* CIF Line (650,800),(650,1150) */ /* CIF TextPosition (675,825) */ (false): /* CIF End Decision */ enddecision; /* CIF Task (550,1150) */ task oneTrack:= call sendGo; /* CIF Line (650,1250),(650,1300) */ /* CIF Decision (550,1300) */ decision oneTrack; /* CIF Answer InvisibleBrackets */ /* CIF Line (650,1400),(650,1450) */ /* CIF TextPosition (675,1425) */ (true): /* CIF Output (550,1450) Right */ output setGate (closed) via a.i2; /* CIF Line (650,1550),(650,1600) */ /* CIF NextState (550,1600) */ nextstate CPFTClosed; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (750,1350),(900,1350),(900,1450) */ /* CIF TextPosition (925,1375) */ (false): /* CIF NextState (800,1450) */ nextstate CPFTOpened; /* CIF End Decision */ enddecision; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (250,600),(1650,600),(1650,700) */ /* CIF TextPosition (1675,625) */ ('UserGo'): /* CIF Task (1550,700) */ task oneTrack:= call sendGo; /* CIF Line (1650,800),(1650,850) */ /* CIF Output (1550,850) Right */ output setGate (closed) via a.i2; /* CIF Line (1650,950),(1650,1000) */ /* CIF NextState (1550,1000) */ nextstate UGClosed; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (250,600),(1900,600),(1900,700) */ /* CIF TextPosition (1925,625) */ ('UserHalt'): /* CIF NextState (1800,700) */ nextstate UHOpened; /* CIF End Decision */ enddecision; /* CIF End State */ endstate; /* CIF State (50,1600) */ state TPClosed, CPClosed, CPFTClosed, UGClosed ; /* CIF Line (150,1700),(150,1750) */ /* CIF Input (50,1750) Right */ input setStrategy (t1); /* CIF Line (150,1850),(150,1900) */ /* CIF Decision (50,1900) */ decision t1; /* CIF Answer InvisibleBrackets */ /* CIF Line (150,2000),(150,2050) */ /* CIF TextPosition (175,2025) */ ('TrainsPrec'): /* CIF ProcedureCall (50,2050) */ call checkForHalt; /* CIF Line (150,2150),(150,2200) */ /* CIF Decision (50,2200) */ decision allHalt; /* CIF Answer InvisibleBrackets */ /* CIF Line (150,2300),(150,2350) */ /* CIF TextPosition (175,2325) */ (true): /* CIF Output (50,2350) Right */ output setGate (opened); /* CIF Line (150,2450),(150,2500) */ /* CIF NextState (50,2500) */ nextstate TPOpened; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (250,2250),(400,2250),(400,2350) */ /* CIF TextPosition (425,2275) */ (false): /* CIF NextState (300,2350) */ nextstate TPClosed; /* CIF End Decision */ enddecision; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (250,1950),(650,1950),(650,2050) */ /* CIF TextPosition (675,1975) */ ('CarsPrec'): /* CIF ProcedureCall (550,2050) */ call checkForHalt; /* CIF Line (650,2150),(650,2200) */ /* CIF Decision (550,2200) */ decision allHalt; /* CIF Answer InvisibleBrackets */ /* CIF Line (650,2300),(650,2350) */ /* CIF TextPosition (675,2325) */ (true): /* CIF Output (550,2350) Right */ output setGate (opened); /* CIF Line (650,2450),(650,2500) */ /* CIF NextState (550,2500) */ nextstate CPOpened; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (750,2250),(900,2250),(900,2350) */ /* CIF TextPosition (925,2275) */ (false): /* CIF NextState (800,2350) */ nextstate CPClosed; /* CIF End Decision */ enddecision; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (250,1950),(900,1950),(900,2050) */ /* CIF TextPosition (925,1975) */ ('UserGo'): /* CIF NextState (800,2050) */ nextstate UGClosed; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (250,1950),(1150,1950),(1150,2050) */ /* CIF TextPosition (1175,1975) */ ('CarsFTPrec'): /* CIF Decision (1050,2050) */ decision carsWait; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (1250,2100),(1650,2100),(1650,2200) */ /* CIF TextPosition (1675,2125) */ (true): /* CIF ProcedureCall (1550,2200) */ call checkFastTrains; /* CIF Line (1650,2300),(1650,2350) */ /* CIF Decision (1550,2350) */ decision fastTrainWait; /* CIF Answer Left InvisibleBrackets */ /* CIF Line (1550,2400),(1150,2400),(1150,2500) */ /* CIF TextPosition (1525,2425) */ (true): /* CIF Answer InvisibleBrackets */ /* CIF Line (1650,2450),(1650,2500) */ /* CIF TextPosition (1675,2475) */ (false): /* CIF Output (1550,2500) Right */ output setGate (opened) via a.i2; /* CIF Line (1650,2600),(1650,2650) */ /* CIF NextState (1550,2650) */ nextstate CPFTOpened; /* CIF End Decision */ enddecision; /* CIF Answer InvisibleBrackets */ /* CIF Line (1150,2150),(1150,2500) */ /* CIF TextPosition (1175,2175) */ (false): /* CIF End Decision */ enddecision; /* CIF Task (1050,2500) */ task oneTrack:= call sendGo; /* CIF Line (1150,2600),(1150,2650) */ /* CIF Decision (1050,2650) */ decision oneTrack; /* CIF Answer InvisibleBrackets */ /* CIF Line (1150,2750),(1150,2800) */ /* CIF TextPosition (1175,2775) */ (true): /* CIF NextState (1050,2800) */ nextstate CPFTClosed; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (1250,2700),(1400,2700),(1400,2800) */ /* CIF TextPosition (1425,2725) */ (false): /* CIF NextState (1300,2800) */ nextstate CPFTOpened; /* CIF End Decision */ enddecision; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (250,1950),(1900,1950),(1900,2050) */ /* CIF TextPosition (1925,1975) */ ('UserHalt'): /* CIF ProcedureCall (1800,2050) */ call checkForHalt; /* CIF Line (1900,2150),(1900,2200) */ /* CIF Decision (1800,2200) */ decision allHalt; /* CIF Answer InvisibleBrackets */ /* CIF Line (1900,2300),(1900,2350) */ /* CIF TextPosition (1925,2325) */ (true): /* CIF Output (1800,2350) Right */ output setGate (opened); /* CIF Line (1900,2450),(1900,2500) */ /* CIF NextState (1800,2500) */ nextstate UHOpened; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (2000,2250),(2150,2250),(2150,2650) */ /* CIF TextPosition (2175,2275) */ (false): /* CIF ProcedureCall (2050,2650) */ call putPanelVal ('obj1', 'Warning, action rejected'); /* CIF Line (2150,2750),(2150,2800) */ /* CIF NextState (2050,2800) */ nextstate -; /* CIF End Decision */ enddecision; /* CIF End Decision */ enddecision; /* CIF End State */ endstate; /* CIF CurrentPage 6 */ /* CIF State (50,250) */ state CPClosed; /* CIF Line (150,350),(150,400) */ /* CIF Input (50,400) Right */ input askForGo (t1); /* CIF Line (150,500),(150,550) */ /* CIF Task (50,550) */ task tracks(t1)!train := true; /* CIF Line (150,650),(150,850) */ /* CIF Decision (50,850) */ decision carsWait; /* CIF Answer InvisibleBrackets */ /* CIF Line (150,950),(150,1000) */ /* CIF TextPosition (175,975) */ (false): /* CIF Output (50,1000) Right */ output setSignalState (t1, go) via a.i3; /* CIF Line (150,1100),(150,1150) */ /* CIF Answer Left InvisibleBrackets */ /* CIF Line (50,900),(25,900),(25,1125),(150,1125),(150,1150) */ /* CIF TextPosition (25,850) */ (true): /* CIF End Decision */ enddecision; /* CIF NextState (50,1150) */ nextstate CPClosed; /* CIF End State */ endstate; /* CIF State (300,250) */ state CPOpened; /* CIF Line (400,350),(400,400) */ /* CIF Input (300,400) Right */ input askForGo (t1); /* CIF Line (400,500),(400,550) */ /* CIF Task (300,550) */ task tracks(t1)!train := true; /* CIF Line (400,650),(400,700) */ /* CIF Decision (300,700) */ decision carsWait; /* CIF Answer InvisibleBrackets */ /* CIF Line (400,800),(400,850) */ /* CIF TextPosition (425,825) */ (false): /* CIF Output (300,850) Right */ output setSignalState (t1, go) via a.i3; /* CIF Line (400,950),(400,1000) */ /* CIF Output (300,1000) Right */ output setGate (closed) via a.i2; /* CIF Line (400,1100),(400,1150) */ /* CIF NextState (300,1150) */ nextstate CPClosed; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (500,750),(650,750),(650,850) */ /* CIF TextPosition (675,775) */ (true): /* CIF NextState (550,850) */ nextstate CPOpened; /* CIF End Decision */ enddecision; /* CIF End State */ endstate; /* CIF State (800,250) */ state CPClosed; /* CIF Line (900,350),(900,400) */ /* CIF Input (800,400) Right */ input newSignalState (t1, sigState); /* CIF Line (900,500),(900,550) */ /* CIF Task (800,550) */ task tracks(t1)!sig := sigState; /* CIF Line (900,650),(900,700) */ /* CIF ProcedureCall (800,700) */ call checkForHalt; /* CIF Line (900,800),(900,850) */ /* CIF Decision (800,850) */ decision allHalt; /* CIF Answer InvisibleBrackets */ /* CIF Line (900,950),(900,1000) */ /* CIF TextPosition (925,975) */ (true): /* CIF Output (800,1000) Right */ output setGate (opened); /* CIF Line (900,1100),(900,1150) */ /* CIF NextState (800,1150) */ nextstate CPOpened; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (1000,900),(1150,900),(1150,1000) */ /* CIF TextPosition (1175,925) */ (false): /* CIF NextState (1050,1000) */ nextstate CPClosed; /* CIF End Decision */ enddecision; /* CIF End State */ endstate; /* CIF State (1300,250) */ state CPOpened; /* CIF Line (1400,350),(1400,400) */ /* CIF Input (1300,400) Right */ input newSignalState (t1, sigState); /* CIF Line (1400,500),(1400,550) */ /* CIF Task (1300,550) */ task tracks(t1)!sig := sigState; /* CIF Line (1400,650),(1400,700) */ /* CIF NextState (1300,700) */ nextstate CPOpened; /* CIF End State */ endstate; /* CIF State (1050,1150) */ state CPOpened; /* CIF Line (1150,1250),(1150,1300) */ /* CIF Input (1050,1300) Right */ input newCars (carsWait); /* CIF Line (1150,1400),(1150,1450) */ /* CIF Decision (1050,1450) */ decision carsWait; /* CIF Answer InvisibleBrackets */ /* CIF Line (1150,1550),(1150,1600) */ /* CIF TextPosition (1175,1575) */ (false): /* CIF Task (1050,1600) */ task oneTrack:= call sendGo; /* CIF Line (1150,1700),(1150,1750) */ /* CIF Decision (1050,1750) */ decision oneTrack; /* CIF Answer InvisibleBrackets */ /* CIF Line (1150,1850),(1150,1900) */ /* CIF TextPosition (1175,1875) */ (true): /* CIF Output (1050,1900) Right */ output setGate (closed) via a.i2; /* CIF Line (1150,2000),(1150,2050) */ /* CIF NextState (1050,2050) */ nextstate CPClosed; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (1250,1800),(1400,1800),(1400,1900) */ /* CIF TextPosition (1425,1825) */ (false): /* CIF NextState (1300,1900) */ nextstate CPOpened; /* CIF End Decision */ enddecision; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (1250,1500),(1400,1500),(1400,1600) */ /* CIF TextPosition (1425,1525) */ (true): /* CIF NextState (1300,1600) */ nextstate CPOpened; /* CIF End Decision */ enddecision; /* CIF End State */ endstate; /* CIF CurrentPage 7 */ /* CIF State (50,250) */ state CPFTClosed; /* CIF Line (150,350),(150,400) */ /* CIF Input (50,400) Right */ input askForGo (t1); /* CIF Line (150,500),(150,550) */ /* CIF Task (50,550) */ task tracks(t1)!train := true; /* CIF Line (150,650),(150,700) */ /* CIF Decision (50,700) */ decision carsWait; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (250,750),(400,750),(400,850) */ /* CIF TextPosition (425,775) */ (true): /* CIF Decision (300,850) */ decision tracks(t1)! trType; /* CIF Answer Left InvisibleBrackets */ /* CIF Line (300,900),(150,900),(150,1000) */ /* CIF TextPosition (300,925) */ (fast): /* CIF Label Invisible */ grst44: /* CIF Output (50,1000) Right */ output setSignalState (t1, go) via a.i3; /* CIF Line (150,1100),(150,1150) */ /* CIF Label Invisible */ grst45: /* CIF NextState (50,1150) */ nextstate CPFTClosed; /* CIF Answer InvisibleBrackets */ /* CIF Line (400,950),(400,1125),(150,1125),(150,1150) */ /* CIF TextPosition (425,950) */ (regular): /* CIF Join Invisible */ join grst45; /* CIF End Decision */ enddecision; /* CIF Answer InvisibleBrackets */ /* CIF Line (150,800),(150,1000) */ /* CIF TextPosition (175,825) */ (false): /* CIF Join Invisible */ join grst44; /* CIF End Decision */ enddecision; /* CIF End State */ endstate; /* CIF State (550,250) */ state CPFTOpened; /* CIF Line (650,350),(650,400) */ /* CIF Input (550,400) Right */ input askForGo (t1); /* CIF Line (650,500),(650,550) */ /* CIF Task (550,550) */ task tracks(t1)!train := true; /* CIF Line (650,650),(650,700) */ /* CIF Decision (550,700) */ decision carsWait; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (750,750),(900,750),(900,850) */ /* CIF TextPosition (925,775) */ (true): /* CIF Decision (800,850) */ decision tracks(t1)! trType; /* CIF Answer Left InvisibleBrackets */ /* CIF Line (800,900),(650,900),(650,1000) */ /* CIF TextPosition (775,925) */ (fast): /* CIF Answer InvisibleBrackets */ /* CIF Line (900,950),(900,1000) */ /* CIF TextPosition (925,950) */ (regular): /* CIF NextState (800,1000) */ nextstate CPFTOpened; /* CIF End Decision */ enddecision; /* CIF Answer InvisibleBrackets */ /* CIF Line (650,800),(650,1000) */ /* CIF TextPosition (675,825) */ (false): /* CIF End Decision */ enddecision; /* CIF Output (550,1000) Right */ output setSignalState (t1, go) via a.i3; /* CIF Line (650,1100),(650,1150) */ /* CIF Output (550,1150) Right */ output setGate (closed) via a.i2; /* CIF Line (650,1250),(650,1300) */ /* CIF NextState (550,1300) */ nextstate CPFTClosed; /* CIF End State */ endstate; /* CIF State (1050,250) */ state CPFTClosed; /* CIF Line (1150,350),(1150,400) */ /* CIF Input (1050,400) Right */ input newSignalState (t1, sigState); /* CIF Line (1150,500),(1150,550) */ /* CIF Task (1050,550) */ task tracks(t1)!sig := sigState; /* CIF Line (1150,650),(1150,700) */ /* CIF ProcedureCall (1050,700) */ call checkForHalt; /* CIF Line (1150,800),(1150,850) */ /* CIF Decision (1050,850) */ decision allHalt; /* CIF Answer InvisibleBrackets */ /* CIF Line (1150,950),(1150,1000) */ /* CIF TextPosition (1175,975) */ (true): /* CIF Output (1050,1000) Right */ output setGate (opened); /* CIF Line (1150,1100),(1150,1150) */ /* CIF NextState (1050,1150) */ nextstate CPFTOpened; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (1250,900),(1400,900),(1400,1000) */ /* CIF TextPosition (1425,925) */ (false): /* CIF NextState (1300,1000) */ nextstate CPFTClosed; /* CIF End Decision */ enddecision; /* CIF End State */ endstate; /* CIF State (1550,250) */ state CPFTOpened; /* CIF Line (1650,350),(1650,400) */ /* CIF Input (1550,400) Right */ input newCars (carsWait); /* CIF Line (1650,500),(1650,550) */ /* CIF Decision (1550,550) */ decision carsWait; /* CIF Answer InvisibleBrackets */ /* CIF Line (1650,650),(1650,700) */ /* CIF TextPosition (1675,675) */ (false): /* CIF Task (1550,700) */ task oneTrack:= call sendGo; /* CIF Line (1650,800),(1650,850) */ /* CIF Decision (1550,850) */ decision oneTrack; /* CIF Answer InvisibleBrackets */ /* CIF Line (1650,950),(1650,1000) */ /* CIF TextPosition (1675,975) */ (true): /* CIF Output (1550,1000) Right */ output setGate (closed) via a.i2; /* CIF Line (1650,1100),(1650,1150) */ /* CIF NextState (1550,1150) */ nextstate CPFTClosed; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (1750,900),(1900,900),(1900,1000) */ /* CIF TextPosition (1925,925) */ (false): /* CIF NextState (1800,1000) */ nextstate CPFTOpened; /* CIF End Decision */ enddecision; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (1750,600),(1900,600),(1900,700) */ /* CIF TextPosition (1925,625) */ (true): /* CIF NextState (1800,700) */ nextstate CPFTOpened; /* CIF End Decision */ enddecision; /* CIF End State */ endstate; /* CIF State (50,1450) */ state CPFTOpened; /* CIF Line (150,1550),(150,1600) */ /* CIF Input (50,1600) Right */ input newSignalState (t1, sigState); /* CIF Line (150,1700),(150,1750) */ /* CIF Task (50,1750) */ task tracks(t1)!sig := sigState; /* CIF Line (150,1850),(150,1900) */ /* CIF NextState (50,1900) */ nextstate CPFTOpened; /* CIF End State */ endstate; /* CIF CurrentPage 8 */ /* CIF State (50,250) */ state UHOpened; /* CIF Line (150,350),(150,400) */ /* CIF Input (50,400) Right */ input askForGo (t1); /* CIF Line (150,500),(150,550) */ /* CIF Task (50,550) */ task tracks(t1)!train := true; /* CIF Line (150,650),(150,700) */ /* CIF NextState (50,700) */ nextstate -; /* CIF End State */ endstate; /* CIF State (300,250) */ state UHOpened; /* CIF Line (400,350),(400,400) */ /* CIF Input (300,400) Right */ input newSignalState (t1, sigState); /* CIF Line (400,500),(400,550) */ /* CIF Task (300,550) */ task tracks(t1)!sig := sigState; /* CIF Line (400,650),(400,700) */ /* CIF NextState (300,700) */ nextstate -; /* CIF End State */ endstate; /* CIF State (800,250) */ state UGClosed; /* CIF Line (900,350),(900,400) */ /* CIF Input (800,400) Right */ input askForGo (t1); /* CIF Line (900,500),(900,550) */ /* CIF Task (800,550) */ task tracks(t1)!train := true; /* CIF Line (900,650),(900,700) */ /* CIF Output (800,700) Right */ output setSignalState (t1, go) via a.i3; /* CIF Line (900,800),(900,850) */ /* CIF NextState (800,850) */ nextstate UGClosed; /* CIF End State */ endstate; /* CIF State (1050,250) */ state UGClosed; /* CIF Line (1150,350),(1150,400) */ /* CIF Input (1050,400) Right */ input newSignalState (t1, sigState); /* CIF Line (1150,500),(1150,550) */ /* CIF Task (1050,550) */ task tracks(t1)!sig := sigState; /* CIF Line (1150,650),(1150,700) */ /* CIF NextState (1050,700) */ nextstate UGClosed; /* CIF End State */ endstate; /* CIF End ProcessDiagram */ endprocess CrossingCtrlCtrl; /* CIF ProcedureDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\CrossingCtrl\checkForHalt.spd' */ /* CIF Specific SDT Page 1 Scale 100 Grid (250,150) AutoNumbered */ procedure checkForHalt; /* CIF DefaultSize (200,100) */ /* CIF Text (550,100) */ DCL i Integer := 0; /*RR DCL t CharString; RR*/ DCL te TrackEntryType; /* CIF End Text */ /* CIF CurrentPage 1 */ /* CIF ProcedureStart (50,250) */ start ; /* CIF Line (150,350),(150,400) */ /* CIF Task (50,400) */ task i:=0; /* CIF Line (150,500),(150,550) */ /* CIF Label Invisible */ grst46: /* CIF Decision (50,550) */ decision i> noOfTracks; /* CIF Answer InvisibleBrackets */ /* CIF Line (150,650),(150,700) */ /* CIF TextPosition (175,675) */ (false): /* CIF Task (50,700) */ task t1:='track'// (call integerToStr(i)) //instName; /* CIF Line (150,800),(150,850) */ /* CIF Task (50,850) */ task te := tracks(t1); /* CIF Line (150,950),(150,1000) */ /* CIF Decision (50,1000) */ decision te!sig =Go; /* CIF Answer InvisibleBrackets */ /* CIF Line (150,1100),(150,1150) */ /* CIF TextPosition (175,1125) */ (false): /* CIF Task (50,1150) */ task i:= i+1; /* CIF Line (150,1250),(150,1275),(25,1275),(25,525),(150,525),(150,550) */ /* CIF Answer Right InvisibleBrackets */ /* CIF Line (250,1050),(400,1050),(400,1150) */ /* CIF TextPosition (425,1075) */ (true): /* CIF Task (300,1150) */ task allHalt:= false; /* CIF Line (400,1250),(400,1300) */ /* CIF Return (350,1300),(100,100) */ return ; /* CIF End Decision */ enddecision; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (250,600),(400,600),(400,700) */ /* CIF TextPosition (425,625) */ (true): /* CIF Task (300,700) */ task allHalt:= True; /* CIF Line (400,800),(400,850) */ /* CIF Return (350,850),(100,100) */ return ; /* CIF End Decision */ enddecision; /* CIF Join Invisible */ join grst46; /* CIF End ProcedureDiagram */ endprocedure checkForHalt; /* CIF ProcedureDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\CrossingCtrl\sendGo.spd' */ /* CIF Specific SDT Page 1 Scale 100 Grid (250,150) AutoNumbered */ procedure sendGo ;RETURNS Boolean; /* CIF DefaultSize (200,100) */ /* CIF Text (550,100) */ DCL rB Boolean := false; DCL i Integer := 0; /*RR DCL t CharString; RR*/ DCL te TrackEntryType; /* CIF End Text */ /* CIF CurrentPage 1 */ /* CIF ProcedureStart (50,250) */ start ; /* CIF Line (150,350),(150,400) */ /* CIF Task (50,400) */ task i:=0; /* CIF Line (150,500),(150,550) */ /* CIF Label Invisible */ grst47: /* CIF Decision (50,550) */ decision i> noOfTracks; /* CIF Answer InvisibleBrackets */ /* CIF Line (150,650),(150,700) */ /* CIF TextPosition (175,675) */ (false): /* CIF Task (50,700) */ task t1:='track'// (call integerToStr(i)) //instName; /* CIF Line (150,800),(150,850) */ /* CIF Task (50,850) */ task te := tracks(t1); /* CIF Line (150,950),(150,1000) */ /* CIF Decision (50,1000) */ decision te!train; /* CIF Answer InvisibleBrackets */ /* CIF Line (150,1100),(150,1150) */ /* CIF TextPosition (175,1125) */ (false): /* CIF Task (50,1150) */ task i:= i+1; /* CIF Line (150,1250),(150,1275),(25,1275),(25,525),(150,525),(150,550) */ /* CIF Answer Right InvisibleBrackets */ /* CIF Line (250,1050),(400,1050),(400,1150) */ /* CIF TextPosition (425,1075) */ (true): /* CIF Output (300,1150) Right */ output setSignalState (t1, go) via a.i3; /* CIF Line (400,1250),(400,1300) */ /* CIF Task (300,1300) */ task rb:=True, i:=i+1; /* CIF Line (400,1400),(400,1425),(25,1425),(25,525),(150,525),(150,550) */ /* CIF End Decision */ enddecision; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (250,600),(400,600),(400,700) */ /* CIF TextPosition (425,625) */ (true): /* CIF Return (350,700),(100,100) */ return rB; /* CIF End Decision */ enddecision; /* CIF Join Invisible */ join grst47; /* CIF End ProcedureDiagram */ endprocedure sendGo; /* CIF ProcedureDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\CrossingCtrl\checkFastTrains.spd' */ /* CIF Specific SDT Page 1 Scale 100 Grid (250,150) AutoNumbered */ procedure checkFastTrains; /* CIF DefaultSize (200,100) */ /* CIF Text (550,100) */ DCL i Integer := 0; /*RR DCL t CharString; RR*/ DCL te TrackEntryType; /* CIF End Text */ /* CIF CurrentPage 1 */ /* CIF ProcedureStart (50,250) */ start ; /* CIF Line (150,350),(150,400) */ /* CIF Task (50,400) */ task i:=0; /* CIF Line (150,500),(150,550) */ /* CIF Label Invisible */ grst48: /* CIF Decision (50,550) */ decision i> noOfTracks; /* CIF Answer InvisibleBrackets */ /* CIF Line (150,650),(150,700) */ /* CIF TextPosition (175,675) */ (false): /* CIF Task (50,700) */ task t1:='track'// (call integerToStr(i)) //instName; /* CIF Line (150,800),(150,850) */ /* CIF Task (50,850) */ task te := tracks(t1); /* CIF Line (150,950),(150,1000) */ /* CIF Decision (50,1000) */ decision te!train; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (250,1050),(400,1050),(400,1150) */ /* CIF TextPosition (425,1075) */ (true): /* CIF Decision (300,1150) */ decision te!trType= fast; /* CIF Answer Left InvisibleBrackets */ /* CIF Line (300,1200),(150,1200),(150,1300) */ /* CIF TextPosition (300,1225) */ (false): /* CIF Answer InvisibleBrackets */ /* CIF Line (400,1250),(400,1300) */ /* CIF TextPosition (425,1275) */ (true): /* CIF Task (300,1300) */ task fastTrainWait:= True; /* CIF Line (400,1400),(400,1450) */ /* CIF Return (350,1450),(100,100) */ return ; /* CIF End Decision */ enddecision; /* CIF Answer InvisibleBrackets */ /* CIF Line (150,1100),(150,1300) */ /* CIF TextPosition (175,1125) */ (false): /* CIF End Decision */ enddecision; /* CIF Task (50,1300) */ task i:= i+1; /* CIF Line (150,1400),(150,1425),(25,1425),(25,525),(150,525),(150,550) */ /* CIF Answer Right InvisibleBrackets */ /* CIF Line (250,600),(400,600),(400,700) */ /* CIF TextPosition (425,625) */ (true): /* CIF Task (300,700) */ task fastTrainWait := False; /* CIF Line (400,800),(400,850) */ /* CIF Return (350,850),(100,100) */ return ; /* CIF End Decision */ enddecision; /* CIF Join Invisible */ join grst48; /* CIF End ProcedureDiagram */ endprocedure checkFastTrains; /* CIF PackageDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (150,150),(1600,2000) */ /* CIF PackageReference (175,25),(200,100) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\RWCrossing\RWCrossing.sun' */ /* CIF Specific SDT Page 1 Scale 100 Grid (50,50) AutoNumbered */ USE Utils; USE Project; USE EnvCrossing; USE CrossingCtrl; Package RWCrossing; /* CIF CurrentPage 1 */ /* CIF Text (600,550),(200,100) */ SIGNALLIST RWCrossingInp = go; /*RR SIGNALLIST RWCrossingOutp = dummy; */ /* CIF End Text */ /* CIF BlockType (250,500),(300,200) */ /* CIF TextPosition (275,575) */ block type RWCrossing referenced; /* CIF End PackageDiagram */ endpackage RWCrossing; /* CIF BlockTypeDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (150,150),(1600,2000) */ /* CIF BlockPage 2 (1900,2100) */ /* CIF Frame (250,100),(1400,1950) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\RWCrossing\RWCrossing.sbt' */ /* CIF Specific SDT Page 1 Scale 100 Grid (50,50) AutoNumbered */ /* CIF Specific SDT Page 2 Scale 80 Grid (50,50) AutoNumbered */ block type RWCrossing; /* CIF Gate (250,375),(100,375) */ /* CIF TextPosition (200,325) */ /* CIF TextPosition (125,400) SignalList1 */ gate oi in with (RWCrossingInp); /* CIF CurrentPage 1 */ /* CIF Text (500,600),(200,100) */ /* Signals to subobjects via a */ SIGNALLIST ai4 = (EnvCrossingInp) ; /* */ SIGNALLIST ai5 = (CrossingCtrlInp); /* CIF End Text */ /* CIF Text (500,800),(200,100) */ /* Signals from subobjects via b */ /*RR SIGNALLIST bi4 = (EnvCrossingOutp); RR*//* */ /*RR SIGNALLIST bi5 = (CrossingCtrlOutp); RR*/ /* CIF End Text */ /* CIF SubstructureDiagram Invisible */ substructure RWCrossing; /* CIF CurrentPage 2 */ /* CIF Channel (250,375),(650,375) */ /* CIF TextPosition (272,324) */ /* CIF TextPosition (350,400) SignalList1 */ /* CIF Arrow1Position (350,375) */ channel oi from env via oi to RWCrossingCtrl with (RWCrossingInp); endchannel oi; /* CIF Channel (650,475),(275,475),(275,1350),(650,1350) */ /* CIF TextPosition (300,1300) */ /* CIF TextPosition (441,1375) SignalList1 */ /* CIF Arrow1Position (560,1350) */ channel a.i4 from RWCrossingCtrl to ec1 via oi with (ai4); endchannel a.i4; /* CIF Channel (650,475),(275,475),(275,1500),(650,1500) */ /* CIF TextPosition (300,1450) */ /* CIF TextPosition (450,1525) SignalList1 */ /* CIF Arrow1Position (556,1500) */ channel a.i5 from RWCrossingCtrl to cc1 via oi with (ai5); endchannel a.i5; /* CIF Block (650,350),(650,150) */ /* CIF TextPosition (725,400) */ block RWCrossingCtrl referenced; /* CIF Block (650,1300),(550,100) */ /* CIF TextPosition (725,1325) */ /* CIF GateReference (650,1350) */ /* CIF TextPosition (675,1325) */ block ec1:EnvCrossing; /* CIF Block (650,1450),(550,100) */ /* CIF TextPosition (737,1488) */ /* CIF GateReference (650,1500) */ /* CIF TextPosition (675,1475) */ block cc1:CrossingCtrl; /* CIF End SubstructureDiagram */ endsubstructure RWCrossing; /* CIF End BlockTypeDiagram */ endblock type RWCrossing; /* CIF BlockDiagram */ /* CIF Page 1 (1900,2100) */ /* CIF Frame (150,150),(1600,1700) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\RWCrossing\RWCrossingCtrl.sbk' */ /* CIF Specific SDT Page 1 Scale 80 Grid (50,50) AutoNumbered */ Block RWCrossingCtrl; /* CIF CurrentPage 1 */ /* CIF Text (500,250),(200,100) */ SIGNALLIST aOut=(ai4),(ai5); /*RR SIGNALLIST bIn= (bi4), (bi5); RR*/ /* CIF End Text */ /* CIF SignalRoute (150,700),(650,700) */ /* CIF TextPosition (175,650) */ /* CIF TextPosition (175,725) SignalList1 */ signalroute oi from env to RWCrossingCtrl with (RWCrossingInp); /* CIF SignalRoute (650,850),(150,850) */ /* CIF TextPosition (425,800) */ /* CIF TextPosition (400,875) SignalList1 */ signalroute a from RWCrossingCtrl to env with (aOut); /* CIF Process (650,650),(600,250) */ /* CIF TextPosition (675,750) */ process RWCrossingCtrl referenced; /* CIF Connect */ /* CIF TextPosition (75,675) */ connect oi and oi; /* CIF Connect */ /* CIF TextPosition (50,800) */ connect a.i4, a.i5 and a; /* CIF End BlockDiagram */ endblock RWCrossingCtrl; /* CIF ProcessDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Page 2 (4550,2200) */ /* CIF Frame (0,0),(4550,2200) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\RWCrossing\RWCrossingCtrl.spr' */ /* CIF Specific SDT Page 1 Scale 100 Grid (250,150) AutoNumbered */ /* CIF Specific SDT Page 2 Scale 100 Grid (250,150) AutoNumbered */ process RWCrossingCtrl; /* CIF DefaultSize (200,100) */ /* CIF CurrentPage 1 */ /* CIF Text (550,100) */ DCL instName Charstring; /* CIF End Text */ /* CIF CurrentPage 2 */ /* CIF Text (550,100) */ DCL ps Charstring; DCL ts1 Charstring; DCL ts2 Charstring; DCL str Charstring; DCL int Integer; DCL td TrackDurationType; DCL dur Duration; /* CIF End Text */ /* CIF Text (550,850) */ /* Environment and Ctrl: Init */ /* CIF End Text */ /* CIF Text (1300,850) */ /* Environment: Cars */ /* CIF End Text */ /* CIF Text (2300,850) */ /* Environment: Trains */ /* CIF End Text */ /* CIF Procedure (1050,100),(350,150) */ /* CIF TextPosition (1131,137) */ EXPORTED procedure setPhysVal referenced; /* CIF CurrentPage 1 */ /* CIF Start (300,400) */ start ; /* CIF Line (400,500),(400,550) */ /* CIF NextState (300,550) */ nextstate Init; /* CIF State (300,550) */ state Init; /* CIF Line (400,650),(400,700) */ /* CIF Input (300,700) Right */ input go (instName); /* CIF Line (400,800),(400,850) */ /* CIF ProcedureCall (300,850) */ call announceInstance (self, instName); /* CIF Line (400,950),(400,1000) */ /* CIF Output (300,1000) Right */ output go ('ec1'//instName) via a.i4; /* CIF Line (400,1100),(400,1150) */ /* CIF Output (300,1150) Right */ output go ('cc1'//instName) via a.i5; /* CIF Line (400,1250),(400,1300) */ /* CIF NextState (300,1300) */ nextstate idle; /* CIF End State */ endstate; /* CIF State (550,550) */ state idle; /* CIF End State */ endstate; /* CIF CurrentPage 2 */ /* CIF State (50,250) */ state *; /* CIF Line (150,350),(150,400) */ /* CIF Input (50,400) Right */ input setPhysVal; /* CIF Line (150,500),(150,550) */ /* CIF ProcedureCall (50,550) */ call printIt('PANEL :'// ps, NOW); /* CIF Line (150,650),(150,700) */ /* CIF Task (50,700) */ task ts1 := call to1stString(ps); /* CIF Line (150,800),(150,850) */ /* CIF Task (50,850) */ task ts2 := call to2ndString(ps); /* CIF Line (150,950),(150,1000) */ /* CIF Decision (50,1000) */ decision ts1; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (250,1050),(650,1050),(650,1150) */ /* CIF TextPosition (675,1075) */ ('initTracks'): /* CIF Task (550,1150) */ task ts1:= call to1stString(ts2); /* CIF Line (650,1250),(650,1300) */ /* CIF Task (550,1300) */ task int := call toInteger(ts1); /* CIF Line (650,1400),(650,1450) */ /* CIF Task (550,1450) */ task ts2 := call to2ndString(ts2); /* CIF Line (650,1550),(650,1575),(775,1575),(775,1125),(900,1125),(900,1150) */ /* CIF Task (800,1150) */ task ts1:= call to1stString(ts2); /* CIF Line (900,1250),(900,1300) */ /* CIF Task (800,1300) */ task dur := call toDuration(ts1); /* CIF Line (900,1400),(900,1450) */ /* CIF Task (800,1450) */ task ts2 := call to2ndString(ts2); /* CIF Line (900,1550),(900,1575),(1025,1575),(1025,1125),(1150,1125),(1150,1150) */ /* CIF Task (1050,1150) */ task td := toTrackDurationType(ts2); /* CIF Line (1150,1250),(1150,1600) */ /* CIF Output (1050,1600) Right */ output initTracks( int, td, dur) via all a.i5, a.i4; /* CIF Line (1150,1700),(1150,1750) */ /* CIF NextState (1050,1750) */ nextstate -; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (250,1050),(1400,1050),(1400,1150) */ /* CIF TextPosition (1425,1075) */ ('setPeriod'): /* CIF Task (1300,1150) */ task ts1:= call to1stString(ts2); /* CIF Line (1400,1250),(1400,1300) */ /* CIF Task (1300,1300) */ task dur := call toDuration(ts1); /* CIF Line (1400,1400),(1400,1600) */ /* CIF Output (1300,1600) Right */ output setPeriod(dur) via a.i4; /* CIF Line (1400,1700),(1400,1750) */ /* CIF NextState (1300,1750) */ nextstate -; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (250,1050),(1650,1050),(1650,1150) */ /* CIF TextPosition (1675,1075) */ ('setDecrPer'): /* CIF Task (1550,1150) */ task ts1:= call to1stString(ts2); /* CIF Line (1650,1250),(1650,1300) */ /* CIF Task (1550,1300) */ task dur := call toDuration(ts1); /* CIF Line (1650,1400),(1650,1600) */ /* CIF Output (1550,1600) Right */ output setDecrPer(dur) via a.i4; /* CIF Line (1650,1700),(1650,1750) */ /* CIF NextState (1550,1750) */ nextstate -; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (250,1050),(1900,1050),(1900,1150) */ /* CIF TextPosition (1925,1075) */ ('genCars'): /* CIF Task (1800,1150) */ task ts1:= call to1stString(ts2); /* CIF Line (1900,1250),(1900,1300) */ /* CIF Task (1800,1300) */ task int := call toInteger(ts1); /* CIF Line (1900,1400),(1900,1600) */ /* CIF Output (1800,1600) Right */ output genCars(int) via a.i4; /* CIF Line (1900,1700),(1900,1750) */ /* CIF NextState (1800,1750) */ nextstate -; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (250,1050),(2400,1050),(2400,1150) */ /* CIF TextPosition (2425,1075) */ ('setPerToCreTrain'): /* CIF Task (2300,1150) */ task ts1:= call to1stString(ts2); /* CIF Line (2400,1250),(2400,1300) */ /* CIF Task (2300,1300) */ task str := ts1; /* CIF Line (2400,1400),(2400,1450) */ /* CIF Task (2300,1450) */ task ts2 := call to2ndString(ts2); /* CIF Line (2400,1550),(2400,1575),(2525,1575),(2525,1125),(2650,1125),(2650,1150) */ /* CIF Task (2550,1150) */ task ts1:= call to1stString(ts2); /* CIF Line (2650,1250),(2650,1300) */ /* CIF Task (2550,1300) */ task dur := call toDuration(ts1); /* CIF Line (2650,1400),(2650,1600) */ /* CIF Output (2550,1600) Right */ output setPerToCreTrain(str//'ec1obj1', dur) via a.i4; /* CIF Line (2650,1700),(2650,1750) */ /* CIF NextState (2550,1750) */ nextstate -; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (250,1050),(3150,1050),(3150,1150) */ /* CIF TextPosition (3175,1075) */ ('creNewTrain'): /* CIF Task (3050,1150) */ task ts1:= call to1stString(ts2); /* CIF Line (3150,1250),(3150,1300) */ /* CIF Task (3050,1300) */ task str := ts1; /* CIF Line (3150,1400),(3150,1600) */ /* CIF Output (3050,1600) Right */ output creNewTrain(str//'ec1obj1') via a.i4; /* CIF Line (3150,1700),(3150,1750) */ /* CIF NextState (3050,1750) */ nextstate -; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (250,1050),(3650,1050),(3650,1150) */ /* CIF TextPosition (3675,1075) */ ('setStrategy'): /* CIF Task (3550,1150) */ task ts1:= call to1stString(ts2); /* CIF Line (3650,1250),(3650,1300) */ /* CIF Output (3550,1300) Right */ output setStrategy( ts1) via a.i5; /* CIF Line (3650,1400),(3650,1450) */ /* CIF NextState (3550,1450) */ nextstate -; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (250,1050),(400,1050),(400,1300) */ /* CIF TextPosition (425,1075) */ ('initTracksDone'): /* CIF Output (300,1300) Right */ output initTracksDone via all a.i5, a.i4; /* CIF Line (400,1400),(400,1450) */ /* CIF NextState (300,1450) */ nextstate -; /* CIF Answer InvisibleBrackets */ /* CIF Line (150,1100),(150,1600) */ /* CIF TextPosition (175,1150) */ ('demo'): /* CIF Output (50,1600) Right */ output initTracks( 5, (. regular, 180, 30, 60, 5, 10 .), 90) via all a.i5, a.i4; /* CIF Line (150,1700),(150,1750) */ /* CIF Output (50,1750) Right */ output initTracks( 5, (. fast, 90, 15, 30, 5, 10 .), 45) via all a.i5, a.i4; /* CIF Line (150,1850),(150,1900) */ /* CIF Output (50,1900) Right */ output initTracksDone via all a.i5, a.i4; /* CIF Line (150,2000),(150,2050) */ /* CIF NextState (50,2050) */ nextstate -; /* CIF Answer Right */ /* CIF Line (250,1050),(4400,1050),(4400,1450) */ /* CIF TextPosition (4425,1075) */ else: /* CIF ProcedureCall (4300,1450) */ call putPanelVal (instName, 'ERROR: unrecognized signal'); /* CIF Line (4400,1550),(4400,1750) */ /* CIF NextState (4300,1750) */ nextstate -; /* CIF End Decision */ enddecision; /* CIF End State */ endstate; /* CIF End ProcessDiagram */ endprocess RWCrossingCtrl; /* CIF ProcedureDiagram */ /* CIF Page 1 (1900,2000) */ /* CIF Frame (0,0),(1900,1750) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\RWCrossing\setPhysVal1.spd' */ /* CIF Specific SDT Page 1 Scale 100 Grid (250,150) AutoNumbered */ Procedure setPhysVal ;FPAR IN newValue CharString; /* CIF DefaultSize (200,100) */ /* CIF CurrentPage 1 */ /* CIF ProcedureStart (300,250) */ start ; /* CIF Line (400,350),(400,400) */ /* CIF Extendedtask (300,400) */ task {ps := newValue;}; /* CIF Line (400,500),(400,550) */ /* CIF Return (350,550),(100,100) */ return ; /* CIF End ProcedureDiagram */ endprocedure setPhysVal; /* CIF SystemDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (150,150),(1600,2000) */ /* CIF PackageReference (175,-25),(200,100) */ /* CIF Page 2 (1900,2300) */ /* CIF Frame (150,150),(1600,2000) */ /* CIF PackageReference (175,-25),(200,100) */ /* CIF Page 3 (1900,2000) */ /* CIF Frame (150,200),(1600,1800) */ /* CIF PackageReference (175,25),(200,100) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\GenSys\GenSys1.ssy' */ /* CIF Specific SDT Page 1 Scale 84 Grid (50,50) AutoNumbered */ /* CIF Specific SDT Page 2 Scale 100 Grid (50,50) AutoNumbered */ /* CIF Specific SDT Page 3 ShowMeFirst Scale 80 Grid (50,50) AutoNumbered */ USE Utils; USE RWCrossing; USE Project; System GenSys1; /* CIF CurrentPage 1 */ /* CIF Text (500,200),(200,100) */ SIGNAL physValIn (CharString, CharString); SIGNAL physServerValIn (CharString, CharString); SIGNAL protoStubSignalIn(Charstring, Charstring); SIGNAL protoDriverSignalIn(Charstring, Charstring); SIGNALLIST envInp = physValIn, physServerValIn, protoStubSignalIn, protoDriverSignalIn; /*RR SIGNALLIST envOutp = dummy; RR*/ SIGNALLIST ctrlInp= (ProtoDriverInp); /* CIF End Text */ /* CIF Text (200,600),(200,100) */ /* Procedure to check inputs at the sockets, to be used periodically */ procedure checkSockets; returns INTEGER; EXTERNAL; /*#CODE #HEADING extern int checkSockets(); */ /* CIF End Text */ /* CIF Text (900,600),(200,100) */ /* Procedure to make the connections to the environment */ procedure initSockets; fpar in startTimeOffset Time; returns Integer; EXTERNAL; /*#CODE #HEADING extern int initSockets(SDL_Time startTimeOffset); */ /* CIF End Text */ /* CIF Text (200,950),(200,100) */ /* Procedure to set an analog physical value */ /*RR procedure setAnOutVal; FPAR IN actId CharString, IN val Analog; returns Integer; EXTERNAL; RR*/ /* RR*//*RR #CODE #HEADING extern int setAnOutVal(SDL_Charstring, #(Analog)); */ /* CIF End Text */ /* CIF Text (950,1000),(200,100) */ /* Procedure to get a physical value */ procedure sendPhysVal; FPAR IN actId CharString, outVal Charstring; returns Integer; EXTERNAL; /*#CODE #HEADING extern int sendPhysVal(SDL_Charstring, SDL_Charstring); */ /* CIF End Text */ /* CIF Text (200,1400),(200,100) */ /* Procedure to set the physical event mode */ procedure setPhysEventOut; FPAR IN actId CharString; returns Integer; EXTERNAL; /*#CODE #HEADING extern int setPhysEventOut(SDL_Charstring); */ /* CIF End Text */ /* CIF Text (1050,1700),(200,100) */ /* Procedure to set a panel value */ procedure setPanOutVal; FPAR IN actId CharString, IN val CharString; returns Integer; EXTERNAL; /*#CODE #HEADING extern int setPanOutVal(SDL_Charstring, SDL_Charstring); */ /* CIF End Text */ /* CIF Text (250,1750),(200,100) */ /* Procedure to send a physical value to clients connected to physical server port */ procedure reqPhysVal; FPAR IN actId CharString; returns Integer; EXTERNAL; /*#CODE #HEADING extern int reqPhysVal(SDL_Charstring); */ /* CIF End Text */ /* CIF CurrentPage 2 */ /* CIF Text (550,200),(200,100) */ /* procedure to request data for time-step (using ControlFI2) */ procedure reqPhysData; fpar in actId Charstring, in timeValue Charstring; returns Integer; EXTERNAL; /*#CODE #HEADING extern int reqPhysData(SDL_Charstring, SDL_Charstring); */ /* CIF End Text */ /* CIF Text (550,650),(200,100) */ /* procedure to write data (using ControlFI2) for current time-step */ procedure setPhysData; fpar in actId Charstring, in param Charstring, in val Charstring, in timeStamp Charstring; returns Integer; EXTERNAL; /*#CODE #HEADING extern int setPhysData(SDL_Charstring, SDL_Charstring, SDL_Charstring , SDL_Charstring); */ /* CIF End Text */ /* CIF Text (200,1200),(200,100) */ /* DISTRIBUTION */ /* CIF End Text */ /* CIF Text (1000,1350),(200,100) */ /* Procedure to send a protostub signal (C-function) */ procedure sendProtoStubSignal; fpar in actId Charstring, in name Charstring, in params Charstring; returns Integer; EXTERNAL; /*#CODE #HEADING extern int sendProtoStubSignal(SDL_Charstring, SDL_Charstring, SDL_Charstring); */ /* CIF End Text */ /* CIF CurrentPage 3 */ /* CIF Text (400,1250),(200,100) */ /* is sent from ProtoCtrl to ProtoDriver upon reception of a serialized signal from a remote partition containing a ProtoStub */ SIGNAL setProtoDriverSignal(Charstring, Charstring); SIGNALLIST ProtoDriverInp = setProtoDriverSignal; /* CIF End Text */ /* CIF Channel (150,425),(700,425) */ /* CIF TextPosition (450,350) */ /* CIF TextPosition (300,450) SignalList1 */ /* CIF Arrow1Position (287,425) */ channel pin1 from env to ProtoCtrl with (envInp); endchannel pin1; /* CIF Channel (925,500),(925,700) */ /* CIF TextPosition (775,575) */ /* CIF TextPosition (600,648) SignalList1 */ /* CIF Arrow1Position (925,676) */ channel a.i1 from ProtoCtrl to obj1 via oi with (RWCrossingInp); endchannel a.i1; /* CIF Block (700,350),(500,150) */ /* CIF TextPosition (850,400) */ block ProtoCtrl referenced; /* CIF Block (650,700),(550,100) */ /* CIF TextPosition (725,725) */ /* CIF GateReference (925,700) */ /* CIF TextPosition (900,725) */ block obj1:RWCrossing; /* CIF End SystemDiagram */ endsystem GenSys1; /* CIF BlockDiagram */ /* CIF Page 1 (1900,2000) */ /* CIF Frame (150,150),(1550,1100) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\GenSys\ProtoCtrl.sbk' */ /* CIF Specific SDT Page 1 Scale 80 Grid (50,50) AutoNumbered */ Block ProtoCtrl; /* CIF CurrentPage 1 */ /* CIF SignalRoute (150,500),(750,500) */ /* CIF TextPosition (195,450) */ /* CIF TextPosition (300,525) SignalList1 */ signalroute pin2 from env to ProtoCtrl with (envInp); /* CIF SignalRoute (925,650),(925,900) */ /* CIF TextPosition (950,725) */ /* CIF TextPosition (975,825) SignalList1 */ signalroute cin2 from ProtoCtrl to ProtoDriverCtrl with (ctrlInp); /* CIF SignalRoute (900,1100),(900,1250) */ /* CIF TextPosition (800,1125) */ /* CIF TextPosition (925,1175) SignalList1 */ signalroute a from ProtoDriverCtrl to env with (RWCrossingInp); /* CIF Process (750,450),(300,200) */ /* CIF TextPosition (775,525) */ process ProtoCtrl referenced; /* CIF Process (750,900),(300,200) */ /* CIF TextPosition (750,980) */ process ProtoDriverCtrl referenced; /* CIF Connect */ /* CIF TextPosition (75,475) */ connect pin1 and pin2; /* CIF Connect */ /* CIF TextPosition (875,1275) */ connect a.i1 and a; /* CIF End BlockDiagram */ endblock ProtoCtrl; /* CIF ProcessDiagram */ /* CIF ServicePage 1 (1900,2300) */ /* CIF Frame (150,150),(1600,2000) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\GenSys\ProtoCtrl.spr' */ /* CIF Specific SDT Page 1 Scale 100 Grid (50,50) AutoNumbered */ Process ProtoCtrl; /* CIF Text (500,200),(200,100) */ DCL nameDict DictNameType:= (. NULL .); DCL pidDict DictPIDType:= (. '' .); /* CIF End Text */ /* CIF Text (1150,200),(200,100) */ NEWTYPE DictNameType ARRAY (CharString, PID) ENDNEWTYPE; NEWTYPE DictPIDType ARRAY (PID, CharString) ENDNEWTYPE; /* CIF End Text */ /* CIF Text (200,400),(200,100) */ SIGNAL setPhysValCall(Charstring, Charstring); SIGNAL setSignalValCall(Charstring, Charstring, Charstring); SIGNAL setPhysServerValCall(Charstring, Charstring); /* CIF End Text */ /* CIF CurrentPage 1 */ /* CIF SignalRoute (800,750),(800,1200) */ /* CIF TextPosition (825,1000) */ /* CIF TextPosition (825,1100) SignalList1 */ signalroute cLoc3 from OutServ to InServ with setPhysValCall, setSignalValCall, setPhysServerValCall; /* CIF SignalRoute (850,750),(850,950),(1625,950),(1625,1250),(1750,1300) */ /* CIF TextPosition (1200,900) */ /* CIF TextPosition (1075,975) SignalList1 */ signalroute cIn3b from OutServ to env with setProtoDriverSignal; /* CIF SignalRoute (150,1300),(700,1300) */ /* CIF TextPosition (450,1225) */ /* CIF TextPosition (425,1350) SignalList1 */ signalroute pIn3 from env to InServ with (envInp); /* CIF SignalRoute (1000,1300),(1750,1300) */ /* CIF TextPosition (1400,1225) */ /* CIF TextPosition (1450,1325) SignalList1 */ signalroute cIn3a from InServ to env with (ctrlInp); /* CIF Connect */ /* CIF TextPosition (75,1275) */ connect pIn2 and pIn3; /* CIF Connect */ /* CIF TextPosition (1775,1275) */ connect cIn2 and cIn3b, cIn3a; /* CIF Service (700,1200),(300,200) */ /* CIF TextPosition (800,1275) */ service InServ referenced; /* CIF Service (700,1700),(300,200) */ /* CIF TextPosition (750,1775) */ service GlobServ referenced; /* CIF Service (700,550),(300,200) */ /* CIF TextPosition (775,625) */ service OutServ referenced; /* CIF End ProcessDiagram */ endprocess ProtoCtrl; /* CIF ServiceDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Page 2 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Page 3 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Page 4 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Page 5 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Page 6 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Page 7 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Page 8 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Page 9 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Page 10 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\GenSys\OutServ.ssv' */ /* CIF Specific SDT Page 1 Scale 100 Grid (250,150) AutoNumbered */ /* CIF Specific SDT Page 2 Scale 100 Grid (250,150) AutoNumbered */ /* CIF Specific SDT Page 3 Scale 100 Grid (250,150) AutoNumbered */ /* CIF Specific SDT Page 4 Scale 100 Grid (250,150) AutoNumbered */ /* CIF Specific SDT Page 5 Scale 100 Grid (250,150) AutoNumbered */ /* CIF Specific SDT Page 6 Scale 100 Grid (250,150) AutoNumbered */ /* CIF Specific SDT Page 7 Scale 100 Grid (250,150) AutoNumbered */ /* CIF Specific SDT Page 8 Scale 100 Grid (250,150) AutoNumbered */ /* CIF Specific SDT Page 9 Scale 100 Grid (250,150) AutoNumbered */ /* CIF Specific SDT Page 10 Scale 100 Grid (250,150) AutoNumbered */ Service OutServ; /* CIF DefaultSize (200,100) */ /* CIF CurrentPage 1 */ /* CIF Text (550,250) */ DCL actId Charstring; DCL sendReply Integer; DCL errorString Charstring := 'ERROR: socket communication failed'; /* CIF End Text */ /* CIF CurrentPage 2 */ /* CIF Text (1050,1300) */ /* RPC setPhysVal must be called from outside OutServ! Otherwise, deadlocks will be created! */ /* CIF End Text */ /* CIF CurrentPage 3 */ /* CIF Text (300,100) */ DCL anVal Analog; DCL t1, t2 CharString; DCL instPID PID; /* CIF End Text */ /* CIF CurrentPage 5 */ /* CIF Text (1050,400) */ DCL outVal Charstring; /* CIF End Text */ /* CIF CurrentPage 6 */ /* CIF Text (1300,400) */ DCL panOutVal CharString; /* CIF End Text */ /* CIF Text (800,700) */ /* no error message is sent to PanelCtrl because no acknowledge from panel is expected! */ /* CIF End Text */ /* CIF CurrentPage 7 */ /* CIF Text (1300,250) */ DCL name, params Charstring; /* CIF End Text */ /* CIF Text (1050,400) */ /*RR This page contained the handling of newProtoDriverSignal(name, params) but this signal is never output. There the code on this page was removed RR*/ /* CIF End Text */ /* CIF CurrentPage 8 */ /* CIF Text (1050,1150) */ /* empty signal names are invalid and are therefore used to denote an error */ /* CIF End Text */ /* CIF CurrentPage 9 */ /* CIF Text (1300,400) */ DCL timeValue Charstring; /* CIF End Text */ /* CIF Text (1050,700) */ /* no error message is sent to BlkCtrl because no acknowledge from ControlFI2 is expected! */ /* CIF End Text */ /* CIF CurrentPage 10 */ /* CIF Text (1300,400) */ DCL paramName, value Charstring; DCL timeStamp Charstring; /* CIF End Text */ /* CIF Text (1050,700) */ /* no error message is sent to BlkCtrl because no acknowledge from ControlFI2 is expected! */ /* CIF End Text */ /* CIF CurrentPage 2 */ /* CIF Procedure (1300,100),(450,150) */ /* CIF TextPosition (1362,138) */ EXPORTED procedure setPhysEventMode referenced; /* CIF CurrentPage 3 */ /* CIF Procedure (800,100),(450,150) */ /* CIF TextPosition (875,125) */ EXPORTED procedure putAnalogVal referenced; /* CIF CurrentPage 4 */ /* CIF Procedure (1300,100),(350,150) */ /* CIF TextPosition (1362,137) */ EXPORTED procedure pollPhysVal referenced; /* CIF CurrentPage 5 */ /* CIF Procedure (1300,100),(300,150) */ /* CIF TextPosition (1362,137) */ EXPORTED procedure putPhysServerVal referenced; /* CIF CurrentPage 6 */ /* CIF Procedure (1300,100),(400,150) */ /* CIF TextPosition (1400,138) */ EXPORTED procedure putPanelVal referenced; /* CIF CurrentPage 8 */ /* CIF Procedure (1300,100),(400,150) */ /* CIF TextPosition (1350,125) */ EXPORTED procedure putProtoStubSignal referenced; /* CIF CurrentPage 9 */ /* CIF Procedure (1300,100),(350,150) */ /* CIF TextPosition (1380,137) */ EXPORTED procedure pollPhysData referenced; /* CIF CurrentPage 10 */ /* CIF Procedure (1300,100),(350,150) */ /* CIF TextPosition (1381,137) */ EXPORTED procedure putPhysData referenced; /* CIF CurrentPage 1 */ /* CIF Start (50,250) */ start ; /* CIF Line (150,350),(150,400) */ /* CIF NextState (50,400) */ nextstate ready; /* CIF CurrentPage 2 */ /* CIF State (550,400) */ state ready; /* CIF Line (650,500),(650,550) */ /* CIF Input (550,550) Right */ input PROCEDURE setPhysEventMode; /* CIF Line (650,650),(650,700) */ /* CIF Task (550,700) */ task sendReply := call setPhysEventOut (actId); /* CIF Line (650,800),(650,850) */ /* CIF Decision (550,850) */ decision sendReply; /* CIF Answer InvisibleBrackets */ /* CIF Line (650,950),(650,1150) */ /* CIF TextPosition (675,975) */ (1): /* CIF Answer Right */ /* CIF Line (750,900),(900,900),(900,1000) */ /* CIF TextPosition (925,925) */ else: /* CIF Output (800,1000) Right */ output setPhysValCall (actId, errorString); /* CIF Line (900,1100),(900,1125),(650,1125),(650,1150) */ /* CIF End Decision */ enddecision; /* CIF NextState (550,1150) */ nextstate ready; /* CIF End State */ endstate; /* CIF CurrentPage 3 */ /* CIF State (50,250) */ state ready; /* CIF Line (150,350),(150,400) */ /* CIF Input (50,400) Right */ input PROCEDURE putAnalogVal; /* CIF Line (150,500),(150,550) */ /* CIF Task (50,550) */ task t1 := call cutLastId (actId); /* CIF Line (150,650),(150,700) */ /* CIF Task (50,700) */ task t2 := call getLastId (t1); /* CIF Line (150,800),(150,850) */ /* CIF Decision (50,850) */ decision t2; /* CIF Answer InvisibleBrackets */ /* CIF Line (150,950),(150,1000) */ /* CIF TextPosition (175,950) */ ('cc1'): /* CIF Task (50,1000) */ task t2 := call cutLastId (t1); /* CIF Line (150,1100),(150,1150) */ /* CIF Task (50,1150) */ task t2 := t2//'ec1obj1'; /* CIF Line (150,1250),(150,1300) */ /* CIF Answer Right InvisibleBrackets */ /* CIF Line (250,900),(400,900),(400,1000) */ /* CIF TextPosition (425,925) */ ('ec1'): /* CIF Task (300,1000) */ task t2 := call cutLastId (t1); /* CIF Line (400,1100),(400,1150) */ /* CIF Task (300,1150) */ task t2 := t2//'cc1obj1'; /* CIF Line (400,1250),(400,1275),(150,1275),(150,1300) */ /* CIF Answer Right */ /* CIF Line (250,900),(900,900),(900,1000) */ /* CIF TextPosition (925,925) */ else: /* CIF ProcedureCall (800,1000) */ call printIt(actId//' ERROR in putAnalogVal: '// 'wrong process instance', NOW); /* CIF Line (900,1100),(900,1150) */ /* CIF NextState (800,1150) */ nextstate ready; /* CIF End Decision */ enddecision; /* CIF Task (50,1300) */ task instPID := call getPID (t2); /* CIF Line (150,1400),(150,1450) */ /* CIF Decision (50,1450) */ decision instPID; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (250,1500),(650,1500),(650,1600) */ /* CIF TextPosition (675,1525) */ (NULL): /* CIF ProcedureCall (550,1600) */ call printIt(actId//' ERROR in putAnalogVal: '// 'no matching process instance '// t2 //' found', NOW); /* CIF Line (650,1700),(650,1750) */ /* CIF NextState (550,1750) */ nextstate ready; /* CIF Answer */ /* CIF Line (150,1550),(150,1600) */ /* CIF TextPosition (175,1575) */ else: /* CIF Output (50,1600) Right */ output setPhysValCall (t2, call realToStr(anVal)); /* CIF Line (150,1700),(150,1750) */ /* CIF NextState (50,1750) */ nextstate ready; /* CIF End Decision */ enddecision; /* CIF End State */ endstate; /* CIF CurrentPage 4 */ /* CIF State (550,400) */ state ready; /* CIF Line (650,500),(650,550) */ /* CIF Input (550,550) Right */ input PROCEDURE pollPhysVal; /* CIF Line (650,650),(650,700) */ /* CIF Task (550,700) */ task sendReply := call reqPhysVal(actId); /* CIF Line (650,800),(650,850) */ /* CIF Decision (550,850) */ decision sendReply; /* CIF Answer InvisibleBrackets */ /* CIF Line (650,950),(650,1150) */ /* CIF TextPosition (675,975) */ (1): /* CIF Answer Right */ /* CIF Line (750,900),(900,900),(900,1000) */ /* CIF TextPosition (925,925) */ else: /* CIF Output (800,1000) Right */ output setPhysValCall (actId, errorString); /* CIF Line (900,1100),(900,1125),(650,1125),(650,1150) */ /* CIF End Decision */ enddecision; /* CIF NextState (550,1150) */ nextstate ready; /* CIF End State */ endstate; /* CIF CurrentPage 5 */ /* CIF State (550,400) */ state ready; /* CIF Line (650,500),(650,550) */ /* CIF Input (550,550) Right */ input PROCEDURE putPhysServerVal; /* CIF Line (650,650),(650,700) */ /* CIF Task (550,700) */ task sendReply := call sendPhysVal(actId, outVal); /* CIF Line (650,800),(650,850) */ /* CIF Decision (550,850) */ decision sendReply; /* CIF Answer InvisibleBrackets */ /* CIF Line (650,950),(650,1300) */ /* CIF TextPosition (675,975) */ (1): /* CIF Answer Right */ /* CIF Line (750,900),(900,900),(900,1000) */ /* CIF TextPosition (925,925) */ else: /* CIF Output (800,1000) Right */ output setPhysServerValCall (actId, errorString); /* CIF Line (900,1100),(900,1125),(650,1125),(650,1300) */ /* CIF End Decision */ enddecision; /* CIF NextState (550,1300) */ nextstate ready; /* CIF End State */ endstate; /* CIF CurrentPage 6 */ /* CIF State (550,400) */ state ready; /* CIF Line (650,500),(650,550) */ /* CIF Input (550,550) Right */ input PROCEDURE putPanelVal; /* CIF Line (650,650),(650,700) */ /* CIF Task (550,700) */ task sendReply := call setPanOutVal (actId, panOutVal); /* CIF Line (650,800),(650,850) */ /* CIF NextState (550,850) */ nextstate ready; /* CIF End State */ endstate; /* CIF CurrentPage 7 */ /* CIF CurrentPage 8 */ /* CIF State (550,400) */ state ready; /* CIF Line (650,500),(650,550) */ /* CIF Input (550,550) Right */ input PROCEDURE putProtoStubSignal; /* CIF Line (650,650),(650,700) */ /* CIF Task (550,700) */ task sendReply := call sendProtoStubSignal (actId, name, params); /* CIF Line (650,800),(650,850) */ /* CIF Decision (550,850) */ decision sendReply; /* CIF Answer InvisibleBrackets */ /* CIF Line (650,950),(650,1150) */ /* CIF TextPosition (675,975) */ (1): /* CIF Answer Right */ /* CIF Line (750,900),(900,900),(900,1000) */ /* CIF TextPosition (925,925) */ else: /* CIF Output (800,1000) Right */ output setSignalValCall (actId, '', ''); /* CIF Line (900,1100),(900,1125),(650,1125),(650,1150) */ /* CIF End Decision */ enddecision; /* CIF NextState (550,1150) */ nextstate ready; /* CIF End State */ endstate; /* CIF CurrentPage 9 */ /* CIF State (550,400) */ state ready; /* CIF Line (650,500),(650,550) */ /* CIF Input (550,550) Right */ input PROCEDURE pollPhysData; /* CIF Line (650,650),(650,700) */ /* CIF Task (550,700) */ task sendReply := call reqPhysData (actId, timeValue); /* CIF Line (650,800),(650,850) */ /* CIF NextState (550,850) */ nextstate ready; /* CIF End State */ endstate; /* CIF CurrentPage 10 */ /* CIF State (550,400) */ state ready; /* CIF Line (650,500),(650,550) */ /* CIF Input (550,550) Right */ input PROCEDURE putPhysData; /* CIF Line (650,650),(650,700) */ /* CIF Task (550,700) */ task sendReply := call setPhysData (actId, paramName, value, timeStamp); /* CIF Line (650,800),(650,850) */ /* CIF NextState (550,850) */ nextstate ready; /* CIF End State */ endstate; /* CIF End ServiceDiagram */ endservice OutServ; /* CIF ProcedureDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\GenSys\setPhysEventMode.spd' */ /* CIF Specific SDT Page 1 Scale 100 Grid (250,150) AutoNumbered */ Procedure setPhysEventMode ;FPAR IN newActId CharString; /* CIF DefaultSize (200,100) */ /* CIF CurrentPage 1 */ /* CIF ProcedureStart (300,250) */ start ; /* CIF Line (400,350),(400,400) */ /* CIF Task (300,400) */ task actId:= newActId; /* CIF Line (400,500),(400,550) */ /* CIF Return (350,550),(100,100) */ return ; /* CIF End ProcedureDiagram */ endprocedure setPhysEventMode; /* CIF ProcedureDiagram */ /* CIF Page 1 (1900,2000) */ /* CIF Frame (0,0),(1900,1750) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\GenSys\putAnalogVal.spd' */ /* CIF Specific SDT Page 1 Scale 80 Grid (250,150) AutoNumbered */ Procedure putAnalogVal ;FPAR IN newActId CharString, IN newVal Analog; /* CIF DefaultSize (200,100) */ /* CIF CurrentPage 1 */ /* CIF ProcedureStart (300,250) */ start ; /* CIF Line (400,350),(400,400) */ /* CIF Task (300,400) */ task anVal:= newVal; /* CIF Line (400,500),(400,700) */ /* CIF Task (300,700) */ task actId := newActId; /* CIF Line (400,800),(400,850) */ /* CIF Return (350,850),(100,100) */ return ; /* CIF End ProcedureDiagram */ endprocedure putAnalogVal; /* CIF ProcedureDiagram */ /* CIF Page 1 (1900,2000) */ /* CIF Frame (0,0),(1900,1750) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\GenSys\pollPhysVal.spd' */ /* CIF Specific SDT Page 1 Scale 80 Grid (250,150) AutoNumbered */ Procedure pollPhysVal ;FPAR IN newActId CharString; /* CIF DefaultSize (200,100) */ /* CIF CurrentPage 1 */ /* CIF ProcedureStart (300,250) */ start ; /* CIF Line (400,350),(400,400) */ /* CIF Task (300,400) */ task actId := newActId; /* CIF Line (400,500),(400,550) */ /* CIF Return (350,550),(100,100) */ return ; /* CIF End ProcedureDiagram */ endprocedure pollPhysVal; /* CIF ProcedureDiagram */ /* CIF Page 1 (1900,2000) */ /* CIF Frame (0,0),(1900,1750) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\GenSys\putPhysServerVal.spd' */ /* CIF Specific SDT Page 1 Scale 80 Grid (250,150) AutoNumbered */ Procedure putPhysServerVal ;FPAR IN newActId CharString, IN newVal Charstring; /* CIF DefaultSize (200,100) */ /* CIF CurrentPage 1 */ /* CIF ProcedureStart (300,250) */ start ; /* CIF Line (400,350),(400,400) */ /* CIF Task (300,400) */ task outVal:= newVal; /* CIF Line (400,500),(400,550) */ /* CIF Task (300,550) */ task actId := newActId; /* CIF Line (400,650),(400,700) */ /* CIF Return (350,700),(100,100) */ return ; /* CIF End ProcedureDiagram */ endprocedure putPhysServerVal; /* CIF ProcedureDiagram */ /* CIF Page 1 (1900,2000) */ /* CIF Frame (0,0),(1900,1750) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\GenSys\putPanelVal.spd' */ /* CIF Specific SDT Page 1 Scale 80 Grid (250,150) AutoNumbered */ Procedure putPanelVal ;FPAR IN newActId CharString, IN newVal CharString; /* CIF DefaultSize (200,100) */ /* CIF CurrentPage 1 */ /* CIF ProcedureStart (300,250) */ start ; /* CIF Line (400,350),(400,400) */ /* CIF Task (300,400) */ task panOutVal:= newVal; /* CIF Line (400,500),(400,550) */ /* CIF Task (300,550) */ task actId := newActId; /* CIF Line (400,650),(400,700) */ /* CIF Return (350,700),(100,100) */ return ; /* CIF End ProcedureDiagram */ endprocedure putPanelVal; /* CIF ProcedureDiagram */ /* CIF Page 1 (1900,2000) */ /* CIF Frame (0,0),(1900,1750) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\GenSys\putProtoStubSignal.spd' */ /* CIF Specific SDT Page 1 Scale 80 Grid (250,150) AutoNumbered */ Procedure putProtoStubSignal ;FPAR IN newActId CharString, IN newName CharString, IN newParams Charstring; /* CIF DefaultSize (200,100) */ /* CIF CurrentPage 1 */ /* CIF ProcedureStart (300,250) */ start ; /* CIF Line (400,350),(400,400) */ /* CIF Task (300,400) */ task name:= newName; /* CIF Line (400,500),(400,550) */ /* CIF Task (300,550) */ task params:= newParams; /* CIF Line (400,650),(400,700) */ /* CIF Task (300,700) */ task actId := newActId; /* CIF Line (400,800),(400,850) */ /* CIF Return (350,850),(100,100) */ return ; /* CIF End ProcedureDiagram */ endprocedure putProtoStubSignal; /* CIF ProcedureDiagram */ /* CIF Page 1 (1900,2000) */ /* CIF Frame (0,0),(1900,1750) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\GenSys\pollPhysData.spd' */ /* CIF Specific SDT Page 1 Scale 80 Grid (250,150) AutoNumbered */ Procedure pollPhysData ;FPAR IN newActId CharString, IN newTimeValue Real; /* CIF DefaultSize (200,100) */ /* CIF CurrentPage 1 */ /* CIF ProcedureStart (300,250) */ start ; /* CIF Line (400,350),(400,400) */ /* CIF Task (300,400) */ task timeValue:= call realToStr(newTimeValue); /* CIF Line (400,500),(400,550) */ /* CIF Task (300,550) */ task actId := newActId; /* CIF Line (400,650),(400,700) */ /* CIF Return (350,700),(100,100) */ return ; /* CIF End ProcedureDiagram */ endprocedure pollPhysData; /* CIF ProcedureDiagram */ /* CIF Page 1 (1900,2000) */ /* CIF Frame (0,0),(1900,1750) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\GenSys\putPhysData.spd' */ /* CIF Specific SDT Page 1 Scale 100 Grid (250,150) AutoNumbered */ Procedure putPhysData ;FPAR IN newActId CharString, IN newParamName CharString, IN newValue Analog, IN newTimeStamp Time; /* CIF DefaultSize (200,100) */ /* CIF CurrentPage 1 */ /* CIF ProcedureStart (300,250) */ start ; /* CIF Line (400,350),(400,400) */ /* CIF Task (300,400) */ task paramName:= newParamName; /* CIF Line (400,500),(400,550) */ /* CIF Task (300,550) */ task value := (call realToStr(newValue)); /* CIF Line (400,650),(400,700) */ /* CIF Task (300,700) */ task timeStamp := (call timeToStr(newTimeStamp)) ; /* CIF Line (400,800),(400,850) */ /* CIF Task (300,850) */ task actId := newActId; /* CIF Line (400,950),(400,1000) */ /* CIF Return (350,1000),(100,100) */ return ; /* CIF End ProcedureDiagram */ endprocedure putPhysData; /* CIF ServiceDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Page 2 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Page 3 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Page 4 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Page 5 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Page 6 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\GenSys\InServ.ssv' */ /* CIF Specific SDT Page 1 Scale 100 Grid (250,150) AutoNumbered */ /* CIF Specific SDT Page 2 Scale 100 Grid (250,150) AutoNumbered */ /* CIF Specific SDT Page 3 Scale 100 Grid (250,150) AutoNumbered */ /* CIF Specific SDT Page 4 Scale 100 Grid (250,150) AutoNumbered */ /* CIF Specific SDT Page 5 Scale 100 Grid (250,150) AutoNumbered */ /* CIF Specific SDT Page 6 Scale 100 Grid (250,150) AutoNumbered */ Service InServ; /* CIF DefaultSize (200,100) */ /* CIF CurrentPage 2 */ /* CIF Text (800,100) */ DCL actPid PId; DCL actId CharString; /*RR DCL j INTEGER; RR*/ /*RR DCL evtModePId PId; RR*/ DCL anInVal CharString; /* CIF End Text */ /* CIF Text (350,150) */ IMPORTED PROCEDURE setPhysVal; FPAR IN CharString; /* CIF End Text */ /* CIF CurrentPage 3 */ /* CIF Text (1050,250) */ DCL dummy Integer; /* CIF End Text */ /* CIF Text (350,300) */ IMPORTED PROCEDURE setPhysServerVal; FPAR IN CharString; /* CIF End Text */ /* CIF CurrentPage 4 */ /* CIF Text (550,250) */ DCL name, params Charstring; /* CIF End Text */ /* CIF CurrentPage 5 */ /* CIF Text (1300,100) */ DCL nameAndParams Charstring; /* CIF End Text */ /* CIF Text (100,300) */ IMPORTED PROCEDURE setSignalVal; FPAR IN CharString, Charstring; /* CIF End Text */ /* CIF CurrentPage 6 */ /* CIF Text (300,100) */ /* deadlock resolution; RPCs are invoked upon reception of requests from OutServ */ /* CIF End Text */ /* CIF Text (1300,250) */ DCL str1, str2 Charstring; /* CIF End Text */ /* CIF CurrentPage 1 */ /* CIF Start (50,250) */ start ; /* CIF Line (150,350),(150,400) */ /* CIF NextState (50,400) */ nextstate ready; /* CIF CurrentPage 2 */ /* CIF State (550,400) */ state ready; /* CIF Line (650,500),(650,550) */ /* CIF Input (550,550) Right */ input physValIn (actId, anInVal); /* CIF Line (650,650),(650,700) */ /* CIF Task (550,700) */ task actPid := nameDict(actId); /* CIF Line (650,800),(650,850) */ /* CIF Decision (550,850) */ decision actPid = NULL; /* CIF Answer InvisibleBrackets */ /* CIF Line (650,950),(650,1000) */ /* CIF TextPosition (675,950) */ (false): /* CIF ProcedureCall (550,1000) */ call setPhysVal (anInVal) to actPid; /* CIF Line (650,1100),(650,1150) */ /* CIF Answer Right InvisibleBrackets */ /* CIF Line (750,900),(1150,900),(1150,1000) */ /* CIF TextPosition (1175,925) */ (true): /* CIF Extendedtask (1050,1000) */ task {/* call printIt ('ERROR: Instance '//actId//' not found', NOW); */}; /* CIF Line (1150,1100),(1150,1125),(650,1125),(650,1150) */ /* CIF End Decision */ enddecision; /* CIF NextState (550,1150) */ nextstate ready; /* CIF End State */ endstate; /* CIF CurrentPage 3 */ /* CIF State (550,550) */ state ready; /* CIF Line (650,650),(650,700) */ /* CIF Input (550,700) Right */ input physServerValIn (actId, anInVal); /* CIF Line (650,800),(650,850) */ /* CIF Task (550,850) */ task actPid := nameDict(actId); /* CIF Line (650,950),(650,1000) */ /* CIF Decision (550,1000) */ decision actPid = NULL; /* CIF Answer InvisibleBrackets */ /* CIF Line (650,1100),(650,1150) */ /* CIF TextPosition (675,1100) */ (false): /* CIF ProcedureCall (550,1150) */ call setPhysServerVal (anInVal) to actPid; /* CIF Line (650,1250),(650,1300) */ /* CIF Answer Right InvisibleBrackets */ /* CIF Line (750,1050),(1150,1050),(1150,1150) */ /* CIF TextPosition (1175,1075) */ (true): /* CIF Task (1050,1150) */ task dummy := call sendPhysVal('sys1', 'ERROR: component not found'); /* CIF Line (1150,1250),(1150,1275),(650,1275),(650,1300) */ /* CIF End Decision */ enddecision; /* CIF NextState (550,1300) */ nextstate ready; /* CIF End State */ endstate; /* CIF CurrentPage 4 */ /* CIF State (300,400) */ state ready; /* CIF Line (400,500),(400,550) */ /* CIF Input (300,550) Right */ input protoDriverSignalIn (name, params); /* CIF Line (400,650),(400,700) */ /* CIF Output (300,700) Right */ output setProtoDriverSignal (name, params); /* CIF Line (400,800),(400,850) */ /* CIF NextState (300,850) */ nextstate -; /* CIF End State */ endstate; /* CIF CurrentPage 5 */ /* CIF State (800,100) */ state ready; /* CIF Line (900,200),(900,250) */ /* CIF Input (800,250) Right */ input protoStubSignalIn (actId, nameAndParams); /* CIF Line (900,350),(900,400) */ /* CIF Task (800,400) */ task name := call to1stString(nameAndParams); /* CIF Line (900,500),(900,550) */ /* CIF Task (800,550) */ task params := call to2ndString(nameAndParams); /* CIF Line (900,650),(900,700) */ /* CIF Task (800,700) */ task actPid := nameDict(actId); /* CIF Line (900,800),(900,850) */ /* CIF Decision (800,850) */ decision actPid = NULL; /* CIF Answer InvisibleBrackets */ /* CIF Line (900,950),(900,1000) */ /* CIF TextPosition (925,975) */ (false): /* CIF ProcedureCall (800,1000) */ call setSignalVal (name, params) to actPid; /* CIF Line (900,1100),(900,1150) */ /* CIF Answer Right InvisibleBrackets */ /* CIF Line (1000,900),(1400,900),(1400,1000) */ /* CIF TextPosition (1425,925) */ (true): /* CIF ProcedureCall (1300,1000) */ call printIt ('ERROR: Stub '//actId//' not found', NOW); /* CIF Line (1400,1100),(1400,1125),(900,1125),(900,1150) */ /* CIF End Decision */ enddecision; /* CIF NextState (800,1150) */ nextstate ready; /* CIF End State */ endstate; /* CIF CurrentPage 6 */ /* CIF State (300,400) */ state ready; /* CIF Line (400,500),(400,550) */ /* CIF Input (300,550) Right */ input setPhysValCall (actId, str1); /* CIF Line (400,650),(400,700) */ /* CIF Task (300,700) */ task actPID := nameDict(actId); /* CIF Line (400,800),(400,850) */ /* CIF ProcedureCall (300,850) */ call setPhysVal (str1) to actPID; /* CIF Line (400,950),(400,1000) */ /* CIF NextState (300,1000) */ nextstate -; /* CIF End State */ endstate; /* CIF State (800,400) */ state ready; /* CIF Line (900,500),(900,550) */ /* CIF Input (800,550) Right */ input setPhysServerValCall (actId, str1); /* CIF Line (900,650),(900,700) */ /* CIF Task (800,700) */ task actPID := nameDict(actId); /* CIF Line (900,800),(900,850) */ /* CIF ProcedureCall (800,850) */ call setPhysServerVal (str1) to actPID; /* CIF Line (900,950),(900,1000) */ /* CIF NextState (800,1000) */ nextstate -; /* CIF End State */ endstate; /* CIF State (1300,400) */ state ready; /* CIF Line (1400,500),(1400,550) */ /* CIF Input (1300,550) Right */ input setSignalValCall (actId, str1, str2); /* CIF Line (1400,650),(1400,700) */ /* CIF Task (1300,700) */ task actPID := nameDict(actId); /* CIF Line (1400,800),(1400,850) */ /* CIF ProcedureCall (1300,850) */ call setSignalVal (str1, str2) to actPID; /* CIF Line (1400,950),(1400,1000) */ /* CIF NextState (1300,1000) */ nextstate -; /* CIF End State */ endstate; /* CIF End ServiceDiagram */ endservice InServ; /* CIF ServiceDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Page 2 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\GenSys\GlobServ.ssv' */ /* CIF Specific SDT Page 1 Scale 100 Grid (250,150) AutoNumbered */ /* CIF Specific SDT Page 2 Scale 100 Grid (250,150) AutoNumbered */ Service GlobServ; /* CIF DefaultSize (200,100) */ /* CIF CurrentPage 1 */ /* CIF Text (300,100) */ DCL success Integer; DCL pollMode Integer; /* PollMode: 0 == permanent polling, 1 == delayed polling (timer) 2 == polling through xEnv functions 3 == polling through xEnv and dummy loop to keep simulator running*/ TIMER socketT; DCL socketD Duration := 0.1; /* CIF End Text */ /* CIF Procedure (50,1600),(450,150) */ /* CIF TextPosition (112,1638) */ EXPORTED procedure announceInstance referenced; /* CIF Procedure (550,1600),(450,150) */ /* CIF TextPosition (625,1625) */ EXPORTED procedure revokeInstance referenced; /* CIF Procedure (1050,1600),(450,150) */ /* CIF TextPosition (1150,1637) */ EXPORTED procedure getPID referenced; /* CIF CurrentPage 1 */ /* CIF Start (550,550) */ start ; /* CIF Line (650,650),(650,700) */ /* CIF Task (550,700) */ task pollMode := call initSockets(NOW); /* CIF Line (650,800),(650,850) */ /* CIF Decision (550,850) */ decision pollMode; /* CIF Answer InvisibleBrackets */ /* CIF Line (650,950),(650,1150) */ /* CIF TextPosition (675,975) */ (1): /* CIF Set (550,1150) */ SET(NOW+socketD, socketT); /* CIF Line (650,1250),(650,1300) */ /* CIF NextState (550,1300) */ nextstate delayedPoll; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (750,900),(1150,900),(1150,1150) */ /* CIF TextPosition (1175,925) */ (3): /* CIF Set (1050,1150) */ SET(NOW+socketD, socketT); /* CIF Line (1150,1250),(1150,1300) */ /* CIF NextState (1050,1300) */ nextstate dummyPoll; /* CIF Answer Left InvisibleBrackets */ /* CIF Line (550,900),(400,900),(400,1300) */ /* CIF TextPosition (375,925) */ (0): /* CIF NextState (300,1300) */ nextstate poll; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (750,900),(900,900),(900,1300) */ /* CIF TextPosition (925,925) */ (2): /* CIF NextState (800,1300) */ nextstate xEnvPoll; /* CIF Answer Right */ /* CIF Line (750,900),(1650,900),(1650,1150) */ /* CIF TextPosition (1675,925) */ else: /* CIF ProcedureCall (1550,1150) */ call printIt('ERROR: unknown _ poll mode in GlobServ', NOW); /* CIF Line (1650,1250),(1650,1300) */ /* CIF NextState (1550,1300) */ nextstate idle; /* CIF End Decision */ enddecision; /* CIF CurrentPage 2 */ /* CIF State (50,550) */ state poll; /* CIF Line (150,650),(150,700) */ /* CIF ContinuousSignal (50,700) */ provided true; /* CIF Line (150,800),(150,850) */ /* CIF Task (50,850) */ task success := call checkSockets; /* CIF Line (150,950),(150,1000) */ /* CIF NextState (50,1000) */ nextstate poll; /* CIF End State */ endstate; /* CIF State (550,550) */ state delayedPoll; /* CIF Line (650,650),(650,700) */ /* CIF Input (550,700) Right */ input socketT; /* CIF Line (650,800),(650,850) */ /* CIF Label Invisible */ grst49: /* CIF Task (550,850) */ task success:= call checkSockets; /* CIF Line (650,950),(650,1000) */ /* CIF Decision (550,1000) */ decision success; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (750,1050),(850,1050),(850,825),(650,825),(650,850) */ /* CIF TextPosition (750,975) */ (1): /* CIF Answer */ /* CIF Line (650,1100),(650,1150) */ /* CIF TextPosition (675,1100) */ else: /* CIF Set (550,1150) */ SET(NOW+socketD, socketT); /* CIF Line (650,1250),(650,1300) */ /* CIF NextState (550,1300) */ nextstate delayedPoll; /* CIF End Decision */ enddecision; /* CIF Join Invisible */ join grst49; /* CIF End State */ endstate; /* CIF State (800,550) */ state xEnvPoll; /* CIF End State */ endstate; /* CIF State (1050,550) */ state dummyPoll; /* CIF Line (1150,650),(1150,700) */ /* CIF Input (1050,700) Right */ input socketT; /* CIF Line (1150,800),(1150,850) */ /* CIF Set (1050,850) */ SET(NOW+socketD, socketT); /* CIF Line (1150,950),(1150,1000) */ /* CIF NextState (1050,1000) */ nextstate delayedPoll; /* CIF End State */ endstate; /* CIF State (1550,550) */ state idle; /* CIF End State */ endstate; /* CIF End ServiceDiagram */ endservice GlobServ; /* CIF ProcedureDiagram */ /* CIF Page 1 (1900,2000) */ /* CIF Frame (0,0),(1900,1750) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\GenSys\announceInstance.spd' */ /* CIF Specific SDT Page 1 Scale 120 Grid (250,150) AutoNumbered */ Procedure announceInstance ;FPAR IN aPID PID, IN aInstName CharString; /* CIF DefaultSize (200,100) */ /* CIF Text (800,100) */ DCL checkPID PID; /* CIF End Text */ /* CIF CurrentPage 1 */ /* CIF ProcedureStart (800,400) */ start ; /* CIF Line (900,500),(900,550) */ /* CIF Task (800,550) */ task checkPID := nameDict(aInstName); /* CIF Line (900,650),(900,700) */ /* CIF Decision (800,700) */ decision checkPID; /* CIF Answer InvisibleBrackets */ /* CIF Line (900,800),(900,850) */ /* CIF TextPosition (925,800) */ (null): /* CIF Task (800,850) */ task nameDict(aInstName):= aPID; /* CIF Line (900,950),(900,1000) */ /* CIF Task (800,1000) */ task pidDict(aPid):= aInstName; /* CIF Line (900,1100),(900,1150) */ /* CIF ProcedureCall (800,1150) */ call printIt(aInstname//' ANNOUNCE', NOW); /* CIF Line (900,1250),(900,1300) */ /* CIF Answer Right */ /* CIF Line (1000,750),(1400,750),(1400,1150) */ /* CIF TextPosition (1425,775) */ else: /* CIF ProcedureCall (1300,1150) */ call printIt(aInstName//' ERROR: '// 'instance already announced', NOW); /* CIF Line (1400,1250),(1400,1275),(900,1275),(900,1300) */ /* CIF End Decision */ enddecision; /* CIF Return (850,1300),(100,100) */ return ; /* CIF End ProcedureDiagram */ endprocedure announceInstance; /* CIF ProcedureDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\GenSys\revokeInstance.spd' */ /* CIF Specific SDT Page 1 Scale 100 Grid (250,150) AutoNumbered */ procedure revokeInstance ;FPAR IN aPID PID; /* CIF DefaultSize (200,100) */ /* CIF Text (550,100) */ DCL aInstName Charstring; /* CIF End Text */ /* CIF CurrentPage 1 */ /* CIF ProcedureStart (550,550) */ start ; /* CIF Line (650,650),(650,700) */ /* CIF Task (550,700) */ task aInstName := pidDict(aPID); /* CIF Line (650,800),(650,850) */ /* CIF Task (550,850) */ task pidDict(aPID) := ''; /* CIF Line (650,950),(650,1000) */ /* CIF Task (550,1000) */ task nameDict(aInstName) := null; /* CIF Line (650,1100),(650,1150) */ /* CIF ProcedureCall (550,1150) */ call printIt(aInstname//' REVOKE', NOW); /* CIF Line (650,1250),(650,1300) */ /* CIF Return (600,1300),(100,100) */ return ; /* CIF End ProcedureDiagram */ endprocedure revokeInstance; /* CIF ProcedureDiagram */ /* CIF Page 1 (1900,2300) */ /* CIF Frame (0,0),(1900,2300) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\GenSys\getPID.spd' */ /* CIF Specific SDT Page 1 Scale 100 Grid (250,150) AutoNumbered */ procedure getPID ;FPAR IN aInstName CharString; RETURNS PID; /* CIF DefaultSize (200,100) */ /* CIF Text (800,100) */ DCL aPID PID; /* CIF End Text */ /* CIF CurrentPage 1 */ /* CIF ProcedureStart (550,400) */ start ; /* CIF Line (650,500),(650,550) */ /* CIF Task (550,550) */ task aPID := nameDict(aInstName); /* CIF Line (650,650),(650,700) */ /* CIF Return (600,700),(100,100) */ return aPID; /* CIF End ProcedureDiagram */ endprocedure getPID; /* CIF ProcessDiagram */ /* CIF Page 1 (1900,2100) */ /* CIF Frame (100,0),(1800,2100) */ /* CIF Specific SDT Version 1.0 */ /* CIF Specific SDT OriginalFileName 'C:\misc\SAM1\GenSys\ProtoDriverCtrl.spr' */ /* CIF Specific SDT Page 1 Scale 112 Grid (250,150) AutoNumbered */ Process ProtoDriverCtrl; /* CIF DefaultSize (200,100) */ /* CIF Text (800,250) */ DCL name, params Charstring; /* CIF End Text */ /* CIF CurrentPage 1 */ /* CIF Start (300,250) */ start ; /* CIF Line (400,350),(400,400) */ /* CIF NextState (300,400) */ nextstate waitForGo; /* CIF State (300,550) */ state waitForGo; /* CIF Line (400,650),(400,700) */ /* CIF Input (300,700) Right */ input setProtoDriverSignal (name, params); /* CIF Line (400,800),(400,850) */ /* CIF Decision (300,850) */ decision name = 'go'; /* CIF Answer InvisibleBrackets */ /* CIF Line (400,950),(400,1000) */ /* CIF TextPosition (300,950) */ (false): /* CIF ProcedureCall (300,1000) */ call printIt('ERROR: signal go expected', NOW); /* CIF Line (400,1100),(400,1150) */ /* CIF NextState (300,1150) */ nextstate waitForGo; /* CIF Answer Right InvisibleBrackets */ /* CIF Line (500,900),(900,900),(900,1000) */ /* CIF TextPosition (925,925) */ (true): /* CIF Output (800,1000) Right */ output go(params) via a.i1; /* CIF Line (900,1100),(900,1150) */ /* CIF NextState (800,1150) */ nextstate idle; /* CIF End Decision */ enddecision; /* CIF End State */ endstate; /* CIF State (300,1300) */ state Idle; /* CIF End State */ endstate; /* CIF End ProcessDiagram */ endprocess ProtoDriverCtrl;