230 likes | 372 Views
The Real-Time Sequencer (more). B.D.Kelly, X.Gao. RTS Overview. Observation driver. ACSIS. Four-signal real-time link. Drama messages. Drama messages. HARP-B. RTS. Tel. Configuration files. RTS tasks. DitsEnableTask for drama para update. rtsTimeStamp vxWorks task.
E N D
The Real-Time Sequencer(more) B.D.Kelly, X.Gao
RTS Overview Observation driver ACSIS Four-signal real-time link Drama messages Drama messages HARP-B RTS Tel Configuration files
RTS tasks DitsEnableTask for drama para update rtsTimeStamp vxWorks task RTS drama task semaphores semaphore semaphores vxWorks Interrupt ISRs rtsIoTask vxWorks task
rtsIoTask flowchart Semaphore from INITIALISATION no Trigger reschedule & report Error rtsStartCheck() =Error? yes rtsDelete=1 return no yes rtsDelete=1 rtsIoInit() =Error? rtsIoreInit() no rtsPreHandShake() =Error? yes yes no Semaphore from SEQUENCE yes yes return Opmode=0(FIXSAMP) or=1 (FIXITG)? rtsStdSequence() =Error? yes no Opmode=2(EXTCLK) ? rtsNonStdSequence() =Error? no no no sprintf (errmess, "At least %s %s . INPORTS[1][0] logic=%04X %04X", sysname, rtsErrStrings[(int)rtsInfoprt->outResult[0]],rtsInfoprt->outResult[2], rtsInfoprt->outResult[1] ); ErsRep ( 0, status, errmess );
rtsStdSequence() flowchart FIX SAMP? Setup time1, enable time1 no putNSCNDV(p) (enable time1) SeqNo=1? FIXSAMP? yes no rtsTimeSC() =Error? timeSC=-1? putNSCNDV(p) (disable time1) putNSCNDV(p) (disable time) yes yes waitNSR(p) =Error? waitSR(p) =Error? yes return waitNSR (p,stTimeout) =Error? FIXSAMP? putSCNDV(p) (enable time1) yes yes putSCDV(p) (enable time1) rtsTimeRead() no semWait4Time1() =Error? return putSCNDV(p) (disable time1) no waitNSR(p) =Error? SeqNo finished? putNSCNDV(p) (disable time1) semGive TimeStamp rtsTimeRead() yes return
rtsNonStdSequence() flowchart rtsTimeSC() =Error? timeSC=-1? yes putSCNDV(p) yes return putMask (SRMask) yes no waitSR&Samp (p,Timeout)=Error? putNSCNDV(p) putMask (SRMask| SampMask) waitNSR (p,stTimeout) =Error? rtsTimeRead() putSCDV(p) yes yes return semWait4ExtClk =Error? enable ErrINT rtsTimeRead() putSCNDV(p) Check if one SR drop? yes putMask (| SampMask) yes no no waitSamp (j+1) (p,sampTimeout)=Error? waitNSR(p) =Error? SeqNo finished? putNSCNDV(p) semGive TimeStamp yes return
Start and End Sanity Check Connected? Listening? Finished? ACSIS SR Tel SR SC DV Time
Protocol-1 preliminary check First Sequence Start check waitNSR(p) waitNSR waitSR waitNSR(p) waitSR(p) SR timeSC(I) Start time1 FIXSAMP SC Time interrupt Stop time2 FIXITG, continue time1,FIXSAMP putNSC(p), putNDV(p) putSC(p), putNDV(p) putNSC(p), putNDV(p) putNSC,putNDV putSC, putNDV DV Start time2 FIXITG
protocol-2 Middle Sequence waitNSR(p) waitNSR(p) waitSR(p) timeSC(I) SR Time INT Stop time2 FIXITG, continue time1,FIXSAMP SC putSC(p), putDV(p) putNSC(p), putNDV(p) putSC(p), putNDV(p) putNSC(p), putNDV(p) DV Start time2 FIXITG
protocol-3 Last Sequence Finish check waitNSR(p) waitNSR(p) waitSR(p) timeSC(I) SR Time interrupt Stop time2 FIXITG, continue time1,FIXSAMP SC putNSC(p), putNDV(p) putSC(p), putNDV(p) putSC(p), putDV(p) putNSC(p), putNDV(p) DV Start time2 FIXITG
RTS CPLD LOGIC input logic 32 bits (4 8-bit I/O port) 32 input lines CPLD1 Input Interrupt Input bit pattern == demand bit pattern ? 8 bit (one I/O port) Error Interrupt Control logic block 21 -bit Timer2 counter 8 bit (Flagout) Timer2=0 interrupt output logic CPLD2 Control logic Block 31- bit Timer1 counter 16 bits (2 8-bit I/O port) 16 SC lines 16 DV lines 8 bit (one I/O port) Timer 1 =0 interrupt
1 2 3 4 5 6 7 8 RTS RJ45 Signal Sockets Output 1 Input 1 Input 2 16 connection sockets Output 2
Protocol-example I’m ready I’m done ACSIS SR Tel SR Get ready Integrate Finish SC DV Stop integration Time Sequence number 42 43
Programmability-example waitSR waitNSR ACSIS SR Tel SR putSC putDV putNSC SC DV putNDV Time Sequence number 42 43
Programmability (cont.) waitSamp ACSIS SR Tel SR SC DV Time Sequence number 42 43
RTS Initialisation File <Connections> <System name=“TCS” socket=“1” /> <System name=“HARPB” socket=“2” /> <System name=“ACSIS” socket=“9” /> <System name=“SCUBA” socket=“3” /> <System name=“TRYSUB” socket=“15” /> </Connections> This provides a list of the physical connections. It doesn’t say whether these are standard or non-standard subsystems, and doesn’t say whether they will actually be used.
RTS Configuration File <Configuration> <TCS SC=“1” SR=“1” DV=“2” /> <HARPB SC=“1” SR=“1” DV=“2” /> <ACSIS SC=“1” SR=“1” DV=“2” /> <SCUBA SC=“1” SR=“1” DV=“2” /> </Configuration> The Configuration lists all the standard subsystems which are going to be involved in the subsequent sequence.
RTS Sequence File The most trivial sequence file is:- <Sequence/> This means that only the standard subsystems as listed in the Configuration file are going to be used.
EXAMPLE (1, initial) RTS - ditscmd "RTS INITIALISE connection.xml 0 ” DITSCMD_1b7f5a8:RTS:rts: got argument = connection.xml iolinks[0].sname=TCS sockNo=1 RTS_CONN_SR=-1 DV=-1 SC=-1 iolinks[1].sname=HARP sockNo=2 RTS_CONN_SR=-1 DV=-1 SC=-1 iolinks[2].sname=SCUBA sockNo=3 RTS_CONN_SR=-1 DV=-1 SC=-1 iolinks[3].sname=ACSIS sockNo=9 RTS_CONN_SR=-1 DV=-1 SC=-1 iolinks[4].sname=TRYSUB sockNo=15 RTS_CONN_SR=-1 DV=-1 SC=-1 iolinks[5].sname= sockNo=-1 RTS_CONN_SR=-1 DV=-1 SC=-1 iolinks[6].sname= sockNo=-1 RTS_CONN_SR=-1 DV=-1 SC=-1 iolinks[7].sname= sockNo=-1 RTS_CONN_SR=-1 DV=-1 SC=-1 iolinks[8].sname= sockNo=-1 RTS_CONN_SR=-1 DV=-1 SC=-1 iolinks[9].sname= sockNo=-1 RTS_CONN_SR=-1 DV=-1 SC=-1 iolinks[10].sname= sockNo=-1 RTS_CONN_SR=-1 DV=-1 SC=-1 iolinks[11].sname= sockNo=-1 RTS_CONN_SR=-1 DV=-1 SC=-1 iolinks[12].sname= sockNo=-1 RTS_CONN_SR=-1 DV=-1 SC=-1 iolinks[13].sname= sockNo=-1 RTS_CONN_SR=-1 DV=-1 SC=-1 iolinks[14].sname= sockNo=-1 RTS_CONN_SR=-1 DV=-1 SC=-1 iolinks[15].sname= sockNo=-1 RTS_CONN_SR=-1 DV=-1 SC=-1 DITSCMD_1b7f5a8:RTS:rts: in NON-simulation mode
EXAMPLE (2, configure) RTS - ditscmd "RTS CONFIGURE configurationSc9.xml 0” DITSCMD_1b7f5a8:RTS:rts: got argument = configuration.xml iolinks[0].sname=TCS sockNo=1 RTS_CONN_SR=1 DV=1 SC=2 iolinks[1].sname=HARPB sockNo=2 RTS_CONN_SR=1 DV=1 SC=2 iolinks[2].sname=SCUBA sockNo=3 RTS_CONN_SR=1 DV=1 SC=2 iolinks[3].sname=ACSIS sockNo=9 RTS_CONN_SR=1 DV=1 SC=2 iolinks[4].sname=TRYSUB sockNo=15 RTS_CONN_SR=-1 DV=-1 SC=-1 iolinks[5].sname= sockNo=-1 RTS_CONN_SR=-1 DV=-1 SC=-1 iolinks[6].sname= sockNo=-1 RTS_CONN_SR=-1 DV=-1 SC=-1 iolinks[7].sname= sockNo=-1 RTS_CONN_SR=-1 DV=-1 SC=-1 iolinks[8].sname= sockNo=-1 RTS_CONN_SR=-1 DV=-1 SC=-1 iolinks[9].sname= sockNo=-1 RTS_CONN_SR=-1 DV=-1 SC=-1 ..................... activeSR;Mask[1][0]=00000107;00000107 activeNSR;Mask[1][0]=0000FEF8;00000107 activeSC;Mask[1][0]=00070100;00070100 activeDV;Mask[1][0]=01000007;01000007
EXAMPLE (3,sequence,std) ditscmd "RTS SEQUENCE 1 1000 sequence.xml 50 50 10" activeSR;Mask[1][0]=00000107;00000107 activeNSR;Mask[1][0]=0000FEF8;00000107 waitSR;Mask[1][0]=FFFFFFFF;00000107 waitNSR;Mask[1][0]=00000000;00000107 putSC;Mask[1][0]=FFFFFFFF;00070100 putNSC;Mask[1][0]=00000000;00070100 putDV;Mask[1][0]=FFFFFFFF;01000007 putNDV;Mask[1][0]=00000000;01000007
EXAMPLE (3,sequence,nonstd) <Sequence size="4"> <position num="1"> <putDV name="TRYSUB" output="1" value="1"/> <putSC name="TRYSUB" output="2" value="1"/> <putNDV name="TRYSUB" output="1" value="0"/> <putNSC name="TRYSUB" output="2" value="0"/> </position> <position num="2"> <putDV name="TRYSUB" output="1" value="0"/> <putSC name="TRYSUB" output="2" value="0"/> <putNDV name="TRYSUB" output="1" value="1"/> <putNSC name="TRYSUB" output="2" value="1"/> </position> <position num="3"> <putDV name="TRYSUB" output="1" value="1"/> <putSC name="TRYSUB" output="2" value="1"/> <putNDV name="TRYSUB" output="1" value="0"/> <putNSC name="TRYSUB" output="2" value="0"/> </position> <position num="4"> <putDV name="TRYSUB" output="1" value="0"/> <putSC name="TRYSUB" output="2" value="1"/> <putNDV name="TRYSUB" output="1" value="1"/> <putNSC name="TRYSUB" output="2" value="0"/> </position> </Sequence>
EXAMPLE (4,sequence,nonstd) RTS - ditscmd "RTS SEQUENCE 1 100 sequencetry.xml 50 100 10” Seq.TableEntry=0 activeSR;Mask[1][0]=00000107;00000107 activeNSR;Mask[1][0]=00000000;00000107 waitSR;Mask[1][0]=FFFFFFFF;00000107 waitNSR;Mask[1][0]=00000000;00000107 putSC;Mask[1][0]=FFFFFFFF;40070100 putNSC;Mask[1][0]=00000000;40070100 putDV;Mask[1][0]=FFFFFFFF;01004007 putNDV;Mask[1][0]=00000000;01004007 Seq.TableEntry=1 activeSR;Mask[1][0]=00000107;00000107 activeNSR;Mask[1][0]=00000000;00000107 waitSR;Mask[1][0]=FFFFFFFF;00000107 waitNSR;Mask[1][0]=00000000;00000107 putSC;Mask[1][0]=BFFFFFFF;40070100 putNSC;Mask[1][0]=40000000;40070100 putDV;Mask[1][0]=FFFFBFFF;01004007 putNDV;Mask[1][0]=00004000;01004007 Seq.TableEntry=2 activeSR;Mask[1][0]=00000107;00000107 activeNSR;Mask[1][0]=00000000;00000107 waitSR;Mask[1][0]=FFFFFFFF;00000107 waitNSR;Mask[1][0]=00000000;00000107 putSC;Mask[1][0]=FFFFFFFF;40070100 putNSC;Mask[1][0]=00000000;40070100 putDV;Mask[1][0]=FFFFFFFF;01004007 putNDV;Mask[1][0]=00000000;01004007 Seq.TableEntry=3 activeSR;Mask[1][0]=00000107;00000107 activeNSR;Mask[1][0]=00000000;00000107 waitSR;Mask[1][0]=FFFFFFFF;00000107 waitNSR;Mask[1][0]=00000000;00000107 putSC;Mask[1][0]=FFFFFFFF;40070100 putNSC;Mask[1][0]=00000000;40070100 putDV;Mask[1][0]=FFFFBFFF;01004007 putNDV;Mask[1][0]=00004000;01004007