From 7dbee7cf4ad5a21508bb175342f18bec870e5c6b Mon Sep 17 00:00:00 2001 From: vertighel Date: Thu, 14 Jul 2022 15:41:42 -0700 Subject: [PATCH] Adding copy of SOXS project --- CONFIG/sxmcfg/ChangeLog | 563 + CONFIG/sxmcfg/config/sxmcfgCONFIG.cfg | 60 + CONFIG/sxmcfg/config/sxmcfgINS.cfg | 2592 + CONFIG/sxmcfg/config/sxmcfgMODE_GEN.ins | 31 + CONFIG/sxmcfg/config/sxmcfgMODE_IMG.ins | 31 + CONFIG/sxmcfg/config/sxmcfgMODE_SLT.ins | 32 + CONFIG/sxmcfg/config/sxmcfgOS.cfg | 385 + CONFIG/sxmcfg/config/sxmcfgRTDB.cfg | 212 + CONFIG/sxmcfg/config/sxmcfgSTART.cfg | 78 + CONFIG/sxmcfg/config/sxmcfgSelfTestOS_GEN.ref | 81 + CONFIG/sxmcfg/config/sxmcfgSelfTestOS_IMG.ref | 54 + CONFIG/sxmcfg/config/sxmcfgSelfTestOS_SLT.ref | 53 + CONFIG/sxmcfg/config/sxmcfgTEST.cfg | 1261 + CONFIG/sxmcfg/src/Makefile | 187 + DCS/sxccd/ChangeLog | 24 + DCS/sxccd/config/sxccd/e2v4482-soxs-1.seq | 90 + DCS/sxccd/config/sxccd/e2v4482-soxs-10.seq | 90 + DCS/sxccd/config/sxccd/e2v4482-soxs-10ori.seq | 90 + DCS/sxccd/config/sxccd/e2v4482-soxs-5.seq | 90 + DCS/sxccd/config/sxccd/e2v4482-soxs-5a.seq | 90 + DCS/sxccd/config/sxccd/e2v4482-soxs-5ori.seq | 90 + DCS/sxccd/config/sxccd/e2v4482-soxs-L.bclk | 151 + DCS/sxccd/config/sxccd/e2v4482-soxs-L.bconf | 18 + DCS/sxccd/config/sxccd/e2v4482-soxs-LR.bclk | 151 + DCS/sxccd/config/sxccd/e2v4482-soxs-LR.bconf | 18 + DCS/sxccd/config/sxccd/e2v4482-soxs-R.bclk | 151 + DCS/sxccd/config/sxccd/e2v4482-soxs-R.bconf | 18 + DCS/sxccd/config/sxccd/e2v4482-soxs-box.seq | 98 + DCS/sxccd/config/sxccd/e2v4482-soxs-box1.seq | 107 + DCS/sxccd/config/sxccd/e2v4482-soxs-box2.seq | 108 + DCS/sxccd/config/sxccd/e2v4482-soxs-box3.seq | 97 + DCS/sxccd/config/sxccd/e2v4482-soxs.seq | 90 + DCS/sxccd/config/sxccd/soxs.v | 264 + DCS/sxccd/config/sxccdCAMERA.cfg | 877 + DCS/sxccd/config/sxccdCAMERA_TARGET.cfg | 56 + DCS/sxccd/config/sxccdCONFIG.cfg | 68 + DCS/sxccd/config/sxccdDCS.cfg | 123 + DCS/sxccd/config/sxccdSetupComplete.det | 108 + DCS/sxccd/src/Makefile | 201 + DCS/sxdir/ChangeLog | 7 + DCS/sxdir/config/NGCIRSW/sxdir.cfg | 87 + DCS/sxdir/config/NGCIRSW/sxdir.dcf | 101 + DCS/sxdir/config/NGCIRSW/sxdirTest.bclk | 51 + DCS/sxdir/config/NGCIRSW/sxdirTest.clk | 83 + DCS/sxdir/config/NGCIRSW/sxdirTest.seq | 76 + DCS/sxdir/config/NGCIRSW/sxdirTest.v | 251 + DCS/sxdir/config/ngcrtdCtrl.cfg | 91 + DCS/sxdir/config/ngcrtdMenu.cfg | 83 + DCS/sxdir/config/ngcrtdRTDB.cfg | 215 + DCS/sxdir/config/sxdirCONFIG.cfg | 45 + DCS/sxdir/config/sxdirStartup.cfg | 69 + DCS/sxdir/src/Makefile | 199 + ICS/sxi/CDT/sxiControl.cdt | 26 + ICS/sxi/CDT/sxiSimControl.cdt | 26 + ICS/sxi/ChangeLog | 304 + ICS/sxi/config/wsxics1.scan | 273 + ICS/sxi/dbl/sxiALARM.class | 54 + ICS/sxi/dbl/sxiEnv.db | 47 + ICS/sxi/dbl/sxiEnv1.db | 863 + ICS/sxi/dbl/sxiHISTORIAN.db | 32 + ICS/sxi/dbl/sxiSIM_CONTROL.class | 213 + ICS/sxi/include/sxiControl.h | 21 + ICS/sxi/include/sxiCtrlMAIN_HANDLER.h | 42 + ICS/sxi/include/sxiSERVER.h | 35 + ICS/sxi/src/Makefile | 190 + ICS/sxi/src/README | 35 + ICS/sxi/src/sxiConfigLib.tcl | 76 + ICS/sxi/src/sxiConfigSet.tcl | 119 + ICS/sxi/src/sxiControl.C | 126 + ICS/sxi/src/sxiCtrlMAIN_HANDLER.C | 83 + ICS/sxi/src/sxiSERVER.C | 71 + ICS/sxiafc/ChangeLog | 1 + ICS/sxiafc/config/sxiafc_TwinCAT.fbmap | 42 + ICS/sxiafc/dbl/sxiafcAFC.class | 39 + ICS/sxiafc/dbl/sxiafcFB_AFC.class | 43 + ICS/sxiafc/doc/sxiafcDevDrvAfc.doc | Bin 0 -> 64512 bytes ICS/sxiafc/include/sxiafcDefines.h | 60 + ICS/sxiafc/include/sxiafcDevDrvAfc.h | 318 + ICS/sxiafc/include/sxiafcDevDrvSimAfc.h | 91 + ICS/sxiafc/src/Makefile | 148 + ICS/sxiafc/src/sxiafcDIC_CFG.dic | 68 + ICS/sxiafc/src/sxiafcDIC_REF.dic | 45 + ICS/sxiafc/src/sxiafcDevDrvAfc.C | 1083 + ICS/sxiafc/src/sxiafcDevDrvSimAfc.C | 281 + ICS/sxiafc/src/sxiafcDevSimAfc.C | 40 + ICS/sxiafc/src/sxiafcDevSrvAfc.C | 40 + ICS/sxinise/ChangeLog | 1 + ICS/sxinise/config/sxinise_TwinCAT.fbmap | 63 + ICS/sxinise/dbl/sxiniseFB_NISE.class | 40 + ICS/sxinise/dbl/sxiniseNISE.class | 40 + ICS/sxinise/doc/sxiniseDevDrvNise.doc | Bin 0 -> 64512 bytes ICS/sxinise/include/sxiniseDevDrvNise.h | 372 + ICS/sxinise/include/sxiniseDevDrvSimNise.h | 116 + ICS/sxinise/src/Makefile | 215 + ICS/sxinise/src/sxiniseDIC_CFG.dic | 79 + ICS/sxinise/src/sxiniseDevDrvNise.C | 1843 + ICS/sxinise/src/sxiniseDevDrvSimNise.C | 375 + ICS/sxinise/src/sxiniseDevSimNise.C | 38 + ICS/sxinise/src/sxiniseDevSrvNise.C | 52 + ICS/sxipan/ChangeLog | 112 + ICS/sxipan/bitmaps/soxslogo.gif | Bin 0 -> 3186 bytes ICS/sxipan/src/Makefile | 182 + ICS/sxipan/src/sxipanAFC.tcl | 283 + ICS/sxipan/src/sxipanAFC_uifClass.tcl | 192 + ICS/sxipan/src/sxipanControl.pan | 313 + ICS/sxipan/src/sxipanEntry.tcl | 321 + ICS/sxipan/src/sxipanNISE.tcl | 307 + ICS/sxipan/src/sxipanNISE_uifClass.tcl | 141 + ICS/sxipan/src/sxipanNamedPos.tcl | 328 + ICS/sxipan/src/sxipanNamedPos_uifClass.tcl | 153 + MS/sxmait/ChangeLog | 1 + MS/sxmait/src/GP_bias.obd | 49 + MS/sxmait/src/GP_dark.obd | 50 + MS/sxmait/src/Makefile | 210 + MS/sxmseq/ChangeLog | 34 + ...SOXS_NIR_E2E_Frame_Noise1_CPdefocus_2.fits | Bin 0 -> 33557760 bytes ...SOXS_NIR_E2E_Frame_Noise1_CPdefocus_3.fits | Bin 0 -> 33557760 bytes ...SOXS_NIR_E2E_Frame_Noise1_CPdefocus_4.fits | Bin 0 -> 33557760 bytes ...SOXS_NIR_E2E_Frame_Noise1_CPdefocus_5.fits | Bin 0 -> 33557760 bytes ...SOXS_NIR_E2E_Frame_Noise1_CPdefocus_6.fits | Bin 0 -> 33557760 bytes ...SOXS_NIR_E2E_Frame_Noise1_CPdefocus_7.fits | Bin 0 -> 33557760 bytes ...SOXS_NIR_E2E_Frame_Noise1_CPdefocus_8.fits | Bin 0 -> 33557760 bytes MS/sxmseq/bitmaps/pinhole_stddev1_7.0.fits | 24762 +++++ MS/sxmseq/bitmaps/pinhole_stddev2_6.0.fits | 24748 +++++ MS/sxmseq/bitmaps/pinhole_stddev3_5.0.fits | 24286 +++++ MS/sxmseq/bitmaps/pinhole_stddev4_4.0.fits | 24519 +++++ MS/sxmseq/bitmaps/pinhole_stddev5_3.0.fits | 24553 +++++ MS/sxmseq/bitmaps/pinhole_stddev6_4.1.fits | 24816 +++++ MS/sxmseq/bitmaps/pinhole_stddev7_5.1.fits | 24743 +++++ MS/sxmseq/config/SOXS_gen_tec_ADC.ref | 58 + MS/sxmseq/config/SOXS_gen_tec_Focus.ref | 58 + MS/sxmseq/config/SOXS_gen_tec_LampOff.ref | 56 + MS/sxmseq/config/SOXS_gen_tec_NIRDetLin.ref | 57 + .../config/SOXS_gen_tec_ParkInstrument.ref | 55 + .../config/SOXS_gen_tec_SynchroCheck.ref | 57 + MS/sxmseq/config/SOXS_gen_tec_VISDetLin.ref | 57 + MS/sxmseq/config/SOXS_gen_tec_flexure.ref | 58 + MS/sxmseq/config/SOXS_gen_tec_refacqCheck.ref | 60 + MS/sxmseq/config/SOXS_gen_tec_standby.ref | 51 + MS/sxmseq/config/SOXS_img_tec_CheckAcqCCD.ref | 55 + MS/sxmseq/config/SOXS_img_tec_DetLin.ref | 55 + .../config/SOXS_slt_tec_AlignmentFocus.ref | 56 + MS/sxmseq/config/SOXS_slt_tec_Stare.ref | 53 + MS/sxmseq/config/SOXS_test.ref | 51 + MS/sxmseq/src/Makefile | 176 + MS/sxmseq/src/SOXS_gen_tec_ADC.seq | 131 + MS/sxmseq/src/SOXS_gen_tec_Astrometry.seq | 50 + MS/sxmseq/src/SOXS_gen_tec_DetLin.seq | 147 + MS/sxmseq/src/SOXS_gen_tec_Focus.seq | 265 + MS/sxmseq/src/SOXS_gen_tec_LampOff.seq | 69 + MS/sxmseq/src/SOXS_gen_tec_ObsFree.obdv | 50 + MS/sxmseq/src/SOXS_gen_tec_ObsFree.seq | 276 + MS/sxmseq/src/SOXS_gen_tec_ParkInstrument.seq | 69 + MS/sxmseq/src/SOXS_gen_tec_SynchroCheck.seq | 171 + MS/sxmseq/src/SOXS_gen_tec_refacqCheck.seq | 221 + MS/sxmseq/src/SOXS_gen_tec_standby.seq | 70 + MS/sxmseq/src/SOXS_img_tec_CheckAcqCCD.seq | 198 + MS/sxmseq/src/SOXS_img_tec_DetLin.seq | 166 + MS/sxmseq/src/SOXS_slt_tec_AlignmentFocus.seq | 244 + MS/sxmseq/src/SOXS_slt_tec_Stare.seq | 210 + MS/sxmseq/src/SOXS_tec_FreeSetup.obdv | 50 + MS/sxmseq/src/SOXS_tec_FreeSetup.seq | 107 + MS/sxmseq/src/sxmseqCLIP.tcl | 105 + MS/sxmseq/src/sxmseqSelfTest_SOXS.txt | 24 + MS/sxmseq/src/sxmseqTsfList.txt | 24 + MS/sxmseq/src/sxmseqnirfocus.py | 357 + MS/sxmseq/src/sxmseqparabola.py | 31 + MS/sxmtsf/ChangeLog | 22 + MS/sxmtsf/config/SOXS_tec.isf | 292 + MS/sxmtsf/src/Makefile | 181 + MS/sxmtsf/src/SOXS_gen_tec_ADC.tsfx | 95 + MS/sxmtsf/src/SOXS_gen_tec_Astrometry.tsfx | 91 + MS/sxmtsf/src/SOXS_gen_tec_Focus.tsfx | 97 + MS/sxmtsf/src/SOXS_gen_tec_LampOff.tsfx | 82 + MS/sxmtsf/src/SOXS_gen_tec_NIRDetLin.tsfx | 99 + MS/sxmtsf/src/SOXS_gen_tec_ObsFree.tsfx | 120 + .../src/SOXS_gen_tec_ParkInstrument.tsfx | 85 + MS/sxmtsf/src/SOXS_gen_tec_SynchroCheck.tsfx | 101 + MS/sxmtsf/src/SOXS_gen_tec_VISDetLin.tsfx | 99 + MS/sxmtsf/src/SOXS_gen_tec_flexure.tsfx | 91 + MS/sxmtsf/src/SOXS_gen_tec_refacqCheck.tsfx | 81 + MS/sxmtsf/src/SOXS_gen_tec_standby.tsfx | 76 + MS/sxmtsf/src/SOXS_img_tec_CheckAcqCCD.tsfx | 81 + MS/sxmtsf/src/SOXS_img_tec_DetLin.tsfx | 86 + .../src/SOXS_slt_tec_AlignmentFocus.tsfx | 100 + MS/sxmtsf/src/SOXS_slt_tec_Stare.tsfx | 116 + MS/sxmtsf/src/SOXS_tec_FreeSetup.tsfx | 107 + OS/sxo/CDT/sxoControl.cdt | 33 + OS/sxo/ChangeLog | 567 + OS/sxo/ERRORS/HELP/noHelp.hlp | 14 + .../ERRORS/HELP/sxoERR_CACHE_FILE_EXISTS.hlp | 27 + OS/sxo/ERRORS/HELP/sxoERR_CONFLICT_OFFSET.hlp | 21 + .../ERRORS/HELP/sxoERR_INVALIDE_EXP_MODE.hlp | 14 + OS/sxo/ERRORS/HELP/sxoERR_KEYW_NOT_SAVED.hlp | 26 + .../ERRORS/HELP/sxoERR_NO_FILE_SPECIFIED.hlp | 25 + OS/sxo/ERRORS/HELP/sxoERR_NO_KEYW_TO_SAVE.hlp | 30 + OS/sxo/ERRORS/sxo_ERRORS | 65 + OS/sxo/dbl/sxo.db | 72 + OS/sxo/dbl/sxoSERVER.class | 64 + OS/sxo/doc/README | 697 + OS/sxo/doc/README_Create_Newos | 136 + OS/sxo/doc/README_add_kw_to_fits_file | 39 + OS/sxo/doc/README_add_new_keyword | 156 + OS/sxo/doc/README_add_new_subsystem | 147 + OS/sxo/doc/README_addcommand | 78 + OS/sxo/doc/README_keydbmap | 96 + OS/sxo/include/sxoPrivate.h | 66 + OS/sxo/include/sxoSERVER.h | 52 + OS/sxo/src/Makefile | 197 + OS/sxo/src/sxoControl.C | 122 + OS/sxo/src/sxoSERVER.C | 228 + OS/sxocal/ChangeLog | 7 + OS/sxocal/config/SOXS_gen_cal_NIRDark.obdx | 36 + OS/sxocal/config/SOXS_gen_cal_VISDark.obdx | 38 + OS/sxocal/config/SOXS_img_acq_SkyFlat.obdx | 64 + OS/sxocal/config/SOXS_img_cal_Dark.obdx | 43 + OS/sxocal/config/SOXS_img_cal_SkyFlat.obdx | 64 + OS/sxocal/config/SOXS_slt_cal_NIRArcs.obdx | 38 + .../config/SOXS_slt_cal_NIRLampFlat.obdx | 38 + OS/sxocal/config/SOXS_slt_cal_VISArcs.obdx | 39 + .../config/SOXS_slt_cal_VISLampFlat.obdx | 39 + OS/sxocal/config/sxocalCALOB.cfg | 117 + OS/sxocal/config/sxocalCONFIG.cfg | 30 + OS/sxocal/config/sxocalCalobEnd.obd | 14 + OS/sxocal/src/Makefile | 194 + OS/sxopan/ChangeLog | 205 + OS/sxopan/bitmaps/panel-acqs-0.gif | Bin 0 -> 1416 bytes OS/sxopan/bitmaps/panel-acqs-1.gif | Bin 0 -> 1307 bytes OS/sxopan/bitmaps/panel-acqs-2.gif | Bin 0 -> 1400 bytes OS/sxopan/bitmaps/panel-acqs-3.gif | Bin 0 -> 1389 bytes OS/sxopan/bitmaps/panel-adc-on.gif | Bin 0 -> 2397 bytes OS/sxopan/bitmaps/panel-arcs-1.gif | Bin 0 -> 1566 bytes OS/sxopan/bitmaps/panel-arcs-2.gif | Bin 0 -> 1448 bytes OS/sxopan/bitmaps/panel-arcs-3.gif | Bin 0 -> 1572 bytes OS/sxopan/bitmaps/panel-arcs-4.gif | Bin 0 -> 1526 bytes OS/sxopan/bitmaps/panel-arcs-5.gif | Bin 0 -> 1574 bytes OS/sxopan/bitmaps/panel-cals-1.gif | Bin 0 -> 1688 bytes OS/sxopan/bitmaps/panel-cals-2.gif | Bin 0 -> 1714 bytes OS/sxopan/bitmaps/panel-concave.gif | Bin 0 -> 1192 bytes OS/sxopan/bitmaps/panel-convexe.gif | Bin 0 -> 1174 bytes OS/sxopan/bitmaps/panel-filter-1.gif | Bin 0 -> 3216 bytes OS/sxopan/bitmaps/panel-imaging-camera.gif | Bin 0 -> 3293 bytes OS/sxopan/bitmaps/panel-lamp-1.gif | Bin 0 -> 1489 bytes OS/sxopan/bitmaps/panel-lamp-2.gif | Bin 0 -> 1469 bytes OS/sxopan/bitmaps/panel-lamp-off.gif | Bin 0 -> 1312 bytes OS/sxopan/bitmaps/panel-mirror-1.gif | Bin 0 -> 724 bytes OS/sxopan/bitmaps/panel-mirror-2.gif | Bin 0 -> 1445 bytes OS/sxopan/bitmaps/panel-piezo-on.gif | Bin 0 -> 2173 bytes OS/sxopan/bitmaps/panel-pinhole-1.gif | Bin 0 -> 1613 bytes OS/sxopan/bitmaps/panel-pinhole-2.gif | Bin 0 -> 1606 bytes OS/sxopan/bitmaps/panel-pinhole.gif | Bin 0 -> 945 bytes OS/sxopan/bitmaps/panel-prism.gif | Bin 0 -> 1626 bytes OS/sxopan/bitmaps/panel-shutter-closed.gif | Bin 0 -> 1438 bytes OS/sxopan/bitmaps/panel-shutter-open.gif | Bin 0 -> 1408 bytes OS/sxopan/bitmaps/panel-slide-0.gif | Bin 0 -> 1602 bytes OS/sxopan/bitmaps/panel-slide-1.gif | Bin 0 -> 1114 bytes OS/sxopan/bitmaps/panel-slide-2.gif | Bin 0 -> 2465 bytes OS/sxopan/bitmaps/panel-slide-3.gif | Bin 0 -> 4100 bytes OS/sxopan/bitmaps/panel-slide-7.gif | Bin 0 -> 1114 bytes OS/sxopan/bitmaps/panel-slide.gif | Bin 0 -> 1761 bytes OS/sxopan/bitmaps/panel-slit-0.gif | Bin 0 -> 866 bytes OS/sxopan/bitmaps/panel-slit-1.gif | Bin 0 -> 930 bytes OS/sxopan/bitmaps/panel-slit-2.gif | Bin 0 -> 942 bytes OS/sxopan/bitmaps/panel-slit-3.gif | Bin 0 -> 986 bytes OS/sxopan/bitmaps/panel-slit-4.gif | Bin 0 -> 1012 bytes OS/sxopan/bitmaps/panel-slit-5.gif | Bin 0 -> 969 bytes OS/sxopan/bitmaps/panel-slit-together.gif | Bin 0 -> 1669 bytes OS/sxopan/bitmaps/panel-spectrograph-2.gif | Bin 0 -> 4322 bytes OS/sxopan/bitmaps/panel-spectrograph.gif | Bin 0 -> 4322 bytes OS/sxopan/bitmaps/panel-star-2-0.gif | Bin 0 -> 318 bytes OS/sxopan/bitmaps/panel-star-2-7.gif | Bin 0 -> 318 bytes OS/sxopan/bitmaps/panel-star-2.gif | Bin 0 -> 318 bytes OS/sxopan/bitmaps/panel-star.gif | Bin 0 -> 167 bytes OS/sxopan/bitmaps/panel-technical-camera.gif | Bin 0 -> 1283 bytes OS/sxopan/bitmaps/soxslogo.gif | Bin 0 -> 3186 bytes OS/sxopan/bitmaps/soxslogo.png | Bin 0 -> 37207 bytes OS/sxopan/src/Makefile | 189 + OS/sxopan/src/sxopanControl.doc | 52 + OS/sxopan/src/sxopanControl.pan | 436 + OS/sxopan/src/sxopanControlACQ_uifClass.tcl | 130 + OS/sxopan/src/sxopanControlAlarm_uifClass.tcl | 85 + OS/sxopan/src/sxopanControlDisk_uifClass.tcl | 81 + OS/sxopan/src/sxopanControlNIR_uifClass.tcl | 136 + OS/sxopan/src/sxopanControlStat_uifClass.tcl | 253 + OS/sxopan/src/sxopanControlTCS_uifClass.tcl | 145 + OS/sxopan/src/sxopanControlTECH_uifClass.tcl | 131 + OS/sxopan/src/sxopanControlVIS_uifClass.tcl | 135 + OS/sxopan/src/sxopanEngineering.doc | 81 + OS/sxopan/src/sxopanEngineering.pan | 292 + OS/sxopan/src/sxopanGuiding.pan | 900 + OS/sxopan/src/sxopanGuidingProcs.tcl | 106 + OS/sxopan/src/sxopanMisc.tcl | 73 + OS/sxopan/src/sxopanStatus.doc | 34 + OS/sxopan/src/sxopanStatus.pan | 1462 + OS/sxopan/src/sxopanStatusTDCS.tcl | 97 + OS/sxopan/src/sxopanSynoptic.pan | 198 + OS/sxopan/src/sxopanSynopticBASE.tcl | 812 + OS/sxopan/src/sxopanSynopticProcs.tcl | 217 + OS/sxopan/src/sxopanSynopticSOXS.tcl | 1010 + OS/sxoseq/ChangeLog | 283 + OS/sxoseq/bitmaps/pinhole_NIR_A.fits | 24367 +++++ OS/sxoseq/bitmaps/pinhole_NIR_B.fits | 24778 +++++ OS/sxoseq/bitmaps/pinhole_VIS_A.fits | 24914 +++++ OS/sxoseq/bitmaps/pinhole_VIS_B.fits | 25384 +++++ OS/sxoseq/config/SOXS_gen_cal_AFC.ref | 50 + OS/sxoseq/config/SOXS_gen_cal_NIRDark.ref | 60 + OS/sxoseq/config/SOXS_gen_cal_VISDark.ref | 56 + OS/sxoseq/config/SOXS_img_acq.ref | 58 + OS/sxoseq/config/SOXS_img_cal_Dark.ref | 57 + OS/sxoseq/config/SOXS_img_cal_SkyFlat.ref | 57 + OS/sxoseq/config/SOXS_img_obs.ref | 57 + .../config/SOXS_img_obs_GenericOffset.ref | 57 + OS/sxoseq/config/SOXS_slt_acq.ref | 56 + .../config/SOXS_slt_cal_NIRAllLampsAtt.ref | 54 + .../config/SOXS_slt_cal_NIRAllLampsCalib.ref | 59 + OS/sxoseq/config/SOXS_slt_cal_SpecphotNod.ref | 54 + .../config/SOXS_slt_cal_SpecphotStdOffset.ref | 55 + .../config/SOXS_slt_cal_SpecphotStdStare.ref | 55 + .../config/SOXS_slt_cal_TelluricStdNod.ref | 55 + .../config/SOXS_slt_cal_TelluricStdStare.ref | 55 + .../config/SOXS_slt_cal_VISAllLampsAtt.ref | 52 + .../config/SOXS_slt_cal_VISAllLampsCalib.ref | 59 + .../config/SOXS_slt_obs_AutoNodOnSlit.ref | 53 + .../config/SOXS_slt_obs_FixedSkyOffset.ref | 53 + .../config/SOXS_slt_obs_GenericOffset.ref | 53 + OS/sxoseq/config/SOXS_slt_obs_Mapping.ref | 53 + OS/sxoseq/config/SOXS_slt_obs_Stare.ref | 55 + .../config/SOXS_slt_obs_StareSynchro.ref | 55 + OS/sxoseq/config/SOXS_test.ref | 55 + OS/sxoseq/dbl/sxoseq.db | 19 + OS/sxoseq/src/Makefile | 176 + OS/sxoseq/src/SOXS_gen_cal_AFC.seq | 282 + OS/sxoseq/src/SOXS_gen_cal_AllDarksCalib.seq | 132 + OS/sxoseq/src/SOXS_img_acq.seq | 262 + OS/sxoseq/src/SOXS_img_cal_AllDarksCalib.seq | 135 + OS/sxoseq/src/SOXS_img_cal_SkyFlat.seq | 329 + OS/sxoseq/src/SOXS_img_obs.seq | 145 + OS/sxoseq/src/SOXS_img_obs_GenericOffset.seq | 273 + OS/sxoseq/src/SOXS_slt_acq.seq | 276 + OS/sxoseq/src/SOXS_slt_cal_AllLampsCalib.seq | 172 + OS/sxoseq/src/SOXS_slt_obs_AllNodOffset.seq | 411 + OS/sxoseq/src/SOXS_slt_obs_AllStare.seq | 196 + OS/sxoseq/src/SOXS_slt_obs_Mapping.seq | 345 + OS/sxoseq/src/SOXS_slt_obs_StareSynchro.seq | 157 + OS/sxoseq/src/SOXS_tec_FreeSetup.obdv | 49 + OS/sxoseq/src/sxoseqFITS.tcl | 254 + OS/sxoseq/src/sxoseqICS.tcl | 46 + OS/sxoseq/src/sxoseqOBS.tcl | 97 + OS/sxoseq/src/sxoseqOS.tcl | 154 + OS/sxoseq/src/sxoseqPoisson.C | 407 + OS/sxoseq/src/sxoseqSelfTest_SOXS.txt | 55 + OS/sxoseq/src/sxoseqTCS.tcl | 45 + OS/sxoseq/src/sxoseqTPL.tcl | 1173 + OS/sxoseq/src/sxoseqTsfList.txt | 56 + OS/sxosg/CDT/sxosgControl.cdt | 685 + OS/sxosg/ChangeLog | 1 + OS/sxosg/ERRORS/sxosg_ERRORS | 90 + OS/sxosg/config/.wsfVersion | 112 + ...file.Dependency_Matrix_Profile.profile.uml | 1393 + ...Draw_Profile.DSL_Customization.profile.uml | 5735 ++ ...MagicDraw_Profile.Find_By_Text.profile.uml | 77 + ...ile.Traceability_customization.profile.uml | 1232 + ...dard_Profile.MagicDraw_Profile.profile.uml | 9444 ++ ...andard_Profile.StandardProfile.profile.uml | 21 + ...dard_Profile.StandardProfileL2.profile.uml | 21 + ...dard_Profile.StandardProfileL3.profile.uml | 21 + ...ard_Profile.Validation_Profile.profile.uml | 3119 + .../config/model/comodoProfile.profile.uml | 761 + OS/sxosg/config/model/sxosg.uml | 504 + OS/sxosg/config/model/sxosg.xml | 2544 + OS/sxosg/config/sxosg.xml | 131 + OS/sxosg/config/sxosgEvents.txt | 30 + OS/sxosg/dbl/sxosgDB_CONFIG.class | 23 + OS/sxosg/dbl/sxosgDB_DATA.class | 92 + OS/sxosg/dbl/sxosgDB_MAIN.class | 38 + OS/sxosg/include/sxosg.h | 41 + OS/sxosg/include/sxosgACTION_CANDGS.h | 58 + OS/sxosg/include/sxosgACTION_EXIT.h | 51 + OS/sxosg/include/sxosgACTION_EXPEND.h | 60 + OS/sxosg/include/sxosgACTION_EXPSTRT.h | 60 + OS/sxosg/include/sxosgACTION_GUIDING.h | 64 + OS/sxosg/include/sxosgACTION_INIT.h | 51 + OS/sxosg/include/sxosgACTION_MGR.h | 52 + OS/sxosg/include/sxosgACTION_OFF.h | 51 + OS/sxosg/include/sxosgACTION_ONLINE.h | 51 + OS/sxosg/include/sxosgACTION_PRGS.h | 59 + OS/sxosg/include/sxosgACTION_PRTOGS.h | 57 + OS/sxosg/include/sxosgACTION_SELFTST.h | 51 + OS/sxosg/include/sxosgACTION_SELGS.h | 58 + OS/sxosg/include/sxosgACTION_SETLOG.h | 51 + OS/sxosg/include/sxosgACTION_SETUP.h | 88 + OS/sxosg/include/sxosgACTION_SIMULAT.h | 51 + OS/sxosg/include/sxosgACTION_SRCGS.h | 60 + OS/sxosg/include/sxosgACTION_STANDBY.h | 51 + OS/sxosg/include/sxosgACTION_STARTAG.h | 63 + OS/sxosg/include/sxosgACTION_STATE.h | 51 + OS/sxosg/include/sxosgACTION_STATUS.h | 52 + OS/sxosg/include/sxosgACTION_STOP.h | 51 + OS/sxosg/include/sxosgACTION_STOPAG.h | 63 + OS/sxosg/include/sxosgACTION_VERBOSE.h | 51 + OS/sxosg/include/sxosgACTION_VERSION.h | 52 + OS/sxosg/include/sxosgAPPLICATION.h | 44 + OS/sxosg/include/sxosgActions.h | 45 + OS/sxosg/include/sxosgCONFIG.h | 53 + OS/sxosg/include/sxosgDATA.h | 53 + OS/sxosg/include/sxosgDefines.h | 100 + OS/sxosg/include/sxosgEvents.h | 51 + OS/sxosg/include/sxosgGS_CATALOG_MGR.h | 126 + OS/sxosg/include/sxosgGS_INFO.h | 36 + OS/sxosg/include/sxosgGUIDE_STAR.h | 65 + OS/sxosg/include/sxosgGUIDE_STAR.icc | 120 + OS/sxosg/include/sxosgGUIDING_INFO.h | 58 + OS/sxosg/include/sxosgGUIDING_INFO.icc | 51 + OS/sxosg/include/sxosgKEY_VAL.h | 88 + OS/sxosg/include/sxosgKEY_VAL.icc | 109 + OS/sxosg/include/sxosgSETUP_VALUES.h | 114 + OS/sxosg/src/Makefile | 208 + OS/sxosg/src/sxosgACTION_CANDGS.C | 232 + OS/sxosg/src/sxosgACTION_EXIT.C | 54 + OS/sxosg/src/sxosgACTION_EXPEND.C | 144 + OS/sxosg/src/sxosgACTION_EXPSTRT.C | 144 + OS/sxosg/src/sxosgACTION_GUIDING.C | 176 + OS/sxosg/src/sxosgACTION_INIT.C | 54 + OS/sxosg/src/sxosgACTION_MGR.C | 357 + OS/sxosg/src/sxosgACTION_OFF.C | 54 + OS/sxosg/src/sxosgACTION_ONLINE.C | 54 + OS/sxosg/src/sxosgACTION_PRGS.C | 167 + OS/sxosg/src/sxosgACTION_PRTOGS.C | 129 + OS/sxosg/src/sxosgACTION_SELFTST.C | 54 + OS/sxosg/src/sxosgACTION_SELGS.C | 222 + OS/sxosg/src/sxosgACTION_SETLOG.C | 54 + OS/sxosg/src/sxosgACTION_SETUP.C | 246 + OS/sxosg/src/sxosgACTION_SIMULAT.C | 54 + OS/sxosg/src/sxosgACTION_SRCGS.C | 222 + OS/sxosg/src/sxosgACTION_STANDBY.C | 54 + OS/sxosg/src/sxosgACTION_STARTAG.C | 170 + OS/sxosg/src/sxosgACTION_STATE.C | 54 + OS/sxosg/src/sxosgACTION_STATUS.C | 82 + OS/sxosg/src/sxosgACTION_STOP.C | 54 + OS/sxosg/src/sxosgACTION_STOPAG.C | 146 + OS/sxosg/src/sxosgACTION_VERBOSE.C | 54 + OS/sxosg/src/sxosgACTION_VERSION.C | 80 + OS/sxosg/src/sxosgAPPLICATION.C | 284 + OS/sxosg/src/sxosgCONFIG.C | 55 + OS/sxosg/src/sxosgControl.C | 73 + OS/sxosg/src/sxosgDATA.C | 82 + OS/sxosg/src/sxosgGS_CATALOG_MGR.C | 613 + OS/sxosg/src/sxosgGS_INFO.C | 46 + OS/sxosg/src/sxosgMakefile | 36 + OS/sxosg/src/sxosgSETUP_VALUES.C | 128 + OS/sxosg/test/ENVIRONMENTS/wsTat/CcsEnvTable | 61 + .../test/ENVIRONMENTS/wsTat/dbl/DATABASE.db | 40 + OS/sxosg/test/ENVIRONMENTS/wsTat/dbl/Makefile | 172 + OS/sxosg/test/ENVIRONMENTS/wsTat/dbl/USER.db | 29 + OS/sxosg/test/Makefile | 186 + OS/sxosg/test/TESTLIST.td | 35 + OS/sxosg/test/TestDriver | 46 + OS/sxosg/test/TestDriver.sed | 8 + OS/sxosg/test/TestList | 8 + OS/sxosg/test/ref/TestDriver.ref | 4 + OS/sxosg/test/sxosgTestSetEnv.sh | 67 + OS/sxosg/test/sxosgTestStart.sh | 17 + OS/sxosg/test/sxosgTestStdCommands.ref | 605 + OS/sxosg/test/sxosgTestStdCommands.tcl | 196 + OS/sxosg/test/sxosgTestSupport.tcl | 552 + OS/sxotsf/ChangeLog | 104 + OS/sxotsf/config/SOXS.isf | 296 + OS/sxotsf/include/sxotsfDET_ACQ.tsfx | 38 + .../include/sxotsfDET_ACQ_EXPOLEVEL.tsfx | 38 + OS/sxotsf/include/sxotsfDET_ACQ_EXPOTIME.tsfx | 40 + OS/sxotsf/include/sxotsfDET_ACQ_READRATE.tsfx | 38 + OS/sxotsf/include/sxotsfDET_ACQ_WIN.tsfx | 74 + OS/sxotsf/include/sxotsfDET_NIR.tsfx | 60 + OS/sxotsf/include/sxotsfDET_NIR_LIST.tsfx | 59 + OS/sxotsf/include/sxotsfDET_TECH.tsfx | 80 + OS/sxotsf/include/sxotsfDET_VIS.tsfx | 52 + OS/sxotsf/include/sxotsfDET_VIS_LIST.tsfx | 52 + OS/sxotsf/include/sxotsfDPR.tsfx | 56 + OS/sxotsf/include/sxotsfINS_ACFW.tsfx | 47 + OS/sxotsf/include/sxotsfINS_ACQS.tsfx | 40 + OS/sxotsf/include/sxotsfINS_ADC.tsfx | 40 + OS/sxotsf/include/sxotsfINS_AFC1.tsfx | 42 + OS/sxotsf/include/sxotsfINS_AFC2.tsfx | 42 + OS/sxotsf/include/sxotsfINS_AFOC.tsfx | 40 + OS/sxotsf/include/sxotsfINS_ARGO.tsfx | 40 + OS/sxotsf/include/sxotsfINS_CALS.tsfx | 40 + OS/sxotsf/include/sxotsfINS_CUPS.tsfx | 39 + OS/sxotsf/include/sxotsfINS_DEUT.tsfx | 40 + OS/sxotsf/include/sxotsfINS_INSH.tsfx | 40 + OS/sxotsf/include/sxotsfINS_LAMPP.tsfx | 91 + OS/sxotsf/include/sxotsfINS_LAMPS.tsfx | 44 + OS/sxotsf/include/sxotsfINS_MERC.tsfx | 40 + OS/sxotsf/include/sxotsfINS_MODE.tsfx | 39 + OS/sxotsf/include/sxotsfINS_NEON.tsfx | 41 + OS/sxotsf/include/sxotsfINS_NFOC.tsfx | 41 + OS/sxotsf/include/sxotsfINS_NISE.tsfx | 41 + OS/sxotsf/include/sxotsfINS_QTH.tsfx | 40 + OS/sxotsf/include/sxotsfINS_THAR.tsfx | 40 + OS/sxotsf/include/sxotsfINS_VISE.tsfx | 40 + OS/sxotsf/include/sxotsfINS_XENO.tsfx | 40 + OS/sxotsf/include/sxotsfSEQ.tsfx | 39 + OS/sxotsf/include/sxotsfSEQ_ACQ.tsfx | 59 + OS/sxotsf/include/sxotsfSEQ_ACQSNAPSHOT.tsfx | 40 + OS/sxotsf/include/sxotsfSEQ_ADCPOS.tsfx | 48 + OS/sxotsf/include/sxotsfSEQ_AFC.tsfx | 56 + OS/sxotsf/include/sxotsfSEQ_CAL_MODE.tsfx | 39 + OS/sxotsf/include/sxotsfSEQ_FIXOFFSET.tsfx | 46 + OS/sxotsf/include/sxotsfSEQ_FOCUS.tsfx | 99 + OS/sxotsf/include/sxotsfSEQ_GUIDING.tsfx | 65 + OS/sxotsf/include/sxotsfSEQ_JITWIDTH.tsfx | 39 + OS/sxotsf/include/sxotsfSEQ_N.tsfx | 61 + OS/sxotsf/include/sxotsfSEQ_NCYCLE.tsfx | 39 + OS/sxotsf/include/sxotsfSEQ_NEXPO.tsfx | 40 + OS/sxotsf/include/sxotsfSEQ_NLOOP.tsfx | 42 + OS/sxotsf/include/sxotsfSEQ_NODTHROW.tsfx | 39 + OS/sxotsf/include/sxotsfSEQ_N_LIST.tsfx | 52 + OS/sxotsf/include/sxotsfSEQ_OFFSETCOORDS.tsfx | 39 + OS/sxotsf/include/sxotsfSEQ_OFFZERO.tsfx | 39 + OS/sxotsf/include/sxotsfSEQ_PRESET.tsfx | 38 + OS/sxotsf/include/sxotsfSEQ_RELOFFSET.tsfx | 75 + OS/sxotsf/include/sxotsfSEQ_STEP.tsfx | 43 + OS/sxotsf/include/sxotsfSEQ_WIN.tsfx | 87 + OS/sxotsf/include/sxotsfTEL.tsfx | 168 + OS/sxotsf/src/Makefile | 194 + OS/sxotsf/src/SOXS_gen_cal_AFC.tsfx | 110 + OS/sxotsf/src/SOXS_gen_cal_NIRDark.tsfx | 111 + OS/sxotsf/src/SOXS_gen_cal_VISBias.tsfx | 111 + OS/sxotsf/src/SOXS_gen_cal_VISDark.tsfx | 113 + OS/sxotsf/src/SOXS_img_acq.tsfx | 108 + OS/sxotsf/src/SOXS_img_acq_SkyFlat.tsfx | 110 + OS/sxotsf/src/SOXS_img_cal_Bias.tsfx | 121 + OS/sxotsf/src/SOXS_img_cal_Dark.tsfx | 131 + OS/sxotsf/src/SOXS_img_cal_SkyFlat.tsfx | 117 + OS/sxotsf/src/SOXS_img_obs.tsfx | 84 + OS/sxotsf/src/SOXS_img_obs_GenericOffset.tsfx | 108 + OS/sxotsf/src/SOXS_img_obs_cal_dist.tsfx | 95 + OS/sxotsf/src/SOXS_img_obs_cal_phot.tsfx | 82 + OS/sxotsf/src/SOXS_slt_acq.tsfx | 120 + OS/sxotsf/src/SOXS_slt_cal_NIRArcs.tsfx | 125 + OS/sxotsf/src/SOXS_slt_cal_NIRArcsAtt.tsfx | 126 + .../SOXS_slt_cal_NIRArcsMultiplePinhole.tsfx | 114 + .../src/SOXS_slt_cal_NIRArcsPinhole.tsfx | 115 + OS/sxotsf/src/SOXS_slt_cal_NIRLampFlat.tsfx | 124 + .../src/SOXS_slt_cal_NIRLampFlatAtt.tsfx | 126 + .../src/SOXS_slt_cal_NIRLampFlatPinhole.tsfx | 114 + OS/sxotsf/src/SOXS_slt_cal_SpecphotNod.tsfx | 90 + .../src/SOXS_slt_cal_SpecphotStdOffset.tsfx | 108 + .../src/SOXS_slt_cal_SpecphotStdStare.tsfx | 112 + .../src/SOXS_slt_cal_TelluricStdNod.tsfx | 106 + .../src/SOXS_slt_cal_TelluricStdStare.tsfx | 114 + OS/sxotsf/src/SOXS_slt_cal_VISArcs.tsfx | 125 + OS/sxotsf/src/SOXS_slt_cal_VISArcsAtt.tsfx | 126 + .../SOXS_slt_cal_VISArcsMultiplePinhole.tsfx | 117 + .../src/SOXS_slt_cal_VISArcsPinhole.tsfx | 117 + OS/sxotsf/src/SOXS_slt_cal_VISLampFlat.tsfx | 126 + .../src/SOXS_slt_cal_VISLampFlatAtt.tsfx | 125 + .../src/SOXS_slt_cal_VISLampFlatDeut.tsfx | 123 + .../src/SOXS_slt_cal_VISLampFlatPinhole.tsfx | 118 + OS/sxotsf/src/SOXS_slt_obs_AutoNodOnSlit.tsfx | 116 + .../src/SOXS_slt_obs_FixedSkyOffset.tsfx | 114 + OS/sxotsf/src/SOXS_slt_obs_GenericOffset.tsfx | 125 + OS/sxotsf/src/SOXS_slt_obs_Mapping.tsfx | 124 + OS/sxotsf/src/SOXS_slt_obs_Stare.tsfx | 108 + OS/sxotsf/src/SOXS_slt_obs_StareSynchro.tsfx | 114 + PLC/TC3.1/psxics1/CP_test/CP_test.sln | 86 + .../psxics1/CP_test/CP_test/CP_test.tsproj | 14301 +++ .../CP_test/CP_test/CP_test/CP_test.plcproj | 362 + .../CP_test/CP_test/CP_test/CP_test.tmc | 452 + .../CP_test/CP_test/DUTs/AFC/E_AFC_CMD.TcDUT | 14 + .../CP_test/DUTs/AFC/E_AFC_ERROR.TcDUT | 19 + .../CP_test/DUTs/AFC/E_AFC_STATE.TcDUT | 18 + .../CP_test/DUTs/AFC/E_AFC_STATUS.TcDUT | 15 + .../CP_test/CP_test/DUTs/AFC/T_AFC_CTRL.TcDUT | 16 + .../CP_test/CP_test/DUTs/AFC/T_AFC_INFO.TcDUT | 17 + .../CP_test/CP_test/DUTs/AFC/T_AFC_STAT.TcDUT | 20 + .../CP_test/DUTs/NISE/E_NISE_CMD.TcDUT | 14 + .../CP_test/DUTs/NISE/E_NISE_ERROR.TcDUT | 19 + .../CP_test/DUTs/NISE/E_NISE_STATE.TcDUT | 18 + .../CP_test/DUTs/NISE/E_NISE_STATUS.TcDUT | 15 + .../CP_test/DUTs/NISE/T_NISE_CFG.TcDUT | 11 + .../CP_test/DUTs/NISE/T_NISE_CTRL.TcDUT | 16 + .../CP_test/DUTs/NISE/T_NISE_INFO.TcDUT | 17 + .../CP_test/DUTs/NISE/T_NISE_STAT.TcDUT | 20 + .../CP_test/CP_test/GlobalTextList.TcGTLO | 700 + .../CP_test/CP_test/CP_test/POUs/FB_AFC.TcPOU | 349 + .../CP_test/CP_test/POUs/FB_NISE.TcPOU | 375 + .../CP_test/CP_test/CP_test/POUs/MAIN.TcPOU | 113 + .../CP_test/CP_test/CP_test/PlcTask.TcTTO | 17 + .../CP_test/CP_test/CP_test/VISU_TASK.TcTTO | 16 + .../CP_test/VISUs/CPU_Functions_Control.TcVIS | 5578 ++ .../CP_test/CP_test/VISUs/CPU_General.TcVIS | 11935 +++ .../CP_test/VISUs/MAIN_Control_Panel.TcVIS | 7982 ++ .../CP_test/CP_test/VISUs/PCU1/ADC1.TcVIS | 1275 + .../CP_test/CP_test/VISUs/PCU1/ADC1_cfg.TcVIS | 1275 + .../CP_test/VISUs/PCU1/ADC1_ctrl.TcVIS | 1275 + .../CP_test/CP_test/VISUs/PCU1/ADC2.TcVIS | 1275 + .../CP_test/CP_test/VISUs/PCU1/ADC2_cfg.TcVIS | 1275 + .../CP_test/VISUs/PCU1/ADC2_ctrl.TcVIS | 1275 + .../CP_test/VISUs/PCU1/Calselector_cfg.TcVIS | 1105 + .../CP_test/VISUs/PCU1/Calselector_ctrl.TcVIS | 1105 + .../CP_test/VISUs/PCU1/Camselector_cfg.TcVIS | 1105 + .../CP_test/VISUs/PCU1/Camselector_ctrl.TcVIS | 1105 + .../CP_test/VISUs/PCU2/Camexchanger_cfg.TcVIS | 1105 + .../VISUs/PCU2/Camexchanger_ctrl.TcVIS | 1105 + .../CP_test/VISUs/PCU2/Camfocusing_cfg.TcVIS | 1105 + .../CP_test/VISUs/PCU2/Camfocusing_ctrl.TcVIS | 1105 + .../CP_test/VISUs/PCU2/Nirfocusing_cfg.TcVIS | 1105 + .../CP_test/VISUs/PCU2/Nirfocusing_ctrl.TcVIS | 1105 + .../CP_test/VISUs/PCU2/Visexchanger_cfg.TcVIS | 1105 + .../VISUs/PCU2/Visexchanger_ctrl.TcVIS | 1105 + .../CP_test/VISUs/PCU3/Inshutter_ctrl.TcVIS | 935 + .../CP_test/VISUs/PCU3/NPZT_ctrl.TcVIS | 7292 ++ .../CP_test/VISUs/PCU3/VPZT_ctrl.TcVIS | 7288 ++ .../CP_test/Visualization Manager.TcVMO | 600 + .../L406_Calselector_tuning.tcmproj | 14 + .../Scope_YT_NC_Project.tcscope | 859 + .../L406_Camselector_tuning.tcmproj | 14 + .../Scope_YT_NC_Project.tcscope | 281 + .../M111_NIRfocus_tuning.tcmproj | 14 + .../Scope_YT_NC_Project.tcscope | 859 + PLC/TC3.1/psxics1/TwinCAT_SOXS_ICS.sln | 60 + .../SOXS_ICS/DUTs/E_NISE_CMD.TcDUT | 14 + .../SOXS_ICS/DUTs/E_NISE_ERROR.TcDUT | 19 + .../SOXS_ICS/DUTs/E_NISE_STATE.TcDUT | 18 + .../SOXS_ICS/DUTs/E_NISE_STATUS.TcDUT | 15 + .../SOXS_ICS/DUTs/T_NISE_CFG.TcDUT | 11 + .../SOXS_ICS/DUTs/T_NISE_CTRL.TcDUT | 16 + .../SOXS_ICS/DUTs/T_NISE_INFO.TcDUT | 17 + .../SOXS_ICS/DUTs/T_NISE_STAT.TcDUT | 20 + .../SOXS_ICS/GlobalTextList.TcGTLO | 21 + .../SOXS_ICS/POUs/FB_NISE.TcPOU | 375 + .../TwinCAT_SOXS_ICS/SOXS_ICS/POUs/MAIN.TcPOU | 22 + .../TwinCAT_SOXS_ICS/SOXS_ICS/PlcTask.TcTTO | 17 + .../SOXS_ICS/SOXS_ICS.plcproj | 238 + .../TwinCAT_SOXS_ICS/SOXS_ICS/SOXS_ICS.tmc | 289 + .../TwinCAT_SOXS_ICS/SOXS_ICS/VISUs/GUI.TcVIS | 762 + .../SOXS_ICS/VISUs/Gui_Config.TcVIS | 762 + .../SOXS_ICS/Visualization Manager.TcVMO | 167 + .../TwinCAT_SOXS_ICS/TwinCAT_SOXS_ICS.tsproj | 4513 + PLC/TC3.1/psxics1/psxics1/psxics1.sln | 60 + .../psxics1/psxics1/psxics1/psxics1.tsproj | 17870 ++++ .../psxics1/psxics1/DUTs/AFC/E_AFC_CMD.TcDUT | 14 + .../psxics1/DUTs/AFC/E_AFC_ERROR.TcDUT | 19 + .../psxics1/DUTs/AFC/E_AFC_STATE.TcDUT | 18 + .../psxics1/DUTs/AFC/E_AFC_STATUS.TcDUT | 15 + .../psxics1/psxics1/DUTs/AFC/T_AFC_CTRL.TcDUT | 16 + .../psxics1/psxics1/DUTs/AFC/T_AFC_INFO.TcDUT | 17 + .../psxics1/psxics1/DUTs/AFC/T_AFC_STAT.TcDUT | 20 + .../psxics1/DUTs/CROT/E_CROT_CMD.TcDUT | 16 + .../psxics1/DUTs/CROT/E_CROT_ERROR.TcDUT | 19 + .../psxics1/DUTs/CROT/E_CROT_STATE.TcDUT | 18 + .../psxics1/DUTs/CROT/E_CROT_STATUS.TcDUT | 14 + .../psxics1/DUTs/CROT/T_CROT_CFG.TcDUT | 11 + .../psxics1/DUTs/CROT/T_CROT_CTRL.TcDUT | 12 + .../psxics1/DUTs/CROT/T_CROT_INFO.TcDUT | 17 + .../psxics1/DUTs/CROT/T_CROT_STAT.TcDUT | 24 + .../psxics1/DUTs/NISE/E_NISE_CMD.TcDUT | 14 + .../psxics1/DUTs/NISE/E_NISE_ERROR.TcDUT | 19 + .../psxics1/DUTs/NISE/E_NISE_STATE.TcDUT | 18 + .../psxics1/DUTs/NISE/E_NISE_STATUS.TcDUT | 15 + .../psxics1/DUTs/NISE/T_NISE_CFG.TcDUT | 11 + .../psxics1/DUTs/NISE/T_NISE_CTRL.TcDUT | 16 + .../psxics1/DUTs/NISE/T_NISE_INFO.TcDUT | 17 + .../psxics1/DUTs/NISE/T_NISE_STAT.TcDUT | 20 + .../psxics1/psxics1/GlobalTextList.TcGTLO | 915 + .../psxics1/psxics1/psxics1/POUs/FB_AFC.TcPOU | 349 + .../psxics1/psxics1/POUs/FB_CROT.TcPOU | 221 + .../psxics1/psxics1/POUs/FB_NISE.TcPOU | 375 + .../psxics1/psxics1/psxics1/POUs/MAIN.TcPOU | 90 + .../psxics1/psxics1/psxics1/PlcTask.TcTTO | 17 + .../psxics1/psxics1/psxics1/VISU_TASK.TcTTO | 16 + .../psxics1/VISUs/CPU_Functions_Control.TcVIS | 6719 ++ .../psxics1/psxics1/VISUs/CPU_Status.TcVIS | 12756 +++ .../psxics1/VISUs/MAIN_Control_Panel.TcVIS | 8160 ++ .../psxics1/psxics1/VISUs/PCU1/ACQS_cfg.TcVIS | 1105 + .../psxics1/VISUs/PCU1/ACQS_ctrl.TcVIS | 1105 + .../psxics1/psxics1/VISUs/PCU1/ADC1.TcVIS | 1275 + .../psxics1/psxics1/VISUs/PCU1/ADC1_cfg.TcVIS | 1275 + .../psxics1/VISUs/PCU1/ADC1_ctrl.TcVIS | 1275 + .../psxics1/psxics1/VISUs/PCU1/ADC2.TcVIS | 1275 + .../psxics1/psxics1/VISUs/PCU1/ADC2_cfg.TcVIS | 1275 + .../psxics1/VISUs/PCU1/ADC2_ctrl.TcVIS | 1275 + .../psxics1/psxics1/VISUs/PCU1/CALS_cfg.TcVIS | 1105 + .../psxics1/VISUs/PCU1/CALS_ctrl.TcVIS | 1105 + .../psxics1/psxics1/VISUs/PCU2/ACFW_cfg.TcVIS | 1105 + .../psxics1/VISUs/PCU2/ACFW_ctrl.TcVIS | 1105 + .../psxics1/psxics1/VISUs/PCU2/AFOC_cfg.TcVIS | 1105 + .../psxics1/VISUs/PCU2/AFOC_ctrl.TcVIS | 1105 + .../psxics1/psxics1/VISUs/PCU2/NFOC_cfg.TcVIS | 1105 + .../psxics1/VISUs/PCU2/NFOC_ctrl.TcVIS | 1105 + .../psxics1/psxics1/VISUs/PCU2/VISE_cfg.TcVIS | 1105 + .../psxics1/VISUs/PCU2/VISE_ctrl.TcVIS | 1105 + .../psxics1/VISUs/PCU3/AFC1_ctrl.TcVIS | 7577 ++ .../psxics1/VISUs/PCU3/AFC2_ctrl.TcVIS | 7581 ++ .../psxics1/VISUs/PCU3/INSH_ctrl.TcVIS | 1105 + .../psxics1/VISUs/PCU4/ARGO_ctrl.TcVIS | 1105 + .../psxics1/psxics1/VISUs/PCU4/CUPS_cfg.TcVIS | 1105 + .../psxics1/VISUs/PCU4/CUPS_ctrl.TcVIS | 1105 + .../psxics1/VISUs/PCU4/DEUT_ctrl.TcVIS | 1105 + .../psxics1/VISUs/PCU4/MERC_ctrl.TcVIS | 1105 + .../psxics1/VISUs/PCU4/NEON_ctrl.TcVIS | 1105 + .../psxics1/psxics1/VISUs/PCU4/QTH_ctrl.TcVIS | 1105 + .../psxics1/VISUs/PCU4/THAR_ctrl.TcVIS | 1105 + .../psxics1/VISUs/PCU4/XENO_ctrl.TcVIS | 1105 + .../psxics1/Visualization Manager.TcVMO | 600 + .../psxics1/psxics1/psxics1/psxics1.plcproj | 415 + .../psxics1/psxics1/psxics1/psxics1.tmc | 546 + .../psxics1/psxics1/psxics1/psxics1.tpy | 458 + TDCS/sxacq/CDT/sxacqControl.cdt | 17 + TDCS/sxacq/CDT/sxacqSimControl.cdt | 15 + TDCS/sxacq/ChangeLog | 1 + TDCS/sxacq/ERRORS/HELP/noHelp | 16 + TDCS/sxacq/ERRORS/sxacq_ERRORS | 24 + TDCS/sxacq/config/CarinaNebula.fits | 6332 ++ TDCS/sxacq/config/simima.fits | 4051 + TDCS/sxacq/config/sxacq.cfg | 65 + TDCS/sxacq/config/sxacq.det | 79 + TDCS/sxacq/config/sxacqCONFIG.cfg | 50 + TDCS/sxacq/config/sxacq_SIM.det | 30 + TDCS/sxacq/dbl/sxacq.db | 55 + TDCS/sxacq/dbl/sxacqDB_MAIN.class | 101 + TDCS/sxacq/include/sxacqCOM_INT_ANDOR_USB.h | 154 + TDCS/sxacq/include/sxacqDefines.h | 58 + TDCS/sxacq/include/sxacqPROC_CENTROID.h | 80 + TDCS/sxacq/include/sxacqPUB_FITS.h | 39 + TDCS/sxacq/src/Makefile | 217 + TDCS/sxacq/src/sxacqCOM_INT_ANDOR_USB.C | 1544 + TDCS/sxacq/src/sxacqControl.C | 74 + TDCS/sxacq/src/sxacqDIC.dic | 84 + TDCS/sxacq/src/sxacqPROC_CENTROID.C | 448 + TDCS/sxacqpan/ChangeLog | 1 + TDCS/sxacqpan/src/Makefile | 201 + TDCS/sxacqpan/src/sxacqpanDummy.pan | 144 + TDCS/sxacqpan/src/sxacqpanPanel.pan | 705 + TDCS/sxacqpan/src/sxacqpanProcs.tcl | 143 + TDCS/sxtech/CDT/sxtechControl.cdt | 17 + TDCS/sxtech/CDT/sxtechSimControl.cdt | 15 + TDCS/sxtech/ChangeLog | 1 + TDCS/sxtech/config/sxtech.cfg | 62 + TDCS/sxtech/config/sxtech.det | 69 + TDCS/sxtech/config/sxtechCONFIG.cfg | 50 + TDCS/sxtech/config/sxtech_SIM.det | 28 + TDCS/sxtech/dbl/sxtech.db | 50 + TDCS/sxtech/src/Makefile | 217 + TDCS/sxtech/src/sxtechControl.C | 70 + TDCS/sxtechpan/ChangeLog | 1 + TDCS/sxtechpan/src/Makefile | 201 + TDCS/sxtechpan/src/sxtechpanDummy.pan | 144 + TDCS/sxtechpan/src/sxtechpanPanel.pan | 635 + TDCS/sxtechpan/src/sxtechpanProcs.tcl | 122 + dicSOXS/ChangeLog | 119 + dicSOXS/src/Makefile | 90 + dicSOXS/src/README | 29 + dicSOXS/src/dicSOXS_CFG.txt | 279 + dicSOXS/src/dicSOXS_ICS.txt | 659 + dicSOXS/src/dicSOXS_OS.txt | 167 + sxins/ChangeLog | 837 + sxins/ENVIRONMENTS/wsxics1/CcsEnvTable | 216 + sxins/ENVIRONMENTS/wsxics1/dbl/DATABASE.db | 46 + sxins/ENVIRONMENTS/wsxics1/dbl/Makefile | 64 + sxins/ENVIRONMENTS/wsxics1/dbl/USER.db | 55 + sxins/ENVIRONMENTS/wsxs/CcsEnvTable | 168 + sxins/ENVIRONMENTS/wsxs/PROCESSES.append | 2 + sxins/ENVIRONMENTS/wsxs/dbl/DATABASE.db | 106 + sxins/ENVIRONMENTS/wsxs/dbl/Makefile | 55 + sxins/ENVIRONMENTS/wsxs/dbl/USER.db | 63 + sxins/ENVIRONMENTS/wsxtcs/CcsEnvTable | 177 + sxins/ENVIRONMENTS/wsxtcs/dbl/DATABASE.db | 52 + sxins/ENVIRONMENTS/wsxtcs/dbl/Makefile | 55 + sxins/ENVIRONMENTS/wsxtcs/dbl/USER.db | 36 + sxins/config/sxins-misc-all.env | 38 + sxins/config/sxins-misc-all.wmrc | 100 + sxins/config/sxins-misc-all.xrdb | 22 + sxins/config/sxins-misc-uws.env | 17 + sxins/config/sxins.bobrc | 77 + sxins/config/sxinsDailyCheck.obd | 55 + sxins/config/sxinsEndOfNight.osf | 91 + sxins/config/sxinsINSTALL.cfg | 215 + sxins/config/sxinsINSTALL_TCSSIM.cfg | 39 + sxins/config/sxinsINSTALL_VLTSW.VLT2019.cfg | 50 + sxins/config/sxinsINSTALL_VLTSW.VLT2020.cfg | 50 + sxins/config/sxinsSafe.ref | 76 + sxins/config/sxinsStart.osf | 208 + sxins/config/sxinsStop.osf | 87 + sxins/src/Makefile | 188 + sxins/src/sxinsBuildIC0FB.sh | 60 + sxins/src/sxinsBuildTDCS.sh | 60 + sxins/src/sxinsCalobBuild | 86 + sxins/src/sxinsInstallTcsDictionary.sh | 30 + sxins/src/sxinsMiniRandomTAT.sh | 78 + sxins/src/sxinsMode.tcl | 473 + sxins/src/sxinsRandomTAT.sh | 84 + sxins/src/sxinsStart | 78 + sxins/src/sxinsStartLib.tcl | 49 + sxins/src/sxinsStartup | 67 + sxins/src/sxinsStoo.tcl | 136 + sxins/src/sxinsStop | 73 + sxins/test/Makefile | 171 + sxins/test/README | 11 + sxins/test/TestList.grep | 68 + sxins/test/TestList.lite | 11 + sxins/test/TestList.sed | 97 + sxins/test/sxinsTat.tcl | 25 + sxins/test/sxinsTestBuildCode | 47 + sxins/test/sxinsTestBuildEnv | 47 + sxins/test/sxinsTestClean | 43 + sxins/test/sxinsTestDCS | 47 + sxins/test/sxinsTestICS | 47 + sxins/test/sxinsTestMS | 48 + sxins/test/sxinsTestOS | 48 + sxins/test/sxinsTestStartEnv | 48 + sxins/test/sxinsTestStopEnv | 44 + sxins/test/sxinsTestTPL | 48 + sxmoab/ChangeLog | 356 + sxmoab/config/sxmcfgDEV_OAB.cfg | 127 + sxmoab/config/sxmoabINSTALL.cfg | 53 + sxmoab/config/sxmoabTARGET_DEV_OAB.cfg | 32 + sxmoab/src/Makefile | 188 + sxmoab/test/Makefile | 178 + sxmoab/test/TestList.grep | 61 + sxmoab/test/TestList.lite | 15 + sxmoab/test/TestList.sed | 85 + .../test/ref/DEV_OAB/sxmoabTestBuildCode.ref | 65 + .../test/ref/DEV_OAB/sxmoabTestBuildEnv.ref | 25 + sxmoab/test/ref/DEV_OAB/sxmoabTestClean.ref | 12 + sxmoab/test/ref/DEV_OAB/sxmoabTestDCS_NIR.ref | 352 + sxmoab/test/ref/DEV_OAB/sxmoabTestDCS_VIS.ref | 243 + sxmoab/test/ref/DEV_OAB/sxmoabTestICS.ref | 687 + sxmoab/test/ref/DEV_OAB/sxmoabTestMS.ref | 18554 ++++ sxmoab/test/ref/DEV_OAB/sxmoabTestOS.ref | 2512 + .../test/ref/DEV_OAB/sxmoabTestStartEnv.ref | 54 + sxmoab/test/ref/DEV_OAB/sxmoabTestStopEnv.ref | 11 + .../test/ref/DEV_OAB/sxmoabTestTDCS_ACQ.ref | 64 + .../test/ref/DEV_OAB/sxmoabTestTDCS_TECH.ref | 65 + sxmoab/test/ref/DEV_OAB/sxmoabTestTPL.ref | 77979 ++++++++++++++++ sxmoab/test/sxmoabTat.tcl | 25 + sxmoab/test/sxmoabTestBuildCode | 48 + sxmoab/test/sxmoabTestBuildEnv | 47 + sxmoab/test/sxmoabTestClean | 43 + sxmoab/test/sxmoabTestDCS_NIR | 73 + sxmoab/test/sxmoabTestDCS_VIS | 73 + sxmoab/test/sxmoabTestICS | 69 + sxmoab/test/sxmoabTestMS | 48 + sxmoab/test/sxmoabTestOS | 48 + sxmoab/test/sxmoabTestStartEnv | 49 + sxmoab/test/sxmoabTestStopEnv | 44 + sxmoab/test/sxmoabTestTDCS_ACQ | 71 + sxmoab/test/sxmoabTestTDCS_TECH | 71 + sxmoab/test/sxmoabTestTPL | 48 + sxmoapd/ChangeLog | 356 + sxmoapd/config/sxacqAIT_OAPD.cfg | 65 + sxmoapd/config/sxacqDEV_OAPD.cfg | 65 + sxmoapd/config/sxacqDEV_OAPD_PAKKO.cfg | 61 + sxmoapd/config/sxmcfgAIT_OAPD.cfg | 141 + sxmoapd/config/sxmcfgDEV_OAPD.cfg | 137 + sxmoapd/config/sxmcfgDEV_OAPD_PAKKO.cfg | 141 + sxmoapd/config/sxmoapdINSTALL.cfg | 64 + sxmoapd/config/sxmoapdTARGET_AIT_OAPD.cfg | 34 + sxmoapd/config/sxmoapdTARGET_DEV_OAPD.cfg | 37 + .../config/sxmoapdTARGET_DEV_OAPD_PAKKO.cfg | 32 + sxmoapd/config/sxtechAIT_OAPD.cfg | 62 + sxmoapd/config/sxtechDEV_OAPD.cfg | 61 + sxmoapd/config/sxtechDEV_OAPD_PAKKO.cfg | 61 + sxmoapd/src/Makefile | 188 + sxmoapd/test/Makefile | 178 + sxmoapd/test/TestList.grep | 63 + sxmoapd/test/TestList.lite | 15 + sxmoapd/test/TestList.sed | 138 + .../ref/AIT_OAPD/sxmoapdTestBuildCode.ref | 42 + .../test/ref/AIT_OAPD/sxmoapdTestBuildEnv.ref | 26 + .../test/ref/AIT_OAPD/sxmoapdTestClean.ref | 12 + .../test/ref/AIT_OAPD/sxmoapdTestDCS_NIR.ref | 352 + .../test/ref/AIT_OAPD/sxmoapdTestDCS_VIS.ref | 243 + sxmoapd/test/ref/AIT_OAPD/sxmoapdTestICS.ref | 759 + sxmoapd/test/ref/AIT_OAPD/sxmoapdTestMS.ref | 10315 ++ sxmoapd/test/ref/AIT_OAPD/sxmoapdTestOS.ref | 1879 + .../test/ref/AIT_OAPD/sxmoapdTestStartEnv.ref | 54 + .../test/ref/AIT_OAPD/sxmoapdTestStopEnv.ref | 11 + .../test/ref/AIT_OAPD/sxmoapdTestTDCS_ACQ.ref | 64 + .../ref/AIT_OAPD/sxmoapdTestTDCS_TECH.ref | 65 + sxmoapd/test/ref/AIT_OAPD/sxmoapdTestTPL.ref | 59930 ++++++++++++ .../ref/DEV_OAPD/sxmoapdTestBuildCode.ref | 42 + .../test/ref/DEV_OAPD/sxmoapdTestBuildEnv.ref | 25 + .../test/ref/DEV_OAPD/sxmoapdTestClean.ref | 12 + .../test/ref/DEV_OAPD/sxmoapdTestDCS_NIR.ref | 354 + .../test/ref/DEV_OAPD/sxmoapdTestDCS_VIS.ref | 245 + sxmoapd/test/ref/DEV_OAPD/sxmoapdTestICS.ref | 759 + sxmoapd/test/ref/DEV_OAPD/sxmoapdTestMS.ref | 10312 ++ sxmoapd/test/ref/DEV_OAPD/sxmoapdTestOS.ref | 1879 + .../test/ref/DEV_OAPD/sxmoapdTestStartEnv.ref | 54 + .../test/ref/DEV_OAPD/sxmoapdTestStopEnv.ref | 11 + .../test/ref/DEV_OAPD/sxmoapdTestTDCS_ACQ.ref | 64 + .../ref/DEV_OAPD/sxmoapdTestTDCS_TECH.ref | 65 + sxmoapd/test/ref/DEV_OAPD/sxmoapdTestTPL.ref | 59930 ++++++++++++ .../DEV_OAPD_PAKKO/sxmoapdTestBuildCode.ref | 63 + .../DEV_OAPD_PAKKO/sxmoapdTestBuildEnv.ref | 23 + .../ref/DEV_OAPD_PAKKO/sxmoapdTestClean.ref | 12 + .../ref/DEV_OAPD_PAKKO/sxmoapdTestDCS_NIR.ref | 352 + .../ref/DEV_OAPD_PAKKO/sxmoapdTestDCS_VIS.ref | 243 + .../ref/DEV_OAPD_PAKKO/sxmoapdTestICS.ref | 686 + .../test/ref/DEV_OAPD_PAKKO/sxmoapdTestMS.ref | 12506 +++ .../test/ref/DEV_OAPD_PAKKO/sxmoapdTestOS.ref | 2337 + .../DEV_OAPD_PAKKO/sxmoapdTestStartEnv.ref | 54 + .../ref/DEV_OAPD_PAKKO/sxmoapdTestStopEnv.ref | 11 + .../DEV_OAPD_PAKKO/sxmoapdTestTDCS_ACQ.ref | 65 + .../DEV_OAPD_PAKKO/sxmoapdTestTDCS_TECH.ref | 65 + .../ref/DEV_OAPD_PAKKO/sxmoapdTestTPL.ref | 76080 +++++++++++++++ sxmoapd/test/sxmoapdTat.tcl | 25 + sxmoapd/test/sxmoapdTestBuildCode | 48 + sxmoapd/test/sxmoapdTestBuildEnv | 47 + sxmoapd/test/sxmoapdTestClean | 43 + sxmoapd/test/sxmoapdTestDCS_NIR | 73 + sxmoapd/test/sxmoapdTestDCS_VIS | 73 + sxmoapd/test/sxmoapdTestICS | 69 + sxmoapd/test/sxmoapdTestMS | 48 + sxmoapd/test/sxmoapdTestOS | 48 + sxmoapd/test/sxmoapdTestStartEnv | 49 + sxmoapd/test/sxmoapdTestStopEnv | 44 + sxmoapd/test/sxmoapdTestTDCS_ACQ | 71 + sxmoapd/test/sxmoapdTestTDCS_TECH | 71 + sxmoapd/test/sxmoapdTestTPL | 48 + 921 files changed, 914962 insertions(+) create mode 100644 CONFIG/sxmcfg/ChangeLog create mode 100644 CONFIG/sxmcfg/config/sxmcfgCONFIG.cfg create mode 100644 CONFIG/sxmcfg/config/sxmcfgINS.cfg create mode 100644 CONFIG/sxmcfg/config/sxmcfgMODE_GEN.ins create mode 100644 CONFIG/sxmcfg/config/sxmcfgMODE_IMG.ins create mode 100644 CONFIG/sxmcfg/config/sxmcfgMODE_SLT.ins create mode 100644 CONFIG/sxmcfg/config/sxmcfgOS.cfg create mode 100644 CONFIG/sxmcfg/config/sxmcfgRTDB.cfg create mode 100644 CONFIG/sxmcfg/config/sxmcfgSTART.cfg create mode 100644 CONFIG/sxmcfg/config/sxmcfgSelfTestOS_GEN.ref create mode 100644 CONFIG/sxmcfg/config/sxmcfgSelfTestOS_IMG.ref create mode 100644 CONFIG/sxmcfg/config/sxmcfgSelfTestOS_SLT.ref create mode 100644 CONFIG/sxmcfg/config/sxmcfgTEST.cfg create mode 100644 CONFIG/sxmcfg/src/Makefile create mode 100644 DCS/sxccd/ChangeLog create mode 100644 DCS/sxccd/config/sxccd/e2v4482-soxs-1.seq create mode 100644 DCS/sxccd/config/sxccd/e2v4482-soxs-10.seq create mode 100644 DCS/sxccd/config/sxccd/e2v4482-soxs-10ori.seq create mode 100644 DCS/sxccd/config/sxccd/e2v4482-soxs-5.seq create mode 100644 DCS/sxccd/config/sxccd/e2v4482-soxs-5a.seq create mode 100644 DCS/sxccd/config/sxccd/e2v4482-soxs-5ori.seq create mode 100644 DCS/sxccd/config/sxccd/e2v4482-soxs-L.bclk create mode 100644 DCS/sxccd/config/sxccd/e2v4482-soxs-L.bconf create mode 100644 DCS/sxccd/config/sxccd/e2v4482-soxs-LR.bclk create mode 100644 DCS/sxccd/config/sxccd/e2v4482-soxs-LR.bconf create mode 100644 DCS/sxccd/config/sxccd/e2v4482-soxs-R.bclk create mode 100644 DCS/sxccd/config/sxccd/e2v4482-soxs-R.bconf create mode 100644 DCS/sxccd/config/sxccd/e2v4482-soxs-box.seq create mode 100644 DCS/sxccd/config/sxccd/e2v4482-soxs-box1.seq create mode 100644 DCS/sxccd/config/sxccd/e2v4482-soxs-box2.seq create mode 100644 DCS/sxccd/config/sxccd/e2v4482-soxs-box3.seq create mode 100644 DCS/sxccd/config/sxccd/e2v4482-soxs.seq create mode 100644 DCS/sxccd/config/sxccd/soxs.v create mode 100644 DCS/sxccd/config/sxccdCAMERA.cfg create mode 100644 DCS/sxccd/config/sxccdCAMERA_TARGET.cfg create mode 100644 DCS/sxccd/config/sxccdCONFIG.cfg create mode 100644 DCS/sxccd/config/sxccdDCS.cfg create mode 100644 DCS/sxccd/config/sxccdSetupComplete.det create mode 100644 DCS/sxccd/src/Makefile create mode 100644 DCS/sxdir/ChangeLog create mode 100644 DCS/sxdir/config/NGCIRSW/sxdir.cfg create mode 100644 DCS/sxdir/config/NGCIRSW/sxdir.dcf create mode 100644 DCS/sxdir/config/NGCIRSW/sxdirTest.bclk create mode 100644 DCS/sxdir/config/NGCIRSW/sxdirTest.clk create mode 100644 DCS/sxdir/config/NGCIRSW/sxdirTest.seq create mode 100644 DCS/sxdir/config/NGCIRSW/sxdirTest.v create mode 100644 DCS/sxdir/config/ngcrtdCtrl.cfg create mode 100644 DCS/sxdir/config/ngcrtdMenu.cfg create mode 100644 DCS/sxdir/config/ngcrtdRTDB.cfg create mode 100644 DCS/sxdir/config/sxdirCONFIG.cfg create mode 100644 DCS/sxdir/config/sxdirStartup.cfg create mode 100644 DCS/sxdir/src/Makefile create mode 100644 ICS/sxi/CDT/sxiControl.cdt create mode 100644 ICS/sxi/CDT/sxiSimControl.cdt create mode 100644 ICS/sxi/ChangeLog create mode 100644 ICS/sxi/config/wsxics1.scan create mode 100644 ICS/sxi/dbl/sxiALARM.class create mode 100644 ICS/sxi/dbl/sxiEnv.db create mode 100644 ICS/sxi/dbl/sxiEnv1.db create mode 100644 ICS/sxi/dbl/sxiHISTORIAN.db create mode 100644 ICS/sxi/dbl/sxiSIM_CONTROL.class create mode 100644 ICS/sxi/include/sxiControl.h create mode 100644 ICS/sxi/include/sxiCtrlMAIN_HANDLER.h create mode 100644 ICS/sxi/include/sxiSERVER.h create mode 100644 ICS/sxi/src/Makefile create mode 100644 ICS/sxi/src/README create mode 100644 ICS/sxi/src/sxiConfigLib.tcl create mode 100644 ICS/sxi/src/sxiConfigSet.tcl create mode 100644 ICS/sxi/src/sxiControl.C create mode 100644 ICS/sxi/src/sxiCtrlMAIN_HANDLER.C create mode 100644 ICS/sxi/src/sxiSERVER.C create mode 100644 ICS/sxiafc/ChangeLog create mode 100644 ICS/sxiafc/config/sxiafc_TwinCAT.fbmap create mode 100644 ICS/sxiafc/dbl/sxiafcAFC.class create mode 100644 ICS/sxiafc/dbl/sxiafcFB_AFC.class create mode 100644 ICS/sxiafc/doc/sxiafcDevDrvAfc.doc create mode 100644 ICS/sxiafc/include/sxiafcDefines.h create mode 100644 ICS/sxiafc/include/sxiafcDevDrvAfc.h create mode 100644 ICS/sxiafc/include/sxiafcDevDrvSimAfc.h create mode 100644 ICS/sxiafc/src/Makefile create mode 100644 ICS/sxiafc/src/sxiafcDIC_CFG.dic create mode 100644 ICS/sxiafc/src/sxiafcDIC_REF.dic create mode 100644 ICS/sxiafc/src/sxiafcDevDrvAfc.C create mode 100644 ICS/sxiafc/src/sxiafcDevDrvSimAfc.C create mode 100644 ICS/sxiafc/src/sxiafcDevSimAfc.C create mode 100644 ICS/sxiafc/src/sxiafcDevSrvAfc.C create mode 100644 ICS/sxinise/ChangeLog create mode 100644 ICS/sxinise/config/sxinise_TwinCAT.fbmap create mode 100644 ICS/sxinise/dbl/sxiniseFB_NISE.class create mode 100644 ICS/sxinise/dbl/sxiniseNISE.class create mode 100644 ICS/sxinise/doc/sxiniseDevDrvNise.doc create mode 100644 ICS/sxinise/include/sxiniseDevDrvNise.h create mode 100644 ICS/sxinise/include/sxiniseDevDrvSimNise.h create mode 100644 ICS/sxinise/src/Makefile create mode 100644 ICS/sxinise/src/sxiniseDIC_CFG.dic create mode 100644 ICS/sxinise/src/sxiniseDevDrvNise.C create mode 100644 ICS/sxinise/src/sxiniseDevDrvSimNise.C create mode 100644 ICS/sxinise/src/sxiniseDevSimNise.C create mode 100644 ICS/sxinise/src/sxiniseDevSrvNise.C create mode 100644 ICS/sxipan/ChangeLog create mode 100644 ICS/sxipan/bitmaps/soxslogo.gif create mode 100644 ICS/sxipan/src/Makefile create mode 100755 ICS/sxipan/src/sxipanAFC.tcl create mode 100644 ICS/sxipan/src/sxipanAFC_uifClass.tcl create mode 100644 ICS/sxipan/src/sxipanControl.pan create mode 100755 ICS/sxipan/src/sxipanEntry.tcl create mode 100755 ICS/sxipan/src/sxipanNISE.tcl create mode 100644 ICS/sxipan/src/sxipanNISE_uifClass.tcl create mode 100755 ICS/sxipan/src/sxipanNamedPos.tcl create mode 100644 ICS/sxipan/src/sxipanNamedPos_uifClass.tcl create mode 100644 MS/sxmait/ChangeLog create mode 100644 MS/sxmait/src/GP_bias.obd create mode 100644 MS/sxmait/src/GP_dark.obd create mode 100644 MS/sxmait/src/Makefile create mode 100644 MS/sxmseq/ChangeLog create mode 100644 MS/sxmseq/bitmaps/SOXS_NIR_E2E_Frame_Noise1_CPdefocus_2.fits create mode 100644 MS/sxmseq/bitmaps/SOXS_NIR_E2E_Frame_Noise1_CPdefocus_3.fits create mode 100644 MS/sxmseq/bitmaps/SOXS_NIR_E2E_Frame_Noise1_CPdefocus_4.fits create mode 100644 MS/sxmseq/bitmaps/SOXS_NIR_E2E_Frame_Noise1_CPdefocus_5.fits create mode 100644 MS/sxmseq/bitmaps/SOXS_NIR_E2E_Frame_Noise1_CPdefocus_6.fits create mode 100644 MS/sxmseq/bitmaps/SOXS_NIR_E2E_Frame_Noise1_CPdefocus_7.fits create mode 100644 MS/sxmseq/bitmaps/SOXS_NIR_E2E_Frame_Noise1_CPdefocus_8.fits create mode 100644 MS/sxmseq/bitmaps/pinhole_stddev1_7.0.fits create mode 100644 MS/sxmseq/bitmaps/pinhole_stddev2_6.0.fits create mode 100644 MS/sxmseq/bitmaps/pinhole_stddev3_5.0.fits create mode 100644 MS/sxmseq/bitmaps/pinhole_stddev4_4.0.fits create mode 100644 MS/sxmseq/bitmaps/pinhole_stddev5_3.0.fits create mode 100644 MS/sxmseq/bitmaps/pinhole_stddev6_4.1.fits create mode 100644 MS/sxmseq/bitmaps/pinhole_stddev7_5.1.fits create mode 100644 MS/sxmseq/config/SOXS_gen_tec_ADC.ref create mode 100644 MS/sxmseq/config/SOXS_gen_tec_Focus.ref create mode 100644 MS/sxmseq/config/SOXS_gen_tec_LampOff.ref create mode 100644 MS/sxmseq/config/SOXS_gen_tec_NIRDetLin.ref create mode 100644 MS/sxmseq/config/SOXS_gen_tec_ParkInstrument.ref create mode 100644 MS/sxmseq/config/SOXS_gen_tec_SynchroCheck.ref create mode 100644 MS/sxmseq/config/SOXS_gen_tec_VISDetLin.ref create mode 100644 MS/sxmseq/config/SOXS_gen_tec_flexure.ref create mode 100644 MS/sxmseq/config/SOXS_gen_tec_refacqCheck.ref create mode 100644 MS/sxmseq/config/SOXS_gen_tec_standby.ref create mode 100644 MS/sxmseq/config/SOXS_img_tec_CheckAcqCCD.ref create mode 100644 MS/sxmseq/config/SOXS_img_tec_DetLin.ref create mode 100644 MS/sxmseq/config/SOXS_slt_tec_AlignmentFocus.ref create mode 100644 MS/sxmseq/config/SOXS_slt_tec_Stare.ref create mode 100644 MS/sxmseq/config/SOXS_test.ref create mode 100644 MS/sxmseq/src/Makefile create mode 100644 MS/sxmseq/src/SOXS_gen_tec_ADC.seq create mode 100644 MS/sxmseq/src/SOXS_gen_tec_Astrometry.seq create mode 100644 MS/sxmseq/src/SOXS_gen_tec_DetLin.seq create mode 100644 MS/sxmseq/src/SOXS_gen_tec_Focus.seq create mode 100644 MS/sxmseq/src/SOXS_gen_tec_LampOff.seq create mode 100644 MS/sxmseq/src/SOXS_gen_tec_ObsFree.obdv create mode 100644 MS/sxmseq/src/SOXS_gen_tec_ObsFree.seq create mode 100644 MS/sxmseq/src/SOXS_gen_tec_ParkInstrument.seq create mode 100644 MS/sxmseq/src/SOXS_gen_tec_SynchroCheck.seq create mode 100644 MS/sxmseq/src/SOXS_gen_tec_refacqCheck.seq create mode 100644 MS/sxmseq/src/SOXS_gen_tec_standby.seq create mode 100644 MS/sxmseq/src/SOXS_img_tec_CheckAcqCCD.seq create mode 100644 MS/sxmseq/src/SOXS_img_tec_DetLin.seq create mode 100644 MS/sxmseq/src/SOXS_slt_tec_AlignmentFocus.seq create mode 100644 MS/sxmseq/src/SOXS_slt_tec_Stare.seq create mode 100644 MS/sxmseq/src/SOXS_tec_FreeSetup.obdv create mode 100644 MS/sxmseq/src/SOXS_tec_FreeSetup.seq create mode 100644 MS/sxmseq/src/sxmseqCLIP.tcl create mode 100644 MS/sxmseq/src/sxmseqSelfTest_SOXS.txt create mode 100644 MS/sxmseq/src/sxmseqTsfList.txt create mode 100644 MS/sxmseq/src/sxmseqnirfocus.py create mode 100755 MS/sxmseq/src/sxmseqparabola.py create mode 100644 MS/sxmtsf/ChangeLog create mode 100644 MS/sxmtsf/config/SOXS_tec.isf create mode 100644 MS/sxmtsf/src/Makefile create mode 100644 MS/sxmtsf/src/SOXS_gen_tec_ADC.tsfx create mode 100644 MS/sxmtsf/src/SOXS_gen_tec_Astrometry.tsfx create mode 100644 MS/sxmtsf/src/SOXS_gen_tec_Focus.tsfx create mode 100644 MS/sxmtsf/src/SOXS_gen_tec_LampOff.tsfx create mode 100644 MS/sxmtsf/src/SOXS_gen_tec_NIRDetLin.tsfx create mode 100644 MS/sxmtsf/src/SOXS_gen_tec_ObsFree.tsfx create mode 100644 MS/sxmtsf/src/SOXS_gen_tec_ParkInstrument.tsfx create mode 100644 MS/sxmtsf/src/SOXS_gen_tec_SynchroCheck.tsfx create mode 100644 MS/sxmtsf/src/SOXS_gen_tec_VISDetLin.tsfx create mode 100644 MS/sxmtsf/src/SOXS_gen_tec_flexure.tsfx create mode 100644 MS/sxmtsf/src/SOXS_gen_tec_refacqCheck.tsfx create mode 100644 MS/sxmtsf/src/SOXS_gen_tec_standby.tsfx create mode 100644 MS/sxmtsf/src/SOXS_img_tec_CheckAcqCCD.tsfx create mode 100644 MS/sxmtsf/src/SOXS_img_tec_DetLin.tsfx create mode 100644 MS/sxmtsf/src/SOXS_slt_tec_AlignmentFocus.tsfx create mode 100644 MS/sxmtsf/src/SOXS_slt_tec_Stare.tsfx create mode 100644 MS/sxmtsf/src/SOXS_tec_FreeSetup.tsfx create mode 100644 OS/sxo/CDT/sxoControl.cdt create mode 100644 OS/sxo/ChangeLog create mode 100644 OS/sxo/ERRORS/HELP/noHelp.hlp create mode 100644 OS/sxo/ERRORS/HELP/sxoERR_CACHE_FILE_EXISTS.hlp create mode 100644 OS/sxo/ERRORS/HELP/sxoERR_CONFLICT_OFFSET.hlp create mode 100644 OS/sxo/ERRORS/HELP/sxoERR_INVALIDE_EXP_MODE.hlp create mode 100644 OS/sxo/ERRORS/HELP/sxoERR_KEYW_NOT_SAVED.hlp create mode 100644 OS/sxo/ERRORS/HELP/sxoERR_NO_FILE_SPECIFIED.hlp create mode 100644 OS/sxo/ERRORS/HELP/sxoERR_NO_KEYW_TO_SAVE.hlp create mode 100644 OS/sxo/ERRORS/sxo_ERRORS create mode 100644 OS/sxo/dbl/sxo.db create mode 100644 OS/sxo/dbl/sxoSERVER.class create mode 100644 OS/sxo/doc/README create mode 100644 OS/sxo/doc/README_Create_Newos create mode 100644 OS/sxo/doc/README_add_kw_to_fits_file create mode 100644 OS/sxo/doc/README_add_new_keyword create mode 100644 OS/sxo/doc/README_add_new_subsystem create mode 100644 OS/sxo/doc/README_addcommand create mode 100644 OS/sxo/doc/README_keydbmap create mode 100644 OS/sxo/include/sxoPrivate.h create mode 100644 OS/sxo/include/sxoSERVER.h create mode 100644 OS/sxo/src/Makefile create mode 100644 OS/sxo/src/sxoControl.C create mode 100644 OS/sxo/src/sxoSERVER.C create mode 100644 OS/sxocal/ChangeLog create mode 100644 OS/sxocal/config/SOXS_gen_cal_NIRDark.obdx create mode 100644 OS/sxocal/config/SOXS_gen_cal_VISDark.obdx create mode 100644 OS/sxocal/config/SOXS_img_acq_SkyFlat.obdx create mode 100644 OS/sxocal/config/SOXS_img_cal_Dark.obdx create mode 100644 OS/sxocal/config/SOXS_img_cal_SkyFlat.obdx create mode 100644 OS/sxocal/config/SOXS_slt_cal_NIRArcs.obdx create mode 100644 OS/sxocal/config/SOXS_slt_cal_NIRLampFlat.obdx create mode 100644 OS/sxocal/config/SOXS_slt_cal_VISArcs.obdx create mode 100644 OS/sxocal/config/SOXS_slt_cal_VISLampFlat.obdx create mode 100644 OS/sxocal/config/sxocalCALOB.cfg create mode 100644 OS/sxocal/config/sxocalCONFIG.cfg create mode 100644 OS/sxocal/config/sxocalCalobEnd.obd create mode 100644 OS/sxocal/src/Makefile create mode 100644 OS/sxopan/ChangeLog create mode 100644 OS/sxopan/bitmaps/panel-acqs-0.gif create mode 100644 OS/sxopan/bitmaps/panel-acqs-1.gif create mode 100644 OS/sxopan/bitmaps/panel-acqs-2.gif create mode 100644 OS/sxopan/bitmaps/panel-acqs-3.gif create mode 100644 OS/sxopan/bitmaps/panel-adc-on.gif create mode 100644 OS/sxopan/bitmaps/panel-arcs-1.gif create mode 100644 OS/sxopan/bitmaps/panel-arcs-2.gif create mode 100644 OS/sxopan/bitmaps/panel-arcs-3.gif create mode 100644 OS/sxopan/bitmaps/panel-arcs-4.gif create mode 100644 OS/sxopan/bitmaps/panel-arcs-5.gif create mode 100644 OS/sxopan/bitmaps/panel-cals-1.gif create mode 100644 OS/sxopan/bitmaps/panel-cals-2.gif create mode 100644 OS/sxopan/bitmaps/panel-concave.gif create mode 100644 OS/sxopan/bitmaps/panel-convexe.gif create mode 100644 OS/sxopan/bitmaps/panel-filter-1.gif create mode 100644 OS/sxopan/bitmaps/panel-imaging-camera.gif create mode 100644 OS/sxopan/bitmaps/panel-lamp-1.gif create mode 100644 OS/sxopan/bitmaps/panel-lamp-2.gif create mode 100644 OS/sxopan/bitmaps/panel-lamp-off.gif create mode 100644 OS/sxopan/bitmaps/panel-mirror-1.gif create mode 100644 OS/sxopan/bitmaps/panel-mirror-2.gif create mode 100644 OS/sxopan/bitmaps/panel-piezo-on.gif create mode 100644 OS/sxopan/bitmaps/panel-pinhole-1.gif create mode 100644 OS/sxopan/bitmaps/panel-pinhole-2.gif create mode 100644 OS/sxopan/bitmaps/panel-pinhole.gif create mode 100644 OS/sxopan/bitmaps/panel-prism.gif create mode 100644 OS/sxopan/bitmaps/panel-shutter-closed.gif create mode 100644 OS/sxopan/bitmaps/panel-shutter-open.gif create mode 100644 OS/sxopan/bitmaps/panel-slide-0.gif create mode 100644 OS/sxopan/bitmaps/panel-slide-1.gif create mode 100644 OS/sxopan/bitmaps/panel-slide-2.gif create mode 100644 OS/sxopan/bitmaps/panel-slide-3.gif create mode 100644 OS/sxopan/bitmaps/panel-slide-7.gif create mode 100644 OS/sxopan/bitmaps/panel-slide.gif create mode 100644 OS/sxopan/bitmaps/panel-slit-0.gif create mode 100644 OS/sxopan/bitmaps/panel-slit-1.gif create mode 100644 OS/sxopan/bitmaps/panel-slit-2.gif create mode 100644 OS/sxopan/bitmaps/panel-slit-3.gif create mode 100644 OS/sxopan/bitmaps/panel-slit-4.gif create mode 100644 OS/sxopan/bitmaps/panel-slit-5.gif create mode 100644 OS/sxopan/bitmaps/panel-slit-together.gif create mode 100644 OS/sxopan/bitmaps/panel-spectrograph-2.gif create mode 100644 OS/sxopan/bitmaps/panel-spectrograph.gif create mode 100644 OS/sxopan/bitmaps/panel-star-2-0.gif create mode 100644 OS/sxopan/bitmaps/panel-star-2-7.gif create mode 100644 OS/sxopan/bitmaps/panel-star-2.gif create mode 100644 OS/sxopan/bitmaps/panel-star.gif create mode 100644 OS/sxopan/bitmaps/panel-technical-camera.gif create mode 100644 OS/sxopan/bitmaps/soxslogo.gif create mode 100644 OS/sxopan/bitmaps/soxslogo.png create mode 100644 OS/sxopan/src/Makefile create mode 100644 OS/sxopan/src/sxopanControl.doc create mode 100644 OS/sxopan/src/sxopanControl.pan create mode 100644 OS/sxopan/src/sxopanControlACQ_uifClass.tcl create mode 100644 OS/sxopan/src/sxopanControlAlarm_uifClass.tcl create mode 100644 OS/sxopan/src/sxopanControlDisk_uifClass.tcl create mode 100644 OS/sxopan/src/sxopanControlNIR_uifClass.tcl create mode 100644 OS/sxopan/src/sxopanControlStat_uifClass.tcl create mode 100644 OS/sxopan/src/sxopanControlTCS_uifClass.tcl create mode 100644 OS/sxopan/src/sxopanControlTECH_uifClass.tcl create mode 100644 OS/sxopan/src/sxopanControlVIS_uifClass.tcl create mode 100644 OS/sxopan/src/sxopanEngineering.doc create mode 100644 OS/sxopan/src/sxopanEngineering.pan create mode 100755 OS/sxopan/src/sxopanGuiding.pan create mode 100644 OS/sxopan/src/sxopanGuidingProcs.tcl create mode 100644 OS/sxopan/src/sxopanMisc.tcl create mode 100644 OS/sxopan/src/sxopanStatus.doc create mode 100644 OS/sxopan/src/sxopanStatus.pan create mode 100644 OS/sxopan/src/sxopanStatusTDCS.tcl create mode 100755 OS/sxopan/src/sxopanSynoptic.pan create mode 100644 OS/sxopan/src/sxopanSynopticBASE.tcl create mode 100644 OS/sxopan/src/sxopanSynopticProcs.tcl create mode 100644 OS/sxopan/src/sxopanSynopticSOXS.tcl create mode 100644 OS/sxoseq/ChangeLog create mode 100644 OS/sxoseq/bitmaps/pinhole_NIR_A.fits create mode 100644 OS/sxoseq/bitmaps/pinhole_NIR_B.fits create mode 100644 OS/sxoseq/bitmaps/pinhole_VIS_A.fits create mode 100644 OS/sxoseq/bitmaps/pinhole_VIS_B.fits create mode 100644 OS/sxoseq/config/SOXS_gen_cal_AFC.ref create mode 100644 OS/sxoseq/config/SOXS_gen_cal_NIRDark.ref create mode 100644 OS/sxoseq/config/SOXS_gen_cal_VISDark.ref create mode 100644 OS/sxoseq/config/SOXS_img_acq.ref create mode 100644 OS/sxoseq/config/SOXS_img_cal_Dark.ref create mode 100644 OS/sxoseq/config/SOXS_img_cal_SkyFlat.ref create mode 100644 OS/sxoseq/config/SOXS_img_obs.ref create mode 100644 OS/sxoseq/config/SOXS_img_obs_GenericOffset.ref create mode 100644 OS/sxoseq/config/SOXS_slt_acq.ref create mode 100644 OS/sxoseq/config/SOXS_slt_cal_NIRAllLampsAtt.ref create mode 100644 OS/sxoseq/config/SOXS_slt_cal_NIRAllLampsCalib.ref create mode 100644 OS/sxoseq/config/SOXS_slt_cal_SpecphotNod.ref create mode 100644 OS/sxoseq/config/SOXS_slt_cal_SpecphotStdOffset.ref create mode 100644 OS/sxoseq/config/SOXS_slt_cal_SpecphotStdStare.ref create mode 100644 OS/sxoseq/config/SOXS_slt_cal_TelluricStdNod.ref create mode 100644 OS/sxoseq/config/SOXS_slt_cal_TelluricStdStare.ref create mode 100644 OS/sxoseq/config/SOXS_slt_cal_VISAllLampsAtt.ref create mode 100644 OS/sxoseq/config/SOXS_slt_cal_VISAllLampsCalib.ref create mode 100644 OS/sxoseq/config/SOXS_slt_obs_AutoNodOnSlit.ref create mode 100644 OS/sxoseq/config/SOXS_slt_obs_FixedSkyOffset.ref create mode 100644 OS/sxoseq/config/SOXS_slt_obs_GenericOffset.ref create mode 100644 OS/sxoseq/config/SOXS_slt_obs_Mapping.ref create mode 100644 OS/sxoseq/config/SOXS_slt_obs_Stare.ref create mode 100644 OS/sxoseq/config/SOXS_slt_obs_StareSynchro.ref create mode 100644 OS/sxoseq/config/SOXS_test.ref create mode 100644 OS/sxoseq/dbl/sxoseq.db create mode 100644 OS/sxoseq/src/Makefile create mode 100644 OS/sxoseq/src/SOXS_gen_cal_AFC.seq create mode 100644 OS/sxoseq/src/SOXS_gen_cal_AllDarksCalib.seq create mode 100644 OS/sxoseq/src/SOXS_img_acq.seq create mode 100644 OS/sxoseq/src/SOXS_img_cal_AllDarksCalib.seq create mode 100644 OS/sxoseq/src/SOXS_img_cal_SkyFlat.seq create mode 100644 OS/sxoseq/src/SOXS_img_obs.seq create mode 100644 OS/sxoseq/src/SOXS_img_obs_GenericOffset.seq create mode 100644 OS/sxoseq/src/SOXS_slt_acq.seq create mode 100644 OS/sxoseq/src/SOXS_slt_cal_AllLampsCalib.seq create mode 100644 OS/sxoseq/src/SOXS_slt_obs_AllNodOffset.seq create mode 100644 OS/sxoseq/src/SOXS_slt_obs_AllStare.seq create mode 100644 OS/sxoseq/src/SOXS_slt_obs_Mapping.seq create mode 100644 OS/sxoseq/src/SOXS_slt_obs_StareSynchro.seq create mode 100644 OS/sxoseq/src/SOXS_tec_FreeSetup.obdv create mode 100644 OS/sxoseq/src/sxoseqFITS.tcl create mode 100644 OS/sxoseq/src/sxoseqICS.tcl create mode 100644 OS/sxoseq/src/sxoseqOBS.tcl create mode 100644 OS/sxoseq/src/sxoseqOS.tcl create mode 100644 OS/sxoseq/src/sxoseqPoisson.C create mode 100644 OS/sxoseq/src/sxoseqSelfTest_SOXS.txt create mode 100644 OS/sxoseq/src/sxoseqTCS.tcl create mode 100644 OS/sxoseq/src/sxoseqTPL.tcl create mode 100644 OS/sxoseq/src/sxoseqTsfList.txt create mode 100644 OS/sxosg/CDT/sxosgControl.cdt create mode 100644 OS/sxosg/ChangeLog create mode 100644 OS/sxosg/ERRORS/sxosg_ERRORS create mode 100644 OS/sxosg/config/.wsfVersion create mode 100644 OS/sxosg/config/model/UML_Standard_Profile.Dependency_Matrix_Profile.profile.uml create mode 100644 OS/sxosg/config/model/UML_Standard_Profile.MagicDraw_Profile.DSL_Customization.profile.uml create mode 100644 OS/sxosg/config/model/UML_Standard_Profile.MagicDraw_Profile.Find_By_Text.profile.uml create mode 100644 OS/sxosg/config/model/UML_Standard_Profile.MagicDraw_Profile.Traceability_customization.profile.uml create mode 100644 OS/sxosg/config/model/UML_Standard_Profile.MagicDraw_Profile.profile.uml create mode 100644 OS/sxosg/config/model/UML_Standard_Profile.StandardProfile.profile.uml create mode 100644 OS/sxosg/config/model/UML_Standard_Profile.StandardProfileL2.profile.uml create mode 100644 OS/sxosg/config/model/UML_Standard_Profile.StandardProfileL3.profile.uml create mode 100644 OS/sxosg/config/model/UML_Standard_Profile.Validation_Profile.profile.uml create mode 100644 OS/sxosg/config/model/comodoProfile.profile.uml create mode 100644 OS/sxosg/config/model/sxosg.uml create mode 100644 OS/sxosg/config/model/sxosg.xml create mode 100644 OS/sxosg/config/sxosg.xml create mode 100644 OS/sxosg/config/sxosgEvents.txt create mode 100644 OS/sxosg/dbl/sxosgDB_CONFIG.class create mode 100644 OS/sxosg/dbl/sxosgDB_DATA.class create mode 100644 OS/sxosg/dbl/sxosgDB_MAIN.class create mode 100644 OS/sxosg/include/sxosg.h create mode 100644 OS/sxosg/include/sxosgACTION_CANDGS.h create mode 100644 OS/sxosg/include/sxosgACTION_EXIT.h create mode 100644 OS/sxosg/include/sxosgACTION_EXPEND.h create mode 100644 OS/sxosg/include/sxosgACTION_EXPSTRT.h create mode 100644 OS/sxosg/include/sxosgACTION_GUIDING.h create mode 100644 OS/sxosg/include/sxosgACTION_INIT.h create mode 100644 OS/sxosg/include/sxosgACTION_MGR.h create mode 100644 OS/sxosg/include/sxosgACTION_OFF.h create mode 100644 OS/sxosg/include/sxosgACTION_ONLINE.h create mode 100644 OS/sxosg/include/sxosgACTION_PRGS.h create mode 100644 OS/sxosg/include/sxosgACTION_PRTOGS.h create mode 100644 OS/sxosg/include/sxosgACTION_SELFTST.h create mode 100644 OS/sxosg/include/sxosgACTION_SELGS.h create mode 100644 OS/sxosg/include/sxosgACTION_SETLOG.h create mode 100644 OS/sxosg/include/sxosgACTION_SETUP.h create mode 100644 OS/sxosg/include/sxosgACTION_SIMULAT.h create mode 100644 OS/sxosg/include/sxosgACTION_SRCGS.h create mode 100644 OS/sxosg/include/sxosgACTION_STANDBY.h create mode 100644 OS/sxosg/include/sxosgACTION_STARTAG.h create mode 100644 OS/sxosg/include/sxosgACTION_STATE.h create mode 100644 OS/sxosg/include/sxosgACTION_STATUS.h create mode 100644 OS/sxosg/include/sxosgACTION_STOP.h create mode 100644 OS/sxosg/include/sxosgACTION_STOPAG.h create mode 100644 OS/sxosg/include/sxosgACTION_VERBOSE.h create mode 100644 OS/sxosg/include/sxosgACTION_VERSION.h create mode 100644 OS/sxosg/include/sxosgAPPLICATION.h create mode 100644 OS/sxosg/include/sxosgActions.h create mode 100644 OS/sxosg/include/sxosgCONFIG.h create mode 100644 OS/sxosg/include/sxosgDATA.h create mode 100644 OS/sxosg/include/sxosgDefines.h create mode 100644 OS/sxosg/include/sxosgEvents.h create mode 100644 OS/sxosg/include/sxosgGS_CATALOG_MGR.h create mode 100644 OS/sxosg/include/sxosgGS_INFO.h create mode 100644 OS/sxosg/include/sxosgGUIDE_STAR.h create mode 100644 OS/sxosg/include/sxosgGUIDE_STAR.icc create mode 100644 OS/sxosg/include/sxosgGUIDING_INFO.h create mode 100644 OS/sxosg/include/sxosgGUIDING_INFO.icc create mode 100644 OS/sxosg/include/sxosgKEY_VAL.h create mode 100644 OS/sxosg/include/sxosgKEY_VAL.icc create mode 100644 OS/sxosg/include/sxosgSETUP_VALUES.h create mode 100644 OS/sxosg/src/Makefile create mode 100644 OS/sxosg/src/sxosgACTION_CANDGS.C create mode 100644 OS/sxosg/src/sxosgACTION_EXIT.C create mode 100644 OS/sxosg/src/sxosgACTION_EXPEND.C create mode 100644 OS/sxosg/src/sxosgACTION_EXPSTRT.C create mode 100644 OS/sxosg/src/sxosgACTION_GUIDING.C create mode 100644 OS/sxosg/src/sxosgACTION_INIT.C create mode 100644 OS/sxosg/src/sxosgACTION_MGR.C create mode 100644 OS/sxosg/src/sxosgACTION_OFF.C create mode 100644 OS/sxosg/src/sxosgACTION_ONLINE.C create mode 100644 OS/sxosg/src/sxosgACTION_PRGS.C create mode 100644 OS/sxosg/src/sxosgACTION_PRTOGS.C create mode 100644 OS/sxosg/src/sxosgACTION_SELFTST.C create mode 100644 OS/sxosg/src/sxosgACTION_SELGS.C create mode 100644 OS/sxosg/src/sxosgACTION_SETLOG.C create mode 100644 OS/sxosg/src/sxosgACTION_SETUP.C create mode 100644 OS/sxosg/src/sxosgACTION_SIMULAT.C create mode 100644 OS/sxosg/src/sxosgACTION_SRCGS.C create mode 100644 OS/sxosg/src/sxosgACTION_STANDBY.C create mode 100644 OS/sxosg/src/sxosgACTION_STARTAG.C create mode 100644 OS/sxosg/src/sxosgACTION_STATE.C create mode 100644 OS/sxosg/src/sxosgACTION_STATUS.C create mode 100644 OS/sxosg/src/sxosgACTION_STOP.C create mode 100644 OS/sxosg/src/sxosgACTION_STOPAG.C create mode 100644 OS/sxosg/src/sxosgACTION_VERBOSE.C create mode 100644 OS/sxosg/src/sxosgACTION_VERSION.C create mode 100644 OS/sxosg/src/sxosgAPPLICATION.C create mode 100644 OS/sxosg/src/sxosgCONFIG.C create mode 100644 OS/sxosg/src/sxosgControl.C create mode 100644 OS/sxosg/src/sxosgDATA.C create mode 100644 OS/sxosg/src/sxosgGS_CATALOG_MGR.C create mode 100644 OS/sxosg/src/sxosgGS_INFO.C create mode 100644 OS/sxosg/src/sxosgMakefile create mode 100644 OS/sxosg/src/sxosgSETUP_VALUES.C create mode 100644 OS/sxosg/test/ENVIRONMENTS/wsTat/CcsEnvTable create mode 100644 OS/sxosg/test/ENVIRONMENTS/wsTat/dbl/DATABASE.db create mode 100644 OS/sxosg/test/ENVIRONMENTS/wsTat/dbl/Makefile create mode 100644 OS/sxosg/test/ENVIRONMENTS/wsTat/dbl/USER.db create mode 100644 OS/sxosg/test/Makefile create mode 100644 OS/sxosg/test/TESTLIST.td create mode 100644 OS/sxosg/test/TestDriver create mode 100644 OS/sxosg/test/TestDriver.sed create mode 100644 OS/sxosg/test/TestList create mode 100644 OS/sxosg/test/ref/TestDriver.ref create mode 100644 OS/sxosg/test/sxosgTestSetEnv.sh create mode 100644 OS/sxosg/test/sxosgTestStart.sh create mode 100644 OS/sxosg/test/sxosgTestStdCommands.ref create mode 100644 OS/sxosg/test/sxosgTestStdCommands.tcl create mode 100644 OS/sxosg/test/sxosgTestSupport.tcl create mode 100644 OS/sxotsf/ChangeLog create mode 100644 OS/sxotsf/config/SOXS.isf create mode 100644 OS/sxotsf/include/sxotsfDET_ACQ.tsfx create mode 100644 OS/sxotsf/include/sxotsfDET_ACQ_EXPOLEVEL.tsfx create mode 100644 OS/sxotsf/include/sxotsfDET_ACQ_EXPOTIME.tsfx create mode 100644 OS/sxotsf/include/sxotsfDET_ACQ_READRATE.tsfx create mode 100644 OS/sxotsf/include/sxotsfDET_ACQ_WIN.tsfx create mode 100644 OS/sxotsf/include/sxotsfDET_NIR.tsfx create mode 100644 OS/sxotsf/include/sxotsfDET_NIR_LIST.tsfx create mode 100644 OS/sxotsf/include/sxotsfDET_TECH.tsfx create mode 100644 OS/sxotsf/include/sxotsfDET_VIS.tsfx create mode 100644 OS/sxotsf/include/sxotsfDET_VIS_LIST.tsfx create mode 100644 OS/sxotsf/include/sxotsfDPR.tsfx create mode 100644 OS/sxotsf/include/sxotsfINS_ACFW.tsfx create mode 100644 OS/sxotsf/include/sxotsfINS_ACQS.tsfx create mode 100644 OS/sxotsf/include/sxotsfINS_ADC.tsfx create mode 100644 OS/sxotsf/include/sxotsfINS_AFC1.tsfx create mode 100644 OS/sxotsf/include/sxotsfINS_AFC2.tsfx create mode 100644 OS/sxotsf/include/sxotsfINS_AFOC.tsfx create mode 100644 OS/sxotsf/include/sxotsfINS_ARGO.tsfx create mode 100644 OS/sxotsf/include/sxotsfINS_CALS.tsfx create mode 100644 OS/sxotsf/include/sxotsfINS_CUPS.tsfx create mode 100644 OS/sxotsf/include/sxotsfINS_DEUT.tsfx create mode 100644 OS/sxotsf/include/sxotsfINS_INSH.tsfx create mode 100644 OS/sxotsf/include/sxotsfINS_LAMPP.tsfx create mode 100644 OS/sxotsf/include/sxotsfINS_LAMPS.tsfx create mode 100644 OS/sxotsf/include/sxotsfINS_MERC.tsfx create mode 100644 OS/sxotsf/include/sxotsfINS_MODE.tsfx create mode 100644 OS/sxotsf/include/sxotsfINS_NEON.tsfx create mode 100644 OS/sxotsf/include/sxotsfINS_NFOC.tsfx create mode 100644 OS/sxotsf/include/sxotsfINS_NISE.tsfx create mode 100644 OS/sxotsf/include/sxotsfINS_QTH.tsfx create mode 100644 OS/sxotsf/include/sxotsfINS_THAR.tsfx create mode 100644 OS/sxotsf/include/sxotsfINS_VISE.tsfx create mode 100644 OS/sxotsf/include/sxotsfINS_XENO.tsfx create mode 100644 OS/sxotsf/include/sxotsfSEQ.tsfx create mode 100644 OS/sxotsf/include/sxotsfSEQ_ACQ.tsfx create mode 100644 OS/sxotsf/include/sxotsfSEQ_ACQSNAPSHOT.tsfx create mode 100644 OS/sxotsf/include/sxotsfSEQ_ADCPOS.tsfx create mode 100644 OS/sxotsf/include/sxotsfSEQ_AFC.tsfx create mode 100644 OS/sxotsf/include/sxotsfSEQ_CAL_MODE.tsfx create mode 100644 OS/sxotsf/include/sxotsfSEQ_FIXOFFSET.tsfx create mode 100644 OS/sxotsf/include/sxotsfSEQ_FOCUS.tsfx create mode 100644 OS/sxotsf/include/sxotsfSEQ_GUIDING.tsfx create mode 100644 OS/sxotsf/include/sxotsfSEQ_JITWIDTH.tsfx create mode 100644 OS/sxotsf/include/sxotsfSEQ_N.tsfx create mode 100644 OS/sxotsf/include/sxotsfSEQ_NCYCLE.tsfx create mode 100644 OS/sxotsf/include/sxotsfSEQ_NEXPO.tsfx create mode 100644 OS/sxotsf/include/sxotsfSEQ_NLOOP.tsfx create mode 100644 OS/sxotsf/include/sxotsfSEQ_NODTHROW.tsfx create mode 100644 OS/sxotsf/include/sxotsfSEQ_N_LIST.tsfx create mode 100644 OS/sxotsf/include/sxotsfSEQ_OFFSETCOORDS.tsfx create mode 100644 OS/sxotsf/include/sxotsfSEQ_OFFZERO.tsfx create mode 100644 OS/sxotsf/include/sxotsfSEQ_PRESET.tsfx create mode 100644 OS/sxotsf/include/sxotsfSEQ_RELOFFSET.tsfx create mode 100644 OS/sxotsf/include/sxotsfSEQ_STEP.tsfx create mode 100644 OS/sxotsf/include/sxotsfSEQ_WIN.tsfx create mode 100644 OS/sxotsf/include/sxotsfTEL.tsfx create mode 100644 OS/sxotsf/src/Makefile create mode 100644 OS/sxotsf/src/SOXS_gen_cal_AFC.tsfx create mode 100644 OS/sxotsf/src/SOXS_gen_cal_NIRDark.tsfx create mode 100644 OS/sxotsf/src/SOXS_gen_cal_VISBias.tsfx create mode 100644 OS/sxotsf/src/SOXS_gen_cal_VISDark.tsfx create mode 100644 OS/sxotsf/src/SOXS_img_acq.tsfx create mode 100644 OS/sxotsf/src/SOXS_img_acq_SkyFlat.tsfx create mode 100644 OS/sxotsf/src/SOXS_img_cal_Bias.tsfx create mode 100644 OS/sxotsf/src/SOXS_img_cal_Dark.tsfx create mode 100644 OS/sxotsf/src/SOXS_img_cal_SkyFlat.tsfx create mode 100644 OS/sxotsf/src/SOXS_img_obs.tsfx create mode 100644 OS/sxotsf/src/SOXS_img_obs_GenericOffset.tsfx create mode 100644 OS/sxotsf/src/SOXS_img_obs_cal_dist.tsfx create mode 100644 OS/sxotsf/src/SOXS_img_obs_cal_phot.tsfx create mode 100644 OS/sxotsf/src/SOXS_slt_acq.tsfx create mode 100644 OS/sxotsf/src/SOXS_slt_cal_NIRArcs.tsfx create mode 100644 OS/sxotsf/src/SOXS_slt_cal_NIRArcsAtt.tsfx create mode 100644 OS/sxotsf/src/SOXS_slt_cal_NIRArcsMultiplePinhole.tsfx create mode 100644 OS/sxotsf/src/SOXS_slt_cal_NIRArcsPinhole.tsfx create mode 100644 OS/sxotsf/src/SOXS_slt_cal_NIRLampFlat.tsfx create mode 100644 OS/sxotsf/src/SOXS_slt_cal_NIRLampFlatAtt.tsfx create mode 100644 OS/sxotsf/src/SOXS_slt_cal_NIRLampFlatPinhole.tsfx create mode 100644 OS/sxotsf/src/SOXS_slt_cal_SpecphotNod.tsfx create mode 100644 OS/sxotsf/src/SOXS_slt_cal_SpecphotStdOffset.tsfx create mode 100644 OS/sxotsf/src/SOXS_slt_cal_SpecphotStdStare.tsfx create mode 100644 OS/sxotsf/src/SOXS_slt_cal_TelluricStdNod.tsfx create mode 100644 OS/sxotsf/src/SOXS_slt_cal_TelluricStdStare.tsfx create mode 100644 OS/sxotsf/src/SOXS_slt_cal_VISArcs.tsfx create mode 100644 OS/sxotsf/src/SOXS_slt_cal_VISArcsAtt.tsfx create mode 100644 OS/sxotsf/src/SOXS_slt_cal_VISArcsMultiplePinhole.tsfx create mode 100644 OS/sxotsf/src/SOXS_slt_cal_VISArcsPinhole.tsfx create mode 100644 OS/sxotsf/src/SOXS_slt_cal_VISLampFlat.tsfx create mode 100644 OS/sxotsf/src/SOXS_slt_cal_VISLampFlatAtt.tsfx create mode 100644 OS/sxotsf/src/SOXS_slt_cal_VISLampFlatDeut.tsfx create mode 100644 OS/sxotsf/src/SOXS_slt_cal_VISLampFlatPinhole.tsfx create mode 100644 OS/sxotsf/src/SOXS_slt_obs_AutoNodOnSlit.tsfx create mode 100644 OS/sxotsf/src/SOXS_slt_obs_FixedSkyOffset.tsfx create mode 100644 OS/sxotsf/src/SOXS_slt_obs_GenericOffset.tsfx create mode 100644 OS/sxotsf/src/SOXS_slt_obs_Mapping.tsfx create mode 100644 OS/sxotsf/src/SOXS_slt_obs_Stare.tsfx create mode 100644 OS/sxotsf/src/SOXS_slt_obs_StareSynchro.tsfx create mode 100644 PLC/TC3.1/psxics1/CP_test/CP_test.sln create mode 100644 PLC/TC3.1/psxics1/CP_test/CP_test/CP_test.tsproj create mode 100644 PLC/TC3.1/psxics1/CP_test/CP_test/CP_test/CP_test.plcproj create mode 100644 PLC/TC3.1/psxics1/CP_test/CP_test/CP_test/CP_test.tmc create mode 100644 PLC/TC3.1/psxics1/CP_test/CP_test/CP_test/DUTs/AFC/E_AFC_CMD.TcDUT create mode 100644 PLC/TC3.1/psxics1/CP_test/CP_test/CP_test/DUTs/AFC/E_AFC_ERROR.TcDUT create mode 100644 PLC/TC3.1/psxics1/CP_test/CP_test/CP_test/DUTs/AFC/E_AFC_STATE.TcDUT create mode 100644 PLC/TC3.1/psxics1/CP_test/CP_test/CP_test/DUTs/AFC/E_AFC_STATUS.TcDUT create mode 100644 PLC/TC3.1/psxics1/CP_test/CP_test/CP_test/DUTs/AFC/T_AFC_CTRL.TcDUT create mode 100644 PLC/TC3.1/psxics1/CP_test/CP_test/CP_test/DUTs/AFC/T_AFC_INFO.TcDUT create mode 100644 PLC/TC3.1/psxics1/CP_test/CP_test/CP_test/DUTs/AFC/T_AFC_STAT.TcDUT create mode 100644 PLC/TC3.1/psxics1/CP_test/CP_test/CP_test/DUTs/NISE/E_NISE_CMD.TcDUT create mode 100644 PLC/TC3.1/psxics1/CP_test/CP_test/CP_test/DUTs/NISE/E_NISE_ERROR.TcDUT create mode 100644 PLC/TC3.1/psxics1/CP_test/CP_test/CP_test/DUTs/NISE/E_NISE_STATE.TcDUT create mode 100644 PLC/TC3.1/psxics1/CP_test/CP_test/CP_test/DUTs/NISE/E_NISE_STATUS.TcDUT create mode 100644 PLC/TC3.1/psxics1/CP_test/CP_test/CP_test/DUTs/NISE/T_NISE_CFG.TcDUT create mode 100644 PLC/TC3.1/psxics1/CP_test/CP_test/CP_test/DUTs/NISE/T_NISE_CTRL.TcDUT create mode 100644 PLC/TC3.1/psxics1/CP_test/CP_test/CP_test/DUTs/NISE/T_NISE_INFO.TcDUT create mode 100644 PLC/TC3.1/psxics1/CP_test/CP_test/CP_test/DUTs/NISE/T_NISE_STAT.TcDUT create mode 100644 PLC/TC3.1/psxics1/CP_test/CP_test/CP_test/GlobalTextList.TcGTLO create mode 100644 PLC/TC3.1/psxics1/CP_test/CP_test/CP_test/POUs/FB_AFC.TcPOU create mode 100644 PLC/TC3.1/psxics1/CP_test/CP_test/CP_test/POUs/FB_NISE.TcPOU create mode 100644 PLC/TC3.1/psxics1/CP_test/CP_test/CP_test/POUs/MAIN.TcPOU create mode 100644 PLC/TC3.1/psxics1/CP_test/CP_test/CP_test/PlcTask.TcTTO create mode 100644 PLC/TC3.1/psxics1/CP_test/CP_test/CP_test/VISU_TASK.TcTTO create mode 100644 PLC/TC3.1/psxics1/CP_test/CP_test/CP_test/VISUs/CPU_Functions_Control.TcVIS create mode 100644 PLC/TC3.1/psxics1/CP_test/CP_test/CP_test/VISUs/CPU_General.TcVIS create mode 100644 PLC/TC3.1/psxics1/CP_test/CP_test/CP_test/VISUs/MAIN_Control_Panel.TcVIS create mode 100644 PLC/TC3.1/psxics1/CP_test/CP_test/CP_test/VISUs/PCU1/ADC1.TcVIS create mode 100644 PLC/TC3.1/psxics1/CP_test/CP_test/CP_test/VISUs/PCU1/ADC1_cfg.TcVIS create mode 100644 PLC/TC3.1/psxics1/CP_test/CP_test/CP_test/VISUs/PCU1/ADC1_ctrl.TcVIS create mode 100644 PLC/TC3.1/psxics1/CP_test/CP_test/CP_test/VISUs/PCU1/ADC2.TcVIS create mode 100644 PLC/TC3.1/psxics1/CP_test/CP_test/CP_test/VISUs/PCU1/ADC2_cfg.TcVIS create mode 100644 PLC/TC3.1/psxics1/CP_test/CP_test/CP_test/VISUs/PCU1/ADC2_ctrl.TcVIS create mode 100644 PLC/TC3.1/psxics1/CP_test/CP_test/CP_test/VISUs/PCU1/Calselector_cfg.TcVIS create mode 100644 PLC/TC3.1/psxics1/CP_test/CP_test/CP_test/VISUs/PCU1/Calselector_ctrl.TcVIS create mode 100644 PLC/TC3.1/psxics1/CP_test/CP_test/CP_test/VISUs/PCU1/Camselector_cfg.TcVIS create mode 100644 PLC/TC3.1/psxics1/CP_test/CP_test/CP_test/VISUs/PCU1/Camselector_ctrl.TcVIS create mode 100644 PLC/TC3.1/psxics1/CP_test/CP_test/CP_test/VISUs/PCU2/Camexchanger_cfg.TcVIS create mode 100644 PLC/TC3.1/psxics1/CP_test/CP_test/CP_test/VISUs/PCU2/Camexchanger_ctrl.TcVIS create mode 100644 PLC/TC3.1/psxics1/CP_test/CP_test/CP_test/VISUs/PCU2/Camfocusing_cfg.TcVIS create mode 100644 PLC/TC3.1/psxics1/CP_test/CP_test/CP_test/VISUs/PCU2/Camfocusing_ctrl.TcVIS create mode 100644 PLC/TC3.1/psxics1/CP_test/CP_test/CP_test/VISUs/PCU2/Nirfocusing_cfg.TcVIS create mode 100644 PLC/TC3.1/psxics1/CP_test/CP_test/CP_test/VISUs/PCU2/Nirfocusing_ctrl.TcVIS create mode 100644 PLC/TC3.1/psxics1/CP_test/CP_test/CP_test/VISUs/PCU2/Visexchanger_cfg.TcVIS create mode 100644 PLC/TC3.1/psxics1/CP_test/CP_test/CP_test/VISUs/PCU2/Visexchanger_ctrl.TcVIS create mode 100644 PLC/TC3.1/psxics1/CP_test/CP_test/CP_test/VISUs/PCU3/Inshutter_ctrl.TcVIS create mode 100644 PLC/TC3.1/psxics1/CP_test/CP_test/CP_test/VISUs/PCU3/NPZT_ctrl.TcVIS create mode 100644 PLC/TC3.1/psxics1/CP_test/CP_test/CP_test/VISUs/PCU3/VPZT_ctrl.TcVIS create mode 100644 PLC/TC3.1/psxics1/CP_test/CP_test/CP_test/Visualization Manager.TcVMO create mode 100644 PLC/TC3.1/psxics1/CP_test/L406_Calselector_tuning/L406_Calselector_tuning.tcmproj create mode 100644 PLC/TC3.1/psxics1/CP_test/L406_Calselector_tuning/Scope_YT_NC_Project.tcscope create mode 100644 PLC/TC3.1/psxics1/CP_test/L406_Camselector_tuning/L406_Camselector_tuning.tcmproj create mode 100644 PLC/TC3.1/psxics1/CP_test/L406_Camselector_tuning/Scope_YT_NC_Project.tcscope create mode 100644 PLC/TC3.1/psxics1/CP_test/M111_NIRfocus_tuning/M111_NIRfocus_tuning.tcmproj create mode 100644 PLC/TC3.1/psxics1/CP_test/M111_NIRfocus_tuning/Scope_YT_NC_Project.tcscope create mode 100644 PLC/TC3.1/psxics1/TwinCAT_SOXS_ICS.sln create mode 100644 PLC/TC3.1/psxics1/TwinCAT_SOXS_ICS/SOXS_ICS/DUTs/E_NISE_CMD.TcDUT create mode 100644 PLC/TC3.1/psxics1/TwinCAT_SOXS_ICS/SOXS_ICS/DUTs/E_NISE_ERROR.TcDUT create mode 100644 PLC/TC3.1/psxics1/TwinCAT_SOXS_ICS/SOXS_ICS/DUTs/E_NISE_STATE.TcDUT create mode 100644 PLC/TC3.1/psxics1/TwinCAT_SOXS_ICS/SOXS_ICS/DUTs/E_NISE_STATUS.TcDUT create mode 100644 PLC/TC3.1/psxics1/TwinCAT_SOXS_ICS/SOXS_ICS/DUTs/T_NISE_CFG.TcDUT create mode 100644 PLC/TC3.1/psxics1/TwinCAT_SOXS_ICS/SOXS_ICS/DUTs/T_NISE_CTRL.TcDUT create mode 100644 PLC/TC3.1/psxics1/TwinCAT_SOXS_ICS/SOXS_ICS/DUTs/T_NISE_INFO.TcDUT create mode 100644 PLC/TC3.1/psxics1/TwinCAT_SOXS_ICS/SOXS_ICS/DUTs/T_NISE_STAT.TcDUT create mode 100644 PLC/TC3.1/psxics1/TwinCAT_SOXS_ICS/SOXS_ICS/GlobalTextList.TcGTLO create mode 100644 PLC/TC3.1/psxics1/TwinCAT_SOXS_ICS/SOXS_ICS/POUs/FB_NISE.TcPOU create mode 100644 PLC/TC3.1/psxics1/TwinCAT_SOXS_ICS/SOXS_ICS/POUs/MAIN.TcPOU create mode 100644 PLC/TC3.1/psxics1/TwinCAT_SOXS_ICS/SOXS_ICS/PlcTask.TcTTO create mode 100644 PLC/TC3.1/psxics1/TwinCAT_SOXS_ICS/SOXS_ICS/SOXS_ICS.plcproj create mode 100644 PLC/TC3.1/psxics1/TwinCAT_SOXS_ICS/SOXS_ICS/SOXS_ICS.tmc create mode 100644 PLC/TC3.1/psxics1/TwinCAT_SOXS_ICS/SOXS_ICS/VISUs/GUI.TcVIS create mode 100644 PLC/TC3.1/psxics1/TwinCAT_SOXS_ICS/SOXS_ICS/VISUs/Gui_Config.TcVIS create mode 100644 PLC/TC3.1/psxics1/TwinCAT_SOXS_ICS/SOXS_ICS/Visualization Manager.TcVMO create mode 100644 PLC/TC3.1/psxics1/TwinCAT_SOXS_ICS/TwinCAT_SOXS_ICS.tsproj create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1.sln create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1.tsproj create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/DUTs/AFC/E_AFC_CMD.TcDUT create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/DUTs/AFC/E_AFC_ERROR.TcDUT create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/DUTs/AFC/E_AFC_STATE.TcDUT create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/DUTs/AFC/E_AFC_STATUS.TcDUT create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/DUTs/AFC/T_AFC_CTRL.TcDUT create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/DUTs/AFC/T_AFC_INFO.TcDUT create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/DUTs/AFC/T_AFC_STAT.TcDUT create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/DUTs/CROT/E_CROT_CMD.TcDUT create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/DUTs/CROT/E_CROT_ERROR.TcDUT create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/DUTs/CROT/E_CROT_STATE.TcDUT create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/DUTs/CROT/E_CROT_STATUS.TcDUT create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/DUTs/CROT/T_CROT_CFG.TcDUT create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/DUTs/CROT/T_CROT_CTRL.TcDUT create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/DUTs/CROT/T_CROT_INFO.TcDUT create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/DUTs/CROT/T_CROT_STAT.TcDUT create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/DUTs/NISE/E_NISE_CMD.TcDUT create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/DUTs/NISE/E_NISE_ERROR.TcDUT create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/DUTs/NISE/E_NISE_STATE.TcDUT create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/DUTs/NISE/E_NISE_STATUS.TcDUT create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/DUTs/NISE/T_NISE_CFG.TcDUT create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/DUTs/NISE/T_NISE_CTRL.TcDUT create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/DUTs/NISE/T_NISE_INFO.TcDUT create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/DUTs/NISE/T_NISE_STAT.TcDUT create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/GlobalTextList.TcGTLO create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/POUs/FB_AFC.TcPOU create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/POUs/FB_CROT.TcPOU create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/POUs/FB_NISE.TcPOU create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/POUs/MAIN.TcPOU create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/PlcTask.TcTTO create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/VISU_TASK.TcTTO create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/VISUs/CPU_Functions_Control.TcVIS create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/VISUs/CPU_Status.TcVIS create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/VISUs/MAIN_Control_Panel.TcVIS create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/VISUs/PCU1/ACQS_cfg.TcVIS create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/VISUs/PCU1/ACQS_ctrl.TcVIS create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/VISUs/PCU1/ADC1.TcVIS create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/VISUs/PCU1/ADC1_cfg.TcVIS create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/VISUs/PCU1/ADC1_ctrl.TcVIS create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/VISUs/PCU1/ADC2.TcVIS create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/VISUs/PCU1/ADC2_cfg.TcVIS create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/VISUs/PCU1/ADC2_ctrl.TcVIS create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/VISUs/PCU1/CALS_cfg.TcVIS create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/VISUs/PCU1/CALS_ctrl.TcVIS create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/VISUs/PCU2/ACFW_cfg.TcVIS create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/VISUs/PCU2/ACFW_ctrl.TcVIS create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/VISUs/PCU2/AFOC_cfg.TcVIS create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/VISUs/PCU2/AFOC_ctrl.TcVIS create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/VISUs/PCU2/NFOC_cfg.TcVIS create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/VISUs/PCU2/NFOC_ctrl.TcVIS create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/VISUs/PCU2/VISE_cfg.TcVIS create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/VISUs/PCU2/VISE_ctrl.TcVIS create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/VISUs/PCU3/AFC1_ctrl.TcVIS create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/VISUs/PCU3/AFC2_ctrl.TcVIS create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/VISUs/PCU3/INSH_ctrl.TcVIS create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/VISUs/PCU4/ARGO_ctrl.TcVIS create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/VISUs/PCU4/CUPS_cfg.TcVIS create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/VISUs/PCU4/CUPS_ctrl.TcVIS create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/VISUs/PCU4/DEUT_ctrl.TcVIS create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/VISUs/PCU4/MERC_ctrl.TcVIS create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/VISUs/PCU4/NEON_ctrl.TcVIS create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/VISUs/PCU4/QTH_ctrl.TcVIS create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/VISUs/PCU4/THAR_ctrl.TcVIS create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/VISUs/PCU4/XENO_ctrl.TcVIS create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/Visualization Manager.TcVMO create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/psxics1.plcproj create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/psxics1.tmc create mode 100644 PLC/TC3.1/psxics1/psxics1/psxics1/psxics1/psxics1.tpy create mode 100644 TDCS/sxacq/CDT/sxacqControl.cdt create mode 100644 TDCS/sxacq/CDT/sxacqSimControl.cdt create mode 100644 TDCS/sxacq/ChangeLog create mode 100644 TDCS/sxacq/ERRORS/HELP/noHelp create mode 100644 TDCS/sxacq/ERRORS/sxacq_ERRORS create mode 100755 TDCS/sxacq/config/CarinaNebula.fits create mode 100644 TDCS/sxacq/config/simima.fits create mode 100644 TDCS/sxacq/config/sxacq.cfg create mode 100644 TDCS/sxacq/config/sxacq.det create mode 100644 TDCS/sxacq/config/sxacqCONFIG.cfg create mode 100644 TDCS/sxacq/config/sxacq_SIM.det create mode 100644 TDCS/sxacq/dbl/sxacq.db create mode 100644 TDCS/sxacq/dbl/sxacqDB_MAIN.class create mode 100644 TDCS/sxacq/include/sxacqCOM_INT_ANDOR_USB.h create mode 100644 TDCS/sxacq/include/sxacqDefines.h create mode 100644 TDCS/sxacq/include/sxacqPROC_CENTROID.h create mode 100644 TDCS/sxacq/include/sxacqPUB_FITS.h create mode 100644 TDCS/sxacq/src/Makefile create mode 100644 TDCS/sxacq/src/sxacqCOM_INT_ANDOR_USB.C create mode 100644 TDCS/sxacq/src/sxacqControl.C create mode 100644 TDCS/sxacq/src/sxacqDIC.dic create mode 100644 TDCS/sxacq/src/sxacqPROC_CENTROID.C create mode 100644 TDCS/sxacqpan/ChangeLog create mode 100644 TDCS/sxacqpan/src/Makefile create mode 100755 TDCS/sxacqpan/src/sxacqpanDummy.pan create mode 100755 TDCS/sxacqpan/src/sxacqpanPanel.pan create mode 100644 TDCS/sxacqpan/src/sxacqpanProcs.tcl create mode 100644 TDCS/sxtech/CDT/sxtechControl.cdt create mode 100644 TDCS/sxtech/CDT/sxtechSimControl.cdt create mode 100644 TDCS/sxtech/ChangeLog create mode 100644 TDCS/sxtech/config/sxtech.cfg create mode 100644 TDCS/sxtech/config/sxtech.det create mode 100644 TDCS/sxtech/config/sxtechCONFIG.cfg create mode 100644 TDCS/sxtech/config/sxtech_SIM.det create mode 100644 TDCS/sxtech/dbl/sxtech.db create mode 100644 TDCS/sxtech/src/Makefile create mode 100644 TDCS/sxtech/src/sxtechControl.C create mode 100644 TDCS/sxtechpan/ChangeLog create mode 100644 TDCS/sxtechpan/src/Makefile create mode 100755 TDCS/sxtechpan/src/sxtechpanDummy.pan create mode 100755 TDCS/sxtechpan/src/sxtechpanPanel.pan create mode 100644 TDCS/sxtechpan/src/sxtechpanProcs.tcl create mode 100644 dicSOXS/ChangeLog create mode 100644 dicSOXS/src/Makefile create mode 100644 dicSOXS/src/README create mode 100644 dicSOXS/src/dicSOXS_CFG.txt create mode 100644 dicSOXS/src/dicSOXS_ICS.txt create mode 100644 dicSOXS/src/dicSOXS_OS.txt create mode 100644 sxins/ChangeLog create mode 100644 sxins/ENVIRONMENTS/wsxics1/CcsEnvTable create mode 100644 sxins/ENVIRONMENTS/wsxics1/dbl/DATABASE.db create mode 100644 sxins/ENVIRONMENTS/wsxics1/dbl/Makefile create mode 100644 sxins/ENVIRONMENTS/wsxics1/dbl/USER.db create mode 100644 sxins/ENVIRONMENTS/wsxs/CcsEnvTable create mode 100644 sxins/ENVIRONMENTS/wsxs/PROCESSES.append create mode 100644 sxins/ENVIRONMENTS/wsxs/dbl/DATABASE.db create mode 100644 sxins/ENVIRONMENTS/wsxs/dbl/Makefile create mode 100644 sxins/ENVIRONMENTS/wsxs/dbl/USER.db create mode 100755 sxins/ENVIRONMENTS/wsxtcs/CcsEnvTable create mode 100644 sxins/ENVIRONMENTS/wsxtcs/dbl/DATABASE.db create mode 100644 sxins/ENVIRONMENTS/wsxtcs/dbl/Makefile create mode 100644 sxins/ENVIRONMENTS/wsxtcs/dbl/USER.db create mode 100644 sxins/config/sxins-misc-all.env create mode 100644 sxins/config/sxins-misc-all.wmrc create mode 100644 sxins/config/sxins-misc-all.xrdb create mode 100644 sxins/config/sxins-misc-uws.env create mode 100644 sxins/config/sxins.bobrc create mode 100644 sxins/config/sxinsDailyCheck.obd create mode 100644 sxins/config/sxinsEndOfNight.osf create mode 100644 sxins/config/sxinsINSTALL.cfg create mode 100644 sxins/config/sxinsINSTALL_TCSSIM.cfg create mode 100644 sxins/config/sxinsINSTALL_VLTSW.VLT2019.cfg create mode 100644 sxins/config/sxinsINSTALL_VLTSW.VLT2020.cfg create mode 100644 sxins/config/sxinsSafe.ref create mode 100644 sxins/config/sxinsStart.osf create mode 100644 sxins/config/sxinsStop.osf create mode 100644 sxins/src/Makefile create mode 100755 sxins/src/sxinsBuildIC0FB.sh create mode 100755 sxins/src/sxinsBuildTDCS.sh create mode 100644 sxins/src/sxinsCalobBuild create mode 100755 sxins/src/sxinsInstallTcsDictionary.sh create mode 100644 sxins/src/sxinsMiniRandomTAT.sh create mode 100644 sxins/src/sxinsMode.tcl create mode 100644 sxins/src/sxinsRandomTAT.sh create mode 100644 sxins/src/sxinsStart create mode 100644 sxins/src/sxinsStartLib.tcl create mode 100644 sxins/src/sxinsStartup create mode 100644 sxins/src/sxinsStoo.tcl create mode 100644 sxins/src/sxinsStop create mode 100644 sxins/test/Makefile create mode 100644 sxins/test/README create mode 100644 sxins/test/TestList.grep create mode 100644 sxins/test/TestList.lite create mode 100644 sxins/test/TestList.sed create mode 100644 sxins/test/sxinsTat.tcl create mode 100644 sxins/test/sxinsTestBuildCode create mode 100644 sxins/test/sxinsTestBuildEnv create mode 100644 sxins/test/sxinsTestClean create mode 100644 sxins/test/sxinsTestDCS create mode 100644 sxins/test/sxinsTestICS create mode 100644 sxins/test/sxinsTestMS create mode 100644 sxins/test/sxinsTestOS create mode 100644 sxins/test/sxinsTestStartEnv create mode 100644 sxins/test/sxinsTestStopEnv create mode 100644 sxins/test/sxinsTestTPL create mode 100644 sxmoab/ChangeLog create mode 100644 sxmoab/config/sxmcfgDEV_OAB.cfg create mode 100644 sxmoab/config/sxmoabINSTALL.cfg create mode 100644 sxmoab/config/sxmoabTARGET_DEV_OAB.cfg create mode 100644 sxmoab/src/Makefile create mode 100644 sxmoab/test/Makefile create mode 100644 sxmoab/test/TestList.grep create mode 100644 sxmoab/test/TestList.lite create mode 100644 sxmoab/test/TestList.sed create mode 100644 sxmoab/test/ref/DEV_OAB/sxmoabTestBuildCode.ref create mode 100644 sxmoab/test/ref/DEV_OAB/sxmoabTestBuildEnv.ref create mode 100644 sxmoab/test/ref/DEV_OAB/sxmoabTestClean.ref create mode 100644 sxmoab/test/ref/DEV_OAB/sxmoabTestDCS_NIR.ref create mode 100644 sxmoab/test/ref/DEV_OAB/sxmoabTestDCS_VIS.ref create mode 100644 sxmoab/test/ref/DEV_OAB/sxmoabTestICS.ref create mode 100644 sxmoab/test/ref/DEV_OAB/sxmoabTestMS.ref create mode 100644 sxmoab/test/ref/DEV_OAB/sxmoabTestOS.ref create mode 100644 sxmoab/test/ref/DEV_OAB/sxmoabTestStartEnv.ref create mode 100644 sxmoab/test/ref/DEV_OAB/sxmoabTestStopEnv.ref create mode 100644 sxmoab/test/ref/DEV_OAB/sxmoabTestTDCS_ACQ.ref create mode 100644 sxmoab/test/ref/DEV_OAB/sxmoabTestTDCS_TECH.ref create mode 100644 sxmoab/test/ref/DEV_OAB/sxmoabTestTPL.ref create mode 100644 sxmoab/test/sxmoabTat.tcl create mode 100644 sxmoab/test/sxmoabTestBuildCode create mode 100644 sxmoab/test/sxmoabTestBuildEnv create mode 100644 sxmoab/test/sxmoabTestClean create mode 100755 sxmoab/test/sxmoabTestDCS_NIR create mode 100755 sxmoab/test/sxmoabTestDCS_VIS create mode 100644 sxmoab/test/sxmoabTestICS create mode 100644 sxmoab/test/sxmoabTestMS create mode 100644 sxmoab/test/sxmoabTestOS create mode 100644 sxmoab/test/sxmoabTestStartEnv create mode 100644 sxmoab/test/sxmoabTestStopEnv create mode 100755 sxmoab/test/sxmoabTestTDCS_ACQ create mode 100755 sxmoab/test/sxmoabTestTDCS_TECH create mode 100644 sxmoab/test/sxmoabTestTPL create mode 100644 sxmoapd/ChangeLog create mode 100644 sxmoapd/config/sxacqAIT_OAPD.cfg create mode 100644 sxmoapd/config/sxacqDEV_OAPD.cfg create mode 100644 sxmoapd/config/sxacqDEV_OAPD_PAKKO.cfg create mode 100644 sxmoapd/config/sxmcfgAIT_OAPD.cfg create mode 100644 sxmoapd/config/sxmcfgDEV_OAPD.cfg create mode 100644 sxmoapd/config/sxmcfgDEV_OAPD_PAKKO.cfg create mode 100644 sxmoapd/config/sxmoapdINSTALL.cfg create mode 100644 sxmoapd/config/sxmoapdTARGET_AIT_OAPD.cfg create mode 100644 sxmoapd/config/sxmoapdTARGET_DEV_OAPD.cfg create mode 100644 sxmoapd/config/sxmoapdTARGET_DEV_OAPD_PAKKO.cfg create mode 100644 sxmoapd/config/sxtechAIT_OAPD.cfg create mode 100644 sxmoapd/config/sxtechDEV_OAPD.cfg create mode 100644 sxmoapd/config/sxtechDEV_OAPD_PAKKO.cfg create mode 100644 sxmoapd/src/Makefile create mode 100644 sxmoapd/test/Makefile create mode 100644 sxmoapd/test/TestList.grep create mode 100644 sxmoapd/test/TestList.lite create mode 100644 sxmoapd/test/TestList.sed create mode 100644 sxmoapd/test/ref/AIT_OAPD/sxmoapdTestBuildCode.ref create mode 100644 sxmoapd/test/ref/AIT_OAPD/sxmoapdTestBuildEnv.ref create mode 100644 sxmoapd/test/ref/AIT_OAPD/sxmoapdTestClean.ref create mode 100644 sxmoapd/test/ref/AIT_OAPD/sxmoapdTestDCS_NIR.ref create mode 100644 sxmoapd/test/ref/AIT_OAPD/sxmoapdTestDCS_VIS.ref create mode 100644 sxmoapd/test/ref/AIT_OAPD/sxmoapdTestICS.ref create mode 100644 sxmoapd/test/ref/AIT_OAPD/sxmoapdTestMS.ref create mode 100644 sxmoapd/test/ref/AIT_OAPD/sxmoapdTestOS.ref create mode 100644 sxmoapd/test/ref/AIT_OAPD/sxmoapdTestStartEnv.ref create mode 100644 sxmoapd/test/ref/AIT_OAPD/sxmoapdTestStopEnv.ref create mode 100644 sxmoapd/test/ref/AIT_OAPD/sxmoapdTestTDCS_ACQ.ref create mode 100644 sxmoapd/test/ref/AIT_OAPD/sxmoapdTestTDCS_TECH.ref create mode 100644 sxmoapd/test/ref/AIT_OAPD/sxmoapdTestTPL.ref create mode 100644 sxmoapd/test/ref/DEV_OAPD/sxmoapdTestBuildCode.ref create mode 100644 sxmoapd/test/ref/DEV_OAPD/sxmoapdTestBuildEnv.ref create mode 100644 sxmoapd/test/ref/DEV_OAPD/sxmoapdTestClean.ref create mode 100644 sxmoapd/test/ref/DEV_OAPD/sxmoapdTestDCS_NIR.ref create mode 100644 sxmoapd/test/ref/DEV_OAPD/sxmoapdTestDCS_VIS.ref create mode 100644 sxmoapd/test/ref/DEV_OAPD/sxmoapdTestICS.ref create mode 100644 sxmoapd/test/ref/DEV_OAPD/sxmoapdTestMS.ref create mode 100644 sxmoapd/test/ref/DEV_OAPD/sxmoapdTestOS.ref create mode 100644 sxmoapd/test/ref/DEV_OAPD/sxmoapdTestStartEnv.ref create mode 100644 sxmoapd/test/ref/DEV_OAPD/sxmoapdTestStopEnv.ref create mode 100644 sxmoapd/test/ref/DEV_OAPD/sxmoapdTestTDCS_ACQ.ref create mode 100644 sxmoapd/test/ref/DEV_OAPD/sxmoapdTestTDCS_TECH.ref create mode 100644 sxmoapd/test/ref/DEV_OAPD/sxmoapdTestTPL.ref create mode 100644 sxmoapd/test/ref/DEV_OAPD_PAKKO/sxmoapdTestBuildCode.ref create mode 100644 sxmoapd/test/ref/DEV_OAPD_PAKKO/sxmoapdTestBuildEnv.ref create mode 100644 sxmoapd/test/ref/DEV_OAPD_PAKKO/sxmoapdTestClean.ref create mode 100644 sxmoapd/test/ref/DEV_OAPD_PAKKO/sxmoapdTestDCS_NIR.ref create mode 100644 sxmoapd/test/ref/DEV_OAPD_PAKKO/sxmoapdTestDCS_VIS.ref create mode 100644 sxmoapd/test/ref/DEV_OAPD_PAKKO/sxmoapdTestICS.ref create mode 100644 sxmoapd/test/ref/DEV_OAPD_PAKKO/sxmoapdTestMS.ref create mode 100644 sxmoapd/test/ref/DEV_OAPD_PAKKO/sxmoapdTestOS.ref create mode 100644 sxmoapd/test/ref/DEV_OAPD_PAKKO/sxmoapdTestStartEnv.ref create mode 100644 sxmoapd/test/ref/DEV_OAPD_PAKKO/sxmoapdTestStopEnv.ref create mode 100644 sxmoapd/test/ref/DEV_OAPD_PAKKO/sxmoapdTestTDCS_ACQ.ref create mode 100644 sxmoapd/test/ref/DEV_OAPD_PAKKO/sxmoapdTestTDCS_TECH.ref create mode 100644 sxmoapd/test/ref/DEV_OAPD_PAKKO/sxmoapdTestTPL.ref create mode 100644 sxmoapd/test/sxmoapdTat.tcl create mode 100644 sxmoapd/test/sxmoapdTestBuildCode create mode 100644 sxmoapd/test/sxmoapdTestBuildEnv create mode 100644 sxmoapd/test/sxmoapdTestClean create mode 100755 sxmoapd/test/sxmoapdTestDCS_NIR create mode 100755 sxmoapd/test/sxmoapdTestDCS_VIS create mode 100644 sxmoapd/test/sxmoapdTestICS create mode 100644 sxmoapd/test/sxmoapdTestMS create mode 100644 sxmoapd/test/sxmoapdTestOS create mode 100644 sxmoapd/test/sxmoapdTestStartEnv create mode 100644 sxmoapd/test/sxmoapdTestStopEnv create mode 100755 sxmoapd/test/sxmoapdTestTDCS_ACQ create mode 100755 sxmoapd/test/sxmoapdTestTDCS_TECH create mode 100644 sxmoapd/test/sxmoapdTestTPL diff --git a/CONFIG/sxmcfg/ChangeLog b/CONFIG/sxmcfg/ChangeLog new file mode 100644 index 0000000..64659da --- /dev/null +++ b/CONFIG/sxmcfg/ChangeLog @@ -0,0 +1,563 @@ +Tue Jun 14 06:01:26 2016 + + * config/xxmcfgOS.cfg,v 259387: + Rename first ICS to XXXX1 (VLTSW-12361) + +Wed Sep 03 12:39:39 2014 Stewart McLay + + * config/xxmcfgINS_ICS2.cfg: Disable FITS logging for IODEV2 and + SENSOR6 devices + * config/xxmcfgINS_ICS3.cfg: DIsbale FITS logging for IODEV1 and + SENSOR2-6 devices + * config/xxmcfgOS.cfg: Added DXF transfer keyword for SOS remote PAF + file copying + * config/xxmcfgSelfTestIcs_1.ins: Added LAMP2 and SHUT2 keywords + * config/xxmcfgSelfTestIcs_2.ins: Added LAMP2 and SHUT2 keywords + * config/xxmcfgSelfTestOs.ref: Removed keywords for obsolete devices + and added INS2.LAMP2 and INS2.SHUT2 values. + * config/xxmcfgTEST.cfg: Removed commands for obsolete devices + +Wed Sep 25 12:04:09 2013 Stewart McLay + + * config/xxmcfgCONFIG.cfg: Updated target config files + +Tue Sep 12 12:23:29 2013 xxmcfg version: 1.106 + + * config/xxmcfgSelfTestIcs_1.ins: Removed missing device commands + * config/xxmcfgSelfTestIcs_2.ins: Removed missing device commands + * config/xxmcfgSelfTestIcs_3.ins: Removed missing device commands + * config/xxmcfgSelfTestIcs_4.ins: Removed missing device commands + * config/xxmcfgSelfTestIcs_5.ins: Removed missing device commands + * config/xxmcfgSelfTestIcs_6.ins: Removed missing device commands + * config/xxmcfgSelfTestIcs_7.ins: Removed missing device commands + * config/xxmcfgSelfTestIcs_8.ins: Removed missing device commands + * config/xxmcfgSelfTestIcs_9.ins: Removed missing device commands + * config/xxmcfgSelfTestIcs_10.ins: Removed missing device commands + * config/xxmcfgSelfTestIcs_11.ins: Removed missing device commands + * config/xxmcfgSelfTestIcs_12.ins: Removed missing device commands + * config/xxmcfgTEST.cfg: Commented out missing TEMP and TRAK device + commands. Added delay before calling inscReadPixels to avoid problems + with late FITS files. Some fixes in MS and OS test commands. + +Mon Sep 02 12:23:29 2013 xxmcfg version: 1.105 + + * config/xxmcfgOS.cfg: TCCD now uses ccdTecE2V57_ENG.dbcfg detector + configuration file as default. + +Tue Aug 29 12:23:29 2013 xxmcfg version: 1.104 + + * config/xxmcfgINS_ICS2.cfg: Tweaked simulation values for SENSOR6 + * config/xxmcfgINS_ICS3.cfg: Tweaked simulation values for SENSOR5 + +Tue Aug 27 12:23:29 2013 xxmcfg version: 1.103 + + * config/xxmcfgCONFIG.cfg: Updated xxmcfgSTART*.cfg group permissions. + * config/xxmcfgFILTM.dbcfg: Moved to lxxics2 + * config/xxmcfgGRATM.dbcfg: Moved to lxxics2 + +Mon Aug 13 12:23:29 2013 xxmcfg version: 1.102 + + * config/xxmcfgINS_ICS2.cfg: Corrected SENSOR 6 FITS keywords. Fixed + FILT2 configuration to work under simulation. + +Fri Aug 09 12:23:29 2013 xxmcfg version: 1.101 + + * config/xxmcfgOS.cfg: Fixed DBROOT for XXXX2 and XXXX3 + * config/xxmcfgINS_ICS1.cfg: Added LCU grating and filter devices + * config/xxmcfgINS_ICS2.cfg: Reconfigured for 2 DCE environments. + Contains a lamp, shutter, filter and sensor device. + * config/xxmcfgINS_ICS3.cfg: Reconfigured for 1 LCU and 1 DCE + environments. Contains 4 LCU sensor devices and 1 DCE sensor device. + * config/xxmcfgSTART.cfg: ICS XXXX2 is normal simulation by default. + All DCE devices are running in simulation on workstation. + +Wed Aug 18 12:23:29 2010 xxmcfg version: 1.100 + + * config/xxmcfgINS.cfg: ASEN, LAKE, JUMO and intPower for LAMP added + +Fri Mar 26 12:22:28 2010 xxmcfg version: 1.99 + + * config/xxmcfgINS.cfg: Added the two xxrtd demo panels. + * config/xxmcfgTEST.cfg: Added sleep after ABORT to OS tests for + IR_IMAGING to avoid a problem with a late? event from Irace. + +Wed Mar 18 13:56:06 2009 xxmcfg version: 1.98 + + * config/xxmcfgTEST: avoid a race condition in NGC OPT tests. + * config/xxmcfgTEST: show all result files after TPL test. + * config/xxmcfgMIRRM: change init sequence to avoid broken home switch on li0ics3. + +Tue Mar 03 10:39:26 2009 xxmcfg version: 1.97 + + mki: + - Added NGC OPT to the configuration + * config/xxmcfgTEST.cfg: updated + * config/xxmcfgINS.cfg: updated + * config/xxmcfgSTART.cfg: updated + +Mon Dec 29 21:25:52 2008 xxmcfg version: 1.96 + + mki: + * config/xxmcfgFILT.cfg: replaced with the version for MACCON + +Wed Oct 01 16:57:57 2008 xxmcfg version: 1.95 + + mki/dpo: + * config/xxmcfgFILT.cfg: updated FILT dbcfg file for CAN RMC + +Mon Jun 09 16:51:00 2008 xxmcfg version: 1.94 + * Added support for NGC/IR. + +Thu Jun 05 09:49:30 2008 xxmcfg version: 1.93 + * Removed usage of MIDAS from XXXX. + +Sun Dec 17 23:31:37 2006 xxmcfg version: 1.92 + + - SPR VLTSW20050278: + * config/xxmcfgINS.cfg: added INS.ADC1.OFFENC + + - SPR VLTSW20060144: + * config/xxmcfgINS.cfg: INS.DROT.*SGN keywords changed. + +Wed Nov 22 14:30:14 2006 Antonio Longinotti + + * config/xxmcfgTEST.cfg: fixed bug + +Wed Nov 22 15:29:32 2006 xxmcfg version: 1.91 +Thu May 18 15:41:52 2006 Antonio Longinotti + + * config/xxmcfgINS.cfg: fixed bug + +Thu May 18 16:42:30 2006 xxmcfg version: 1.90 +Wed May 17 14:45:51 2006 Antonio Longinotti + + * config/xxmcfgINS.cfg: VLTSW20050364 + +Tue May 16 10:53:19 2006 xxmcfg version: 1.89 +Tue Feb 14 09:17:42 2006 Antonio Longinotti + + * config/xxmcfgCONFIG.cfg: added *$TARGET.cfg (VLTSW20060024) + +Mon Feb 13 09:53:05 2006 xxmcfg version: 1.88 +Fri Mar 11 15:52:30 2005 Antonio Longinotti + + * config/xxmcfgTEST.cfg: added inscReadPixels also for IRDCS + +Thu Mar 10 14:46:11 2005 xxmcfg version: 1.87 +Tue Mar 8 13:34:22 2005 Antonio Longinotti + + * config/xxmcfgSelfTestFiera.det: DET.DISPLAY changed to 3 (inscReadPixels) + +Tue Mar 08 13:32:52 2005 xxmcfg version: 1.86 +Wed Feb 16 12:38:42 2005 Antonio Longinotti + + * config/xxmcfgTEST.cfg: added DET pixels check (inscReadPixels) + +Wed Feb 16 10:32:08 2005 xxmcfg version: 1.85 +Fri Feb 11 13:10:24 2005 Antonio Longinotti + + * config/xxmcfgTEST.cfg: small changes + +Wed Feb 09 09:49:21 2005 xxmcfg version: 1.84 +Fri Oct 29 16:09:02 2004 Antonio Longinotti + + * config/xxmcfgTEST.cfg: updated to be compatible with insc 1.27 + +Fri Oct 29 14:56:52 2004 xxmcfg version: 1.83 +Fri Oct 1 14:17:28 2004 Template Instrument Manager (care of Anotnio Longinotti) + + * config/xxmcfgTEST.cfg: updated tests to exercise state transitions + +Fri Oct 01 15:06:20 2004 xxmcfg version: 1.82 +Tue Aug 31 13:42:37 2004 Template Instrument Manager (care of Anotnio Longinotti) + + * config/xxmcfgTEST.cfg: changes for CM_FULL + +Mon Aug 30 13:58:18 2004 xxmcfg version: 1.81 +Mon Aug 30 10:23:17 2004 Template Instrument Manager (care of Anotnio Longinotti) + + * config/xxmcfgTEST.cfg: small changes + +Fri Aug 27 18:06:19 2004 xxmcfg version: 1.80 +Fri Aug 27 13:39:36 2004 Template Instrument Manager (care of Anotnio Longinotti) + + * config/xxmcfgTEST.cfg: added (VLTSW20040158) + +Tue Aug 24 14:40:30 2004 xxmcfg version: 1.79 +Tue Aug 24 08:55:06 2004 Template Instrument Manager (care of Anotnio Longinotti) + + * config/xxmcfgTARGET.cfg: new + * config/xxmcfgTARGET*.cfg: moved to xxmgar xxmmpe xxmoat + +Tue Aug 24 10:48:27 2004 xxmcfg version: 1.78 +Thu Jul 15 08:09:46 2004 Template Instrument Manager (care of Anotnio Longinotti) + + * config/xxmcfgINS.cfg: fcdSciFors changed to fcdSciXxxx + +Thu Jul 15 10:09:06 2004 xxmcfg version: 1.77 +Fri Jul 9 13:56:27 2004 Antonio Longinotti + + * config/xxmcfgTARGET_CM_LINUX.cfg: added wxufier + +Fri Jul 09 13:55:15 2004 xxmcfg version: 1.76 +Thu Jul 8 17:15:36 2004 Antonio Longinotti + + * config/xxmcfgTARGET_CM_FULL.cfg: changed name of IRACE Sparc + +Thu Jul 08 13:11:48 2004 xxmcfg version: 1.75 +Tue Jun 29 16:42:56 2004 Template Instrument Manager (care of Anotnio Longinotti) + + * config/xxmcfgINS.cfg: removed all occurences of UT0 + +Tue Jun 29 18:41:37 2004 xxmcfg version: 1.74 +Tue Jun 29 16:13:23 2004 Template Instrument Manager (care of Anotnio Longinotti) + + * config/xxmcfgINS.cfg: real TCS moved to UT1 and CA focus + +Tue Jun 29 18:05:51 2004 xxmcfg version: 1.73 +Wed Jun 23 10:19:18 2004 Antonio Longinotti + + * config/xxmcfgCONFIG.cfg: removed XXXX_START set + +Wed Jun 23 10:17:51 2004 xxmcfg version: 1.72 +Tue Jun 22 17:15:56 2004 Antonio Longinotti + + * config/xxmcfgTARGET_DEV_ESO_XXTAT*.cfg: moved to module xxtat + +Tue Jun 22 17:14:33 2004 xxmcfg version: 1.71 +Tue Jun 22 15:48:10 2004 Antonio Longinotti + + * src/Makefile: modified + +Tue Jun 22 15:22:29 2004 xxmcfg version: 1.70 +Tue Jun 22 15:16:31 2004 Antonio Longinotti + + * config/xxmcfg*_XXTAT.cfg: added + +Tue Jun 22 15:01:25 2004 xxmcfg version: 1.69 +Wed Jun 9 10:32:57 2004 Antonio Longinotti + + * src/Makefile: added support for TARGET env. variable (VLTSW20040158) + +Tue Jun 08 16:50:12 2004 xxmcfg version: 1.68 +Wed Sep 3 16:56:50 2003 Antonio Longinotti + + * config/xxmcfgINS.cfg: removed uif class overloading (examples in icbpan/test) + +Wed Sep 03 10:18:35 2003 xxmcfg version: 1.67 +Mon Aug 11 14:54:51 2003 Antonio Longinotti + + * config/xxmcfgINS.cfg: VLTSW20030226 UIFCOL UIFROW added + +Mon Aug 11 14:47:40 2003 xxmcfg version: 1.66 +Mon May 19 10:52:14 2003 Antonio Longinotti + + * config/xxmcfgINS.cfg: updated + +Tue Apr 01 15:52:20 2003 xxmcfg version: 1.65 +Mon Feb 24 16:40:39 2003 Antonio Longinotti + + * config/xxmcfgINS.cfg: VLTSW20030045: OCS.*.TIMEOUT value in seconds + +Mon Feb 24 16:16:29 2003 xxmcfg version: 1.64 +Sun Feb 16 00:56:44 2003 xxmcfg version: 1.63 + + - SPR VLTSW20030052: + * config/xxmcfgINS.cfg: INS.ADCi.SPDMIN,SPDMAX added in comments. + +Tue Jan 14 23:26:56 2003 xxmcfg version: 1.62 + + - SPR VLTSW20020495: + * src/Makefile: install: ctooConfigInstall added. + +Tue Dec 31 23:23:47 2002 xxmcfg version: 1.61 + + - SPR VLTSW20020689: + * config/xxmcfgINS.cfg: *.POSENC, *.ALIGN added in comments. + +Tue Dec 3 14:01:36 2002 Antonio Longinotti + + * config/xxmcfgINS.cfg: VLTSW20020672: added STATUS "" to tests + +Tue Dec 03 12:43:10 2002 xxmcfg version: 1.60 +Sat Nov 09 22:56:56 2002 xxmcfg version: 1.59 + + - SPR VLTSW20020541: + * config/xxmcfgINS.cfg: added INS.*.INISWFCT in comments. + + - SPR VLTSW20010773: + * config/xxmcfgINS.cfg: added INS.*.PREINIFCT/POSTINIFCT in comments. + + - SPR VLTSW20020425: + * config/xxmcfgINS.cfg: ccc1: l/min -> l/h + +Mon Sep 30 11:50:23 2002 Antonio Longinotti + + * config/xxmcfgINS.cfg: updated test steps + +Fri Sep 27 16:20:12 2002 xxmcfg version: 1.58 +Fri Aug 23 10:37:52 2002 xxmcfg version: 1.57 +Wed Jun 26 18:54:55 2002 Antonio Longinotti + + * config/xxmcfgINS.cfg: added test setup for CAN digital I/O (VLTSW20020419) + +Wed Jun 26 16:07:59 2002 xxmcfg version: 1.56 +Wed Jun 19 13:27:20 2002 Antonio Longinotti + + * config/xxmcfgINS.cfg: ccd.det renamed xxoTccd.det + +Wed Jun 19 11:34:44 2002 xxmcfg version: 1.55 +Mon May 13 02:51:48 2002 xxmcfg version: 1.54 + + - misc. SPRs: + * config/xxmcfgINS.cfg: sample keywords added: INS.TIM1.PERIOD, + INS.POS2.TWOSTEP, INS.OPTI2.MOVETOUT,INITTOUT + + - SPR VLTSW20020056: + * config/xxmcfgIcsSelfTest_1.ins: SLIT1 param. adjusted + (were just out of range). + * config/xxmcfgIcsSelfTest_2.ins: SLIT1 param. adjusted + (were just out of range). + +Wed Feb 27 09:37:14 2002 Template Instrument Manager (care of Anotnio Longinotti) + + * config/xxmcfgINS.cfg: xxidevFocuPre/PostMove commented out (temporary) + +Wed Feb 27 09:45:14 2002 xxmcfg version: 1.53 +Mon Feb 11 15:47:20 2002 xxmcfg version: 1.52 + * config/xxmcfgINS.cfg: + VLTSW20010013 - example added to show how to set + OCS..DBIFROOT and OCS.CON.OSDBROOT for auto startup + note:for XXXX deafult vaules are used. + small fix - OCS.MODE2.SETUP should not contain two file parameters +Thu Dec 20 01:00:56 2001 xxmcfg version: 1.51 + + - SPR VLTSW20010581: + * config/xxmcfgINS.cfg: TIM1 keywords added. + +Tue Dec 18 10:28:24 2001 Antonio Longinotti + + * config/xxmcfgINS.cfg: VLTSW20010680 (added error conditions to INS.TESTi.*) + +Thu Dec 13 13:47:35 2001 xxmcfg version: 1.50 +Fri Dec 07 14:59:49 2001 xxmcfg version: 1.49 + + - SPR VLTSW20010591: + * config/xxmcfgINS.cfg: use xxidevFocu* sample functions. + + - SPR VLTSW20010727: + * config/xxmcfgIODSM.dbcfg: use motDVA0X type motor. + + - SPR VLTSW20010740: + * config/xxmcfgINS.cfg: INS.*.INIALONE keywords added. + +Mon Nov 05 14:26:41 2001 xxmcfg version: 1.48 + + * config/xxmcfgINS.cfg: + fixed bug at DBROOT declaration for FIERA + +Thu Oct 25 22:00:48 2001 xxmcfg version: 1.47 + + - SPR VLTSW20010591: + * config/xxmcfgINS.cfg: added INS.*.PREFCT/POSTFCT in comments. + +Mon Oct 08 17:06:44 2001 xxmcfg version: 1.46 + + * config/xxmcfgINS.cfg: + VLTSW20010448: added OCS.TEL.ID + VLTSW20010010: added DBROOT and use defaults dbaddresses + update value of INS.SENSOR7.STAT2 (alongino) + +Wed Sep 26 15:29:27 2001 Antonio Longinotti + + * config/xxmcfgFOCUM.dbcfg: namedPositions table size 1 + +Tue Sep 25 18:27:01 2001 xxmcfg version: 1.45 +Tue Sep 18 11:28:13 2001 xxmcfg version: 1.44 +Tue Sep 11 17:46:20 2001 Antonio Longinotti + + * config/xxmcfgINS.cfg: VLTSW20010254 VLTSW20010255 + +Wed Sep 05 16:19:36 2001 xxmcfg version: 1.43 +Tue Sep 04 14:35:38 2001 xxmcfg version: 1.42 + + - SPRs 20010501, 20010502: Esters DC24 and CN77000 devices added. + * config/xxmcfgINS.dbcfg: FCTC: use icbSEN_CN77000, TEMP: use icb_SEN_ESTERS. + +Tue Aug 28 15:40:06 2001 Antonio Longinotti + + * config/xxmcfgIODSM.dbcfg: change in MCM OCT2001 for simulation + * config/xxmcfgMIRRM.dbcfg: change in MCM OCT2001 for simulation + * config/xxmcfgSLITSM.dbcfg: change in MCM OCT2001 for simulation + +Tue Aug 28 15:32:44 2001 xxmcfg version: 1.41 +Mon Aug 13 20:55:35 2001 Antonio Longinotti + + * config/xxmcfgINS.cfg: INS.UIF* upgraded + +Fri May 11 19:31:49 2001 xxmcfg version: 1.37 + + - SPR 20010287: support for user unit conversion functions: + * config/xxmcfgINS.cfg: INS.POSi.UNITFCT/PARAM added. + +Mon Apr 30 04:37:28 2001 xxmcfg version: 1.36 + + - VLTSW 20010071, 20010072, 20010114: + * config/xxmcfgINS.cfg: expm device: INS.DETi.* keywords added. + * config/xxmcfgINS.cfg: INS.GRATi.ORDERMAX, INS.*.TEMPRAMP=0 added. + +Sat Mar 24 22:30:03 2001 xxmcfg version: 1.35 + + - VLTSW 20010147: + * config/xxmcfgINS.cfg: Index in INS.SENSOR4.* keywords fixed. + + - bug fix: + * config/xxmcfgINS.cfg: START.MIDAS.AVAIL=T added. + +Thu Mar 15 17:44:55 2001 xxmcfg version: 1.34 + + * config/xxmcfgINS.cfg: OCS.INS changed to OCS.INS1 everywhere + +Tue Feb 06 17:06:51 2001 xxmcfg version: 1.33 + + VLTSW20010054 : xxmcfgINS.cfg OCS.OCS.NUM changed to OCS.OS.NUM + +Fri Feb 02 18:51:17 2001 xxmcfg version: 1.32 + + * config/xxmcfgINS.cfg: INS.CON.DBROOT added in comments. + +Fri Feb 2 10:37:54 2001 Antonio Longinotti + + * config/xxmcfgINS.cfg: added INS.ASSEMBLY6 (VLTSW20000506 VLTSW20000503) + +Wed Jan 31 13:59:01 2001 xxmcfg version: 1.31 +Wed Jan 24 18:19:38 2001 xxmcfg version: 1.30 + + * config/xxmcfgINS.cfg: removed ACCESS keywords (in xxmcfgSTART.cfg). + Dedicated IRACE .cfg file + +Mon Jan 15 19:10:47 2001 xxmcfg version: 1.29 + + VLTSW20010007: added OS config keywords (moved from xxoControl.cfg) + +Tue Jan 09 19:22:22 2001 xxmcfg version: 1.28 + + * config/xxmcfgINS.cfg: added OCS.TEL.ENVNAME for TCS simulation + * config/xxmcfgSLITM.dbcfg: corrected enc. values for all named positions + +Wed Jan 03 15:44:11 2001 xxmcfg version: 1.27 + + * config/xxmcfgIRDCS.cfg: added (copied from sys.cfg) + * config/xxmcfgIcsSelfTest_*.ins: added for a complete ICS self-test (ic0SelfTest) + +Mon Dec 11 20:55:58 2000 xxmcfg version: 1.26 + + - SPR 20000437: add temperature compensation for gratings. + * config/xxmcfgINS.cfg: INS.GRATi.TEMPREF,TEMPRAMPi added. + +Sun Dec 10 15:41:09 2000 xxmcfg version: 1.25 + + - SPR 20000504: add icbMOT_ADC device: + * config/xxmcfgINS.cfg: ADC1 device added. + +Sat Dec 09 18:53:29 2000 xxmcfg version: 1.24 + + - SPR 20000505: support multiple ICSs: + * config/xxmcfgCONFIG.cfg: CONFIG.SET1.NAME="XXXX" (instead of "INS"). + +Thu Dec 07 16:25:35 2000 xxmcfg version: 1.23 + + - IRACE support added: IRCCD added. + * config/xxmcfgINS.cfg: IRCCD keywords added. + * config/xxmcfgSTART.cfg: IRCCD keywords added, start BOSS. + +Wed Nov 08 16:30:52 2000 xxmcfg version: 1.22 + + * config/xxmcfgSTART.cfg: changed default startup to LCU_SIM everywhere + * config/xxmcfgINS.cfg: removed all keywords already in xxmcfgSTART.cfg + +Mon Oct 16 15:13:37 2000 xxmcfg version: 1.21 + + * config/xxmcfgINS.cfg: adapted to xxo 1.19 + +Thu Oct 12 19:18:48 2000 xxmcfg version: 1.20 + + - adapted to osb 1.5: + * config/xxmcfgINS.cfg: adapted to osb 1.5. + * config/xxmcfgCONFIG.cfg: OSB_CFG replaced with OSB. + +Fri Sep 15 20:01:22 2000 xxmcfg version: 1.19 + + - adapted to ctoo 1.16: config. files renamed. + * config/INS.dic,START.dic: replaced with xxmcfgCONFIG.cfg. + * config/INS.cfg: renamed to xxmcfgINS.cfg. + * config/START.cfg: renamed to xxmcfgSTART.cfg. + +Thu Sep 07 09:15:16 2000 xxmcfg version: 1.18 +Tue Jun 13 17:07:31 2000 xxmcfg version: 1.17 +Wed Jun 07 03:27:25 2000 xxmcfg version: 1.16 + + - stooStart/stooStop support added: + * src/Makefile: new files below added. + * config/INS.cfg: startup config. added. + * config/INS.dic: startup dict. added. + * config/START.cfg: created. + * config/START.dic: created. + +Thu May 18 12:27:42 2000 xxmcfg version: 1.15 +Mon May 15 18:45:16 2000 xxmcfg version: 1.14 +Fri Feb 04 11:20:27 2000 xxmcfg version: 1.13 +Thu Feb 03 15:16:59 2000 xxmcfg version: 1.12 + + * config/INS.cfg: FOCU function added. + * config/xxmcfgFOCUM.dbcfg: created. + * config/xxmcfgGRATM.dbcfg: 3. namedPosition removed (aligned with INS.cfg). + * config/xxmcfgMIRRM.dbcfg: last namedPosition removed (aligned with INS.cfg). + +Mon Jan 24 18:11:42 2000 xxmcfg version: 1.11 +Wed Jan 19 14:39:40 2000 xxmcfg version: 1.10 + * config/INS.cfg : added special device MIRR2 type ANALOG + * config/INS.dic added XXXX_CFG dict. + +Sun Nov 28 22:38:35 1999 xxmcfg version: 1.9 + + - one device/type added. + * config/INS.cfg: one device/type added. + * config/xxmcfgFILTM.dbcfg: created. + * config/xxmcfgDEKK1M.dbcfg: created. + * config/xxmcfgDEKK2M.dbcfg: created. + * config/xxmcfgDPORM.dbcfg: created. + * config/xxmcfgGRATM.dbcfg: created. + * config/xxmcfgIODSM.dbcfg: created. + * config/xxmcfgSLIT1M.dbcfg: created. + * config/xxmcfgSLIT2M.dbcfg: created. + * config/xxmcfgSLITSM.dbcfg: created. + * config/xxmcfgTILTM.dbcfg: created. + +Sun Oct 17 22:51:49 1999 xxmcfg version: 1.8 + + * src/Makefile: install config. files only in INS_ROOT. + +Tue Sep 14 14:29:01 1999 xxmcfg version: 1.7 +Wed Sep 08 18:10:03 1999 xxmcfg version: 1.6 +Sat Aug 21 18:25:52 1999 xxmcfg version: 1.5 +Thu Aug 19 16:35:50 1999 xxmcfg version: 1.4 + + * config/INS.cfg: INS.CON.ONLINE added. + +Wed Aug 18 04:28:03 1999 xxmcfg version: 1.3 + + * config/INS.cfg: DROT was not in the device list (INS.CON.DEVICEi). + +Fri Aug 06 21:52:50 1999 xxmcfg version: 1.2 + + * config/INS.cfg: device configuration added. + * config/temp.dbcfg: deleted. + * config/lxxics1.dbcfg: deleted. + * config/lxxics2.dbcfg: deleted. + +Fri Aug 06 02:59:21 1999 xxmcfg version: 1.1 + + * config/lxxics2.dbcfg: created (temporary). + +"@(#) $Id: ChangeLog 285026 2016-06-23 11:43:02Z mcomin $" diff --git a/CONFIG/sxmcfg/config/sxmcfgCONFIG.cfg b/CONFIG/sxmcfg/config/sxmcfgCONFIG.cfg new file mode 100644 index 0000000..356112e --- /dev/null +++ b/CONFIG/sxmcfg/config/sxmcfgCONFIG.cfg @@ -0,0 +1,60 @@ +#****************************************************************************** +# E.S.O. - NTT project +# +# "@(#) $Id: sxmcfgCONFIG.cfg 246635 2017-05-24 17:05:58Z dricci $" +# +# ctoo configuration +# +# who when what +# ------- ---------- ---------------------------------------------- +# dricci 2018-12-13 Removed ICB_REF and IC0FBI_REF dictionaries. +# dricci 2017-10-26 Removed TDCS references, now in separate file. +# dricci 2017-10-19 Added SOXS_OS dictionary. +# dricci 2017-10-16 Added TDCS and TDCSPUB dictionaries. +# dricci 2017-05-24 Adapted from Template file. +# + +# ----------------------------------------------------------------------------- +PAF.HDR.START; # Start of PAF Header +PAF.TYPE "Configuration"; # Type of PAF +PAF.ID "SOXS"; # ID for PAF +PAF.NAME " "; # Name of PAF +PAF.DESC "ICS CONFIG configuration"; # Short description of PAF +PAF.CRTE.NAME " "; # Name of creator +PAF.CRTE.DAYTIM " "; # Civil Time for creation +PAF.LCHG.NAME " "; # Name of person/appl. changing +PAF.LCHG.DAYTIM " "; # Timestamp of last change +PAF.CHCK.NAME " "; # Name of appl. checking +PAF.HDR.END; # End of PAF Header + +# ----------------------------------------------------------------------------- +# ICS config set +# ----------------------------------------------------------------------------- +CONFIG.SET1.NAME "SOXS"; +CONFIG.SET1.CATEGORY "INS"; +CONFIG.SET1.DICT "OSB STOO_CFG ICB_CFG IC0FBI_CFG IFBMOT_CFG SOXS_CFG SOXS_ICS SOXS_OS SXACQ"; + +CONFIG.SET1.FILE1 "sxmcfgSTART.cfg"; +CONFIG.SET1.PERM1 664; +CONFIG.SET1.FILE2 "sxmcfgOS.cfg"; +CONFIG.SET1.PERM2 664; +CONFIG.SET1.FILE3 "sxmcfgINS.cfg"; +CONFIG.SET1.PERM3 644; +CONFIG.SET1.FILE4 "sxmcfgTEST.cfg"; +CONFIG.SET1.PERM4 664; +CONFIG.SET1.FILE5 "*$TARGET.cfg"; +CONFIG.SET1.PERM5 664; + +CONFIG.SET1.BACKUP T; +CONFIG.SET1.LOG T; + +# ----------------------------------------------------------------------------- +# Archive +# ----------------------------------------------------------------------------- +CONFIG.ARCHIVE.NAME "SOXS"; +CONFIG.ARCHIVE.USER "sxsxmgr"; +CONFIG.ARCHIVE.MODULE "sxmcfg"; +CONFIG.ARCHIVE.FILE1 "sxmcfg*.cfg"; +CONFIG.ARCHIVE.FILE2 "sxmcfg*.dbcfg"; + +# ___oOo___ diff --git a/CONFIG/sxmcfg/config/sxmcfgINS.cfg b/CONFIG/sxmcfg/config/sxmcfgINS.cfg new file mode 100644 index 0000000..9173cd7 --- /dev/null +++ b/CONFIG/sxmcfg/config/sxmcfgINS.cfg @@ -0,0 +1,2592 @@ +#****************************************************************************** +# E.S.O. - NTT project +# +# "@(#) $Id$" +# +# who when what +# -------- ---------- ---------------------------------------------- +# bsalasni 2022-05-09 AFC: added REFPOS, MINPOS, MAXPOS +# dricci 2022-05-08 Increased Tolerances on CUPS, ACFW, ACQS, CALS. +# dricci 2022-05-02 Swapping named positions for progress meeting. +# mcolapie 2022-04-29 CUPS named positions updated, lamps parameters updated. +# dricci 2022-04-08 Increased Tolerances on CALS and ACQS. +# dricci 2022-04-05 Increased Timeouts on several devices. +# bsalasni 2022-03-25 Removed INS.ASSEMBLY4-5 +# dricci 2022-03-17 Changed NP encoder values for ACQS and ref for ADC1. +# dricci 2022-03-17 Changed NP encoder values for CALS. +# bsalasni 2022-03-15 Updated UIFCLASS of NISE +# mcolapie 2022-03-11 INSH parameters updated. +# mcolapie 2022-01-31 CALS, ACQS, ADCs, VISE, CUPS, NFOC, AFOC, ACFW parameters updated. +# NISE parameters commented. +# mcolapie 2022-01-27 ACQS motor parameters modified. +# mcolapie 2021-11-15 ADCs tracking parameters updated. +# mcolapie 2021-11-02 ADCs motor parameters checked, modified and commented when needed. +# Tracking parameters to be updated. +# dricci 2021-08-03 SENSOR2: Removed 2 Prism Assembly channels. +# Added 2 Optical Bench channels. +# Added 11 channels for pressure/status/flux. +# mcolapie 2021-06-30 POS1 and FILT motor parameters checked, modified and commented when needed. +# abaruffo 2021-06-14 On request from Kalyan, set NFOC min position to zero. +# dricci 2021-01-26 LAMPS assembly: removed SHUT and OPTI2. Set THAR off in LAMPS ARCS. +# dricci 2021-01-14 Modified TILTi assemblies. +# dricci 2021-01-08 Changed values of OPTI2 (CALS) named positions. +# mcolapie 2021-01-08 OPTI2 motor parameters checked, modified and commented when needed. +# Named positions to be configured. +# pschipan 2020-12-18 POS2 motor parameters checked, modified and commented when needed. +# mdepasca 2020-07-31 Replaced IODEVi with AFCi +# dricci 2020-04-09 Added AFC parameters. +# mdepasca 2019-12-18 Redefined init timeout for NISE +# mdepasca 2019-09-25 Redefined NISE DEVTYPE, SIMADDRESS and MAPFILE keywords. +# Changed POSENC with POSUSER. +# dricci 2019-09-20 Renamed OPTI5 (dummy standard device) to NISE (special device). +# dricci 2019-08-02 Updated CVTS. Added IRTS. Renamed SENSOR2 and 3 to SENSOR3 and 4. +# dricci 2019-03-07 Modified MAXPOS values after updating IC0FB. +# dricci 2019-02-04 Uncommented TILTi Assembly. +# dricci 2019-01-10 Commented POSi.SIMVAL and removed POSi.POSMIN POSi.POSMAX. +# dricci 2018-12-13 Removed IC0FBI_REF dictionary. +# dricci 2018-11-23 Added FILT.X0CENi for refacqCheck template. +# dricci 2018-11-22 Fixing NISE Multi_Pinhole POSENC. +# dricci 2018-11-19 Assemblies: Added LAMPS ON for gen_tec_flexure template. +# dricci 2018-09-25 Assemblies: Added ADC.MODE and added dummy PIEZOi.MODE AUTO. +# dricci 2018-08-29 Changed ADC polling period. +# dricci 2018-07-10 Added Multi_Pinhole position to VISE and NISE. +# dricci 2018-07-09 CPTS changed to PT100, CVTS and CROT to digital signal. +# dricci 2018-06-29 Removed "FREE" position from FILT. Renamed PZTi to AFCi. +# dricci 2018-06-27 Changed sensor names to CVTS, CPTS, CROT. +# dricci 2018-06-04 Added "Slit_view" position to VISE. +# dricci 2018-05-28 Added "FREE" position to FILT. +# dricci 2018-04-11 Renamed KRIP to MERC. Added LAMP7 THAR. +# dricci 2018-02-16 Removed VFOC*, then renamed POS6 to POS2. Renamed VNTS to CPTS. +# dricci 2017-07-31 Substituted environment name with wsxs. +# dricci 2017-07-11 Added devices: two piezo IODEV and three Lakeshore 336 SENSOR. +# dricci 2017-06-22 Renamed and added devices. +# dricci 2017-05-24 Adapted from Template file. +# + +PAF.HDR.START; # Marks start of header +PAF.TYPE "Configuration"; # Type of parameter file +PAF.ID "$Id$"; # Parameter file ID +PAF.NAME "sxmcfgINS"; # Parameter file NAME +PAF.DESC "Instrument configuration"; +PAF.CRTE.NAME "D. Ricci"; # Who created par. file +PAF.CRTE.DAYTIM "2017-07-03 15:01:31"; # Date and time of creation +PAF.LCHG.NAME "D. Ricci"; # Who did last change +PAF.LCHG.DAYTIM "2017-07-03 15:01:31"; # Date and time of last change +PAF.CHCK.NAME ""; # Appl. checking par. file +PAF.CHCK.DAYTIM ""; # Date and time of last check +PAF.CHCK.CHECKSUM ""; # Parameter file checksum +PAF.HDR.END + +#----------------------------------------------------------------------------- +#- Startup config +#----------------------------------------------------------------------------- +START.CON.TYPE "INS"; # Application type +START.CON.TCLFILE "sxinsStoo"; # Startup user extensions + +#----------------------------------------------------------------------------- +# General config +#----------------------------------------------------------------------------- +INS.CON.ID "SOXS"; # Instrument identifier +INS.ID "SOXS/$Revision: 239337 $"; # Instrument identifier +INS.CON.PREFIX "sx"; # Name prefix for modules and servers +INS.CON.SUFFIX "" ; # Name suffix for modules and servers +INS.CON.CATEGORY "INS"; +#OCS.CON.OSDBROOT "sxo"; # DB address of the OS process +#INS.CON.DBROOT ":Appl_data:SOXS"; # Instrument OLDB root point + +# ----------------------------------------------------------------------------- +# Dictionaries +# ----------------------------------------------------------------------------- +INS.DID1 "ICB_CFG"; +INS.DID2 "IC0FBI_CFG"; +INS.DID3 "IFBMOT_CFG"; +INS.DID4 "SOXS_ICS"; +INS.DID5 "SOXS_CFG"; + +#----------------------------------------------------------------------------- +# Environments and DCE +#----------------------------------------------------------------------------- +INS.CON.WSENV "wsxs"; # Workstation RTAP environment +INS.CON.LCUNUM 1; # Number of instrument LCUs +INS.CON.LCUENV1 "wsxics1"; # WS DCE 1 environment +INS.CON.LCUAV1 T; # WS DCE 1 available + + +#----------------------------------------------------------------------------- +#- ICS general config +#----------------------------------------------------------------------------- +INS.CON.ONLINE F; # If T, sensors are placed online during booting +INS.CON.MOVETOUT 150000; # Timeout for movement cmds. [msec] +# INS.CON.CONFIGSET "sxiConfigSet"; # User script called by icbConfgSeti +#INS.CON.CMDTOUT 15000; # Timeout for other cmds. [msec] +#INS.CON.MOVETDIF 1; # Interval between parallel movements [msec] +#INS.CON.MONTIME 60000; # Device monitoring period [msec] +#INS.CON.MOVEMAX 100; # Max. number of devices moving in parallel + +#----------------------------------------------------------------------------- +#- SOXS_ICS list of devices +#----------------------------------------------------------------------------- + +INS.CON.DEVNUM 24; # Number of ICS devices +INS.CON.DEVICE1 "INS.SHUT"; # INSH - Instrument Shutter +INS.CON.DEVICE2 "INS.FILT"; # ACFW - Acquisition Camera (ACQ) Filter Wheel rotary motor +INS.CON.DEVICE3 "INS.LAMP1"; # QTH - Flat Field Lamp 1 +INS.CON.DEVICE4 "INS.LAMP2"; # DEUT - Flat Field Lamp 2 (Bluest) +INS.CON.DEVICE5 "INS.LAMP3"; # NEON - Spectral Lamp 1 (NIR) +INS.CON.DEVICE6 "INS.LAMP4"; # ARGO - Spectral Lamp 2 (NIR) +INS.CON.DEVICE7 "INS.LAMP5"; # XENO - Spectral Lamp 3 (NIR) +INS.CON.DEVICE8 "INS.LAMP6"; # MERC - Spectral Lamp 4 (NIR) +INS.CON.DEVICE9 "INS.LAMP7"; # THAR - Spectral Lamp 5 (VIS) +INS.CON.DEVICE10 "INS.OPTI1"; # CUPS - Calibration Unit Pinhole Slide +INS.CON.DEVICE11 "INS.OPTI2"; # CALS - Calibration Slide linear motor +INS.CON.DEVICE12 "INS.OPTI3"; # ACQS - Acquisition Camera Slide linear motor +INS.CON.DEVICE13 "INS.OPTI4"; # VISE - VIS Slit Slide exchanger linear motor +INS.CON.DEVICE14 "INS.NISE"; # NISE - NIS Slit Slide exchanger linear motor special dvice +INS.CON.DEVICE15 "INS.POS1"; # AFOC - ACQ Focus Slide linear motor +INS.CON.DEVICE16 "INS.POS2"; # NFOC - NIR Focus Slide linear motor +INS.CON.DEVICE17 "INS.ADC1"; # ADC1 - First ADC rotary motor +INS.CON.DEVICE18 "INS.ADC2"; # ADC2 - Second ADC rotary motor +INS.CON.DEVICE19 "INS.AFC1"; # AFC1 - VIS Actuator Piezo +INS.CON.DEVICE20 "INS.AFC2"; # AFC2 - NIR Actuator Piezo +INS.CON.DEVICE21 "INS.SENSOR1"; # CVTS - Cryo-Vacuum Sensors - Read from CVS +INS.CON.DEVICE22 "INS.SENSOR2"; # IRTS - IR Cryostat Sensors - Read from CVS +INS.CON.DEVICE23 "INS.SENSOR3"; # CPTS - Common Path Temperature Sensor - Read from PT100 on CP +INS.CON.DEVICE24 "INS.SENSOR4"; # CROT - Co-rotator fault + enabled - Digital Signal + +#----------------------------------------------------------------------------- +#- Device List +#----------------------------------------------------------------------------- + +#- +#- INSH: Instrument Shutter +#- +INS.SHUT.DEVNAME "insh"; # Device name +INS.SHUT.PREFIX "INS.INSH"; # +INS.SHUT.DEVDESC "Shutter"; # Device description +INS.SHUT.DEVTYPE "ic0fbiDevDrvShutter"; # Device type +INS.SHUT.LCUID 1; # DCE ID +INS.SHUT.SWSIM F; # Software simulation +INS.SHUT.ADDRESS "opc.tcp://169.254.21.232:4840,4"; # Simulation address of device +INS.SHUT.SIMADDR ":ic0fbSim_Shutters"; # Simulation address of device +INS.SHUT.PERIOD 500; # Control Loop period +INS.SHUT.MAPPREFIX "MAIN.INSH." +INS.SHUT.MAPFILE "ic0fbiShutter_TwinCAT.fbmap" + # ActiveLow configuration +INS.SHUT.LOWCLOSED F; # If T, signal is active low +INS.SHUT.LOWFAULT F; # If T, signal is active low +INS.SHUT.LOWOPEN F; # If T, signal is active low +INS.SHUT.LOWSWITCH F; # If T, signal is active low + # List of signals to ignore +INS.SHUT.IGCLOSED T; # If T, ignore the signal +INS.SHUT.IGFAULT T; # If T, ignore the signal +INS.SHUT.IGOPEN F; # If T, ignore the signal +INS.SHUT.MOVETOUT 10000; # 10 sec + +#- +#- ACFW: Acquisition camera Filter Wheel +#- +INS.FILT.DEVNAME "acfw"; # Name of the device +INS.FILT.PREFIX "INS.ACFW"; # +INS.FILT.DEVDESC "Test filter"; # Description of the device +INS.FILT.DEVTYPE "ic0fbiDevDrvDiscreteMotor"; # Type of the device driver +INS.FILT.LCUID "1"; # ID of the DCE managing the device +INS.FILT.SWSIM F; # If T, function is software simulated +INS.FILT.ADDRESS "opc.tcp://169.254.21.232:4840,4"; # Address of device +INS.FILT.SIMADDR ":ic0fbSim_DiscMots"; # Simulation address of device +INS.FILT.PERIOD 500; # Control Loop period + +INS.FILT.INITTOUT 90000; # Initialisation timeout +INS.FILT.MOVETOUT 150000; # Move timeout + +INS.FILT.POSNUM 8; # Number of named positions + + +# SOXS PROGRESS MEETING ONES + +INS.FILT.POSENC1 1078497; ## 151 deg # Encoder value position +INS.FILT.POSID1 "SDSS-i"; # Position ID +INS.FILT.ID1 "SDSS-i"; # Position ID +INS.FILT.NAME1 "SDSS-i"; # Name of position +INS.FILT.TYPE1 "FILTER"; # Name of position + +INS.FILT.POSENC2 1400003; ## 196 deg +INS.FILT.POSID2 "SDSS-u"; +INS.FILT.ID2 "SDSS-u"; +INS.FILT.NAME2 "SDSS-u"; +INS.FILT.TYPE2 "FILTER"; + +INS.FILT.POSENC3 1721369; # 241 deg +INS.FILT.POSID3 "SDSS-r"; +INS.FILT.ID3 "SDSS-r"; +INS.FILT.NAME3 "SDSS-r"; +INS.FILT.TYPE3 "FILTER"; + +INS.FILT.POSENC4 2042854; # 286 deg +INS.FILT.POSID4 "FREE"; +INS.FILT.ID4 "FREE"; +INS.FILT.NAME4 "FREE"; +INS.FILT.TYPE4 "FILTER"; + +INS.FILT.POSENC5 2364247; # 331 deg +INS.FILT.POSID5 "VIMOS-V"; # Pinhole +INS.FILT.ID5 "VIMOS-V"; +INS.FILT.NAME5 "VIMOS-V"; +INS.FILT.TYPE5 "FILTER"; + +INS.FILT.POSENC6 114282; # 16 deg +INS.FILT.POSID6 "VIMOS-Y"; +INS.FILT.ID6 "VIMOS-Y"; +INS.FILT.NAME6 "VIMOS-Y"; +INS.FILT.TYPE6 "FILTER"; + +INS.FILT.POSENC7 435667; # 61 deg +INS.FILT.POSID7 "SDSS-g"; +INS.FILT.ID7 "SDSS-g"; +INS.FILT.NAME7 "SDSS-g"; +INS.FILT.TYPE7 "FILTER"; + +INS.FILT.POSENC8 757147; # 106 deg +INS.FILT.POSID8 "SDSS-z"; +INS.FILT.ID8 "SDSS-z"; +INS.FILT.NAME8 "SDSS-z"; +INS.FILT.TYPE8 "FILTER"; + +# TRUE ONES + +# INS.FILT.POSENC1 1078497; ## 151 deg # Encoder value position +# INS.FILT.POSID1 "SDSS-u"; # Position ID +# INS.FILT.ID1 "SDSS-u"; # Position ID +# INS.FILT.NAME1 "SDSS-u"; # Name of position +# INS.FILT.TYPE1 "FILTER"; # Name of position + +# INS.FILT.POSENC2 1400003; ## 196 deg +# INS.FILT.POSID2 "SDSS-g"; +# INS.FILT.ID2 "SDSS-g"; +# INS.FILT.NAME2 "SDSS-g"; +# INS.FILT.TYPE2 "FILTER"; + +# INS.FILT.POSENC3 1721369; # 241 deg +# INS.FILT.POSID3 "SDSS-r"; +# INS.FILT.ID3 "SDSS-r"; +# INS.FILT.NAME3 "SDSS-r"; +# INS.FILT.TYPE3 "FILTER"; + +# INS.FILT.POSENC4 2042854; # 286 deg +# INS.FILT.POSID4 "SDSS-i"; +# INS.FILT.ID4 "SDSS-i"; +# INS.FILT.NAME4 "SDSS-i"; +# INS.FILT.TYPE4 "FILTER"; + +# INS.FILT.POSENC5 2364247; # 331 deg +# INS.FILT.POSID5 "SDSS-z"; +# INS.FILT.ID5 "SDSS-z"; +# INS.FILT.NAME5 "SDSS-z"; +# INS.FILT.TYPE5 "FILTER"; + +# INS.FILT.POSENC6 114282; # 16 deg +# INS.FILT.POSID6 "VIMOS-Y"; +# INS.FILT.ID6 "VIMOS-Y"; +# INS.FILT.NAME6 "VIMOS-Y"; +# INS.FILT.TYPE6 "FILTER"; + +# INS.FILT.POSENC7 435667; # 61 deg +# INS.FILT.POSID7 "VIMOS-V"; +# INS.FILT.ID7 "VIMOS-V"; +# INS.FILT.NAME7 "VIMOS-V"; +# INS.FILT.TYPE7 "FILTER"; + +# INS.FILT.POSENC8 757147; # 106 deg +# INS.FILT.POSID8 "FREE"; +# INS.FILT.ID8 "FREE"; +# INS.FILT.NAME8 "FREE"; +# INS.FILT.TYPE8 "FILTER"; + +# pinhole positions on ACQ according to filter +INS.FILT.X0CEN1 257.22; # u' +INS.FILT.Y0CEN1 285.25; +INS.FILT.X0CEN2 257.33; # g' +INS.FILT.Y0CEN2 285.71; +INS.FILT.X0CEN3 257.16; # r' +INS.FILT.Y0CEN3 285.37; +INS.FILT.X0CEN4 0.0; # i' +INS.FILT.Y0CEN4 0.0; +INS.FILT.X0CEN5 255.23; # z' +INS.FILT.Y0CEN5 284.50; +INS.FILT.X0CEN6 256.89; # Y +INS.FILT.Y0CEN6 285.30; +INS.FILT.X0CEN7 0.0; # V +INS.FILT.Y0CEN7 0.0; +INS.FILT.X0CEN8 256.91; # Free +INS.FILT.Y0CEN8 285.20; + +#- +#- ACFW: this will be configured by electronic people +#- +INS.FILT.AUTODIS T; # Auto disable motor when standing +#INS.FILT.DISATSTBY T; # Disable motor when when going to STANDBY +INS.FILT.AXISTYPE "CIRCULAR_OPT"; # Axis type +INS.FILT.BACKLASH 0.0; # [UU] Backlash compensation +INS.FILT.BRAKES F; # T: Brakes are used +INS.FILT.DEFVEL 5.0; # [UU/s] Speed while moving +#INS.FILT.SCALE 0.00014; # Scaling factor (enc <-> user units) +#INS.FILT.MINPOS 0.0; # [UU] Min position +#INS.FILT.MAXPOS 0.0; # [UU] Max position +INS.FILT.TOLERANCE 0.1; # [UU] Tolerance for in-position + +INS.FILT.MAPFILE "ic0fbiDiscreteMotor_TwinCAT.fbmap"; # Mapping File +INS.FILT.MAPPREFIX "MAIN.ACFW."; # Prefix for name mapping + +#- Active Low flags +INS.FILT.AL_LSTOP F; # T: Lower Stop is active low +INS.FILT.AL_LHW F; # T: Lower HW Switch is active low +INS.FILT.AL_REF F; # T: Lower RED Switch is active low +INS.FILT.AL_INDEX F; # T: Lower Index Switch is active low +INS.FILT.AL_UHW F; # T: Upper HW Switch is active low +INS.FILT.AL_USTOP F; # T: Upper Stop is active low +INS.FILT.AL_BRKS F; # T: Brakes feedback is active low + +INS.FILT.SIMVAL "SCALE=0.00014" + +# Initialization Sequence +INS.FILT.INITSTEP1 "FIND_REF_LE,5.0,0.5"; # Find Reference HW Limit +INS.FILT.INITSTEP2 "CALIB_SWITCH,0.0,0.0"; # Set position value to zero +INS.FILT.INITSTEP3 "END,0.0,0.0"; # End of init sequence + + + +#- +#- QTH: Flat Field Lamp 1 +#- +INS.LAMP1.ID "QTH"; # HW ID of lamp. +INS.LAMP1.PREFIX "INS.QTH"; # +INS.LAMP1.NAME "Qth_Lamp"; # ESO name for the lamp. +INS.LAMP1.DEVNAME "qth"; # Name of the device +INS.LAMP1.DEVDESC "QTH Lamp unit"; # Description of the device +INS.LAMP1.DEVTYPE "ic0fbiDevDrvLamp"; # Type of the device driver +INS.LAMP1.LCUID 1; # DCE ID +INS.LAMP1.SWSIM F; # Software simulation + +INS.LAMP1.ADDRESS "opc.tcp://169.254.21.232:4840,4"; # Address of device +INS.LAMP1.SIMADDR ":ic0fbSim_Lamps"; # Simulation address of device +INS.LAMP1.PERIOD 1000; # Control Loop period + +INS.LAMP1.MAPPREFIX "MAIN.QTH."; # Prefix for name mapping +INS.LAMP1.MAPFILE "ic0fbiLamp_TwinCAT.fbmap"; # Mapping File +INS.LAMP1.INFO2 "MAIN.QTH.info.PLATFORM"; # Address for querying platform + +INS.LAMP1.COOLDOWN 2; # 10 +INS.LAMP1.IGFAULT T; # not implemented in hw; ignore fault +INS.LAMP1.INTUSED F; # intensity not used +INS.LAMP1.LOWFAULT F; # ignored (fault active high) +INS.LAMP1.LOWLOCAL F; # not implemented in hw; local active high +INS.LAMP1.LOWON F; # not implemented in hw (feedback active high, using analog input) +INS.LAMP1.LOWSWITCH F; # ctrl active high +INS.LAMP1.MAXON 0; +INS.LAMP1.TIMEOUT 11000; # 500 +INS.LAMP1.WARMUP 3; # Warmup time in s. +INS.LAMP1.WAITCMPL F; +INS.LAMP1.ANLGTHR 500; # [bit] Analog threshold +INS.LAMP1.ANLGRANG 32767; # Full range of A/D converter +INS.LAMP1.FEEDBACK 6; + + +#- +#- DEUT: Flat Field Lamp 2 +#- +INS.LAMP2.ID "DEUT"; # HW ID of lamp. +INS.LAMP2.PREFIX "INS.DEUT"; # +INS.LAMP2.NAME "Deut_Lamp"; # ESO name for the lamp. +INS.LAMP2.DEVNAME "deut"; # Name of the device +INS.LAMP2.DEVDESC "Deuterium Lamp unit"; # Description of the device +INS.LAMP2.DEVTYPE "ic0fbiDevDrvLamp"; # Type of the device driver +INS.LAMP2.LCUID 1; # DCE ID +INS.LAMP2.SWSIM F; # Software simulation + +INS.LAMP2.ADDRESS "opc.tcp://169.254.21.232:4840,4"; # Address of device +INS.LAMP2.SIMADDR ":ic0fbSim_Lamps"; # Simulation address of device +INS.LAMP2.PERIOD 1000; # Control Loop period + +INS.LAMP2.MAPPREFIX "MAIN.DEUT."; # Prefix for name mapping +INS.LAMP2.MAPFILE "ic0fbiLamp_TwinCAT.fbmap"; # Mapping File +INS.LAMP2.INFO2 "MAIN.DEUT.info.PLATFORM"; # Address for querying platform + +INS.LAMP2.COOLDOWN 2; # 10 +INS.LAMP2.IGFAULT T; # not implemented in hw; ignore fault +INS.LAMP2.INTUSED F; # intensity not used +INS.LAMP2.LOWFAULT F; # ignored (fault active high) +INS.LAMP2.LOWLOCAL F; # not implemented in hw; local active high +INS.LAMP2.LOWON F; # not implemented in hw (feedback active high, using analog input) +INS.LAMP2.LOWSWITCH F; # ctrl active high +INS.LAMP2.MAXON 0; +INS.LAMP2.TIMEOUT 11000; # 500 +INS.LAMP2.WARMUP 40; # Warmup time in s. +INS.LAMP2.WAITCMPL F; +INS.LAMP2.ANLGTHR 500; # [bit] Analog threshold +INS.LAMP2.ANLGRANG 32767; # Full range of A/D converter +INS.LAMP2.FEEDBACK 40; + + +#- +#- NEON: Spectral Lamp 1 +#- +INS.LAMP3.ID "NEON"; # HW ID of lamp. +INS.LAMP3.PREFIX "INS.NEON"; # +INS.LAMP3.NAME "Neon_Lamp"; # ESO name for the lamp. +INS.LAMP3.DEVNAME "neon"; # Name of the device +INS.LAMP3.DEVDESC "Neon Lamp unit"; # Description of the device +INS.LAMP3.DEVTYPE "ic0fbiDevDrvLamp"; # Type of the device driver +INS.LAMP3.LCUID 1; # DCE ID +INS.LAMP3.SWSIM F; # Software simulation + +INS.LAMP3.ADDRESS "opc.tcp://169.254.21.232:4840,4"; # Address of device +INS.LAMP3.SIMADDR ":ic0fbSim_Lamps"; # Simulation address of device +INS.LAMP3.PERIOD 1000; # Control Loop period + +INS.LAMP3.MAPPREFIX "MAIN.NEON."; # Prefix for name mapping +INS.LAMP3.MAPFILE "ic0fbiLamp_TwinCAT.fbmap"; # Mapping File +INS.LAMP3.INFO2 "MAIN.NEON.info.PLATFORM"; # Address for querying platform + +INS.LAMP3.COOLDOWN 2; # 10 +INS.LAMP3.IGFAULT T; # not implemented in hw; ignore fault +INS.LAMP3.INTUSED F; # intensity not used +INS.LAMP3.LOWFAULT F; # ignored (fault active high) +INS.LAMP3.LOWLOCAL F; # not implemented in hw; local active high +INS.LAMP3.LOWON F; # not implemented in hw (feedback active high, using analog input) +INS.LAMP3.LOWSWITCH F; # ctrl active high +INS.LAMP3.MAXON 0; +INS.LAMP3.TIMEOUT 11000; # 500 +INS.LAMP3.WARMUP 3; # Warmup time in s. +INS.LAMP3.WAITCMPL F; +INS.LAMP3.ANLGTHR 500; # [bit] Analog threshold +INS.LAMP3.ANLGRANG 32767; # Full range of A/D converter +INS.LAMP3.FEEDBACK 6; + + +#- +#- ARGO: Spectral Lamp 2 +#- +INS.LAMP4.ID "ARGO"; # HW ID of lamp. +INS.LAMP4.PREFIX "INS.ARGO"; # +INS.LAMP4.NAME "Argo_Lamp"; # ESO name for the lamp. +INS.LAMP4.DEVNAME "argo"; # Name of the device +INS.LAMP4.DEVDESC "Argon Lamp unit"; # Description of the device +INS.LAMP4.DEVTYPE "ic0fbiDevDrvLamp"; # Type of the device driver +INS.LAMP4.LCUID 1; # DCE ID +INS.LAMP4.SWSIM F; # Software simulation + +INS.LAMP4.ADDRESS "opc.tcp://169.254.21.232:4840,4"; # Address of device +INS.LAMP4.SIMADDR ":ic0fbSim_Lamps"; # Simulation address of device +INS.LAMP4.PERIOD 1000; # Control Loop period + +INS.LAMP4.MAPPREFIX "MAIN.ARGO."; # Prefix for name mapping +INS.LAMP4.MAPFILE "ic0fbiLamp_TwinCAT.fbmap"; # Mapping File +INS.LAMP4.INFO2 "MAIN.ARGO.info.PLATFORM"; # Address for querying platform + +INS.LAMP4.COOLDOWN 2; # 10 +INS.LAMP4.IGFAULT T; # not implemented in hw; ignore fault +INS.LAMP4.INTUSED F; # intensity not used +INS.LAMP4.LOWFAULT F; # ignored (fault active high) +INS.LAMP4.LOWLOCAL F; # not implemented in hw; local active high +INS.LAMP4.LOWON F; # not implemented in hw (feedback active high, using analog input) +INS.LAMP4.LOWSWITCH F; # ctrl active high +INS.LAMP4.MAXON 0; +INS.LAMP4.TIMEOUT 11000; # 500 +INS.LAMP4.WARMUP 3; # Warmup time in s. +INS.LAMP4.WAITCMPL F; +INS.LAMP4.ANLGTHR 500; # [bit] Analog threshold +INS.LAMP4.ANLGRANG 32767; # Full range of A/D converter +INS.LAMP4.FEEDBACK 6; + + +#- +#- XENO: Spectral Lamp 3 +#- +INS.LAMP5.ID "XENO"; # HW ID of lamp. +INS.LAMP5.PREFIX "INS.XENO"; # +INS.LAMP5.NAME "Xeno_Lamp"; # ESO name for the lamp. +INS.LAMP5.DEVNAME "xeno"; # Name of the device +INS.LAMP5.DEVDESC "Xeno Lamp unit"; # Description of the device +INS.LAMP5.DEVTYPE "ic0fbiDevDrvLamp"; # Type of the device driver +INS.LAMP5.LCUID 1; # DCE ID +INS.LAMP5.SWSIM F; # Software simulation + +INS.LAMP5.ADDRESS "opc.tcp://169.254.21.232:4840,4"; # Address of device +INS.LAMP5.SIMADDR ":ic0fbSim_Lamps"; # Simulation address of device +INS.LAMP5.PERIOD 1000; # Control Loop period + +INS.LAMP5.MAPPREFIX "MAIN.XENO."; # Prefix for name mapping +INS.LAMP5.MAPFILE "ic0fbiLamp_TwinCAT.fbmap"; # Mapping File +INS.LAMP5.INFO2 "MAIN.XENO.info.PLATFORM"; # Address for querying platform + +INS.LAMP5.COOLDOWN 2; # 10 +INS.LAMP5.IGFAULT T; # not implemented in hw; ignore fault +INS.LAMP5.INTUSED F; # intensity not used +INS.LAMP5.LOWFAULT F; # ignored (fault active high) +INS.LAMP5.LOWLOCAL F; # not implemented in hw; local active high +INS.LAMP5.LOWON F; # not implemented in hw (feedback active high, using analog input) +INS.LAMP5.LOWSWITCH F; # ctrl active high +INS.LAMP5.MAXON 0; +INS.LAMP5.TIMEOUT 11000; # 500 +INS.LAMP5.WARMUP 3; # Warmup time in s. +INS.LAMP5.WAITCMPL F; +INS.LAMP5.ANLGTHR 500; # [bit] Analog threshold +INS.LAMP5.ANLGRANG 32767; # Full range of A/D converter +INS.LAMP5.FEEDBACK 6; + + +#- +#- MERC: Spectral Lamp 4 +#- +INS.LAMP6.ID "MERC"; # HW ID of lamp. +INS.LAMP6.PREFIX "INS.MERC"; # +INS.LAMP6.NAME "Merc_Lamp"; # ESO name for the lamp. +INS.LAMP6.DEVNAME "merc"; # Name of the device +INS.LAMP6.DEVDESC "Mercury Lamp unit"; # Description of the device +INS.LAMP6.DEVTYPE "ic0fbiDevDrvLamp"; # Type of the device driver +INS.LAMP6.LCUID 1; # DCE ID +INS.LAMP6.SWSIM F; # Software simulation + +INS.LAMP6.ADDRESS "opc.tcp://169.254.21.232:4840,4"; # Address of device +INS.LAMP6.SIMADDR ":ic0fbSim_Lamps"; # Simulation address of device +INS.LAMP6.PERIOD 1000; # Control Loop period + +INS.LAMP6.MAPPREFIX "MAIN.MERC."; # Prefix for name mapping +INS.LAMP6.MAPFILE "ic0fbiLamp_TwinCAT.fbmap"; # Mapping File +INS.LAMP6.INFO2 "MAIN.MERC.info.PLATFORM"; # Address for querying platform + +INS.LAMP6.COOLDOWN 2; # 10 +INS.LAMP6.IGFAULT T; # not implemented in hw; ignore fault +INS.LAMP6.INTUSED F; # intensity not used +INS.LAMP6.LOWFAULT F; # ignored (fault active high) +INS.LAMP6.LOWLOCAL F; # not implemented in hw; local active high +INS.LAMP6.LOWON F; # not implemented in hw (feedback active high, using analog input) +INS.LAMP6.LOWSWITCH F; # ctrl active high +INS.LAMP6.MAXON 0; +INS.LAMP6.TIMEOUT 11000; # 500 +INS.LAMP6.WARMUP 3; # Warmup time in s. +INS.LAMP6.WAITCMPL F; +INS.LAMP6.ANLGTHR 500; # [bit] Analog threshold +INS.LAMP6.ANLGRANG 32767; # Full range of A/D converter +INS.LAMP6.FEEDBACK 6; + + +#- +#- THAR: Spectral Lamp 5 +#- +INS.LAMP7.ID "THAR"; # HW ID of lamp. +INS.LAMP7.PREFIX "INS.THAR"; # +INS.LAMP7.NAME "Thar_Lamp"; # ESO name for the lamp. +INS.LAMP7.DEVNAME "thar"; # Name of the device +INS.LAMP7.DEVDESC "Thorium-Argon Lamp unit"; # Description of the device +INS.LAMP7.DEVTYPE "ic0fbiDevDrvLamp"; # Type of the device driver +INS.LAMP7.LCUID 1; # DCE ID +INS.LAMP7.SWSIM F; # Software simulation + +INS.LAMP7.ADDRESS "opc.tcp://169.254.21.232:4840,4"; # Address of device +INS.LAMP7.SIMADDR ":ic0fbSim_Lamps"; # Simulation address of device +INS.LAMP7.PERIOD 1000; # Control Loop period + +INS.LAMP7.MAPPREFIX "MAIN.THAR."; # Prefix for name mapping +INS.LAMP7.MAPFILE "ic0fbiLamp_TwinCAT.fbmap"; # Mapping File +INS.LAMP7.INFO2 "MAIN.THAR.info.PLATFORM"; # Address for querying platform + +INS.LAMP7.COOLDOWN 2; # 10 +INS.LAMP7.IGFAULT T; # not implemented in hw; ignore fault +INS.LAMP7.INTUSED F; # intensity not used +INS.LAMP7.LOWFAULT F; # ignored (fault active high) +INS.LAMP7.LOWLOCAL F; # not implemented in hw; local active high +INS.LAMP7.LOWON F; # not implemented in hw (feedback active high, using analog input) +INS.LAMP7.LOWSWITCH F; # ctrl active high +INS.LAMP7.MAXON 0; +INS.LAMP7.TIMEOUT 11000; # 500 +INS.LAMP7.WARMUP 3; # Warmup time in s. +INS.LAMP7.WAITCMPL F; +INS.LAMP7.ANLGTHR 500; # [bit] Analog threshold +INS.LAMP7.ANLGRANG 32767; # Full range of A/D converter +INS.LAMP7.FEEDBACK 6; + + +#- +#- CUPS: Calibration Unit Pinhole Slit +#- +INS.OPTI1.DEVNAME "cups"; # Device name +INS.OPTI1.PREFIX "INS.CUPS"; # +INS.OPTI1.DEVDESC "Calib. Unit Pinhole Slit"; # Device description +INS.OPTI1.SWSIM F; # T= device is simulated +INS.OPTI1.LCUID 1; # Id of PLC +INS.OPTI1.DEVTYPE "ic0fbiDevDrvDiscreteMotor"; # Device Driver C++ class +INS.OPTI1.ADDRESS "opc.tcp://169.254.21.232:4840,4"; # Address of device - TO BE CONFIGURED +INS.OPTI1.SIMADDR ":ic0fbSim_DiscMots"; # Simulation address +#- Timeouts +INS.OPTI1.PERIOD 1000; # Monitor time (ms) +INS.OPTI1.INITTOUT 150000; # Initialisation timeout +INS.OPTI1.MOVETOUT 60000; # Move timeout +INS.OPTI1.SWCHTOUT 10000; # Switch exit timeout +#- Simulation values. For the time being only SCALE is available +INS.OPTI1.SIMVAL "SCALE=1"; # Simulation: UserUnits = Enc * SCALE +#- Named positions +INS.OPTI1.POSNUM 2; + +INS.OPTI1.POSENC1 163934; # Encoder position OUT (free) +INS.OPTI1.POSID1 "Free"; # to recieve light from science field +INS.OPTI1.ID1 "Free"; +INS.OPTI1.NAME1 "Free"; +INS.OPTI1.TYPE1 "MIRR"; + +INS.OPTI1.POSENC2 286885; # Encoder position IN +INS.OPTI1.POSID2 "Pinhole"; # to recieve light from calibration unit +INS.OPTI1.ID2 "Pinhole"; +INS.OPTI1.NAME2 "Pinhole"; +INS.OPTI1.TYPE2 "FREE"; + +#- Name mappings for Beckhoff communication interface +INS.OPTI1.MAPFILE "ic0fbiDiscreteMotor_TwinCAT.fbmap"; # Mapping file DeviceDriver +INS.OPTI1.MAPPREFIX "MAIN.CUPS."; # Prefix for name mapping +# + +#- +#- CUPS: this will be configured by electronic people +#- +# Motor configuration +INS.OPTI1.AUTODIS T; # Auto disable motor when standing +INS.OPTI1.AXISTYPE "LINEAR"; # Axis type +INS.OPTI1.BACKLASH 0.0; # [UU] Backlash compensation +INS.OPTI1.BRAKES F; # T: Brakes are used +INS.OPTI1.DEFVEL 5.0; # [UU/s] Speed while moving +INS.OPTI1.MINPOS 0.0; # [UU] Min position +INS.OPTI1.MAXPOS 100.0; # [UU] Max position +#INS.OPTI1.SCALE 0.000244; # Scaling factor (UserUnits = Enc * SCALE) +INS.OPTI1.TOLERANCE 0.05; # [UU] Tolerance for in-position +#- Active Low flags +INS.OPTI1.AL_LSTOP F; # T: Lower Stop is active low +INS.OPTI1.AL_LHW F; # T: Lower HW Switch is active low +INS.OPTI1.AL_REF F; # T: Lower RED Switch is active low +INS.OPTI1.AL_INDEX F; # T: Lower Index Switch is active low +INS.OPTI1.AL_UHW F; # T: Upper HW Switch is active low +INS.OPTI1.AL_USTOP F; # T: Upper Stop is active low +INS.OPTI1.AL_BRKS F; # T: Brakes feedback is active low +#- Initialization sequence +INS.OPTI1.INITSTEP1 "FIND_UHW,10.0,0.1"; # Find Upper HW Limit +INS.OPTI1.INITSTEP2 "FIND_LHW,10.0,0.1"; # Find Lower HW Limit +INS.OPTI1.INITSTEP3 "CALIB_ABS,10.0,0.0"; # Set position value to ten +INS.OPTI1.INITSTEP4 "END"; # End of init sequence + + +#- +#- CALS: Calibration Slide Rotary motor +#- +INS.OPTI2.DEVNAME "cals"; # Device name +INS.OPTI2.PREFIX "INS.CALS"; # +INS.OPTI2.DEVDESC "Calib. mirror slide"; # Device description +INS.OPTI2.SWSIM F; # T= device is simulated +INS.OPTI2.LCUID 1; # Id of PLC +INS.OPTI2.DEVTYPE "ic0fbiDevDrvDiscreteMotor"; # Device Driver C++ class +INS.OPTI2.ADDRESS "opc.tcp://169.254.21.232:4840,4"; # Address of device - TO BE CONFIGURED +INS.OPTI2.SIMADDR ":ic0fbSim_DiscMots"; # Simulation address +#- Timeouts +INS.OPTI2.PERIOD 1000; # Monitor time (ms) +INS.OPTI2.INITTOUT 150000; # Initialisation timeout +INS.OPTI2.MOVETOUT 60000; # Move timeout +INS.OPTI2.SWCHTOUT 10000; # Switch exit timeout + +#- Simulation values. For the time being only SCALE is available +INS.OPTI2.SIMVAL "SCALE=0.000244"; # Simulation: UserUnits = Enc * SCALE + +#- Named positions +INS.OPTI2.POSNUM 2; + +INS.OPTI2.POSENC1 389350; #95mm # Encoder position OUT +INS.OPTI2.POSID1 "Science"; # to recieve light from science field +INS.OPTI2.ID1 "Science"; +INS.OPTI2.NAME1 "Science"; +INS.OPTI2.TYPE1 "FREE"; + +INS.OPTI2.POSENC2 81960; #20mm # Encoder position IN +INS.OPTI2.POSID2 "Calib"; # to recieve light from calibration unit +INS.OPTI2.ID2 "Calib"; +INS.OPTI2.NAME2 "Calib"; +INS.OPTI2.TYPE2 "MIRR"; + + +#- Name mappings for Beckhoff communication interface +INS.OPTI2.MAPFILE "ic0fbiDiscreteMotor_TwinCAT.fbmap"; # Mapping file DeviceDriver +INS.OPTI2.MAPPREFIX "MAIN.CALS."; # Prefix for name mapping + +#- Firmware information +INS.OPTI2.INFO1 "MAIN.OPTI2.NAME"; # Address for querying name +INS.OPTI2.INFO2 "MAIN.OPTI2.PLATFORM"; # Address for querying platform +INS.OPTI2.INFO3 "MAIN.OPTI2.VERSION"; # Address for querying version +INS.OPTI2.INFO4 "MAIN.OPTI2.DATE"; # Address for querying timestamp +INS.OPTI2.INFO5 "MAIN.OPTI2.SYNOPSIS"; # Address for querying synopsis +INS.OPTI2.INFO6 "MAIN.OPTI2.DESCRIPTION"; # Address for querying descr. + +#- +#- CALS: this will be configured by electronic people +#- +# Motor configuration +INS.OPTI2.AUTODIS T; # Auto disable motor when standing +INS.OPTI2.AXISTYPE "LINEAR"; # Axis type +INS.OPTI2.BACKLASH 0.0; # [UU] Backlash compensation +INS.OPTI2.BRAKES F; # T: Brakes are used +INS.OPTI2.DEFVEL 5.0; # [UU/s] Speed while moving +INS.OPTI2.MINPOS 0.0; # [UU] Min position +INS.OPTI2.MAXPOS 100.0; # [UU] Max position +INS.OPTI2.TOLERANCE 0.01; # [UU] Tolerance for in-position +#- Active Low flags +INS.OPTI2.AL_LSTOP F; # T: Lower Stop is active low +INS.OPTI2.AL_LHW F; # T: Lower HW Switch is active low +INS.OPTI2.AL_REF F; # T: Lower RED Switch is active low +INS.OPTI2.AL_INDEX F; # T: Lower Index Switch is active low +INS.OPTI2.AL_UHW F; # T: Upper HW Switch is active low +INS.OPTI2.AL_USTOP F; # T: Upper Stop is active low +INS.OPTI2.AL_BRKS F; # T: Brakes feedback is active low +#- Initialization sequence +INS.OPTI2.INITSTEP1 "FIND_UHW,5.0,0.5"; # Find Upper HW Limit +INS.OPTI2.INITSTEP2 "FIND_LHW,5.0,0.5"; # Find Lower HW Limit +INS.OPTI2.INITSTEP3 "CALIB_SWITCH,0.0,0.0"; # Set posiiton value to zero +INS.OPTI2.INITSTEP4 "END"; # End of init sequence + + +#- +#- ACQS: Acquisition Camera Slide linear motor +#- +INS.OPTI3.DEVNAME "acqs"; # Device name +INS.OPTI3.PREFIX "INS.ACQS"; # +INS.OPTI3.DEVDESC "Acquisition Camera Slide"; # Device description +INS.OPTI3.SWSIM F; # T= device is simulated +INS.OPTI3.LCUID 1; # Id of PLC +INS.OPTI3.DEVTYPE "ic0fbiDevDrvDiscreteMotor"; # Device Driver C++ class +INS.OPTI3.ADDRESS "opc.tcp://169.254.21.232:4840,4"; # Address of device - TO BE CONFIGURED +INS.OPTI3.SIMADDR ":ic0fbSim_DiscMots"; # Simulation address +#- Timeouts +INS.OPTI3.PERIOD 1000; # Monitor time (ms) +INS.OPTI3.INITTOUT 150000; # Initialisation timeout +INS.OPTI3.MOVETOUT 60000; # Move timeout +INS.OPTI3.SWCHTOUT 10000; # Switch exit timeout + +#- Simulation values. For the time being only SCALE is available +INS.OPTI3.SIMVAL "SCALE=0.00024"; # Simulation: UserUnits = Enc * SCALE + +#- Named positions +INS.OPTI3.POSNUM 4; + +INS.OPTI3.POSENC1 45265; #11.05mm # Encoder position Spectroscopy +INS.OPTI3.POSID1 "Spectroscopy"; +INS.OPTI3.ID1 "Spectroscopy"; +INS.OPTI3.NAME1 "Spectroscopy"; +INS.OPTI3.TYPE1 "FREE"; + +INS.OPTI3.POSENC2 149751; #36.55mm # Encoder position Imaging +INS.OPTI3.POSID2 "Imaging"; +INS.OPTI3.ID2 "Imaging"; +INS.OPTI3.NAME2 "Imaging"; +INS.OPTI3.TYPE2 "MIRR"; + +INS.OPTI3.POSENC3 254298; #62.05mm # Encoder position Daytime Pinhole +INS.OPTI3.POSID3 "Pinhole"; # for "artificial star" +INS.OPTI3.ID3 "Pinhole"; +INS.OPTI3.NAME3 "Pinhole"; +INS.OPTI3.TYPE3 "MIRR"; + +INS.OPTI3.POSENC4 415785; #101.45mm # Encoder position Pellicle +INS.OPTI3.POSID4 "Pellicle"; +INS.OPTI3.ID4 "Pellicle"; +INS.OPTI3.NAME4 "Pellicle"; +INS.OPTI3.TYPE4 "MIRR"; + +#- Name mappings for Beckhoff communication interface +INS.OPTI3.MAPFILE "ic0fbiDiscreteMotor_TwinCAT.fbmap"; # Mapping file DeviceDriver +INS.OPTI3.MAPPREFIX "MAIN.ACQS."; # Prefix for name mapping +#- Firmware information +INS.OPTI3.INFO1 "MAIN.OPTI3.NAME"; # Address for querying name +INS.OPTI3.INFO2 "MAIN.OPTI3.PLATFORM"; # Address for querying platform +INS.OPTI3.INFO3 "MAIN.OPTI3.VERSION"; # Address for querying version +INS.OPTI3.INFO4 "MAIN.OPTI3.DATE"; # Address for querying timestamp +INS.OPTI3.INFO5 "MAIN.OPTI3.SYNOPSIS"; # Address for querying synopsis +INS.OPTI3.INFO6 "MAIN.OPTI3.DESCRIPTION"; # Address for querying descr. + +#- +#- ACQS: this will be configured by electronic people +#- +# Motor configuration +INS.OPTI3.AUTODIS T; # Auto disable motor when standing +INS.OPTI3.AXISTYPE "LINEAR"; # Axis type +INS.OPTI3.BACKLASH 0.0; # [UU] Backlash compensation +INS.OPTI3.BRAKES F; # T: Brakes are used +INS.OPTI3.DEFVEL 5.0; # [UU/s] Speed while moving +INS.OPTI3.MINPOS 0.0; # [UU] Min position +INS.OPTI3.MAXPOS 101.5; # [UU] Max position +INS.OPTI3.TOLERANCE 0.09; # [UU] Tolerance for in-position +#- Active Low flags +INS.OPTI3.AL_LSTOP F; # T: Lower Stop is active low +INS.OPTI3.AL_LHW F; # T: Lower HW Switch is active low +INS.OPTI3.AL_REF F; # T: Lower RED Switch is active low +INS.OPTI3.AL_INDEX F; # T: Lower Index Switch is active low +INS.OPTI3.AL_UHW F; # T: Upper HW Switch is active low +INS.OPTI3.AL_USTOP F; # T: Upper Stop is active low +INS.OPTI3.AL_BRKS F; # T: Brakes feedback is active low +#- Initialization sequence +INS.OPTI3.INITSTEP1 "FIND_UHW,5.0,0.5"; # Find Upper HW Limit +INS.OPTI3.INITSTEP2 "FIND_LHW,5.0,0.5"; # Find Lower HW Limit +INS.OPTI3.INITSTEP3 "CALIB_SWITCH,0.0,0.0"; # Set position value to zero +INS.OPTI3.INITSTEP4 "END"; # End of init sequence + + +#- +#- VISE: VIS Slit Slide exchanger linear motor +#- +INS.OPTI4.DEVNAME "vise"; # Device name +INS.OPTI4.PREFIX "INS.VISE"; # +INS.OPTI4.DEVDESC "VIS Slit Slide exchanger"; # Device description +INS.OPTI4.SWSIM F; # T= device is simulated +INS.OPTI4.LCUID 1; # Id of PLC +INS.OPTI4.DEVTYPE "ic0fbiDevDrvDiscreteMotor"; # Device Driver C++ class +INS.OPTI4.ADDRESS "opc.tcp://169.254.21.232:4840,4"; # Address of device - TO BE CONFIGURED +INS.OPTI4.SIMADDR ":ic0fbSim_DiscMots"; # Simulation address +#- Timeouts +INS.OPTI4.PERIOD 1000; # Monitor time (ms) +INS.OPTI4.INITTOUT 150000; # Initialisation timeout +INS.OPTI4.MOVETOUT 60000; # Move timeout +INS.OPTI4.SWCHTOUT 10000; # Switch exit timeout +#- Simulation values. For the time being only SCALE is available +INS.OPTI4.SIMVAL "SCALE=0.01"; # Simulation: UserUnits = Enc * SCALE +#- Named positions +INS.OPTI4.POSNUM 8; + +INS.OPTI4.POSENC1 "100"; # Encoder position Slit1 +INS.OPTI4.POSID1 "Slit_0.5"; +INS.OPTI4.ID1 "Slit_0.5"; +INS.OPTI4.NAME1 "Slit_0.5"; +INS.OPTI4.TYPE1 "MIRR"; + +INS.OPTI4.POSENC2 "200"; # Encoder position Slit2 +INS.OPTI4.POSID2 "Slit_1.0"; +INS.OPTI4.ID2 "Slit_1.0"; +INS.OPTI4.NAME2 "Slit_1.0"; +INS.OPTI4.TYPE2 "MIRR"; + +INS.OPTI4.POSENC3 "300"; # Encoder position Slit3 +INS.OPTI4.POSID3 "Slit_1.5"; +INS.OPTI4.ID3 "Slit_1.5"; +INS.OPTI4.NAME3 "Slit_1.5"; +INS.OPTI4.TYPE3 "MIRR"; + +INS.OPTI4.POSENC4 "400"; # Encoder position Slit4 +INS.OPTI4.POSID4 "Slit_5.0"; +INS.OPTI4.ID4 "Slit_5.0"; +INS.OPTI4.NAME4 "Slit_5.0"; +INS.OPTI4.TYPE4 "MIRR"; + +INS.OPTI4.POSENC5 "500"; # Encoder position Pinhole +INS.OPTI4.POSID5 "Pinhole"; +INS.OPTI4.ID5 "Pinhole"; +INS.OPTI4.NAME5 "Pinhole"; +INS.OPTI4.TYPE5 "MIRR"; + +INS.OPTI4.POSENC6 "600"; # Encoder position Pinhole +INS.OPTI4.POSID6 "Multi_Pinhole"; +INS.OPTI4.ID6 "Multi_Pinhole"; +INS.OPTI4.NAME6 "Multi_Pinhole"; +INS.OPTI4.TYPE6 "MIRR"; + +INS.OPTI4.POSENC7 "700"; # Encoder position Pinhole +INS.OPTI4.POSID7 "Blank"; +INS.OPTI4.ID7 "Blank"; +INS.OPTI4.NAME7 "Blank"; +INS.OPTI4.TYPE7 "MIRR"; + +INS.OPTI4.POSENC8 "800"; # Encoder position Pinhole +INS.OPTI4.POSID8 "Slit_view"; +INS.OPTI4.ID8 "Slit_view"; +INS.OPTI4.NAME8 "Slit_view"; +INS.OPTI4.TYPE8 "MIRR"; + +#- Name mappings for Beckhoff communication interface +INS.OPTI4.MAPFILE "ic0fbiDiscreteMotor_TwinCAT.fbmap"; # Mapping file DeviceDriver +INS.OPTI4.MAPPREFIX "MAIN.VISE."; # Prefix for name mapping +#- Firmware information +INS.OPTI4.INFO1 "MAIN.OPTI4.NAME"; # Address for querying name +INS.OPTI4.INFO2 "MAIN.OPTI4.PLATFORM"; # Address for querying platform +INS.OPTI4.INFO3 "MAIN.OPTI4.VERSION"; # Address for querying version +INS.OPTI4.INFO4 "MAIN.OPTI4.DATE"; # Address for querying timestamp +INS.OPTI4.INFO5 "MAIN.OPTI4.SYNOPSIS"; # Address for querying synopsis +INS.OPTI4.INFO6 "MAIN.OPTI4.DESCRIPTION"; # Address for querying descr. + +#- +#- VISE: this will be configured by electronic people +#- +# Motor configuration +INS.OPTI4.AUTODIS T; # Auto disable motor when standing +INS.OPTI4.AXISTYPE "LINEAR"; # Axis type +INS.OPTI4.BACKLASH 0.0; # [UU] Backlash compensation +INS.OPTI4.BRAKES F; # T: Brakes are used +INS.OPTI4.DEFVEL 0.5; # [UU/s] Speed while moving +INS.OPTI4.MINPOS 0.0; # [UU] Min position +INS.OPTI4.MAXPOS 15.0; # [UU] Max position +INS.OPTI4.TOLERANCE 0.01; # [UU] Tolerance for in-position +#- Active Low flags +INS.OPTI4.AL_LSTOP F; # T: Lower Stop is active low +INS.OPTI4.AL_LHW F; # T: Lower HW Switch is active low +INS.OPTI4.AL_REF F; # T: Lower RED Switch is active low +INS.OPTI4.AL_INDEX F; # T: Lower Index Switch is active low +INS.OPTI4.AL_UHW F; # T: Upper HW Switch is active low +INS.OPTI4.AL_USTOP F; # T: Upper Stop is active low +INS.OPTI4.AL_BRKS F; # T: Brakes feedback is active low +#- Initialization sequence +INS.OPTI4.INITSTEP1 "FIND_UHW,0.5,0.1"; # Find Upper HW Limit +INS.OPTI4.INITSTEP2 "FIND_LHW,0.5,0.1"; # Find Lower HW Limit +INS.OPTI4.INITSTEP3 "CALIB_SWITCH,0.0,0.0"; # Set position value to zero +INS.OPTI4.INITSTEP4 "END"; # End of init sequence + +#- +#- NISE: NIR Slit Slide exchanger linear motor +#- +INS.NISE.DEVNAME "nise"; # Device name +INS.NISE.PREFIX "INS.NISE"; # +INS.NISE.DEVDESC "NIR Slit Slide exchanger linear motor";# Device description +INS.NISE.SWSIM F; # T= device is simulated +INS.NISE.LCUID 1; # Id of PLC +INS.NISE.DEVTYPE "sxiniseDevDrvNise"; # Device Driver C++ class +INS.NISE.ADDRESS "opc.tcp://169.254.21.232:4840,4"; # Address of device +INS.NISE.SIMADDR ":ic0fbSim_Nise"; # Simulation address +#- Timeouts +INS.NISE.PERIOD 1000; # Monitor time (ms) +INS.NISE.INITTOUT 10000; +# Initialisation timeout +INS.NISE.MOVETOUT 60000; # Move timeout +INS.NISE.SWCHTOUT 10000; # Switch exit timeout +#- Simulation values. For the time being only SCALE is available +INS.NISE.SIMVAL "SCALE=0.01"; # Simulation: UserUnits = Enc * SCALE +#- Named positions +INS.NISE.POSNUM 7; + +INS.NISE.POS1 "-3"; # Encoder position Slit1 +INS.NISE.POSUSER1 "-3"; # Encoder position Slit1 +INS.NISE.POSID1 "Slit_0.5"; +INS.NISE.ID1 "Slit_0.5"; +INS.NISE.NAME1 "Slit_0.5"; +INS.NISE.TYPE1 "MIRR"; + +INS.NISE.POS2 "-2"; # Encoder position Slit2 +INS.NISE.POSUSER2 "-2"; # Encoder position Slit2 +INS.NISE.POSID2 "Slit_1.0"; +INS.NISE.ID2 "Slit_1.0"; +INS.NISE.NAME2 "Slit_1.0"; +INS.NISE.TYPE2 "MIRR"; + +INS.NISE.POS3 "-1"; # Encoder position Slit3 +INS.NISE.POSUSER3 "-1"; # Encoder position Slit3 +INS.NISE.POSID3 "Slit_1.5"; +INS.NISE.ID3 "Slit_1.5"; +INS.NISE.NAME3 "Slit_1.5"; +INS.NISE.TYPE3 "MIRR"; + +INS.NISE.POS4 "0"; # Encoder position Slit4 +INS.NISE.POSUSER4 "0"; # Encoder position Slit4 +INS.NISE.POSID4 "Slit_5.0"; +INS.NISE.ID4 "Slit_5.0"; +INS.NISE.NAME4 "Slit_5.0"; +INS.NISE.TYPE4 "MIRR"; + +INS.NISE.POS5 "1"; # Encoder position Pinhole +INS.NISE.POSUSER5 "1"; # Encoder position Pinhole +INS.NISE.POSID5 "Pinhole"; +INS.NISE.ID5 "Pinhole"; +INS.NISE.NAME5 "Pinhole"; +INS.NISE.TYPE5 "MIRR"; + +INS.NISE.POS6 "2"; # Encoder position Multi Pinhole +INS.NISE.POSUSER6 "2"; # Encoder position Multi Pinhole +INS.NISE.POSID6 "Multi_Pinhole"; +INS.NISE.ID6 "Multi_Pinhole"; +INS.NISE.NAME6 "Multi_Pinhole"; +INS.NISE.TYPE6 "MIRR"; + +INS.NISE.POS7 "3"; # Encoder position Blank Pinhole +INS.NISE.POSUSER7 "3"; # Encoder position Blank Pinhole +INS.NISE.POSID7 "Blank"; +INS.NISE.ID7 "Blank"; +INS.NISE.NAME7 "Blank"; +INS.NISE.TYPE7 "MIRR"; + +#- Name mappings for Beckhoff communication interface +INS.NISE.MAPFILE "sxinise_TwinCAT.fbmap"; # Mapping file DeviceDriver +INS.NISE.MAPPREFIX "MAIN.NISE."; # Prefix for name mapping +#- Firmware information +# INS.NISE.INFO1 "MAIN.NISE.NAME"; # Address for querying name +# INS.NISE.INFO2 "MAIN.NISE.PLATFORM"; # Address for querying platform +# INS.NISE.INFO3 "MAIN.NISE.VERSION"; # Address for querying version +# INS.NISE.INFO4 "MAIN.NISE.DATE"; # Address for querying timestamp +# INS.NISE.INFO5 "MAIN.NISE.SYNOPSIS"; # Address for querying synopsis +# INS.NISE.INFO6 "MAIN.NISE.DESCRIPTION"; # Address for querying descr. + +#=============================================================================== +# Channel 1: Text output +#------------------------------------------------------------------------------- +INS.NISE.CH1.NAME "TEST RS232 OUT"; # Name of the value +INS.NISE.CH1.DESC "Text Serial Output"; # Description of value +INS.NISE.CH1.TYPE "TEXT-OUT"; # Sensor type +INS.NISE.CH1.AVAIL T; # Available +INS.NISE.CH1.SIGNAL "0"; # Signal used +#------------------------------------------------------------------------------- + +#=================================== +# Channel 2: Text input +#----------------------------------- +INS.NISE.CH2.NAME "TEST RS232 IN"; # Name of the value +INS.NISE.CH2.DESC "Text Serial Input"; # Description of value +INS.NISE.CH2.TYPE "TEXT-IN"; # Sensor type +INS.NISE.CH2.AVAIL T; # Available +INS.NISE.CH2.SIGNAL "0"; # Signal used + + +#- +#- NISE: this will be configured by electronic people +#- +# Motor configuration +#INS.NISE.ACCEL 10.0; # [UU/ms^2] Acceleration +#INS.NISE.AUTODIS F; # Auto disable motor when standing +#INS.NISE.AXISTYPE "LINEAR"; # Axis type +#INS.NISE.BACKLASH 0.0; # [UU] Backlash compensation +#INS.NISE.BRAKES F; # T: Brakes are used +#INS.NISE.DECEL 10.0; # [UU/ms^2] Deceleration +#INS.NISE.DEFVEL 200.0; # [UU/s] Speed while moving +#INS.NISE.JERK 5.0; # Maximum rate of acceleration change +#INS.NISE.MINPOS 0.0; # [UU] Min position +#INS.NISE.MAXPOS 100.0; # [UU] Max position +#INS.NISE.SCALE 0.01; # Scaling factor (UserUnits = Enc * SCALE) +INS.NISE.TOLERANCE 0.1; # [UU] Tolerance for in-position +#- Active Low flags +#INS.NISE.AL_LSTOP F; # T: Lower Stop is active low +#INS.NISE.AL_LHW T; # T: Lower HW Switch is active low +#INS.NISE.AL_REF F; # T: Lower RED Switch is active low +#INS.NISE.AL_INDEX F; # T: Lower Index Switch is active low +#INS.NISE.AL_UHW T; # T: Upper HW Switch is active low +#INS.NISE.AL_USTOP F; # T: Upper Stop is active low +#INS.NISE.AL_BRKS T; # T: Brakes feedback is active low +#- Initialization sequence +#INS.NISE.INITSTEP1 "FIND_LHW,35.0,1.5"; # Find Lower HW Limit +#INS.NISE.INITSTEP2 "DELAY,2000.0"; # Wait for 2 sec +#INS.NISE.INITSTEP3 "CALIB_ABS,0.0,0.0"; # Set position value to zero +#INS.NISE.INITSTEP4 "MOVE_ABS,50.0,90.0"; # Make move to absolute position 90 with speed 50 +#INS.NISE.INITSTEP5 "END"; # End of init sequence + + +#- +#- AFOC: Acquisition camera Focus Slide +#- +INS.POS1.DEVNAME "afoc"; # Device name +INS.POS1.PREFIX "INS.AFOC"; # +INS.POS1.DEVDESC "Support Board Z"; # Device description +INS.POS1.LCUID 1; # LCU number of the LCU managing the device (1..n). +INS.POS1.SWSIM F; # Device simulation flag (T/F). +INS.POS1.DEVTYPE "ic0fbiDevDrvDiscreteMotor"; # Device Driver C++ class +INS.POS1.ADDRESS "opc.tcp://169.254.21.232:4840,4"; # Address of device - TO BE CONFIGURED AT PARANAL +INS.POS1.SIMADDR ":ic0fbSim_DiscMots"; # Simulation address MAYBE ic0fbiSimDiscMots + +# Timeouts +INS.POS1.PERIOD 1000; # Monitor time (ms) +INS.POS1.INITTOUT 150000; # Initialisation timeout +INS.POS1.MOVETOUT 60000; # Move timeout +INS.POS1.SWCHTOUT 10000; # Switch exit timeout + +# Simulation values. For the time being only SCALE is available +INS.POS1.SIMVAL "SCALE=0.01"; # Simulation: UserUnits = Enc * SCALE + +# Name mappings for Beckhoff communication interface +INS.POS1.MAPFILE "ic0fbiDiscreteMotor_TwinCAT.fbmap"; # Mapping file DeviceDriver +INS.POS1.MAPPREFIX "MAIN.AFOC."; # Prefix for name mapping, for firrware INFO + +#INS.POS1.TEMPREF 12; # Temperature reference (default=12) [C]. +#INS.POS1.TEMPRAMP 0; # Temperature slope (default=0) [Enc/C]. + + +# !!! TO BE CONFIGURED +#INS.POS1.OFFSET 1; # Normal Reference position [Enc]. +#INS.POS1.RAMP 1; # Ramp [Enc/]. +#INS.POS1.TOLERANC 1; # Position tolerance []. +#INS.POS1.UNITFCT 1; # User unit conversion function. + +# !!! NOT IN DICTIONARY +#INS.POS1.TOLERANCE 0.1; # [UU] Tolerance for in-position +#INS.POS1.LATITUDE -0.429838786; +#INS.POS1.LONGITUDE 1.228795511; +#INS.POS1.TRKTOL 2; + +#- +#- AFOC: this will be configured by electronic people +#- +#- Motor configuration +INS.POS1.AUTODIS T; # Auto disable motor when standing +INS.POS1.AXISTYPE "LINEAR"; # Axis type +INS.POS1.BACKLASH 0.0; # [UU] Backlash compensation +INS.POS1.BRAKES F; # T: Brakes are used +INS.POS1.DEFVEL 0.5; # [UU/s] Speed while moving +INS.POS1.MINPOS 0.0; # [UU] Min position +INS.POS1.MAXPOS 15.0; # [UU] Max position +#INS.POS1.SCALE 0.0000069; # Scaling factor (UserUnits = Enc * SCALE) +INS.POS1.TOLERANCE 0.01; # [UU] Tolerance for in-position +#- Active Low flags +INS.POS1.AL_LSTOP F; # T: Lower Stop is active low +INS.POS1.AL_LHW F; # T: Lower HW Switch is active low +INS.POS1.AL_REF F; # T: Lower REF Switch is active low +INS.POS1.AL_INDEX F; # T: Lower Index Switch is active low +INS.POS1.AL_UHW F; # T: Upper HW Switch is active low +INS.POS1.AL_USTOP F; # T: Upper Stop is active low +INS.POS1.AL_BRKS F; # T: Brakes feedback is active low +#- Initialization sequence +INS.POS1.INITSTEP1 "FIND_UHW,0.5,0.1"; # Find Upper HW Limit +INS.POS1.INITSTEP2 "FIND_LHW,0.5,0.1"; # Find Lower HW Limit +INS.POS1.INITSTEP3 "CALIB_SWITCH,0.0,0.0"; # Set position value to zero +INS.POS1.INITSTEP4 "END"; # End of init sequence + + +#- +#- NFOC: NIR Focus Slide +#- +INS.POS2.DEVNAME "nfoc"; # Device name +INS.POS2.PREFIX "INS.NFOC"; # +INS.POS2.DEVDESC "NIR focus doublet"; # Device description +INS.POS2.LCUID 1; # LCU number of the LCU managing the device (1..n). +INS.POS2.SWSIM F; # Device simulation flag (T/F). +INS.POS2.DEVTYPE "ic0fbiDevDrvDiscreteMotor"; # Device Driver C++ class +INS.POS2.ADDRESS "opc.tcp://169.254.21.232:4840,4"; # Address of device - TO BE CONFIGURED AT PARANAL +INS.POS2.SIMADDR ":ic0fbSim_DiscMots"; # Simulation address MAYBE ic0fbiSimDiscMots + +# Timeouts +INS.POS2.PERIOD 1000; # Monitor time (ms) +INS.POS2.INITTOUT 150000; # Initialisation timeout +INS.POS2.MOVETOUT 60000; # Move timeout +INS.POS2.SWCHTOUT 10000; # Switch exit timeout + +# Simulation values. For the time being only SCALE is available +INS.POS2.SIMVAL "SCALE=0.01"; # Simulation: UserUnits = Enc * SCALE + +# Name mappings for Beckhoff communication interface +INS.POS2.MAPFILE "ic0fbiDiscreteMotor_TwinCAT.fbmap"; # Mapping file DeviceDriver +INS.POS2.MAPPREFIX "MAIN.NFOC."; # Prefix for name mapping, for firrware INFO + + +#- +#- NFOC: this will be configured by electronic people +#- +#- Motor configuration +INS.POS2.AUTODIS T; # Auto disable motor when standing +INS.POS2.AXISTYPE "LINEAR"; # Axis type +INS.POS2.BACKLASH 0.0; # [UU] Backlash compensation +INS.POS2.BRAKES F; # T: Brakes are used +INS.POS2.DEFVEL 0.5; # [mm/s] Speed while moving +INS.POS2.MINPOS 0.0; # [mm] Min position +INS.POS2.MAXPOS 15.0; # [mm] Max position +#INS.POS2.SCALE 0.0000069; # Scaling factor (UserUnits = Enc * SCALE) +INS.POS2.TOLERANCE 0.01; # [mm] Tolerance for in-position +#- Active Low flags +INS.POS2.AL_LSTOP F; # T: Lower Stop is active low +INS.POS2.AL_LHW F; # T: Lower HW Switch is active low +INS.POS2.AL_REF F; # T: Lower REF Switch is active low +INS.POS2.AL_INDEX F; # T: Lower Index Switch is active low +INS.POS2.AL_UHW F; # T: Upper HW Switch is active low +INS.POS2.AL_USTOP F; # T: Upper Stop is active low +INS.POS2.AL_BRKS F; # T: Brakes feedback is active low +#- Initialization sequence +INS.POS2.INITSTEP1 "FIND_UHW,0.5,0.1"; # Find Upper HW Limit +INS.POS2.INITSTEP2 "FIND_LHW,0.5,0.1"; # Find Lower HW Limit +INS.POS2.INITSTEP3 "CALIB_SWITCH,0.0,0.0"; # Set position value to zero +INS.POS2.INITSTEP4 "END"; # End of init sequence + + +# # !!! TO BE CONFIGURED +# INS.POS2.OFFSET 1; # Normal Reference position [Enc] +# INS.POS2.RAMP 1; # Ramp [Enc/] +# INS.POS2.TOLERANC 1; # Position tolerance [] +# INS.POS2.UNITFCT 1; # User unit conversion function + + + +# ----------------------------------------------------------------------------- +# The two functions ADC1 and ADC2, corresponding to the two motors, are linked +# by the keys SIGN2 and SIGN3. See doc ESO-049378 Sec. 4.10.8.8.2 +# +# Mode OFF: +# pos = OFFREF + SIGN1*POSANG +# +# Mode AUTO: +# If elevation <= MINELEV +# rho = POSOFFSET + MINELEV + DROTFACT + drotPos +# pos = AUTOREF + SIGN2*rho +# +# else +# phi = acos[ COFFSET*pressure/POFFSET * TOFFSET/temperature * tan(90-elevation)/AFACTOR] +# rho = POSOFFSET + elevation + DROTFACT * drotPos +# pos = AUTOREF + (SIGN2* (rho+ SIGN3*phi)) +# + +#- +#- ADC1 : First Atmospheric Dispersion Corrector +#- +INS.ADC1.DEVNAME "adc1"; # Device name +INS.ADC1.DEVDESC "ADC motor 1"; # Device description +INS.ADC1.DEVTYPE "ifbmotDevDrvAdc"; # Type of the device driver +INS.ADC1.ADDRESS "opc.tcp://169.254.21.232:4840,4"; # TO BE CONFIGURED AT PARANAL +INS.ADC1.SIMADDR ":ic0fbSim_Adc"; # Simulation address of device +INS.ADC1.MAPFILE "ifbmotAdc_TwinCAT.fbmap"; # Mapping File +INS.ADC1.MAPPREFIX "MAIN.ADC1."; # Prefix for name mapping + +# formula, see doc ESO-049378 Sec. 4.10.8.8.2 +INS.ADC1.OFFREF 18000; #18deg # Reference position for mode OFF +INS.ADC1.AUTOREF 0.0; # Reference posiiton for mode AUTO +INS.ADC1.SIGN1 1; # Sign for motor direction +INS.ADC1.SIGN2 1; # Sign 2 in formula +#INS.ADC1.SIGN3 1; # Sign 3 in formula +#INS.ADC1.SIGN3 -1; # Sign 3 in formula + +# formula, !!! TO BE CONFIGURED +#INS.ADC1.MINELEV 27.64; +INS.ADC1.MINELEV 20.0; +INS.ADC1.POSOFFSET 0.0; +#INS.ADC1.POSOFFSET 335.47; +#INS.ADC1.COFFSET 1.7387; +INS.ADC1.COFFSET 0.0; +#INS.ADC1.PSLOPE 0.0023; +INS.ADC1.PSLOPE 0.00241; +#INS.ADC1.POFFSET 743; +INS.ADC1.POFFSET 0.0; +#INS.ADC1.TSLOPE -0.0061; +INS.ADC1.TSLOPE -0.00473; +#INS.ADC1.TOFFSET 12; +INS.ADC1.TOFFSET 0.0; +INS.ADC1.DROTFACT 1; +#INS.ADC1.AFACTOR 3.32; +INS.ADC1.AFACTOR 2.658; + +#Axis parameters +INS.ADC1.AXISTYPE "CIRCULAR_OPT"; # Axis type +INS.ADC1.BACKLASH 0.0; # [UU] Backlash compensation +INS.ADC1.DEFVEL 5.0; # [UU/s] Default motor velocity +INS.ADC1.LCUID 1; # ID of the DCE managing the device +INS.ADC1.SWSIM F; # If T, function is software simulated +INS.ADC1.PERIOD 1000; # Control Loop period +INS.ADC1.INITTOUT 90000; # Initialisation timeout +INS.ADC1.MOVETOUT 150000; # Move timeout +INS.ADC1.SWCHTOUT 10000; # Switch exit timeout +INS.ADC1.SIMVAL "SCALE=0.001" + +# INS.ADC1.MINPOS 0 +# INS.ADC1.MAXPOS 0 + +INS.ADC1.SPEED 5.0; # [UU/s] Speed while moving +INS.ADC1.SPDMAX 3.0; +INS.ADC1.SPDMIN 0.001; + +# Active Low flags +INS.ADC1.AL_LSTOP F; # If T, Lower Stop is active low +INS.ADC1.AL_LHW F; # If T, Lower HW Switch is active low +INS.ADC1.AL_REF F; # If T, Lower REF Switch is active low +INS.ADC1.AL_INDEX F; # If T, Lower Index Switch is active low +INS.ADC1.AL_UHW F; # If T, Upper HW Switch is active low +INS.ADC1.AL_USTOP F; # If T, Upper Stop is active low + +# Initialization Sequence. +INS.ADC1.INITSTEP1 "FIND_REF_LE,10.0,1.0"; # Find reference HW limit +INS.ADC1.INITSTEP2 "CALIB_SWITCH,0.0,0.0"; # Set position value to zero +INS.ADC1.INITSTEP3 "END,0.0,0.0"; # End of init sequence + +# !!! NOT IN DICTIONARY +INS.ADC1.AUTODIS F; # Auto disable motor when standing +INS.ADC1.TOLERANCE 0.01; # [UU] Tolerance for in-position +INS.ADC1.LATITUDE -0.510654735; # Latitude of La Silla Observatory +INS.ADC1.LONGITUDE 1.23454992; # Longitude of La Silla Observatory +INS.ADC1.TRKTOL 2; +INS.ADC1.LPERIOD 50; # [ms] PLC loop rate + +#- +#- ADC2 : Second Atmospheric Dispersion Corrector +#- +INS.ADC2.DEVNAME "adc2"; # Device name +INS.ADC2.DEVDESC "ADC motor 2"; # Device description +INS.ADC2.DEVTYPE "ifbmotDevDrvAdc"; # Type of the device driver +INS.ADC2.ADDRESS "opc.tcp://169.254.21.232:4840,4"; # TO BE CONFIGURED AT PARANAL +INS.ADC2.SIMADDR ":ic0fbSim_Adc"; # Simulation address of device +INS.ADC2.MAPFILE "ifbmotAdc_TwinCAT.fbmap"; # Mapping File +INS.ADC2.MAPPREFIX "MAIN.ADC2."; # Prefix for name mapping + +# formula, see doc ESO-049378 Sec. 4.10.8.8.2 +INS.ADC2.OFFREF 0.0; # Reference position for mode OFF +INS.ADC2.AUTOREF 0.0; # Reference posiiton for mode AUTO +INS.ADC2.SIGN1 -1; # Sign for motor direction +#INS.ADC2.SIGN2 1; +INS.ADC2.SIGN2 -1; # Sign 2 in formula +#INS.ADC2.SIGN3 1; # Sign 3 in formula +#INS.ADC2.SIGN3 -1; + +# formula, !!! TO BE CONFIGURED +#INS.ADC2.MINELEV 27.64; +INS.ADC2.MINELEV 20.0; +INS.ADC2.POSOFFSET 0.0; +#INS.ADC2.POSOFFSET 335.47; +#INS.ADC2.COFFSET 1.7387; +INS.ADC2.COFFSET 0.0; +#INS.ADC2.PSLOPE 0.0023; +INS.ADC2.PSLOPE 0.00241; +#INS.ADC2.POFFSET 743; +INS.ADC2.POFFSET 0.0; +#INS.ADC2.TSLOPE -0.0061; +INS.ADC2.TSLOPE -0.00473; +#INS.ADC2.TOFFSET 0.0; +INS.ADC2.TOFFSET 11.5; +INS.ADC2.DROTFACT 1; +#INS.ADC2.AFACTOR 3.32; +INS.ADC2.AFACTOR 2.658; + +#Axis parameters +INS.ADC2.AXISTYPE "CIRCULAR_OPT"; # Axis type +INS.ADC2.BACKLASH 0.0; # [UU] Backlash compensation +INS.ADC2.DEFVEL 5.0; # [UU/s] Default motor velocity +INS.ADC2.LCUID 1; # ID of the DCE managing the device +INS.ADC2.SWSIM F; # If T, function is software simulated +INS.ADC2.PERIOD 1000; # Control Loop period +INS.ADC2.INITTOUT 90000; # Initialisation timeout +INS.ADC2.MOVETOUT 150000; # Move timeout +INS.ADC2.SWCHTOUT 10000; # Switch exit timeout +INS.ADC2.SIMVAL "SCALE=0.001"; # Used to calibrate simulated motor speed + +#INS.ADC2.MINPOS 0 +#INS.ADC2.MAXPOS 1000 + +INS.ADC2.SPEED 5.0; # [UU/s] Speed while moving +INS.ADC2.SPDMAX 3.0; +INS.ADC2.SPDMIN 0.001; + +# Active Low flags +INS.ADC2.AL_LSTOP F; # If T, Lower Stop is active low +INS.ADC2.AL_LHW F; # If T, Lower HW Switch is active low +INS.ADC2.AL_REF F; # If T, Lower REF Switch is active low +INS.ADC2.AL_INDEX F; # If T, Lower Index Switch is active low +INS.ADC2.AL_UHW F; # If T, Upper HW Switch is active low +INS.ADC2.AL_USTOP F; # If T, Upper Stop is active low + +# Initialization Sequence. +INS.ADC2.INITSTEP1 "FIND_REF_LE,10.0,1.0"; # Find reference HW limit +INS.ADC2.INITSTEP2 "CALIB_SWITCH,0.0,0.0"; # Set position value to zero +INS.ADC2.INITSTEP3 "END,0.0,0.0"; # End of init sequence + +# !!! NOT IN DICTIONARY +INS.ADC2.AUTODIS F; # Auto disable motor when standing +INS.ADC2.TOLERANCE 0.01; # [UU] Tolerance for in-position +INS.ADC2.LATITUDE -0.510654735; # Latitude of La Silla Observatory +INS.ADC2.LONGITUDE 1.23454992; # Longitude of La Silla Observatory +INS.ADC2.TRKTOL 2; +INS.ADC2.LPERIOD 50; # [ms] PLC loop rate + +#- +#- AFC1 - VIS Actuator Piezo +#- +INS.AFC1.DEVNAME "afc1"; # Device name +INS.AFC1.PREFIX "INS.AFC1"; # +INS.AFC1.DESC "Active Flexure Compensator VIS"; # short description +INS.AFC1.DEVDESC "I/O Pupil stabil 1"; # Device description +INS.AFC1.SWSIM F; # T = device is simulated +INS.AFC1.LCUID 1; # DCE ID +INS.AFC1.DEVTYPE "sxiafcDevDrvAfc"; # Device driver C++ class +INS.AFC1.ADDRESS "opc.tcp://169.254.21.232:4840,4"; # HW address of device +INS.AFC1.SIMADDR ":ic0fbSim_Afc"; # Simulation address of device +INS.AFC1.PERIOD 1000; # Control Loop period +INS.AFC1.MAPPREFIX "MAIN.AFC1."; # Prefix for name mapping +INS.AFC1.MAPFILE "sxiafc_TwinCAT.fbmap"; # Mapping file DeviceDriver +INS.AFC1.MAXBUF 1; # ??? +INS.AFC1.REFPOS1 1000.0; # Reference tip +INS.AFC1.REFPOS2 1000.0; # Reference tilt +INS.AFC1.MINPOS1 0.0; # Min tip +INS.AFC1.MINPOS2 0.0; # Min tilt +INS.AFC1.MAXPOS1 2000.0; # Max tip +INS.AFC1.MAXPOS2 2000.0; # Max tilt + +#- +#- AFC2 - NIR Actuator Piezo +#- +INS.AFC2.DEVNAME "afc2"; # Device name +INS.AFC2.PREFIX "INS.AFC2"; # +INS.AFC2.DESC "Active Flexure Compensator NIR"; # short description +INS.AFC2.DEVDESC "I/O Pupil stabil 2"; # Device description +INS.AFC2.SWSIM F; # T = device is simulated +INS.AFC2.LCUID 1; # DCE ID +INS.AFC2.DEVTYPE "sxiafcDevDrvAfc"; # Device driver C++ class +INS.AFC2.ADDRESS "opc.tcp://169.254.21.232:4840,4"; # HW address of device +INS.AFC2.SIMADDR ":ic0fbSim_Afc"; # Simulation address of device +INS.AFC2.PERIOD 1000; # Control Loop period +INS.AFC2.MAPPREFIX "MAIN.AFC2."; # Prefix for name mapping +INS.AFC2.MAPFILE "sxiafc_TwinCAT.fbmap"; # Mapping file DeviceDriver +INS.AFC2.MAXBUF 1; # ??? +INS.AFC2.REFPOS1 1000.0; # Reference tip +INS.AFC2.REFPOS2 1000.0; # Reference tilt +INS.AFC2.MINPOS1 0.0; # Min tip +INS.AFC2.MINPOS2 0.0; # Min tilt +INS.AFC2.MAXPOS1 2000.0; # Max tip +INS.AFC2.MAXPOS2 2000.0; # Max tilt + + +#******************************************************************************* +# SENSOR1 +# CVTS - Cryo-Vacuum sensors. Is monitored by a Siemens PLC. +# The communication protocol is OPC UA. from NIX nxse5 +# +#=============================================================================== +INS.SENSOR1.DEVNAME "cvts"; # Name of the device +INS.SENSOR1.PREFIX "INS.CVTS"; +INS.SENSOR1.DEVDESC "Cryo Vacuum Sensors"; # Description of the device +INS.SENSOR1.DEVTYPE "ic0fbiDevDrvSensor"; # Device type +INS.SENSOR1.LCUID 1; # DCE ID +INS.SENSOR1.SWSIM F; # Software simulation +INS.SENSOR1.ADDRESS "opc.tcp://192.168.100.3:4840,4"; # Address of device - TO BE CONFIGURED +INS.SENSOR1.SIMADDR ":ic0fbSim_Sensors"; # Simulation address +INS.SENSOR1.PERIOD 1000; # Control Loop period +INS.SENSOR1.MAPPREFIX "PLC_1.PLC_1.Programs.DB_ICSIF_Soxs1"; # Prefix for name mapping +INS.SENSOR1.MAPFILE "ic0fbiSensor_32Ch_TwinCAT.fbmap"; # Mapping file DeviceDriver +INS.SENSOR1.MAXBUF 1; + +INS.SENSOR1.NUM 5; # channels to read + +#=============================================================================== +# Channel 1: Analog Input - PT100 +#------------------------------------------------------------------------------- +INS.SENSOR1.CH1.NAME "Gas Exchanger"; # Name of the value +INS.SENSOR1.CH1.DESC "VIS Cryostat CFC Gas Exchanger"; # Description of the value +INS.SENSOR1.CH1.TYPE "ANALOG-IN"; # Channel type +INS.SENSOR1.CH1.AVAIL T; # Available +INS.SENSOR1.CH1.HEADER T; # Write value in FITS header +INS.SENSOR1.CH1.LOG T; # Log value periodically +INS.SENSOR1.CH1.FITS "INS.TEMP101.VAL"; # FITS keyword for value +INS.SENSOR1.CH1.UNIT "C"; # Unit +INS.SENSOR1.CH1.FORMAT "%8.2f"; # Sensor value output format +INS.SENSOR1.CH1.COMPTYPE "LINEAR"; # Value = COMPPAR2 + COMPPAR1 * read +INS.SENSOR1.CH1.COMPPAR1 0.1; # Computation parameter +INS.SENSOR1.CH1.COMPPAR2 0; # Computation parameter +INS.SENSOR1.CH1.SIGNAL "0"; # Signal used +INS.SENSOR1.CH1.SIMVAL "25.0"; # simulation value +INS.SENSOR1.CH1.SIMRAND "0.4"; # Simulated variance +#------------------------------------------------------------------------------- + + +#=============================================================================== +# Channel 2: Analog Input - PT100 +#------------------------------------------------------------------------------- +INS.SENSOR1.CH2.NAME "Cold Head"; # Name of the value +INS.SENSOR1.CH2.DESC "VIS Cryostat CFC Cold Head"; # Description of the value +INS.SENSOR1.CH2.TYPE "ANALOG-IN"; # Channel type +INS.SENSOR1.CH2.AVAIL T; # Available +INS.SENSOR1.CH2.HEADER T; # Write value in FITS header +INS.SENSOR1.CH2.LOG T; # Log value periodically +INS.SENSOR1.CH2.FITS "INS.TEMP102.VAL"; # FITS keyword for value +INS.SENSOR1.CH2.UNIT "C"; # Unit +INS.SENSOR1.CH2.FORMAT "%8.2f"; # Sensor value output format +INS.SENSOR1.CH2.COMPTYPE "LINEAR"; # Value = COMPPAR2 + COMPPAR1 * read +INS.SENSOR1.CH2.COMPPAR1 0.1; # Computation parameter +INS.SENSOR1.CH2.COMPPAR2 0; # Computation parameter +INS.SENSOR1.CH2.SIGNAL "0"; # Signal used +INS.SENSOR1.CH2.SIMVAL "25.0"; # simulation value +INS.SENSOR1.CH2.SIMRAND "0.4"; # Simulated variance +#------------------------------------------------------------------------------- + + +#=============================================================================== +# Channel 3: Analog Input - PT100 +#------------------------------------------------------------------------------- +INS.SENSOR1.CH3.NAME "Cryopump"; # Name of the value +INS.SENSOR1.CH3.DESC "VIS Cryostat CFC Cryopump"; # Description of the value +INS.SENSOR1.CH3.TYPE "ANALOG-IN"; # Channel type +INS.SENSOR1.CH3.AVAIL T; # Available +INS.SENSOR1.CH3.HEADER T; # Write value in FITS header +INS.SENSOR1.CH3.LOG T; # Log value periodically +INS.SENSOR1.CH3.FITS "INS.TEMP103.VAL"; # FITS keyword for value +INS.SENSOR1.CH3.UNIT "C"; # Unit +INS.SENSOR1.CH3.FORMAT "%8.2f"; # Sensor value output format +INS.SENSOR1.CH3.COMPTYPE "LINEAR"; # Value = COMPPAR2 + COMPPAR1 * read +INS.SENSOR1.CH3.COMPPAR1 0.1; # Computation parameter +INS.SENSOR1.CH3.COMPPAR2 0; # Computation parameter +INS.SENSOR1.CH3.SIGNAL "0"; # Signal used +INS.SENSOR1.CH3.SIMVAL "25.0"; # simulation value +INS.SENSOR1.CH3.SIMRAND "0.4"; # Simulated variance +#------------------------------------------------------------------------------- + +#=============================================================================== +# Channel 4: Analog Input - DT670-SD +#------------------------------------------------------------------------------- +INS.SENSOR1.CH4.NAME "Baseplate"; # Name of the value +INS.SENSOR1.CH4.DESC "VIS Cryostat CCD Baseplate"; # Description of the value +INS.SENSOR1.CH4.TYPE "ANALOG-IN"; # Channel type +INS.SENSOR1.CH4.AVAIL T; # Available +INS.SENSOR1.CH4.HEADER T; # Write value in FITS header +INS.SENSOR1.CH4.LOG T; # Log value periodically +INS.SENSOR1.CH4.FITS "INS.TEMP104.VAL"; # FITS keyword for value +INS.SENSOR1.CH4.UNIT "C"; # Unit +INS.SENSOR1.CH4.FORMAT "%8.2f"; # Sensor value output format +INS.SENSOR1.CH4.COMPTYPE "LINEAR"; # Value = COMPPAR2 + COMPPAR1 * read +INS.SENSOR1.CH4.COMPPAR1 0.1; # Computation parameter +INS.SENSOR1.CH4.COMPPAR2 0; # Computation parameter +INS.SENSOR1.CH4.SIGNAL "0"; # Signal used +INS.SENSOR1.CH4.SIMVAL "25.0"; # simulation value +INS.SENSOR1.CH4.SIMRAND "0.4"; # Simulated variance +#------------------------------------------------------------------------------- + +#=============================================================================== +# Channel 5: Analog Input - DT670-SD +#------------------------------------------------------------------------------- +INS.SENSOR1.CH5.NAME "CCD Rear"; # Name of the value +INS.SENSOR1.CH5.DESC "VIS Cryostat CCD Rear"; # Description of the value +INS.SENSOR1.CH5.TYPE "ANALOG-IN"; # Channel type +INS.SENSOR1.CH5.AVAIL T; # Available +INS.SENSOR1.CH5.HEADER T; # Write value in FITS header +INS.SENSOR1.CH5.LOG T; # Log value periodically +INS.SENSOR1.CH5.FITS "INS.TEMP105.VAL"; # FITS keyword for value +INS.SENSOR1.CH5.UNIT "C"; # Unit +INS.SENSOR1.CH5.FORMAT "%8.2f"; # Sensor value output format +INS.SENSOR1.CH5.COMPTYPE "LINEAR"; # Value = COMPPAR2 + COMPPAR1 * read +INS.SENSOR1.CH5.COMPPAR1 0.1; # Computation parameter +INS.SENSOR1.CH5.COMPPAR2 0; # Computation parameter +INS.SENSOR1.CH5.SIGNAL "0"; # Signal used +INS.SENSOR1.CH5.SIMVAL "25.0"; # simulation value +INS.SENSOR1.CH5.SIMRAND "0.4"; # Simulated variance +#------------------------------------------------------------------------------- + + +#******************************************************************************* +# SENSOR2 +# IRTS - Infrared Cryostat sensors. Is monitored by a Siemens PLC. +# The communication protocol is OPC UA. from NIX nxse5 +# +#=============================================================================== +INS.SENSOR2.DEVNAME "irts"; # Name of the device +INS.SENSOR2.PREFIX "INS.IRTS"; +INS.SENSOR2.DEVDESC "Infrared Cryostat Sensors"; # Description of the device +INS.SENSOR2.DEVTYPE "ic0fbiDevDrvSensor"; # Device type +INS.SENSOR2.LCUID 1; # DCE ID +INS.SENSOR2.SWSIM F; # Software simulation +INS.SENSOR2.ADDRESS "opc.tcp://192.168.100.3:4840,1"; # Address of device - TO BE CONFIGURED +INS.SENSOR2.SIMADDR ":ic0fbSim_Sensors"; # Simulation address +INS.SENSOR2.PERIOD 1000; # Control Loop period +INS.SENSOR2.MAPPREFIX "PLC_1.PLC_1.Programs.DB_ICSIF_Soxs2"; # Prefix for name mapping +INS.SENSOR2.MAPFILE "ic0fbiSensor_32Ch_TwinCAT.fbmap"; # Mapping file DeviceDriver +#INS.SENSOR2.ADDRESS "opc.tcp://192.168.5.124:4840,3"; # Address of device - TO BE CONFIGURED +#INS.SENSOR2.MAPPREFIX ""; # Prefix for name mapping +#INS.SENSOR2.MAPFILE "ic0fbiSensor_32Ch_NIR.fbmap"; # Mapping file DeviceDriver + +INS.SENSOR2.MAXBUF 1; + +INS.SENSOR2.NUM 29; # channels to read + +# #=============================================================================== +# # TESTTTTTTTTTTTTTTTTTTTTTTTTTTTT +# #------------------------------------------------------------------------------- +# INS.SENSOR2.CH1.NAME "RTDB_OB1"; # Name of the value +# INS.SENSOR2.CH1.DESC "NIR Cryostat Optical Bench 1"; # Description of the value +# INS.SENSOR2.CH1.TYPE "ANALOG-IN"; # Channel type +# INS.SENSOR2.CH1.AVAIL T; # Available +# INS.SENSOR2.CH1.HEADER T; # Write value in FITS header +# INS.SENSOR2.CH1.LOG T; # Log value periodically +# INS.SENSOR2.CH1.FITS "INS.TEMP201.VAL"; # FITS keyword for value +# INS.SENSOR2.CH1.UNIT "C"; # Unit +# INS.SENSOR2.CH1.FORMAT "%8.2f"; # Sensor value output format +# INS.SENSOR2.CH1.COMPTYPE "LINEAR"; # Value = COMPPAR2 + COMPPAR1 * read +# INS.SENSOR2.CH1.COMPPAR1 0.1; # Computation parameter +# INS.SENSOR2.CH1.COMPPAR2 0; # Computation parameter +# INS.SENSOR2.CH1.SIGNAL "0"; # Signal used +# INS.SENSOR2.CH1.SIMVAL "25.0"; # simulation value +# INS.SENSOR2.CH1.SIMRAND "0.4"; # Simulated variance +# #------------------------------------------------------------------------------- + +#=============================================================================== +# Channel 1: Analog Input - DT670 +#------------------------------------------------------------------------------- +INS.SENSOR2.CH1.NAME "Detector"; # Name of the value +INS.SENSOR2.CH1.DESC "NIR Cryostat Detector"; # Description of the value +INS.SENSOR2.CH1.TYPE "ANALOG-IN"; # Channel type +INS.SENSOR2.CH1.AVAIL T; # Available +INS.SENSOR2.CH1.HEADER T; # Write value in FITS header +INS.SENSOR2.CH1.LOG T; # Log value periodically +INS.SENSOR2.CH1.FITS "INS.TEMP201.VAL"; # FITS keyword for value +INS.SENSOR2.CH1.UNIT "C"; # Unit +INS.SENSOR2.CH1.FORMAT "%8.2f"; # Sensor value output format +INS.SENSOR2.CH1.COMPTYPE "LINEAR"; # Value = COMPPAR2 + COMPPAR1 * read +INS.SENSOR2.CH1.COMPPAR1 0.1; # Computation parameter +INS.SENSOR2.CH1.COMPPAR2 0; # Computation parameter +INS.SENSOR2.CH1.SIGNAL "0"; # Signal used +INS.SENSOR2.CH1.SIMVAL "25.0"; # simulation value +INS.SENSOR2.CH1.SIMRAND "0.4"; # Simulated variance +#------------------------------------------------------------------------------- + + +#=============================================================================== +# Channel 2: Analog Input - PT103 +#------------------------------------------------------------------------------- +INS.SENSOR2.CH2.NAME "Cold Head"; # Name of the value +INS.SENSOR2.CH2.DESC "NIR Cryostat CFC Cold Head"; # Description of the value +INS.SENSOR2.CH2.TYPE "ANALOG-IN"; # Channel type +INS.SENSOR2.CH2.AVAIL T; # Available +INS.SENSOR2.CH2.HEADER T; # Write value in FITS header +INS.SENSOR2.CH2.LOG T; # Log value periodically +INS.SENSOR2.CH2.FITS "INS.TEMP202.VAL"; # FITS keyword for value +INS.SENSOR2.CH2.UNIT "C"; # Unit +INS.SENSOR2.CH2.FORMAT "%8.2f"; # Sensor value output format +INS.SENSOR2.CH2.COMPTYPE "LINEAR"; # Value = COMPPAR2 + COMPPAR1 * read +INS.SENSOR2.CH2.COMPPAR1 0.1; # Computation parameter +INS.SENSOR2.CH2.COMPPAR2 0; # Computation parameter +INS.SENSOR2.CH2.SIGNAL "0"; # Signal used +INS.SENSOR2.CH2.SIMVAL "25.0"; # simulation value +INS.SENSOR2.CH2.SIMRAND "0.4"; # Simulated variance +#------------------------------------------------------------------------------- + +#=============================================================================== +# Channel 3: Analog Input - PT103-AM +#------------------------------------------------------------------------------- +INS.SENSOR2.CH3.NAME "Optical Bench 1"; # Name of the value +INS.SENSOR2.CH3.DESC "NIR Cryostat Optical Bench 1"; # Description of the value +INS.SENSOR2.CH3.TYPE "ANALOG-IN"; # Channel type +INS.SENSOR2.CH3.AVAIL T; # Available +INS.SENSOR2.CH3.HEADER T; # Write value in FITS header +INS.SENSOR2.CH3.LOG T; # Log value periodically +INS.SENSOR2.CH3.FITS "INS.TEMP203.VAL"; # FITS keyword for value +INS.SENSOR2.CH3.UNIT "C"; # Unit +INS.SENSOR2.CH3.FORMAT "%8.2f"; # Sensor value output format +INS.SENSOR2.CH3.COMPTYPE "LINEAR"; # Value = COMPPAR2 + COMPPAR1 * read +INS.SENSOR2.CH3.COMPPAR1 0.1; # Computation parameter +INS.SENSOR2.CH3.COMPPAR2 0; # Computation parameter +INS.SENSOR2.CH3.SIGNAL "0"; # Signal used +INS.SENSOR2.CH3.SIMVAL "25.0"; # simulation value +INS.SENSOR2.CH3.SIMRAND "0.4"; # Simulated variance +#------------------------------------------------------------------------------- + +#=============================================================================== +# Channel 4: Analog Input - PT103-AM +#------------------------------------------------------------------------------- +INS.SENSOR2.CH4.NAME "Optical Bench 2"; # Name of the value +INS.SENSOR2.CH4.DESC "NIR Cryostat Optical Bench 2"; # Description of the value +INS.SENSOR2.CH4.TYPE "ANALOG-IN"; # Channel type +INS.SENSOR2.CH4.AVAIL T; # Available +INS.SENSOR2.CH4.HEADER T; # Write value in FITS header +INS.SENSOR2.CH4.LOG T; # Log value periodically +INS.SENSOR2.CH4.FITS "INS.TEMP204.VAL"; # FITS keyword for value +INS.SENSOR2.CH4.UNIT "C"; # Unit +INS.SENSOR2.CH4.FORMAT "%8.2f"; # Sensor value output format +INS.SENSOR2.CH4.COMPTYPE "LINEAR"; # Value = COMPPAR2 + COMPPAR1 * read +INS.SENSOR2.CH4.COMPPAR1 0.1; # Computation parameter +INS.SENSOR2.CH4.COMPPAR2 0; # Computation parameter +INS.SENSOR2.CH4.SIGNAL "0"; # Signal used +INS.SENSOR2.CH4.SIMVAL "25.0"; # simulation value +INS.SENSOR2.CH4.SIMRAND "0.4"; # Simulated variance +#------------------------------------------------------------------------------- + +#=============================================================================== +# Channel 5: Analog Input - PT103-AM +#------------------------------------------------------------------------------- +INS.SENSOR2.CH5.NAME "Optical Bench 3"; # Name of the value +INS.SENSOR2.CH5.DESC "NIR Cryostat Optical Bench 3"; # Description of the value +INS.SENSOR2.CH5.TYPE "ANALOG-IN"; # Channel type +INS.SENSOR2.CH5.AVAIL T; # Available +INS.SENSOR2.CH5.HEADER T; # Write value in FITS header +INS.SENSOR2.CH5.LOG T; # Log value periodically +INS.SENSOR2.CH5.FITS "INS.TEMP205.VAL"; # FITS keyword for value +INS.SENSOR2.CH5.UNIT "C"; # Unit +INS.SENSOR2.CH5.FORMAT "%8.2f"; # Sensor value output format +INS.SENSOR2.CH5.COMPTYPE "LINEAR"; # Value = COMPPAR2 + COMPPAR1 * read +INS.SENSOR2.CH5.COMPPAR1 0.1; # Computation parameter +INS.SENSOR2.CH5.COMPPAR2 0; # Computation parameter +INS.SENSOR2.CH5.SIGNAL "0"; # Signal used +INS.SENSOR2.CH5.SIMVAL "25.0"; # simulation value +INS.SENSOR2.CH5.SIMRAND "0.4"; # Simulated variance +#------------------------------------------------------------------------------- + +#=============================================================================== +# Channel 6: Analog Input - PT103-AM +#------------------------------------------------------------------------------- +INS.SENSOR2.CH6.NAME "Optical Bench 4"; # Name of the value +INS.SENSOR2.CH6.DESC "NIR Cryostat Optical Bench 4"; # Description of the value +INS.SENSOR2.CH6.TYPE "ANALOG-IN"; # Channel type +INS.SENSOR2.CH6.AVAIL T; # Available +INS.SENSOR2.CH6.HEADER T; # Write value in FITS header +INS.SENSOR2.CH6.LOG T; # Log value periodically +INS.SENSOR2.CH6.FITS "INS.TEMP206.VAL"; # FITS keyword for value +INS.SENSOR2.CH6.UNIT "C"; # Unit +INS.SENSOR2.CH6.FORMAT "%8.2f"; # Sensor value output format +INS.SENSOR2.CH6.COMPTYPE "LINEAR"; # Value = COMPPAR2 + COMPPAR1 * read +INS.SENSOR2.CH6.COMPPAR1 0.1; # Computation parameter +INS.SENSOR2.CH6.COMPPAR2 0; # Computation parameter +INS.SENSOR2.CH6.SIGNAL "0"; # Signal used +INS.SENSOR2.CH6.SIMVAL "25.0"; # simulation value +INS.SENSOR2.CH6.SIMRAND "0.4"; # Simulated variance +#------------------------------------------------------------------------------- + +#=============================================================================== +# Channel 7: Analog Input - PT103-AM +#------------------------------------------------------------------------------- +INS.SENSOR2.CH7.NAME "Optical Bench 5"; # Name of the value +INS.SENSOR2.CH7.DESC "NIR Cryostat Optical Bench 5"; # Description of the value +INS.SENSOR2.CH7.TYPE "ANALOG-IN"; # Channel type +INS.SENSOR2.CH7.AVAIL T; # Available +INS.SENSOR2.CH7.HEADER T; # Write value in FITS header +INS.SENSOR2.CH7.LOG T; # Log value periodically +INS.SENSOR2.CH7.FITS "INS.TEMP207.VAL"; # FITS keyword for value +INS.SENSOR2.CH7.UNIT "C"; # Unit +INS.SENSOR2.CH7.FORMAT "%8.2f"; # Sensor value output format +INS.SENSOR2.CH7.COMPTYPE "LINEAR"; # Value = COMPPAR2 + COMPPAR1 * read +INS.SENSOR2.CH7.COMPPAR1 0.1; # Computation parameter +INS.SENSOR2.CH7.COMPPAR2 0; # Computation parameter +INS.SENSOR2.CH7.SIGNAL "0"; # Signal used +INS.SENSOR2.CH7.SIMVAL "25.0"; # simulation value +INS.SENSOR2.CH7.SIMRAND "0.4"; # Simulated variance +#------------------------------------------------------------------------------- + + +#=============================================================================== +# Channel 8: Analog Input - PT103-AM +#------------------------------------------------------------------------------- +INS.SENSOR2.CH8.NAME "Cryopump"; # Name of the value +INS.SENSOR2.CH8.DESC "NIR Cryostat Cryopump"; # Description of the value +INS.SENSOR2.CH8.TYPE "ANALOG-IN"; # Channel type +INS.SENSOR2.CH8.AVAIL T; # Available +INS.SENSOR2.CH8.HEADER T; # Write value in FITS header +INS.SENSOR2.CH8.LOG T; # Log value periodically +INS.SENSOR2.CH8.FITS "INS.TEMP208.VAL"; # FITS keyword for value +INS.SENSOR2.CH8.UNIT "C"; # Unit +INS.SENSOR2.CH8.FORMAT "%8.2f"; # Sensor value output format +INS.SENSOR2.CH8.COMPTYPE "LINEAR"; # Value = COMPPAR2 + COMPPAR1 * read +INS.SENSOR2.CH8.COMPPAR1 0.1; # Computation parameter +INS.SENSOR2.CH8.COMPPAR2 0; # Computation parameter +INS.SENSOR2.CH8.SIGNAL "0"; # Signal used +INS.SENSOR2.CH8.SIMVAL "25.0"; # simulation value +INS.SENSOR2.CH8.SIMRAND "0.4"; # Simulated variance +#------------------------------------------------------------------------------- + +#=============================================================================== +# Channel 9: Analog Input - PT103-AM +#------------------------------------------------------------------------------- +INS.SENSOR2.CH9.NAME "Slit Assembly"; # Name of the value +INS.SENSOR2.CH9.DESC "NIR Cryostat Slit Assembly"; # Description of the value +INS.SENSOR2.CH9.TYPE "ANALOG-IN"; # Channel type +INS.SENSOR2.CH9.AVAIL T; # Available +INS.SENSOR2.CH9.HEADER T; # Write value in FITS header +INS.SENSOR2.CH9.LOG T; # Log value periodically +INS.SENSOR2.CH9.FITS "INS.TEMP209.VAL"; # FITS keyword for value +INS.SENSOR2.CH9.UNIT "C"; # Unit +INS.SENSOR2.CH9.FORMAT "%8.2f"; # Sensor value output format +INS.SENSOR2.CH9.COMPTYPE "LINEAR"; # Value = COMPPAR2 + COMPPAR1 * read +INS.SENSOR2.CH9.COMPPAR1 0.1; # Computation parameter +INS.SENSOR2.CH9.COMPPAR2 0; # Computation parameter +INS.SENSOR2.CH9.SIGNAL "0"; # Signal used +INS.SENSOR2.CH9.SIMVAL "25.0"; # simulation value +INS.SENSOR2.CH9.SIMRAND "0.4"; # Simulated variance +#------------------------------------------------------------------------------- + +#=============================================================================== +# Channel 10: Analog Input - PT103-AM +#------------------------------------------------------------------------------- +INS.SENSOR2.CH10.NAME "Prism Assembly 1"; # Name of the value +INS.SENSOR2.CH10.DESC "NIR Cryostat Prism Assembly 1"; # Description of the value +INS.SENSOR2.CH10.TYPE "ANALOG-IN"; # Channel type +INS.SENSOR2.CH10.AVAIL T; # Available +INS.SENSOR2.CH10.HEADER T; # Write value in FITS header +INS.SENSOR2.CH10.LOG T; # Log value periodically +INS.SENSOR2.CH10.FITS "INS.TEMP210.VAL"; # FITS keyword for value +INS.SENSOR2.CH10.UNIT "C"; # Unit +INS.SENSOR2.CH10.FORMAT "%8.2f"; # Sensor value output format +INS.SENSOR2.CH10.COMPTYPE "LINEAR"; # Value = COMPPAR2 + COMPPAR1 * read +INS.SENSOR2.CH10.COMPPAR1 0.1; # Computation parameter +INS.SENSOR2.CH10.COMPPAR2 0; # Computation parameter +INS.SENSOR2.CH10.SIGNAL "0"; # Signal used +INS.SENSOR2.CH10.SIMVAL "25.0"; # simulation value +INS.SENSOR2.CH10.SIMRAND "0.4"; # Simulated variance +#------------------------------------------------------------------------------- + +#=============================================================================== +# Channel 11: Analog Input - PT103-AM +#------------------------------------------------------------------------------- +INS.SENSOR2.CH11.NAME "Prism Assembly 2"; # Name of the value +INS.SENSOR2.CH11.DESC "NIR Cryostat Prism Assembly 2"; # Description of the value +INS.SENSOR2.CH11.TYPE "ANALOG-IN"; # Channel type +INS.SENSOR2.CH11.AVAIL T; # Available +INS.SENSOR2.CH11.HEADER T; # Write value in FITS header +INS.SENSOR2.CH11.LOG T; # Log value periodically +INS.SENSOR2.CH11.FITS "INS.TEMP211.VAL"; # FITS keyword for value +INS.SENSOR2.CH11.UNIT "C"; # Unit +INS.SENSOR2.CH11.FORMAT "%8.2f"; # Sensor value output format +INS.SENSOR2.CH11.COMPTYPE "LINEAR"; # Value = COMPPAR2 + COMPPAR1 * read +INS.SENSOR2.CH11.COMPPAR1 0.1; # Computation parameter +INS.SENSOR2.CH11.COMPPAR2 0; # Computation parameter +INS.SENSOR2.CH11.SIGNAL "0"; # Signal used +INS.SENSOR2.CH11.SIMVAL "25.0"; # simulation value +INS.SENSOR2.CH11.SIMRAND "0.4"; # Simulated variance +#------------------------------------------------------------------------------- + +#=============================================================================== +# Channel 12: Analog Input - PT103-AM +#------------------------------------------------------------------------------- +INS.SENSOR2.CH12.NAME "Prism Assembly 3"; # Name of the value +INS.SENSOR2.CH12.DESC "NIR Cryostat Prism Assembly 3"; # Description of the value +INS.SENSOR2.CH12.TYPE "ANALOG-IN"; # Channel type +INS.SENSOR2.CH12.AVAIL T; # Available +INS.SENSOR2.CH12.HEADER T; # Write value in FITS header +INS.SENSOR2.CH12.LOG T; # Log value periodically +INS.SENSOR2.CH12.FITS "INS.TEMP212.VAL"; # FITS keyword for value +INS.SENSOR2.CH12.UNIT "C"; # Unit +INS.SENSOR2.CH12.FORMAT "%8.2f"; # Sensor value output format +INS.SENSOR2.CH12.COMPTYPE "LINEAR"; # Value = COMPPAR2 + COMPPAR1 * read +INS.SENSOR2.CH12.COMPPAR1 0.1; # Computation parameter +INS.SENSOR2.CH12.COMPPAR2 0; # Computation parameter +INS.SENSOR2.CH12.SIGNAL "0"; # Signal used +INS.SENSOR2.CH12.SIMVAL "25.0"; # simulation value +INS.SENSOR2.CH12.SIMRAND "0.4"; # Simulated variance +#------------------------------------------------------------------------------- + +#=============================================================================== +# Channel 13: Analog Input - PT103-AM +#------------------------------------------------------------------------------- +INS.SENSOR2.CH13.NAME "Camera 1"; # Name of the value +INS.SENSOR2.CH13.DESC "NIR Cryostat Camera 1"; # Description of the value +INS.SENSOR2.CH13.TYPE "ANALOG-IN"; # Channel type +INS.SENSOR2.CH13.AVAIL T; # Available +INS.SENSOR2.CH13.HEADER T; # Write value in FITS header +INS.SENSOR2.CH13.LOG T; # Log value periodically +INS.SENSOR2.CH13.FITS "INS.TEMP213.VAL"; # FITS keyword for value +INS.SENSOR2.CH13.UNIT "C"; # Unit +INS.SENSOR2.CH13.FORMAT "%8.2f"; # Sensor value output format +INS.SENSOR2.CH13.COMPTYPE "LINEAR"; # Value = COMPPAR2 + COMPPAR1 * read +INS.SENSOR2.CH13.COMPPAR1 0.1; # Computation parameter +INS.SENSOR2.CH13.COMPPAR2 0; # Computation parameter +INS.SENSOR2.CH13.SIGNAL "0"; # Signal used +INS.SENSOR2.CH13.SIMVAL "25.0"; # simulation value +INS.SENSOR2.CH13.SIMRAND "0.4"; # Simulated variance +#------------------------------------------------------------------------------- + +#=============================================================================== +# Channel 14: Analog Input - PT103-AM +#------------------------------------------------------------------------------- +INS.SENSOR2.CH14.NAME "Camera 2"; # Name of the value +INS.SENSOR2.CH14.DESC "NIR Cryostat Camera 2"; # Description of the value +INS.SENSOR2.CH14.TYPE "ANALOG-IN"; # Channel type +INS.SENSOR2.CH14.AVAIL T; # Available +INS.SENSOR2.CH14.HEADER T; # Write value in FITS header +INS.SENSOR2.CH14.LOG T; # Log value periodically +INS.SENSOR2.CH14.FITS "INS.TEMP214.VAL"; # FITS keyword for value +INS.SENSOR2.CH14.UNIT "C"; # Unit +INS.SENSOR2.CH14.FORMAT "%8.2f"; # Sensor value output format +INS.SENSOR2.CH14.COMPTYPE "LINEAR"; # Value = COMPPAR2 + COMPPAR1 * read +INS.SENSOR2.CH14.COMPPAR1 0.1; # Computation parameter +INS.SENSOR2.CH14.COMPPAR2 0; # Computation parameter +INS.SENSOR2.CH14.SIGNAL "0"; # Signal used +INS.SENSOR2.CH14.SIMVAL "25.0"; # simulation value +INS.SENSOR2.CH14.SIMRAND "0.4"; # Simulated variance +#------------------------------------------------------------------------------- + +#=============================================================================== +# Channel 15: Analog Input - PT103-AM +#------------------------------------------------------------------------------- +INS.SENSOR2.CH15.NAME "Thermal Shield 1"; # Name of the value +INS.SENSOR2.CH15.DESC "NIR Cryostat Thermal Shield 1"; # Description of the value +INS.SENSOR2.CH15.TYPE "ANALOG-IN"; # Channel type +INS.SENSOR2.CH15.AVAIL T; # Available +INS.SENSOR2.CH15.HEADER T; # Write value in FITS header +INS.SENSOR2.CH15.LOG T; # Log value periodically +INS.SENSOR2.CH15.FITS "INS.TEMP215.VAL"; # FITS keyword for value +INS.SENSOR2.CH15.UNIT "C"; # Unit +INS.SENSOR2.CH15.FORMAT "%8.2f"; # Sensor value output format +INS.SENSOR2.CH15.COMPTYPE "LINEAR"; # Value = COMPPAR2 + COMPPAR1 * read +INS.SENSOR2.CH15.COMPPAR1 0.1; # Computation parameter +INS.SENSOR2.CH15.COMPPAR2 0; # Computation parameter +INS.SENSOR2.CH15.SIGNAL "0"; # Signal used +INS.SENSOR2.CH15.SIMVAL "25.0"; # simulation value +INS.SENSOR2.CH15.SIMRAND "0.4"; # Simulated variance +#------------------------------------------------------------------------------- + +#=============================================================================== +# Channel 16: Analog Input - PT103-AM +#------------------------------------------------------------------------------- +INS.SENSOR2.CH16.NAME "Thermal Shield 2"; # Name of the value +INS.SENSOR2.CH16.DESC "NIR Cryostat Thermal Shield 2"; # Description of the value +INS.SENSOR2.CH16.TYPE "ANALOG-IN"; # Channel type +INS.SENSOR2.CH16.AVAIL T; # Available +INS.SENSOR2.CH16.HEADER T; # Write value in FITS header +INS.SENSOR2.CH16.LOG T; # Log value periodically +INS.SENSOR2.CH16.FITS "INS.TEMP216.VAL"; # FITS keyword for value +INS.SENSOR2.CH16.UNIT "C"; # Unit +INS.SENSOR2.CH16.FORMAT "%8.2f"; # Sensor value output format +INS.SENSOR2.CH16.COMPTYPE "LINEAR"; # Value = COMPPAR2 + COMPPAR1 * read +INS.SENSOR2.CH16.COMPPAR1 0.1; # Computation parameter +INS.SENSOR2.CH16.COMPPAR2 0; # Computation parameter +INS.SENSOR2.CH16.SIGNAL "0"; # Signal used +INS.SENSOR2.CH16.SIMVAL "25.0"; # simulation value +INS.SENSOR2.CH16.SIMRAND "0.4"; # Simulated variance +#------------------------------------------------------------------------------- + +#=============================================================================== +# Channel 17: Analog Input - PT103-AM +#------------------------------------------------------------------------------- +INS.SENSOR2.CH17.NAME "CCD Head"; # Name of the value +INS.SENSOR2.CH17.DESC "NIR Cryostat CCD Head"; # Description of the value +INS.SENSOR2.CH17.TYPE "ANALOG-IN"; # Channel type +INS.SENSOR2.CH17.AVAIL T; # Available +INS.SENSOR2.CH17.HEADER T; # Write value in FITS header +INS.SENSOR2.CH17.LOG T; # Log value periodically +INS.SENSOR2.CH17.FITS "INS.TEMP217.VAL"; # FITS keyword for value +INS.SENSOR2.CH17.UNIT "C"; # Unit +INS.SENSOR2.CH17.FORMAT "%8.2f"; # Sensor value output format +INS.SENSOR2.CH17.COMPTYPE "LINEAR"; # Value = COMPPAR2 + COMPPAR1 * read +INS.SENSOR2.CH17.COMPPAR1 0.1; # Computation parameter +INS.SENSOR2.CH17.COMPPAR2 0; # Computation parameter +INS.SENSOR2.CH17.SIGNAL "0"; # Signal used +INS.SENSOR2.CH17.SIMVAL "25.0"; # simulation value +INS.SENSOR2.CH17.SIMRAND "0.4"; # Simulated variance +#------------------------------------------------------------------------------- + +#=============================================================================== +# Channel 18: Analog Input - PT103-AM +#------------------------------------------------------------------------------- +INS.SENSOR2.CH18.NAME "Array Preamp"; # Name of the value +INS.SENSOR2.CH18.DESC "NIR Cryostat Array Preamp"; # Description of the value +INS.SENSOR2.CH18.TYPE "ANALOG-IN"; # Channel type +INS.SENSOR2.CH18.AVAIL T; # Available +INS.SENSOR2.CH18.HEADER T; # Write value in FITS header +INS.SENSOR2.CH18.LOG T; # Log value periodically +INS.SENSOR2.CH18.FITS "INS.TEMP218.VAL"; # FITS keyword for value +INS.SENSOR2.CH18.UNIT "C"; # Unit +INS.SENSOR2.CH18.FORMAT "%8.2f"; # Sensor value output format +INS.SENSOR2.CH18.COMPTYPE "LINEAR"; # Value = COMPPAR2 + COMPPAR1 * read +INS.SENSOR2.CH18.COMPPAR1 0.1; # Computation parameter +INS.SENSOR2.CH18.COMPPAR2 0; # Computation parameter +INS.SENSOR2.CH18.SIGNAL "0"; # Signal used +INS.SENSOR2.CH18.SIMVAL "25.0"; # simulation value +INS.SENSOR2.CH18.SIMRAND "0.4"; # Simulated variance +#------------------------------------------------------------------------------- + +#=============================================================================== +# Channel 19: Analog Input - MP821 +#------------------------------------------------------------------------------- +INS.SENSOR2.CH19.NAME "Detector Power"; # Name of the value +INS.SENSOR2.CH19.DESC "NIR Detector Power Sensor"; # Description of the value +INS.SENSOR2.CH19.TYPE "ANALOG-IN"; # Channel type +INS.SENSOR2.CH19.AVAIL T; # Available +INS.SENSOR2.CH19.HEADER T; # Write value in FITS header +INS.SENSOR2.CH19.LOG T; # Log value periodically +INS.SENSOR2.CH19.FITS "INS.TEMP219.VAL"; # FITS keyword for value +INS.SENSOR2.CH19.UNIT "W"; # Unit +INS.SENSOR2.CH19.FORMAT "%8.2f"; # Sensor value output format +INS.SENSOR2.CH19.COMPTYPE "LINEAR"; # Value = COMPPAR2 + COMPPAR1 * read +INS.SENSOR2.CH19.COMPPAR1 0.1; # Computation parameter +INS.SENSOR2.CH19.COMPPAR2 0; # Computation parameter +INS.SENSOR2.CH19.SIGNAL "0"; # Signal used +INS.SENSOR2.CH19.SIMVAL "25.0"; # simulation value +INS.SENSOR2.CH19.SIMRAND "0.4"; # Simulated variance +#------------------------------------------------------------------------------- + +#=============================================================================== +# Channel 20: Analog Input - Not specified +#------------------------------------------------------------------------------- +INS.SENSOR2.CH20.NAME "NIR Compressor"; # Name of the value +INS.SENSOR2.CH20.DESC "NIR Compressor Flux Sensor"; # Description of the value +INS.SENSOR2.CH20.TYPE "ANALOG-IN"; # Channel type +INS.SENSOR2.CH20.AVAIL T; # Available +INS.SENSOR2.CH20.HEADER T; # Write value in FITS header +INS.SENSOR2.CH20.LOG T; # Log value periodically +INS.SENSOR2.CH20.FITS "INS.TEMP220.VAL"; # FITS keyword for value +INS.SENSOR2.CH20.UNIT "l/min"; # Unit +INS.SENSOR2.CH20.FORMAT "%8.2f"; # Sensor value output format +INS.SENSOR2.CH20.COMPTYPE "LINEAR"; # Value = COMPPAR2 + COMPPAR1 * read +INS.SENSOR2.CH20.COMPPAR1 0.1; # Computation parameter +INS.SENSOR2.CH20.COMPPAR2 0; # Computation parameter +INS.SENSOR2.CH20.SIGNAL "0"; # Signal used +INS.SENSOR2.CH20.SIMVAL "25.0"; # simulation value +INS.SENSOR2.CH20.SIMRAND "0.4"; # Simulated variance +#------------------------------------------------------------------------------- + +#=============================================================================== +# Channel 21: Analog Input - MP820 +#------------------------------------------------------------------------------- +INS.SENSOR2.CH21.NAME "Optical Bench Power 1"; # Name of the value +INS.SENSOR2.CH21.DESC "NIR Optical Bench Power 1 Sensor"; # Description of the value +INS.SENSOR2.CH21.TYPE "ANALOG-IN"; # Channel type +INS.SENSOR2.CH21.AVAIL T; # Available +INS.SENSOR2.CH21.HEADER T; # Write value in FITS header +INS.SENSOR2.CH21.LOG T; # Log value periodically +INS.SENSOR2.CH21.FITS "INS.TEMP221.VAL"; # FITS keyword for value +INS.SENSOR2.CH21.UNIT "W"; # Unit +INS.SENSOR2.CH21.FORMAT "%8.2f"; # Sensor value output format +INS.SENSOR2.CH21.COMPTYPE "LINEAR"; # Value = COMPPAR2 + COMPPAR1 * read +INS.SENSOR2.CH21.COMPPAR1 0.1; # Computation parameter +INS.SENSOR2.CH21.COMPPAR2 0; # Computation parameter +INS.SENSOR2.CH21.SIGNAL "0"; # Signal used +INS.SENSOR2.CH21.SIMVAL "25.0"; # simulation value +INS.SENSOR2.CH21.SIMRAND "0.4"; # Simulated variance +#------------------------------------------------------------------------------- + +#=============================================================================== +# Channel 22: Analog Input - MP820 +#------------------------------------------------------------------------------- +INS.SENSOR2.CH22.NAME "Optical Bench Power 2"; # Name of the value +INS.SENSOR2.CH22.DESC "NIR Optical Bench Power 2 Sensor"; # Description of the value +INS.SENSOR2.CH22.TYPE "ANALOG-IN"; # Channel type +INS.SENSOR2.CH22.AVAIL T; # Available +INS.SENSOR2.CH22.HEADER T; # Write value in FITS header +INS.SENSOR2.CH22.LOG T; # Log value periodically +INS.SENSOR2.CH22.FITS "INS.TEMP222.VAL"; # FITS keyword for value +INS.SENSOR2.CH22.UNIT "W"; # Unit +INS.SENSOR2.CH22.FORMAT "%8.2f"; # Sensor value output format +INS.SENSOR2.CH22.COMPTYPE "LINEAR"; # Value = COMPPAR2 + COMPPAR1 * read +INS.SENSOR2.CH22.COMPPAR1 0.1; # Computation parameter +INS.SENSOR2.CH22.COMPPAR2 0; # Computation parameter +INS.SENSOR2.CH22.SIGNAL "0"; # Signal used +INS.SENSOR2.CH22.SIMVAL "25.0"; # simulation value +INS.SENSOR2.CH22.SIMRAND "0.4"; # Simulated variance +#------------------------------------------------------------------------------- + +#=============================================================================== +# Channel 23: Analog Input - MP820 +#------------------------------------------------------------------------------- +INS.SENSOR2.CH23.NAME "Optical Bench Power 3"; # Name of the value +INS.SENSOR2.CH23.DESC "NIR Optical Bench Power 3 Sensor"; # Description of the value +INS.SENSOR2.CH23.TYPE "ANALOG-IN"; # Channel type +INS.SENSOR2.CH23.AVAIL T; # Available +INS.SENSOR2.CH23.HEADER T; # Write value in FITS header +INS.SENSOR2.CH23.LOG T; # Log value periodically +INS.SENSOR2.CH23.FITS "INS.TEMP223.VAL"; # FITS keyword for value +INS.SENSOR2.CH23.UNIT "W"; # Unit +INS.SENSOR2.CH23.FORMAT "%8.2f"; # Sensor value output format +INS.SENSOR2.CH23.COMPTYPE "LINEAR"; # Value = COMPPAR2 + COMPPAR1 * read +INS.SENSOR2.CH23.COMPPAR1 0.1; # Computation parameter +INS.SENSOR2.CH23.COMPPAR2 0; # Computation parameter +INS.SENSOR2.CH23.SIGNAL "0"; # Signal used +INS.SENSOR2.CH23.SIMVAL "25.0"; # simulation value +INS.SENSOR2.CH23.SIMRAND "0.4"; # Simulated variance +#------------------------------------------------------------------------------- + +#=============================================================================== +# Channel 24: Analog Input - MP820 +#------------------------------------------------------------------------------- +INS.SENSOR2.CH24.NAME "Cryopump Power"; # Name of the value +INS.SENSOR2.CH24.DESC "NIR Cryopump Power Sensor"; # Description of the value +INS.SENSOR2.CH24.TYPE "ANALOG-IN"; # Channel type +INS.SENSOR2.CH24.AVAIL T; # Available +INS.SENSOR2.CH24.HEADER T; # Write value in FITS header +INS.SENSOR2.CH24.LOG T; # Log value periodically +INS.SENSOR2.CH24.FITS "INS.TEMP224.VAL"; # FITS keyword for value +INS.SENSOR2.CH24.UNIT "W"; # Unit +INS.SENSOR2.CH24.FORMAT "%8.2f"; # Sensor value output format +INS.SENSOR2.CH24.COMPTYPE "LINEAR"; # Value = COMPPAR2 + COMPPAR1 * read +INS.SENSOR2.CH24.COMPPAR1 0.1; # Computation parameter +INS.SENSOR2.CH24.COMPPAR2 0; # Computation parameter +INS.SENSOR2.CH24.SIGNAL "0"; # Signal used +INS.SENSOR2.CH24.SIMVAL "25.0"; # simulation value +INS.SENSOR2.CH24.SIMRAND "0.4"; # Simulated variance +#------------------------------------------------------------------------------- + + +#=============================================================================== +# Channel 25: Analog Input - MP820 +#------------------------------------------------------------------------------- +INS.SENSOR2.CH25.NAME "Slit Assembly Power"; # Name of the value +INS.SENSOR2.CH25.DESC "NIR Slit Assembly Power Sensor"; # Description of the value +INS.SENSOR2.CH25.TYPE "ANALOG-IN"; # Channel type +INS.SENSOR2.CH25.AVAIL T; # Available +INS.SENSOR2.CH25.HEADER T; # Write value in FITS header +INS.SENSOR2.CH25.LOG T; # Log value periodically +INS.SENSOR2.CH25.FITS "INS.TEMP225.VAL"; # FITS keyword for value +INS.SENSOR2.CH25.UNIT "W"; # Unit +INS.SENSOR2.CH25.FORMAT "%8.2f"; # Sensor value output format +INS.SENSOR2.CH25.COMPTYPE "LINEAR"; # Value = COMPPAR2 + COMPPAR1 * read +INS.SENSOR2.CH25.COMPPAR1 0.1; # Computation parameter +INS.SENSOR2.CH25.COMPPAR2 0; # Computation parameter +INS.SENSOR2.CH25.SIGNAL "0"; # Signal used +INS.SENSOR2.CH25.SIMVAL "25.0"; # simulation value +INS.SENSOR2.CH25.SIMRAND "0.4"; # Simulated variance +#------------------------------------------------------------------------------- + +#=============================================================================== +# Channel 26: Analog Input - MP820 +#------------------------------------------------------------------------------- +INS.SENSOR2.CH26.NAME "Prism Assembly Power"; # Name of the value +INS.SENSOR2.CH26.DESC "NIR Prism Assembly Power Sensor"; # Description of the value +INS.SENSOR2.CH26.TYPE "ANALOG-IN"; # Channel type +INS.SENSOR2.CH26.AVAIL T; # Available +INS.SENSOR2.CH26.HEADER T; # Write value in FITS header +INS.SENSOR2.CH26.LOG T; # Log value periodically +INS.SENSOR2.CH26.FITS "INS.TEMP226.VAL"; # FITS keyword for value +INS.SENSOR2.CH26.UNIT "W"; # Unit +INS.SENSOR2.CH26.FORMAT "%8.2f"; # Sensor value output format +INS.SENSOR2.CH26.COMPTYPE "LINEAR"; # Value = COMPPAR2 + COMPPAR1 * read +INS.SENSOR2.CH26.COMPPAR1 0.1; # Computation parameter +INS.SENSOR2.CH26.COMPPAR2 0; # Computation parameter +INS.SENSOR2.CH26.SIGNAL "0"; # Signal used +INS.SENSOR2.CH26.SIMVAL "25.0"; # simulation value +INS.SENSOR2.CH26.SIMRAND "0.4"; # Simulated variance +#------------------------------------------------------------------------------- + +#=============================================================================== +# Channel 27: Analog Input - MP820 +#------------------------------------------------------------------------------- +INS.SENSOR2.CH27.NAME "Camera Power"; # Name of the value +INS.SENSOR2.CH27.DESC "NIR Camera Power Sensor"; # Description of the value +INS.SENSOR2.CH27.TYPE "ANALOG-IN"; # Channel type +INS.SENSOR2.CH27.AVAIL T; # Available +INS.SENSOR2.CH27.HEADER T; # Write value in FITS header +INS.SENSOR2.CH27.LOG T; # Log value periodically +INS.SENSOR2.CH27.FITS "INS.TEMP227.VAL"; # FITS keyword for value +INS.SENSOR2.CH27.UNIT "W"; # Unit +INS.SENSOR2.CH27.FORMAT "%8.2f"; # Sensor value output format +INS.SENSOR2.CH27.COMPTYPE "LINEAR"; # Value = COMPPAR2 + COMPPAR1 * read +INS.SENSOR2.CH27.COMPPAR1 0.1; # Computation parameter +INS.SENSOR2.CH27.COMPPAR2 0; # Computation parameter +INS.SENSOR2.CH27.SIGNAL "0"; # Signal used +INS.SENSOR2.CH27.SIMVAL "25.0"; # simulation value +INS.SENSOR2.CH27.SIMRAND "0.4"; # Simulated variance +#------------------------------------------------------------------------------- + +#=============================================================================== +# Channel 28: Analog Input - WRG-D NW25 +#------------------------------------------------------------------------------- +INS.SENSOR2.CH28.NAME "NIR Vessel Pressure"; # Name of the value +INS.SENSOR2.CH28.DESC "NIR Vessel Pressure Sensor"; # Description of the value +INS.SENSOR2.CH28.TYPE "ANALOG-IN"; # Channel type +INS.SENSOR2.CH28.AVAIL T; # Available +INS.SENSOR2.CH28.HEADER T; # Write value in FITS header +INS.SENSOR2.CH28.LOG T; # Log value periodically +INS.SENSOR2.CH28.FITS "INS.TEMP228.VAL"; # FITS keyword for value +INS.SENSOR2.CH28.UNIT "mbar"; # Unit +INS.SENSOR2.CH28.FORMAT "%8.2f"; # Sensor value output format +INS.SENSOR2.CH28.COMPTYPE "LINEAR"; # Value = COMPPAR2 + COMPPAR1 * read +INS.SENSOR2.CH28.COMPPAR1 0.1; # Computation parameter +INS.SENSOR2.CH28.COMPPAR2 0; # Computation parameter +INS.SENSOR2.CH28.SIGNAL "0"; # Signal used +INS.SENSOR2.CH28.SIMVAL "25.0"; # simulation value +INS.SENSOR2.CH28.SIMRAND "0.4"; # Simulated variance +#------------------------------------------------------------------------------- + +#=============================================================================== +# Channel 29: Analog Input - 215 124 V01 +#------------------------------------------------------------------------------- +INS.SENSOR2.CH29.NAME "NIR Vessel Status"; # Name of the value +INS.SENSOR2.CH29.DESC "NIR Vessel Status Sensor"; # Description of the value +INS.SENSOR2.CH29.TYPE "ANALOG-IN"; # Channel type +INS.SENSOR2.CH29.AVAIL T; # Available +INS.SENSOR2.CH29.HEADER T; # Write value in FITS header +INS.SENSOR2.CH29.LOG T; # Log value periodically +INS.SENSOR2.CH29.FITS "INS.TEMP229.VAL"; # FITS keyword for value +INS.SENSOR2.CH29.UNIT "uu"; # Unit +INS.SENSOR2.CH29.FORMAT "%8.2f"; # Sensor value output format +INS.SENSOR2.CH29.COMPTYPE "LINEAR"; # Value = COMPPAR2 + COMPPAR1 * read +INS.SENSOR2.CH29.COMPPAR1 0.1; # Computation parameter +INS.SENSOR2.CH29.COMPPAR2 0; # Computation parameter +INS.SENSOR2.CH29.SIGNAL "0"; # Signal used +INS.SENSOR2.CH29.SIMVAL "25.0"; # simulation value +INS.SENSOR2.CH29.SIMRAND "0.4"; # Simulated variance +#------------------------------------------------------------------------------- + + +#******************************************************************************* +# SENSOR3 +# CPTS - Common Path Temperature sensor. PT100 +# +#=============================================================================== +INS.SENSOR3.DEVNAME "cpts"; # Name of the value +INS.SENSOR3.PREFIX "INS.CPTS"; # Description of the value +INS.SENSOR3.DEVDESC "Common Path T Sensor"; # Channel type +INS.SENSOR3.DEVTYPE "ic0fbiDevDrvSensor"; # Available +INS.SENSOR3.LCUID 1; # Write value in FITS header +INS.SENSOR3.SWSIM F; # Log value periodically +INS.SENSOR3.ADDRESS "opc.tcp://192.168.100.3:4840,1"; # FITS keyword for value +INS.SENSOR3.SIMADDR ":ic0fbSim_Sensors"; # Unit +INS.SENSOR3.PERIOD 1000; # Sensor value output format +INS.SENSOR3.MAPPREFIX "MAIN.CPTS."; # Signal used +INS.SENSOR3.MAPFILE "ic0fbiSensor_32Ch_TwinCAT.fbmap"; # simulation value + # Simulated variance +INS.SENSOR3.NUM 1; # Channels to read + +#=============================================================================== +# Channel 1: Analog Input - from NIX CCC flow meter, pressure +#------------------------------------------------------------------------------- +INS.SENSOR3.CH1.NAME "Temperature"; # Name of the value +INS.SENSOR3.CH1.DESC "Common Path Temperature"; # Description of the value +INS.SENSOR3.CH1.TYPE "ANALOG-IN"; # Channel type +INS.SENSOR3.CH1.AVAIL T; # Available +INS.SENSOR3.CH1.HEADER T; # Write value in FITS header +INS.SENSOR3.CH1.LOG T; # Log value periodically +INS.SENSOR3.CH1.FITS "INS.TEMP301.VAL"; # FITS keyword for value +INS.SENSOR3.CH1.UNIT "C"; # Unit +INS.SENSOR3.CH1.FORMAT "%8.2f"; # Sensor value output format +INS.SENSOR3.CH1.COMPTYPE "LINEAR"; # Value = COMPPAR2 + COMPPAR1 * read +INS.SENSOR3.CH1.COMPPAR1 0.1; # Computation parameter +INS.SENSOR3.CH1.COMPPAR2 0; # Computation parameter +INS.SENSOR3.CH1.SIGNAL "0"; # Signal used +INS.SENSOR3.CH1.SIMVAL "25.0"; # simulation value +INS.SENSOR3.CH1.SIMRAND "0.4"; # Simulated variance +#------------------------------------------------------------------------------- + + +#******************************************************************************* +# SENSOR4: monitoring motor devices' datum switch and resolver +# CROT Co-rotator sesors. From NIX nxse2 +# +#=============================================================================== +INS.SENSOR4.DEVNAME "crot"; # Name of the device +INS.SENSOR4.PREFIX "INS.CROT"; +INS.SENSOR4.DEVDESC "Co-rotator sensor"; # Description of the device +INS.SENSOR4.DEVTYPE "ic0fbiDevDrvSensor"; # Device type +INS.SENSOR4.LCUID 1; # DCE ID +INS.SENSOR4.SWSIM F; # Software simulation +INS.SENSOR4.ADDRESS "opc.tcp://192.168.100.3:4840,1"; # Address of device - TO BE CONFIGURED +INS.SENSOR4.SIMADDR ":ic0fbSim_Sensors"; # Simulation address +INS.SENSOR4.PERIOD 1000; # Control Loop period +INS.SENSOR4.MAPPREFIX "MAIN.SENSOR4."; # Prefix for name mapping +INS.SENSOR4.MAPFILE "ic0fbiSensor_32Ch_TwinCAT.fbmap"; # Mapping file DeviceDriver +INS.SENSOR4.MAXBUF 1 +INS.SENSOR4.NUM 2; # channels to read + +#=============================================================================== +# Channel 1: Digital Input - from NIX ApertureWheel limit switch +#------------------------------------------------------------------------------- +INS.SENSOR4.CH1.NAME "CRAC"; # Name of the value; +INS.SENSOR4.CH1.DESC "Co-Rotator is active"; # Description of value +INS.SENSOR4.CH1.TYPE "DIGITAL-IN"; # Channel type +INS.SENSOR4.CH1.AVAIL T; # Available +INS.SENSOR4.CH1.HEADER T; # Write value in FITS header +INS.SENSOR4.CH1.LOG T; # Log value periodically +INS.SENSOR4.CH1.FITS "INS.SENS401.ST"; # FITS keyword for value +INS.SENSOR4.CH1.SIGNALS "0"; # Bits to use in array +INS.SENSOR4.CH1.SIGMAP1 "0=NO"; # Signal mapping +INS.SENSOR4.CH1.SIGMAP2 "1=YES"; # Signal mapping +INS.SENSOR4.CH1.SIMVAL "1"; # Simulated value +#------------------------------------------------------------------------------- + +#=============================================================================== +# Channel 2: Digital Input - from NIX CameraWheel limit switch +#------------------------------------------------------------------------------- +INS.SENSOR4.CH2.NAME "CRNF"; # Name of the value +INS.SENSOR4.CH2.DESC "Co-rotator is no-fault"; # Description of value +INS.SENSOR4.CH2.TYPE "DIGITAL-IN"; # Channel type +INS.SENSOR4.CH2.AVAIL T; # Available +INS.SENSOR4.CH2.HEADER T; # Write value in FITS header +INS.SENSOR4.CH2.LOG T; # Log value periodically +INS.SENSOR4.CH2.FITS "INS.SENS402.ST" ; # FITS keyword for value +INS.SENSOR4.CH2.SIGNALS "1"; # Bits to use in array +INS.SENSOR4.CH2.SIGMAP1 "0=NO"; # Signal mapping +INS.SENSOR4.CH2.SIGMAP2 "1=YES"; # Signal mapping +INS.SENSOR4.CH2.SIMVAL "1"; # Simulated value +#------------------------------------------------------------------------------- + +#=============================================================================== +# Channel 3: Digital Input - from NIX ApertureWheel limit switch +#------------------------------------------------------------------------------- +INS.SENSOR4.CH3.NAME "CRMS"; # Name of the value; +INS.SENSOR4.CH3.DESC "Co-Rotator motor is standstill";# Description of value +INS.SENSOR4.CH3.TYPE "DIGITAL-IN"; # Channel type +INS.SENSOR4.CH3.AVAIL T; # Available +INS.SENSOR4.CH3.HEADER T; # Write value in FITS header +INS.SENSOR4.CH3.LOG T; # Log value periodically +INS.SENSOR4.CH3.FITS "INS.SENS403.ST"; # FITS keyword for value +INS.SENSOR4.CH3.SIGNALS "0"; # Bits to use in array +INS.SENSOR4.CH3.SIGMAP1 "0=NO"; # Signal mapping +INS.SENSOR4.CH3.SIGMAP2 "1=YES"; # Signal mapping +INS.SENSOR4.CH3.SIMVAL "0"; # Simulated value +#------------------------------------------------------------------------------- + +#=============================================================================== +# Channel 4: Digital Input - from NIX CameraWheel limit switch +#------------------------------------------------------------------------------- +INS.SENSOR4.CH4.NAME "CRSW"; # Name of the value +INS.SENSOR4.CH4.DESC "Co-rotator switch is not touched"; # Description of value +INS.SENSOR4.CH4.TYPE "DIGITAL-IN"; # Channel type +INS.SENSOR4.CH4.AVAIL T; # Available +INS.SENSOR4.CH4.HEADER T; # Write value in FITS header +INS.SENSOR4.CH4.LOG T; # Log value periodically +INS.SENSOR4.CH4.FITS "INS.SENS404.ST" ; # FITS keyword for value +INS.SENSOR4.CH4.SIGNALS "1"; # Bits to use in array +INS.SENSOR4.CH4.SIGMAP1 "0=NO"; # Signal mapping +INS.SENSOR4.CH4.SIGMAP2 "1=YES"; # Signal mapping +INS.SENSOR4.CH4.SIMVAL "0"; # Simulated value +#------------------------------------------------------------------------------- + +# # ----------------------------------------------------------------------------- +# # CROT - Co-rotator Input-Output controls +# # ----------------------------------------------------------------------------- + +# INS.IODEV3.DEVNAME "crot"; # Device name +# INS.IODEV3.PREFIX "INS.CROT"; # +# INS.IODEV3.DEVDESC "I/O Power control"; # Device description +# INS.IODEV3.DEVTYPE "ic0fbiDevDrvIoDev"; # Device type +# INS.IODEV3.LCUID 1; # DCE ID +# INS.IODEV3.SWSIM F; # Software simulation +# INS.IODEV3.ADDRESS "opc.tcp://134.171.12.186:4840,4"; # Address of device +# INS.IODEV3.SIMADDR ":ic0fbSim_IoDevs"; # Simulation address of device +# INS.IODEV3.PERIOD 2000; # Control Loop period +# INS.IODEV3.MAPPREFIX "MAIN.CROT." +# INS.IODEV3.MAPFILE "ic0fbiIoDev_32Ch_TwinCAT.fbmap" +# INS.IODEV3.MAXBUF 1 + +# #==================================== +# # Channel 1: Digital Output - CH1 output +# #------------------------------------ +# INS.IODEV3.CH1.NAME "CREN"; # Name of the value +# INS.IODEV3.CH1.DESC "Co-rotator final stage enabled"; # Description of value +# INS.IODEV3.CH1.TYPE "DIGITAL-OUT"; # Sensor type +# INS.IODEV3.CH1.AVAIL T; # Available +# INS.IODEV3.CH1.SIGNALS "0"; # Signal used +# INS.IODEV3.CH1.SIGMAP1 "0=DISABLE"; # Signal mapping +# INS.IODEV3.CH1.SIGMAP2 "1=ENABLE"; # Signal mapping + +# #=================================== +# # Channel 2: Digital Output - CH2 output +# #----------------------------------- +# INS.IODEV3.CH2.NAME "CRFL" # Name of the value +# INS.IODEV3.CH2.DESC "co-rotator fault reset"; # Description of value +# INS.IODEV3.CH2.TYPE "DIGITAL-OUT"; # Sensor type +# INS.IODEV3.CH2.AVAIL T; # Available +# INS.IODEV3.CH2.SIGNALS "1"; # Signal used +# INS.IODEV3.CH2.SIGMAP1 "0=IDLE"; # Signal mapping +# INS.IODEV3.CH2.SIGMAP2 "1=RESET"; # Signal mapping + +# #=================================== +# # Channel 3: Digital Input - CH3 input +# #----------------------------------- +# INS.IODEV3.CH3.NAME "CRAC" # Name of the value +# INS.IODEV3.CH3.DESC "co-rotator is active"; # Description of value +# INS.IODEV3.CH3.TYPE "DIGITAL-IN"; # Sensor type +# INS.IODEV3.CH3.AVAIL T; # Available +# INS.IODEV3.CH3.SIGNALS "2"; # Signal used +# INS.IODEV3.CH3.SIGMAP1 "0=NO"; # Signal mapping +# INS.IODEV3.CH3.SIGMAP2 "1=YES"; # Signal mapping + +# #=================================== +# # Channel 4: Digital Input - CH4 input +# #----------------------------------- +# INS.IODEV3.CH4.NAME "CRNF" # Name of the value +# INS.IODEV3.CH4.DESC "co-rotator is no-fault"; # Description of value +# INS.IODEV3.CH4.TYPE "DIGITAL-IN"; # Sensor type +# INS.IODEV3.CH4.AVAIL T; # Available +# INS.IODEV3.CH4.SIGNALS "3"; # Signal used +# INS.IODEV3.CH4.SIGMAP1 "0=NO"; # Signal mapping +# INS.IODEV3.CH4.SIGMAP2 "1=YES"; # Signal mapping + +# #=================================== +# # Channel 5: Digital Input - CH5 input +# #----------------------------------- +# INS.IODEV3.CH5.NAME "CRMS" # Name of the value +# INS.IODEV3.CH5.DESC "co-rotator motor is standstill"; # Description of value +# INS.IODEV3.CH5.TYPE "DIGITAL-IN"; # Sensor type +# INS.IODEV3.CH5.AVAIL T; # Available +# INS.IODEV3.CH5.SIGNALS "4"; # Signal used +# INS.IODEV3.CH5.SIGMAP1 "0=NO"; # Signal mapping +# INS.IODEV3.CH5.SIGMAP2 "1=YES"; # Signal mapping + +# #=================================== +# # Channel 6: Digital Input - CH6 input +# #----------------------------------- +# INS.IODEV3.CH6.NAME "CRSW" # Name of the value +# INS.IODEV3.CH6.DESC "co-rotator switch is not touched"; # Description of value +# INS.IODEV3.CH6.TYPE "DIGITAL-IN"; # Sensor type +# INS.IODEV3.CH6.AVAIL T; # Available +# INS.IODEV3.CH6.SIGNALS "5"; # Signal used +# INS.IODEV3.CH6.SIGMAP1 "0=NO"; # Signal mapping +# INS.IODEV3.CH6.SIGMAP2 "1=YES"; # Signal mapping + +# #=================================== + + + +OCS.AFC.NCYCLE 2 ; # No. of cycle for AFC correction +OCS.AFC.THRESH 0.1 ; # AFC correction (volts) threshold + +OCS.AFCREF.NIR.NO 1 ; # no. of reference points (x,y) +OCS.AFCREF.NIR.PARX1 512 ; # reference coordinates +OCS.AFCREF.NIR.PARY1 512 ; +OCS.AFCREF.NIR.PAR1 0.0592861 ; +OCS.AFCREF.NIR.PAR2 -0.426003 ; +OCS.AFCREF.NIR.PAR3 0.408392 ; +OCS.AFCREF.NIR.PAR4 0.0119019 ; + +OCS.AFCREF.VIS.NO 1 ; # no. of reference points (x,y) +OCS.AFCREF.VIS.PARX1 1074 ; # reference coordinates +OCS.AFCREF.VIS.PARY1 250 ; +OCS.AFCREF.VIS.PAR1 0.0592861 ; +OCS.AFCREF.VIS.PAR2 -0.426003 ; +OCS.AFCREF.VIS.PAR3 0.408392 ; +OCS.AFCREF.VIS.PAR4 0.0119019 ; + + +#----------------------------------------------------------------------------- +#- ICS Assemblies +#----------------------------------------------------------------------------- + +# INS.MODE - accept any value of INS.MODE and do not forward this key to PLCs +INS.ASSEMBLY1 "INS.MODE"; # Assembly FITS name +INS.ASSEMBLY1.KEY1 "*" +INS.ASSEMBLY1.VAL1 "" + +# LAMPS - controls calibration lamps: +# - OFF (all lamps off) +# - FLAT (only Flat Field lamps on) +# - ARCS (only Spectral calibration lamps on) + +INS.ASSEMBLY2 "INS.LAMPS"; +INS.ASSEMBLY2.HEADER T; + +INS.ASSEMBLY2.KEY1 "OFF"; +INS.ASSEMBLY2.VAL1 "INS.LAMP1.ST F INS.LAMP2.ST F INS.LAMP3.ST F INS.LAMP4.ST F INS.LAMP5.ST F INS.LAMP6.ST F INS.LAMP7.ST F"; + +INS.ASSEMBLY2.KEY2 "FLAT"; +INS.ASSEMBLY2.VAL2 "INS.LAMP1.ST T INS.LAMP2.ST T INS.LAMP3.ST F INS.LAMP4.ST F INS.LAMP5.ST F INS.LAMP6.ST F INS.LAMP7.ST F"; + +INS.ASSEMBLY2.KEY3 "ARCS"; +INS.ASSEMBLY2.VAL3 "INS.LAMP1.ST F INS.LAMP2.ST F INS.LAMP3.ST T INS.LAMP4.ST T INS.LAMP5.ST T INS.LAMP6.ST T INS.LAMP7.ST F"; + +INS.ASSEMBLY2.KEY4 "ON"; +INS.ASSEMBLY2.VAL4 "INS.LAMP1.ST T INS.LAMP2.ST T INS.LAMP3.ST T INS.LAMP4.ST T INS.LAMP5.ST T INS.LAMP6.ST T INS.LAMP7.ST T"; + +# INS.ADC.MODE - Atmospheric Dispersion Corrector positions> +# - STAT (ADC set to a fixed position) +# - AUTO (ADC set for automatic correction) + +INS.ASSEMBLY3 "INS.ADC.MODE" +INS.ASSEMBLY3.KEY1 "OFF" +INS.ASSEMBLY3.VAL1 "INS.ADC1.MODE OFF INS.ADC2.MODE OFF" +INS.ASSEMBLY3.KEY2 "AUTO" +INS.ASSEMBLY3.VAL2 "INS.ADC1.MODE AUTO INS.ADC2.MODE AUTO" + +#----------------------------------------------------------------------------- +#- ICS stand-alone GUI configuration +#----------------------------------------------------------------------------- + +INS.UIF.NBOOKS 2; + +INS.UIF2.TABS 3; + +INS.UIF2.LABEL1 "Imaging and Spectroscopy"; + +INS.OPTI3.UIFNB 2; # ACQS - Slide +INS.OPTI3.UIFTB 1; +INS.OPTI3.UIFCLASS "sxipanNamedPos"; +INS.POS1.UIFNB 2; # AFOC - Focus +INS.POS1.UIFTB 1; + +INS.FILT.UIFNB 2; # ACFW - Filter +INS.FILT.UIFTB 1; +INS.FILT.UIFCLASS "sxipanNamedPos" + +INS.OPTI4.UIFNB 2; # VISE - Slide +INS.OPTI4.UIFTB 1; +INS.OPTI4.UIFCLASS "sxipanNamedPos" + +INS.OPTI1.UIFNB 1; # CUPS +INS.OPTI1.UIFTB 1; +INS.OPTI1.UIFCLASS "sxipanNamedPos" +INS.OPTI2.UIFNB 1; # CALS +INS.OPTI2.UIFTB 1; +INS.OPTI2.UIFCLASS "sxipanNamedPos" + +INS.ADC1.UIFNB 2; # ADC1 +INS.ADC1.UIFTB 1; +INS.ADC2.UIFNB 2; # ADC2 +INS.ADC2.UIFTB 1; + +INS.OPTI1.UIFNB 2; # CUPS +INS.OPTI1.UIFTB 1; +INS.OPTI1.UIFCLASS "sxipanNamedPos"; +INS.OPTI2.UIFNB 2; # CALS +INS.OPTI2.UIFTB 1; +INS.OPTI2.UIFCLASS "sxipanNamedPos"; + +INS.NISE.UIFNB 2; # NISE +INS.NISE.UIFTB 1; +INS.NISE.UIFCLASS "sxipanNISE"; +INS.POS2.UIFNB 2; # NFOC - Focus +INS.POS2.UIFTB 1 + + +INS.UIF2.LABEL2 "NIR Sensors" + +INS.SENSOR2.UIFNB 2; # IRTS +INS.SENSOR2.UIFTB 2; +INS.SENSOR2.UIFWID 8; +INS.SENSOR2.UIFCLASS "icbpanFbSensor"; +INS.SENSOR2.UIFCOL 2; + +INS.UIF2.LABEL3 "Other Sensors"; + +INS.SENSOR1.UIFNB 2; # CVTS +INS.SENSOR1.UIFTB 3; +INS.SENSOR1.UIFWID 8; +INS.SENSOR1.UIFCLASS "icbpanFbSensor"; + +INS.SENSOR3.UIFNB 2; # CPTS +INS.SENSOR3.UIFTB 3; +INS.SENSOR3.UIFWID 8; +INS.SENSOR3.UIFCLASS "icbpanFbSensor"; + +INS.SENSOR4.UIFNB 2; # CROT +INS.SENSOR4.UIFTB 3; +INS.SENSOR4.UIFWID 8; +INS.SENSOR4.UIFCLASS "icbpanFbSensor"; + +INS.UIF1.TABS 1; + +INS.UIF1.LABEL1 "Piezo and Calibration"; + +INS.SHUT.UIFNB 1; # INSH # which notebook +INS.SHUT.UIFTB 1; # which tab +INS.LAMP1.UIFNB 1; # QTH +INS.LAMP1.UIFTB 1; +INS.LAMP2.UIFNB 1; # DEUT +INS.LAMP2.UIFTB 1; +INS.LAMP3.UIFNB 1; # NEON +INS.LAMP3.UIFTB 1; +INS.LAMP4.UIFNB 1; # ARGO +INS.LAMP4.UIFTB 1; +INS.LAMP5.UIFNB 1; # XENO +INS.LAMP5.UIFTB 1; +INS.LAMP6.UIFNB 1; # MERC +INS.LAMP6.UIFTB 1; +INS.LAMP7.UIFNB 1; # THAR +INS.LAMP7.UIFTB 1; +INS.AFC1.UIFCLASS "sxipanAFC"; +INS.AFC1.UIFNB 1; # AFC1 - VIS Piezo +INS.AFC1.UIFTB 1; +INS.AFC2.UIFCLASS "sxipanAFC"; +INS.AFC2.UIFNB 1; # AFC2 - NIR Piezo +INS.AFC2.UIFTB 1; + + +# +# ICS OLDB "scan" feature +# --------------------------- +# Normally the scan goes from LCU to IWS. In this case we do the reverse, +# updating the LCU db with the values from the IWS db. +# This is needed only for the devices which need the telescope values +# See ICS manual Sec.8.16.2 +# The standard scan link updates the values from the TCS env wsxtcs to wsxs +# +# @wsxtcs:Appl_data:TCS: @wsoxs:Appl_data:TCS: @wsxics1:Appl_data:SOXS:IC0FB:DEVICES: +# ------------------------------------------------------------------------------------------------ +# trk:data:position.actPos.dec coord.dec ADC1:DATA.dec +# trk:data:position.actPos.dec coord.dec ADC2:DATA.dec + + +# +INS.SCAN.PERIOD 1 + +# ADC1 - ADC wheel #1 +INS.SCAN1.DBFROM "TCS:coord.ra" +INS.SCAN1.DBTO "@wsxics1ADC1:DATA.ra" +INS.SCAN2.DBFROM "TCS:coord.dec" +INS.SCAN2.DBTO "@wsxics1ADC1:DATA.dec" +INS.SCAN3.DBFROM "@wsxtcsTCS:tcsmon:control:environment.temperature" +INS.SCAN3.DBTO "@wsxics1ADC1:DATA.temperature" +INS.SCAN4.DBFROM "@wsxtcsTCS:tcsmon:control:environment.pressure" +INS.SCAN4.DBTO "@wsxics1ADC1:DATA.pressure" + +# ADC2 - ADC wheel #2 +INS.SCAN5.DBFROM "TCS:coord.ra" +INS.SCAN5.DBTO "@wsxics1ADC2:DATA.ra" +INS.SCAN6.DBFROM "TCS:coord.dec" +INS.SCAN6.DBTO "@wsxics1ADC2:DATA.dec" +INS.SCAN7.DBFROM "@wsxtcsTCS:tcsmon:control:environment.temperature" +INS.SCAN7.DBTO "@wsxics1ADC2:DATA.temperature" +INS.SCAN8.DBFROM "@wsxtcsTCS:tcsmon:control:environment.pressure" +INS.SCAN8.DBTO "@wsxics1ADC2:DATA.pressure" + +# __oOo__ + diff --git a/CONFIG/sxmcfg/config/sxmcfgMODE_GEN.ins b/CONFIG/sxmcfg/config/sxmcfgMODE_GEN.ins new file mode 100644 index 0000000..7e90e8b --- /dev/null +++ b/CONFIG/sxmcfg/config/sxmcfgMODE_GEN.ins @@ -0,0 +1,31 @@ +#****************************************************************************** +# E.S.O. - VLT project +# +# "@(#) $Id: sxmcfgMODE_GEN.ins 246635 2017-07-10 13:02:50Z dricci $" +# +# who when what +# ---------- -------- ---------------------------------------------- +# dricci 2017-07-10 adapted from Template file +# +#************************************************************************ +# +# This file contains the reference setup of SOXS instrument mode. +# + +PAF.HDR.START; # Marks start of header +PAF.TYPE "Instrument Setup"; # Type of parameter file +PAF.ID "$Id: sxmcfgMODE_GEN.ins 246635 2017-07-10 10:51:54 dricci $"; # Parameter file ID +PAF.NAME "sxmcfgMODE_GEN"; # Parameter file NAME +PAF.DESC "Instrument Setup"; +PAF.CRTE.NAME "D. Ricci"; # Who created par. file +PAF.CRTE.DAYTIM "2017-07-10 10:51:54"; # Date and time of creation +PAF.LCHG.NAME "D. Ricci"; # Who did last change +PAF.LCHG.DAYTIM "2017-07-10 10:51:54"; # Date and time of last change +PAF.CHCK.NAME ""; # Appl. checking par. file +PAF.CHCK.DAYTIM ""; # Date and time of last check +PAF.CHCK.CHECKSUM ""; # Parameter file checksum +PAF.HDR.END + +#************************************************************************ + +#INS.ACQS.NAME "Spectroscopy"; # ACQS: Acquisition Camera Slide linear motor diff --git a/CONFIG/sxmcfg/config/sxmcfgMODE_IMG.ins b/CONFIG/sxmcfg/config/sxmcfgMODE_IMG.ins new file mode 100644 index 0000000..0dcf927 --- /dev/null +++ b/CONFIG/sxmcfg/config/sxmcfgMODE_IMG.ins @@ -0,0 +1,31 @@ +#****************************************************************************** +# E.S.O. - VLT project +# +# "@(#) $Id: sxmcfgMODE_IMG.ins 246635 2017-07-10 13:04:01Z dricci $" +# +# who when what +# ---------- -------- ---------------------------------------------- +# dricci 2017-07-10 adapted from Template file +# +#************************************************************************ +# +# This file contains the reference setup of SOXS instrument mode. +# + +PAF.HDR.START; # Marks start of header +PAF.TYPE "Instrument Setup"; # Type of parameter file +PAF.ID "$Id: sxmcfgMODE_IMG.ins 246635 2017-07-10 10:51:54 dricci $"; # Parameter file ID +PAF.NAME "sxmcfgMODE_IMG"; # Parameter file NAME +PAF.DESC "Instrument Setup"; +PAF.CRTE.NAME "D. Ricci"; # Who created par. file +PAF.CRTE.DAYTIM "2017-07-10 10:51:54"; # Date and time of creation +PAF.LCHG.NAME "D. Ricci"; # Who did last change +PAF.LCHG.DAYTIM "2017-07-10 10:51:54"; # Date and time of last change +PAF.CHCK.NAME ""; # Appl. checking par. file +PAF.CHCK.DAYTIM ""; # Date and time of last check +PAF.CHCK.CHECKSUM ""; # Parameter file checksum +PAF.HDR.END + +#************************************************************************ + +INS.ACQS.NAME "Imaging"; # ACQS: Acquisition Camera Slide linear motor diff --git a/CONFIG/sxmcfg/config/sxmcfgMODE_SLT.ins b/CONFIG/sxmcfg/config/sxmcfgMODE_SLT.ins new file mode 100644 index 0000000..2e1fa41 --- /dev/null +++ b/CONFIG/sxmcfg/config/sxmcfgMODE_SLT.ins @@ -0,0 +1,32 @@ +#****************************************************************************** +# E.S.O. - VLT project +# +# "@(#) $Id: sxmcfgMODE_SLT.ins 246635 2017-07-10 10:51:39Z dricci $" +# +# who when what +# ---------- -------- ---------------------------------------------- +# dricci 2018-10-25 Commented INS.ACQS.NAME as slt_Tec_AlignmentFocus changes it. +# dricci 2017-07-10 Adapted from Template file +# +#************************************************************************ +# +# This file contains the reference setup of SOXS instrument mode. +# + +PAF.HDR.START; # Marks start of header +PAF.TYPE "Instrument Setup"; # Type of parameter file +PAF.ID "$Id: sxmcfgMODE_SLT.ins 246635 2017-07-10 10:51:54 dricci $"; # Parameter file ID +PAF.NAME "sxmcfgMODE_SLT"; # Parameter file NAME +PAF.DESC "Instrument Setup"; +PAF.CRTE.NAME "D. Ricci"; # Who created par. file +PAF.CRTE.DAYTIM "2017-07-10 10:51:54"; # Date and time of creation +PAF.LCHG.NAME "D. Ricci"; # Who did last change +PAF.LCHG.DAYTIM "2017-07-10 10:51:54"; # Date and time of last change +PAF.CHCK.NAME ""; # Appl. checking par. file +PAF.CHCK.DAYTIM ""; # Date and time of last check +PAF.CHCK.CHECKSUM ""; # Parameter file checksum +PAF.HDR.END + +#************************************************************************ + +# INS.ACQS.NAME "Spectroscopy"; # ACQS: Acquisition Camera Slide linear motor diff --git a/CONFIG/sxmcfg/config/sxmcfgOS.cfg b/CONFIG/sxmcfg/config/sxmcfgOS.cfg new file mode 100644 index 0000000..c569b14 --- /dev/null +++ b/CONFIG/sxmcfg/config/sxmcfgOS.cfg @@ -0,0 +1,385 @@ +#****************************************************************************** +# E.S.O. - VLT project +# +# "@(#) $Id: sxmcfgOS.cfg 246635 2017-05-25 10:26:15Z dricci $" +# +# who when what +# -------- ---------- ---------------------------------------------- +# bsalasni 2022-05-11 OCS.DET2.CCDLENV set to "wsxccd" +# dricci 2019-04-08 Renamed acq and tech TDCS panels. +# dricci 2018-11-26 Inserted Telescope Model Parameters. +# dricci 2018-07-21 Updated OCS.TEL.ID +# dricci 2018-07-29 Updated OCS.DET3.NAME, OCS.DET4.NAME +# bsalasni 2018-07-27 Updated OCS.DET3.DBIFROOT and OCS.DET4.DBIFROOT +# dricci 2018-07-16 Reamed TDCS to "ACQ", tuned, and added DET4 "TECH" +# dricci 2018-05-28 Changed SOXS_TDCS and SOXS_TDCS_RTD references to TDCS and TDCS_RTD +# dricci 2018-12-15 Added TDCS into OCS.MODE2, previously removed +# dricci 2017-11-10 Added TDCS into OCS.MODE2 and MODE3 +# dricci 2017-10-16 Added TDCS and changed OCS.DET.NUM +# abaruffo 2017-09-15 Renamed instrument modes +# dricci 2017-07-31 Substituted environment name with wsxs +# dricci 2017-05-25 Adapted from Template file +# +# ----------------------------------------------------------------------------- + +PAF.HDR.START; # Marks start of header +PAF.TYPE "Configuration"; # Type of parameter file +PAF.ID "$Id: sxmcfgOS.cfg 246635 2017-07-07 12:59:31 dricci $"; # Parameter file ID +PAF.NAME "sxmcfgOS"; # Parameter file NAME +PAF.DESC "OS configuration file"; +PAF.CRTE.NAME "D. Ricci"; # Who created par. file +PAF.CRTE.DAYTIM "2017-05-25 10:26:15"; # Date and time of creation +PAF.LCHG.NAME "D. Ricci"; # Who did last change +PAF.LCHG.DAYTIM "2017-07-07 12:59:31"; # Date and time of last change +PAF.CHCK.NAME ""; # Appl. checking par. file +PAF.CHCK.DAYTIM ""; # Date and time of last check +PAF.CHCK.CHECKSUM ""; # Parameter file checksum +PAF.HDR.END + + +# ----------------------------------------------------------------------------- +# OS configuration +# ----------------------------------------------------------------------------- +OCS.CON.RELEASE "2017-10-16"; # Release date "yyyy-mm-dd" +OCS.CON.ORIGIN "TEST"; # Origin +OCS.CON.LOGLEVEL 0; + +# ----------------------------------------------------------------------------- +# OS instrument control subsystems +# ----------------------------------------------------------------------------- +OCS.OS.NUM 0; # Number of additional OS's +OCS.INS.NUM 2; # Number of INS's +OCS.DET.NUM 4; # number of detector systems + + +# ----------------------------------------------------------------------------- +# Subsystem: SOXS ICS +# ----------------------------------------------------------------------------- +OCS.INS1.NAME "ICS"; # name, used by INS +OCS.INS1.DICT1 "SOXS_ICS"; # dictionary +#OCS.INS1.DICT2 "ICB_CFG"; # dictionary for ICB_CFG +#OCS.INS1.DICT3 "ICB_REF"; # dictionary for ICB_REF +OCS.INS1.ENVNAME "wsxs"; # local environment +OCS.INS1.PROCNAME "sxiControl"; # process name +OCS.INS1.DBROOT "SOXS:ICS"; # DB root (default) +OCS.INS1.DBIFROOT "sxo:subsystems:ics"; # interface db address (default) +#OCS.INS1.DBSTATE "SOXS:ICS:PROCESSES:WS:icsControl.state"; +OCS.INS1.KEYWFILT "INS.*.*.*.*.*.*"; # keyword filter +OCS.INS1.TIMEOUT 600; # command timeout (seconds) +OCS.INS1.STRTUIF F; + + +INS2.CON.ID "SOXSSG"; +INS2.ID "SOXSG/$Revision$"; +INS2.CON.PREFIX "sx"; +INS2.CON.DEVICE1 SG; +# INS2.CON.DEVNUM 0; + +OCS.INS2.NAME "SG"; # name, used by INS +OCS.INS2.DICT1 "SOXS_CFG"; # dictionary +OCS.INS2.DICT2 "SOXS_OS"; # dictionary for ICB_CFG +OCS.INS2.ENVNAME "wsxs"; # local environment +OCS.INS2.PROCNAME "sxosgControl"; # process name +OCS.INS2.DBROOT "SG"; # DB root (default) +OCS.INS2.DBSTATE "SG:control.state" +OCS.INS2.DBSUBST "SG:control.substate" +OCS.INS2.KEYWFILT "INS2.*.*.*.*.*.*"; # keyword filter +OCS.INS2.TIMEOUT 600; # command timeout (seconds) +OCS.INS2.STRTUIF F; + + + + + +# ----------------------------------------------------------------------------- +# Subsystem: DET1 - NGCIR +# ----------------------------------------------------------------------------- +OCS.DET1.NAME "NGCIR"; +OCS.DET1.DICT1 "NGCCON"; +OCS.DET1.DICT2 "NGCDCS"; +OCS.DET1.ENVNAME "wsxs"; +OCS.DET1.PROCNAME "ngcircon_1"; +OCS.DET1.KEYWFILT "DET1.*.*.*.*.*.*"; +OCS.DET1.TIMEOUT 40; +OCS.DET1.DBROOT "ngcircon_1"; +OCS.DET1.DBIFROOT "sxo:subsystems:ngcir"; +OCS.DET1.TYPE "NGCIR"; +OCS.DET1.CFGSET "SOXS_NGC"; +OCS.DET1.SDMAHOST "wsxdir"; +OCS.DET1.RTDPORT "9001" + +# ----------------------------------------------------------------------------- +# Subsystem: DET2 - NGCOPT +# ----------------------------------------------------------------------------- +OCS.DET2.NAME "NGCOPT"; +OCS.DET2.DICT1 "NGCCON"; +OCS.DET2.DICT2 "NGCDCS"; +OCS.DET2.ENVNAME "wsxs"; +OCS.DET2.PROCNAME "ngcocon_sxccd"; +OCS.DET2.KEYWFILT "DET2.*.*.*.*.*.*"; +OCS.DET2.TIMEOUT 20; +OCS.DET2.DBIFROOT "sxo:subsystems:ngcopt"; +OCS.DET2.DBROOT "sxccd"; +OCS.DET2.DBNEWDT "sxccd:exposure:data.fileName"; +OCS.DET2.TYPE "NGCOPT"; +OCS.DET2.CCDNAME "sxccd"; +OCS.DET2.CFGSET "sxccd"; +OCS.DET2.CCDLENV "wsxccd"; + +# ----------------------------------------------------------------------------- +# Subsystem: DET3 - TDCS instance for acquisition camera +# ----------------------------------------------------------------------------- +OCS.DET3.NAME "TDCS_ACQ"; # name of the detector +OCS.DET3.CFGSET "TDCS_ACQ"; # configuration set +OCS.DET3.TYPE "TDCS"; # type of the detector +OCS.DET3.DICT1 "TDCS"; # dictionary : ESO-VLT-DICT.TDCS +OCS.DET3.DICT2 "SXACQ"; # dictionary : ESO-VLT-DICT.SXACQ +#OCS.DET3.DICT2 "TDCSPUB"; # dictionary : ESO-VLT-DICT.TDCSPUB +OCS.DET3.ENVNAME "wsxs"; # environment where proc. is running +OCS.DET3.TDCSPROC "sxacqControl"; # process name, required by stooDCS_TDCS.tcl +OCS.DET3.PROCNAME "sxacqControl"; # process name as registered in CCS, required by stooDCS_TDCS.tcl +OCS.DET3.SIMPROCNAME "sxacqSimControl"; # simulator process name +OCS.DET3.KEYWFILT "DET3.*.*.*.*.*.*"; # keywords forwarded to subsystem +OCS.DET3.TIMEOUT 60; # timeout for the process (seconds) +OCS.DET3.DBIFROOT "sxo:subsystems:tdcs_acq"; +OCS.DET3.DBROOT "acq"; +OCS.DET3.DBSTATE "acq:control.state"; +OCS.DET3.DBNEWDT "acq:data.proc1Pub2NewFile"; +OCS.DET3.DBEXPSTS "acq:data.expStatus"; +OCS.DET3.CCDNAME "acq"; # sx.cfg, see stooDCS_TDCS.tcl L174 +OCS.DET3.CCDLENV "wsxs"; + +# ----------------------------------------------------------------------------- +# Subsystem: DET4 - TDCS instance for technical camera +# ----------------------------------------------------------------------------- +OCS.DET4.NAME "TDCS_TECH"; # name of the detector +OCS.DET4.CFGSET "TDCS_TECH"; # configuration set +OCS.DET4.TYPE "TDCS"; # type of the detector +OCS.DET4.DICT1 "TDCS"; # dictionary : ESO-VLT-DICT.TDCS +#OCS.DET4.DICT2 "TDCSPUB"; # dictionary : ESO-VLT-DICT.TDCSPUB +OCS.DET4.ENVNAME "wsxs"; # environment where proc. is running +OCS.DET4.TDCSPROC "sxtechControl"; # process name, required by stooDCS_TDCS.tcl +OCS.DET4.PROCNAME "sxtechControl"; # process name as registered in CCS, required by stooDCS_TDCS.tcl +OCS.DET4.SIMPROCNAME "sxtechSimControl"; # simulator process name +OCS.DET4.KEYWFILT "DET4.*.*.*.*.*.*"; # keywords forwarded to subsystem +OCS.DET4.TIMEOUT 60; # timeout for the process (seconds) +OCS.DET4.DBIFROOT "sxo:subsystems:tdcs_tech"; +OCS.DET4.DBROOT "tech"; +OCS.DET4.DBSTATE "tech:control.state"; +OCS.DET4.DBNEWDT "tech:data.proc1Pub2NewFile"; +OCS.DET4.DBEXPSTS "tech:data.expStatus"; +OCS.DET4.CCDNAME "tech"; # sx.cfg, see stooDCS_TDCS.tcl L174 +OCS.DET4.CCDLENV "wsxs"; + +# ----------------------------------------------------------------------------- +# OS telescope control subsystems +# ----------------------------------------------------------------------------- +OCS.TEL.NAME "NTT"; # Telescope name (e.g. 'UT1') +OCS.TEL.FOCUS "NA"; # Telescope focus +OCS.TEL.DICT "TCS"; # dictionary +OCS.TEL.ENVNAME "wsxtcs"; # +OCS.TEL.PROCNAME "tifNA" ; # process name +#OCS.TEL.DBROOT "TCS"; # DB root (default) +#OCS.TEL.DBIFROOT "sxo:subsystems:tcs"; # interface DB root (default) +#OCS.TEL.DBSTATE "TCS:tcsState.tcsState"; # DB address of state (default) +OCS.TEL.KEYWFILT "TEL.*.*.*.*.*.*"; # keyword filter +OCS.TEL.TIMEOUT 600; # timeout in seconds + +OCS.TEL.ID "ESO-NTT"; # value for TELESCOP kw ('ESO-VLT-Ui') + + +# telescope model parameters +# +OCS.TCCD.SCALE 0.1766; # TCCD scale (arcsec/pix) +OCS.TRKWLEN 470; # Telescope Tracking wavelength (nm) +OCS.ROTOFF -13.36; # Rotator initial offset (deg) +OCS.FOCUSADA 5.43; # Telescope Focus (mm) +OCS.VIGNX 90.0; # vignetting area X (arcsec) +OCS.VIGNY 90.0; # vignetting area Y (arcsec) +OCS.POINT.OFFX 0.0; # point off-axis X (arcsec) +OCS.POINT.OFFY 0.0; # point off-axis Y (arcsec) +#OCS.POINT.OFFY -1.18; # point off-axis Y (arcsec) + + +# ----------------------------------------------------------------------------- +# Instrument modes +# ----------------------------------------------------------------------------- + +OCS.MODE1.NAME "SPECTROSCOPY"; # name of the instrmode +OCS.MODE1.SETUP "-file sxmcfgMODE_SLT.ins"; # setup mode +OCS.MODE1.SUBSYST "NGCIR NGCOPT TDCS_ACQ NTT ICS"; # subsystems used in the given mode +OCS.MODE1.PATH ""; # instrument path (EXPSTRT, EXPEND) + +OCS.MODE2.NAME "IMAGING"; # name of the instrmode +OCS.MODE2.SETUP "-file sxmcfgMODE_IMG.ins"; # setup the mode +OCS.MODE2.SUBSYST "NTT ICS TDCS_ACQ"; # subsystems used in the given mode +OCS.MODE2.PATH ""; # instrument path (EXPSTRT, EXPEND) + +OCS.MODE3.NAME "GENERIC"; # name of the instrmode +OCS.MODE3.SETUP "-file sxmcfgMODE_GEN.ins"; # setup the mode +OCS.MODE3.SUBSYST "NGCIR NGCOPT TDCS_ACQ TDCS_TECH NTT ICS"; # subsystems used in the given mode +OCS.MODE3.PATH ""; # instrument path (EXPSTRT, EXPEND) + +OCS.MODE4.NAME "TEST"; # name of the instrmode +OCS.MODE4.SETUP ""; # setup the mode +OCS.MODE4.SUBSYST "NGCIR NGCOPT TDCS_ACQ TDCS_TECH NTT ICS"; # subsystems used in the given mode +OCS.MODE4.PATH ""; # instrument path (EXPSTRT, EXPEND) + +# ----------------------------------------------------------------------------- +# Additional panels +# ----------------------------------------------------------------------------- + +# +# Panel Placement Guidelines +# +# At Paranal, the instrument terminal has two screens (currently size 1280x1024), +# managed as a single display (i.e. total size: 2560x1024). +# The window manager used is CDE. The CDE bar is configured to show 6 workspaces. +# The workspace names are specified in file: sxins/config/sxins-misc-all.xrdb +# +# Every day, the instrument is started with the OSF startup script. +# The Unix session is closed and re-opened to start with a clean screen. +# Apart of starting the instrument control software, the OSF startup script +# should take care of opening all panels that might be reasonably needed +# during night operations. The locations where the panels are opened are +# specified with the START.PANEL.* keywords below (of course, corresponding +# entries to open the panels must also be located in the OSF script). +# +# Operators are used to the arrangement described below. +# We would appreciate to follow it (otherwise it will most probably be changed +# at Paranal, in particular, if the arrangement is completely different). +# +# All panels are usually placed on the left screen, across all 6 workspaces. +# The main RTDs are placed on the right screen, configured to be shown on all +# workspaces. +# The above creates the illusion, that the left screen has 6 workspaces, +# while the right screen has a single workspace, always showing the RTDs, +# regardless of the workspace selected on the left screen. +# +# - bob and the OS control panel are expected to be placed in the first workspace, +# on the left screen; bob on the left side of the screen, the OS control panel +# on the right side of bob. At the bottom of the left screen an xterm is +# expected, showing the contents of the $INS_ROOT/SYSTEM/DETDATA directory. +# This first workspace is called: "BOB". +# - The main RTD(s) are placed on the right screen, shown in all workspaces. +# - If an AO system is present, then place the related panels in workspace 2. +# - One workspace should show the (usually nearly full-screen size) OS_STATUS +# panel. Call this workspace "OS Status". +# - The next workspaces (3 to 5) are usually used for the panels related with +# the sub-systems: ICSs and DCSs. Call the workspace either ICS, DCS or the +# name of the sub-system. +# - One workspace should show the TCS_WATCH panel, at least once the instrument +# is at Paranal, and access to the real TCS is available. +# - The logMonitor is shown nearly covering the complete screen on the last +# workspace of the left screen (workspace 5 or 6 is fine). +# - The alarm panel is shown in the same workspace where the logMonitor is +# located, at the bottom. +# - If a workspace is not needed, then call it "Engineering" +# (usually workspace 5 or 6). +# + +# +# Panel display, workspace and position within the screen: +# +# Panel positions are specified with the START.PANELi.POS keyword. +# The value must have format: "//" +# E.g.: +# current display: = .0 +# 2. workspace: = 2 (6 workspaces are available: 1 to 6) +# tell the panel to place itself at coordinates x=640, y=0: +# if created with the panel editor, use: xcoord=640 ycoord=0 +# otherwise use the usual geometry option: -geometry +640+0 +# +# The complete value for the above is: ".0/2/xcoord=640 ycoord=0" +# + +# If you need to open multiple bobs, then uncomment the next line +# to avoid stopping the already open bob when opening a new one. +#START.BOB.STOP F; + +# bob on first workspace, left side +START.PANEL1.NAME "BOB"; +START.PANEL1.POS ".0/1/"; + +# OS control panel: open in workspace 1, right side +START.PANEL2.NAME "OS_CONTROL"; +START.PANEL2.POS ".0/1/xcoord=640 ycoord=0"; +#START.PANEL2.SLEEP 5; + +# # TCS watch GUI: open in some unused workspace +# START.PANEL3.NAME "TCS_WATCH"; +# START.PANEL3.EXECMD "rsh wt1tcs -l tcs -n DISPLAY=$env(DISPLAY) vltguiWatchTCS xcoord=0 ycoord=330 >/dev/null &"; +# START.PANEL3.DESC "TCS Watch Panel"; +# START.PANEL3.POS ".0/2/"; + +# Instrument status panel: +START.PANEL4.NAME "OS_STATUS"; +START.PANEL4.POS ".0/3/xcoord=0 ycoord=0"; + +# ICS panels: +#START.PANEL5.NAME "SOXS_ICS"; +#START.PANEL5.POS ".0/4/xcoord=0 ycoord=0"; + +# Synoptic panel: open in workspace +START.PANEL6.NAME "SYNOPTIC"; +START.PANEL6.EXECMD "sxopanSynoptic"; +START.PANEL6.DESC "SOXS Synoptic Panel"; +START.PANEL6.POS ".0/5/"; + +# Secondary Guiding +START.PANEL7.NAME "SG"; +START.PANEL7.EXECMD "sxopanGuiding"; +START.PANEL7.DESC "SOXS Secondary Guiding Panel"; + +# Engineering panel: open in Engineering workspace +START.PANEL8.NAME "OS_ENGINEERING"; +START.PANEL8.EXECMD "sxopanEngineering"; +START.PANEL8.DESC "SOXS OS Engineering"; +START.PANEL8.POS ".0/5/"; + +# logMonitor: open in the logMonitor workspace (last workspace) +START.PANEL9.NAME "LOG"; +START.PANEL9.POS ".0/6/-geometry 1268x940+0+0"; + +# alrmDisplay: open in the logMonitor workspace, at the bottom +START.PANEL10.NAME "ALARM"; +START.PANEL10.EXECMD "alrmDisplay"; +START.PANEL10.DESC "Alarm Panel"; +START.PANEL10.POS ".0/6/-geometry +285+670"; + +# xterm showing the DETDATA directory: +# Open it at the end, to jump back to workspace 1 when the OSF startup script +# is executed (regardless of where we were before while opening other panels) +START.PANEL11.NAME "DETDATA_XTERM"; +# place the xterm at y=-50 to not cover the CDE bar located at the bottom of the screen. +START.PANEL11.EXECMD "xterm -ls -sb -vb -sl 2000 -fn 7x13 -g 120x25+0-50 -title DETDATA"; +START.PANEL11.DESC "DETDATA X-Terminal"; +START.PANEL11.DIR "/data/SOXS/INS_ROOT/SYSTEM/DETDATA"; +START.PANEL11.POS ".0/1/"; + +# ACQ panels: +START.PANEL12.NAME "TDCS_ACQ"; +START.PANEL12.EXECMD "sxacqpanPanel"; +START.PANEL12.DESC "ACQ Panel"; +START.PANEL12.POS ".0/4/xcoord=0 ycoord=0"; + +# ACQ panels: +START.PANEL13.NAME "TDCS_ACQ_RTD"; +START.PANEL13.EXECMD "rtdcImageDisplay -camera ACQ -attach 1"; +START.PANEL13.DESC "ACQ RTD Panel"; +START.PANEL13.POS ".0/4/xcoord=0 ycoord=0"; + +# TECH panels: +START.PANEL14.NAME "TDCS_TECH"; +START.PANEL14.EXECMD "sxtechpanPanel"; +START.PANEL14.DESC "TECH Panel"; +START.PANEL14.POS ".0/4/xcoord=0 ycoord=0"; + +# TECH panels: +START.PANEL15.NAME "TDCS_TECH_RTD"; +START.PANEL15.EXECMD "rtdcImageDisplay -camera TECH -attach 1"; +START.PANEL15.DESC "TECH RTD Panel"; +START.PANEL15.POS ".0/4/xcoord=0 ycoord=0"; + +#___oOo___ + diff --git a/CONFIG/sxmcfg/config/sxmcfgRTDB.cfg b/CONFIG/sxmcfg/config/sxmcfgRTDB.cfg new file mode 100644 index 0000000..4f5ab02 --- /dev/null +++ b/CONFIG/sxmcfg/config/sxmcfgRTDB.cfg @@ -0,0 +1,212 @@ +#************************************************************************ +# E.S.O. - VLT project +# +# "@(#) $Id: sxmcfgRTDB.cfg 170230 2008-07-11 16:06:15Z jknudstr $" +# +# who when what +# -------- ---------- ---------------------------------------------- +# jstegmei 2007-08-31 created +# +#************************************************************************ +# NAME +# sxmcfgRTDB.cfg - configuration file for module rtdb +# +# DESCRIPTION +# Configuration file for module rtdb. +# +#------------------------------------------------------------------------ +PAF.HDR.START; # Marks start of header +PAF.TYPE "Config"; # Type of parameter file +PAF.ID "\$Id: sxmcfgRTDB.cfg 170230 2008-07-11 16:06:15Z jknudstr $" # Parameter file ID +PAF.NAME "sxmcfgRTDB"; # Parameter file NAME +PAF.DESC "Config file for NGCDCS RTD application" +PAF.CRTE.NAME "$USER"; # Who created par. file +PAF.CRTE.DAYTIM "31/08/07"; # Date and time of creation +PAF.LCHG.NAME "$USER"; # Who did last change +PAF.LCHG.DAYTIM "[date]"; # Date and time of last change +PAF.CHCK.NAME "sxmcfgRTDB"; # Appl. checking par. file +PAF.CHCK.DAYTIM "[date]"; # Date and time of last check +PAF.CHCK.CHECKSUM "none"; # Parameter file checksum +PAF.HDR.END + +#********************************************** +# Keywords which can be overridden by options +#********************************************** +RTDB.APPNAME "SOXS"; # Name of application (opt. -appname) +RTDB.APPDESC "RTD display for SOXS"; # Short description (opt. -appdesc) +RTDB.APPVERS "1.0"; # Version of application (opt. -appvers) + + +#********************** +# NGCDCS plugin *) +#********************** +RTDB.PLGFILE1 "$INTROOT/lib/libngcrtd.tcl/ngcrtdRtd.tcl"; # plugin file + + +#*************** +# OS plugin *) +#*************** +#RTDB.PLGFILE2 "$INTROOT/lib/libosrtd.tcl/osrtdRtd.tcl"; # plugin file + + +#********************************* +# Keywords for the layout of RTD +#********************************* + +# include the following menu files which must be located in +# $INS_ROOT/$INS_USER/COMMON/CONFIGFILES/ *) + +RTDB.MENUFIL1 "ngcrtdMenu.cfg"; # description for menus to add +RTDB.MENUKEY1 "NGCRTD"; # key used for category + +#RTDB.MENUFIL2 "osrtdMenu.cfg"; # description for menus to add +#RTDB.MENUKEY2 "OSRTD"; # key used for category + + +#******************************************************************* +# Standard menus (compare with standard RTD layout; just run rtd) +# Remove or add menu numbers by changing the RTDB.MENU list +#******************************************************************* + +RTDB.MENU "1 2 3 4" + + # list of menus to display: + # 1 = File menu + # 2 = View menu + # 3 = Graphics menu + # 4 = Real-Time menu + + +#******************************************************************* +# Menu items for "File menu" +# Remove or add menu items by changing the RTDB.MENUITM1 item list +#******************************************************************* + +RTDB.MENUITM1 "1 3 5 6 7 0 10" + # list of menus item to display for menu "File": + # 0 = Separator bar (no action) + # 1 = Open... + # 2 = Reopen + # 3 = Save as... + # 4 = Save region as... + # 5 = Print... + # 6 = Clear + # 7 = Bias image... + # 8 = New Window + # 9 = Close Window + # 10 = Exit (!) + +#******************************************************************* +# Menu items for "View" +# Remove or add menu items by changing the RTDB.MENUITM2 item list +#******************************************************************* + +RTDB.MENUITM2 "1 2 3 4 5 6 7 8 0 9 10" + # list of menus item to display for menu "View": + # 0 = Separator bar (no action) + # 1 = Colors... + # 2 = Cut levels... + # 3 = Cuts... + # 4 = Pick Object... + # 5 = FITS header... + # 6 = WCS info... + # 7 = Pixel tabel... + # 8 = Magnification... + # 9 = Hide Control Panel + # 10 = Hide Popup Windows + + +#******************************************************************* +# Menu items for "Graphics" +# Remove or add menu items by changing the RTDB.MENUITM3 item list +#******************************************************************* + +RTDB.MENUITM3 "1 2 3" + # list of menus item to display for menu "Graphics": + # 0 = Separator bar (no action) + # 1 = Toolbox... + # 2 = Line drawings, Clear and Delete + # 3 = Hide Graphics + +#******************************************************************* +# Menu items for "Real-Time" +# Remove or add menu items by changing the RTDB.MENUITM4 item list +#******************************************************************* + +RTDB.MENUITM4 "1 2 3 0 6 7" + # list of menus item to display for menu "Real-Time": + # 0 = Separator bar (no action) + # 1 = Attach Camera + # 2 = Detach Camera + # 3 = Set Camera... + # 4 = Rapid Frame... + # 5 = Preview Mode + # 6 = Record/Playback Images... + # 7 = Performance.. + + +#**************** +# Control panel +#**************** + +# include the following control files which must be located in +# $INS_ROOT/$INS_USER/COMMON/CONFIGFILES/ *) + +RTDB.CTRLFIL1 "ngcrtdCtrl.cfg"; # description for control widgets to add +RTDB.CTRLKEY1 "NGCRTD"; # key used for category + +#RTDB.CTRLFIL2 "osrtdCtrl.cfg"; # description for control widgets to add +#RTDB.CTRLKEY2 "OSRTD" ; # key used for category + +# Note: add the INDX keys of RTDB.CTRLFILi to RTDB.CTRLWDG below when needed !! + + +# Remove or add control items by changing the RTDB.CTRLWIN item list +RTDB.CTRLWIN "1 2 3" + # list of control windows to display: + # i.e. the control windows on the left side + # 1 = Zoom window + # 2 = Pan window + # 3 = Control window (see RTDB.CTRLWDG) + + +# Remove or add control items by changing the RTDB.CTRLWDG item list +RTDB.CTRLWDG "1 2 3 4 5 6 7 8 9 10 11 21 22 25 26 23 24" +#RTDB.CTRLWDG "1 2 3 4 5 6 7 8 9 10 11" + # list of control widgets to display: + # 1 = Camera status + # 2 = X coordinate + # 3 = Y coordinate + # 4 = Value display + # 5 = Alpha coordinate + # 6 = Delta coordinate + # 7 = Low cut entry + # 8 = High cut entry + # 9 = Auto cut button + # 10 = Scale widget + # 11 = Image transformations + # optionally user defined indices can be added + + +#******************** +# Optional keywords +#******************** + +RTDB.CCSINIT "F"; # Init CCS i.e. use 'seq_ccsInit $RTDB.APPNAME' + # default is "F" + +RTDB.CAMERA "NIR_CAM"; # camera name + # (not used when env. RTD_CAMERA is defined) + +RTDB.ATTACH "T"; # attach to camera (via rtdServer) - default is "F" + +#RTDB.STRTOPT "-rtd_geometry 1280x1024+0+0"; # startup options + +#RTDB.LOADFILE "$HOME/IMAGES/m51.fits"; # file to load after startup + +#RTDB.SERVER "ngcrtdDtt"; # data transfer server name + + +# +# *) remove comment when needed +# diff --git a/CONFIG/sxmcfg/config/sxmcfgSTART.cfg b/CONFIG/sxmcfg/config/sxmcfgSTART.cfg new file mode 100644 index 0000000..a29d1a8 --- /dev/null +++ b/CONFIG/sxmcfg/config/sxmcfgSTART.cfg @@ -0,0 +1,78 @@ +#****************************************************************************** +# E.S.O. - VLT project +# +# "@(#) $Id: sxmcfgSTART.cfg 246635 2017-05-23 16:12:10Z dricci $" +# +#************************************************************************ +# who when what +# -------- ---------- ---------------------------------------------- +# dricci 2018-07-23 Added DET4 +# dricci 2017-05-23 Adapted from Template file. + +# ----------------------------------------------------------------------------- + +PAF.HDR.START; # Marks start of header +PAF.TYPE "Configuration"; # Type of parameter file +PAF.ID "$Id: sxmcfgSTART.cfg 246635 2017-07-07 13:45:45 dricci $"; # Parameter file ID +PAF.NAME "sxmcfgSTART"; # Parameter file NAME +PAF.DESC "Start Configuration"; +PAF.CRTE.NAME "D. Ricci"; # Who created par. file +PAF.CRTE.DAYTIM "2017-07-07 13:45:45"; # Date and time of creation +PAF.LCHG.NAME "D. Ricci"; # Who did last change +PAF.LCHG.DAYTIM "2017-07-07 13:45:45"; # Date and time of last change +PAF.CHCK.NAME ""; # Appl. checking par. file +PAF.CHCK.DAYTIM ""; # Date and time of last check +PAF.CHCK.CHECKSUM ""; # Parameter file checksum +PAF.HDR.END + +INS.CON.OPMODE "NORMAL"; # ICS SOXS operational mode. + +OCS.CON.DEFAULT T; # Start OS application on start-up. +OCS.CON.LOGLEVEL 0; # Default standard log level. + +OCS.DET1.ACCESS "NORMAL"; # Sub-system access mode. +OCS.DET1.DEFAULT T; # Start DCS application on start-up. +OCS.DET1.STRTRTD F; # Start associated RTD on start-up. +OCS.DET1.STRTUIF F; # Start associated stand-alone panel on start-up. +OCS.DET1.SWSIM "LCU_SIM"; # Software simulation. + +OCS.DET2.ACCESS "NORMAL"; # Sub-system access mode. +OCS.DET2.DEFAULT T; # Start DCS application on start-up. +OCS.DET2.STRTRTD F; # Start associated RTD on start-up. +OCS.DET2.STRTUIF F; # Start associated stand-alone panel on start-up. +OCS.DET2.SWSIM "LCU_SIM"; # Software simulation. + +OCS.DET3.ACCESS "NORMAL"; # Sub-system access mode. +OCS.DET3.DEFAULT T; # Start DCS application on start-up. +OCS.DET3.STRTRTD F; # Start associated RTD on start-up. +OCS.DET3.STRTUIF F; # Start associated stand-alone panel on start-up. +OCS.DET3.SWSIM "LCU_SIM"; # Software simulation. + +OCS.DET4.ACCESS "NORMAL"; # Sub-system access mode. +OCS.DET4.DEFAULT T; # Start DCS application on start-up. +OCS.DET4.STRTRTD F; # Start associated RTD on start-up. +OCS.DET4.STRTUIF F; # Start associated stand-alone panel on start-up. +OCS.DET4.SWSIM "LCU_SIM"; # Software simulation. + +OCS.INS1.ACCESS "NORMAL"; # Sub-system access mode. +OCS.INS1.DEFAULT T; # Start ICS application on start-up. +OCS.INS1.STRTUIF F; # Start associated stand-alone panel on start-up. +OCS.INS1.SWSIM "NORMAL"; # Software simulation + +OCS.INS2.ACCESS "NORMAL"; # Sub-system access mode. +OCS.INS2.DEFAULT T; # Start ICS application on start-up. +OCS.INS2.STRTUIF F; # Start associated stand-alone panel on start-up. +OCS.INS2.SWSIM "NORMAL"; # Software simulation + +OCS.TEL.ACCESS "NORMAL"; # Sub-system access mode. +START.ALARM.DEFAULT T; # Start Alarm display. +START.LOGMON.DEFAULT T; # Start log monitor. +START.OSCTRL.DEFAULT T; # Start OS control panel. +START.OSSTAT.DEFAULT F; # Start OS status panel. +START.PANEL1.DEFAULT T; # Panel default flag in sxmcfgOS -> PANEL1. +START.BOB.DEFAULT T; # Start BOB. + + +# ___oOo___ + + diff --git a/CONFIG/sxmcfg/config/sxmcfgSelfTestOS_GEN.ref b/CONFIG/sxmcfg/config/sxmcfgSelfTestOS_GEN.ref new file mode 100644 index 0000000..3e33ac9 --- /dev/null +++ b/CONFIG/sxmcfg/config/sxmcfgSelfTestOS_GEN.ref @@ -0,0 +1,81 @@ +#****************************************************************************** +# E.S.O. - VLT project +# +# "@(#) $Id: sxmcfgSelfTestOS_GEN.ref 246635 2017-07-12 14:53:54Z dricci $" +# +# who when what +# ---------- ---------- ---------------------------------------------- +# dricci 2019-02-04 Substituted PIEZOi with TILTi, and ADC.NAME with MODE. +# dricci 2019-01-14 Added setup for all devices. +# dricci 2017-07-12 Adapted from template. +# + +#************************************************************************ +PAF.HDR.START; # Marks start of header +PAF.TYPE "Instrument Setup"; # Type of parameter file +PAF.ID "$Id: sxmcfgSelfTestOS_GEN.ref 246635 2017-07-12 14:54:21 dricci $"; # Parameter file ID +PAF.NAME "sxmcfgSelfTestOS_GEN"; # Parameter file NAME +PAF.DESC "Instrument Setup"; +PAF.CRTE.NAME "D. Ricci"; # Who created par. file +PAF.CRTE.DAYTIM "2017-07-12 14:54:21"; # Date and time of creation +PAF.LCHG.NAME "D. Ricci"; # Who did last change +PAF.LCHG.DAYTIM "2019-01-14 10:00:00"; # Date and time of last change +PAF.CHCK.NAME ""; # Appl. checking par. file +PAF.CHCK.DAYTIM ""; # Date and time of last check +PAF.CHCK.CHECKSUM ""; # Parameter file checksum +PAF.HDR.END +#************************************************************************ + +INS.MODE "GENERIC"; + +INS.INSH.ST F; + +# CU +INS.CUPS.NAME "Free" +INS.CALS.NAME "Calib" +INS.LAMPS.NAME "OFF"; + +# ACQ +INS.ACQS.NAME "Spectroscopy" +INS.ACFW.NAME "SDSS-u" +INS.AFOC.POS 13.3 + +# VIS +INS.AFC1.MODE "REF" +INS.ADC.MODE "OFF" +INS.VISE.NAME "Slit_view" + +# NIR +INS.AFC2.MODE "REF" +INS.NISE.NAME "Slit_0.5" +INS.NFOC.POS 11.1 + +#___oOo___ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CONFIG/sxmcfg/config/sxmcfgSelfTestOS_IMG.ref b/CONFIG/sxmcfg/config/sxmcfgSelfTestOS_IMG.ref new file mode 100644 index 0000000..2dbe8d5 --- /dev/null +++ b/CONFIG/sxmcfg/config/sxmcfgSelfTestOS_IMG.ref @@ -0,0 +1,54 @@ +#****************************************************************************** +# E.S.O. - VLT project +# +# "@(#) $Id: sxmcfgSelfTestOS_IMG.ref 246635 2017-07-12 14:53:54Z dricci $" +# +# who when what +# ---------- ---------- ---------------------------------------------- +# bsalasni 2022-03-17 TILTi -> AFCi +# dricci 2019-02-04 Substituted PIEZOi with TILTi, and ADC.NAME with MODE. +# dricci 2019-01-14 Added setup for all devices. +# dricci 2017-07-12 Adapted from template. +# + +#************************************************************************ +PAF.HDR.START; # Marks start of header +PAF.TYPE "Instrument Setup"; # Type of parameter file +PAF.ID "$Id: sxmcfgSelfTestOS_IMG.ref 246635 2017-07-12 14:54:21 dricci $"; # Parameter file ID +PAF.NAME "sxmcfgSelfTestOS_IMG"; # Parameter file NAME +PAF.DESC "Instrument Setup"; +PAF.CRTE.NAME "D. Ricci"; # Who created par. file +PAF.CRTE.DAYTIM "2017-07-12 14:54:21"; # Date and time of creation +PAF.LCHG.NAME "D. Ricci"; # Who did last change +PAF.LCHG.DAYTIM "2019-01-14 10:00:00"; # Date and time of last change +PAF.CHCK.NAME ""; # Appl. checking par. file +PAF.CHCK.DAYTIM ""; # Date and time of last check +PAF.CHCK.CHECKSUM ""; # Parameter file checksum +PAF.HDR.END +#************************************************************************ + +INS.MODE "IMAGING"; + +INS.INSH.ST T; + +# CU +INS.CUPS.NAME "Free" +INS.CALS.NAME "Science" +INS.LAMPS.NAME "OFF"; + +# ACQ +INS.ACQS.NAME "Imaging" +INS.ACFW.NAME "SDSS-u" +INS.AFOC.POS 14.5 + +# VIS +INS.AFC1.MODE "REF" +INS.ADC.MODE "OFF" +INS.VISE.NAME "Slit_0.5" + +# NIR +INS.AFC2.MODE "REF" +INS.NISE.NAME "Slit_0.5" +INS.NFOC.POS 12.2 + +#___oOo___ diff --git a/CONFIG/sxmcfg/config/sxmcfgSelfTestOS_SLT.ref b/CONFIG/sxmcfg/config/sxmcfgSelfTestOS_SLT.ref new file mode 100644 index 0000000..dfc2200 --- /dev/null +++ b/CONFIG/sxmcfg/config/sxmcfgSelfTestOS_SLT.ref @@ -0,0 +1,53 @@ +#****************************************************************************** +# E.S.O. - NTT project +# +# "@(#) $Id: sxmcfgSelfTestOS_SLT.ref 246635 2017-07-12 14:53:54Z dricci $" +# +# who when what +# ---------- ---------- ---------------------------------------------- +# dricci 2019-02-04 Substituted PIEZOi with TILTi, and ADC.NAME with MODE. +# dricci 2019-01-14 Added setup for all devices. +# dricci 2017-07-12 Adapted from template. +# + +#************************************************************************ +PAF.HDR.START; # Marks start of header +PAF.TYPE "Instrument Setup"; # Type of parameter file +PAF.ID "$Id: sxmcfgSelfTestOS_SLT.ref 246635 2017-07-12 14:54:21 dricci $"; # Parameter file ID +PAF.NAME "sxmcfgSelfTestOS_SLT"; # Parameter file NAME +PAF.DESC "Instrument Setup"; +PAF.CRTE.NAME "D. Ricci"; # Who created par. file +PAF.CRTE.DAYTIM "2017-07-12 14:54:21"; # Date and time of creation +PAF.LCHG.NAME "D. Ricci"; # Who did last change +PAF.LCHG.DAYTIM "2019-01-14 10:00:00"; # Date and time of last change +PAF.CHCK.NAME ""; # Appl. checking par. file +PAF.CHCK.DAYTIM ""; # Date and time of last check +PAF.CHCK.CHECKSUM ""; # Parameter file checksum +PAF.HDR.END +#************************************************************************ + +INS.MODE "SPECTROSCOPY"; + +INS.INSH.ST T; + +# CU +INS.CUPS.NAME "Free" +INS.CALS.NAME "Science" +INS.LAMPS.NAME "OFF"; + +# ACQ +INS.ACQS.NAME "Spectroscopy" +INS.ACFW.NAME "SDSS-u" +INS.AFOC.POS 11.1 + +# VIS +INS.AFC1.MODE "REF" +INS.ADC.MODE "OFF" +INS.VISE.NAME "Slit_0.5" + +# NIR +INS.AFC2.MODE "REF" +INS.NISE.NAME "Slit_0.5" +INS.NFOC.POS 13.3 + +#___oOo___ diff --git a/CONFIG/sxmcfg/config/sxmcfgTEST.cfg b/CONFIG/sxmcfg/config/sxmcfgTEST.cfg new file mode 100644 index 0000000..dc364cc --- /dev/null +++ b/CONFIG/sxmcfg/config/sxmcfgTEST.cfg @@ -0,0 +1,1261 @@ +#****************************************************************************** +# E.S.O. - NTT project +# +# "@(#) $Id: sxmcfgTEST.cfg 246635 2017-07-12 10:08:37Z dricci $" +# +# who when what +# -------- ---------- ---------------------------------------------- +# dricci 2022-05-12 Avoid INSH test to go directly online. +# bsalasni 2022-03-17 Added AFC1 and AFC2 tests. +# bsalasni 2020-01-17 Updated NISE test. +# dricci 2019-09-20 Renamed OPTI5 (dummy standard device) to NISE (special device). +# dricci 2019-02-04 Implemented DCS tests, corrected fits files removal. +# dricci 2019-01-15 Implemented OS tests. +# dricci 2019-01-10 INS.POS1i.POS do not raise an error if value exceedes. Commented. +# dricci 2018-07-31 Commented IODEV tests. +# dricci 2018-07-29 Updated DET3 and DET4 tests. +# dricci 2018-06-29 Removed FREE filter test and renamed PZT to AFC. +# dricci 2018-05-28 Changed TDCS detId to TDCS. +# dricci 2018-04-11 Added MERC and THAR tests. +# dricci 2018-02-07 Added TDCS tests. +# dricci 2017-07-12 Adapted from Template file. +# + +#****************************************************************************** +PAF.HDR.START; # Start of PAF Header +PAF.TYPE "Configuration"; # Type of PAF +PAF.ID " "; # ID for PAF +PAF.NAME " "; # Name of PAF +PAF.DESC " "; # Short description of PAF +PAF.CRTE.NAME " "; # Name of creator +PAF.CRTE.DAYTIM " "; # Civil Time for creation +PAF.LCHG.NAME " "; # Name of person/appl. changing +PAF.LCHG.DAYTIM " "; # Timestamp of last change +PAF.CHCK.NAME " "; # Name of appl. checking +PAF.HDR.END; # End of PAF Header +# + +#****************************************************************************** +# +# ICS Special device Self-test +# +#****************************************************************************** + + +#****************************************************************************** +# +# ICS Self-test +# +#****************************************************************************** + +# +# Test each device, one by one +# + +#------------------------------------- +# SHUT - INSH +#------------------------------------- +INS.SHUT.PROCNAME "ic0fbDev_INSH" + +INS.SHUT.TESTCMD1 "STANDBY" +INS.SHUT.TESTPAR1 "" +INS.SHUT.TESTCMD2 "ONLINE" +INS.SHUT.TESTPAR2 "" +INS.SHUT.TESTCMD3 "OFF" +INS.SHUT.TESTPAR3 "" +INS.SHUT.TESTCMD4 "STANDBY" +INS.SHUT.TESTPAR4 "" +INS.SHUT.TESTCMD5 "ONLINE" +INS.SHUT.TESTPAR5 "" + +INS.SHUT.TESTCMD6 "STATUS" +INS.SHUT.TESTPAR6 "" + +INS.SHUT.TESTCMD10 "SETUP" +INS.SHUT.TESTPAR10 "-function INS.SHUT.ST F" +INS.SHUT.TESTCMD11 "SETUP" +INS.SHUT.TESTPAR11 "-function INS.SHUT.ST T" + +# check for prefix (one setup) +INS.SHUT.TESTCMD15 "SETUP" +INS.SHUT.TESTPAR15 "-function INS.INSH.ST F" + +INS.SHUT.TESTCMD29 "STANDBY" +INS.SHUT.TESTPAR29 "" + +INS.SHUT.TESTMAX 30; + +#------------------------------------- +# FILT - ACFW +#------------------------------------- +INS.FILT.PROCNAME "ic0fbDev_ACFW" + +INS.FILT.TESTCMD1 "STANDBY" +INS.FILT.TESTPAR1 "" +INS.FILT.TESTCMD2 "ONLINE" +INS.FILT.TESTPAR2 "" +INS.FILT.TESTCMD3 "OFF" +INS.FILT.TESTPAR3 "" +INS.FILT.TESTCMD4 "ONLINE" +INS.FILT.TESTPAR4 "" + +INS.FILT.TESTCMD5 "STATUS" +INS.FILT.TESTPAR5 "" + +INS.FILT.TESTCMD10 "SETUP" +INS.FILT.TESTPAR10 "-function INS.FILT.NAME SDSS-u" + +INS.FILT.TESTCMD11 "SETUP" +INS.FILT.TESTPAR11 "-function INS.FILT.NAME SDSS-g" + +INS.FILT.TESTCMD12 "SETUP" +INS.FILT.TESTPAR12 "-function INS.FILT.NAME SDSS-r" + +INS.FILT.TESTCMD13 "SETUP" +INS.FILT.TESTPAR13 "-function INS.FILT.NAME SDSS-i" + +INS.FILT.TESTCMD14 "SETUP" +INS.FILT.TESTPAR14 "-function INS.FILT.NAME SDSS-z" + +INS.FILT.TESTCMD15 "SETUP" +INS.FILT.TESTPAR15 "-function INS.FILT.NAME VIMOS-Y" + +INS.FILT.TESTCMD16 "SETUP" +INS.FILT.TESTPAR16 "-function INS.FILT.NAME VIMOS-V" + +INS.FILT.TESTCMD17 "SETUP" +INS.FILT.TESTPAR17 "-function INS.FILT.NAME FREE" + +# check for prefix (one setup) +INS.FILT.TESTCMD19 "SETUP" +INS.FILT.TESTPAR19 "-function INS.ACFW.NAME FREE" + +INS.FILT.TESTCMD20 "STANDBY" +INS.FILT.TESTPAR20 "" + +INS.FILT.TESTMAX 30 + +#------------------------------------- +# +# QTH LAMP1 +# +#------------------------------------- + +INS.LAMP1.PROCNAME "ic0fbDev_QTH" + +INS.LAMP1.TESTCMD3 "STANDBY" +INS.LAMP1.TESTPAR3 "" +INS.LAMP1.TESTCMD4 "ONLINE" +INS.LAMP1.TESTPAR4 "" +INS.LAMP1.TESTCMD5 "OFF" +INS.LAMP1.TESTPAR5 "" +INS.LAMP1.TESTCMD9 "ONLINE" +INS.LAMP1.TESTPAR9 "" + +INS.LAMP1.TESTCMD11 "STATUS" +INS.LAMP1.TESTPAR11 "" + +INS.LAMP1.TESTCMD12 "SETUP" +INS.LAMP1.TESTPAR12 "-function INS.LAMP1.ST F" + +INS.LAMP1.TESTCMD14 "SETUP" +INS.LAMP1.TESTPAR14 "-function INS.LAMP1.ST T" + +# check for prefix (one setup) +INS.LAMP1.TESTCMD15 "SETUP" +INS.LAMP1.TESTPAR15 "-function INS.QTH.ST F" + +# Bring it to standby +INS.LAMP1.TESTCMD199 "STANDBY" +INS.LAMP1.TESTPAR199 "" + +INS.LAMP1.TESTMAX 200 + + +#------------------------------------- +# +# DEUT Deuterium LAMP2 +# +#------------------------------------- + +INS.LAMP2.PROCNAME "ic0fbDev_DEUT" + +INS.LAMP2.TESTCMD3 "STANDBY" +INS.LAMP2.TESTPAR3 "" +INS.LAMP2.TESTCMD4 "ONLINE" +INS.LAMP2.TESTPAR4 "" +INS.LAMP2.TESTCMD5 "OFF" +INS.LAMP2.TESTPAR5 "" +INS.LAMP2.TESTCMD9 "ONLINE" +INS.LAMP2.TESTPAR9 "" + +INS.LAMP2.TESTCMD11 "STATUS" +INS.LAMP2.TESTPAR11 "" + +INS.LAMP2.TESTCMD12 "SETUP" +INS.LAMP2.TESTPAR12 "-function INS.LAMP2.ST F" + +INS.LAMP2.TESTCMD14 "SETUP" +INS.LAMP2.TESTPAR14 "-function INS.LAMP2.ST T" + +# check for prefix (one setup) +INS.LAMP2.TESTCMD15 "SETUP" +INS.LAMP2.TESTPAR15 "-function INS.DEUT.ST F" + +# Bring it to standby +INS.LAMP2.TESTCMD199 "STANDBY" +INS.LAMP2.TESTPAR199 "" + +INS.LAMP2.TESTMAX 200 + + +#------------------------------------- +# +# NEON LAMP3 +# +#------------------------------------- + +INS.LAMP3.PROCNAME "ic0fbDev_NEON" + +INS.LAMP3.TESTCMD3 "STANDBY" +INS.LAMP3.TESTPAR3 "" +INS.LAMP3.TESTCMD4 "ONLINE" +INS.LAMP3.TESTPAR4 "" +INS.LAMP3.TESTCMD5 "OFF" +INS.LAMP3.TESTPAR5 "" +INS.LAMP3.TESTCMD9 "ONLINE" +INS.LAMP3.TESTPAR9 "" + +INS.LAMP3.TESTCMD11 "STATUS" +INS.LAMP3.TESTPAR11 "" + +INS.LAMP3.TESTCMD12 "SETUP" +INS.LAMP3.TESTPAR12 "-function INS.LAMP3.ST F" + +INS.LAMP3.TESTCMD14 "SETUP" +INS.LAMP3.TESTPAR14 "-function INS.LAMP3.ST T" + +# check for prefix (one setup) +INS.LAMP3.TESTCMD15 "SETUP" +INS.LAMP3.TESTPAR15 "-function INS.NEON.ST F" + +# Bring it to standby +INS.LAMP3.TESTCMD199 "STANDBY" +INS.LAMP3.TESTPAR199 "" + +INS.LAMP3.TESTMAX 200 + +#------------------------------------- +# +# ARGO Argon Lamp 4 +# +#------------------------------------- + +INS.LAMP4.PROCNAME "ic0fbDev_ARGO" + +INS.LAMP4.TESTCMD3 "STANDBY" +INS.LAMP4.TESTPAR3 "" +INS.LAMP4.TESTCMD4 "ONLINE" +INS.LAMP4.TESTPAR4 "" +INS.LAMP4.TESTCMD5 "OFF" +INS.LAMP4.TESTPAR5 "" +INS.LAMP4.TESTCMD9 "ONLINE" +INS.LAMP4.TESTPAR9 "" + +INS.LAMP4.TESTCMD11 "STATUS" +INS.LAMP4.TESTPAR11 "" + +INS.LAMP4.TESTCMD12 "SETUP" +INS.LAMP4.TESTPAR12 "-function INS.LAMP4.ST F" + +INS.LAMP4.TESTCMD14 "SETUP" +INS.LAMP4.TESTPAR14 "-function INS.LAMP4.ST T" + +# check for prefix (one setup) +INS.LAMP4.TESTCMD15 "SETUP" +INS.LAMP4.TESTPAR15 "-function INS.ARGO.ST F" + +# Bring it to standby +INS.LAMP4.TESTCMD199 "STANDBY" +INS.LAMP4.TESTPAR199 "" + +INS.LAMP4.TESTMAX 200 + +#------------------------------------- +# +# XENO Xenon Lamp 5 +# +#------------------------------------- + +INS.LAMP5.PROCNAME "ic0fbDev_XENO" + +INS.LAMP5.TESTCMD3 "STANDBY" +INS.LAMP5.TESTPAR3 "" +INS.LAMP5.TESTCMD4 "ONLINE" +INS.LAMP5.TESTPAR4 "" +INS.LAMP5.TESTCMD5 "OFF" +INS.LAMP5.TESTPAR5 "" +INS.LAMP5.TESTCMD9 "ONLINE" +INS.LAMP5.TESTPAR9 "" + +INS.LAMP5.TESTCMD11 "STATUS" +INS.LAMP5.TESTPAR11 "" + +INS.LAMP5.TESTCMD12 "SETUP" +INS.LAMP5.TESTPAR12 "-function INS.LAMP5.ST F" + +INS.LAMP5.TESTCMD14 "SETUP" +INS.LAMP5.TESTPAR14 "-function INS.LAMP5.ST T" + +# check for prefix (one setup) +INS.LAMP5.TESTCMD15 "SETUP" +INS.LAMP5.TESTPAR15 "-function INS.XENO.ST F" + +# Bring it to standby +INS.LAMP5.TESTCMD199 "STANDBY" +INS.LAMP5.TESTPAR199 "" + +INS.LAMP5.TESTMAX 200 + +#------------------------------------- +# +# MERC Mercury Lamp 6 +# +#------------------------------------- + +INS.LAMP6.PROCNAME "ic0fbDev_MERC" + +INS.LAMP6.TESTCMD3 "STANDBY" +INS.LAMP6.TESTPAR3 "" +INS.LAMP6.TESTCMD4 "ONLINE" +INS.LAMP6.TESTPAR4 "" +INS.LAMP6.TESTCMD5 "OFF" +INS.LAMP6.TESTPAR5 "" +INS.LAMP6.TESTCMD9 "ONLINE" +INS.LAMP6.TESTPAR9 "" + +INS.LAMP6.TESTCMD11 "STATUS" +INS.LAMP6.TESTPAR11 "" + +INS.LAMP6.TESTCMD12 "SETUP" +INS.LAMP6.TESTPAR12 "-function INS.LAMP6.ST F" + +INS.LAMP6.TESTCMD14 "SETUP" +INS.LAMP6.TESTPAR14 "-function INS.LAMP6.ST T" + +# check for prefix (one setup) +INS.LAMP6.TESTCMD15 "SETUP" +INS.LAMP6.TESTPAR15 "-function INS.MERC.ST F" + +# Bring it to standby +INS.LAMP6.TESTCMD199 "STANDBY" +INS.LAMP6.TESTPAR199 "" + +INS.LAMP6.TESTMAX 200 + +#------------------------------------- +# +# THAR Thorium-Argon Lamp 7 +# +#------------------------------------- + +INS.LAMP7.PROCNAME "ic0fbDev_THAR" + +INS.LAMP7.TESTCMD3 "STANDBY" +INS.LAMP7.TESTPAR3 "" +INS.LAMP7.TESTCMD4 "ONLINE" +INS.LAMP7.TESTPAR4 "" +INS.LAMP7.TESTCMD5 "OFF" +INS.LAMP7.TESTPAR5 "" +INS.LAMP7.TESTCMD9 "ONLINE" +INS.LAMP7.TESTPAR9 "" + +INS.LAMP7.TESTCMD11 "STATUS" +INS.LAMP7.TESTPAR11 "" + +INS.LAMP7.TESTCMD12 "SETUP" +INS.LAMP7.TESTPAR12 "-function INS.LAMP7.ST F" + +INS.LAMP7.TESTCMD14 "SETUP" +INS.LAMP7.TESTPAR14 "-function INS.LAMP7.ST T" + +# check for prefix (one setup) +INS.LAMP7.TESTCMD15 "SETUP" +INS.LAMP7.TESTPAR15 "-function INS.THAR.ST F" + +# Bring it to standby +INS.LAMP7.TESTCMD199 "STANDBY" +INS.LAMP7.TESTPAR199 "" + +INS.LAMP7.TESTMAX 200 + + +#------------------------------------- +# OPTI1 - CUPS - Calibration Unit Pinhole slide +#------------------------------------- +INS.OPTI1.PROCNAME "ic0fbDev_CUPS" + +INS.OPTI1.TESTCMD1 "STANDBY" +INS.OPTI1.TESTPAR1 "" +INS.OPTI1.TESTCMD2 "ONLINE" +INS.OPTI1.TESTPAR2 "" +INS.OPTI1.TESTCMD3 "OFF" +INS.OPTI1.TESTPAR3 "" +INS.OPTI1.TESTCMD4 "ONLINE" +INS.OPTI1.TESTPAR4 "" + +INS.OPTI1.TESTCMD5 "STATUS" +INS.OPTI1.TESTPAR5 "" + +INS.OPTI1.TESTCMD10 "SETUP" +INS.OPTI1.TESTPAR10 "-function INS.OPTI1.NAME Pinhole" + +INS.OPTI1.TESTCMD11 "SETUP" +INS.OPTI1.TESTPAR11 "-function INS.OPTI1.NAME Free" + +# check for prefix (one setup) +INS.OPTI1.TESTCMD12 "SETUP" +INS.OPTI1.TESTPAR12 "-function INS.CUPS.NAME Pinhole" + +INS.OPTI1.TESTCMD20 "STANDBY" +INS.OPTI1.TESTPAR20 "" + +INS.OPTI1.TESTMAX 30 + +#------------------------------------- +# OPTI2 - CALS - Calibration slide +#------------------------------------- +INS.OPTI2.PROCNAME "ic0fbDev_CALS" + +INS.OPTI2.TESTCMD1 "STANDBY" +INS.OPTI2.TESTPAR1 "" +INS.OPTI2.TESTCMD2 "ONLINE" +INS.OPTI2.TESTPAR2 "" +INS.OPTI2.TESTCMD3 "OFF" +INS.OPTI2.TESTPAR3 "" +INS.OPTI2.TESTCMD4 "ONLINE" +INS.OPTI2.TESTPAR4 "" + +INS.OPTI2.TESTCMD5 "STATUS" +INS.OPTI2.TESTPAR5 "" + +INS.OPTI2.TESTCMD10 "SETUP" +INS.OPTI2.TESTPAR10 "-function INS.OPTI2.NAME Science" + +INS.OPTI2.TESTCMD11 "SETUP" +INS.OPTI2.TESTPAR11 "-function INS.OPTI2.NAME Calib" + +# check for prefix (one setup) +INS.OPTI2.TESTCMD12 "SETUP" +INS.OPTI2.TESTPAR12 "-function INS.CALS.NAME Science" + +INS.OPTI2.TESTCMD20 "STANDBY" +INS.OPTI2.TESTPAR20 "" + +INS.OPTI2.TESTMAX 30 + +#------------------------------------- +# OPTI3 - ACQS - Acquisition Camera Slide +#------------------------------------- +INS.OPTI3.PROCNAME "ic0fbDev_ACQS" + +INS.OPTI3.TESTCMD1 "STANDBY" +INS.OPTI3.TESTPAR1 "" +INS.OPTI3.TESTCMD2 "ONLINE" +INS.OPTI3.TESTPAR2 "" +INS.OPTI3.TESTCMD3 "OFF" +INS.OPTI3.TESTPAR3 "" +INS.OPTI3.TESTCMD4 "ONLINE" +INS.OPTI3.TESTPAR4 "" + +INS.OPTI3.TESTCMD5 "STATUS" +INS.OPTI3.TESTPAR5 "" + +INS.OPTI3.TESTCMD10 "SETUP" +INS.OPTI3.TESTPAR10 "-function INS.OPTI3.NAME Imaging" + +INS.OPTI3.TESTCMD11 "SETUP" +INS.OPTI3.TESTPAR11 "-function INS.OPTI3.NAME Spectroscopy" + +INS.OPTI3.TESTCMD12 "SETUP" +INS.OPTI3.TESTPAR12 "-function INS.OPTI3.NAME Pinhole" + +# check for prefix (one setup) +INS.OPTI3.TESTCMD13 "SETUP" +INS.OPTI3.TESTPAR13 "-function INS.ACQS.NAME Imaging" + +INS.OPTI3.TESTCMD20 "STANDBY" +INS.OPTI3.TESTPAR20 "" + +INS.OPTI3.TESTMAX 30 + + +#------------------------------------- +# VISE - VIS Slit Slide exchanger linear motor +#------------------------------------- +INS.OPTI4.PROCNAME "ic0fbDev_VISE" + +INS.OPTI4.TESTCMD1 "STANDBY" +INS.OPTI4.TESTPAR1 "" +INS.OPTI4.TESTCMD2 "ONLINE" +INS.OPTI4.TESTPAR2 "" +INS.OPTI4.TESTCMD3 "OFF" +INS.OPTI4.TESTPAR3 "" +INS.OPTI4.TESTCMD4 "ONLINE" +INS.OPTI4.TESTPAR4 "" + +INS.OPTI4.TESTCMD5 "STATUS" +INS.OPTI4.TESTPAR5 "" + +INS.OPTI4.TESTCMD10 "SETUP" +INS.OPTI4.TESTPAR10 "-function INS.OPTI4.NAME Slit_0.5" + +INS.OPTI4.TESTCMD11 "SETUP" +INS.OPTI4.TESTPAR11 "-function INS.OPTI4.NAME Slit_1.0" + +INS.OPTI4.TESTCMD12 "SETUP" +INS.OPTI4.TESTPAR12 "-function INS.OPTI4.NAME Slit_1.5" + +INS.OPTI4.TESTCMD13 "SETUP" +INS.OPTI4.TESTPAR13 "-function INS.OPTI4.NAME Slit_5.0" + +INS.OPTI4.TESTCMD14 "SETUP" +INS.OPTI4.TESTPAR14 "-function INS.OPTI4.NAME Pinhole" + +INS.OPTI4.TESTCMD15 "SETUP" +INS.OPTI4.TESTPAR15 "-function INS.OPTI4.NAME Slit_view" + +# check for prefix (one setup) +INS.OPTI4.TESTCMD16 "SETUP" +INS.OPTI4.TESTPAR16 "-function INS.VISE.NAME Slit_0.5" + +INS.OPTI4.TESTCMD20 "STANDBY" +INS.OPTI4.TESTPAR20 "" + +INS.OPTI4.TESTMAX 30 + +#------------------------------------- +# NISE - NIR Slit Slide exchanger linear motor +#------------------------------------- +INS.NISE.PROCNAME "ic0fbDev_NISE" + +INS.NISE.TESTCMD1 "STANDBY" +INS.NISE.TESTPAR1 "" +INS.NISE.TESTCMD2 "ONLINE" +INS.NISE.TESTPAR2 "" +INS.NISE.TESTCMD3 "OFF" +INS.NISE.TESTPAR3 "" +INS.NISE.TESTCMD4 "ONLINE" +INS.NISE.TESTPAR4 "" + +INS.NISE.TESTCMD5 "STATUS" +INS.NISE.TESTPAR5 "" + +INS.NISE.TESTCMD10 "SETUP" +INS.NISE.TESTPAR10 "-function INS.NISE.NAME Slit_0.5" + +INS.NISE.TESTCMD11 "SETUP" +INS.NISE.TESTPAR11 "-function INS.NISE.NAME Slit_1.0" + +INS.NISE.TESTCMD12 "SETUP" +INS.NISE.TESTPAR12 "-function INS.NISE.NAME Slit_1.5" + +INS.NISE.TESTCMD13 "SETUP" +INS.NISE.TESTPAR13 "-function INS.NISE.NAME Slit_5.0" + +INS.NISE.TESTCMD14 "SETUP" +INS.NISE.TESTPAR14 "-function INS.NISE.NAME Pinhole" + +INS.NISE.TESTCMD15 "SETUP" +INS.NISE.TESTPAR15 "-function INS.NISE.NAME Multi_Pinhole" + +INS.NISE.TESTCMD16 "SETUP" +INS.NISE.TESTPAR16 "-function INS.NISE.NAME Blank" + +INS.NISE.TESTCMD30 "STANDBY" +INS.NISE.TESTPAR30 "" + +INS.NISE.TESTMAX 30 + +#------------------------------------- +# AFC1 - Active flexure compensator +#------------------------------------- +INS.AFC1.PROCNAME "ic0fbDev_AFC1" + +INS.AFC1.TESTCMD1 "STANDBY" +INS.AFC1.TESTPAR1 "" + +INS.AFC1.TESTCMD2 "ONLINE" +INS.AFC1.TESTPAR2 "" + +INS.AFC1.TESTCMD3 "OFF" +INS.AFC1.TESTPAR3 "" + +INS.AFC1.TESTCMD4 "ONLINE" +INS.AFC1.TESTPAR4 "" + +INS.AFC1.TESTCMD5 "STATUS" +INS.AFC1.TESTPAR5 "" + +INS.AFC1.TESTCMD10 "SETUP" +INS.AFC1.TESTPAR10 "-function INS.AFC1.MODE REF" + +INS.AFC1.TESTCMD11 "SETUP" +INS.AFC1.TESTPAR11 "-function INS.AFC1.MODE AUTO" + +INS.AFC1.TESTPAR12 "sleep 5" + +INS.AFC1.TESTCMD13 "SETUP" +INS.AFC1.TESTPAR13 "-function INS.AFC1.MODE STAT INS.AFC1.POS1 11.11 INS.AFC1.POS2 22.22" + +INS.AFC1.TESTCMD14 "SETUP" +INS.AFC1.TESTPAR14 "-function INS.AFC1.MODE STAT INS.AFC1.POS1 33.33 INS.AFC1.POS2 44.44" + +INS.AFC1.TESTCMD15 "SETUP" +INS.AFC1.TESTPAR15 "-function INS.AFC1.MODE STAT INS.AFC1.POS1 55.55 INS.AFC1.POS2 66.66" + +INS.AFC1.TESTCMD16 "SETUP" +INS.AFC1.TESTPAR16 "-function INS.AFC1.MODE STAT INS.AFC1.POS1 0.0 INS.AFC1.POS2 0.0" + +INS.AFC1.TESTCMD30 "STANDBY" +INS.AFC1.TESTPAR30 "" + +INS.AFC1.TESTMAX 30 + + +#------------------------------------- +# AFC2 - Active flexure compensator +#------------------------------------- +INS.AFC2.PROCNAME "ic0fbDev_AFC2" + +INS.AFC2.TESTCMD1 "STANDBY" +INS.AFC2.TESTPAR1 "" + +INS.AFC2.TESTCMD2 "ONLINE" +INS.AFC2.TESTPAR2 "" + +INS.AFC2.TESTCMD3 "OFF" +INS.AFC2.TESTPAR3 "" + +INS.AFC2.TESTCMD4 "ONLINE" +INS.AFC2.TESTPAR4 "" + +INS.AFC2.TESTCMD5 "STATUS" +INS.AFC2.TESTPAR5 "" + +INS.AFC2.TESTCMD10 "SETUP" +INS.AFC2.TESTPAR10 "-function INS.AFC2.MODE REF" + +INS.AFC2.TESTCMD11 "SETUP" +INS.AFC2.TESTPAR11 "-function INS.AFC2.MODE AUTO" + +INS.AFC2.TESTPAR12 "sleep 5" + +INS.AFC2.TESTCMD13 "SETUP" +INS.AFC2.TESTPAR13 "-function INS.AFC2.MODE STAT INS.AFC2.POS1 11.11 INS.AFC2.POS2 22.22" + +INS.AFC2.TESTCMD14 "SETUP" +INS.AFC2.TESTPAR14 "-function INS.AFC2.MODE STAT INS.AFC2.POS1 33.33 INS.AFC2.POS2 44.44" + +INS.AFC2.TESTCMD15 "SETUP" +INS.AFC2.TESTPAR15 "-function INS.AFC2.MODE STAT INS.AFC2.POS1 55.55 INS.AFC2.POS2 66.66" + +INS.AFC2.TESTCMD16 "SETUP" +INS.AFC2.TESTPAR16 "-function INS.AFC2.MODE STAT INS.AFC2.POS1 0.0 INS.AFC2.POS2 0.0" + +INS.AFC2.TESTCMD30 "STANDBY" +INS.AFC2.TESTPAR30 "" + +INS.AFC2.TESTMAX 30 + + +#------------------------------------- +# POS1 - AFOC +#------------------------------------- +INS.POS1.PROCNAME "ic0fbDev_AFOC" +INS.POS1.TESTCMD1 "STANDBY" +INS.POS1.TESTPAR1 "" +INS.POS1.TESTCMD2 "ONLINE" +INS.POS1.TESTPAR2 "" +INS.POS1.TESTCMD3 "OFF" +INS.POS1.TESTPAR3 "" +INS.POS1.TESTCMD4 "ONLINE" +INS.POS1.TESTPAR4 "" +INS.POS1.TESTCMD5 "STATUS" +INS.POS1.TESTPAR5 "" + +INS.POS1.TESTCMD10 "SETUP" +INS.POS1.TESTPAR10 "-function INS.POS1.POS 12.345" + +# check for prefix (one setup) +INS.POS1.TESTCMD12 "SETUP" +INS.POS1.TESTPAR12 "-function INS.AFOC.POS 1.234" + +INS.POS1.TESTCMD29 "STANDBY" +INS.POS1.TESTPAR29 "" +INS.POS1.TESTMAX 30; + +#------------------------------------- +# POS2 - NFOC +#------------------------------------- +INS.POS2.PROCNAME "ic0fbDev_NFOC" +INS.POS2.TESTCMD1 "STANDBY" +INS.POS2.TESTPAR1 "" +INS.POS2.TESTCMD2 "ONLINE" +INS.POS2.TESTPAR2 "" +INS.POS2.TESTCMD3 "OFF" +INS.POS2.TESTPAR3 "" +INS.POS2.TESTCMD4 "ONLINE" +INS.POS2.TESTPAR4 "" +INS.POS2.TESTCMD5 "STATUS" +INS.POS2.TESTPAR5 "" + +INS.POS2.TESTCMD10 "SETUP" +INS.POS2.TESTPAR10 "-function INS.POS2.POS 12.345" + +# check for prefix (one setup) +INS.POS2.TESTCMD12 "SETUP" +INS.POS2.TESTPAR12 "-function INS.NFOC.POS 1.234" + +INS.POS2.TESTCMD29 "STANDBY" +INS.POS2.TESTPAR29 "" +INS.POS2.TESTMAX 30; + +#------------------------------------- +# ADC1 - ADC1 +#------------------------------------- +INS.ADC1.PROCNAME "ic0fbDev_ADC1" +INS.ADC1.TESTCMD1 "STANDBY" +INS.ADC1.TESTPAR1 "" +INS.ADC1.TESTCMD2 "ONLINE" +INS.ADC1.TESTPAR2 "" +INS.ADC1.TESTCMD3 "OFF" +INS.ADC1.TESTPAR3 "" +INS.ADC1.TESTCMD4 "ONLINE" +INS.ADC1.TESTPAR4 "" +INS.ADC1.TESTCMD5 "STATUS" +INS.ADC1.TESTPAR5 "" + +INS.ADC1.TESTCMD10 "SETUP" +INS.ADC1.TESTPAR10 "-function INS.ADC1.MODE AUTO" +INS.ADC1.TESTCMD11 "SETUP" +INS.ADC1.TESTPAR11 "-function INS.ADC1.MODE OFF INS.ADC1.POSANG 12.345" +# no prefix is defined for ADC1 because it is already ADC1... + +INS.ADC1.TESTCMD29 "STANDBY" +INS.ADC1.TESTPAR29 "" +INS.ADC1.TESTMAX 30; + +#------------------------------------- +# ADC2 - ADC2 +#------------------------------------- +INS.ADC2.PROCNAME "ic0fbDev_ADC2" +INS.ADC2.TESTCMD1 "STANDBY" +INS.ADC2.TESTPAR1 "" +INS.ADC2.TESTCMD2 "ONLINE" +INS.ADC2.TESTPAR2 "" +INS.ADC2.TESTCMD3 "OFF" +INS.ADC2.TESTPAR3 "" +INS.ADC2.TESTCMD4 "ONLINE" +INS.ADC2.TESTPAR4 "" +INS.ADC2.TESTCMD5 "STATUS" +INS.ADC2.TESTPAR5 "" + +INS.ADC2.TESTCMD10 "SETUP" +INS.ADC2.TESTPAR10 "-function INS.ADC2.MODE AUTO" +INS.ADC2.TESTCMD11 "SETUP" +INS.ADC2.TESTPAR11 "-function INS.ADC2.MODE OFF INS.ADC2.POSANG 12.345" + +# no prefix is defined for ADC2 because it is already ADC2... + +INS.ADC2.TESTCMD29 "STANDBY" +INS.ADC2.TESTPAR29 "" +INS.ADC2.TESTMAX 30; + + +#------------------------------------- +# Test the entire ICS +#------------------------------------- + +# Remove old files +OCS.INS1.TESTPAR1 "sh -c \"rm -f $INS_ROOT/SYSTEM/DETDATA/sxSelfTestIcs_*.fits\"" + +# State change +OCS.INS1.TESTCMD3 "STANDBY" +OCS.INS1.TESTCMD4 "ONLINE" +OCS.INS1.TESTCMD5 "OFF" +OCS.INS1.TESTCMD6 "STANDBY" +OCS.INS1.TESTCMD7 "ONLINE" + +# Instrument modes +OCS.INS1.TESTCMD10 "SETUP" +OCS.INS1.TESTPAR10 "-function INS.MODE SLT" +OCS.INS1.TESTCMD11 "SETUP" +OCS.INS1.TESTPAR11 "-function INS.MODE IMG" +OCS.INS1.TESTCMD12 "SETUP" +OCS.INS1.TESTPAR12 "-function INS.MODE GEN" +OCS.INS1.TESTCMD13 "SETUP" + +# EXPSTRT/EXPEND +OCS.INS1.TESTCMD20 "EXPSTRT" +OCS.INS1.TESTPAR20 "" +OCS.INS1.TESTCMD21 "EXPEND" +OCS.INS1.TESTPAR21 "" + +# Status -header (output file = $INS_ROOT/SYSTEM/DETDATA/sxSelfTestIcs_1.out) +OCS.INS1.TESTCMD22 "STATUS" +OCS.INS1.TESTPAR22 "-header -dumpFits sxSelfTestIcs_1.out" + +# Error conditions + +OCS.INS1.TESTCMD30 "SETUP" +OCS.INS1.TESTPAR30 "-function INS.FILT.NAME pippo_test_error" +OCS.INS1.TESTERR30 T + +OCS.INS1.TESTCMD31 "SETUP" +OCS.INS1.TESTPAR31 "-function INS.OPTI1.NAME pippo_test_error" +OCS.INS1.TESTERR31 T + +OCS.INS1.TESTCMD32 "SETUP" +OCS.INS1.TESTPAR32 "-function INS.OPTI2.NAME pippo_test_error" +OCS.INS1.TESTERR32 T + +OCS.INS1.TESTCMD33 "SETUP" +OCS.INS1.TESTPAR33 "-function INS.OPTI3.NAME pippo_test_error" +OCS.INS1.TESTERR33 T + +OCS.INS1.TESTCMD34 "SETUP" +OCS.INS1.TESTPAR34 "-function INS.OPTI4.NAME pippo_test_error" +OCS.INS1.TESTERR34 T + +OCS.INS1.TESTCMD35 "SETUP" +OCS.INS1.TESTPAR35 "-function INS.NISE.NAME pippo_test_error" +OCS.INS1.TESTERR35 T + +OCS.INS1.TESTCMD36 "SETUP" +OCS.INS1.TESTPAR36 "-function INS.NISE.POS -5.9" +OCS.INS1.TESTERR36 T + +OCS.INS1.TESTCMD37 "SETUP" +OCS.INS1.TESTPAR37 "-function INS.NISE.POS 5.9" +OCS.INS1.TESTERR37 T + +# +# TO BE CLARIFIED: THESE SHOULD RISE AN ERROR BUT THEY DO NOT +# + +# OCS.INS1.TESTCMD36 "SETUP" +# OCS.INS1.TESTPAR36 "-function INS.POS1.POS 234.5" +# OCS.INS1.TESTERR36 T + +# OCS.INS1.TESTCMD41 "SETUP" +# OCS.INS1.TESTPAR41 "-function INS.POS2.POS 234.5" +# OCS.INS1.TESTERR41 T + +OCS.INS1.TESTMAX 50; + +#****************************************************************************** +# +# DCS Self-test +# +# This test exercises: +# - the proper startup/shutdown +# - state change +# -execution of the main operations when online: +# one single exposure, for all implemented read-out modes; +# verify if FITS files are properly saved in $INS_ROOT/SYSTEM/DETDATA. +#****************************************************************************** +# Remove old files + + +#****************************************************************************** +# DET1 - NGCIR +#****************************************************************************** + +OCS.DET1.TESTPAR1 "sh -c \"rm -f $INS_ROOT/SYSTEM/DETDATA/sxSelfTestNgcIR_*\"" + +# Wait for panel to be up +OCS.DET1.TESTPAR2 "sleep 5" + +# Exercise change state +OCS.DET1.TESTCMD3 "STANDBY" +OCS.DET1.TESTCMD4 "ONLINE" +OCS.DET1.TESTCMD5 "OFF" +OCS.DET1.TESTCMD6 "STANDBY" +OCS.DET1.TESTCMD7 "ONLINE" + +# read-out mode Uncor +OCS.DET1.TESTCMD8 "SETUP" +OCS.DET1.TESTPAR8 "-function DET.READ.CURNAME Uncor DET.NDIT 1 DET.FRAM.FILENAME sxSelfTestNgcIR_1" +OCS.DET1.TESTCMD11 "START" +OCS.DET1.TESTPAR12 "sleep 3" +OCS.DET1.TESTCMD13 "ABORT" +OCS.DET1.TESTCMD14 "WAIT" +OCS.DET1.TESTCMD15 "START" +OCS.DET1.TESTCMD16 "WAIT" + +# read-out mode Double +OCS.DET1.TESTCMD20 "SETUP" +OCS.DET1.TESTPAR20 "-function DET.READ.CURNAME Double DET.NDIT 1 DET.FRAM.FILENAME sxSelfTestNgcIR_2" +OCS.DET1.TESTCMD21 "START" +OCS.DET1.TESTPAR22 "sleep 3" +OCS.DET1.TESTCMD23 "ABORT" +OCS.DET1.TESTCMD24 "WAIT" +OCS.DET1.TESTCMD25 "START" +OCS.DET1.TESTCMD26 "WAIT" + +# check error +OCS.DET1.TESTCMD100 "SETUP" +OCS.DET1.TESTPAR100 "-function DET.READ.CURNAME expected_error" +OCS.DET1.TESTERR100 T + +# restore a standard setup +OCS.DET1.TESTCMD101 "SETUP" +OCS.DET1.TESTPAR101 "-function DET.READ.CURNAME Uncor DET.NDIT 1" + +# Bring NGC to standby at the end +OCS.DET1.TESTCMD150 "STANDBY" + +# Dump contents of FITS file produced +OCS.DET1.TESTPAR160 "oslxCatFits sxSelfTestNgcIR_1.fits | grep -v CLDC" +OCS.DET1.TESTPAR161 "sleep 10" + +OCS.DET1.TESTPAR163 "oslxCatFits sxSelfTestNgcIR_2.fits | grep -v CLDC" +OCS.DET1.TESTPAR164 "sleep 10" + +OCS.DET1.TESTMAX 200 + + +#****************************************************************************** +# DET2 - NGCOPT +#****************************************************************************** + +OCS.DET2.TESTPAR1 "sh -c \"rm -f $INS_ROOT/SYSTEM/DETDATA/sxSelfTestNgcOPT_*\"" + +# Wait for panel to be up +OCS.DET2.TESTPAR2 "sleep 5" + +# Exercise change state +OCS.DET2.TESTCMD3 "STANDBY" +OCS.DET2.TESTCMD4 "ONLINE" +OCS.DET2.TESTCMD5 "OFF" +OCS.DET2.TESTCMD6 "STANDBY" +OCS.DET2.TESTCMD7 "ONLINE" + +# read-out mode 1, Normal, NDIT=4, DIT=1 +OCS.DET2.TESTCMD8 "SETUP" +OCS.DET2.TESTPAR8 "-function DET.MODE.CURID 1 DET.EXP.TYPE Normal DET.READ.NFRAM 4 DET.UIT1 1.0 DET.FRAM.FILENAME sxSelfTestNgcOPT_1" +OCS.DET2.TESTCMD11 "START" +OCS.DET2.TESTPAR13 "sleep 3" +OCS.DET2.TESTCMD16 "WAIT" + +# read-out mode 2, Dark, NDIT=1, DIT=1.5 +OCS.DET2.TESTCMD20 "SETUP" +OCS.DET2.TESTPAR20 "-function DET.MODE.CURID 2 DET.EXP.TYPE Dark DET.READ.NFRAM 1 DET.UIT1 1.5 DET.FRAM.FILENAME sxSelfTestNgcOPT_2" +OCS.DET2.TESTCMD21 "START" +OCS.DET2.TESTPAR23 "sleep 3" +OCS.DET2.TESTCMD26 "WAIT" + +# check error +OCS.DET2.TESTCMD100 "SETUP" +OCS.DET2.TESTPAR100 "-function DET.MODE.CURID 123456" +OCS.DET2.TESTERR100 T + +# restore a standard setup +OCS.DET2.TESTCMD101 "SETUP" +OCS.DET2.TESTPAR101 "-function DET.MODE.CURID 1 DET.EXP.TYPE Normal DET.READ.NFRAM 4 DET.UIT1 1.0 DET.FRAM.FILENAME sxSelfTestNgcOPT_3" + +# Bring NGC to standby at the end +OCS.DET2.TESTCMD150 "STANDBY" + +# Dump contents of FITS file produced +OCS.DET2.TESTPAR160 "oslxCatFits sxSelfTestNgcOPT_1.fits | grep -v CLDC" +OCS.DET2.TESTPAR161 "sleep 10" + +OCS.DET2.TESTPAR163 "oslxCatFits sxSelfTestNgcOPT_2.fits | grep -v CLDC" +OCS.DET2.TESTPAR164 "sleep 10" + +OCS.DET2.TESTMAX 200 + + +#****************************************************************************** +# DET3 - TDCS instance for ACQ +#****************************************************************************** +OCS.DET3.TESTPAR1 "sh -c \"rm -f $INS_ROOT/SYSTEM/DETDATA/sxSelfTestAcq_*\"" + +# Exercise change state +OCS.DET3.TESTCMD2 "STANDBY" +OCS.DET3.TESTCMD3 "ONLINE" +OCS.DET3.TESTCMD4 "OFF" +OCS.DET3.TESTCMD5 "STANDBY" +OCS.DET3.TESTCMD6 "ONLINE" + +# +OCS.DET3.TESTCMD10 "SETUP" +OCS.DET3.TESTPAR10 "-function DET3.EXPO.MODE SINGLE DET3.EXPO.TIME 1 DET3.EXPO.NREP 1 DET3.EXPO.WIN.BINX 1 DET3.EXPO.WIN.BINY 1 DET3.EXPO.WIN.NX 113 DET3.EXPO.WIN.NY 113 DET3.EXPO.WIN.STARTX 1 DET3.EXPO.WIN.STARTY 1 DET3.EXPO.WIN.STARTX 1 DET3.PROC1.PUB2.FILENAME sxSelfTestAcq_" + +OCS.DET3.TESTCMD11 "PUBLISH" +OCS.DET3.TESTPAR12 "sleep 5" + +OCS.DET3.TESTCMD13 "START" + +# Dump contents of FITS file produced +OCS.DET3.TESTPAR30 "sh -c \"oslxCatFits `ls $INS_ROOT/SYSTEM/DETDATA/sxSelfTestAcq_*.fits`\"" +OCS.DET3.TESTPAR31 "sleep 5" + +OCS.DET3.TESTCMD90 "STANDBY" +OCS.DET3.TESTMAX 100 + +#****************************************************************************** +# DET4 - TDCS instance for TECH +#****************************************************************************** +OCS.DET4.TESTPAR1 "sh -c \"rm -f $INS_ROOT/SYSTEM/DETDATA/sxSelfTestTech_*\"" + +# Exercise change state +OCS.DET4.TESTCMD2 "STANDBY" +OCS.DET4.TESTCMD3 "ONLINE" +OCS.DET4.TESTCMD4 "OFF" +OCS.DET4.TESTCMD5 "STANDBY" +OCS.DET4.TESTCMD6 "ONLINE" + +# +OCS.DET4.TESTCMD10 "SETUP" +OCS.DET4.TESTPAR10 "-function DET4.EXPO.MODE SINGLE DET4.EXPO.TIME 1 DET4.EXPO.NREP 1 DET4.EXPO.WIN.BINX 1 DET4.EXPO.WIN.BINY 1 DET4.EXPO.WIN.NX 223 DET4.EXPO.WIN.NY 223 DET4.EXPO.WIN.STARTX 1 DET4.EXPO.WIN.STARTY 1 DET4.EXPO.WIN.STARTX 1 DET4.PROC1.PUB2.FILENAME sxSelfTestTech_" + +OCS.DET4.TESTCMD11 "PUBLISH" +OCS.DET4.TESTPAR12 "sleep 5" + +OCS.DET4.TESTCMD13 "START" + +# Dump contents of FITS file produced +OCS.DET4.TESTPAR30 "sh -c \"oslxCatFits `ls $INS_ROOT/SYSTEM/DETDATA/sxSelfTestTech_*.fits`\"" +OCS.DET4.TESTPAR31 "sleep 5" + +OCS.DET4.TESTCMD90 "STANDBY" +OCS.DET4.TESTMAX 100 + +#****************************************************************************** +# +# OS Self-test +# +#****************************************************************************** +# Reserved for starting TCS simulation, if a TARGET uses it +OCS.OS.TESTCMD1 "" +OCS.OS.TESTPAR1 "" + +# Remove old files +OCS.OS.TESTPAR2 "sh -c \"rm -f $INS_ROOT/SYSTEM/DETDATA/sxSelfTestOs_*.fits\"" +OCS.OS.TESTPAR3 "msgSend wsxtcs prsControl PRSCOOR \"0,-800000,J,2000,2000,0,0,0,0,M,650.0,0.0,0.0,0.0\"" + +# Exercise change state +OCS.OS.TESTCMD5 "STANDBY" +OCS.OS.TESTCMD6 "ONLINE" +OCS.OS.TESTCMD7 "STANDBY" +OCS.OS.TESTCMD8 "ONLINE" + +#------------------------------------- +# Spectroscopy mode +#------------------------------------- + +# expo mode SLT with DET1 +OCS.OS.TESTCMD10 "SETUP" +OCS.OS.TESTPAR10 "-expoId 0 -file sxmcfgSelfTestOS_SLT.ref -function DET.READ.CURNAME Uncor DET.NDIT 1 OCS.DET1.IMGNAME sxSelfTestOs_1.fits" +OCS.OS.TESTCMD11 "START" +OCS.OS.TESTPAR11 "-detId NGCIR" +OCS.OS.TESTCMD12 "WAIT" +OCS.OS.TESTPAR12 "-detId NGCIR" + +# expo mode SLT with DET2 +OCS.OS.TESTCMD20 "SETUP" +OCS.OS.TESTPAR20 "-expoId 0 -file sxmcfgSelfTestOS_SLT.ref -function DET.MODE.CURID 1 DET.EXP.TYPE Normal DET.READ.NFRAM 4 DET.UIT1 1.0 OCS.DET2.IMGNAME sxSelfTestOs_2.fits" +OCS.OS.TESTCMD21 "START" +OCS.OS.TESTPAR21 "-detId NGCOPT" +OCS.OS.TESTCMD22 "WAIT" +OCS.OS.TESTPAR22 "-detId NGCOPT" + +# expo mode SLT with ACQ camera +OCS.OS.TESTPAR29 "msgSend wsxs sxacqControl SETUP \"-function DET3.PROC1.PUB2.FILENAME sxSelfTestOs_3.fits\"" +OCS.OS.TESTCMD30 "SETUP" +OCS.OS.TESTPAR30 "-expoId 0 -file sxmcfgSelfTestOS_SLT.ref -function OCS.DET3.IMGNAME will_be_ignored" +OCS.OS.TESTCMD31 "START" +OCS.OS.TESTPAR31 "-detId TDCS_ACQ" +OCS.OS.TESTCMD32 "WAIT" +OCS.OS.TESTPAR32 "-detId TDCS_ACQ" + +#------------------------------------- +# Imaging mode +#------------------------------------- + +# expo mode IMG with ACQ camera +OCS.OS.TESTPAR49 "msgSend wsxs sxacqControl SETUP \"-function DET3.PROC1.PUB2.FILENAME sxSelfTestOs_5.fits\"" +OCS.OS.TESTCMD50 "SETUP" +OCS.OS.TESTPAR50 "-expoId 0 -file sxmcfgSelfTestOS_IMG.ref -function OCS.DET3.IMGNAME will_be_ignored" +OCS.OS.TESTCMD51 "START" +OCS.OS.TESTPAR51 "-detId TDCS_ACQ" +OCS.OS.TESTCMD52 "WAIT" +OCS.OS.TESTPAR52 "-detId TDCS_ACQ" + +#------------------------------------- +# Generic mode +#------------------------------------- + +# expo mode GEN with DET1 +OCS.OS.TESTCMD60 "SETUP" +OCS.OS.TESTPAR60 "-expoId 0 -file sxmcfgSelfTestOS_GEN.ref -function DET.READ.CURNAME Uncor DET.NDIT 1 OCS.DET1.IMGNAME sxSelfTestOs_6.fits" +OCS.OS.TESTCMD61 "START" +OCS.OS.TESTPAR61 "-detId NGCIR" +OCS.OS.TESTCMD62 "WAIT" +OCS.OS.TESTPAR62 "-detId NGCIR" + +# expo mode GEN with DET2 +OCS.OS.TESTCMD70 "SETUP" +OCS.OS.TESTPAR70 "-expoId 0 -file sxmcfgSelfTestOS_GEN.ref -function DET.MODE.CURID 1 DET.EXP.TYPE Normal DET.READ.NFRAM 4 DET.UIT1 1.0 OCS.DET2.IMGNAME sxSelfTestOs_7.fits" +OCS.OS.TESTCMD71 "START" +OCS.OS.TESTPAR71 "-detId NGCOPT" +OCS.OS.TESTCMD72 "WAIT" +OCS.OS.TESTPAR72 "-detId NGCOPT" + +# expo mode GEN with ACQ camera +OCS.OS.TESTPAR79 "msgSend wsxs sxacqControl SETUP \"-function DET3.PROC1.PUB2.FILENAME sxSelfTestOs_8.fits\"" +OCS.OS.TESTCMD80 "SETUP" +OCS.OS.TESTPAR80 "-expoId 0 -file sxmcfgSelfTestOS_GEN.ref -function OCS.DET3.IMGNAME will_be_ignored" +OCS.OS.TESTCMD81 "START" +OCS.OS.TESTPAR81 "-detId TDCS_ACQ" +OCS.OS.TESTCMD82 "WAIT" +OCS.OS.TESTPAR82 "-detId TDCS_ACQ" + +# expo mode GEN with technical camera +OCS.OS.TESTPAR89 "msgSend wsxs sxtechControl SETUP \"-function DET4.PROC1.PUB2.FILENAME sxSelfTestOs_9.fits\"" +OCS.OS.TESTCMD90 "SETUP" +OCS.OS.TESTPAR90 "-expoId 0 -file sxmcfgSelfTestOS_GEN.ref -function OCS.DET4.IMGNAME will_be_ignored" +OCS.OS.TESTCMD91 "START" +OCS.OS.TESTPAR91 "-detId TDCS_TECH" +OCS.OS.TESTCMD92 "WAIT" +OCS.OS.TESTPAR92 "-detId TDCS_TECH" + +# bring the instrument to STANDBY +OCS.OS.TESTCMD100 "STANDBY" + +# Show the results. Note that files produced by OS have the day of the year in the name +OCS.OS.TESTPAR191 "sh -c \"oslxCatFits `ls $INS_ROOT/SYSTEM/DETDATA/sxSelfTestOs_1*.fits`\"" +OCS.OS.TESTPAR192 "sh -c \"oslxCatFits `ls $INS_ROOT/SYSTEM/DETDATA/sxSelfTestOs_2*.fits`\"" +OCS.OS.TESTPAR193 "sh -c \"oslxCatFits `ls $INS_ROOT/SYSTEM/DETDATA/sxSelfTestOs_3*.fits`\"" + +OCS.OS.TESTPAR195 "sh -c \"oslxCatFits `ls $INS_ROOT/SYSTEM/DETDATA/sxSelfTestOs_5*.fits`\"" + +OCS.OS.TESTPAR196 "sh -c \"oslxCatFits `ls $INS_ROOT/SYSTEM/DETDATA/sxSelfTestOs_6*.fits`\"" +OCS.OS.TESTPAR197 "sh -c \"oslxCatFits `ls $INS_ROOT/SYSTEM/DETDATA/sxSelfTestOs_7*.fits`\"" +OCS.OS.TESTPAR198 "sh -c \"oslxCatFits `ls $INS_ROOT/SYSTEM/DETDATA/sxSelfTestOs_8*.fits`\"" +OCS.OS.TESTPAR199 "sh -c \"oslxCatFits `ls $INS_ROOT/SYSTEM/DETDATA/sxSelfTestOs_9*.fits`\"" + +# Reserved for stopping TCS simulation, if a TARGET uses it +OCS.OS.TESTCMD199 "" +OCS.OS.TESTPAR199 "" + +OCS.OS.TESTMAX 200 + +#****************************************************************************** +# +# TPL Self-test +# +#****************************************************************************** +# Steps RESERVED are TARGET dependent and must be overwritten in sxmcfg.cfg + +# +# SOXS templates [steps 01-30] +# +# 01: Reserved for starting TCS simulation +# 02: Reserved to remove resulting fits files +# 03: Reserved to remove resulting fits files +# 04: +# 05: Preset to a circumpolar target +# 06: +# 07: +# 08: +# 09: +# 10: ONLINE +# 11: +# 12: +# 13: +# 14: +# 15: Reserved to send CLEAN to reset expoId +# 16: +# 17: +# 18: +# 19: +# 20: Execute OB +# 21: +# 22: +# 23: +# 24: Show the results +# 25: +# 26: +# 27: +# 28: STANDBY +# 29: +# 30: Reserved for stopping TCS simulator +# + +OCS.TPL.TESTPAR5 "msgSend wsxtcs prsControl PRSCOOR \"0,-800000,J,2000,2000,0,0,0,0,M,650.0,0.0,0.0,0.0\"" +OCS.TPL.TESTCMD10 "ONLINE" +OCS.TPL.TESTPAR20 "inscExecOB SelfTest_SOXS.obd" +OCS.TPL.TESTPAR24 "sh -c \"oslxCatFits `ls $INS_ROOT/SYSTEM/DETDATA/SOXS_*.fits`\"" +OCS.TPL.TESTPAR25 "sh -c \"oslxCatFits `ls $INS_ROOT/SYSTEM/DETDATA/ACQ_*.fits`\"" +OCS.TPL.TESTCMD28 "STANDBY" + +OCS.TPL.TESTMAX 100 + +#****************************************************************************** +# +# MS Self-test +# +#****************************************************************************** +# Steps RESERVED are TARGET dependent and must be overwritten in sxmcfg.cfg + +# +# SOXS MS templates [steps 01-30] +# +# 01: Reserved for starting TCS simulation +# 02: Reserved to remove resulting fits files +# 03: Reserved to remove resulting fits files +# 04: +# 05: Preset to a circumpolar target +# 06: +# 07: +# 08: +# 09: +# 10: ONLINE +# 11: +# 12: +# 13: +# 14: +# 15: Reserved to send CLEAN to reset expoId +# 16: +# 17: +# 18: +# 19: +# 20: Execute OB +# 21: +# 22: +# 23: +# 24: Show the results +# 25: +# 26: +# 27: +# 28: STANDBY +# 29: +# 30: Reserved for stopping TCS simulator +# + +OCS.MS.TESTPAR4 "sh -c \"sxinsStart\"" +OCS.MS.TESTPAR5 "msgSend wsxtcs prsControl PRSCOOR \"0,-800000,J,2000,2000,0,0,0,0,M,650.0,0.0,0.0,0.0\"" +OCS.MS.TESTCMD10 "ONLINE" +OCS.MS.TESTPAR20 "inscExecOB SelfTest_SOXS_MS.obd" +OCS.MS.TESTPAR24 "sh -c \"oslxCatFits `ls $INS_ROOT/SYSTEM/DETDATA/SOXS_*.fits`\"" +OCS.MS.TESTPAR25 "sh -c \"oslxCatFits `ls $INS_ROOT/SYSTEM/DETDATA/ACQ_*.fits`\"" +OCS.MS.TESTCMD28 "STANDBY" + +OCS.MS.TESTMAX 100 + + +# ___oOo___ diff --git a/CONFIG/sxmcfg/src/Makefile b/CONFIG/sxmcfg/src/Makefile new file mode 100644 index 0000000..690e861 --- /dev/null +++ b/CONFIG/sxmcfg/src/Makefile @@ -0,0 +1,187 @@ +#******************************************************************************* +# E.S.O. - VLT project +# +# "@(#) $Id: Makefile 297901 2017-05-26 17:40:15Z dricci $" +# +# Makefile of xxmcfg +# +# who when what +# -------- -------- ---------------------------------------------- +# dricci 2017-05-25 adapted from Template file + +#******************************************************************************* +# This Makefile follows VLT Standards (see Makefile(5) for more). +#******************************************************************************* +# REMARKS +# None +#------------------------------------------------------------------------ + +# +# user definable C-compilation flags +#USER_CFLAGS = + +# +# additional include and library search paths +#USER_INC = +#USER_LIB = + +# +# MODULE CODE DESCRIPTION: +# ------------------------ +# As a general rule: public file are "cleaned" and "installed" +# local (_L) are not "installed". + +# +# C programs (public and local) +# ----------------------------- +EXECUTABLES = +EXECUTABLES_L = + +# +# +soxsx_OBJECTS = +soxsx_LDFLAGS = +soxsx_LIBS = + +# +# special compilation flags for single c sources +#yyyyy_CFLAGS = + +# +# Includes (.h) files (public only) +# --------------------------------- +INCLUDES = + +# +# Libraries (public and local) +# ---------------------------- +LIBRARIES = +LIBRARIES_L = + +# +# +lllll_OBJECTS = + +# +# Scripts (public and local) +# ---------------------------- +SCRIPTS = +SCRIPTS_L = + +# +# TCL scripts (public and local) +# ------------------------------ +TCL_SCRIPTS = +TCL_SCRIPTS_L = + +# +# +tttttt_OBJECTS = +tttttt_TCLSH = +tttttt_LIBS = + +# +# TCL libraries (public and local) +# ------------------------------ +TCL_LIBRARIES = +TCL_LIBRARIES_L = + +# +# +tttlll_OBJECTS = + +# +# UIF panels (public and local) +# ---------------------------- +PANELS = +PANELS_L = + +# +# On-Line Database Files +# ---------------------- +DBL_CLASSES = +DBL_BCF = +DBL_FLAGS = +soxs_DBL_FLAGS = + +# +# man pages to be done +# -------------------- +MANSECTIONS = +MAN1 = +MAN3 = +MAN5 = +MAN7 = +MAN8 = + +# +# local man pages +# --------------- +MANl = + +# +# ASCII file to be converted into Framemaker-MIF +# -------------------- +ASCII_TO_MIF = ../config/sxmcfg*.cfg + +# +# INS_ROOT files to be installed +#------------------------------- +INS_ROOT_FILES = ../config/sxmcfg*.cfg \ + ../config/sxmcfg*.dbcfg \ + ../config/sxmcfg*.ins \ + ../config/sxmcfg*.det \ + ../config/sxmcfg*.ref + +# +# other files to be installed +#---------------------------- +INSTALL_FILES = + +# +# list of all possible C-sources (used to create automatic dependencies) +# ------------------------------ +CSOURCENAMES = \ + $(foreach exe, $(EXECUTABLES) $(EXECUTABLES_L), $($(exe)_OBJECTS)) \ + $(foreach lib, $(LIBRARIES) $(LIBRARIES_L), $($(lib)_OBJECTS)) + +# +#>>>>> END OF standard rules + +# +# CHOSE PLATFORM +# -------------- +# Default is UNIX, for VxVorks application next line MUST BE UNCOMMENTED +#MAKE_VXWORKS = on + +# +# INCLUDE STANDARDS +# ----------------- +MAKEDIR = $(VLTROOT)/include +include $(MAKEDIR)/vltMakefile + +# +# TARGETS +# ------- +all: do_all + @echo " . . . 'all' done" + +clean : clean_all + @echo " . . . clean done" + +man : do_man + @echo " . . . man page(s) done" + +install : install_all + $(AT)ctooConfigInstall + @echo " . . . installation done" + +#___oOo___ + + + + + + + + diff --git a/DCS/sxccd/ChangeLog b/DCS/sxccd/ChangeLog new file mode 100644 index 0000000..8bd2c9a --- /dev/null +++ b/DCS/sxccd/ChangeLog @@ -0,0 +1,24 @@ +Config file sets modified + +- config/xxngcoptDCS.cfg + config/xxngcoptCAMERA_TARGET.cfg + created + +- config/xxngcoptCAMERA.cfg + config/xxngcoptCONFIG.cfg + srs/Makefile + updated + +Mon Dec 21 09:21:24 2009 xxngcopt version: 1.1 + +Configuration file xxngcoptSetupComplete.det updated + +Wed Dec 02 16:05:17 2009 xxngcopt version: 0.3 + +Configuration file xxngcoptCAMERA.cfg corrected for VLT2010 + +Tue Mar 10 18:02:36 2009 xxngcopt version: 0.1 + +First version in the archive + +"@(#) $Id: ChangeLog 193169 2009-12-21 10:03:44Z fieramgr $" diff --git a/DCS/sxccd/config/sxccd/e2v4482-soxs-1.seq b/DCS/sxccd/config/sxccd/e2v4482-soxs-1.seq new file mode 100644 index 0000000..f2028ba --- /dev/null +++ b/DCS/sxccd/config/sxccd/e2v4482-soxs-1.seq @@ -0,0 +1,90 @@ +#******************************************************************************* +# E.S.O. - VLT project +# +# "@(#) $Id: e2v4482-soxs-1.seq 352995 2022-02-28 12:35:58Z abaruffo $" +# +# This file has been produced by the NGC Waveform Editor (BlueWave) +# +# !!!!!!!!!! DO NOT MANUALLY EDIT THIS HEADER !!!!!!!!! +# + +line_shift = 1 +line_dump = 2 +wipe_serial = 3 +end_wipe = 4 +integrate = 5 +end_integrate = 6 +expose = 7 +post_read = 8 +post_read5 = 9 +post_read_10 = 10 +pre_read = 11 +h_shift = 12 + +USE DET.OPT.NX +USE DET.OPT.NY +USE DET.OPT.PRSCX +USE DET.OPT.PRSCY +USE DET.OPT.OVSCX +USE DET.OPT.OVSCY +USE DET.BINX +USE DET.BINY +#USE DET.READ.DUMMY + +SUBRT WIPE INTEGRATE READ + +SCRIPT + +set svar(PRSCY) [expr ($svar(DET.OPT.PRSCY))] +set svar(LINES) [expr ($svar(DET.OPT.NY) + $svar(DET.OPT.OVSCY))] +set svar(PIXEL) [expr ($svar(DET.OPT.PRSCX) + $svar(DET.OPT.NX) + $svar(DET.OPT.OVSCX))] + +SCRIPT_END + +JSR WIPE 1 +JSR INTEGRATE 1 +JSR READ 1 + +RETURN + +WIPE: +LOOP 2 + EXEC line_dump 4096 + EXEC wipe_serial 2148 +END +EXEC end_wipe 1 +RETURN + +INTEGRATE: +EXEC integrate 100 +EXEC end_integrate 1 +RETURN + +READ: +# wipe serial register +LOOP 4 + EXEC wipe_serial 2148 +END + +# generate prescan lines +#LOOP $PRSCY +# EXEC wipe_serial 18 +# EXEC pre_read 1 +# LOOP $PIXEL +# EXEC h_shift $DET.BINX +# EXEC post_read 1 +# END +#END + +# read binned image $LINES x $PIXEL +LOOP $LINES + EXEC line_shift $DET.BINY +# EXEC wipe_serial 18 + EXEC pre_read 1 + LOOP $PIXEL + EXEC h_shift $DET.BINX + EXEC post_read 1 + END +END + +RETURN diff --git a/DCS/sxccd/config/sxccd/e2v4482-soxs-10.seq b/DCS/sxccd/config/sxccd/e2v4482-soxs-10.seq new file mode 100644 index 0000000..b24f725 --- /dev/null +++ b/DCS/sxccd/config/sxccd/e2v4482-soxs-10.seq @@ -0,0 +1,90 @@ +#******************************************************************************* +# E.S.O. - VLT project +# +# "@(#) $Id: e2v4482-soxs-10.seq 356270 2022-05-11 14:24:31Z abaruffo $" +# +# This file has been produced by the NGC Waveform Editor (BlueWave) +# +# !!!!!!!!!! DO NOT MANUALLY EDIT THIS HEADER !!!!!!!!! +# + +line_shift = 1 +line_dump = 2 +wipe_serial = 3 +end_wipe = 4 +integrate = 5 +end_integrate = 6 +expose = 7 +post_read = 8 +post_read5 = 9 +post_read_10 = 10 +pre_read = 11 +h_shift = 12 + +USE DET.OPT.NX +USE DET.OPT.NY +USE DET.OPT.PRSCX +USE DET.OPT.PRSCY +USE DET.OPT.OVSCX +USE DET.OPT.OVSCY +USE DET.BINX +USE DET.BINY +#USE DET.READ.DUMMY + +SUBRT WIPE INTEGRATE READ + +SCRIPT + +set svar(PRSCY) [expr ($svar(DET.OPT.PRSCY))] +set svar(LINES) [expr ($svar(DET.OPT.NY) + $svar(DET.OPT.OVSCY))] +set svar(PIXEL) [expr ($svar(DET.OPT.PRSCX) + $svar(DET.OPT.NX) + $svar(DET.OPT.OVSCX))] + +SCRIPT_END + +JSR WIPE 1 +JSR INTEGRATE 1 +JSR READ 1 + +RETURN + +WIPE: +LOOP 2 + EXEC line_dump 4096 + EXEC wipe_serial 2148 +END +EXEC end_wipe 1 +RETURN + +INTEGRATE: +EXEC integrate 100 +EXEC end_integrate 1 +RETURN + +READ: +# wipe serial register +LOOP 4 + EXEC wipe_serial 2148 +END + +# generate prescan lines +#LOOP $PRSCY +# EXEC wipe_serial 18 +# EXEC pre_read 1 +# LOOP $PIXEL +# EXEC h_shift $DET.BINX +# EXEC post_read_10 1 +# END +#END + +# read binned image $LINES x $PIXEL +LOOP $LINES + EXEC line_shift $DET.BINY +# EXEC wipe_serial 18 + EXEC pre_read 1 + LOOP $PIXEL + EXEC h_shift $DET.BINX + EXEC post_read_10 1 + END +END + +RETURN diff --git a/DCS/sxccd/config/sxccd/e2v4482-soxs-10ori.seq b/DCS/sxccd/config/sxccd/e2v4482-soxs-10ori.seq new file mode 100644 index 0000000..f9a1a79 --- /dev/null +++ b/DCS/sxccd/config/sxccd/e2v4482-soxs-10ori.seq @@ -0,0 +1,90 @@ +#******************************************************************************* +# E.S.O. - VLT project +# +# "@(#) $Id: e2v4482-soxs-10ori.seq 356270 2022-05-11 14:24:31Z abaruffo $" +# +# This file has been produced by the NGC Waveform Editor (BlueWave) +# +# !!!!!!!!!! DO NOT MANUALLY EDIT THIS HEADER !!!!!!!!! +# + +line_shift = 1 +line_dump = 2 +wipe_serial = 3 +end_wipe = 4 +integrate = 5 +end_integrate = 6 +expose = 7 +post_read = 8 +post_read5 = 9 +post_read_10 = 10 +pre_read = 11 +h_shift = 12 + +USE DET.OPT.NX +USE DET.OPT.NY +USE DET.OPT.PRSCX +USE DET.OPT.PRSCY +USE DET.OPT.OVSCX +USE DET.OPT.OVSCY +USE DET.BINX +USE DET.BINY +#USE DET.READ.DUMMY + +SUBRT WIPE INTEGRATE READ + +SCRIPT + +set svar(PRSCY) [expr ($svar(DET.OPT.PRSCY))] +set svar(LINES) [expr ($svar(DET.OPT.NY) + $svar(DET.OPT.OVSCY))] +set svar(PIXEL) [expr ($svar(DET.OPT.PRSCX) + $svar(DET.OPT.NX) + $svar(DET.OPT.OVSCX))] + +SCRIPT_END + +JSR WIPE 1 +JSR INTEGRATE 1 +JSR READ 1 + +RETURN + +WIPE: +LOOP 2 + EXEC line_dump 4144 + EXEC wipe_serial 4178 +END +EXEC end_wipe 1 +RETURN + +INTEGRATE: +EXEC integrate 100 +EXEC end_integrate 1 +RETURN + +READ: +# wipe serial register +LOOP 4 + EXEC wipe_serial 4178 +END + +# generate prescan lines +LOOP $PRSCY + EXEC wipe_serial 18 + EXEC pre_read 1 + LOOP $PIXEL + EXEC h_shift $DET.BINX + EXEC post_read_10 1 + END +END + +# read binned image $LINES x $PIXEL +LOOP $LINES + EXEC line_shift $DET.BINY + EXEC wipe_serial 18 + EXEC pre_read 1 + LOOP $PIXEL + EXEC h_shift $DET.BINX + EXEC post_read_10 1 + END +END + +RETURN diff --git a/DCS/sxccd/config/sxccd/e2v4482-soxs-5.seq b/DCS/sxccd/config/sxccd/e2v4482-soxs-5.seq new file mode 100644 index 0000000..d2f38b4 --- /dev/null +++ b/DCS/sxccd/config/sxccd/e2v4482-soxs-5.seq @@ -0,0 +1,90 @@ +#******************************************************************************* +# E.S.O. - VLT project +# +# "@(#) $Id: e2v4482-soxs-5.seq 356270 2022-05-11 14:24:31Z abaruffo $" +# +# This file has been produced by the NGC Waveform Editor (BlueWave) +# +# !!!!!!!!!! DO NOT MANUALLY EDIT THIS HEADER !!!!!!!!! +# + +line_shift = 1 +line_dump = 2 +wipe_serial = 3 +end_wipe = 4 +integrate = 5 +end_integrate = 6 +expose = 7 +post_read = 8 +post_read5 = 9 +post_read_10 = 10 +pre_read = 11 +h_shift = 12 + +USE DET.OPT.NX +USE DET.OPT.NY +USE DET.OPT.PRSCX +USE DET.OPT.PRSCY +USE DET.OPT.OVSCX +USE DET.OPT.OVSCY +USE DET.BINX +USE DET.BINY +#USE DET.READ.DUMMY + +SUBRT WIPE INTEGRATE READ + +SCRIPT + +set svar(PRSCY) [expr ($svar(DET.OPT.PRSCY))] +set svar(LINES) [expr ($svar(DET.OPT.NY) + $svar(DET.OPT.OVSCY))] +set svar(PIXEL) [expr ($svar(DET.OPT.PRSCX) + $svar(DET.OPT.NX) + $svar(DET.OPT.OVSCX))] + +SCRIPT_END + +JSR WIPE 1 +JSR INTEGRATE 1 +JSR READ 1 + +RETURN + +WIPE: +LOOP 2 + EXEC line_dump 4096 + EXEC wipe_serial 2148 +END +EXEC end_wipe 1 +RETURN + +INTEGRATE: +EXEC integrate 100 +EXEC end_integrate 1 +RETURN + +READ: +# wipe serial register +LOOP 4 + EXEC wipe_serial 2148 +END + +# generate prescan lines +#LOOP $PRSCY +# EXEC wipe_serial 18 +# EXEC pre_read 1 +# LOOP $PIXEL +# EXEC h_shift $DET.BINX +# EXEC post_read5 1 +# END +#END + +# read binned image $LINES x $PIXEL +LOOP $LINES + EXEC line_shift $DET.BINY +# EXEC wipe_serial 18 + EXEC pre_read 1 + LOOP $PIXEL + EXEC h_shift $DET.BINX + EXEC post_read5 1 + END +END + +RETURN diff --git a/DCS/sxccd/config/sxccd/e2v4482-soxs-5a.seq b/DCS/sxccd/config/sxccd/e2v4482-soxs-5a.seq new file mode 100644 index 0000000..c5939b8 --- /dev/null +++ b/DCS/sxccd/config/sxccd/e2v4482-soxs-5a.seq @@ -0,0 +1,90 @@ +#******************************************************************************* +# E.S.O. - VLT project +# +# "@(#) $Id: e2v4482-soxs-5a.seq 356270 2022-05-11 14:24:31Z abaruffo $" +# +# This file has been produced by the NGC Waveform Editor (BlueWave) +# +# !!!!!!!!!! DO NOT MANUALLY EDIT THIS HEADER !!!!!!!!! +# + +line_shift = 1 +line_dump = 2 +wipe_serial = 3 +end_wipe = 4 +integrate = 5 +end_integrate = 6 +expose = 7 +post_read = 8 +post_read5 = 9 +post_read_10 = 10 +pre_read = 11 +h_shift = 12 + +USE DET.OPT.NX +USE DET.OPT.NY +USE DET.OPT.PRSCX +USE DET.OPT.PRSCY +USE DET.OPT.OVSCX +USE DET.OPT.OVSCY +USE DET.BINX +USE DET.BINY +#USE DET.READ.DUMMY + +SUBRT WIPE INTEGRATE READ + +SCRIPT + +set svar(PRSCY) [expr ($svar(DET.OPT.PRSCY))] +set svar(LINES) [expr ($svar(DET.OPT.NY) + $svar(DET.OPT.OVSCY))] +set svar(PIXEL) [expr ($svar(DET.OPT.PRSCX) + $svar(DET.OPT.NX) + $svar(DET.OPT.OVSCX))] + +SCRIPT_END + +JSR WIPE 1 +JSR INTEGRATE 1 +JSR READ 1 + +RETURN + +WIPE: +LOOP 2 + EXEC line_dump 4096 + EXEC wipe_serial 2148 +END +EXEC end_wipe 1 +RETURN + +INTEGRATE: +EXEC integrate 100 +EXEC end_integrate 1 +RETURN + +READ: +# wipe serial register +LOOP 4 + EXEC wipe_serial 2148 +END + +# generate prescan lines +#LOOP $PRSCY +# EXEC wipe_serial 18 +# EXEC pre_read 1 +# LOOP $PIXEL +# EXEC h_shift $DET.BINX +# EXEC post_read5 1 +# END +#END + +# read binned image $LINES x $PIXEL +LOOP $LINES + EXEC line_shift $DET.BINY +# EXEC wipe_serial 18 + EXEC pre_read 1 + LOOP $PIXEL + EXEC h_shift $DET.BINX + EXEC post_read5 1 + END +END + +RETURN diff --git a/DCS/sxccd/config/sxccd/e2v4482-soxs-5ori.seq b/DCS/sxccd/config/sxccd/e2v4482-soxs-5ori.seq new file mode 100644 index 0000000..4fbb457 --- /dev/null +++ b/DCS/sxccd/config/sxccd/e2v4482-soxs-5ori.seq @@ -0,0 +1,90 @@ +#******************************************************************************* +# E.S.O. - VLT project +# +# "@(#) $Id: e2v4482-soxs-5ori.seq 356270 2022-05-11 14:24:31Z abaruffo $" +# +# This file has been produced by the NGC Waveform Editor (BlueWave) +# +# !!!!!!!!!! DO NOT MANUALLY EDIT THIS HEADER !!!!!!!!! +# + +line_shift = 1 +line_dump = 2 +wipe_serial = 3 +end_wipe = 4 +integrate = 5 +end_integrate = 6 +expose = 7 +post_read = 8 +post_read5 = 9 +post_read_10 = 10 +pre_read = 11 +h_shift = 12 + +USE DET.OPT.NX +USE DET.OPT.NY +USE DET.OPT.PRSCX +USE DET.OPT.PRSCY +USE DET.OPT.OVSCX +USE DET.OPT.OVSCY +USE DET.BINX +USE DET.BINY +#USE DET.READ.DUMMY + +SUBRT WIPE INTEGRATE READ + +SCRIPT + +set svar(PRSCY) [expr ($svar(DET.OPT.PRSCY))] +set svar(LINES) [expr ($svar(DET.OPT.NY) + $svar(DET.OPT.OVSCY))] +set svar(PIXEL) [expr ($svar(DET.OPT.PRSCX) + $svar(DET.OPT.NX) + $svar(DET.OPT.OVSCX))] + +SCRIPT_END + +JSR WIPE 1 +JSR INTEGRATE 1 +JSR READ 1 + +RETURN + +WIPE: +LOOP 2 + EXEC line_dump 4144 + EXEC wipe_serial 4178 +END +EXEC end_wipe 1 +RETURN + +INTEGRATE: +EXEC integrate 100 +EXEC end_integrate 1 +RETURN + +READ: +# wipe serial register +LOOP 4 + EXEC wipe_serial 4178 +END + +# generate prescan lines +LOOP $PRSCY + EXEC wipe_serial 18 + EXEC pre_read 1 + LOOP $PIXEL + EXEC h_shift $DET.BINX + EXEC post_read5 1 + END +END + +# read binned image $LINES x $PIXEL +LOOP $LINES + EXEC line_shift $DET.BINY + EXEC wipe_serial 18 + EXEC pre_read 1 + LOOP $PIXEL + EXEC h_shift $DET.BINX + EXEC post_read5 1 + END +END + +RETURN diff --git a/DCS/sxccd/config/sxccd/e2v4482-soxs-L.bclk b/DCS/sxccd/config/sxccd/e2v4482-soxs-L.bclk new file mode 100644 index 0000000..f7f02b1 --- /dev/null +++ b/DCS/sxccd/config/sxccd/e2v4482-soxs-L.bclk @@ -0,0 +1,151 @@ +#******************************************************************************* +# E.S.O. - VLT project +# +# "@(#) $Id$" +# +# This file has been produced by the NGC Waveform Editor (BlueWave) +# +# !!!!!!!!!! DO NOT MANUALLY EDIT THIS HEADER !!!!!!!!! +# + +# +1 +0b00000000111110100000000000000100 0b00000000000000001100001001111000 0 +0b00000000111110100000000000000100 0b00000000000000001100011001111000 0 +0b00000000111110100000000000000100 0b00000000000000001100010001111000 0 +0b00000000111110100000000000000100 0b00000000000000001100010101111000 0 +0b00000000111110100000000000000100 0b00000000000000001100000101111000 0 +0b00000000111110100000000000000100 0b00000000000000001100001101111000 0 +0b00000000111110100000000000000100 0b00000000000000001100001101111000 0 +0b00000000111110100000000000000100 0b00000000000000001100001101111000 0 +0b10000000111110100000000000000100 0b00000000000000001100001001111000 0 +! + +# +2 +0b00000000011111010000000000000000 0b00000000000000001100001001111000 0 +0b00000000011111010000000000000000 0b00000000000000001100011001111000 0 +0b00000000011111010000000000000000 0b00000000000000001100010001111000 0 +0b00000000011111010000000000000000 0b00000000000000001100010101111000 0 +0b00000000011111010000000000000000 0b00000000000000001100000101111000 0 +0b00000000011111010000000000000000 0b00000000000000001100001101111000 0 +0b00000000011111010000000000000000 0b00000000000000001100001101111000 0 +0b00000000011111010000000000000000 0b00000000000000001100001101111000 0 +0b10000000011111010000000000000000 0b00000000000000001100001001111000 0 +! + +# +3 +0b00000000000000011110000000000000 0b00000000000000001100001001111000 0 +0b00000000000000011110000000000000 0b00000000000000000000001001111000 0 +0b00000000000000011110000000000000 0b00000000000000000000001001001000 0 +0b00000000000000011110000000000100 0b00000000000000000000001001001111 0 +0b00000000000000011110000000000100 0b00000000000000000000001000000111 0 +0b00000000000000011110000000000100 0b00000000000000000000001000110111 0 +0b00000000000000011110000000000000 0b00000000000000000000001000110000 0 +0b10000000000000011110000000000000 0b00000000000000000000001001111000 0 +! + +# +4 +0b00000000000000001010000000000000 0b00000000000000000000000000000000 0 +0b00000000000000001010000000000000 0b00000000000000000000000000000000 0 +0b00000000000000001010000000000000 0b00000000000000000000000000000000 0 +0b00000000000000001010000000000000 0b00000000000000000000000000000000 0 +0b00000000000000001010000000000000 0b00000000000000000000000000000000 0 +0b10010000000000001010000000000000 0b00000000000000000000000000000000 0 +! + +# +5 +0b00000010011100010000000000000000 0b00000000000000001100001001111000 0 +0b00000010011100010000000000000000 0b00000000000000001100001001111000 0 +0b00000010011100010000000000000000 0b00000000000000001100001001111000 0 +0b00000010011100010000000000000000 0b00000000000000001100001001111000 0 +0b00000010011100010000000000000000 0b00000000000000001100001001111000 0 +0b00000010011100010000000000000000 0b00000000000000001100001001111000 0 +0b00000010011100010000000000000000 0b00000000000000001100001001111000 0 +0b00000010011100010000000000000000 0b00000000000000001100001001111000 0 +0b10000010011100010000000000000000 0b00000000000000001100001001111000 0 +! + +# +6 +0b00000000000000001010000000000000 0b00000000000000001100001001111000 0 +0b00000000000000001010000000000000 0b00000000000000001100001001111000 0 +0b00000000000000001010000000000000 0b00000000000000001100001001111000 0 +0b00000000000000001010000000000000 0b00000000000000001100001001111000 0 +0b00000000000000001010000000000000 0b00000000000000001100001001111000 0 +0b10010000000000001010000000000000 0b00000000000000001100001001111000 0 +! + +# +7 +0b00000010011100010000000000001000 0b00000000000000001110001011111000 0 +0b00000010011100010000000000001000 0b00000000000000001110001011111000 0 +0b00000010011100010000000000001000 0b00000000000000001110001011111000 0 +0b00000010011100010000000000001000 0b00000000000000001110001011111000 0 +0b00000010011100010000000000001000 0b00000000000000001110001011111000 0 +0b00000010011100010000000000001000 0b00000000000000001110001011111000 0 +0b00000010011100010000000000001000 0b00000000000000001110001011111000 0 +0b00000010011100010000000000001000 0b00000000000000001110001011111000 0 +0b00000010011100010000000000001000 0b00000000000000001110001011111000 0 +0b10000010011100010000000000001000 0b00000000000000001110001011111000 0 +! + +# +8 +0b00000000000000110010000000000100 0b00000000000000000000001000110011 0 +0b00000000000000000101000000000100 0b00000000000000000000001000110011 0 +0b00000000000000000101000000000000 0b00000000000000000000001000110011 0 +0b00000000000000000101000000000000 0b00000000000000000000001000110000 0 +0b00000000000000000101000000000000 0b00000000000000000000001000110000 0 +0b00000000000000001010000000000000 0b00000000000000000000001000110000 0 +0b00000000000000101000000000000000 0b00000000000000000000001000110011 0 +0b00000000000000001010000000000001 0b00000000000000000000001000110011 0 +0b10000000000000001010000000000000 0b00000000000000001100001001111011 0 +! + +# +9 +0b00000000000010110100000000000100 0b00000000000000000000001000110011 0 +0b00000000000000000101000000000100 0b00000000000000000000001000110011 0 +0b00000000000000000101000000000000 0b00000000000000000000001000110011 0 +0b00000000000000000101000000000000 0b00000000000000000000001000110000 0 +0b00000000000000000101000000000000 0b00000000000000000000001000110000 0 +0b00000000000000010100000000000000 0b00000000000000000000001000110000 0 +0b00000000000001111000000000000000 0b00000000000000000000001000110011 0 +0b00000000000000010100000000000001 0b00000000000000000000001000110011 0 +0b10000000000000010100000000000000 0b00000000000000001100001001111011 0 +! + +# +10 +0b00000000000111110100000000000100 0b00000000000000000000001000110011 0 +0b00000000000000000101000000000100 0b00000000000000000000001000110011 0 +0b00000000000000000101000000000000 0b00000000000000000000001000110011 0 +0b00000000000000000101000000000000 0b00000000000000000000001000110000 0 +0b00000000000000000101000000000000 0b00000000000000000000001000110000 0 +0b00000000000000010100000000000000 0b00000000000000000000001000110000 0 +0b00000000000100101100000000000000 0b00000000000000000000001000110011 0 +0b00000000000000010100000000000001 0b00000000000000000000001000110011 0 +0b10000000000000010100000000000000 0b00000000000000001100001001111011 0 +! + +# +11 +0b00000000000000011110000000000000 0b00000000000000001100001001111000 0 +0b00000000000000011110000000000000 0b00000000000000000000001001111000 0 +0b10000000000000011110000000000000 0b00000000000000000000001001111000 0 +! + +# +12 +0b00000000000000010100000000001100 0b01000000000000000000001001111011 0 +0b00000000000000010100000000001100 0b01000000000000000000001001001011 0 +0b00000000000000010100000000001100 0b01000000000000000000001001001111 0 +0b00000000000000010100000000001100 0b01000000000000000000001000000111 0 +0b00000000000000010100000000001100 0b01000000000000000000001000110111 0 +0b10000000000000010100000000001100 0b01000000000000000000001000110011 0 +! + diff --git a/DCS/sxccd/config/sxccd/e2v4482-soxs-L.bconf b/DCS/sxccd/config/sxccd/e2v4482-soxs-L.bconf new file mode 100644 index 0000000..4aa41f9 --- /dev/null +++ b/DCS/sxccd/config/sxccd/e2v4482-soxs-L.bconf @@ -0,0 +1,18 @@ + +25/07/200823/02/2021200112e2v4482-soxs-5.seqBoard_0e2v4482-soxs-R.bclk0SWLYes81SWRYes92RF3Yes53RF2LYes44RF1LYes35RF2RYes76RF1RYes67DGYes128IF1Yes09IF2Yes110IF3Yes211nu1Yes1412nu2Yes1513nu3Yes1614FRLYes1015FRRYes1116nu4Yes1717nu5Yes1818CLK_19No-119nu6Yes1920HorSwapYes2021VerSwapYes2122CLK_23Yes2223CLK_24No-124CLK_25No-125CLK_26No-126CLK_27No-127CLK_28No-128CLK_29No-129CLK_30No-130CLK_31Yes2331CLK_32No-132Convert1Yes1333Convert2Yes-134Reserved/Lemo1/ClampYes2435Reserved/Lemo2Yes2536UtilitySignal1Yes2637UtilitySignal2Yes2738ReservedYes-139ReservedYes-140Dis.Ram[7..0]Yes-141Dis.Ram[15..8]Yes-142Dis.Ram[23..16]Yes-143Dis.Ram[31..24]Yes-144DwellTimeYes2845DwellTime1Yes-146DwellTime2Yes-147DwellTime3Yes-148DwellTime4Yes-149DwellTime5Yes-150DwellTime6Yes-151DwellTime7Yes-152DwellTime8Yes-153DwellTime9Yes-154DwellTime10Yes-155DwellTime11Yes-156DwellTime12Yes-157DwellTime13Yes-158DwellTime14Yes-159DwellTime15Yes-160WaitforTriggerYes2961BreakpointYes-162EndOfProgramYes3063EndOfPatternYes3164DwellTimeModYes32 diff --git a/DCS/sxccd/config/sxccd/e2v4482-soxs-LR.bclk b/DCS/sxccd/config/sxccd/e2v4482-soxs-LR.bclk new file mode 100644 index 0000000..9155733 --- /dev/null +++ b/DCS/sxccd/config/sxccd/e2v4482-soxs-LR.bclk @@ -0,0 +1,151 @@ +#******************************************************************************* +# E.S.O. - VLT project +# +# "@(#) $Id$" +# +# This file has been produced by the NGC Waveform Editor (BlueWave) +# +# !!!!!!!!!! DO NOT MANUALLY EDIT THIS HEADER !!!!!!!!! +# + +# +1 +0b00000000111110100000000000000100 0b00000000000000001100001001111000 0 +0b00000000111110100000000000000100 0b00000000000000001100011001111000 0 +0b00000000111110100000000000000100 0b00000000000000001100010001111000 0 +0b00000000111110100000000000000100 0b00000000000000001100010101111000 0 +0b00000000111110100000000000000100 0b00000000000000001100000101111000 0 +0b00000000111110100000000000000100 0b00000000000000001100001101111000 0 +0b00000000111110100000000000000100 0b00000000000000001100001101111000 0 +0b00000000111110100000000000000100 0b00000000000000001100001101111000 0 +0b10000000111110100000000000000100 0b00000000000000001100001001111000 0 +! + +# +2 +0b00000000011111010000000000000000 0b00000000000000001100001001111000 0 +0b00000000011111010000000000000000 0b00000000000000001100011001111000 0 +0b00000000011111010000000000000000 0b00000000000000001100010001111000 0 +0b00000000011111010000000000000000 0b00000000000000001100010101111000 0 +0b00000000011111010000000000000000 0b00000000000000001100000101111000 0 +0b00000000011111010000000000000000 0b00000000000000001100001101111000 0 +0b00000000011111010000000000000000 0b00000000000000001100001101111000 0 +0b00000000011111010000000000000000 0b00000000000000001100001101111000 0 +0b10000000011111010000000000000000 0b00000000000000001100001001111000 0 +! + +# +3 +0b00000000000000011110000000000000 0b00000000000000001100001001111000 0 +0b00000000000000011110000000000000 0b00000000000000000000001001111000 0 +0b00000000000000011110000000000000 0b00000000000000000000001000101000 0 +0b00000000000000011110000000000100 0b00000000000000000000001000101111 0 +0b00000000000000011110000000000100 0b00000000000000000000001000000111 0 +0b00000000000000011110000000000100 0b00000000000000000000001001010111 0 +0b00000000000000011110000000000000 0b00000000000000000000001001010000 0 +0b10000000000000011110000000000000 0b00000000000000000000001001111000 0 +! + +# +4 +0b00000000000000001010000000000000 0b00000000000000000000000000000000 0 +0b00000000000000001010000000000000 0b00000000000000000000000000000000 0 +0b00000000000000001010000000000000 0b00000000000000000000000000000000 0 +0b00000000000000001010000000000000 0b00000000000000000000000000000000 0 +0b00000000000000001010000000000000 0b00000000000000000000000000000000 0 +0b10010000000000001010000000000000 0b00000000000000000000000000000000 0 +! + +# +5 +0b00000010011100010000000000000000 0b00000000000000001100001001111000 0 +0b00000010011100010000000000000000 0b00000000000000001100001001111000 0 +0b00000010011100010000000000000000 0b00000000000000001100001001111000 0 +0b00000010011100010000000000000000 0b00000000000000001100001001111000 0 +0b00000010011100010000000000000000 0b00000000000000001100001001111000 0 +0b00000010011100010000000000000000 0b00000000000000001100001001111000 0 +0b00000010011100010000000000000000 0b00000000000000001100001001111000 0 +0b00000010011100010000000000000000 0b00000000000000001100001001111000 0 +0b10000010011100010000000000000000 0b00000000000000001100001001111000 0 +! + +# +6 +0b00000000000000001010000000000000 0b00000000000000001100001001111000 0 +0b00000000000000001010000000000000 0b00000000000000001100001001111000 0 +0b00000000000000001010000000000000 0b00000000000000001100001001111000 0 +0b00000000000000001010000000000000 0b00000000000000001100001001111000 0 +0b00000000000000001010000000000000 0b00000000000000001100001001111000 0 +0b10010000000000001010000000000000 0b00000000000000001100001001111000 0 +! + +# +7 +0b00000010011100010000000000001000 0b00000000000000001110001011111000 0 +0b00000010011100010000000000001000 0b00000000000000001110001011111000 0 +0b00000010011100010000000000001000 0b00000000000000001110001011111000 0 +0b00000010011100010000000000001000 0b00000000000000001110001011111000 0 +0b00000010011100010000000000001000 0b00000000000000001110001011111000 0 +0b00000010011100010000000000001000 0b00000000000000001110001011111000 0 +0b00000010011100010000000000001000 0b00000000000000001110001011111000 0 +0b00000010011100010000000000001000 0b00000000000000001110001011111000 0 +0b00000010011100010000000000001000 0b00000000000000001110001011111000 0 +0b10000010011100010000000000001000 0b00000000000000001110001011111000 0 +! + +# +8 +0b00000000000000110010000000000100 0b00000000000000000000001001010011 0 +0b00000000000000000101000000000100 0b00000000000000000000001001010011 0 +0b00000000000000000101000000000000 0b00000000000000000000001001010011 0 +0b00000000000000000101000000000000 0b00000000000000000000001001010000 0 +0b00000000000000000101000000000000 0b00000000000000000000001001010000 0 +0b00000000000000001010000000000000 0b00000000000000000000001001010000 0 +0b00000000000000101000000000000000 0b00000000000000000000001001010011 0 +0b00000000000000001010000000000001 0b00000000000000000000001001010011 0 +0b10000000000000001010000000000000 0b00000000000000001100001001111011 0 +! + +# +9 +0b00000000000010110100000000000100 0b00000000000000000000001001010011 0 +0b00000000000000000101000000000100 0b00000000000000000000001001010011 0 +0b00000000000000000101000000000000 0b00000000000000000000001001010011 0 +0b00000000000000000101000000000000 0b00000000000000000000001001010000 0 +0b00000000000000000101000000000000 0b00000000000000000000001001010000 0 +0b00000000000000010100000000000000 0b00000000000000000000001001010000 0 +0b00000000000001111000000000000000 0b00000000000000000000001001010011 0 +0b00000000000000010100000000000001 0b00000000000000000000001001010011 0 +0b10000000000000010100000000000000 0b00000000000000001100001001111011 0 +! + +# +10 +0b00000000000111110100000000000100 0b00000000000000000000001001010011 0 +0b00000000000000000101000000000100 0b00000000000000000000001001010011 0 +0b00000000000000000101000000000000 0b00000000000000000000001001010011 0 +0b00000000000000000101000000000000 0b00000000000000000000001001010000 0 +0b00000000000000000101000000000000 0b00000000000000000000001001010000 0 +0b00000000000000010100000000000000 0b00000000000000000000001001010000 0 +0b00000000000100101100000000000000 0b00000000000000000000001001010011 0 +0b00000000000000010100000000000001 0b00000000000000000000001001010011 0 +0b10000000000000010100000000000000 0b00000000000000001100001001111011 0 +! + +# +11 +0b00000000000000011110000000000000 0b00000000000000001100001001111000 0 +0b00000000000000011110000000000000 0b00000000000000000000001001111000 0 +0b10000000000000011110000000000000 0b00000000000000000000001001111000 0 +! + +# +12 +0b00000000000000010100000000001100 0b01000000000000000000001001111011 0 +0b00000000000000010100000000001100 0b01000000000000000000001000101011 0 +0b00000000000000010100000000001100 0b01000000000000000000001000101111 0 +0b00000000000000010100000000001100 0b01000000000000000000001000000111 0 +0b00000000000000010100000000001100 0b01000000000000000000001001010111 0 +0b10000000000000010100000000001100 0b01000000000000000000001001010011 0 +! + diff --git a/DCS/sxccd/config/sxccd/e2v4482-soxs-LR.bconf b/DCS/sxccd/config/sxccd/e2v4482-soxs-LR.bconf new file mode 100644 index 0000000..f777091 --- /dev/null +++ b/DCS/sxccd/config/sxccd/e2v4482-soxs-LR.bconf @@ -0,0 +1,18 @@ + +25/07/200823/02/2021200112e2v4482-soxs-1.seqBoard_0e2v4482-soxs-LR.bclk0SWLYes81SWRYes92RF3Yes53RF2LYes44RF1LYes35RF2RYes76RF1RYes67DGYes128IF1Yes09IF2Yes110IF3Yes211nu1Yes1412nu2Yes1513nu3Yes1614FRLYes1015FRRYes1116nu4Yes1717nu5Yes1818CLK_19No-119nu6Yes1920HorSwapYes2021VerSwapYes2122CLK_23Yes2223CLK_24No-124CLK_25No-125CLK_26No-126CLK_27No-127CLK_28No-128CLK_29No-129CLK_30No-130CLK_31Yes2331CLK_32No-132Convert1Yes1333Convert2Yes-134Reserved/Lemo1/ClampYes2435Reserved/Lemo2Yes2536UtilitySignal1Yes2637UtilitySignal2Yes2738ReservedYes-139ReservedYes-140Dis.Ram[7..0]Yes-141Dis.Ram[15..8]Yes-142Dis.Ram[23..16]Yes-143Dis.Ram[31..24]Yes-144DwellTimeYes2845DwellTime1Yes-146DwellTime2Yes-147DwellTime3Yes-148DwellTime4Yes-149DwellTime5Yes-150DwellTime6Yes-151DwellTime7Yes-152DwellTime8Yes-153DwellTime9Yes-154DwellTime10Yes-155DwellTime11Yes-156DwellTime12Yes-157DwellTime13Yes-158DwellTime14Yes-159DwellTime15Yes-160WaitforTriggerYes2961BreakpointYes-162EndOfProgramYes3063EndOfPatternYes3164DwellTimeModYes32 diff --git a/DCS/sxccd/config/sxccd/e2v4482-soxs-R.bclk b/DCS/sxccd/config/sxccd/e2v4482-soxs-R.bclk new file mode 100644 index 0000000..57ea514 --- /dev/null +++ b/DCS/sxccd/config/sxccd/e2v4482-soxs-R.bclk @@ -0,0 +1,151 @@ +#******************************************************************************* +# E.S.O. - VLT project +# +# "@(#) $Id$" +# +# This file has been produced by the NGC Waveform Editor (BlueWave) +# +# !!!!!!!!!! DO NOT MANUALLY EDIT THIS HEADER !!!!!!!!! +# + +# +1 +0b00000000111110100000000000000100 0b00000000000000001100001001111000 0 +0b00000000111110100000000000000100 0b00000000000000001100011001111000 0 +0b00000000111110100000000000000100 0b00000000000000001100010001111000 0 +0b00000000111110100000000000000100 0b00000000000000001100010101111000 0 +0b00000000111110100000000000000100 0b00000000000000001100000101111000 0 +0b00000000111110100000000000000100 0b00000000000000001100001101111000 0 +0b00000000111110100000000000000100 0b00000000000000001100001101111000 0 +0b00000000111110100000000000000100 0b00000000000000001100001101111000 0 +0b10000000111110100000000000000100 0b00000000000000001100001001111000 0 +! + +# +2 +0b00000000011111010000000000000000 0b00000000000000001100001001111000 0 +0b00000000011111010000000000000000 0b00000000000000001100011001111000 0 +0b00000000011111010000000000000000 0b00000000000000001100010001111000 0 +0b00000000011111010000000000000000 0b00000000000000001100010101111000 0 +0b00000000011111010000000000000000 0b00000000000000001100000101111000 0 +0b00000000011111010000000000000000 0b00000000000000001100001101111000 0 +0b00000000011111010000000000000000 0b00000000000000001100001101111000 0 +0b00000000011111010000000000000000 0b00000000000000001100001101111000 0 +0b10000000011111010000000000000000 0b00000000000000001100001001111000 0 +! + +# +3 +0b00000000000000011110000000000000 0b00000000000000001100001001111000 0 +0b00000000000000011110000000000000 0b00000000000000000000001001111000 0 +0b00000000000000011110000000000000 0b00000000000000000000001000110000 0 +0b00000000000000011110000000000100 0b00000000000000000000001000110111 0 +0b00000000000000011110000000000100 0b00000000000000000000001000000111 0 +0b00000000000000011110000000000100 0b00000000000000000000001001001111 0 +0b00000000000000011110000000000000 0b00000000000000000000001001001000 0 +0b10000000000000011110000000000000 0b00000000000000000000001001111000 0 +! + +# +4 +0b00000000000000001010000000000000 0b00000000000000000000000000000000 0 +0b00000000000000001010000000000000 0b00000000000000000000000000000000 0 +0b00000000000000001010000000000000 0b00000000000000000000000000000000 0 +0b00000000000000001010000000000000 0b00000000000000000000000000000000 0 +0b00000000000000001010000000000000 0b00000000000000000000000000000000 0 +0b10010000000000001010000000000000 0b00000000000000000000000000000000 0 +! + +# +5 +0b00000010011100010000000000000000 0b00000000000000001100001001111000 0 +0b00000010011100010000000000000000 0b00000000000000001100001001111000 0 +0b00000010011100010000000000000000 0b00000000000000001100001001111000 0 +0b00000010011100010000000000000000 0b00000000000000001100001001111000 0 +0b00000010011100010000000000000000 0b00000000000000001100001001111000 0 +0b00000010011100010000000000000000 0b00000000000000001100001001111000 0 +0b00000010011100010000000000000000 0b00000000000000001100001001111000 0 +0b00000010011100010000000000000000 0b00000000000000001100001001111000 0 +0b10000010011100010000000000000000 0b00000000000000001100001001111000 0 +! + +# +6 +0b00000000000000001010000000000000 0b00000000000000001100001001111000 0 +0b00000000000000001010000000000000 0b00000000000000001100001001111000 0 +0b00000000000000001010000000000000 0b00000000000000001100001001111000 0 +0b00000000000000001010000000000000 0b00000000000000001100001001111000 0 +0b00000000000000001010000000000000 0b00000000000000001100001001111000 0 +0b10010000000000001010000000000000 0b00000000000000001100001001111000 0 +! + +# +7 +0b00000010011100010000000000001000 0b00000000000000001110001011111000 0 +0b00000010011100010000000000001000 0b00000000000000001110001011111000 0 +0b00000010011100010000000000001000 0b00000000000000001110001011111000 0 +0b00000010011100010000000000001000 0b00000000000000001110001011111000 0 +0b00000010011100010000000000001000 0b00000000000000001110001011111000 0 +0b00000010011100010000000000001000 0b00000000000000001110001011111000 0 +0b00000010011100010000000000001000 0b00000000000000001110001011111000 0 +0b00000010011100010000000000001000 0b00000000000000001110001011111000 0 +0b00000010011100010000000000001000 0b00000000000000001110001011111000 0 +0b10000010011100010000000000001000 0b00000000000000001110001011111000 0 +! + +# +8 +0b00000000000000110010000000000100 0b00000000000000000000001001001011 0 +0b00000000000000000101000000000100 0b00000000000000000000001001001011 0 +0b00000000000000000101000000000000 0b00000000000000000000001001001011 0 +0b00000000000000000101000000000000 0b00000000000000000000001001001000 0 +0b00000000000000000101000000000000 0b00000000000000000000001001001000 0 +0b00000000000000001010000000000000 0b00000000000000000000001001001000 0 +0b00000000000000101000000000000000 0b00000000000000000000001001001011 0 +0b00000000000000001010000000000001 0b00000000000000000000001001001011 0 +0b10000000000000001010000000000000 0b00000000000000001100001001111011 0 +! + +# +9 +0b00000000000010110100000000000100 0b00000000000000000000001001001011 0 +0b00000000000000000101000000000100 0b00000000000000000000001001001011 0 +0b00000000000000000101000000000000 0b00000000000000000000001001001011 0 +0b00000000000000000101000000000000 0b00000000000000000000001001001000 0 +0b00000000000000000101000000000000 0b00000000000000000000001001001000 0 +0b00000000000000010100000000000000 0b00000000000000000000001001001000 0 +0b00000000000001111000000000000000 0b00000000000000000000001001001011 0 +0b00000000000000010100000000000001 0b00000000000000000000001001001011 0 +0b10000000000000010100000000000000 0b00000000000000001100001001111011 0 +! + +# +10 +0b00000000000111110100000000000100 0b00000000000000000000001001001011 0 +0b00000000000000000101000000000100 0b00000000000000000000001001001011 0 +0b00000000000000000101000000000000 0b00000000000000000000001001001011 0 +0b00000000000000000101000000000000 0b00000000000000000000001001001000 0 +0b00000000000000000101000000000000 0b00000000000000000000001001001000 0 +0b00000000000000010100000000000000 0b00000000000000000000001001001000 0 +0b00000000000100101100000000000000 0b00000000000000000000001001001011 0 +0b00000000000000010100000000000001 0b00000000000000000000001001001011 0 +0b10000000000000010100000000000000 0b00000000000000001100001001111011 0 +! + +# +11 +0b00000000000000011110000000000000 0b00000000000000001100001001111000 0 +0b00000000000000011110000000000000 0b00000000000000000000001001111000 0 +0b10000000000000011110000000000000 0b00000000000000000000001001111000 0 +! + +# +12 +0b00000000000000010100000000001100 0b01000000000000000000001001111011 0 +0b00000000000000010100000000001100 0b01000000000000000000001000110011 0 +0b00000000000000010100000000001100 0b01000000000000000000001000110111 0 +0b00000000000000010100000000001100 0b01000000000000000000001000000111 0 +0b00000000000000010100000000001100 0b01000000000000000000001001001111 0 +0b10000000000000010100000000001100 0b01000000000000000000001001001011 0 +! + diff --git a/DCS/sxccd/config/sxccd/e2v4482-soxs-R.bconf b/DCS/sxccd/config/sxccd/e2v4482-soxs-R.bconf new file mode 100644 index 0000000..1bce40d --- /dev/null +++ b/DCS/sxccd/config/sxccd/e2v4482-soxs-R.bconf @@ -0,0 +1,18 @@ + +25/07/200823/02/2021200112e2v4482-soxs-10.seqBoard_0e2v4482-soxs-L.bclk0SWLYes81SWRYes92RF3Yes53RF2LYes44RF1LYes35RF2RYes76RF1RYes67DGYes128IF1Yes09IF2Yes110IF3Yes211nu1Yes1412nu2Yes1513nu3Yes1614FRLYes1015FRRYes1116nu4Yes1717nu5Yes1818CLK_19No-119nu6Yes1920HorSwapYes2021VerSwapYes2122CLK_23Yes2223CLK_24No-124CLK_25No-125CLK_26No-126CLK_27No-127CLK_28No-128CLK_29No-129CLK_30No-130CLK_31Yes2331CLK_32No-132Convert1Yes1333Convert2Yes-134Reserved/Lemo1/ClampYes2435Reserved/Lemo2Yes2536UtilitySignal1Yes2637UtilitySignal2Yes2738ReservedYes-139ReservedYes-140Dis.Ram[7..0]Yes-141Dis.Ram[15..8]Yes-142Dis.Ram[23..16]Yes-143Dis.Ram[31..24]Yes-144DwellTimeYes2845DwellTime1Yes-146DwellTime2Yes-147DwellTime3Yes-148DwellTime4Yes-149DwellTime5Yes-150DwellTime6Yes-151DwellTime7Yes-152DwellTime8Yes-153DwellTime9Yes-154DwellTime10Yes-155DwellTime11Yes-156DwellTime12Yes-157DwellTime13Yes-158DwellTime14Yes-159DwellTime15Yes-160WaitforTriggerYes2961BreakpointYes-162EndOfProgramYes3063EndOfPatternYes3164DwellTimeModYes32 diff --git a/DCS/sxccd/config/sxccd/e2v4482-soxs-box.seq b/DCS/sxccd/config/sxccd/e2v4482-soxs-box.seq new file mode 100644 index 0000000..bf42fc6 --- /dev/null +++ b/DCS/sxccd/config/sxccd/e2v4482-soxs-box.seq @@ -0,0 +1,98 @@ +#******************************************************************************* +# E.S.O. - VLT project +# +# "@(#) $Id: e2v4482-soxs-box.seq 356270 2022-05-11 14:24:31Z abaruffo $" +# +# This file has been produced by the NGC Waveform Editor (BlueWave) +# +# !!!!!!!!!! DO NOT MANUALLY EDIT THIS HEADER !!!!!!!!! +# + +line_shift = 1 +line_dump = 2 +wipe_serial = 3 +end_wipe = 4 +integrate = 5 +end_integrate = 6 +expose = 7 +post_read = 8 +post_read5 = 9 +post_read_10 = 10 +pre_read = 11 +h_shift = 12 + +USE DET.OPT.NX +USE DET.OPT.NY +USE DET.OPT.PRSCX +USE DET.OPT.PRSCY +USE DET.OPT.OVSCX +USE DET.OPT.OVSCY +USE DET.BINX +USE DET.BINY +#USE DET.READ.DUMMY + +SUBRT WIPE INTEGRATE READ + +SCRIPT + +set svar(PRSCY) [expr ($svar(DET.OPT.PRSCY))] +set svar(LINES) [expr ($svar(DET.OPT.NY) + $svar(DET.OPT.OVSCY))] +set svar(PIXEL) [expr ($svar(DET.OPT.PRSCX) + $svar(DET.OPT.NX) + $svar(DET.OPT.OVSCX))] + +SCRIPT_END + +JSR WIPE 1 +JSR INTEGRATE 1 +JSR READ 1 + +RETURN + +WIPE: +LOOP 2 + EXEC line_dump 4096 + EXEC wipe_serial 2148 +END +EXEC end_wipe 1 +RETURN + +INTEGRATE: +EXEC integrate 100 +EXEC end_integrate 1 +RETURN + +READ: +# wipe serial register +LOOP 4 + EXEC wipe_serial 2148 +END + +# generate prescan lines +#LOOP $PRSCY +# EXEC wipe_serial 18 +# EXEC pre_read 1 +# LOOP $PIXEL +# EXEC h_shift $DET.BINX +# EXEC post_read 1 +# END +#END + +# read binned image $LINES x $PIXEL +LOOP $LINES + EXEC line_shift $DET.BINY + EXEC pre_read 1 + + LOOP 649 + EXEC h_shift $DET.BINX + END + + LOOP 750 + EXEC h_shift $DET.BINX + EXEC post_read 1 + END + + LOOP 649 + EXEC h_shift $DET.BINX + END +END + +RETURN diff --git a/DCS/sxccd/config/sxccd/e2v4482-soxs-box1.seq b/DCS/sxccd/config/sxccd/e2v4482-soxs-box1.seq new file mode 100644 index 0000000..519d84c --- /dev/null +++ b/DCS/sxccd/config/sxccd/e2v4482-soxs-box1.seq @@ -0,0 +1,107 @@ +#******************************************************************************* +# E.S.O. - VLT project +# +# "@(#) $Id: e2v4482-soxs-box1.seq 356270 2022-05-11 14:24:31Z abaruffo $" +# +# This file has been produced by the NGC Waveform Editor (BlueWave) +# +# !!!!!!!!!! DO NOT MANUALLY EDIT THIS HEADER !!!!!!!!! +# + +line_shift = 1 +line_dump = 2 +wipe_serial = 3 +end_wipe = 4 +integrate = 5 +end_integrate = 6 +expose = 7 +post_read = 8 +post_read5 = 9 +post_read_10 = 10 +pre_read = 11 +h_shift = 12 + +USE DET.OPT.NX +USE DET.OPT.NY +USE DET.OPT.PRSCX +USE DET.OPT.PRSCY +USE DET.OPT.OVSCX +USE DET.OPT.OVSCY +USE DET.BINX +USE DET.BINY +USE DET.WIN1.NX +USE DET.WIN1.NY +USE DET.WIN1.STRX +USE DET.WIN1.STRY + +#USE DET.READ.DUMMY + +SUBRT WIPE INTEGRATE READ + +SCRIPT + +set svar(PRSCY) [expr ($svar(DET.OPT.PRSCY))] +set svar(LINES) [expr ($svar(DET.OPT.NY) + $svar(DET.OPT.OVSCY))] +set svar(PIXEL) [expr ($svar(DET.OPT.PRSCX) + $svar(DET.OPT.NX) + $svar(DET.OPT.OVSCX))] + +set svar(BOXX) [expr ($svar(DET.WIN1.NX))] +set svar(STRX) [expr ($svar(DET.WIN1.STRX))] + + +SCRIPT_END + +JSR WIPE 1 +JSR INTEGRATE 1 +JSR READ 1 + +RETURN + +WIPE: +LOOP 2 + EXEC line_dump 4096 + EXEC wipe_serial 2148 +END +EXEC end_wipe 1 +RETURN + +INTEGRATE: +EXEC integrate 100 +EXEC end_integrate 1 +RETURN + +READ: +# wipe serial register +LOOP 4 + EXEC wipe_serial 2148 +END + +# generate prescan lines +#LOOP $PRSCY +# EXEC wipe_serial 18 +# EXEC pre_read 1 +# LOOP $PIXEL +# EXEC h_shift $DET.BINX +# EXEC post_read 1 +# END +#END + +# read binned image $LINES x $PIXEL +LOOP $LINES + EXEC line_shift $DET.BINY + EXEC pre_read 1 + + LOOP $STRX + EXEC h_shift $DET.BINX + END + + LOOP $BOXX + EXEC h_shift $DET.BINX + EXEC post_read 1 + END + + LOOP 649 + EXEC h_shift $DET.BINX + END +END + +RETURN diff --git a/DCS/sxccd/config/sxccd/e2v4482-soxs-box2.seq b/DCS/sxccd/config/sxccd/e2v4482-soxs-box2.seq new file mode 100644 index 0000000..dce1e3e --- /dev/null +++ b/DCS/sxccd/config/sxccd/e2v4482-soxs-box2.seq @@ -0,0 +1,108 @@ +#******************************************************************************* +# E.S.O. - VLT project +# +# "@(#) $Id: e2v4482-soxs-box2.seq 356270 2022-05-11 14:24:31Z abaruffo $" +# +# This file has been produced by the NGC Waveform Editor (BlueWave) +# +# !!!!!!!!!! DO NOT MANUALLY EDIT THIS HEADER !!!!!!!!! +# + +line_shift = 1 +line_dump = 2 +wipe_serial = 3 +end_wipe = 4 +integrate = 5 +end_integrate = 6 +expose = 7 +post_read = 8 +post_read5 = 9 +post_read_10 = 10 +pre_read = 11 +h_shift = 12 + +USE DET.OPT.NX +USE DET.OPT.NY +USE DET.OPT.PRSCX +USE DET.OPT.PRSCY +USE DET.OPT.OVSCX +USE DET.OPT.OVSCY +USE DET.BINX +USE DET.BINY +USE DET.WIN1.NX +USE DET.WIN1.NY +USE DET.WIN1.STRX +USE DET.WIN1.STRY + +#USE DET.READ.DUMMY + +SUBRT WIPE INTEGRATE READ + +SCRIPT + +set svar(PRSCY) [expr ($svar(DET.OPT.PRSCY))] +set svar(LINES) [expr ($svar(DET.OPT.NY) + $svar(DET.OPT.OVSCY))] +set svar(PIXEL) [expr ($svar(DET.OPT.PRSCX) + $svar(DET.OPT.NX) + $svar(DET.OPT.OVSCX))] + +set svar(BOXX) [expr ($svar(DET.WIN1.NX))] +set svar(STRX) [expr ($svar(DET.WIN1.STRX))] +#set svar(ENDX) PIXEL - 750 - 699 +set svar(ENDX) 649 + +SCRIPT_END + +JSR WIPE 1 +JSR INTEGRATE 1 +JSR READ 1 + +RETURN + +WIPE: +LOOP 2 + EXEC line_dump 4096 + EXEC wipe_serial 2148 +END +EXEC end_wipe 1 +RETURN + +INTEGRATE: +EXEC integrate 100 +EXEC end_integrate 1 +RETURN + +READ: +# wipe serial register +LOOP 4 + EXEC wipe_serial 2148 +END + +# generate prescan lines +#LOOP $PRSCY +# EXEC wipe_serial 18 +# EXEC pre_read 1 +# LOOP $PIXEL +# EXEC h_shift $DET.BINX +# EXEC post_read 1 +# END +#END + +# read binned image $LINES x $PIXEL +LOOP $LINES + EXEC line_shift $DET.BINY + EXEC pre_read 1 + + LOOP $STRX + EXEC h_shift $DET.BINX + END + + LOOP $BOXX + EXEC h_shift $DET.BINX + EXEC post_read 1 + END + + LOOP $ENDX + EXEC h_shift $DET.BINX + END +END + +RETURN diff --git a/DCS/sxccd/config/sxccd/e2v4482-soxs-box3.seq b/DCS/sxccd/config/sxccd/e2v4482-soxs-box3.seq new file mode 100644 index 0000000..c1b3ae9 --- /dev/null +++ b/DCS/sxccd/config/sxccd/e2v4482-soxs-box3.seq @@ -0,0 +1,97 @@ +#******************************************************************************* +# E.S.O. - VLT project +# +# "@(#) $Id: e2v4482-soxs-box3.seq 356270 2022-05-11 14:24:31Z abaruffo $" +# +# This file has been produced by the NGC Waveform Editor (BlueWave) +# +# !!!!!!!!!! DO NOT MANUALLY EDIT THIS HEADER !!!!!!!!! +# + +line_shift = 1 +line_dump = 2 +wipe_serial = 3 +end_wipe = 4 +integrate = 5 +end_integrate = 6 +expose = 7 +post_read = 8 +post_read5 = 9 +post_read_10 = 10 +pre_read = 11 +h_shift = 12 + +USE DET.OPT.NX +USE DET.OPT.NY +USE DET.OPT.PRSCX +USE DET.OPT.PRSCY +USE DET.OPT.OVSCX +USE DET.OPT.OVSCY +USE DET.BINX +USE DET.BINY +USE DET.WIN1.NX +USE DET.WIN1.NY +USE DET.WIN1.STRX +USE DET.WIN1.STRY + +SUBRT WIPE INTEGRATE READ + +SCRIPT + +set svar(PRSCY) [expr ($svar(DET.OPT.PRSCY))] +set svar(LINES) [expr ($svar(DET.OPT.NY) + $svar(DET.OPT.OVSCY))] +set svar(PIXEL) [expr ($svar(DET.OPT.PRSCX) + $svar(DET.OPT.NX) + $svar(DET.OPT.OVSCX))] + +set svar(BOXX) [expr ($svar(DET.WIN1.NX))] +set svar(STRX) [expr ($svar(DET.WIN1.STRX))] +set svar(ENDX) [expr ($svar(DET.OPT.PRSCX) + $svar(DET.OPT.NX) + $svar(DET.OPT.OVSCX) - $svar(DET.WIN1.NX) - $svar(DET.WIN1.STRX))] + +#set svar(ENDX) 649 + +SCRIPT_END + +JSR WIPE 1 +JSR INTEGRATE 1 +JSR READ 1 + +RETURN + +WIPE: +LOOP 2 + EXEC line_dump 4096 + EXEC wipe_serial 2148 +END +EXEC end_wipe 1 +RETURN + +INTEGRATE: +EXEC integrate 100 +EXEC end_integrate 1 +RETURN + +READ: +# wipe serial register +LOOP 4 + EXEC wipe_serial 2148 +END + +# read binned image $LINES x $PIXEL +LOOP $LINES + EXEC line_shift $DET.BINY + EXEC pre_read 1 + + LOOP $STRX + EXEC h_shift $DET.BINX + END + + LOOP $BOXX + EXEC h_shift $DET.BINX + EXEC post_read 1 + END + + LOOP $ENDX + EXEC h_shift $DET.BINX + END +END + +RETURN diff --git a/DCS/sxccd/config/sxccd/e2v4482-soxs.seq b/DCS/sxccd/config/sxccd/e2v4482-soxs.seq new file mode 100644 index 0000000..c606ab6 --- /dev/null +++ b/DCS/sxccd/config/sxccd/e2v4482-soxs.seq @@ -0,0 +1,90 @@ +#******************************************************************************* +# E.S.O. - VLT project +# +# "@(#) $Id: e2v4482-soxs.seq 352995 2022-02-28 12:35:58Z abaruffo $" +# +# This file has been produced by the NGC Waveform Editor (BlueWave) +# +# !!!!!!!!!! DO NOT MANUALLY EDIT THIS HEADER !!!!!!!!! +# + +line_shift = 1 +line_dump = 2 +wipe_serial = 3 +end_wipe = 4 +integrate = 5 +end_integrate = 6 +expose = 7 +post_read = 8 +post_read5 = 9 +post_read_10 = 10 +pre_read = 11 +h_shift = 12 + +USE DET.OPT.NX +USE DET.OPT.NY +USE DET.OPT.PRSCX +USE DET.OPT.PRSCY +USE DET.OPT.OVSCX +USE DET.OPT.OVSCY +USE DET.BINX +USE DET.BINY +#USE DET.READ.DUMMY + +SUBRT WIPE INTEGRATE READ + +SCRIPT + +set svar(PRSCY) [expr ($svar(DET.OPT.PRSCY))] +set svar(LINES) [expr ($svar(DET.OPT.NY) + $svar(DET.OPT.OVSCY))] +set svar(PIXEL) [expr ($svar(DET.OPT.PRSCX) + $svar(DET.OPT.NX) + $svar(DET.OPT.OVSCX))] + +SCRIPT_END + +JSR WIPE 1 +JSR INTEGRATE 1 +JSR READ 1 + +RETURN + +WIPE: +LOOP 2 + EXEC line_dump 4144 + EXEC wipe_serial 4178 +END +EXEC end_wipe 1 +RETURN + +INTEGRATE: +EXEC integrate 100 +EXEC end_integrate 1 +RETURN + +READ: +# wipe serial register +LOOP 4 + EXEC wipe_serial 4178 +END + +# generate prescan lines +LOOP $PRSCY + EXEC wipe_serial 18 + EXEC pre_read 1 + LOOP $PIXEL + EXEC h_shift $DET.BINX + EXEC post_read 1 + END +END + +# read binned image $LINES x $PIXEL +LOOP $LINES + EXEC line_shift $DET.BINY + EXEC wipe_serial 18 + EXEC pre_read 1 + LOOP $PIXEL + EXEC h_shift $DET.BINX + EXEC post_read 1 + END +END + +RETURN diff --git a/DCS/sxccd/config/sxccd/soxs.v b/DCS/sxccd/config/sxccd/soxs.v new file mode 100644 index 0000000..6b5f4e4 --- /dev/null +++ b/DCS/sxccd/config/sxccd/soxs.v @@ -0,0 +1,264 @@ +#******************************************************************************* +# E.S.O. - VLT project +# +# "@(#) $Id: FastPolarlg_Brd1.v,v 1.9 2011/03/11 12:35:08 vltsccm Exp $" +# +# This file has been produced by the NGC Waveform Editor (BlueWave) +# +# !!!!!!!!!! DO NOT MANUALLY EDIT THIS HEADER !!!!!!!!! +# + +DET.CLDC.CLKOFF 10.0; # Global clock voltage offset + +# Clock Voltages: +DET.CLDC.CLKHINM1 "SWLHi"; +DET.CLDC.CLKHI1 5.0; +DET.CLDC.CLKHIRA1 "[0.0, 7.0]"; + +DET.CLDC.CLKLONM1 "SWLLo"; +DET.CLDC.CLKLO1 -5.0; +DET.CLDC.CLKLORA1 "[-7.0, 0.0]"; + +DET.CLDC.CLKHINM2 "SWRHi"; +DET.CLDC.CLKHI2 5.0; +DET.CLDC.CLKHIRA2 "[0.0, 7.0]"; + +DET.CLDC.CLKLONM2 "SWRLo"; +DET.CLDC.CLKLO2 -5.0; +DET.CLDC.CLKLORA2 "[-7.0, 0.0]"; + +DET.CLDC.CLKHINM3 "RF3Hi"; +DET.CLDC.CLKHI3 5.0; +DET.CLDC.CLKHIRA3 "[0.0, 7.0]"; + +DET.CLDC.CLKLONM3 "RF3Lo"; +DET.CLDC.CLKLO3 -5.0; +DET.CLDC.CLKLORA3 "[-7.0, 0.0]"; + +DET.CLDC.CLKHINM4 "RF2LHi"; +DET.CLDC.CLKHI4 5.0; +DET.CLDC.CLKHIRA4 "[0.0, 7.0]"; + +DET.CLDC.CLKLONM4 "RF2LLo"; +DET.CLDC.CLKLO4 -5.0; +DET.CLDC.CLKLORA4 "[-7.0, 0.0]"; + +DET.CLDC.CLKHINM5 "RF1LHi"; +DET.CLDC.CLKHI5 5.0; +DET.CLDC.CLKHIRA5 "[0.0, 7.0]"; + +DET.CLDC.CLKLONM5 "RF1LLo"; +DET.CLDC.CLKLO5 -5.0; +DET.CLDC.CLKLORA5 "[-7.0, 0.0]"; + +DET.CLDC.CLKHINM6 "RF2RHi"; +DET.CLDC.CLKHI6 5.0; +DET.CLDC.CLKHIRA6 "[0.0, 7.0]"; + +DET.CLDC.CLKLONM6 "RF2RLo"; +DET.CLDC.CLKLO6 -5.0; +DET.CLDC.CLKLORA6 "[-7.0, 0.0]"; + +DET.CLDC.CLKHINM7 "RF1RHi"; +DET.CLDC.CLKHI7 5.0; +DET.CLDC.CLKHIRA7 "[0.0, 7.0]"; + +DET.CLDC.CLKLONM7 "RF1RLo"; +DET.CLDC.CLKLO7 -5.0; +DET.CLDC.CLKLORA7 "[-7.0, 0.0]"; + +DET.CLDC.CLKHINM8 "DGHi"; +DET.CLDC.CLKHI8 6.0; +DET.CLDC.CLKHIRA8 "[0.0, 7.0]"; + +DET.CLDC.CLKLONM8 "DGLo"; +DET.CLDC.CLKLO8 -6.0; +DET.CLDC.CLKLORA8 "[-7.0, 0.0]"; + +DET.CLDC.CLKHINM9 "IF1Hi"; +DET.CLDC.CLKHI9 2.5; +DET.CLDC.CLKHIRA9 "[0.0, 12.0]"; + +DET.CLDC.CLKLONM9 "IF1Lo"; +DET.CLDC.CLKLO9 -8.0; +DET.CLDC.CLKLORA9 "[-9.0, 0.0]"; + +DET.CLDC.CLKHINM10 "IF2Hi"; +DET.CLDC.CLKHI10 2.5; +DET.CLDC.CLKHIRA10 "[0.0, 12.0]"; + +DET.CLDC.CLKLONM10 "IF2Lo"; +DET.CLDC.CLKLO10 -8.0; +DET.CLDC.CLKLORA10 "[-9.0, 0.0]"; + +DET.CLDC.CLKHINM11 "IF3Hi"; +DET.CLDC.CLKHI11 2.5; +DET.CLDC.CLKHIRA11 "[0.0, 12.0]"; + +DET.CLDC.CLKLONM11 "IF3Lo"; +DET.CLDC.CLKLO11 -8.0; +DET.CLDC.CLKLORA11 "[-9.0, 0.0]"; + +DET.CLDC.CLKHINM12 "SF1Hi"; +DET.CLDC.CLKHI12 2.5; +DET.CLDC.CLKHIRA12 "[0.0, 12.0]"; + +DET.CLDC.CLKLONM12 "SF1Lo"; +DET.CLDC.CLKLO12 -8.0; +DET.CLDC.CLKLORA12 "[-9.0, 0.0]"; + +DET.CLDC.CLKHINM13 "SF2Hi"; +DET.CLDC.CLKHI13 2.5; +DET.CLDC.CLKHIRA13 "[0.0, 12.0]"; + +DET.CLDC.CLKLONM13 "SF2Lo"; +DET.CLDC.CLKLO13 -8.0; +DET.CLDC.CLKLORA13 "[-9.0, 0.0]"; + +DET.CLDC.CLKHINM14 "SF3Hi"; +DET.CLDC.CLKHI14 2.5; +DET.CLDC.CLKHIRA14 "[0.0, 12.0]"; + +DET.CLDC.CLKLONM14 "SF3Lo"; +DET.CLDC.CLKLO14 -8.0; +DET.CLDC.CLKLORA14 "[-9.0, 0.0]"; + +DET.CLDC.CLKHINM15 "FRLHi"; +DET.CLDC.CLKHI15 6.0; +DET.CLDC.CLKHIRA15 "[0.0, 7.0]"; + +DET.CLDC.CLKLONM15 "FRLLo"; +DET.CLDC.CLKLO15 -6.0; +DET.CLDC.CLKLORA15 "[-7.0, 0.0]"; + +DET.CLDC.CLKHINM16 "FRRHi"; +DET.CLDC.CLKHI16 6.0; +DET.CLDC.CLKHIRA16 "[0.0, 7.0]"; + +DET.CLDC.CLKLONM16 "FRRLo"; +DET.CLDC.CLKLO16 -6.0; +DET.CLDC.CLKLORA16 "[-7.0, 0.0]"; + +DET.CLDC.CLKHINM17 "Shutter_LEDHi"; +DET.CLDC.CLKHI17 5.0; +DET.CLDC.CLKHIRA17 "[0.0, 5.0]"; + +DET.CLDC.CLKLONM17 "Shutter_LEDLo"; +DET.CLDC.CLKLO17 0.0; +DET.CLDC.CLKLORA17 "[0.0, 5.0]"; + +DET.CLDC.CLKHINM18 "BuzzerHi"; +DET.CLDC.CLKHI18 5.0; +DET.CLDC.CLKHIRA18 "[0.0, 5.0]"; + +DET.CLDC.CLKLONM18 "BuzzerLo"; +DET.CLDC.CLKLO18 0.0; +DET.CLDC.CLKLORA18 "[0.0, 5.0]"; + +DET.CLDC.DCOFF 2.0; # Global DC voltage offset + +# DC Voltages: +DET.CLDC.DCNM1 "RDR"; +DET.CLDC.DC1 11.5; +DET.CLDC.DCRA1 "[0.0, 15.0]"; + +DET.CLDC.DCNM2 "JDR"; +DET.CLDC.DC2 25.0; +DET.CLDC.DCRA2 "[0.0, 28.0]"; + +DET.CLDC.DCNM3 "JDL"; +DET.CLDC.DC3 25.0; +DET.CLDC.DCRA3 "[0.0, 28.0]"; + +DET.CLDC.DCNM4 "DDLR"; +DET.CLDC.DC4 18.5; +DET.CLDC.DCRA4 "[0.0, 20.0]"; + +DET.CLDC.DCNM5 "RDL"; +DET.CLDC.DC5 11.5; +DET.CLDC.DCRA5 "[0.0, 15.0]"; + +DET.CLDC.DCNM6 "ODL"; +DET.CLDC.DC6 23.0; +DET.CLDC.DCRA6 "[0.0, 28.0]"; + +DET.CLDC.DCNM7 "ODR"; +DET.CLDC.DC7 23.0; +DET.CLDC.DCRA7 "[0.0, 28.0]"; + +DET.CLDC.DCNM8 "DC_8"; +DET.CLDC.DC8 0.0; +DET.CLDC.DCRA8 "[-5.0, 5.0]"; + +DET.CLDC.DCNM9 "DC_9"; +DET.CLDC.DC9 0.0; +DET.CLDC.DCRA9 "[0.0, 15.0]"; + +DET.CLDC.DCNM10 "DC_10"; +DET.CLDC.DC10 0.0; +DET.CLDC.DCRA10 "[0.0, 26.0]"; + +DET.CLDC.DCNM11 "DC_11"; +DET.CLDC.DC11 0.0; +DET.CLDC.DCRA11 "[0.0, 28.0]"; + +DET.CLDC.DCNM12 "DC_12"; +DET.CLDC.DC12 0.0; +DET.CLDC.DCRA12 "[0.0, 20.0]"; + +DET.CLDC.DCNM13 "DC_13"; +DET.CLDC.DC13 0.0; +DET.CLDC.DCRA13 "[0.0, 15.0]"; + +DET.CLDC.DCNM14 "DC_14"; +DET.CLDC.DC14 0.0; +DET.CLDC.DCRA14 "[0.0, 15.0]"; + +DET.CLDC.DCNM15 "DC_15"; +DET.CLDC.DC15 0.0; +DET.CLDC.DCRA15 "[-5.0, 20.0]"; + +DET.CLDC.DCNM16 "DC_16"; +DET.CLDC.DC16 0.0; +DET.CLDC.DCRA16 "[-5.0, 20.0]"; + +DET.CLDC.DCNM17 "OG2R"; +DET.CLDC.DC17 -2.5; +DET.CLDC.DCRA17 "[-5.0, 20.0]"; + +DET.CLDC.DCNM18 "OG1R"; +DET.CLDC.DC18 -3.5; +DET.CLDC.DCRA18 "[-5.0, 0.0]"; + +DET.CLDC.DCNM19 "OG2L"; +DET.CLDC.DC19 -2.5; +DET.CLDC.DCRA19 "[-5.0, 20.0]"; + +DET.CLDC.DCNM20 "OG1L"; +DET.CLDC.DC20 -3.5; +DET.CLDC.DCRA20 "[-5.0, 0.0]"; + +DET.CLDC.DCNM21 "VID-OFF-Ch1"; +DET.CLDC.DC21 3.55; +DET.CLDC.DCRA21 "[-5.0, 5.0]"; +DET.CLDC.DCDAC21 56; +DET.CLDC.DCTEL21 -1; + +DET.CLDC.DCNM22 "VID-OFF-Ch2"; +DET.CLDC.DC22 3.76; +DET.CLDC.DCRA22 "[-5.0, 5.0]"; +DET.CLDC.DCDAC22 57; +DET.CLDC.DCTEL22 -1; + +DET.CLDC.DCNM25 "VID-OFF-Ch3"; +DET.CLDC.DC25 4.10; +DET.CLDC.DCRA25 "[-5.0, 5.0]"; +DET.CLDC.DCDAC25 60; +DET.CLDC.DCTEL25 -1; + +DET.CLDC.DCNM26 "VID-OFF-Ch4"; +DET.CLDC.DC26 3.33; +DET.CLDC.DCRA26 "[-5.0, 5.0]"; +DET.CLDC.DCDAC26 61; +DET.CLDC.DCTEL26 -1; + diff --git a/DCS/sxccd/config/sxccdCAMERA.cfg b/DCS/sxccd/config/sxccdCAMERA.cfg new file mode 100644 index 0000000..20daaef --- /dev/null +++ b/DCS/sxccd/config/sxccdCAMERA.cfg @@ -0,0 +1,877 @@ +#****************************************************************************** +# E.S.O. - VLT project +# +# "@(#) $Id: sxccdCAMERA.cfg 246635 2017-07-04 13:43:11Z dricci $" +# +# who when what +# -------- ---------- ---------------------------------------------- +# bsalasni 2022-07-06 DET.CON.LENV set to wsxccd +# dricci 2021-04-07 Merged with VIS team version. +# dricci 2021-01-28 Formatted. +# rcosenti 2019-10-23 Modified for SOXS. +# dricci 2017-07-04 Adapted from Template file +# + +PAF.HDR.START; # Marks start of header +PAF.TYPE "Configuration"; # Type of parameter file +PAF.ID ""; # Parameter file ID +PAF.NAME "sxccdCAMERA"; # Parameter file NAME +PAF.DESC "NGCOPT Camera configuration"; +PAF.CRTE.NAME "D. Ricci"; # Who created par. file +PAF.CRTE.DAYTIM "2017-07-04 13:43:24"; # Date and time of creation +PAF.LCHG.NAME "D. Ricci"; # Who did last change +PAF.LCHG.DAYTIM "2017-07-04 13:43:24"; # Date and time of last change +PAF.CHCK.NAME ""; # Appl. checking par. file +PAF.CHCK.DAYTIM ""; # Date and time of last check +PAF.CHCK.CHECKSUM ""; # Parameter file checksum +PAF.HDR.END + + +#################################################################### +# Global info +#################################################################### + +DET.ID "SOXS-1_BOARD"; # Detector system Id +DET.NAME "SOXS-VIS"; # Name of detector system +DET.CHIPS 1; # Number of chips in the mosaic +BITPIX 16; # Number of bits per pixel + +CTYPE1 "PIXEL"; # Pixel coordinate system +CRVAL1 1; # Coordinate value of ref. pixel +CTYPE2 "PIXEL"; # Pixel coordinate system +CRVAL2 1; # Coordinate value of ref. pixel + + +#################################################################### +# DET configuration +#################################################################### + +DET.CON.INSTANCE "sxccd"; # Instance label +DET.CON.ENV "$RTAPENV"; # Local online database environment +DET.CON.LENV "wsxccd"; # Remote online database environment +DET.CON.OPMODE "HW-SIM"; # Operational mode +DET.CON.AUTONLIN F; # Go online after start +DET.CON.DICT "NGCDCS NGCCON"; # Dictionary list +DET.CON.XTERM F; # Start in new terminal +DET.CON.LOG 0; # Logging level +DET.CON.GUI "ngcouiPanel"; # GUI Name +DET.CON.SYSCFG "sxccdDCS.cfg"; # HW system configuration file +DET.SOFW.DETMOD "290150"; # Instrument module version +# DET.SOFW.DETMOD "NGC_INS_CFG"; # Instrument module version +#DET.FRAM.NUMBLOCK 26; # Default number of FITS-header blocks +DET.SEQ.TIMESIM F; # Sequence time simulation +DET.RTD1.REFRESH F; # Refresh rtd before getting a new image + +DET.DEV1.BOARDS 1; # Number of boards +DET.DEV1.BOARD1.TYPE "FEB"; # Board type +DET.DEV1.BOARD1.VERSION "1"; # Board version (sub-type) + + +#################################################################### +# Periodic Wipe +#################################################################### + +#DET.CON.PWIPE T; # Autostart periodic wipe +#DET.WIPE.PRGCONT T; # Continuous periodic wipe sequence +#DET.WIPE.CLKFIL1 "xxx.bclk"; # Name of SEQi CLKFILE for wipe +#DET.WIPE.PRGFIL1 "xxx.seq"; # Name of SEQi PRGFILE for wipe + + +#################################################################### +# CHIP description +#################################################################### + +# +# CHIP1 +# + +DET.CHIP1.ID "CCD44-82"; # Detector chip identification +DET.CHIP1.NAME "CHIP1"; # Detector chip name +DET.CHIP1.DATE "2021-01-04"; # Date of installation [YYYY-MM-DD] +DET.CHIP1.NX 2048; # Physical active pixels in X +DET.CHIP1.NY 4096; # Physical active pixels in Y +DET.CHIP1.PRSCX 50; # Physical prescan pixels in X +DET.CHIP1.PRSCY 0; # Physical prescan pixels in Y +DET.CHIP1.OVSCX 50; # Physical overscan pixels in X +DET.CHIP1.OVSCY 0; # Physical overscan pixels in Y +DET.CHIP1.PSZX 15.0; # Size of pixel in X (mu) +DET.CHIP1.PSZY 15.0; # Size of pixel in Y (mu) +DET.CHIP1.OUTPUTS 4; # Number of outputs per chip + +DET.CHIP1.X 1; # X location in array +DET.CHIP1.Y 1; # Y location in array +DET.CHIP1.XGAP 0.0; # Gap between chips along x (mu) +DET.CHIP1.YGAP 0.0; # Gap between chips along Y (mu) +DET.CHIP1.RGAP 0.0; # Angle of gap between chips +DET.CHIP1.INDEX 1; # Chip index +DET.CHIP1.TYPE CCD; # The Type of detector chip +DET.CHIP1.PXSPACE 1E-6; # Pixel-Pixel Spacing + +DET.CHIP1.OUT1.NAME "NO1"; # Description of output +DET.CHIP1.OUT1.INDEX 1; # Output index +DET.CHIP1.OUT1.ID "L"; # Output ID as from manufacturer +DET.CHIP1.OUT1.X 1; # X location of output +DET.CHIP1.OUT1.Y 1; # Y location of output +DET.CHIP1.OUT1.READX -1; # Horizontal readout direction +DET.CHIP1.OUT1.READY -1; # Vertical readout direction + +DET.CHIP1.OUT2.NAME "NO2"; # Description of output +DET.CHIP1.OUT2.INDEX 2; # Output index +DET.CHIP1.OUT2.ID "R"; # Output ID as from manufacturer +DET.CHIP1.OUT2.X 2048; # X location of output +DET.CHIP1.OUT2.Y 1; # Y location of output +DET.CHIP1.OUT2.READX 1; # Horizontal readout direction +DET.CHIP1.OUT2.READY -1; # Vertical readout direction + +DET.CHIP1.OUT3.NAME "NO3"; # Description of output +DET.CHIP1.OUT3.INDEX 3; # Output index +DET.CHIP1.OUT3.ID "R1"; # Output ID as from manufacturer +DET.CHIP1.OUT3.X 2048; # X location of output +DET.CHIP1.OUT3.Y 4096; # Y location of output +DET.CHIP1.OUT3.READX 1; # Horizontal readout direction +DET.CHIP1.OUT3.READY 1; # Vertical readout direction + +DET.CHIP1.OUT4.NAME "NO4"; # Description of output +DET.CHIP1.OUT4.INDEX 4; # Output index +DET.CHIP1.OUT4.ID "L1"; # Output ID as from manufacturer +DET.CHIP1.OUT4.X 1; # X location of output +DET.CHIP1.OUT4.Y 4096; # Y location of output +DET.CHIP1.OUT4.READX -1; # Horizontal readout direction +DET.CHIP1.OUT4.READY 1; # Vertical readout direction + +DET.CHIP1.CRPIX1 1; # Ref. pixel in axis direction +DET.CHIP1.CRPIX2 1; # Ref. pixel in axis direction + + +#################################################################### +# MODE description +#################################################################### + +#------------------------------------------------------------------- +# DELIVERED MODES +#------------------------------------------------------------------- + + +# +# MODE1: 1 port Right Gain 2e/ADU +# + +DET.MODE1.NAME "CCD x 1 Out Right G8"; # Exposure mode name +DET.MODE1.DESC "CCD 1 Out Right G8"; # Exposure mode description +DET.MODE1.GAIN1 8; # Gain used +DET.MODE1.GAIN2 8; # Gain used +DET.MODE1.GAIN3 8; # Gain used +DET.MODE1.GAIN4 8; # Gain used +DET.MODE1.BNDWTH1 1; # Bandwidth used +DET.MODE1.BNDWTH2 1; # Bandwidth used +DET.MODE1.BNDWTH3 1; # Bandwidth used +DET.MODE1.BNDWTH4 1; # Bandwidth used +#DET.MODE1.SHODEL 2000; # [ms] Delay before opening shutter +#DET.MODE1.SHDEL 2000; # [ms] Delay before closing shutter + +DET.MODE1.WREP 1; # Wipe sequence repetition number +DET.MODE1.WCLDFIL1 "soxs.v"; # Name of CLDCi FILE for wipe +DET.MODE1.WCLKFIL1 "e2v4482-soxs-R.bclk"; # Name of SEQi CLKFILE for wipe +DET.MODE1.WPRGFIL1 "e2v4482-soxs-box3.seq"; # Name of SEQi PRGFILE for wipe + +DET.MODE1.PREP 1; # Preint sequence repetition number +DET.MODE1.PCLDFIL1 ""; # Name of CLDCi FILE for preintegration +DET.MODE1.PCLKFIL1 ""; # Name of SEQi CLKFILE for preintegration +DET.MODE1.PPRGFIL1 ""; # Name of SEQi PRGFILE for preintegration + +DET.MODE1.RREP 1; # Readout sequence repetition number +DET.MODE1.RCLDFIL1 ""; # Name of CLDCi FILE for readout +DET.MODE1.RCLKFIL1 ""; # Name of SEQi CLKFILE for readout +DET.MODE1.RPRGFIL1 ""; # Name of SEQi PRGFILE for readout + +DET.MODE1.RTYPE "SlowMosaic"; # Readout type: Standard or FastACS + +DET.MODE1.ADC1.ADCS "4"; # Outputs used for readout +DET.MODE1.OUTPUTS 1; # Number of outputs used for readout + +DET.MODE1.OUT1.CHIP 1; # Index of chip the output belongs to +DET.MODE1.OUT1.INDEX 1; # Output index on the chip +DET.MODE1.OUT1.XIMA 1; # Horizontal location of data in image +DET.MODE1.OUT1.YIMA 1; # Vertical location of data in image +DET.MODE1.OUT1.NX 2048; # Output data pixels in X +DET.MODE1.OUT1.NY 4096; # Output data pixels in Y +DET.MODE1.OUT1.PRSCX 50; # Output prescan pixels in X +DET.MODE1.OUT1.PRSCY 0; # Output prescan pixels in Y +DET.MODE1.OUT1.OVSCX 0; # Output overscan pixels in X +DET.MODE1.OUT1.OVSCY 0; # Output overscan pixels in Y +DET.MODE1.OUT1.GAIN 1.15; # Conversion from electrons to ADU +DET.MODE1.OUT1.RON 2.08; # Readout noise per output (e-) + +DET.MODE1.OUT2.CHIP 1; # Index of chip the output belongs to +DET.MODE1.OUT2.INDEX 2; # Output index on the chip +DET.MODE1.OUT2.XIMA 2; # Horizontal location of data in image +DET.MODE1.OUT2.YIMA 1; # Vertical location of data in image +DET.MODE1.OUT2.GAIN 1.14; # Conversion from electrons to ADU +DET.MODE1.OUT2.RON 2.05; # Readout noise per output (e-) + +DET.MODE1.OUT3.CHIP 1; # Index of chip the output belongs to +DET.MODE1.OUT3.INDEX 3; # Output index on the chip +DET.MODE1.OUT3.XIMA 2; # Horizontal location of data in image +DET.MODE1.OUT3.YIMA 2; # Vertical location of data in image +DET.MODE1.OUT3.GAIN 1.19; # Conversion from electrons to ADU +DET.MODE1.OUT3.RON 2.17; # Readout noise per output (e-) + +DET.MODE1.OUT4.CHIP 1; # Index of chip the output belongs to +DET.MODE1.OUT4.INDEX 4; # Output index on the chip +DET.MODE1.OUT4.XIMA 1; # Horizontal location of data in image +DET.MODE1.OUT4.YIMA 2; # Vertical location of data in image +DET.MODE1.OUT4.GAIN 1.20; # Conversion from electrons to ADU +DET.MODE1.OUT4.RON 2.29; # Readout noise per output (e-) + +DET.MODE1.WINSUP "T"; # windowing enabled + +# +# MODE2: 1 Ports +# + +DET.MODE2.NAME "CCD x 1 Out Left G8"; # Exposure mode name +DET.MODE2.DESC "CCD 1 Out Left G8"; # Exposure mode description +DET.MODE2.GAIN1 8; # Gain used +DET.MODE2.GAIN2 8; # Gain used +DET.MODE2.GAIN3 8; # Gain used +DET.MODE2.GAIN4 8; # Gain used +DET.MODE2.BNDWTH1 1; # Bandwidth used +DET.MODE2.BNDWTH2 1; # Bandwidth used +DET.MODE2.BNDWTH3 1; # Bandwidth used +DET.MODE2.BNDWTH4 1; # Bandwidth used +#DET.MODE2.SHODEL 2000; # [ms] Delay before opening shutter +#DET.MODE2.SHDEL 2000; # [ms] Delay before closing shutter + +DET.MODE2.WREP 1; # Wipe sequence repetition number +DET.MODE2.WCLDFIL1 "soxs.v"; # Name of CLDCi FILE for wipe +DET.MODE2.WCLKFIL1 "e2v4482-soxs-L.bclk"; # Name of SEQi CLKFILE for wipe +DET.MODE2.WPRGFIL1 "e2v4482-soxs-1.seq"; # Name of SEQi PRGFILE for wipe + +DET.MODE2.PREP 1; # Preint sequence repetition number +DET.MODE2.PCLDFIL1 ""; # Name of CLDCi FILE for preintegration +DET.MODE2.PCLKFIL1 ""; # Name of SEQi CLKFILE for preintegration +DET.MODE2.PPRGFIL1 ""; # Name of SEQi PRGFILE for preintegration + +DET.MODE2.RREP 1; # Readout sequence repetition number +DET.MODE2.RCLDFIL1 ""; # Name of CLDCi FILE for readout +DET.MODE2.RCLKFIL1 ""; # Name of SEQi CLKFILE for readout +DET.MODE2.RPRGFIL1 ""; # Name of SEQi PRGFILE for readout + +DET.MODE2.RTYPE "SlowMosaic"; # Readout type: Standard or FastACS + +DET.MODE2.ADC1.ADCS "3"; # Outputs used for readout +DET.MODE2.OUTPUTS 1; # Number of outputs used for readout + +DET.MODE2.OUT1.CHIP 1; # Index of chip the output belongs to +DET.MODE2.OUT1.INDEX 1; # Output index on the chip +DET.MODE2.OUT1.XIMA 1; # Horizontal location of data in image +DET.MODE2.OUT1.YIMA 1; # Vertical location of data in image +DET.MODE2.OUT1.NX 2048; # Output data pixels in X +DET.MODE2.OUT1.NY 4096; # Output data pixels in Y +DET.MODE2.OUT1.PRSCX 50; # Output prescan pixels in X +DET.MODE2.OUT1.PRSCY 0; # Output prescan pixels in Y +DET.MODE2.OUT1.OVSCX 0; # Output overscan pixels in X +DET.MODE2.OUT1.OVSCY 0; # Output overscan pixels in Y +DET.MODE2.OUT1.GAIN 1.15; # Conversion from electrons to ADU +DET.MODE2.OUT1.RON 2.08; # Readout noise per output (e-) + +DET.MODE2.OUT2.CHIP 1; # Index of chip the output belongs to +DET.MODE2.OUT2.INDEX 2; # Output index on the chip +DET.MODE2.OUT2.XIMA 2; # Horizontal location of data in image +DET.MODE2.OUT2.YIMA 1; # Vertical location of data in image +DET.MODE2.OUT2.GAIN 1.14; # Conversion from electrons to ADU +DET.MODE2.OUT2.RON 2.05; # Readout noise per output (e-) + +DET.MODE2.OUT3.CHIP 1; # Index of chip the output belongs to +DET.MODE2.OUT3.INDEX 3; # Output index on the chip +DET.MODE2.OUT3.XIMA 2; # Horizontal location of data in image +DET.MODE2.OUT3.YIMA 2; # Vertical location of data in image +DET.MODE2.OUT3.GAIN 1.19; # Conversion from electrons to ADU +DET.MODE2.OUT3.RON 2.17; # Readout noise per output (e-) + +DET.MODE2.OUT4.CHIP 1; # Index of chip the output belongs to +DET.MODE2.OUT4.INDEX 4; # Output index on the chip +DET.MODE2.OUT4.XIMA 1; # Horizontal location of data in image +DET.MODE2.OUT4.YIMA 2; # Vertical location of data in image +DET.MODE2.OUT4.GAIN 1.20; # Conversion from electrons to ADU +DET.MODE2.OUT4.RON 2.29; # Readout noise per output (e-) + +# +# MODE3: 2 Ports +# + +DET.MODE3.NAME "CCD x 2 OUT G8"; # Exposure mode name +DET.MODE3.DESC "CCD 2 OUT G8"; # Exposure mode description +DET.MODE3.GAIN1 8; # Gain used +DET.MODE3.GAIN2 8; # Gain used +DET.MODE3.GAIN3 8; # Gain used +DET.MODE3.GAIN4 8; # Gain used +DET.MODE3.BNDWTH1 1; # Bandwidth used +DET.MODE3.BNDWTH2 1; # Bandwidth used +DET.MODE3.BNDWTH3 1; # Bandwidth used +DET.MODE3.BNDWTH4 1; # Bandwidth used +#DET.MODE3.SHODEL 2000; # [ms] Delay before opening shutter +#DET.MODE3.SHDEL 2000; # [ms] Delay before closing shutter + +DET.MODE3.WREP 1; # Wipe sequence repetition number +DET.MODE3.WCLDFIL1 "soxs.v"; # Name of CLDCi FILE for wipe +DET.MODE3.WCLKFIL1 "e2v4482-soxs-LR.bclk"; # Name of SEQi CLKFILE for wipe +DET.MODE3.WPRGFIL1 "e2v4482-soxs-1.seq"; # Name of SEQi PRGFILE for wipe + +DET.MODE3.PREP 1; # Preint sequence repetition number +DET.MODE3.PCLDFIL1 ""; # Name of CLDCi FILE for preintegration +DET.MODE3.PCLKFIL1 ""; # Name of SEQi CLKFILE for preintegration +DET.MODE3.PPRGFIL1 ""; # Name of SEQi PRGFILE for preintegration + +DET.MODE3.RREP 1; # Readout sequence repetition number +DET.MODE3.RCLDFIL1 ""; # Name of CLDCi FILE for readout +DET.MODE3.RCLKFIL1 ""; # Name of SEQi CLKFILE for readout +DET.MODE3.RPRGFIL1 ""; # Name of SEQi PRGFILE for readout + +DET.MODE3.RTYPE "SlowMosaic"; # Readout type: Standard or FastACS + +DET.MODE3.ADC1.ADCS "3,4"; # Outputs used for readout +DET.MODE3.OUTPUTS 2; # Number of outputs used for readout + +DET.MODE3.OUT1.CHIP 1; # Index of chip the output belongs to +DET.MODE3.OUT1.INDEX 1; # Output index on the chip +DET.MODE3.OUT1.XIMA 1; # Horizontal location of data in image +DET.MODE3.OUT1.YIMA 1; # Vertical location of data in image +DET.MODE3.OUT1.NX 1024; # Output data pixels in X +DET.MODE3.OUT1.NY 4096; # Output data pixels in Y +DET.MODE3.OUT1.PRSCX 50; # Output prescan pixels in X +DET.MODE3.OUT1.PRSCY 0; # Output prescan pixels in Y +DET.MODE3.OUT1.OVSCX 0; # Output overscan pixels in X +DET.MODE3.OUT1.OVSCY 0; # Output overscan pixels in Y +DET.MODE3.OUT1.GAIN 1.15; # Conversion from electrons to ADU +DET.MODE3.OUT1.RON 2.08; # Readout noise per output (e-) + +DET.MODE3.OUT2.CHIP 1; # Index of chip the output belongs to +DET.MODE3.OUT2.INDEX 2; # Output index on the chip +DET.MODE3.OUT2.XIMA 2; # Horizontal location of data in image +DET.MODE3.OUT2.YIMA 1; # Vertical location of data in image +DET.MODE3.OUT2.GAIN 1.14; # Conversion from electrons to ADU +DET.MODE3.OUT2.RON 2.05; # Readout noise per output (e-) + +DET.MODE3.OUT3.CHIP 1; # Index of chip the output belongs to +DET.MODE3.OUT3.INDEX 3; # Output index on the chip +DET.MODE3.OUT3.XIMA 2; # Horizontal location of data in image +DET.MODE3.OUT3.YIMA 2; # Vertical location of data in image +DET.MODE3.OUT3.GAIN 1.19; # Conversion from electrons to ADU +DET.MODE3.OUT3.RON 2.17; # Readout noise per output (e-) + +DET.MODE3.OUT4.CHIP 1; # Index of chip the output belongs to +DET.MODE3.OUT4.INDEX 4; # Output index on the chip +DET.MODE3.OUT4.XIMA 1; # Horizontal location of data in image +DET.MODE3.OUT4.YIMA 2; # Vertical location of data in image +DET.MODE3.OUT4.GAIN 1.20; # Conversion from electrons to ADU +DET.MODE3.OUT4.RON 2.29; # Readout noise per output (e-) + +# +# MODE4: 2 Ports +# + +DET.MODE4.NAME "CCD x 2 OUT 5"; # Exposure mode name +DET.MODE4.DESC "CCD 2 OUT 5 "; # Exposure mode description +DET.MODE4.GAIN1 0; # Gain used +DET.MODE4.GAIN2 0; # Gain used +DET.MODE4.GAIN3 0; # Gain used +DET.MODE4.GAIN4 0; # Gain used +DET.MODE4.BNDWTH1 5; # Bandwidth used +DET.MODE4.BNDWTH2 5; # Bandwidth used +DET.MODE4.BNDWTH3 5; # Bandwidth used +DET.MODE4.BNDWTH4 5; # Bandwidth used +#DET.MODE4.SHODEL 2000; # [ms] Delay before opening shutter +#DET.MODE4.SHDEL 2000; # [ms] Delay before closing shutter + +DET.MODE4.WREP 1; # Wipe sequence repetition number +DET.MODE4.WCLDFIL1 "soxs.v"; # Name of CLDCi FILE for wipe +DET.MODE4.WCLKFIL1 "e2v4482-soxs-LR.bclk"; # Name of SEQi CLKFILE for wipe +DET.MODE4.WPRGFIL1 "e2v4482-soxs-5.seq"; # Name of SEQi PRGFILE for wipe + +DET.MODE4.PREP 1; # Preint sequence repetition number +DET.MODE4.PCLDFIL1 ""; # Name of CLDCi FILE for preintegration +DET.MODE4.PCLKFIL1 ""; # Name of SEQi CLKFILE for preintegration +DET.MODE4.PPRGFIL1 ""; # Name of SEQi PRGFILE for preintegration + +DET.MODE4.RREP 1; # Readout sequence repetition number +DET.MODE4.RCLDFIL1 ""; # Name of CLDCi FILE for readout +DET.MODE4.RCLKFIL1 ""; # Name of SEQi CLKFILE for readout +DET.MODE4.RPRGFIL1 ""; # Name of SEQi PRGFILE for readout + +DET.MODE4.RTYPE "SlowMosaic"; # Readout type: Standard or FastACS + +DET.MODE4.ADC1.ADCS "3,4"; # Outputs used for readout +DET.MODE4.OUTPUTS 2; # Number of outputs used for readout + +DET.MODE4.OUT1.CHIP 1; # Index of chip the output belongs to +DET.MODE4.OUT1.INDEX 1; # Output index on the chip +DET.MODE4.OUT1.XIMA 1; # Horizontal location of data in image +DET.MODE4.OUT1.YIMA 1; # Vertical location of data in image +DET.MODE4.OUT1.NX 1024; # Output data pixels in X +DET.MODE4.OUT1.NY 4096; # Output data pixels in Y +DET.MODE4.OUT1.PRSCX 50; # Output prescan pixels in X +DET.MODE4.OUT1.PRSCY 0; # Output prescan pixels in Y +DET.MODE4.OUT1.OVSCX 0; # Output overscan pixels in X +DET.MODE4.OUT1.OVSCY 0; # Output overscan pixels in Y +DET.MODE4.OUT1.GAIN 1.15; # Conversion from electrons to ADU +DET.MODE4.OUT1.RON 2.08; # Readout noise per output (e-) + +DET.MODE4.OUT2.CHIP 1; # Index of chip the output belongs to +DET.MODE4.OUT2.INDEX 2; # Output index on the chip +DET.MODE4.OUT2.XIMA 2; # Horizontal location of data in image +DET.MODE4.OUT2.YIMA 1; # Vertical location of data in image +DET.MODE4.OUT2.GAIN 1.14; # Conversion from electrons to ADU +DET.MODE4.OUT2.RON 2.05; # Readout noise per output (e-) + +DET.MODE4.OUT3.CHIP 1; # Index of chip the output belongs to +DET.MODE4.OUT3.INDEX 3; # Output index on the chip +DET.MODE4.OUT3.XIMA 2; # Horizontal location of data in image +DET.MODE4.OUT3.YIMA 2; # Vertical location of data in image +DET.MODE4.OUT3.GAIN 1.19; # Conversion from electrons to ADU +DET.MODE4.OUT3.RON 2.17; # Readout noise per output (e-) + +DET.MODE4.OUT4.CHIP 1; # Index of chip the output belongs to +DET.MODE4.OUT4.INDEX 4; # Output index on the chip +DET.MODE4.OUT4.XIMA 1; # Horizontal location of data in image +DET.MODE4.OUT4.YIMA 2; # Vertical location of data in image +DET.MODE4.OUT4.GAIN 1.20; # Conversion from electrons to ADU +DET.MODE4.OUT4.RON 2.29; # Readout noise per output (e-) + +# +# MODE5: 2 Ports +# + +DET.MODE5.NAME "CCD x 2 OUT 10 G0"; # Exposure mode name +DET.MODE5.DESC "CCD 2 OUT 10 G0"; # Exposure mode description +DET.MODE5.GAIN1 0; # Gain used +DET.MODE5.GAIN2 0; # Gain used +DET.MODE5.GAIN3 0; # Gain used +DET.MODE5.GAIN4 0; # Gain used +DET.MODE5.BNDWTH1 11; # Bandwidth used +DET.MODE5.BNDWTH2 11; # Bandwidth used +DET.MODE5.BNDWTH3 11; # Bandwidth used +DET.MODE5.BNDWTH4 11; # Bandwidth used +#DET.MODE5.SHODEL 2000; # [ms] Delay before opening shutter +#DET.MODE5.SHDEL 2000; # [ms] Delay before closing shutter + +DET.MODE5.WREP 1; # Wipe sequence repetition number +DET.MODE5.WCLDFIL1 "soxs.v"; # Name of CLDCi FILE for wipe +DET.MODE5.WCLKFIL1 "e2v4482-soxs-LR.bclk"; # Name of SEQi CLKFILE for wipe +DET.MODE5.WPRGFIL1 "e2v4482-soxs-10.seq"; # Name of SEQi PRGFILE for wipe + +DET.MODE5.PREP 1; # Preint sequence repetition number +DET.MODE5.PCLDFIL1 ""; # Name of CLDCi FILE for preintegration +DET.MODE5.PCLKFIL1 ""; # Name of SEQi CLKFILE for preintegration +DET.MODE5.PPRGFIL1 ""; # Name of SEQi PRGFILE for preintegration + +DET.MODE5.RREP 1; # Readout sequence repetition number +DET.MODE5.RCLDFIL1 ""; # Name of CLDCi FILE for readout +DET.MODE5.RCLKFIL1 ""; # Name of SEQi CLKFILE for readout +DET.MODE5.RPRGFIL1 ""; # Name of SEQi PRGFILE for readout + +DET.MODE5.RTYPE "SlowMosaic"; # Readout type: Standard or FastACS + +DET.MODE5.ADC1.ADCS "3,4"; # Outputs used for readout +DET.MODE5.OUTPUTS 2; # Number of outputs used for readout + +DET.MODE5.OUT1.CHIP 1; # Index of chip the output belongs to +DET.MODE5.OUT1.INDEX 1; # Output index on the chip +DET.MODE5.OUT1.XIMA 1; # Horizontal location of data in image +DET.MODE5.OUT1.YIMA 1; # Vertical location of data in image +DET.MODE5.OUT1.NX 1024; # Output data pixels in X +DET.MODE5.OUT1.NY 4096; # Output data pixels in Y +DET.MODE5.OUT1.PRSCX 50; # Output prescan pixels in X +DET.MODE5.OUT1.PRSCY 0; # Output prescan pixels in Y +DET.MODE5.OUT1.OVSCX 0; # Output overscan pixels in X +DET.MODE5.OUT1.OVSCY 0; # Output overscan pixels in Y +DET.MODE5.OUT1.GAIN 1.15; # Conversion from electrons to ADU +DET.MODE5.OUT1.RON 2.08; # Readout noise per output (e-) + +DET.MODE5.OUT2.CHIP 1; # Index of chip the output belongs to +DET.MODE5.OUT2.INDEX 2; # Output index on the chip +DET.MODE5.OUT2.XIMA 2; # Horizontal location of data in image +DET.MODE5.OUT2.YIMA 1; # Vertical location of data in image +DET.MODE5.OUT2.GAIN 1.14; # Conversion from electrons to ADU +DET.MODE5.OUT2.RON 2.05; # Readout noise per output (e-) + +DET.MODE5.OUT3.CHIP 1; # Index of chip the output belongs to +DET.MODE5.OUT3.INDEX 3; # Output index on the chip +DET.MODE5.OUT3.XIMA 2; # Horizontal location of data in image +DET.MODE5.OUT3.YIMA 2; # Vertical location of data in image +DET.MODE5.OUT3.GAIN 1.19; # Conversion from electrons to ADU +DET.MODE5.OUT3.RON 2.17; # Readout noise per output (e-) + +DET.MODE5.OUT4.CHIP 1; # Index of chip the output belongs to +DET.MODE5.OUT4.INDEX 4; # Output index on the chip +DET.MODE5.OUT4.XIMA 1; # Horizontal location of data in image +DET.MODE5.OUT4.YIMA 2; # Vertical location of data in image +DET.MODE5.OUT4.GAIN 1.20; # Conversion from electrons to ADU +DET.MODE5.OUT4.RON 2.29; # Readout noise per output (e-) +# +# MODE6: 2 Ports +# +DET.MODE6.NAME "2 out gain 0 G0"; # Exposure mode name +DET.MODE6.DESC "2 out Gain 0 G0"; # Exposure mode description +DET.MODE6.GAIN1 0; # Gain used +DET.MODE6.GAIN2 0; # Gain used +DET.MODE6.GAIN3 0; # Gain used +DET.MODE6.GAIN4 0; # Gain used +DET.MODE6.BNDWTH1 1; # Bandwidth used +DET.MODE6.BNDWTH2 1; # Bandwidth used +DET.MODE6.BNDWTH3 1; # Bandwidth used +DET.MODE6.BNDWTH4 1; # Bandwidth used +#DET.MODE6.SHODEL 2000; # [ms] Delay before opening shutter +#DET.MODE6.SHDEL 2000; # [ms] Delay before closing shutter + +DET.MODE6.WREP 1; # Wipe sequence repetition number +DET.MODE6.WCLDFIL1 "soxs.v"; # Name of CLDCi FILE for wipe +DET.MODE6.WCLKFIL1 "e2v4482-soxs-LR.bclk"; # Name of SEQi CLKFILE for wipe +DET.MODE6.WPRGFIL1 "e2v4482-soxs-1.seq"; # Name of SEQi PRGFILE for wipe + +DET.MODE6.PREP 1; # Preint sequence repetition number +DET.MODE6.PCLDFIL1 ""; # Name of CLDCi FILE for preintegration +DET.MODE6.PCLKFIL1 ""; # Name of SEQi CLKFILE for preintegration +DET.MODE6.PPRGFIL1 ""; # Name of SEQi PRGFILE for preintegration + +DET.MODE6.RREP 1; # Readout sequence repetition number +DET.MODE6.RCLDFIL1 ""; # Name of CLDCi FILE for readout +DET.MODE6.RCLKFIL1 ""; # Name of SEQi CLKFILE for readout +DET.MODE6.RPRGFIL1 ""; # Name of SEQi PRGFILE for readout + +DET.MODE6.RTYPE "SlowMosaic"; # Readout type: Standard or FastACS + +DET.MODE6.ADC1.ADCS "3,4"; # Outputs used for readout +DET.MODE6.OUTPUTS 2; # Number of outputs used for readout + +DET.MODE6.OUT1.CHIP 1; # Index of chip the output belongs to +DET.MODE6.OUT1.INDEX 1; # Output index on the chip +DET.MODE6.OUT1.XIMA 1; # Horizontal location of data in image +DET.MODE6.OUT1.YIMA 1; # Vertical location of data in image +DET.MODE6.OUT1.NX 1024; # Output data pixels in X +DET.MODE6.OUT1.NY 4096; # Output data pixels in Y +DET.MODE6.OUT1.PRSCX 50; # Output prescan pixels in X +DET.MODE6.OUT1.PRSCY 0; # Output prescan pixels in Y +DET.MODE6.OUT1.OVSCX 0; # Output overscan pixels in X +DET.MODE6.OUT1.OVSCY 0; # Output overscan pixels in Y +DET.MODE6.OUT1.GAIN 1.15; # Conversion from electrons to ADU +DET.MODE6.OUT1.RON 2.08; # Readout noise per output (e-) + +DET.MODE6.OUT2.CHIP 1; # Index of chip the output belongs to +DET.MODE6.OUT2.INDEX 2; # Output index on the chip +DET.MODE6.OUT2.XIMA 2; # Horizontal location of data in image +DET.MODE6.OUT2.YIMA 1; # Vertical location of data in image +DET.MODE6.OUT2.GAIN 1.14; # Conversion from electrons to ADU +DET.MODE6.OUT2.RON 2.05; # Readout noise per output (e-) + +DET.MODE6.OUT3.CHIP 1; # Index of chip the output belongs to +DET.MODE6.OUT3.INDEX 3; # Output index on the chip +DET.MODE6.OUT3.XIMA 2; # Horizontal location of data in image +DET.MODE6.OUT3.YIMA 2; # Vertical location of data in image +DET.MODE6.OUT3.GAIN 1.19; # Conversion from electrons to ADU +DET.MODE6.OUT3.RON 2.17; # Readout noise per output (e-) + +DET.MODE6.OUT4.CHIP 1; # Index of chip the output belongs to +DET.MODE6.OUT4.INDEX 4; # Output index on the chip +DET.MODE6.OUT4.XIMA 1; # Horizontal location of data in image +DET.MODE6.OUT4.YIMA 2; # Vertical location of data in image +DET.MODE6.OUT4.GAIN 1.20; # Conversion from electrons to ADU +DET.MODE6.OUT4.RON 2.29; # Readout noise per output (e-) + +# +# MODE7: 2 Ports +# +DET.MODE7.NAME "2 Out BW G8"; # Exposure mode name +DET.MODE7.DESC "2 Out Gain 8 FBW"; # Exposure mode description +DET.MODE7.GAIN1 8; # Gain used +DET.MODE7.GAIN2 8; # Gain used +DET.MODE7.GAIN3 8; # Gain used +DET.MODE7.GAIN4 8; # Gain used +DET.MODE7.BNDWTH1 0; # Bandwidth used +DET.MODE7.BNDWTH2 0; # Bandwidth used +DET.MODE7.BNDWTH3 0; # Bandwidth used +DET.MODE7.BNDWTH4 0; # Bandwidth used +#DET.MODE7.SHODEL 2000; # [ms] Delay before opening shutter +#DET.MODE7.SHDEL 2000; # [ms] Delay before closing shutter + +DET.MODE7.WREP 1; # Wipe sequence repetition number +DET.MODE7.WCLDFIL1 "soxs.v"; # Name of CLDCi FILE for wipe +DET.MODE7.WCLKFIL1 "e2v4482-soxs-LR.bclk"; # Name of SEQi CLKFILE for wipe +DET.MODE7.WPRGFIL1 "e2v4482-soxs-1.seq"; # Name of SEQi PRGFILE for wipe + +DET.MODE7.PREP 1; # Preint sequence repetition number +DET.MODE7.PCLDFIL1 ""; # Name of CLDCi FILE for preintegration +DET.MODE7.PCLKFIL1 ""; # Name of SEQi CLKFILE for preintegration +DET.MODE7.PPRGFIL1 ""; # Name of SEQi PRGFILE for preintegration + +DET.MODE7.RREP 1; # Readout sequence repetition number +DET.MODE7.RCLDFIL1 ""; # Name of CLDCi FILE for readout +DET.MODE7.RCLKFIL1 ""; # Name of SEQi CLKFILE for readout +DET.MODE7.RPRGFIL1 ""; # Name of SEQi PRGFILE for readout + +DET.MODE7.RTYPE "SlowMosaic"; # Readout type: Standard or FastACS + +DET.MODE7.ADC1.ADCS "3,4"; # Outputs used for readout +DET.MODE7.OUTPUTS 2; # Number of outputs used for readout + +DET.MODE7.OUT1.CHIP 1; # Index of chip the output belongs to +DET.MODE7.OUT1.INDEX 1; # Output index on the chip +DET.MODE7.OUT1.XIMA 1; # Horizontal location of data in image +DET.MODE7.OUT1.YIMA 1; # Vertical location of data in image +DET.MODE7.OUT1.NX 1024; # Output data pixels in X +DET.MODE7.OUT1.NY 4096; # Output data pixels in Y +DET.MODE7.OUT1.PRSCX 50; # Output prescan pixels in X +DET.MODE7.OUT1.PRSCY 0; # Output prescan pixels in Y +DET.MODE7.OUT1.OVSCX 0; # Output overscan pixels in X +DET.MODE7.OUT1.OVSCY 0; # Output overscan pixels in Y +DET.MODE7.OUT1.GAIN 1.15; # Conversion from electrons to ADU +DET.MODE7.OUT1.RON 2.08; # Readout noise per output (e-) + +DET.MODE7.OUT2.CHIP 1; # Index of chip the output belongs to +DET.MODE7.OUT2.INDEX 2; # Output index on the chip +DET.MODE7.OUT2.XIMA 2; # Horizontal location of data in image +DET.MODE7.OUT2.YIMA 1; # Vertical location of data in image +DET.MODE7.OUT2.GAIN 1.14; # Conversion from electrons to ADU +DET.MODE7.OUT2.RON 2.05; # Readout noise per output (e-) + +DET.MODE7.OUT3.CHIP 1; # Index of chip the output belongs to +DET.MODE7.OUT3.INDEX 3; # Output index on the chip +DET.MODE7.OUT3.XIMA 2; # Horizontal location of data in image +DET.MODE7.OUT3.YIMA 2; # Vertical location of data in image +DET.MODE7.OUT3.GAIN 1.19; # Conversion from electrons to ADU +DET.MODE7.OUT3.RON 2.17; # Readout noise per output (e-) + +DET.MODE7.OUT4.CHIP 1; # Index of chip the output belongs to +DET.MODE7.OUT4.INDEX 4; # Output index on the chip +DET.MODE7.OUT4.XIMA 1; # Horizontal location of data in image +DET.MODE7.OUT4.YIMA 2; # Vertical location of data in image +DET.MODE7.OUT4.GAIN 1.20; # Conversion from electrons to ADU +DET.MODE7.OUT4.RON 2.29; # Readout noise per output (e-) + +# +# MODE8: 2 Ports +# +DET.MODE8.NAME "CCD x 2 OUT 5 G8"; # Exposure mode name +DET.MODE8.DESC "CCD 2 OUT 5 G8"; # Exposure mode description +DET.MODE8.GAIN1 8; # Gain used +DET.MODE8.GAIN2 8; # Gain used +DET.MODE8.GAIN3 8; # Gain used +DET.MODE8.GAIN4 8; # Gain used +DET.MODE8.BNDWTH1 5; # Bandwidth used +DET.MODE8.BNDWTH2 5; # Bandwidth used +DET.MODE8.BNDWTH3 5; # Bandwidth used +DET.MODE8.BNDWTH4 5; # Bandwidth used +#DET.MODE8.SHODEL 2000; # [ms] Delay before opening shutter +#DET.MODE8.SHDEL 2000; # [ms] Delay before closing shutter + +DET.MODE8.WREP 1; # Wipe sequence repetition number +DET.MODE8.WCLDFIL1 "soxs.v"; # Name of CLDCi FILE for wipe +DET.MODE8.WCLKFIL1 "e2v4482-soxs-LR.bclk"; # Name of SEQi CLKFILE for wipe +DET.MODE8.WPRGFIL1 "e2v4482-soxs-5.seq"; # Name of SEQi PRGFILE for wipe + +DET.MODE8.PREP 1; # Preint sequence repetition number +DET.MODE8.PCLDFIL1 ""; # Name of CLDCi FILE for preintegration +DET.MODE8.PCLKFIL1 ""; # Name of SEQi CLKFILE for preintegration +DET.MODE8.PPRGFIL1 ""; # Name of SEQi PRGFILE for preintegration + +DET.MODE8.RREP 1; # Readout sequence repetition number +DET.MODE8.RCLDFIL1 ""; # Name of CLDCi FILE for readout +DET.MODE8.RCLKFIL1 ""; # Name of SEQi CLKFILE for readout +DET.MODE8.RPRGFIL1 ""; # Name of SEQi PRGFILE for readout + +DET.MODE8.RTYPE "SlowMosaic"; # Readout type: Standard or FastACS + +DET.MODE8.ADC1.ADCS "3,4"; # Outputs used for readout +DET.MODE8.OUTPUTS 2; # Number of outputs used for readout + +DET.MODE8.OUT1.CHIP 1; # Index of chip the output belongs to +DET.MODE8.OUT1.INDEX 1; # Output index on the chip +DET.MODE8.OUT1.XIMA 1; # Horizontal location of data in image +DET.MODE8.OUT1.YIMA 1; # Vertical location of data in image +DET.MODE8.OUT1.NX 1024; # Output data pixels in X +DET.MODE8.OUT1.NY 4096; # Output data pixels in Y +DET.MODE8.OUT1.PRSCX 50; # Output prescan pixels in X +DET.MODE8.OUT1.PRSCY 0; # Output prescan pixels in Y +DET.MODE8.OUT1.OVSCX 0; # Output overscan pixels in X +DET.MODE8.OUT1.OVSCY 0; # Output overscan pixels in Y +DET.MODE8.OUT1.GAIN 1.15; # Conversion from electrons to ADU +DET.MODE8.OUT1.RON 2.08; # Readout noise per output (e-) + +DET.MODE8.OUT2.CHIP 1; # Index of chip the output belongs to +DET.MODE8.OUT2.INDEX 2; # Output index on the chip +DET.MODE8.OUT2.XIMA 2; # Horizontal location of data in image +DET.MODE8.OUT2.YIMA 1; # Vertical location of data in image +DET.MODE8.OUT2.GAIN 1.14; # Conversion from electrons to ADU +DET.MODE8.OUT2.RON 2.05; # Readout noise per output (e-) + +DET.MODE8.OUT3.CHIP 1; # Index of chip the output belongs to +DET.MODE8.OUT3.INDEX 3; # Output index on the chip +DET.MODE8.OUT3.XIMA 2; # Horizontal location of data in image +DET.MODE8.OUT3.YIMA 2; # Vertical location of data in image +DET.MODE8.OUT3.GAIN 1.19; # Conversion from electrons to ADU +DET.MODE8.OUT3.RON 2.17; # Readout noise per output (e-) + +DET.MODE8.OUT4.CHIP 1; # Index of chip the output belongs to +DET.MODE8.OUT4.INDEX 4; # Output index on the chip +DET.MODE8.OUT4.XIMA 1; # Horizontal location of data in image +DET.MODE8.OUT4.YIMA 2; # Vertical location of data in image +DET.MODE8.OUT4.GAIN 1.20; # Conversion from electrons to ADU +DET.MODE8.OUT4.RON 2.29; # Readout noise per output (e-) + +# +# MODE9: 2 Ports +# +DET.MODE9.NAME "CCD x 2 OUT 10 G8"; # Exposure mode name +DET.MODE9.DESC "CCD 2 OUT 10 G8"; # Exposure mode description +DET.MODE9.GAIN1 8; # Gain used +DET.MODE9.GAIN2 8; # Gain used +DET.MODE9.GAIN3 8; # Gain used +DET.MODE9.GAIN4 8; # Gain used +DET.MODE9.BNDWTH1 11; # Bandwidth used +DET.MODE9.BNDWTH2 11; # Bandwidth used +DET.MODE9.BNDWTH3 11; # Bandwidth used +DET.MODE9.BNDWTH4 11; # Bandwidth used +#DET.MODE9.SHODEL 2000; # [ms] Delay before opening shutter +#DET.MODE9.SHDEL 2000; # [ms] Delay before closing shutter + +DET.MODE9.WREP 1; # Wipe sequence repetition number +DET.MODE9.WCLDFIL1 "soxs.v"; # Name of CLDCi FILE for wipe +DET.MODE9.WCLKFIL1 "e2v4482-soxs-LR.bclk"; # Name of SEQi CLKFILE for wipe +DET.MODE9.WPRGFIL1 "e2v4482-soxs-10.seq"; # Name of SEQi PRGFILE for wipe + +DET.MODE9.PREP 1; # Preint sequence repetition number +DET.MODE9.PCLDFIL1 ""; # Name of CLDCi FILE for preintegration +DET.MODE9.PCLKFIL1 ""; # Name of SEQi CLKFILE for preintegration +DET.MODE9.PPRGFIL1 ""; # Name of SEQi PRGFILE for preintegration + +DET.MODE9.RREP 1; # Readout sequence repetition number +DET.MODE9.RCLDFIL1 ""; # Name of CLDCi FILE for readout +DET.MODE9.RCLKFIL1 ""; # Name of SEQi CLKFILE for readout +DET.MODE9.RPRGFIL1 ""; # Name of SEQi PRGFILE for readout + +DET.MODE9.RTYPE "SlowMosaic"; # Readout type: Standard or FastACS + +DET.MODE9.ADC1.ADCS "3,4"; # Outputs used for readout +DET.MODE9.OUTPUTS 2; # Number of outputs used for readout + +DET.MODE9.OUT1.CHIP 1; # Index of chip the output belongs to +DET.MODE9.OUT1.INDEX 1; # Output index on the chip +DET.MODE9.OUT1.XIMA 1; # Horizontal location of data in image +DET.MODE9.OUT1.YIMA 1; # Vertical location of data in image +DET.MODE9.OUT1.NX 1024; # Output data pixels in X +DET.MODE9.OUT1.NY 4096; # Output data pixels in Y +DET.MODE9.OUT1.PRSCX 50; # Output prescan pixels in X +DET.MODE9.OUT1.PRSCY 0; # Output prescan pixels in Y +DET.MODE9.OUT1.OVSCX 0; # Output overscan pixels in X +DET.MODE9.OUT1.OVSCY 0; # Output overscan pixels in Y +DET.MODE9.OUT1.GAIN 1.15; # Conversion from electrons to ADU +DET.MODE9.OUT1.RON 2.08; # Readout noise per output (e-) + +DET.MODE9.OUT2.CHIP 1; # Index of chip the output belongs to +DET.MODE9.OUT2.INDEX 2; # Output index on the chip +DET.MODE9.OUT2.XIMA 2; # Horizontal location of data in image +DET.MODE9.OUT2.YIMA 1; # Vertical location of data in image +DET.MODE9.OUT2.GAIN 1.14; # Conversion from electrons to ADU +DET.MODE9.OUT2.RON 2.05; # Readout noise per output (e-) + +DET.MODE9.OUT3.CHIP 1; # Index of chip the output belongs to +DET.MODE9.OUT3.INDEX 3; # Output index on the chip +DET.MODE9.OUT3.XIMA 2; # Horizontal location of data in image +DET.MODE9.OUT3.YIMA 2; # Vertical location of data in image +DET.MODE9.OUT3.GAIN 1.19; # Conversion from electrons to ADU +DET.MODE9.OUT3.RON 2.17; # Readout noise per output (e-) + +DET.MODE9.OUT4.CHIP 1; # Index of chip the output belongs to +DET.MODE9.OUT4.INDEX 4; # Output index on the chip +DET.MODE9.OUT4.XIMA 1; # Horizontal location of data in image +DET.MODE9.OUT4.YIMA 2; # Vertical location of data in image +DET.MODE9.OUT4.GAIN 1.20; # Conversion from electrons to ADU +DET.MODE9.OUT4.RON 2.29; # Readout noise per output (e-) + +# +# MODE10: 2 Ports +# + +DET.MODE10.NAME "TEST"; # Exposure mode name +DET.MODE10.DESC "TEST"; # Exposure mode description +DET.MODE10.GAIN1 0; # Gain used +DET.MODE10.GAIN2 0; # Gain used +DET.MODE10.GAIN3 0; # Gain used +DET.MODE10.GAIN4 0; # Gain used +DET.MODE10.BNDWTH1 5; # Bandwidth used +DET.MODE10.BNDWTH2 5; # Bandwidth used +DET.MODE10.BNDWTH3 5; # Bandwidth used +DET.MODE10.BNDWTH4 5; # Bandwidth used +#DET.MODE10.SHODEL 2000; # [ms] Delay before opening shutter +#DET.MODE10.SHDEL 2000; # [ms] Delay before closing shutter + +DET.MODE10.WREP 1; # Wipe sequence repetition number +DET.MODE10.WCLDFIL1 "soxs.v"; # Name of CLDCi FILE for wipe +DET.MODE10.WCLKFIL1 "e2v4482-soxs-LR.bclk"; # Name of SEQi CLKFILE for wipe +DET.MODE10.WPRGFIL1 "e2v4482-soxs-5a.seq"; # Name of SEQi PRGFILE for wipe + +DET.MODE10.PREP 1; # Preint sequence repetition number +DET.MODE10.PCLDFIL1 ""; # Name of CLDCi FILE for preintegration +DET.MODE10.PCLKFIL1 ""; # Name of SEQi CLKFILE for preintegration +DET.MODE10.PPRGFIL1 ""; # Name of SEQi PRGFILE for preintegration + +DET.MODE10.RREP 1; # Readout sequence repetition number +DET.MODE10.RCLDFIL1 ""; # Name of CLDCi FILE for readout +DET.MODE10.RCLKFIL1 ""; # Name of SEQi CLKFILE for readout +DET.MODE10.RPRGFIL1 ""; # Name of SEQi PRGFILE for readout + +DET.MODE10.RTYPE "SlowMosaic"; # Readout type: Standard or FastACS + +DET.MODE10.ADC1.ADCS "3,4"; # Outputs used for readout +DET.MODE10.OUTPUTS 2; # Number of outputs used for readout + +DET.MODE10.OUT1.CHIP 1; # Index of chip the output belongs to +DET.MODE10.OUT1.INDEX 1; # Output index on the chip +DET.MODE10.OUT1.XIMA 1; # Horizontal location of data in image +DET.MODE10.OUT1.YIMA 1; # Vertical location of data in image +DET.MODE10.OUT1.NX 1024; # Output data pixels in X +DET.MODE10.OUT1.NY 4096; # Output data pixels in Y +DET.MODE10.OUT1.PRSCX 50; # Output prescan pixels in X +DET.MODE10.OUT1.PRSCY 0; # Output prescan pixels in Y +DET.MODE10.OUT1.OVSCX 0; # Output overscan pixels in X +DET.MODE10.OUT1.OVSCY 0; # Output overscan pixels in Y +DET.MODE10.OUT1.GAIN 1.15; # Conversion from electrons to ADU +DET.MODE10.OUT1.RON 2.08; # Readout noise per output (e-) + +DET.MODE10.OUT2.CHIP 1; # Index of chip the output belongs to +DET.MODE10.OUT2.INDEX 2; # Output index on the chip +DET.MODE10.OUT2.XIMA 2; # Horizontal location of data in image +DET.MODE10.OUT2.YIMA 1; # Vertical location of data in image +DET.MODE10.OUT2.GAIN 1.14; # Conversion from electrons to ADU +DET.MODE10.OUT2.RON 2.05; # Readout noise per output (e-) + +DET.MODE10.OUT3.CHIP 1; # Index of chip the output belongs to +DET.MODE10.OUT3.INDEX 3; # Output index on the chip +DET.MODE10.OUT3.XIMA 2; # Horizontal location of data in image +DET.MODE10.OUT3.YIMA 2; # Vertical location of data in image +DET.MODE10.OUT3.GAIN 1.19; # Conversion from electrons to ADU +DET.MODE10.OUT3.RON 2.17; # Readout noise per output (e-) + +DET.MODE10.OUT4.CHIP 1; # Index of chip the output belongs to +DET.MODE10.OUT4.INDEX 4; # Output index on the chip +DET.MODE10.OUT4.XIMA 1; # Horizontal location of data in image +DET.MODE10.OUT4.YIMA 2; # Vertical location of data in image +DET.MODE10.OUT4.GAIN 1.20; # Conversion from electrons to ADU +DET.MODE10.OUT4.RON 2.29; # Readout noise per output (e-) + +#################################################################### +# SHUT description +#################################################################### + +DET.SHUT1.AVAIL T; # Shutter available or not +DET.SHUT1.CTRL "ngc"; # Shutter controller +DET.SHUT1.TYPE "nostatus"; # Shutter type +DET.SHUT1.ID "soxs-shutter"; # Shutter unique identifier +DET.SHUT1.OPACTHI T; # Open active high +DET.SHUT1.ERRLOW T; # Shutter fail active low +DET.SHUT1.EVTEDG1 F; # Event rising edge +DET.SHUT1.EVTEDG2 T; # Event rising edge +DET.SHUT1.EVTEDG3 F; # Event rising edge +DET.SHUT1.EVTEDG4 T; # Event rising edge + +# ___oOo___ diff --git a/DCS/sxccd/config/sxccdCAMERA_TARGET.cfg b/DCS/sxccd/config/sxccdCAMERA_TARGET.cfg new file mode 100644 index 0000000..df28a85 --- /dev/null +++ b/DCS/sxccd/config/sxccdCAMERA_TARGET.cfg @@ -0,0 +1,56 @@ +#****************************************************************************** +# E.S.O. - VLT project +# +# "@(#) $Id: sxccdCAMERA_TARGET.cfg 246635 2017-07-04 14:12:32Z dricci $" +# +# who when what +# -------- ---------- ---------------------------------------------- +# dricci 2017-07-04 adapted from Template file +# + +PAF.HDR.START; # Marks start of header +PAF.TYPE "Configuration"; # Type of parameter file +PAF.ID ""; # Parameter file ID +PAF.NAME "sxccdCAMERA_TARGET"; # Parameter file NAME +PAF.DESC "NGCOPT Camera Configuration"; +PAF.CRTE.NAME "D. Ricci"; # Who created par. file +PAF.CRTE.DAYTIM "2017-07-04 14:12:59"; # Date and time of creation +PAF.LCHG.NAME "D. Ricci"; # Who did last change +PAF.LCHG.DAYTIM "2017-07-04 14:12:59"; # Date and time of last change +PAF.CHCK.NAME ""; # Appl. checking par. file +PAF.CHCK.DAYTIM ""; # Date and time of last check +PAF.CHCK.CHECKSUM ""; # Parameter file checksum +PAF.HDR.END + + +#################################################################### +# DET configuration +#################################################################### + +#DET.CON.GUI "NONE"; # GUI Name +#DET.CON.ITCPROC ""; # Image Transfer Client + + +#################################################################### +# DCS configuration +#################################################################### + +#DET.CON.SYSCFG ""; # HW system configuration file + + +#################################################################### +# SHUT description +#################################################################### + +#DET.SHUT1.AVAIL ; # Shutter available or not +#DET.SHUT1.CTRL ""; # Shutter controller +#DET.SHUT1.TYPE ""; # Shutter type +#DET.SHUT1.MODE ""; # Shutter operational mode +#DET.SHUT1.OPACTHI ; # Open active high +#DET.SHUT1.EVTEDG1 ; # Event rising edge +#DET.SHUT1.EVTEDG2 ; # Event rising edge +#DET.SHUT1.EVTEDG3 ; # Event rising edge +#DET.SHUT1.EVTEDG4 ; # Event rising edge + + +#__oOo__ diff --git a/DCS/sxccd/config/sxccdCONFIG.cfg b/DCS/sxccd/config/sxccdCONFIG.cfg new file mode 100644 index 0000000..d95eaf0 --- /dev/null +++ b/DCS/sxccd/config/sxccdCONFIG.cfg @@ -0,0 +1,68 @@ +#****************************************************************************** +# E.S.O. - VLT project +# +# "@(#) $Id: sxccdCONFIG.cfg 193169 2009-12-21 10:03:44Z dricci $" +# +# ctoo configuration +# +# who when what +# -------- ---------- ---------------------------------------------- +# dricci 2021-04-07 Merged with VIS team version. +# dricci 2021-01-28 Formatted. +# rcosenti 2019-10-23 Modified for SOXS. +# dricci 2017-07-03 Adapted from Template file. +# + +PAF.HDR.START; # Marks start of header +PAF.TYPE "Configuration"; # Type of parameter file +PAF.ID ""; # Parameter file ID +PAF.NAME "sxccdCONFIG"; # Parameter file NAME +PAF.DESC "NGCOPT Configuration file"; +PAF.CRTE.NAME "D. Ricci"; # Who created par. file +PAF.CRTE.DAYTIM "2017-07-04 13:33:54"; # Date and time of creation +PAF.LCHG.NAME "D. Ricci"; # Who did last change +PAF.LCHG.DAYTIM "2017-07-04 13:33:54"; # Date and time of last change +PAF.CHCK.NAME ""; # Appl. checking par. file +PAF.CHCK.DAYTIM ""; # Date and time of last check +PAF.CHCK.CHECKSUM ""; # Parameter file checksum +PAF.HDR.END + +# +# GENERAL CONFIG Keywords (optional) +# ---------------------------------- +CONFIG.CON.LOG T; +CONFIG.CON.BACKUP T; +CONFIG.CON.BAKDIR $VLTDATA/config; + +# +# CAMERA CONFIG SET +# ----------------- +# +# IMPORTANT: +# Replace by hand the ngcopt string in +# CONFIG.SET1.NAME and CONFIG.SET1.FILE1 +# with tha value of ${ngcopt} +# or do it automatically by using ngcoInstall.sh +# +CONFIG.SET1.NAME "sxccd"; +CONFIG.SET1.DICT "NGCDCS NGCCON"; +CONFIG.SET1.FILE1 "sxccdDCS.cfg"; +CONFIG.SET1.PERM1 644; +CONFIG.SET1.FILE2 "sxccdCAMERA.cfg"; +CONFIG.SET1.PERM2 644; +CONFIG.SET1.FILE3 "sxccdCAMERA_$TARGET.cfg"; +CONFIG.SET1.PERM3 664; +#CONFIG.SET1.LOG T; +#CONFIG.SET1.BACKUP T; +#CONFIG.SET1.BACDIR $VLTDATA/config; + +# +# ctooConfigArchive CONFIG +# ------------------------ +CONFIG.ARCHIVE.NAME "NGCOSW"; +CONFIG.ARCHIVE.USER ""; +CONFIG.ARCHIVE.MODULE "sxngcopt"; +CONFIG.ARCHIVE.FILE1 "sxngcopt*.cfg"; +CONFIG.ARCHIVE.FILE2 "sxngcopt/*"; + +# ___oOo___ diff --git a/DCS/sxccd/config/sxccdDCS.cfg b/DCS/sxccd/config/sxccdDCS.cfg new file mode 100644 index 0000000..4edd347 --- /dev/null +++ b/DCS/sxccd/config/sxccdDCS.cfg @@ -0,0 +1,123 @@ +#****************************************************************************** +# E.S.O. - VLT project +# +# "@(#) $Id: sxccdDCS.cfg 246635 2017-07-04 13:31:37Z dricci $" +# +# who when what +# -------- ---------- ---------------------------------------------- +# dricci 2017-07-31 substituted environment name with wsxs +# dricci 2017-07-04 adapted from Template file +# + + +PAF.HDR.START; # Marks start of header +PAF.TYPE "Configuration"; # Type of parameter file +PAF.ID ""; # Parameter file ID +PAF.NAME "sxccdDCS"; # Parameter file NAME +PAF.DESC "NGCOPT Startup configuration"; +PAF.CRTE.NAME "D. Ricci"; # Who created par. file +PAF.CRTE.DAYTIM "2017-07-04 13:31:48"; # Date and time of creation +PAF.LCHG.NAME "D. Ricci"; # Who did last change +PAF.LCHG.DAYTIM "2017-07-04 13:31:48"; # Date and time of last change +PAF.CHCK.NAME ""; # Appl. checking par. file +PAF.CHCK.DAYTIM ""; # Date and time of last check +PAF.CHCK.CHECKSUM ""; # Parameter file checksum +PAF.HDR.END + + +################################################################### +# DEV description +#################################################################### + +DET.DEV1.NAME "/dev/ngc0_com"; # associated device name + + +#################################################################### +# Enable status polling +#################################################################### + +DET.CON.POLL T; # Enable sub-system status polling + + +#################################################################### +# CLDC description +#################################################################### + +DET.CLDC1.DEVIDX 1; # associated device index +DET.CLDC1.ROUTE "2"; # route to module +DET.CLDC1.NAME "CLDC 1"; # optional name +DET.CLDC1.AUTOENA F; # auto-enable at online +DET.CLDC1.DCGN 2.0; # bias gain +DET.CLDC1.CLKGN 1.0; # clock gain +DET.CLDC1.TELCLKGN 1.0; # telemetry gain +DET.CLDC1.TELDCGN 3.0; # telemetry gain +DET.CLDC1.PREAMP 4.38; # Preamplifier offset (volt) +DET.CLDC1.MARGIN 0.0; # Margin for telemetry + + +#################################################################### +# SEQ description +#################################################################### + +DET.SEQ1.DEVIDX 1; # associated device index +DET.SEQ1.ROUTE "2"; # route to module +DET.SEQ1.NAME "Sequencer 1"; # optional name +DET.SEQ1.RUNCTRL T; # Run-control active +DET.SEQ1.CVTEXT F; # External convert active + +## Added for testing: +DET.SEQ1.TIMEFAC 50; # dwell time factor +DET.SEQ1.TIMEADD 0; # dwell time add value + +#################################################################### +# ADC description +#################################################################### + +DET.ADC1.DEVIDX 1; # associated device index +DET.ADC1.ROUTE "2"; # route to module +DET.ADC1.NAME "ADC Module 1"; # optional name +DET.ADC1.OFFSET 2.0; # offset value for ADC (volt) +DET.ADC1.NUM 4; # number of ADCs on board +DET.ADC1.BITPIX 16; # ADC bits per pixel +DET.ADC1.MON1 1; # ADC channel to monitor +DET.ADC1.SIMMODE 0; # simulation level of ADCs +DET.ADC1.OPMODE 0; # operational mode of ADC-module +DET.ADC1.FIRST T; # first in chain +DET.ADC1.CONVERT2 F; # convert on strobe 2 +DET.ADC1.CONVERT1 T; # convert on strobe 1 +DET.ADC1.PKTCNT 0; # packet routing length +DET.ADC1.PKTSIZE 2; # packet size +DET.ADC1.FILTER 0; # Filter (0 = 0.5us, 1 = 5us) +DET.ADC1.CLAMP T; # Analog Clamp-and-Sample +DET.ADC1.ENABLE 4; # Number of enabled ADCs on board + + +#################################################################### +# PREAMP description +#################################################################### + +DET.PREAMP1.DEVIDX 1; # Device index +DET.PREAMP1.ROUTE "2"; # Route to module +DET.PREAMP1.NAME "Preamp 1"; # Optional module name +DET.PREAMP1.REV 3.0; # Preamp revision +# DET.PREAMP1.BUSCMD 65; # Delay the I2C bus by 1ms per bit + + +#################################################################### +# SHUT description +#################################################################### + +DET.SHUT1.DEVIDX 1; # Device index +DET.SHUT1.ROUTE "2"; # Route to module +DET.SHUT1.NAME "Shutter 1"; # Optional module name + +#################################################################### +# Set test monitor +#################################################################### + +DET.SEQ1.MON1 33; +DET.SEQ1.MON2 6; +DET.CLDC1.MON1 5; +DET.CLDC1.MON2 7; + +#__oOo__ diff --git a/DCS/sxccd/config/sxccdSetupComplete.det b/DCS/sxccd/config/sxccdSetupComplete.det new file mode 100644 index 0000000..de416d5 --- /dev/null +++ b/DCS/sxccd/config/sxccdSetupComplete.det @@ -0,0 +1,108 @@ +#************************************************************************ +# E.S.O. - VLT project +# +# "@(#) $Id: sxccdSetupComplete.det 246635 2017-07-03 14:58:58Z dricci $" +# +# who when what +# -------- -------- ---------------------------------------------- +# dricci 2017-07-03 adapted from Template file +# + +# +# PAF Header +# ---------- +PAF.HDR.START; # Start of PAF Header +PAF.TYPE "Detector Setup"; # Type of PAF +PAF.ID " "; # ID for PAF +PAF.NAME "sxccd"; # Name of PAF +PAF.DESC "SOXS VIS Test Camera"; # Short description of PAF +PAF.CRTE.NAME "D. Ricci"; # Who created par. file +PAF.CRTE.DAYTIM "2017-07-03 15:00:14"; # Date and time of creation +PAF.LCHG.NAME "D. Ricci"; # Who did last change +PAF.LCHG.DAYTIM "2017-07-03 15:00:14"; # Date and time of last change +PAF.CHCK.NAME ""; # Appl. checking par. file +PAF.CHCK.DAYTIM ""; # Date and time of last check +PAF.CHCK.CHECKSUM ""; # Parameter file checksum +PAF.HDR.END + + + +# +# Exposure definitions +# -------------------- +DET.EXP.TYPE "Normal "; # Type of frame +DET.UIT1 1.000; # user defined subintegration time +DET.MODE.CURID 1; # Used exposure mode id +DET.BINX 1; # Binning factor along X +DET.BINY 1; # Binning factor along Y + +# for loop of exposures : +DET.EXP.NREP 1; # number of repeated exposures +DET.EXP.TIMEREP 0.00; # Interval between two repeated exposures +DET.EXP.WIPETIM 0; # wipe before starting exposure in a loop + +# used if "Multiple" exposure (DET.EXP.TYPE="Multiple") : +DET.NDIT 3; # # of subintegrations +DET.UIT2 2.000; # user defined subintegration time +DET.UIT3 1.000; # user defined subintegration time +DET.READ.SHIFT1 10; # Lines shifted between integration +DET.READ.SHIFTYP "idem"; # Line shift type + +# image transmission and storage : +DET.FRAM.FILENAME "myImage.fits"; # File name for exposure data +DET.FRAM.SAMPLE 1; # Image sampling on workstation +DET.FRAM.FITSMTD 2; # FITS file storage type + +# data cube dimension : +DET.READ.NFRAM 1; # Number of buffered readouts + + +# +# Window 1 +# -------- + +# definition : +DET.WIN1.ST "F"; # If T, window enabled +DET.WIN1.STRX 200; # Lower left pixel in X +DET.WIN1.NX 20; # # of pixels along X +DET.WIN1.STRY 300; # Lower left pixel in Y +DET.WIN1.NY 20; # # of pixels along Y + +# image analysis : +DET.MINMAX "F"; # image extrema search performed +DET.RMS 0; # image RMS calculation performed +DET.CENTROID "none"; # type of centroiding calculation +DET.BACKGND 0; # sky background +DET.THRMIN 0; # lower threshold +DET.IPLLX 0; # X offset from LL for image processing +DET.IPLLY 0; # Y offset from LL for image processing +DET.IPURX 0; # X offset from UR for image processing +DET.IPURY 0; # Y offset from UR for image processing +DET.REFX 210.00; # x position of reference star for centroiding +DET.REFY 310.00; # y position of reference star for centroiding + +# +# Window 2 +# -------- + +# definition : +DET.WIN2.ST "F"; # If T, window enabled +DET.WIN2.STRX 1; # Lower left pixel in X +DET.WIN2.NX 20; # # of pixels along X +DET.WIN2.STRY 1; # Lower left pixel in Y +DET.WIN2.NY 20; # # of pixels along Y + +# image analysis : +# DET.WIN2.MINMAX "F"; # image extrema search performed +# DET.WIN2.RMS 0; # image RMS calculation performed +# DET.WIN2.CENTROID "none"; # type of centroiding calculation +# DET.WIN2.BACKGND 0; # sky background +# DET.WIN2.THRMIN 0; # lower threshold +# DET.WIN2.IPLLX 0; # X offset from LL for image processing +# DET.WIN2.IPLLY 0; # Y offset from LL for image processing +# DET.WIN2.IPURX 0; # X offset from UR for image processing +# DET.WIN2.IPURY 0; # Y offset from UR for image processing +# DET.WIN2.REFX 10.00; # x position of reference star for centroiding +# DET.WIN2.REFY 10.00; # y position of reference star for centroiding + +# --- oOo --- diff --git a/DCS/sxccd/src/Makefile b/DCS/sxccd/src/Makefile new file mode 100644 index 0000000..a54f2a5 --- /dev/null +++ b/DCS/sxccd/src/Makefile @@ -0,0 +1,201 @@ +#******************************************************************************* +# E.S.O. - VLT project +# +# "@(#) $Id: Makefile 297901 2017-05-26 17:40:15Z dricci $" +# +# Makefile of ........ +# +# who when what +# -------- ---------- ---------------------------------------------- +# mkiekebu 2009-03-03 created +# + +#******************************************************************************* +# This Makefile follows VLT Standards (see Makefile(5) for more). +#******************************************************************************* +# REMARKS +# None +#------------------------------------------------------------------------ +#CONFIG_DIR = $(INS_ROOT)/SYSTEM/COMMON/CONFIGFILES/ +CAMERANAME=sxccd + +# +# user definable C-compilation flags +#USER_CFLAGS = + +# +# additional include and library search paths +#USER_INC = +#USER_LIB = + +# +# MODULE CODE DESCRIPTION: +# ------------------------ +# As a general rule: public file are "cleaned" and "installed" +# local (_L) are not "installed". + +# +# C programs (public and local) +# ----------------------------- +EXECUTABLES = +EXECUTABLES_L = + +# +# +xxxxx_OBJECTS = +xxxxx_LDFLAGS = +xxxxx_LIBS = + +# +# special compilation flags for single c sources +#yyyyy_CFLAGS = + +# +# Includes (.h) files (public only) +# --------------------------------- +INCLUDES = + +# +# Libraries (public and local) +# ---------------------------- +LIBRARIES = +LIBRARIES_L = + +# +# +lllll_OBJECTS = + +# +# Scripts (public and local) +# ---------------------------- +SCRIPTS = +SCRIPTS_L = + +# +# TCL scripts (public and local) +# ------------------------------ +TCL_SCRIPTS = +TCL_SCRIPTS_L = + +# +# +tttttt_OBJECTS = +tttttt_TCLSH = +tttttt_LIBS = + +# +# TCL libraries (public and local) +# ------------------------------ +TCL_LIBRARIES = +TCL_LIBRARIES_L = + +# +# +tttlll_OBJECTS = + +# +# UIF panels (public and local) +# ---------------------------- +PANELS = +PANELS_L = + +# +# On-Line Database Files +# ---------------------- +DBL_CLASSES = +DBL_BCF = +DBL_FLAGS = +xxxx_DBL_FLAGS = + +# +# IDL Files and flags +# +IDL_FILES = +IDL_TAO_FLAGS = +USER_IDL = + +# +# man pages to be done +# -------------------- +MANSECTIONS = +MAN1 = +MAN3 = +MAN5 = +MAN7 = +MAN8 = + +# +# local man pages +# --------------- +MANl = + +# +# ASCII file to be converted into Framemaker-MIF +# -------------------- +ASCII_TO_MIF = + +# +# INS_ROOT files to be installed +#------------------------------- +INS_ROOT_FILES = ../config/*.cfg ../config/*.det +INS_ROOT_DIR = + +# +# other files to be installed +#---------------------------- +INSTALL_FILES = ../config/$(CAMERANAME)SetupComplete.det \ + ../config/$(CAMERANAME)CAMERA.cfg \ + ../config/$(CAMERANAME)CAMERA_TARGET.cfg \ + ../config/$(CAMERANAME)CONFIG.cfg \ + ../config/$(CAMERANAME)DCS.cfg +INSTALL_DIRS = ../config/$(CAMERANAME) + +# +# list of all possible C-sources (used to create automatic dependencies) +# ------------------------------ +CSOURCENAMES = \ + $(foreach exe, $(EXECUTABLES) $(EXECUTABLES_L), $($(exe)_OBJECTS)) \ + $(foreach lib, $(LIBRARIES) $(LIBRARIES_L), $($(lib)_OBJECTS)) + +# +#>>>>> END OF standard rules + +# +# CHOSE PLATFORM +# -------------- +# Default is UNIX, for VxVorks application next line MUST BE UNCOMMENTED +#MAKE_VXWORKS = on + +# +# INCLUDE STANDARDS +# ----------------- +MAKEDIR = $(VLTROOT)/include +include $(MAKEDIR)/vltMakefile + +# +# TARGETS +# ------- +all: do_all + @echo " . . . 'all' done" + +clean : clean_all + @echo " . . . clean done" + +clean_dist : clean_all clean_dist_all + @echo " . . . clean_dist done" + +man : do_man + @echo " . . . man page(s) done" + +install : install_all + $(AT) echo " copying configuration directories and patterns" + $(AT) chmod -R 775 $(INSTALL_DIRS) + $(AT) cp -r $(INSTALL_DIRS) $(VLTTOP)/config/ + @echo " . . . installation done" + +db : db_all + @echo " . . . ../DB done" + + +#___oOo___ + diff --git a/DCS/sxdir/ChangeLog b/DCS/sxdir/ChangeLog new file mode 100644 index 0000000..0e92be1 --- /dev/null +++ b/DCS/sxdir/ChangeLog @@ -0,0 +1,7 @@ +Wed Jun 11 15:18:43 2008 xxngcir version: 0.2 + * Updated cfg. + +Mon Jun 09 11:26:40 2008 xxngcir version: 0.1 + * Prepared configuration files for NGC/IR instance + Makefile. + +"@(#) $Id: ChangeLog 170230 2008-07-11 16:06:15Z jknudstr $" diff --git a/DCS/sxdir/config/NGCIRSW/sxdir.cfg b/DCS/sxdir/config/NGCIRSW/sxdir.cfg new file mode 100644 index 0000000..4f7da2e --- /dev/null +++ b/DCS/sxdir/config/NGCIRSW/sxdir.cfg @@ -0,0 +1,87 @@ +############################################################################# +# E.S.O. - VLT project +# +# "@(#) $Id: sxdir.cfg 170230 2008-07-11 16:06:15Z jknudstr $" +# +# who when what +# -------- ---------- ---------------------------------------------- +# jstegmei 2006-08-21 created +# +############################################################################# +# +# DESCRIPTION +# ASCII FILE for system configuration. +# +############################################################################# + +# +# Server configuration +# +DET.DETCFG "sxdir.dcf"; # default detector configuration + +# +# Exposure frame configuration +# +DET.FRAM.EXTHDR T; # create extended FITS-header +DET.FRAM.NUMBLOCK 24; # default number of FITS-header blocks +DET.FRAM.FORMAT "extension"; # default FITS-file format +DET.FRAM.MULTFILE F; # generate multiple files +DET.FRAM.NAMING "request"; # default FITS-file naming scheme + +# +# Device description +# +DET.DEV1.NAME "/dev/ngc0_com"; # associated device name +DET.DEV1.HOST "$HOST"; # host where interface resides +DET.DEV1.ENV "$RTAPENV"; # server environment name +DET.DEV1.SRV ""; # server name (optional) +DET.DEV1.TYPE ""; # type (optional) + +# +# CLDC modules +# +DET.CLDC1.DEVIDX 1; # associated device index +DET.CLDC1.ROUTE "2"; # route to module +DET.CLDC1.AUTOENA F; # auto-enable at online +DET.CLDC1.MARGIN 0.0; # margin for voltage check (in volts) +DET.CLDC1.NAME "CLDC 1"; # module name (optional) + +# +# Sequencer modules +# +DET.SEQ1.DEVIDX 1; # associated device index +DET.SEQ1.ROUTE "2"; # route to module +DET.SEQ1.NAME "Sequencer 1"; # module name (optional) + +# +# ADC modules +# +DET.ADC1.DEVIDX 1; # associated device index +DET.ADC1.ROUTE "2"; # route to module +DET.ADC1.NUM 4; # number of enabled ADC units on board +DET.ADC1.BITPIX 16; # number bits per pixel +DET.ADC1.FIRST T; # first in chain +DET.ADC1.PKTCNT 0; # packet routing length +DET.ADC1.NAME "ADC Module 1"; # module name (optional) + +#DET.ADC2.DEVIDX 1; # associated device index +#DET.ADC2.ROUTE "5,2"; # route to module +#DET.ADC2.NUM 32; # number of enabled ADC units on board +#DET.ADC2.BITPIX 16; # number bits per pixel +#DET.ADC2.FIRST F; # first in chain +#DET.ADC2.PKTCNT 0; # packet routing length +#DET.ADC2.PKTSIZE 16; # packet size +#DET.ADC2.NAME "ADC Module 2"; # module name (optional) + +# +# Acquisition modules +# +DET.ACQ1.DEV "/dev/ngc0_dma"; # DMA device name +DET.ACQ1.HOST "$HOST"; # host name for acq.-process +DET.ACQ1.CMDPORT 0; # acq.-process command port (optional) +DET.ACQ1.DATAPORT 9001; # acq.-process data port (optional) +DET.ACQ1.NCLIENT 2; # max. number of data server clients +DET.ACQ1.SEQIDX 1; # associated sequencer instance + +# +# --- oOo --- diff --git a/DCS/sxdir/config/NGCIRSW/sxdir.dcf b/DCS/sxdir/config/NGCIRSW/sxdir.dcf new file mode 100644 index 0000000..b659cfb --- /dev/null +++ b/DCS/sxdir/config/NGCIRSW/sxdir.dcf @@ -0,0 +1,101 @@ +############################################################################# +# E.S.O. - VLT project +# +# "@(#) $Id: sxdir.dcf,v 0.2 2008/07/11 14:06:14 vltsccm Exp $" +# +# who when what +# -------- ---------- ---------------------------------------------- +# bsalasni 2017-05-25 Adapted from template instrument +# +############################################################################# +# +# DESCRIPTION +# ASCII FILE for detector configuration. +# +############################################################################# + +# +# Detector system definition +# +DET.NAME "SOXS"; # detector system name +DET.ID "SOXS"; # detector system id +DET.CHIPS 1; # number of chips in mosaic +DET.OUTPUTS 32; # total number of outputs + +# +# Chip definition +# +DET.CHIP1.NAME "Tomatito"; # chip name +DET.CHIP1.ID "myChipId"; # chip id +DET.CHIP1.TYPE "myChipType"; # chip type +DET.CHIP1.DATE "2005-08-03"; # chip installation date +DET.CHIP1.LIVE T; # chip live or broken +DET.CHIP1.PXSPACE 1.0E-06; # space between pixels (meters) +DET.CHIP1.GAIN 1.00; # gain in e-/ADU +DET.CHIP1.PSZX 1.0; # size of pixel in x (mu) +DET.CHIP1.PSZY 1.0; # size of pixel in y (mu) +DET.CHIP1.INDEX 1; # unique number in mosaic +DET.CHIP1.X 1; # x location in mosaic +DET.CHIP1.Y 1; # y location in mosaic +DET.CHIP1.XGAP 10.0; # gap between chips along x +DET.CHIP1.YGAP 10.0; # gap between chips along y +DET.CHIP1.RGAP 0.0; # angle of gap between chips +DET.CHIP1.OUTPUTS 32; # number of outputs +DET.CHIP1.NX 1024; # number of pixels along x +DET.CHIP1.NY 1024; # number of pixels along y +DET.CHIP1.ADJUST "FREE"; # window adjustment (CENTER|FREE) +DET.CHIP1.ADJUSTX 1; # adjustment step in x +DET.CHIP1.ADJUSTY 1; # adjustment step in y +DET.CHIP1.ACQIDX 0; # map to acquisition module + +DET.ACQ1.SPLITX 1; +DET.ACQ1.SPLITY 1; + +# +# CLDC module setup +# +DET.CLDC1.FILE "sxdirTest.v"; # voltage definition file +DET.CLDC1.PREAMP 0.0; # preamplifier offset +DET.CLDC1.DIODE 0.0; # diode bias + +# +# Sequencer module setup +# +DET.SEQ1.CLKFILE "sxdirTest.clk"; # clock pattern file +DET.SEQ1.TIMEFAC 2; # dwell time factor +DET.SEQ1.TIMEADD 1; # dwell time add value +DET.SEQ1.CONT F; # continuous mode +DET.SEQ1.RUNCTRL T; # external run-control + +# +# ADC module setup +# +DET.ADC1.DELAY 0; # conversion strobe delay (ticks) +DET.ADC1.OFFSET 3.0; # ADC offset (Volt) +DET.ADC1.OPMODE 0; # ADC operation mode +DET.ADC1.SIMMODE 0; # ADC simulaton level +DET.ADC1.ENABLE 4; # number of enabled ADC units +DET.ADC1.PKTSIZE 4; # packet size +DET.ADC1.CONVERT1 T; # convert on strobe 1 +DET.ADC1.CONVERT2 F; # convert on strobe 2 + + +DET.READ.DEFAULT 1; # id of default readout mode + +# +# Read-out mode definitions +# +DET.READ1.NAME "Uncor"; # readout mode name +DET.READ1.ACQ1 "ngciracqH11"; # acquisition process 1 +DET.READ1.SEQ1 "sxdirTest.seq"; # program for sequencer 1 +DET.READ1.DSUP ""; # default parameter setup +DET.READ1.DESC "Uncorrelated readout"; + +DET.READ2.NAME "Double"; # readout mode name +DET.READ2.ACQ1 "ngciracqH12"; # acquisition process 1 +DET.READ2.SEQ1 "sxdirTest.seq"; # program for sequencer 1 +DET.READ2.DSUP ""; # default parameter setup +DET.READ2.DESC "Double correlated readout"; + +# +# --- oOo --- diff --git a/DCS/sxdir/config/NGCIRSW/sxdirTest.bclk b/DCS/sxdir/config/NGCIRSW/sxdirTest.bclk new file mode 100644 index 0000000..0a3854b --- /dev/null +++ b/DCS/sxdir/config/NGCIRSW/sxdirTest.bclk @@ -0,0 +1,51 @@ +############################################################################# +# E.S.O. - VLT project +# +# "@(#) $Id: sxdirTest.bclk,v 0.1 2008/06/10 08:20:30 vltsccm Exp $" +# +# who when what +# -------- ---------- ---------------------------------------------- +# jstegmei 2006-08-21 created +# +############################################################################# +# +# DESCRIPTION +# NGC clock pattern definition (binary format) +# +############################################################################# + +# +1 +0b00000000000000000000000000000000 0b00000000000000000000000000000000 0 +0b00000000000000000000000000000000 0b00000000000000000000000000000000 0 +0b00000000000000000000000000000000 0b00000000000000000000000000000000 0 +0b00000000000000000000000000000000 0b00000000000000000000000000000000 0 +0b10000000000000000000000000000000 0b00000000000000000000000000000000 0 +! + +# +2 +0b00000000000000000000000000000000 0b00000000000000000000000000000000 1 +0b00000000000000000000000000001000 0b00000000000000000000000000000000 1 +0b00000000000000000000000000001000 0b00000000000000000000000010000000 1 +0b10000000000000000000000000000000 0b00000000000000000000000000000000 1 +! + +# +3 +0b00000000000000000000000000000000 0b00000000000000000000000000000000 1 +0b00000000000000000000000000000000 0b10000000000000000000000000000100 1 +0b00000000000000000000000000000000 0b10000000000000000000000000000100 1 +0b10000000000000000000000000000000 0b00000000000000000000000000000000 1 +! + +# +4 +0b00000000000000000000000000000000 0b00000000000000000000000000000000 1 +0b00000000000000000000000000000000 0b00000000000000000000000000000000 1 +0b00100000000000000000000000000000 0b00000000000000000000000000000000 1 +0b10000000000000000000000000000000 0b00000000000000000000000000000000 1 +! + +# +# --- oOo --- diff --git a/DCS/sxdir/config/NGCIRSW/sxdirTest.clk b/DCS/sxdir/config/NGCIRSW/sxdirTest.clk new file mode 100644 index 0000000..192b2cf --- /dev/null +++ b/DCS/sxdir/config/NGCIRSW/sxdirTest.clk @@ -0,0 +1,83 @@ +############################################################################# +# E.S.O. - VLT project +# +# "@(#) $Id: sxdirTest.clk,v 0.1 2008/06/10 08:20:30 vltsccm Exp $" +# +# who when what +# -------- ---------- ---------------------------------------------- +# jstegmei 2006-08-21 created +# +############################################################################# +# +# DESCRIPTION +# Template ASCII FILE for NGC sequencer clock pattern definitions. +# +############################################################################# + +# +# Clock mapping (can be spread over several lines). +# This maps the clocks described below onto physical clock lines. +# Mechanism is: Phys. clock line for logical clock n = MAP[n]. +# +DET.CLK.MAP1 "1,2,3,6,7,32"; # Mapping list +DET.CLK.MAP2 "36,8"; # Mapping list + +# +# Clock pattern definitions +# +DET.PAT1.NAME "Delay_1us"; +DET.PAT1.NSTAT 5; +DET.PAT1.CLK1 "00000"; +DET.PAT1.CLK2 "00000"; +DET.PAT1.CLK3 "00000"; +DET.PAT1.CLK4 "00000"; +DET.PAT1.CLK5 "00000"; +DET.PAT1.CLK6 "00000"; # Convert +DET.PAT1.CLK7 "00000"; # Start pulse +DET.PAT1.CLK8 "00000"; +DET.PAT1.DTV "20,20,20,20,20"; # Dwell-Time vector +DET.PAT1.DTM "0,0,0,0,0"; # Dwell-Time modification flags + +DET.PAT2.NAME "FrameStart"; +DET.PAT2.NSTAT 4; +DET.PAT2.CLK1 "0000"; +DET.PAT2.CLK2 "0000"; +DET.PAT2.CLK3 "0000"; +DET.PAT2.CLK4 "0000"; +DET.PAT2.CLK5 "0000"; +DET.PAT2.CLK6 "0000"; # Convert +DET.PAT2.CLK7 "0110"; # Start pulse +DET.PAT2.CLK8 "0010"; +DET.PAT2.DTV "5,5,5,5"; # Dwell-Time vector +DET.PAT2.DTM "1,1,1,1"; # Dwell-Time modification flags + +DET.PAT3.NAME "Read-Reset" / read + reset +DET.PAT3.NSTAT 4; +DET.PAT3.CLK1 "0000"; +DET.PAT3.CLK2 "0000"; +DET.PAT3.CLK3 "0110"; +DET.PAT3.CLK4 "0000"; +DET.PAT3.CLK5 "0000"; +DET.PAT3.CLK6 "0110"; # Convert +DET.PAT3.CLK7 "0000"; # Start pulse +DET.PAT3.CLK8 "0000"; +DET.PAT3.DTV "40,40,40,40"; # Dwell-Time vector +DET.PAT3.DTM "1,1,1,1"; # Dwell-Time modification flags + +DET.PAT4.NAME "FrameEnd"; +DET.PAT4.NSTAT 4; +DET.PAT4.CLK1 "0000"; +DET.PAT4.CLK2 "0000"; +DET.PAT4.CLK3 "0000"; +DET.PAT4.CLK4 "0000"; +DET.PAT4.CLK5 "0000"; +DET.PAT4.CLK6 "0000"; # Convert +DET.PAT4.CLK7 "0000"; # Start pulse +DET.PAT4.CLK8 "0000"; +#DET.PAT4.CLK61 "0001"; # SYNC +DET.PAT4.CLK62 "0010"; # Break-point +DET.PAT4.DTV "5,5,5,5"; # Dwell-Time vector +DET.PAT4.DTM "1,1,1,1"; # Dwell-Time modification flags + +# +# --- oOo --- diff --git a/DCS/sxdir/config/NGCIRSW/sxdirTest.seq b/DCS/sxdir/config/NGCIRSW/sxdirTest.seq new file mode 100644 index 0000000..53107d1 --- /dev/null +++ b/DCS/sxdir/config/NGCIRSW/sxdirTest.seq @@ -0,0 +1,76 @@ +############################################################################# +# E.S.O. - VLT project +# +# "@(#) $Id: sxdirTest.seq 297901 2017-05-26 17:40:15Z dricci $" +# +# who when what +# -------- ---------- ---------------------------------------------- +# jstegmei 2006-08-21 created +# +############################################################################# +# +# DESCRIPTION +# Sequencer program. +# +############################################################################# + +# +# PATTERN DECALRATION +# +DELAY_1us = 1 +FRAMESTART = 2 +READ = 3 +FRAMEEND = 4 + +# +# PARAMETER DECLARATION +# +USE DET.SEQ.DIT DET.NDIT DET.NDITSKIP + +# +# SUBROUTINE DECLARATION +# + +# +# EVALUATE +# +SCRIPT + + +if {$svar(DET.NDIT) <= 0} { + set svar(DET.NDIT) 1 +} + +set svar(DET.SEQ.MINDIT) 0.5 + +if {$svar(DET.SEQ.DIT) < $svar(DET.SEQ.MINDIT)} { + set svar(DET.SEQ.DIT) $svar(DET.SEQ.MINDIT) +} + +set nd [expr {$svar(DET.NDITSKIP) + $svar(DET.NDIT)}] + +set svar(DET.SEQ.EXPTIME) [expr {$svar(DET.SEQ.DIT) * $nd}] + +SCRIPT_END + +# +# EXECUTE (MAIN PROGRAM) +# +LOOP INFINITE + EXEC FRAMESTART 1 + LOOP 256 + EXEC READ 1024 + END + EXEC FRAMEEND 1 + LOOP 1000 + EXEC DELAY_1us 1000 + END +END +RETURN + +# +# --- oOo --- + + + + diff --git a/DCS/sxdir/config/NGCIRSW/sxdirTest.v b/DCS/sxdir/config/NGCIRSW/sxdirTest.v new file mode 100644 index 0000000..5005949 --- /dev/null +++ b/DCS/sxdir/config/NGCIRSW/sxdirTest.v @@ -0,0 +1,251 @@ +############################################################################# +# E.S.O. - VLT project +# +# "@(#) $Id: sxdirTest.v,v 0.1 2008/06/10 08:20:30 vltsccm Exp $" +# +# who when what +# -------- ---------- ---------------------------------------------- +# jstegmei 2006-02-02 created +# +############################################################################# +# +# DESCRIPTION +# NGC voltage file (for test). The keywords have to be defined for all +# used clock- and DC-voltages in the following format: +# +# DET.CLDC.CLKHINMi - Name of high clock i (optional) +# DET.CLDC.CLKHIi - Level of high clock i (mandatory) +# DET.CLDC.CLKHIGNi - Gain factor (optional) +# DET.CLDC.CLKHIRAi - Range of low clock i (mandatory) +# DET.CLDC.CLKHIDACi - DAC channel of high clock i (optional) +# DET.CLDC.CLKHITELi - Telemetry channel of high clock i (optional) +# +# DET.CLDC.CLKLONMi - Name of low clock i (optional) +# DET.CLDC.CLKLOi - Level of low clock i (mandatory) +# DET.CLDC.CLKLOGNi - Gain factor (optional) +# DET.CLDC.CLKLORAi - Range of low clock i (mandatory) +# DET.CLDC.CLKLODACi - DAC channel of low clock i (optional) +# DET.CLDC.CLKLOTELi - Telemetry channel of low-clock i (optional) +# +# DET.CLDC.DCNMi - Name of DC voltage i (optional) +# DET.CLDC.DCi - Level of DC voltage i (mandatory) +# DET.CLDC.DCGNi - Gain factor (optional) +# DET.CLDC.DCRAi - Range for DC voltage i (mandatory) +# DET.CLDC.DCDACi - DAC channel for DC voltage i (optional) +# DET.CLDC.DCTELi - Telemetry channel for DC voltage i (optional) +# +############################################################################# + +############################################################################# +# Offsets: +############################################################################# +DET.CLDC.CLKOFF 2.0; # Global clock voltage offset +DET.CLDC.DCOFF 2.0; # Global DC voltage offset + +############################################################################# +# Clock Voltages: +############################################################################# + +DET.CLDC.CLKLONM1 "clk1Lo"; +DET.CLDC.CLKLO1 0.000; +DET.CLDC.CLKLORA1 "[-9.000, 9.000]"; + +DET.CLDC.CLKHINM1 "clk1Hi"; +DET.CLDC.CLKHI1 1.000; +DET.CLDC.CLKHIRA1 "[-9.000, 9.000]"; + +DET.CLDC.CLKLONM2 "clk2Lo"; +DET.CLDC.CLKLO2 0.000; +DET.CLDC.CLKLORA2 "[-9.000, 9.000]"; + +DET.CLDC.CLKHINM2 "clk2Hi"; +DET.CLDC.CLKHI2 2.000; +DET.CLDC.CLKHIRA2 "[-9.000, 9.000]"; + +DET.CLDC.CLKLONM3 "clk3Lo"; +DET.CLDC.CLKLO3 0.000; +DET.CLDC.CLKLORA3 "[-9.000, 9.000]"; + +DET.CLDC.CLKHINM3 "clk3Hi"; +DET.CLDC.CLKHI3 3.000; +DET.CLDC.CLKHIRA3 "[-9.000, 9.000]"; + +DET.CLDC.CLKLONM4 "clk4Lo"; +DET.CLDC.CLKLO4 0.000; +DET.CLDC.CLKLORA4 "[-9.000, 9.000]"; + +DET.CLDC.CLKHINM4 "clk4Hi"; +DET.CLDC.CLKHI4 4.000; +DET.CLDC.CLKHIRA4 "[-9.000, 9.000]"; + +DET.CLDC.CLKLONM5 "clk5Lo"; +DET.CLDC.CLKLO5 0.000; +DET.CLDC.CLKLORA5 "[-9.000, 9.000]"; +DET.CLDC.CLKLODAC5 9; +DET.CLDC.CLKLOTEL5 9; + +DET.CLDC.CLKHINM5 "clk5Hi"; +DET.CLDC.CLKHI5 5.000; +DET.CLDC.CLKHIRA5 "[-9.000, 9.000]"; + +DET.CLDC.CLKLONM6 "clk6Lo"; +DET.CLDC.CLKLO6 0.000; +DET.CLDC.CLKLORA6 "[-9.000, 9.000]"; + +DET.CLDC.CLKHINM6 "clk6Hi"; +DET.CLDC.CLKHI6 6.000; +DET.CLDC.CLKHIRA6 "[-9.000, 9.000]"; + +DET.CLDC.CLKLONM7 "clk7Lo"; +DET.CLDC.CLKLO7 0.000; +DET.CLDC.CLKLORA7 "[-9.000, 9.000]"; + +DET.CLDC.CLKHINM7 "clk7Hi"; +DET.CLDC.CLKHI7 7.000; +DET.CLDC.CLKHIRA7 "[-9.000, 9.000]"; + +DET.CLDC.CLKLONM8 "clk8Lo"; +DET.CLDC.CLKLO8 0.000; +DET.CLDC.CLKLORA8 "[-9.000, 9.000]"; + +DET.CLDC.CLKHINM8 "clk8Hi"; +DET.CLDC.CLKHI8 8.000; +DET.CLDC.CLKHIRA8 "[-9.000, 9.000]"; + +DET.CLDC.CLKLONM9 "clk9Lo"; +DET.CLDC.CLKLO9 0.000; +DET.CLDC.CLKLORA9 "[-9.000, 9.000]"; + +DET.CLDC.CLKHINM9 "clk9Hi"; +DET.CLDC.CLKHI9 0.000; +DET.CLDC.CLKHIRA9 "[-9.000, 9.000]"; + +DET.CLDC.CLKLONM10 "clk10Lo"; +DET.CLDC.CLKLO10 0.000; +DET.CLDC.CLKLORA10 "[-9.000, 9.000]"; + +DET.CLDC.CLKHINM10 "clk10Hi"; +DET.CLDC.CLKHI10 0.000; +DET.CLDC.CLKHIRA10 "[-9.000, 9.000]"; + +DET.CLDC.CLKLONM11 "clk11Lo"; +DET.CLDC.CLKLO11 0.000; +DET.CLDC.CLKLORA11 "[-9.000, 9.000]"; + +DET.CLDC.CLKHINM11 "clk11Hi"; +DET.CLDC.CLKHI11 0.000; +DET.CLDC.CLKHIRA11 "[-9.000, 9.000]"; + +DET.CLDC.CLKLONM12 "clk12Lo"; +DET.CLDC.CLKLO12 0.000; +DET.CLDC.CLKLORA12 "[-9.000, 9.000]"; + +DET.CLDC.CLKHINM12 "clk12Hi"; +DET.CLDC.CLKHI12 0.000; +DET.CLDC.CLKHIRA12 "[-9.000, 9.000]"; + +DET.CLDC.CLKLONM13 "clk13Lo"; +DET.CLDC.CLKLO13 0.000; +DET.CLDC.CLKLORA13 "[-9.000, 9.000]"; + +DET.CLDC.CLKHINM13 "clk13Hi"; +DET.CLDC.CLKHI13 0.000; +DET.CLDC.CLKHIRA13 "[-9.000, 9.000]"; + +DET.CLDC.CLKLONM14 "clk14Lo"; +DET.CLDC.CLKLO14 0.000; +DET.CLDC.CLKLORA14 "[-9.000, 9.000]"; + +DET.CLDC.CLKHINM14 "clk14Hi"; +DET.CLDC.CLKHI14 0.000; +DET.CLDC.CLKHIRA14 "[-9.000, 9.000]"; + +DET.CLDC.CLKLONM15 "clk15Lo"; +DET.CLDC.CLKLO15 0.000; +DET.CLDC.CLKLORA15 "[-9.000, 9.000]"; + +DET.CLDC.CLKHINM15 "clk15Hi"; +DET.CLDC.CLKHI15 0.000; +DET.CLDC.CLKHIRA15 "[-9.000, 9.000]"; + +DET.CLDC.CLKLONM16 "clk16Lo"; +DET.CLDC.CLKLO16 0.000; +DET.CLDC.CLKLORA16 "[-9.000, 9.000]"; + +DET.CLDC.CLKHINM16 "clk16Hi"; +DET.CLDC.CLKHI16 0.000; +DET.CLDC.CLKHIRA16 "[-9.000, 9.000]"; + +############################################################################# +# DC Voltages: +############################################################################# +DET.CLDC.DCNM1 "DC1"; +DET.CLDC.DC1 0.100; +DET.CLDC.DCRA1 "[-12.000, 12.000]"; + +DET.CLDC.DCNM2 "DC2"; +DET.CLDC.DC2 0.200; +DET.CLDC.DCRA2 "[-9.000, 9.000]"; + +DET.CLDC.DCNM3 "DC3"; +DET.CLDC.DC3 0.300; +DET.CLDC.DCRA3 "[-9.000, 9.000]"; + +DET.CLDC.DCNM4 "DC4"; +DET.CLDC.DC4 0.400; +DET.CLDC.DCRA4 "[-9.000, 9.000]"; +DET.CLDC.DCGN4 4.0; + +DET.CLDC.DCNM5 "DC5"; +DET.CLDC.DC5 0.500; +DET.CLDC.DCRA5 "[-9.000, 9.000]"; + +DET.CLDC.DCNM6 "DC6"; +DET.CLDC.DC6 0.600; +DET.CLDC.DCRA6 "[-9.000, 9.000]"; + +DET.CLDC.DCNM7 "DC7"; +DET.CLDC.DC7 0.700; +DET.CLDC.DCRA7 "[-9.000, 9.000]"; + +DET.CLDC.DCNM8 "DC8"; +DET.CLDC.DC8 0.800; +DET.CLDC.DCRA8 "[-9.000, 9.000]"; + +DET.CLDC.DCNM9 "DC9"; +DET.CLDC.DC9 0.900; +DET.CLDC.DCRA9 "[-9.000, 9.000]"; + +DET.CLDC.DCNM10 "DC10"; +DET.CLDC.DC10 1.000; +DET.CLDC.DCRA10 "[-9.000, 9.000]"; + +DET.CLDC.DCNM11 "DC11"; +DET.CLDC.DC11 1.100; +DET.CLDC.DCRA11 "[-9.000, 9.000]"; + +DET.CLDC.DCNM12 "DC12"; +DET.CLDC.DC12 1.200; +DET.CLDC.DCRA12 "[-9.000, 9.000]"; + +DET.CLDC.DCNM13 "DC13"; +DET.CLDC.DC13 1.300; +DET.CLDC.DCRA13 "[-9.000, 9.000]"; + +DET.CLDC.DCNM14 "DC14"; +DET.CLDC.DC14 1.400; +DET.CLDC.DCRA14 "[-9.000, 9.000]"; + +DET.CLDC.DCNM15 "DC15"; +DET.CLDC.DC15 1.500; +DET.CLDC.DCRA15 "[-9.000, 9.000]"; + +DET.CLDC.DCNM16 "DC16"; +DET.CLDC.DC16 1.600; +DET.CLDC.DCRA16 "[-9.000, 9.000]"; +DET.CLDC.DCDAC16 -1; # not connected +DET.CLDC.DCTEL16 -1; # not connected + + +# +# --- oOo --- diff --git a/DCS/sxdir/config/ngcrtdCtrl.cfg b/DCS/sxdir/config/ngcrtdCtrl.cfg new file mode 100644 index 0000000..0b3beb9 --- /dev/null +++ b/DCS/sxdir/config/ngcrtdCtrl.cfg @@ -0,0 +1,91 @@ +#************************************************************* +# E.S.O. - VLT project +# +# "@(#) $Id: ngcrtdCtrl.cfg 170230 2008-07-11 16:06:15Z jknudstr $" +# +# who when what +# -------- ---------- ---------------------------------------------- +# jstegmei 2007-08-31 created +# +#************************************************************************ +# NAME +# ngcrtdCtrl.cfg - control widgets for the IRACE-DCS RTD application +# +# DESCRIPTION +# This file describes a list of controls widgets which are created and +# loaded into the control panel. +# +# This file must be located in $INS_ROOT/SYSTEM/COMMON/CONFIGFILE and +# the key NGCRTD.CTRLFILE in the config file must be set to the filename +# +# For all widgets ngcrtd will try to configure the -variable option to +# the name of the widget which is defined as a global variable +# +#------------------------------------------------------------------------ + + +# Button "Store fixed pattern" +NGCRTD.CTRL1.NAME "stfp" ; # name of the widget +NGCRTD.CTRL1.INDX 21 ; # key index for config file +NGCRTD.CTRL1.TYPE "button" ; # type of the widget +NGCRTD.CTRL1.OPT1 "-text {Store fix. pattern}" ; # widget option +NGCRTD.CTRL1.OPT2 "-command {ngcrtdCtrl stfp}" ; # widget option +NGCRTD.CTRL1.OPT3 "-relief raised" ; # widget option +NGCRTD.CTRL1.SHELP "{Store fix. pattern: {bitmap b1} = Subsequent images are subtracted by the current raw image}" + + +# Checkbutton "Fix. pattern On/Off" +NGCRTD.CTRL2.NAME "fpon" ; # name of the widget +NGCRTD.CTRL2.INDX 22 ; # key index for config file +NGCRTD.CTRL2.TYPE "checkbutton" ; # type of the widget +NGCRTD.CTRL2.OPT1 "-text {Fix. pattern On/Off}" ; # widget option +NGCRTD.CTRL2.OPT2 "-command {ngcrtdCtrl fpon}" ; # widget option +NGCRTD.CTRL2.OPT3 "-relief raised" ; # widget option +NGCRTD.CTRL2.OPT4 "-anchor w" ; # widget option +NGCRTD.CTRL2.OPT5 "-state disabled" ; # widget option +NGCRTD.CTRL2.SHELP "{Fixed pattern On/Off: {bitmap b1} = Toggle fixed pattern subtraction}" + +# LabelMenu "Data:" (LabelMenu is a standard RTD widget) +NGCRTD.CTRL3.NAME "data" ; # name of the widget +NGCRTD.CTRL3.INDX 23 ; # key index for config file +NGCRTD.CTRL3.TYPE "LabelMenu" ; # type of the widget +NGCRTD.CTRL3.OPT1 "-text {Data:}" ; # widget option +NGCRTD.CTRL3.OPT2 "-anchor e" ; # widget option +NGCRTD.CTRL3.OPT3 "-relief groove" ; # widget option +NGCRTD.CTRL3.SHELP "{Data: {bitmap b1} = Select data to be displayed in main window: current frame (DIT), average (INT), ...}" + +# Checkbutton "Start" +NGCRTD.CTRL4.NAME "start" ; # name of the widget +NGCRTD.CTRL4.INDX 24 ; # key index for config file +NGCRTD.CTRL4.TYPE "checkbutton" ; # type of the widget +NGCRTD.CTRL4.OPT1 "-text Start" ; # widget option +NGCRTD.CTRL4.OPT2 "-onvalue 0 -offvalue 1" ; # widget option +NGCRTD.CTRL4.OPT3 "-anchor w" ; # widget option +NGCRTD.CTRL4.OPT4 "-relief raised " ; # widget option +NGCRTD.CTRL4.OPT5 "-command {ngcrtdCtrl start}" ; # widget option +NGCRTD.CTRL4.OPT6 "-state active" ; # widget option +NGCRTD.CTRL4.SHELP "{Start: {bitmap b1} = Toggle start / stop}" + +# Checkbutton "Rapid Frame..." +NGCRTD.CTRL5.NAME "fast" ; # name of the widget +NGCRTD.CTRL5.INDX 25 ; # key index for config file +NGCRTD.CTRL5.TYPE "checkbutton" ; # type of the widget +NGCRTD.CTRL5.OPT1 "-text {Rapid Frame...}" ; # widget option +NGCRTD.CTRL5.OPT2 "-onvalue 1 -offvalue 0" ; # widget option +NGCRTD.CTRL5.OPT3 "-anchor w" ; # widget option +NGCRTD.CTRL5.OPT4 "-relief raised " ; # widget option +NGCRTD.CTRL5.OPT5 "-command {ngcrtdCtrl fast}" ; # widget option +NGCRTD.CTRL5.OPT6 "-state disabled" ; # widget option +NGCRTD.CTRL5.SHELP "{Rapid Frame: {bitmap b1} = Toggle popup/close rapid frame display}" + +# Button "Autocut region..." +NGCRTD.CTRL6.NAME "cutregion" ; # name of the widget +NGCRTD.CTRL6.INDX 26 ; # key index for config file +NGCRTD.CTRL6.TYPE "button" ; # type of the widget +NGCRTD.CTRL6.OPT1 "-text {Autocut region}" ; # widget option +NGCRTD.CTRL6.OPT2 "-anchor c" ; # widget option +NGCRTD.CTRL6.OPT3 "-relief raised " ; # widget option +NGCRTD.CTRL6.OPT4 "-command {ngcrtdCtrl cutregion}" ; # widget option +NGCRTD.CTRL6.OPT5 "-state normal" ; # widget option +NGCRTD.CTRL6.SHELP "{Autocut region: {bitmap b1} = Resize cut window, {bitmap b2} {bitmap b2} = Set default window size}" + diff --git a/DCS/sxdir/config/ngcrtdMenu.cfg b/DCS/sxdir/config/ngcrtdMenu.cfg new file mode 100644 index 0000000..3fcde55 --- /dev/null +++ b/DCS/sxdir/config/ngcrtdMenu.cfg @@ -0,0 +1,83 @@ +#************************************************************* +# E.S.O. - VLT project +# +# "@(#) $Id: ngcrtdMenu.cfg 170230 2008-07-11 16:06:15Z jknudstr $" +# +# who when what +# -------- ---------- ---------------------------------------------- +# jstegmei 2007-08-31 created +# +#************************************************************************ +# NAME +# ngcrtdMenu.cfg - menu config file for the IRACE-DCS RTD application +# +# DESCRIPTION +# This file describes a list of menus which are loaded in by ngcrtd +# provided that: +# +# o the file is located in $INS_ROOT/SYSTEM/COMMON/CONFIGFILE +# o the key NGCRTD.MENUFILE was set to the filename +# +# A menu is automatically created in case that it does not exists. +# +#------------------------------------------------------------------------ + +# +# Add to the View menu +# +NGCRTD.MENU1.NAME {View} ; # name of the menu +NGCRTD.MENU1.TYPE {separator} ; # type of the menu item: command or separator + +NGCRTD.MENU2.NAME {View} ; # name of the menu +NGCRTD.MENU2.TYPE {command} ; # type of the menu item: command or separator +NGCRTD.MENU2.LABEL {Display fixed pattern} ; # menu title +NGCRTD.MENU2.CMD {ngcrtdRtdMenu displayFP} ; # command +NGCRTD.MENU2.SHELP {Display fixed pattern} ; # short help text + +NGCRTD.MENU3.NAME {View} ; # name of the menu +NGCRTD.MENU3.TYPE {command} ; # type of the menu item: command or separator +NGCRTD.MENU3.LABEL {Negate real-time image} ; # menu title +NGCRTD.MENU3.CMD {ngcrtdCtrl rtiNegate} ; # command +NGCRTD.MENU3.SHELP {Negate real-time image} ; # short help text + +NGCRTD.MENU4.NAME {View} ; # name of the menu +NGCRTD.MENU4.TYPE {separator} ; # type of the menu item: command or separator + +NGCRTD.MENU5.NAME {View} ; # name of the menu +NGCRTD.MENU5.TYPE {command} ; # type of the menu item: command or separator +NGCRTD.MENU5.LABEL {Statistics...} ; # menu title +NGCRTD.MENU5.CMD {rtdbMenuCall statistics} ; # command +NGCRTD.MENU5.SHELP {Display statistics} ; # short help text + +# +# Create a new menu "Test" and add the following items +# +NGCRTD.MENU6.NAME {Test} ; # name of the menu +NGCRTD.MENU6.TYPE {command} ; # type of the menu item: command or separator +NGCRTD.MENU6.LABEL {Data rates...} ; # menu title +NGCRTD.MENU6.CMD {ngcrtdRtdMenu rate_display} ; # command +NGCRTD.MENU6.SHELP {Display data rate statistics} ; # short help text + +NGCRTD.MENU7.NAME {Test} ; # name of the menu +NGCRTD.MENU7.TYPE {command} ; # type of the menu item: command or separator +NGCRTD.MENU7.LABEL {Count display...} ; # menu title +NGCRTD.MENU7.CMD {ngcrtdRtdMenu count_display} ; # command +NGCRTD.MENU7.SHELP {Display image counter} ; # short help text + +NGCRTD.MENU8.NAME {Test} ; # name of the menu +NGCRTD.MENU8.TYPE {command} ; # type of the menu item: command or separator +NGCRTD.MENU8.LABEL {Flip X} ; # menu title +NGCRTD.MENU8.CMD {ngcrtdRtdMenu flipX} ; # command +NGCRTD.MENU8.SHELP {Flip image in horizontal direction}; # short help text + +NGCRTD.MENU9.NAME {Test} ; # name of the menu +NGCRTD.MENU9.TYPE {command} ; # type of the menu item: command or separator +NGCRTD.MENU9.LABEL {Flip Y} ; # menu title +NGCRTD.MENU9.CMD {ngcrtdRtdMenu flipY} ; # command +NGCRTD.MENU9.SHELP {Flip image in vertical direction} ; # short help text + +NGCRTD.MENU10.NAME {Test} ; # name of the menu +NGCRTD.MENU10.TYPE {command} ; # type of the menu item: command or separator +NGCRTD.MENU10.LABEL {Rotate} ; # menu title +NGCRTD.MENU10.CMD {ngcrtdRtdMenu rotate} ; # command +NGCRTD.MENU10.SHELP {Rotate image}; # short help text diff --git a/DCS/sxdir/config/ngcrtdRTDB.cfg b/DCS/sxdir/config/ngcrtdRTDB.cfg new file mode 100644 index 0000000..6de1c2a --- /dev/null +++ b/DCS/sxdir/config/ngcrtdRTDB.cfg @@ -0,0 +1,215 @@ +#************************************************************************ +# E.S.O. - VLT project +# +# "@(#) $Id: ngcrtdRTDB.cfg 170230 2008-07-11 16:06:15Z jknudstr $" +# +# who when what +# -------- ---------- ---------------------------------------------- +# jstegmei 2007-08-31 created +# +#************************************************************************ +# NAME +# ngcrtdRTDB.cfg - configuration file for module rtdb +# +# DESCRIPTION +# Configuration file for module rtdb. +# +#------------------------------------------------------------------------ + + + +PAF.HDR.START; # Marks start of header +PAF.TYPE "Config"; # Type of parameter file +PAF.ID "\$Id: ngcrtdRTDB.cfg 170230 2008-07-11 16:06:15Z jknudstr $" # Parameter file ID +PAF.NAME "ngcrtdRTDB"; # Parameter file NAME +PAF.DESC "Config file for NGCDCS RTD application" +PAF.CRTE.NAME "$USER"; # Who created par. file +PAF.CRTE.DAYTIM "31/08/07"; # Date and time of creation +PAF.LCHG.NAME "$USER"; # Who did last change +PAF.LCHG.DAYTIM "[date]"; # Date and time of last change +PAF.CHCK.NAME "ngcrtdRTDB"; # Appl. checking par. file +PAF.CHCK.DAYTIM "[date]"; # Date and time of last check +PAF.CHCK.CHECKSUM "none"; # Parameter file checksum +PAF.HDR.END + +#********************************************** +# Keywords which can be overridden by options +#********************************************** +RTDB.APPNAME "rtdb"; # Name of application (opt. -appname) +RTDB.APPDESC "Base RTD application"; # Short description (opt. -appdesc) +RTDB.APPVERS "1.0"; # Version of application (opt. -appvers) + + +#********************** +# NGCDCS plugin *) +#********************** +RTDB.PLGFILE1 "$INTROOT/lib/libngcrtd.tcl/ngcrtdRtd.tcl"; # plugin file + + +#*************** +# OS plugin *) +#*************** +#RTDB.PLGFILE2 "$INTROOT/lib/libosrtd.tcl/osrtdRtd.tcl"; # plugin file + + +#********************************* +# Keywords for the layout of RTD +#********************************* + +# include the following menu files which must be located in +# $INS_ROOT/$INS_USER/COMMON/CONFIGFILES/ *) + +RTDB.MENUFIL1 "ngcrtdMenu.cfg"; # description for menus to add +RTDB.MENUKEY1 "NGCRTD"; # key used for category + +#RTDB.MENUFIL2 "osrtdMenu.cfg"; # description for menus to add +#RTDB.MENUKEY2 "OSRTD"; # key used for category + + +#******************************************************************* +# Standard menus (compare with standard RTD layout; just run rtd) +# Remove or add menu numbers by changing the RTDB.MENU list +#******************************************************************* + +RTDB.MENU "1 2 3 4" + + # list of menus to display: + # 1 = File menu + # 2 = View menu + # 3 = Graphics menu + # 4 = Real-Time menu + + +#******************************************************************* +# Menu items for "File menu" +# Remove or add menu items by changing the RTDB.MENUITM1 item list +#******************************************************************* + +RTDB.MENUITM1 "1 3 5 6 7 0 10" + # list of menus item to display for menu "File": + # 0 = Separator bar (no action) + # 1 = Open... + # 2 = Reopen + # 3 = Save as... + # 4 = Save region as... + # 5 = Print... + # 6 = Clear + # 7 = Bias image... + # 8 = New Window + # 9 = Close Window + # 10 = Exit (!) + +#******************************************************************* +# Menu items for "View" +# Remove or add menu items by changing the RTDB.MENUITM2 item list +#******************************************************************* + +RTDB.MENUITM2 "1 2 3 4 5 6 7 8 0 9 10" + # list of menus item to display for menu "View": + # 0 = Separator bar (no action) + # 1 = Colors... + # 2 = Cut levels... + # 3 = Cuts... + # 4 = Pick Object... + # 5 = FITS header... + # 6 = WCS info... + # 7 = Pixel tabel... + # 8 = Magnification... + # 9 = Hide Control Panel + # 10 = Hide Popup Windows + + +#******************************************************************* +# Menu items for "Graphics" +# Remove or add menu items by changing the RTDB.MENUITM3 item list +#******************************************************************* + +RTDB.MENUITM3 "1 2 3" + # list of menus item to display for menu "Graphics": + # 0 = Separator bar (no action) + # 1 = Toolbox... + # 2 = Line drawings, Clear and Delete + # 3 = Hide Graphics + +#******************************************************************* +# Menu items for "Real-Time" +# Remove or add menu items by changing the RTDB.MENUITM4 item list +#******************************************************************* + +RTDB.MENUITM4 "1 2 3 0 6 7" + # list of menus item to display for menu "Real-Time": + # 0 = Separator bar (no action) + # 1 = Attach Camera + # 2 = Detach Camera + # 3 = Set Camera... + # 4 = Rapid Frame... + # 5 = Preview Mode + # 6 = Record/Playback Images... + # 7 = Performance.. + + +#**************** +# Control panel +#**************** + +# include the following control files which must be located in +# $INS_ROOT/$INS_USER/COMMON/CONFIGFILES/ *) + +RTDB.CTRLFIL1 "ngcrtdCtrl.cfg"; # description for control widgets to add +RTDB.CTRLKEY1 "NGCRTD"; # key used for category + +#RTDB.CTRLFIL2 "osrtdCtrl.cfg"; # description for control widgets to add +#RTDB.CTRLKEY2 "OSRTD" ; # key used for category + +# Note: add the INDX keys of RTDB.CTRLFILi to RTDB.CTRLWDG below when needed !! + + +# Remove or add control items by changing the RTDB.CTRLWIN item list +RTDB.CTRLWIN "1 2 3" + # list of control windows to display: + # i.e. the control windows on the left side + # 1 = Zoom window + # 2 = Pan window + # 3 = Control window (see RTDB.CTRLWDG) + + +# Remove or add control items by changing the RTDB.CTRLWDG item list +RTDB.CTRLWDG "1 2 3 4 5 6 7 8 9 10 11 21 22 25 26 23 24" +#RTDB.CTRLWDG "1 2 3 4 5 6 7 8 9 10 11" + # list of control widgets to display: + # 1 = Camera status + # 2 = X coordinate + # 3 = Y coordinate + # 4 = Value display + # 5 = Alpha coordinate + # 6 = Delta coordinate + # 7 = Low cut entry + # 8 = High cut entry + # 9 = Auto cut button + # 10 = Scale widget + # 11 = Image transformations + # optionally user defined indices can be added + + +#******************** +# Optional keywords +#******************** + +RTDB.CCSINIT "F"; # Init CCS i.e. use 'seq_ccsInit $RTDB.APPNAME' + # default is "F" + +RTDB.CAMERA "$HOST-RTDB"; # camera name + # (not used when env. RTD_CAMERA is defined) + +RTDB.ATTACH "T"; # attach to camera (via rtdServer) - default is "F" + +#RTDB.STRTOPT "-rtd_geometry 1280x1024+0+0"; # startup options + +#RTDB.LOADFILE "$HOME/IMAGES/m51.fits"; # file to load after startup + +#RTDB.SERVER "ngcrtdDtt"; # data transfer server name + + +# +# *) remove comment when needed +# diff --git a/DCS/sxdir/config/sxdirCONFIG.cfg b/DCS/sxdir/config/sxdirCONFIG.cfg new file mode 100644 index 0000000..1ba0fa0 --- /dev/null +++ b/DCS/sxdir/config/sxdirCONFIG.cfg @@ -0,0 +1,45 @@ +#****************************************************************************** +# E.S.O. - VLT project +# +# "@(#) $Id: sxdirCONFIG.cfg 170230 2017-05-25 16:00:10Z bsalasni $" +# +# NGCIRSW Startup Configuration (for ctoo) +# +# who when what +# -------- ---------- ---------------------------------------------- +# bsalasni 2017-05-25 Created from template instrument +#****************************************************************************** +PAF.HDR.START; +PAF.TYPE "Configuration"; # Type of PAF +PAF.ID "@(#) $Id: sxdirCONFIG.cfg 170230 2017-05-25 16:00:10Z bsalasni $"; +PAF.NAME "NGCIRSW"; # Name of PAF +PAF.DESC "NGCIRSW Startup Configuration"; +PAF.CRTE.NAME "bsalasni"; # Name of creator +PAF.CRTE.DAYTIM "2017-05-25"; # Civil Time for creation +PAF.LCHG.NAME " "; # Name of person/appl. changing +PAF.LCHG.DAYTIM " "; # Timestamp of last change +PAF.CHCK.NAME " "; # Name of appl. checking +PAF.HDR.END; + +# +# START CONFIG SET +# ----------------------------- +CONFIG.SET1.NAME "SOXS_NGC"; +CONFIG.SET1.DICT "NGCCON"; +CONFIG.SET1.FILE1 "sxdirStartup.cfg"; +CONFIG.SET1.PERM1 664; # all +#CONFIG.SET1.PERM1 644; # manager account only +CONFIG.SET1.BACKUP T; +CONFIG.SET1.LOG T; + +# +# ctooConfigArchive CONFIG +# ------------------------ +CONFIG.ARCHIVE.NAME "NGCIRSW"; +CONFIG.ARCHIVE.USER ""; +CONFIG.ARCHIVE.MODULE "sxdir"; +CONFIG.ARCHIVE.FILE1 "sxdir*.cfg"; +CONFIG.ARCHIVE.FILE2 "CONFIG/*"; +CONFIG.ARCHIVE.FILE3 "ngcrtd*.cfg"; + +# ___oOo___ diff --git a/DCS/sxdir/config/sxdirStartup.cfg b/DCS/sxdir/config/sxdirStartup.cfg new file mode 100644 index 0000000..27519ed --- /dev/null +++ b/DCS/sxdir/config/sxdirStartup.cfg @@ -0,0 +1,69 @@ +#****************************************************************************** +# E.S.O. - VLT project +# +# "@(#) $Id: sxdirNGCIR.cfg 170230 2017-05-25 16:00:00Z bsalasni $" +# +# NGCIRSW Startup Configuration (for ctoo) +# +# who when what +# -------- ---------- ---------------------------------------------- +# bsalasni 2017/05/25 Created from template instrument +#****************************************************************************** +PAF.HDR.START; +PAF.TYPE "Configuration"; # Type of PAF +PAF.ID "@(#) $Id: sxdirNGCIR.cfg 170230 2017-05-25 16:00:00Z bsalasni $"; +PAF.NAME "NGCIRSW"; # Name of PAF +PAF.DESC "NGCIRSW Startup Configuration"; +PAF.CRTE.NAME "bsalasni"; # Name of creator +PAF.CRTE.DAYTIM "2017-05-25"; # Civil Time for creation +PAF.LCHG.NAME " "; # Name of person/appl. changing +PAF.LCHG.DAYTIM " "; # Timestamp of last change +PAF.CHCK.NAME " "; # Name of appl. checking +PAF.HDR.END; + +# Control server name +DET.CON.SERVER "ngcircon"; + +# Database point +DET.CON.DATABASE "ngcircon"; + +# Instance label for server and OLDB +DET.CON.INSTANCE "1"; + +# HW system configuration file +DET.CON.SYSCFG "NGCIRSW/sxdir.cfg" + +# Startup mode (NORMAL, HW-SIM, LCU-SIM) +DET.CON.OPMODE "LCU-SIM"; + +# Go online after start +DET.CON.AUTONLIN T; + +# Auto-start at online +DET.CON.AUTOSTRT T; + +# Enable sub-system status polling +DET.CON.POLL T; + +# Polling interval (ms) +DET.CON.POLLINT 500; + +# Detector system index (DETi.XXX) +DET.CON.DETIDX 1; + +# Dictionaries to load for this detector system +DET.CON.DICT "NGCDCS"; + +# GUI name +DET.CON.GUI "ngcgui"; + +# RTD camera +DET.CON.RTD.CAMERA "NIR_CAM"; + +# RTD camera attach +DET.CON.RTD.ATTACH T; + +# RTD camera enable +DET.CON.RTD.ENABLE T; + +# ___oOo___ diff --git a/DCS/sxdir/src/Makefile b/DCS/sxdir/src/Makefile new file mode 100644 index 0000000..8939c75 --- /dev/null +++ b/DCS/sxdir/src/Makefile @@ -0,0 +1,199 @@ +#******************************************************************************* +# E.S.O. - VLT project +# +# "@(#) $Id: Makefile 297901 2017-05-26 17:40:15Z dricci $" +# +# Makefile of ........ +# +# who when what +# -------- ---------- ---------------------------------------------- +# vltsccm yyyy-mm-dd created +# + +#******************************************************************************* +# This Makefile follows VLT Standards (see Makefile(5) for more). +#******************************************************************************* +# REMARKS +# None +#------------------------------------------------------------------------ + +CONFIG_DIR = $(INS_ROOT)/SYSTEM/COMMON/CONFIGFILES/ + + +# +# user definable C-compilation flags +#USER_CFLAGS = + +# +# additional include and library search paths +#USER_INC = +#USER_LIB = + +# +# MODULE CODE DESCRIPTION: +# ------------------------ +# As a general rule: public file are "cleaned" and "installed" +# local (_L) are not "installed". + +# +# C programs (public and local) +# ----------------------------- +EXECUTABLES = +EXECUTABLES_L = + +# +# +xxxxx_OBJECTS = +xxxxx_LDFLAGS = +xxxxx_LIBS = + +# +# special compilation flags for single c sources +#yyyyy_CFLAGS = + +# +# Includes (.h) files (public only) +# --------------------------------- +INCLUDES = + +# +# Libraries (public and local) +# ---------------------------- +LIBRARIES = +LIBRARIES_L = + +# +# +lllll_OBJECTS = + +# +# Scripts (public and local) +# ---------------------------- +SCRIPTS = +SCRIPTS_L = + +# +# TCL scripts (public and local) +# ------------------------------ +TCL_SCRIPTS = +TCL_SCRIPTS_L = + +# +# +tttttt_OBJECTS = +tttttt_TCLSH = +tttttt_LIBS = + +# +# TCL libraries (public and local) +# ------------------------------ +TCL_LIBRARIES = +TCL_LIBRARIES_L = + +# +# +tttlll_OBJECTS = + +# +# UIF panels (public and local) +# ---------------------------- +PANELS = +PANELS_L = + +# +# On-Line Database Files +# ---------------------- +DBL_CLASSES = +DBL_BCF = +DBL_FLAGS = +xxxx_DBL_FLAGS = + +# +# IDL Files and flags +# +IDL_FILES = +IDL_TAO_FLAGS = +USER_IDL = + +# +# man pages to be done +# -------------------- +MANSECTIONS = +MAN1 = +MAN3 = +MAN5 = +MAN7 = +MAN8 = + +# +# local man pages +# --------------- +MANl = + +# +# ASCII file to be converted into Framemaker-MIF +# -------------------- +ASCII_TO_MIF = + +# +# INS_ROOT files to be installed +#------------------------------- +INS_ROOT_FILES = +INS_ROOT_DIR = + +# +# other files to be installed +#---------------------------- +INSTALL_FILES = + +# +# list of all possible C-sources (used to create automatic dependencies) +# ------------------------------ +CSOURCENAMES = \ + $(foreach exe, $(EXECUTABLES) $(EXECUTABLES_L), $($(exe)_OBJECTS)) \ + $(foreach lib, $(LIBRARIES) $(LIBRARIES_L), $($(lib)_OBJECTS)) + +# +#>>>>> END OF standard rules + +# +# CHOSE PLATFORM +# -------------- +# Default is UNIX, for VxVorks application next line MUST BE UNCOMMENTED +#MAKE_VXWORKS = on + +# +# INCLUDE STANDARDS +# ----------------- +MAKEDIR = $(VLTROOT)/include +include $(MAKEDIR)/vltMakefile + +# +# TARGETS +# ------- +all: do_all + @echo " . . . 'all' done" + +clean : clean_all + @echo " . . . clean done" + +clean_dist : clean_all clean_dist_all + @echo " . . . clean_dist done" + +man : do_man + @echo " . . . man page(s) done" + +install : install_all + @cp -f ../config/sxdir* $(CONFIG_DIR)/ + @cp -f ../config/ngcrtdRTDB.cfg $(CONFIG_DIR)/ + @cp -f ../config/ngcrtdMenu.cfg $(CONFIG_DIR)/ + @cp -f ../config/ngcrtdCtrl.cfg $(CONFIG_DIR)/ + @mkdir -p $(CONFIG_DIR)/NGCIRSW + @cp -f ../config/NGCIRSW/* $(CONFIG_DIR)/NGCIRSW + @echo " . . . installation done" + +db : db_all + @echo " . . . ../DB done" + + +#___oOo___ diff --git a/ICS/sxi/CDT/sxiControl.cdt b/ICS/sxi/CDT/sxiControl.cdt new file mode 100644 index 0000000..6ce3454 --- /dev/null +++ b/ICS/sxi/CDT/sxiControl.cdt @@ -0,0 +1,26 @@ +//***************************************************************************** +// E.S.O. - VLT project +// +// "@(#) $Id: sxiControl.cdt 246635 2017-05-26 10:13:39Z dricci $" +// +// who when what +// ---------- -------- ---------------------------------------------- +// dricci 2017-05-26 adapted from Template file +// + +//************************************************************************ +// NAME +// sxiControl.cdt - command definition table +// +// DESCRIPTION +// This file describes the commands of process sxiControl. +// +// +//------------------------------------------------------------------------ +// + + +#include "icbControl.cdt" + +//============================================================================= +//__o0o__ diff --git a/ICS/sxi/CDT/sxiSimControl.cdt b/ICS/sxi/CDT/sxiSimControl.cdt new file mode 100644 index 0000000..392b81b --- /dev/null +++ b/ICS/sxi/CDT/sxiSimControl.cdt @@ -0,0 +1,26 @@ +//***************************************************************************** +// E.S.O. - VLT project +// +// "@(#) $Id: sxiSimControl.cdt 329452 2020-01-17 14:09:40Z mdepasca $" +// +// who when what +// ---------- -------- ---------------------------------------------- +// mdepasca 09/05/19 added inclusion of ic0fbSim CDT +// rschmutz 29/10/98 created. +// + +//************************************************************************ +// NAME +// sxiControl.cdt - command definition table +// +// DESCRIPTION +// This file describes the commands of process sxiControl. +// +// +//------------------------------------------------------------------------ +// + +#include "ic0lcuServer.cdt" +#include "ic0fbSim.cdt" +//============================================================================= +//__o0o__ diff --git a/ICS/sxi/ChangeLog b/ICS/sxi/ChangeLog new file mode 100644 index 0000000..dfcb487 --- /dev/null +++ b/ICS/sxi/ChangeLog @@ -0,0 +1,304 @@ +Wed Jun 29 09:16:01 2016 + + * src/xxiConfigLib.tcl: + * src/xxiConfigSet.tcl: + Add code to support multiple ICS architecture. + +Thu Jul 24 07:59:29 2014 Stewart McLay + + * include/xxiSERVER.h: Removed obsolete oslxALIAS + * src/xxiCtrlMAIN_HANDLER.C: Removed obsolete oslxALIAS + * src/xxiSERVER.C: Removed obsolete oslxALIAS + +Wed Sep 04 12:23:37 2013 xxi version: 1.62 + + * dbl/xxi3Env2.db: Using process ic0fbControl_2 + +Tue Sep 03 12:23:37 2013 xxi version: 1.61 + + * config/lxxics3.scan: Renamed ASEN to ASEN1. + +Thu Aug 29 12:23:37 2013 xxi version: 1.60 + + * config/wxxics1.scan: Added missing scan links for LAMP2 and FILT2 + devices + +Fri Aug 09 12:23:37 2013 xxi version: 1.59 + + * dbl/xxiEnv.db: Updated for DCE environments. + * dbl/xxiEnv1.db: Added TSH shutter device. + * dbl/xxiEnv2.db: Added FILT1 and GRAT1. + * dbl/xxi2Env1.db: Removed FILT. Added LAMP2, SHUT2 and FILT2. + * dbl/xxi2Env2.db: Removed GRAT1. Added IODEV2 and SENSOR6. + * dbl/xxi3Env1.db: Added SENSOR3 (LAKE) and SENSOR4i (JUMO). + * dbl/xxi3Env2.db: Removed SENSOR3 and SENSOR4. Added SENSOR5 and + SENSOR6. + * dbl/xxiSIM_CONTROL.class: Added INS.FILT1 and INS.GRAT1. + * dbl/xxi2SIM_CONTROL.class: Removed FILT1 and GRAT1. Added LAMP2, + SHUT2, FILT2 and SENSOR6. + * dbl/xxi3SIM_CONTROL.class: Removed DIS1. Added IODEV1 and SENSOR5. + * config/lxxics1.scan: Added shutter (TSH) device + * config/lxxics2.scan: Removed TSH. Added FILT and GRAT. + * config/lxxics3.scan: Removed FILT. Added ASEN, LAKE and JUMO. + * config/lxxics4.scan: Deleted + * config/lxxics5.scan: Deleted + * config/lxxics6.scan: Deleted + * config/wxxics1.scan: Created + * config/wxxics2.scan: Created + * config/wxxics3.scan: Created + +Wed Aug 18 12:23:37 2010 xxi version: 1.58 + + * config/lxxics2.scan: ASEN, LAKE, JUMO and intPower for LAMP added + * dbl/xxiEnv2.db: ASEN, LAKE and JUMO added + +Fri Jan 23 18:01:47 2009 xxi version: 1.57 + + * Constructor for xxiCtrlMAIN_HANDLER now takes a const arg. + * Use ATTRIBUTE_UNUSED on rcsId. + +Mon Dec 29 19:09:52 2008 xxi version: 1.56 + + * dbl/xxiEnv1.db: changed back FILTER motor type + +Fri Oct 17 15:04:16 2008 xxi version: 1.55 + * Updated xxi/src/Makefile for VLT2009. + +Wed Oct 01 17:12:18 2008 xxi version: 1.54 + + * dbl/xxiEnv1.db: changed motor type to CAN RMC (filter) + +Thu Jun 30 17:59:40 2005 Antonio Longinotti + + * config/lxxics1.scan: added scan for grating order (VLTSW20050206) + +Thu Jun 30 17:58:05 2005 xxi version: 1.53 +Fri Aug 27 13:20:06 2004 Template Instrument Manager (care of Anotnio Longinotti) + + * test/*: removed (VLTSW20040158) + +Wed Aug 25 09:42:23 2004 xxi version: 1.52 +Fri Jun 11 13:59:08 2004 Antonio Longinotti + + * test/Makefile: VLTSW20040149: adapted + +Wed Jun 09 15:35:55 2004 xxi version: 1.51 +Thu Nov 27 16:16:26 2003 Antonio Longinotti + + * test/TestList.grep (START): updated to follow ic0SelfTest output + +Thu Nov 27 15:22:58 2003 xxi version: 1.50 +Mon Nov 17 17:00:20 2003 Antonio Longinotti + + * src/xxiConfigSet.tcl: fixed APR2004 warning + +Mon Nov 17 16:46:36 2003 xxi version: 1.49 +Thu Jul 31 09:57:25 2003 Antonio Longinotti + + * src/Makefile (xxiConfigSet_TCLSH): removed seqSh -f option + +Thu Jul 31 09:57:04 2003 xxi version: 1.48 +Tue May 20 18:07:06 2003 Antonio Longinotti + + * dbl/xxiSIM_CONTROL.class: added INS.TEMP11.REF to simulation table + +Tue May 20 18:05:19 2003 xxi version: 1.47 +Mon May 19 12:01:02 2003 Antonio Longinotti + + * test/ref/xxiTest.ref: updated + +Mon May 19 11:59:56 2003 xxi version: 1.46 +Fri Mar 21 17:15:33 2003 Antonio Longinotti + + * dbl/xxiSIM_CONTROL.class: improved simulation database + +Wed Mar 19 13:07:01 2003 xxi version: 1.45 +Tue Dec 3 14:12:01 2002 Antonio Longinotti + + * test/ref/xxiTest.ref: updated + +Tue Dec 03 13:16:35 2002 xxi version: 1.44 +Mon Sep 30 11:48:13 2002 Antonio Longinotti + + * src/xxiINS_TRAK.C: minor changes related to VLTSW20020507 + +Fri Sep 27 15:29:22 2002 xxi version: 1.43 +Fri Aug 23 12:26:51 2002 xxi version: 1.42 +Thu Jun 20 15:47:52 2002 Antonio Longinotti + + * test/TestList.grep: updated + +Thu Jun 20 15:17:12 2002 xxi version: 1.41 +Mon Jun 10 14:30:11 2002 xxi version: 1.40 +Fri Jan 25 13:59:45 2002 Antonio Longinotti + + * src/Makefile: removed link to msql library (seq 2.66) + +Fri Jan 25 12:21:52 2002 xxi version: 1.39 +Tue Jan 15 10:06:38 2002 Antonio Longinotti + + * config/lxxics1.scan: added fbackValid for motors (VLTSW20010770) + +Wed Jan 09 17:56:05 2002 xxi version: 1.38 +Fri Jan 04 14:43:30 2002 xxi version: 1.37 + + - xxiyyyy dropped: moved back to xxidev: + * dbl/xxiEnv2.db: include xxidev.h. + * config/lxxics2.scan: scans adapted to xxidev. + +Thu Dec 20 01:00:19 2001 xxi version: 1.36 + + - SPR VLTSW20010581: + * config/lxxics2.scan: TIM1 attr. added. + * dbl/xxiEnv2.db: TIM1 added. + + - better special device support: + * dbl/xxiEnv2.db: replaced special device module xxidev with xxiyyyy. + * config/lxxics2.scan: scans adapted to xxiyyyy. + +Thu Dec 13 13:30:16 2001 Antonio Longinotti + + * include/xxiSERVER.h: replaced XXI with xxi (VLTSW20010689) + +Thu Dec 13 13:17:24 2001 xxi version: 1.35 +Sat Dec 08 02:32:54 2001 xxi version: 1.34 + + - SPR VLTSW20010727: + * dbl/xxiEnv1.db: IODS MCM motor: motDVAMI -> motDVA0X. + +Fri Dec 7 09:33:48 2001 Antonio Longinotti + + * src/Makefile: modified link flags for portability + + +Wed Nov 28 16:18:57 2001 xxi version: 1.33 +Tue Nov 06 10:07:38 2001 xxi version: 1.32 +Fri Nov 2 13:01:24 2001 Antonio Longinotti + + * src/xxiConfigLib.tcl: new (VLTSW20010621) + +Wed Oct 31 17:01:49 2001 xxi version: 1.31 +Thu Sep 13 15:12:58 2001 xxi version: 1.30 +Tue Sep 11 17:43:03 2001 Antonio Longinotti + + * src/xxiINS_ANALOG.C: minor changes + +Thu Sep 06 18:41:30 2001 xxi version: 1.29 +Tue Sep 04 14:36:06 2001 xxi version: 1.28 + + - SPRs 20010501, 20010502: Esters DC24 and CN77000 devices added. + * dbl/xxiEnv2.db: FCTC: use icbSEN_CN77000, TEMP: use icb_SEN_ESTERS. + +Tue Aug 28 14:54:16 2001 Antonio Longinotti + + * config/lxxics2.scan: EXPM added. + +Tue Aug 28 14:47:48 2001 xxi version: 1.27 +Mon Aug 13 20:50:26 2001 Antonio Longinotti + + * dbl/xxiSIM_CONTROL.class: dataref table completed + +Thu Aug 09 13:41:42 2001 xxi version: 1.26 +Fri Jul 6 15:18:17 2001 Antonio Longinotti + + * src/Makefile: removed MORE_LIBS (OCT2001) + +Fri Jul 06 15:13:32 2001 xxi version: 1.25 +Tue May 01 03:18:00 2001 xxi version: 1.24 + + * src/xxiConfigSet.tcl: use ctooDBCFG::Append. + +Mon Apr 30 00:11:28 2001 xxi version: 1.23 + + - SPR 20010144: + * dbl/xxiEnv2.db: exposure meter added (expm). + +Fri Mar 02 23:56:13 2001 xxi version: 1.22 + + - SPR 20010113: + * dbl/xxiSIM_CONTROL.class: ic0SIM_CONTROL #define deleted: not longer needed. + +Fri Feb 9 18:23:38 2001 Antonio Longinotti + + * src/xxiControl.C: fixed bug + +Fri Feb 09 10:14:26 2001 xxi version: 1.21 +Sat Feb 03 01:10:50 2001 xxi version: 1.20 + + - SPR 2000505: + * dbl/xxiEnv2.db: include icbEnv.db only in LCU build. + +Fri Feb 02 18:50:36 2001 xxi version: 1.19 + + - SPR 2000505: + * dbl/xxiEnv1.db: icbID added. + * dbl/xxiEnv2.db: icbID added. + +Fri Feb 2 10:30:10 2001 Antonio Longinotti + + * include/xxiSERVER.h: * added AttachDbEvents (VLTSW20000565) + * src/xxiSERVER.C: * added AttachDbEvents (VLTSW20000565) + * src/xxiControl.C: added INS.LAMP assembly (VLTSW20000503) + +Wed Jan 31 14:07:05 2001 xxi version: 1.18 +Mon Jan 08 17:41:21 2001 xxi version: 1.17 + + * src/Makefile: removed xxiStart/xxiStop (replaced by xxinsStart/xxinsStop) + +Sun Dec 10 15:41:35 2000 xxi version: 1.16 + + - SPR 20000504: add icbMOT_ADC device: + * src/dbl/xxiEnv1.db: device ADC1 added. + * src/dbl/xxiSIM_CONTROL.class: device ADC1 added. + * src/config/lxxics1.dbcfg: function ADC1 added. + +Sat Dec 09 18:52:33 2000 xxi version: 1.15 + + - SPR 20000505: support for multiple ICSs: + * src/xxiControl.C: use config. set "XXXX" (instead of "INS"). + * src/xxiStart: icbStart XXXX parameter added. + * src/xxiStop: icbStop XXXX parameter added. + * src/xxiConfigSet.tcl: insid parameter added. + +Tue Sep 05 16:31:50 2000 xxi version: 1.13 + + * src/xxiControl.C: updated RegisterStorable for assemblies + +Tue Jun 13 16:01:44 2000 xxi version: 1.12 +Tue Jun 06 11:51:08 2000 xxi version: 1.11 +Fri Apr 14 15:51:15 2000 xxi version: 1.10 +Fri Feb 04 10:56:15 2000 xxi version: 1.9 +Thu Feb 03 15:03:13 2000 xxi version: 1.8 + + * dbl/xxiEnv1.db: function FOCU added, motNUMBER_CONV_METHODS added. + * config/lxxics1.scan: function FOCU added. + +Tue Jan 11 10:43:19 2000 xxi version: 1.7 +Sat Dec 18 18:55:36 1999 xxi version: 1.6 + + * config/lxxics2.scan: LAMP.timeOn added (FEB2000, optional). + +Sun Nov 28 22:37:25 1999 xxi version: 1.5 + + - one device/type added. + * dbl/xxiSimData.db: one device/type added. + * dbl/xxiEnv1.db: all motor device placed here. + * dbl/xxiEnv2.db: lamp, shutter and sensors placed here. + * dbl/xxiSIM_CONTROL.class: one device/type added. + * config/lxxics1.scan: one device/type added. + * config/lxxics2.scan: one device/type added. + * config/XXXX_ICS.alias: one device/type added. + +Sun Nov 28 19:02:49 1999 xxi version: 1.4 + + * src/xxiStart: created. + * src/xxiStop: created. + * src/xxiDictionary.txt: deleted. Moved to module dicXXXX. + +Fri Oct 01 05:22:38 1999 xxi version: 1.3 + + * src/Makefile: use INS_ROOT install rules. + +Tue Sep 14 14:30:01 1999 xxi version: 1.2 +Tue Sep 07 15:08:51 1999 xxi version: 1.1 +"@(#) $Id: ChangeLog 285239 2016-06-29 09:17:42Z mcomin $" diff --git a/ICS/sxi/config/wsxics1.scan b/ICS/sxi/config/wsxics1.scan new file mode 100644 index 0000000..1e272b8 --- /dev/null +++ b/ICS/sxi/config/wsxics1.scan @@ -0,0 +1,273 @@ +#***************************************************************************** +# E.S.O. - NTT project +# +# "@(#) $Id: wsxics1.scan 246635 2017-06-23 14:38:57Z dricci $" +# +# who when what +# -------- ---------- ---------------------------------------------- +# bsalasni 2022-03-15 Updated AFCi links +# mdepasca 2020-08-27 Add link to AFCi +# mdepasca 2020-01-08 Add link for position DB point in NISE +# dricci 2019-09-20 Renamed OPTI5 (dummy standard device) to NISE (special device). +# dricci 2019-08-02 Added IRTS sensor. +# dricci 2018-06-29 Renamed PZTi to AFCi +# dricci 2018-06-27 Changed sensor names to CVTS, CPTS, CROT +# dricci 2018-04-11 Renamed KRIP to MERC. Added LAMP7 THAR. +# dricci 2018-02-16 Removed VFOC*, then renamed POS6 to POS2. Renamed VNTS to CPTS. +# dricci 2017-10-20 Added CUPS and NFOC devices. +# dricci 2017-07-11 Piezo IODEV and sensors for three Lakeshore 336. +# dricci 2017-06-22 Renamed and added devices. +# dricci 2017-05-25 Adapted from Template file. +# + +#***************************************************************************** +# Input file for scanLink for wsxics1 +#----------------------------------------------------------------------------- + +#- +#- INSH - SHUT +#- +INSH.state INSH.state SRBX 2 +INSH.simulation INSH.simulation SRBX 2 +INSH.substate INSH.substate SRBX 2 +INSH.error INSH.error SRBX 2 +INSH.status0 INSH:DATA.status0 SRBX 2 + +#- +#- ACFW - FILT +#- +ACFW.state ACFW.state SRBX 2 +ACFW.simulation ACFW.simulation SRBX 2 +ACFW.substate ACFW.substate SRBX 2 +ACFW.error ACFW.error SRBX 2 +ACFW.status0 ACFW:DATA.status0 SRBX 2 +ACFW:MOTOR:STATUS.posEnc ACFW:DATA.posEnc SRBX 2 + +#- +#- QTH - LAMP1 +#- +QTH.state QTH.state SRBX 2 +QTH.simulation QTH.simulation SRBX 2 +QTH.status0 QTH:DATA.status0 SRBX 2 +QTH.intPower QTH:DATA.intPower SRBX 2 + +#- +#- DEUT - LAMP2 +#- +DEUT.state DEUT.state SRBX 2 +DEUT.simulation DEUT.simulation SRBX 2 +DEUT.status0 DEUT:DATA.status0 SRBX 2 +DEUT.intPower DEUT:DATA.intPower SRBX 2 + +#- +#- NEON - LAMP3 +#- +NEON.state NEON.state SRBX 2 +NEON.simulation NEON.simulation SRBX 2 +NEON.status0 NEON:DATA.status0 SRBX 2 +NEON.intPower NEON:DATA.intPower SRBX 2 + +#- +#- ARGO - LAMP4 +#- +ARGO.state ARGO.state SRBX 2 +ARGO.simulation ARGO.simulation SRBX 2 +ARGO.status0 ARGO:DATA.status0 SRBX 2 +ARGO.intPower ARGO:DATA.intPower SRBX 2 + +#- +#- XENO - LAMP5 +#- +XENO.state XENO.state SRBX 2 +XENO.simulation XENO.simulation SRBX 2 +XENO.status0 XENO:DATA.status0 SRBX 2 +XENO.intPower XENO:DATA.intPower SRBX 2 + +#- +#- MERC - LAMP6 +#- +MERC.state MERC.state SRBX 2 +MERC.simulation MERC.simulation SRBX 2 +MERC.status0 MERC:DATA.status0 SRBX 2 +MERC.intPower MERC:DATA.intPower SRBX 2 + +#- +#- THAR - LAMP7 +#- +THAR.state THAR.state SRBX 2 +THAR.simulation THAR.simulation SRBX 2 +THAR.status0 THAR:DATA.status0 SRBX 2 +THAR.intPower THAR:DATA.intPower SRBX 2 + +#- +#- CUPS - OPTI1 +#- +CUPS.state CUPS.state SRBX 2 +CUPS.simulation CUPS.simulation SRBX 2 +CUPS.substate CUPS.substate SRBX 2 +CUPS.error CUPS.error SRBX 2 +CUPS.status0 CUPS:DATA.status0 SRBX 2 +CUPS:MOTOR:STATUS.posEnc CUPS:DATA.posEnc SRBX 2 +CUPS:MOTOR:STATUS.pos CUPS:DATA.pos SRBX 2 + +#- +#- CALS - OPTI2 +#- +CALS.state CALS.state SRBX 2 +CALS.simulation CALS.simulation SRBX 2 +CALS.substate CALS.substate SRBX 2 +CALS.error CALS.error SRBX 2 +CALS.status0 CALS:DATA.status0 SRBX 2 +CALS:MOTOR:STATUS.posEnc CALS:DATA.posEnc SRBX 2 +CALS:MOTOR:STATUS.pos CALS:DATA.pos SRBX 2 + +#- +#- ACQS - OPTI3 +#- +ACQS.state ACQS.state SRBX 2 +ACQS.simulation ACQS.simulation SRBX 2 +ACQS.substate ACQS.substate SRBX 2 +ACQS.error ACQS.error SRBX 2 +ACQS.status0 ACQS:DATA.status0 SRBX 2 +ACQS:MOTOR:STATUS.posEnc ACQS:DATA.posEnc SRBX 2 +ACQS:MOTOR:STATUS.pos ACQS:DATA.pos SRBX 2 + +#- +#- VISE - OPTI4 +#- +VISE.state VISE.state SRBX 2 +VISE.simulation VISE.simulation SRBX 2 +VISE.substate VISE.substate SRBX 2 +VISE.error VISE.error SRBX 2 +VISE.status0 VISE:DATA.status0 SRBX 2 +VISE:MOTOR:STATUS.posEnc VISE:DATA.posEnc SRBX 2 +VISE:MOTOR:STATUS.pos VISE:DATA.pos SRBX 2 + +#- +#- NISE - NISE +#- +NISE.state NISE.state SRBX 2 +NISE.simulation NISE.simulation SRBX 2 +NISE.substate NISE.substate SRBX 2 +NISE.error NISE.error SRBX 2 +NISE.pos NISE:DATA.pos SRBX 2 +NISE.status0 NISE:DATA.status0 SRBX 2 + +#- +#- AFOC - POS1 +#- +AFOC.state AFOC.state SRBX 2 +AFOC.simulation AFOC.simulation SRBX 2 +AFOC.substate AFOC.substate SRBX 2 +AFOC.error AFOC.error SRBX 2 +AFOC.status0 AFOC:DATA.status0 SRBX 2 +AFOC:MOTOR:STATUS.posEnc AFOC:DATA.posEnc SRBX 2 +AFOC:MOTOR:STATUS.pos AFOC:DATA.pos SRBX 2 + +#- +#- NFOC - POS2 +#- +NFOC.state NFOC.state SRBX 2 +NFOC.simulation NFOC.simulation SRBX 2 +NFOC.substate NFOC.substate SRBX 2 +NFOC.error NFOC.error SRBX 2 +NFOC.status0 NFOC:DATA.status0 SRBX 2 +NFOC:MOTOR:STATUS.posEnc NFOC:DATA.posEnc SRBX 2 +NFOC:MOTOR:STATUS.pos NFOC:DATA.pos SRBX 2 + +#- +#- ADC - ADC1 +#- +ADC1.state ADC1.state SRBX 2 +ADC1.simulation ADC1.simulation SRBX 2 +ADC1.status0 ADC1:DATA.status0 SRBX 2 +ADC1.substate ADC1.substate SRBX 2 +ADC1.error ADC1.error SRBX 2 +ADC1.mode ADC1:DATA.mode SRBX 2 +ADC1:MOTOR:STATUS.posEnc ADC1:DATA.posEnc SRBX 2 +ADC1:MOTOR:STATUS.pos ADC1:DATA.pos SRBX 2 + +#- +#- ADC - ADC2 +#- +ADC2.state ADC2.state SRBX 2 +ADC2.simulation ADC2.simulation SRBX 2 +ADC2.status0 ADC2:DATA.status0 SRBX 2 +ADC2.substate ADC2.substate SRBX 2 +ADC2.error ADC2.error SRBX 2 +ADC2.mode ADC2:DATA.mode SRBX 2 +ADC2:MOTOR:STATUS.posEnc ADC2:DATA.posEnc SRBX 2 +ADC2:MOTOR:STATUS.pos ADC2:DATA.pos SRBX 2 + +#- +#- AFC1 +#- +AFC1.state AFC1.state SRBX 2 +AFC1.simulation AFC1.simulation SRBX 2 +AFC1.substate AFC1.substate SRBX 2 +AFC1.error AFC1.error SRBX 2 +AFC1.curpos1 AFC1:DATA.curpos1 SRBX 2 +AFC1.curpos2 AFC1:DATA.curpos2 SRBX 2 +AFC1.setpos1 AFC1:DATA.setpos1 SRBX 2 +AFC1.setpos2 AFC1:DATA.setpos2 SRBX 2 +AFC1.mode AFC1:DATA.mode SRBX 2 +AFC1.status0 AFC1:DATA.status0 SRBX 2 + +#- +#- AFC2 +#- +AFC2.state AFC2.state SRBX 2 +AFC2.simulation AFC2.simulation SRBX 2 +AFC2.substate AFC2.substate SRBX 2 +AFC2.error AFC2.error SRBX 2 +AFC2.curpos1 AFC2:DATA.curpos1 SRBX 2 +AFC2.curpos2 AFC2:DATA.curpos2 SRBX 2 +AFC2.setpos1 AFC2:DATA.setpos1 SRBX 2 +AFC2.setpos2 AFC2:DATA.setpos2 SRBX 2 +AFC2.mode AFC2:DATA.mode SRBX 2 +AFC2.status0 AFC2:DATA.status0 SRBX 2 + +#- +#- CVTS - SENSOR1 +#- +CVTS.state CVTS.state SRBX 2 +CVTS.simulation CVTS.simulation SRBX 2 +CVTS.input CVTS:DATA.input SRBX 2 +CVTS.last CVTS:DATA.last SRBX 2 + +#- +#- IRTS - SENSOR2 +#- +IRTS.state IRTS.state SRBX 2 +IRTS.simulation IRTS.simulation SRBX 2 +IRTS.input IRTS:DATA.input SRBX 2 +IRTS.last IRTS:DATA.last SRBX 2 + +#- +#- CPTS - SENSOR3 +#- +CPTS.state CPTS.state SRBX 2 +CPTS.simulation CPTS.simulation SRBX 2 +CPTS.input CPTS:DATA.input SRBX 2 +CPTS.last CPTS:DATA.last SRBX 2 + +#- +#- CROT - SENSOR4 +#- +CROT.state CROT.state SRBX 2 +CROT.simulation CROT.simulation SRBX 2 +CROT.input CROT:DATA.input SRBX 2 +CROT.last CROT:DATA.last SRBX 2 + +# #- +# #- CROT - IODEV3 +# #- +# CROT.state CROT.state SRBX 2 +# CROT.simulation CROT.simulation SRBX 2 +# CROT.substate CROT.substate SRBX 2 +# CROT.error CROT.error SRBX 2 +# CROT.last CROT:DATA.last SRBX 2 +# CROT.output CROT:DATA.output SRBX 2 +# CROT.input CROT:DATA.input SRBX 2 + +#___oOo___ diff --git a/ICS/sxi/dbl/sxiALARM.class b/ICS/sxi/dbl/sxiALARM.class new file mode 100644 index 0000000..819d0d4 --- /dev/null +++ b/ICS/sxi/dbl/sxiALARM.class @@ -0,0 +1,54 @@ +//***************************************************************************** +// E.S.O. - NTT project +// +// "@(#) $Id: sxiALARM.class 314724 2018-10-08 15:39:48Z dricci $" +// +// who when what +// -------- ---------- ---------------------------------------------- +// dricci 2018-10-08 Adapted from esiAlarm.class +// + +//*********************************************************************** +// NAME +// sxiALARM.class - ESPRESSO alarm handling class +// +// +// SYNOPSIS +// +// +// PARENT CLASS +// +// +// DESCRIPTION +// ESPRESSO instrument database +// +// +// CAUTIONS +// +// EXAMPLES +// +// SEE ALSO +// +// BUGS +// +//------------------------------------------------------------------------ + +#ifndef sxiALARM_CLASS +#define sxiALARM_CLASS + +CLASS BASE_CLASS sxiALARM +BEGIN + // some default values are needed + // to avoid errors during environment startup + // in the alrm macros + ATTRIBUTE logical enabled 0 + ATTRIBUTE double minVal -1.0 + ATTRIBUTE double maxVal 1.0 + ATTRIBUTE double minWarnVal -0.5 + ATTRIBUTE double maxWarnVal 0.5 + ATTRIBUTE double refVal 0.0 +END + +#endif /*!sxiALARM_CLASS*/ + +// *___oOo___* diff --git a/ICS/sxi/dbl/sxiEnv.db b/ICS/sxi/dbl/sxiEnv.db new file mode 100644 index 0000000..cc42b06 --- /dev/null +++ b/ICS/sxi/dbl/sxiEnv.db @@ -0,0 +1,47 @@ +//***************************************************************************** +// E.S.O. - VLT project +// +// "@(#) $Id: sxiEnv.db 246635 2017-05-25 08:24:21Z dricci $" +// +// who when what +// -------- -------- ---------------------------------------------- +// dricci 2017-05-25 adapted from Template file + +//************************************************************************ +// NAME +// sxiEnv.db - SOXS ICS WS branch configuration file +// +// DESCRIPTION +// SOXS instrument database for WS +// +//------------------------------------------------------------------------ +// + +#ifndef sxi_ENV_DB +#define sxi_ENV_DB + +// ---------------------------------------------------------------------------- +// INS database structure for ICS +// ---------------------------------------------------------------------------- + +#undef icbID +#define icbID SOXS + +#include "sxiSIM_CONTROL.class" + +#include "icbEnv.db" +#include "sxiEnv1.db" + + +// ---------------------------------------------------------------------------- +// Common database points +// ---------------------------------------------------------------------------- + +// add historian tables +#include "sxiHISTORIAN.db" + +#endif // !sxi_ENV_DB + +//************************************************************************ +// ___oOo___ + diff --git a/ICS/sxi/dbl/sxiEnv1.db b/ICS/sxi/dbl/sxiEnv1.db new file mode 100644 index 0000000..25e44a7 --- /dev/null +++ b/ICS/sxi/dbl/sxiEnv1.db @@ -0,0 +1,863 @@ +//***************************************************************************** +// E.S.O. - NTT project +// +// "@(#) $Id: sxiEnv1.db 354074 2022-03-25 18:53:27Z bsalasni $" +// +// who when what +// -------- ---------- ---------------------------------------------- +// mdepasca 2020-08-27 Added AFC points using AFC special device class +// dricci 2019-09-20 Renamed OPTI5 (dummy standard device) to NISE (special device). +// dricci 2019-08-02 Updated alarms for CVTS and added alarms for new IRTS sensor. +// dricci 2018-11-08 Removed unuseful Alarm Definition. +// dricci 2018-06-29 Renamed PZTi to AFCi. +// dricci 2018-06-27 Changed sensor names to CVTS, CPTS, CROT. +// dricci 2018-04-11 Renamed KRIP to MERC. Added LAMP7 THAR. +// dricci 2018-02-16 Removed VFOC*, then renamed POS6 to POS2. Renamed VNTS to CPTS. +// dricci 2017-10-20 Added CUPS and NFOC devices. +// dricci 2017-07-11 Piezo IODEV and sensors for three Lakeshore 336. +// dricci 2017-06-22 Renamed and added devices. +// dricci 2017-05-25 Adapted from Template file. +// + +//************************************************************************ +// NAME +// sxiEnv1.db - sxi branch configuration file +// +// DESCRIPTION +// SOXS instrument database for ICS +// +//------------------------------------------------------------------------ + +#ifndef sxi_ENV1_DB +#define sxi_ENV1_DB + +#undef sxiINS_ROOT +#undef sxiICS_ROOT +#undef icsLCU_DEV_ROOT + +#define sxiINS_ROOT :Appl_data:SOXS + +#ifdef icbIC0FB_ENV + #undef icbID + #define icbID SOXS + #define sxiICS_ROOT sxiINS_ROOT + #define sxiFB_CTRL_PROC ic0fbControl_1 +#else + #define sxiICS_ROOT sxiINS_ROOT +#endif + +#define icsLCU_DEV_ROOT sxiICS_ROOT:ICS:DEVICES + +//************************************************************************ +// INS database structure +// +// Note: The simulation control implementation should be modified +// to use the device points under the DEVICES branch. This +// would it make unnecessary to have the simulation control +// files here. +// +#ifdef icbIC0FB_ENV + #include "ic0fbEnv.db" + #include "ic0fbiDiscreteMotor.class" + #include "ic0fbiIoDev.class" + #include "ic0fbiSensor.class" + #include "ic0fbiShutter.class" + #include "ic0fbiLamp.class" + #include "sxiniseFB_NISE.class" + #include "sxiafcFB_AFC.class" +#else + #include "icbFB_MOTOR.class" + #include "icbFB_IODEV.class" + #include "icbFB_SENSOR.class" + #include "icbFB_LAMP.class" + #include "sxiniseNISE.class" + #include "sxiafcAFC.class" +#endif + +#include "ifbmotAdc.class" + + +//************************************************************************ +// Process: IC0/FB Control +//************************************************************************ +#ifdef icbIC0FB_ENV +POINT ic0fbProcess sxiINS_ROOT:IC0FB:PROCESSES:ic0fbControl_1 +BEGIN + ALIAS ic0fbControl_1 + ATTRIBUTE bytes256 currentAction "" +END +#endif + +//*************** +// Device INSH - SHUT +//*************** +#ifdef icbIC0FB_ENV +POINT ic0fbiShutter sxiINS_ROOT:IC0FB:DEVICES:INSH +#else +POINT icbFB_SHUTTER icsLCU_DEV_ROOT:INSH +#endif + +BEGIN + ALIAS INSH + ATTRIBUTE bytes20 device "insh" + ATTRIBUTE bytes16 prefix "INS.SHUT" + ATTRIBUTE int32 lcuId 1 +END + +//*************** +// Filt Wheel: ACFW +//*************** +#ifdef icbIC0FB_ENV +POINT ic0fbiDiscreteMotor sxiINS_ROOT:IC0FB:DEVICES:ACFW +#else +POINT icbFB_MOTOR icsLCU_DEV_ROOT:ACFW +#endif + +BEGIN + ALIAS ACFW + ATTRIBUTE bytes20 device "acfw" + ATTRIBUTE bytes16 prefix "INS.FILT" + ATTRIBUTE int32 lcuId 1 +END + +//*************** +// Lamp: QTH +//*************** + +#ifdef icbIC0FB_ENV +POINT ic0fbiLamp sxiINS_ROOT:IC0FB:DEVICES:QTH +#else +POINT icbFB_LAMP icsLCU_DEV_ROOT:QTH +#endif +BEGIN + ALIAS QTH + ATTRIBUTE bytes20 device "qth" + ATTRIBUTE bytes16 prefix "INS.LAMP1" + ATTRIBUTE int32 lcuId 1 +END + +//**************** +// Lamp: DEUT +//**************** + +#ifdef icbIC0FB_ENV +POINT ic0fbiLamp sxiINS_ROOT:IC0FB:DEVICES:DEUT +#else +POINT icbFB_LAMP icsLCU_DEV_ROOT:DEUT +#endif +BEGIN + ALIAS DEUT + ATTRIBUTE bytes20 device "deut" + ATTRIBUTE bytes16 prefix "INS.LAMP2" + ATTRIBUTE int32 lcuId 1 +END + +//*************** +// Lamp: NEON +//*************** + +#ifdef icbIC0FB_ENV +POINT ic0fbiLamp sxiINS_ROOT:IC0FB:DEVICES:NEON +#else +POINT icbFB_LAMP icsLCU_DEV_ROOT:NEON +#endif +BEGIN + ALIAS NEON + ATTRIBUTE bytes20 device "neon" + ATTRIBUTE bytes16 prefix "INS.LAMP3" + ATTRIBUTE int32 lcuId 1 +END + +//*************** +// Lamp: ARGO +//*************** + +#ifdef icbIC0FB_ENV +POINT ic0fbiLamp sxiINS_ROOT:IC0FB:DEVICES:ARGO +#else +POINT icbFB_LAMP icsLCU_DEV_ROOT:ARGO +#endif +BEGIN + ALIAS ARGO + ATTRIBUTE bytes20 device "argo" + ATTRIBUTE bytes16 prefix "INS.LAMP4" + ATTRIBUTE int32 lcuId 1 +END + + +//*************** +// Lamp: XENO +//*************** + +#ifdef icbIC0FB_ENV +POINT ic0fbiLamp sxiINS_ROOT:IC0FB:DEVICES:XENO +#else +POINT icbFB_LAMP icsLCU_DEV_ROOT:XENO +#endif +BEGIN + ALIAS XENO + ATTRIBUTE bytes20 device "xeno" + ATTRIBUTE bytes16 prefix "INS.LAMP5" + ATTRIBUTE int32 lcuId 1 +END + +//*************** +// Lamp: MERC +//*************** + +#ifdef icbIC0FB_ENV +POINT ic0fbiLamp sxiINS_ROOT:IC0FB:DEVICES:MERC +#else +POINT icbFB_LAMP icsLCU_DEV_ROOT:MERC +#endif +BEGIN + ALIAS MERC + ATTRIBUTE bytes20 device "merc" + ATTRIBUTE bytes16 prefix "INS.LAMP6" + ATTRIBUTE int32 lcuId 1 +END + + +//*************** +// Lamp: THAR +//*************** + +#ifdef icbIC0FB_ENV +POINT ic0fbiLamp sxiINS_ROOT:IC0FB:DEVICES:THAR +#else +POINT icbFB_LAMP icsLCU_DEV_ROOT:THAR +#endif +BEGIN + ALIAS THAR + ATTRIBUTE bytes20 device "thar" + ATTRIBUTE bytes16 prefix "INS.LAMP7" + ATTRIBUTE int32 lcuId 1 +END + + +//*************** +// Opti: CUPS +//*************** +#ifdef icbIC0FB_ENV +POINT ic0fbiDiscreteMotor sxiINS_ROOT:IC0FB:DEVICES:CUPS +#else +POINT icbFB_MOTOR icsLCU_DEV_ROOT:CUPS +#endif + +BEGIN + ALIAS CUPS + ATTRIBUTE bytes20 device "cups" + ATTRIBUTE bytes16 prefix "INS.OPTI1" + ATTRIBUTE int32 lcuId 1 +END + +//*************** +// Opti: CALS +//*************** +#ifdef icbIC0FB_ENV +POINT ic0fbiDiscreteMotor sxiINS_ROOT:IC0FB:DEVICES:CALS +#else +POINT icbFB_MOTOR icsLCU_DEV_ROOT:CALS +#endif + +BEGIN + ALIAS CALS + ATTRIBUTE bytes20 device "cals" + ATTRIBUTE bytes16 prefix "INS.OPTI2" + ATTRIBUTE int32 lcuId 1 +END + +//*************** +// Opti: ACQS +//*************** +#ifdef icbIC0FB_ENV +POINT ic0fbiDiscreteMotor sxiINS_ROOT:IC0FB:DEVICES:ACQS +#else +POINT icbFB_MOTOR icsLCU_DEV_ROOT:ACQS +#endif + +BEGIN + ALIAS ACQS + ATTRIBUTE bytes20 device "acqs" + ATTRIBUTE bytes16 prefix "INS.OPTI3" + ATTRIBUTE int32 lcuId 1 +END + +//*************** +// Opti: VISE +//*************** +#ifdef icbIC0FB_ENV +POINT ic0fbiDiscreteMotor sxiINS_ROOT:IC0FB:DEVICES:VISE +#else +POINT icbFB_MOTOR icsLCU_DEV_ROOT:VISE +#endif + +BEGIN + ALIAS VISE + ATTRIBUTE bytes20 device "vise" + ATTRIBUTE bytes16 prefix "INS.OPTI4" + ATTRIBUTE int32 lcuId 1 +END + +//*************** +// Opti: NISE +//*************** +#ifdef icbIC0FB_ENV +POINT sxiniseFB_NISE sxiINS_ROOT:IC0FB:DEVICES:NISE +#else +POINT sxiniseNISE icsLCU_DEV_ROOT:NISE +#endif + +BEGIN + ALIAS NISE + ATTRIBUTE bytes20 device "nise" + ATTRIBUTE bytes16 prefix "INS.NISE" + ATTRIBUTE int32 lcuId 1 +END + + +//*************** +// Pos: AFOC +//*************** +#ifdef icbIC0FB_ENV +POINT ic0fbiDiscreteMotor sxiINS_ROOT:IC0FB:DEVICES:AFOC +#else +POINT icbFB_MOTOR icsLCU_DEV_ROOT:AFOC +#endif + +BEGIN + ALIAS AFOC + ATTRIBUTE bytes20 device "afoc" + ATTRIBUTE bytes16 prefix "INS.POS1" + ATTRIBUTE int32 lcuId 1 +END + + +//*************** +// Pos: NFOC +//*************** +#ifdef icbIC0FB_ENV +POINT ic0fbiDiscreteMotor sxiINS_ROOT:IC0FB:DEVICES:NFOC +#else +POINT icbFB_MOTOR icsLCU_DEV_ROOT:NFOC +#endif + +BEGIN + ALIAS NFOC + ATTRIBUTE bytes20 device "nfoc" + ATTRIBUTE bytes16 prefix "INS.POS2" + ATTRIBUTE int32 lcuId 1 +END + + +//*************** +// Device ADC1 - ADC +//*************** +#ifdef icbIC0FB_ENV +POINT ifbmotAdc sxiINS_ROOT:IC0FB:DEVICES:ADC1 +#else +POINT icbFB_ADC icsLCU_DEV_ROOT:ADC1 +#endif + +BEGIN + ALIAS ADC1 + ATTRIBUTE bytes20 device "adc1" + ATTRIBUTE bytes16 prefix "INS.ADC1" + ATTRIBUTE bytes20 mode "" + ATTRIBUTE int32 lcuId 1 +END + +//*************** +// Device ADC2 - ADC +//*************** +#ifdef icbIC0FB_ENV +POINT ifbmotAdc sxiINS_ROOT:IC0FB:DEVICES:ADC2 +#else +POINT icbFB_ADC icsLCU_DEV_ROOT:ADC2 +#endif + +BEGIN + ALIAS ADC2 + ATTRIBUTE bytes20 device "adc2" + ATTRIBUTE bytes16 prefix "INS.ADC2" + ATTRIBUTE bytes20 mode "" + ATTRIBUTE int32 lcuId 1 +END + + +//*************** +// Device: AFC1 - AFC +//*************** +#ifdef icbIC0FB_ENV +POINT sxiafcFB_AFC sxiINS_ROOT:IC0FB:DEVICES:AFC1 +#else +POINT sxiafcAFC icsLCU_DEV_ROOT:AFC1 +#endif + +BEGIN + ALIAS AFC1 + ATTRIBUTE bytes20 device "afc1" + ATTRIBUTE bytes16 prefix "INS.AFC1" + ATTRIBUTE int32 lcuId 1 +END + +//*************** +// Device: AFC2 - AFC +//*************** +#ifdef icbIC0FB_ENV +POINT sxiafcFB_AFC sxiINS_ROOT:IC0FB:DEVICES:AFC2 +#else +POINT sxiafcAFC icsLCU_DEV_ROOT:AFC2 +#endif + +BEGIN + ALIAS AFC2 + ATTRIBUTE bytes20 device "afc2" + ATTRIBUTE bytes16 prefix "INS.AFC2" + ATTRIBUTE int32 lcuId 1 +END + + +//*************** +// Device SENSOR1: +//*************** +#ifdef icbIC0FB_ENV +POINT ic0fbiSensor sxiINS_ROOT:IC0FB:DEVICES:CVTS +#else +POINT icbFB_SENSOR icsLCU_DEV_ROOT:CVTS +#endif + +BEGIN + ALIAS CVTS + ATTRIBUTE bytes20 device "cvts" + ATTRIBUTE bytes16 prefix "INS.SENSOR1" + ATTRIBUTE int32 lcuId 1 + + #ifndef icbIC0FB_ENV + + ATTRIBUTE double CVTS_T1_Warning 26.0 + ATTRIBUTE double CVTS_T1_Alarm 30.0 + ATTRIBUTE double CVTS_T2_Warning 26.0 + ATTRIBUTE double CVTS_T2_Alarm 30.0 + ATTRIBUTE double CVTS_T3_Warning 26.0 + ATTRIBUTE double CVTS_T3_Alarm 30.0 + ATTRIBUTE double CVTS_T4_Warning 26.0 + ATTRIBUTE double CVTS_T4_Alarm 30.0 + ATTRIBUTE double CVTS_T5_Warning 26.0 + ATTRIBUTE double CVTS_T5_Alarm 30.0 + + ATTRIBUTE double CVTS_T1 + // BEGIN + // Definition IF( [last(0)] < 9999, [last(0)], IF([.simulation] = 0, [last(0)], [last(0)])) + // END + alrmAnalog3stHelpN(CVTS_T1_ALARM, CVTS_T1, SERIOUS, [^.CVTS_T1_Alarm], WARNING, [^.CVTS_T1_Warning], NORMAL, + 0, 0, SCOPE_LOCAL,0, "CVTS: VIS Cryostat CFC Gas Exchanger is out of range", "") + ATTRIBUTE logical alarm0 + BEGIN + Definition IF( [CVTS_T1_ALARM.State] = 2 , 1, 0) + END + + ATTRIBUTE double CVTS_T2 + // BEGIN + // Definition IF( [last(1)] < 9999, [last(1)], IF([.simulation] = 0, [last(1)], [last(1)])) + // END + alrmAnalog3stHelpN(CVTS_T2_ALARM, CVTS_T2, SERIOUS, [^.CVTS_T2_Alarm], WARNING, [^.CVTS_T2_Warning], NORMAL, + 0, 0, SCOPE_LOCAL,0, "CVTS: VIS Cryostat CFC Cold Head is out of range", "") + ATTRIBUTE logical alarm1 + BEGIN + Definition IF( [CVTS_T2_ALARM.State] = 2 , 1, 0) + END + + ATTRIBUTE double CVTS_T3 + // BEGIN + // Definition IF( [last(1)] < 9999, [last(1)], IF([.simulation] = 0, [last(1)], [last(1)])) + // END + alrmAnalog3stHelpN(CVTS_T3_ALARM, CVTS_T3, SERIOUS, [^.CVTS_T3_Alarm], WARNING, [^.CVTS_T3_Warning], NORMAL, + 0, 0, SCOPE_LOCAL,0, "CVTS: VIS Cryostat CFC Cryopump is out of range", "") + ATTRIBUTE logical alarm2 + BEGIN + Definition IF( [CVTS_T3_ALARM.State] = 2 , 1, 0) + END + + ATTRIBUTE double CVTS_T4 + // BEGIN + // Definition IF( [last(1)] < 9999, [last(1)], IF([.simulation] = 0, [last(1)], [last(1)])) + // END + alrmAnalog3stHelpN(CVTS_T4_ALARM, CVTS_T4, SERIOUS, [^.CVTS_T4_Alarm], WARNING, [^.CVTS_T4_Warning], NORMAL, + 0, 0, SCOPE_LOCAL,0, "CVTS: VIS Cryostat CCD Baseplate is out of range", "") + ATTRIBUTE logical alarm3 + BEGIN + Definition IF( [CVTS_T4_ALARM.State] = 2 , 1, 0) + END + + ATTRIBUTE double CVTS_T5 + // BEGIN + // Definition IF( [last(1)] < 9999, [last(1)], IF([.simulation] = 0, [last(1)], [last(1)])) + // END + alrmAnalog3stHelpN(CVTS_T5_ALARM, CVTS_T5, SERIOUS, [^.CVTS_T5_Alarm], WARNING, [^.CVTS_T5_Warning], NORMAL, + 0, 0, SCOPE_LOCAL,0, "CVTS: VIS Cryostat CCD Rear is out of range", "") + ATTRIBUTE logical alarm4 + BEGIN + Definition IF( [CVTS_T5_ALARM.State] = 2 , 1, 0) + END + + #endif +END + +//*************** +// Device SENSOR2: +//*************** +#ifdef icbIC0FB_ENV +POINT ic0fbiSensor sxiINS_ROOT:IC0FB:DEVICES:IRTS +#else +POINT icbFB_SENSOR icsLCU_DEV_ROOT:IRTS +#endif + +BEGIN + ALIAS IRTS + ATTRIBUTE bytes20 device "irts" + ATTRIBUTE bytes16 prefix "INS.SENSOR2" + ATTRIBUTE int32 lcuId 1 + + #ifndef icbIC0FB_ENV + + ATTRIBUTE double IRTS_T1_Warning 26.0 + ATTRIBUTE double IRTS_T1_Alarm 30.0 + ATTRIBUTE double IRTS_T2_Warning 26.0 + ATTRIBUTE double IRTS_T2_Alarm 30.0 + ATTRIBUTE double IRTS_T3_Warning 26.0 + ATTRIBUTE double IRTS_T3_Alarm 30.0 + ATTRIBUTE double IRTS_T4_Warning 26.0 + ATTRIBUTE double IRTS_T4_Alarm 30.0 + ATTRIBUTE double IRTS_T5_Warning 26.0 + ATTRIBUTE double IRTS_T5_Alarm 30.0 + ATTRIBUTE double IRTS_T6_Warning 26.0 + ATTRIBUTE double IRTS_T6_Alarm 30.0 + ATTRIBUTE double IRTS_T7_Warning 26.0 + ATTRIBUTE double IRTS_T7_Alarm 30.0 + ATTRIBUTE double IRTS_T8_Warning 26.0 + ATTRIBUTE double IRTS_T8_Alarm 30.0 + ATTRIBUTE double IRTS_T9_Warning 26.0 + ATTRIBUTE double IRTS_T9_Alarm 30.0 + ATTRIBUTE double IRTS_T10_Warning 26.0 + ATTRIBUTE double IRTS_T10_Alarm 30.0 + ATTRIBUTE double IRTS_T11_Warning 26.0 + ATTRIBUTE double IRTS_T11_Alarm 30.0 + ATTRIBUTE double IRTS_T12_Warning 26.0 + ATTRIBUTE double IRTS_T12_Alarm 30.0 + ATTRIBUTE double IRTS_T13_Warning 26.0 + ATTRIBUTE double IRTS_T13_Alarm 30.0 + ATTRIBUTE double IRTS_T14_Warning 26.0 + ATTRIBUTE double IRTS_T14_Alarm 30.0 + ATTRIBUTE double IRTS_T15_Warning 26.0 + ATTRIBUTE double IRTS_T15_Alarm 30.0 + ATTRIBUTE double IRTS_T16_Warning 26.0 + ATTRIBUTE double IRTS_T16_Alarm 30.0 + ATTRIBUTE double IRTS_T17_Warning 26.0 + ATTRIBUTE double IRTS_T17_Alarm 30.0 + ATTRIBUTE double IRTS_T18_Warning 26.0 + ATTRIBUTE double IRTS_T18_Alarm 30.0 + + ATTRIBUTE double IRTS_T1 + // BEGIN + // Definition IF( [last(0)] < 9999, [last(0)], IF([.simulation] = 0, [last(0)], [last(0)])) + // END + alrmAnalog3stHelpN(IRTS_T1_ALARM, IRTS_T1, SERIOUS, [^.IRTS_T1_Alarm], WARNING, [^.IRTS_T1_Warning], NORMAL, + 0, 0, SCOPE_LOCAL,0, "IRTS: NIR Cryostat Cold finger 1 is out of range", "") + ATTRIBUTE logical alarm0 + BEGIN + Definition IF( [IRTS_T1_ALARM.State] = 2 , 1, 0) + END + + ATTRIBUTE double IRTS_T2 + // BEGIN + // Definition IF( [last(0)] < 9999, [last(0)], IF([.simulation] = 0, [last(0)], [last(0)])) + // END + alrmAnalog3stHelpN(IRTS_T2_ALARM, IRTS_T2, SERIOUS, [^.IRTS_T2_Alarm], WARNING, [^.IRTS_T2_Warning], NORMAL, + 0, 0, SCOPE_LOCAL,0, "IRTS: NIR Cryostat Cold finger 2 is out of range", "") + ATTRIBUTE logical alarm1 + BEGIN + Definition IF( [IRTS_T2_ALARM.State] = 2 , 1, 0) + END + + ATTRIBUTE double IRTS_T3 + // BEGIN + // Definition IF( [last(0)] < 9999, [last(0)], IF([.simulation] = 0, [last(0)], [last(0)])) + // END + alrmAnalog3stHelpN(IRTS_T3_ALARM, IRTS_T3, SERIOUS, [^.IRTS_T3_Alarm], WARNING, [^.IRTS_T3_Warning], NORMAL, + 0, 0, SCOPE_LOCAL,0, "IRTS: NIR Cryostat Optical Bench 1 is out of range", "") + ATTRIBUTE logical alarm2 + BEGIN + Definition IF( [IRTS_T3_ALARM.State] = 2 , 1, 0) + END + + ATTRIBUTE double IRTS_T4 + // BEGIN + // Definition IF( [last(0)] < 9999, [last(0)], IF([.simulation] = 0, [last(0)], [last(0)])) + // END + alrmAnalog3stHelpN(IRTS_T4_ALARM, IRTS_T4, SERIOUS, [^.IRTS_T4_Alarm], WARNING, [^.IRTS_T4_Warning], NORMAL, + 0, 0, SCOPE_LOCAL,0, "IRTS: NIR Cryostat Optical Bench 2 is out of range", "") + ATTRIBUTE logical alarm3 + BEGIN + Definition IF( [IRTS_T4_ALARM.State] = 2 , 1, 0) + END + + ATTRIBUTE double IRTS_T5 + // BEGIN + // Definition IF( [last(0)] < 9999, [last(0)], IF([.simulation] = 0, [last(0)], [last(0)])) + // END + alrmAnalog3stHelpN(IRTS_T5_ALARM, IRTS_T5, SERIOUS, [^.IRTS_T5_Alarm], WARNING, [^.IRTS_T5_Warning], NORMAL, + 0, 0, SCOPE_LOCAL,0, "IRTS: NIR Cryostat Optical Bench 3 is out of range", "") + ATTRIBUTE logical alarm4 + BEGIN + Definition IF( [IRTS_T5_ALARM.State] = 2 , 1, 0) + END + + ATTRIBUTE double IRTS_T6 + // BEGIN + // Definition IF( [last(0)] < 9999, [last(0)], IF([.simulation] = 0, [last(0)], [last(0)])) + // END + alrmAnalog3stHelpN(IRTS_T6_ALARM, IRTS_T6, SERIOUS, [^.IRTS_T6_Alarm], WARNING, [^.IRTS_T6_Warning], NORMAL, + 0, 0, SCOPE_LOCAL,0, "IRTS: NIR Cryostat Cryopump is out of range", "") + ATTRIBUTE logical alarm5 + BEGIN + Definition IF( [IRTS_T6_ALARM.State] = 2 , 1, 0) + END + + ATTRIBUTE double IRTS_T7 + // BEGIN + // Definition IF( [last(0)] < 9999, [last(0)], IF([.simulation] = 0, [last(0)], [last(0)])) + // END + alrmAnalog3stHelpN(IRTS_T7_ALARM, IRTS_T7, SERIOUS, [^.IRTS_T7_Alarm], WARNING, [^.IRTS_T7_Warning], NORMAL, + 0, 0, SCOPE_LOCAL,0, "IRTS: NIR Cryostat Slit Assembly is out of range", "") + ATTRIBUTE logical alarm6 + BEGIN + Definition IF( [IRTS_T7_ALARM.State] = 2 , 1, 0) + END + + ATTRIBUTE double IRTS_T8 + // BEGIN + // Definition IF( [last(0)] < 9999, [last(0)], IF([.simulation] = 0, [last(0)], [last(0)])) + // END + alrmAnalog3stHelpN(IRTS_T8_ALARM, IRTS_T8, SERIOUS, [^.IRTS_T8_Alarm], WARNING, [^.IRTS_T8_Warning], NORMAL, + 0, 0, SCOPE_LOCAL,0, "IRTS: NIR Cryostat Prism Assembly 1 is out of range", "") + ATTRIBUTE logical alarm7 + BEGIN + Definition IF( [IRTS_T8_ALARM.State] = 2 , 1, 0) + END + + ATTRIBUTE double IRTS_T9 + // BEGIN + // Definition IF( [last(0)] < 9999, [last(0)], IF([.simulation] = 0, [last(0)], [last(0)])) + // END + alrmAnalog3stHelpN(IRTS_T9_ALARM, IRTS_T9, SERIOUS, [^.IRTS_T9_Alarm], WARNING, [^.IRTS_T9_Warning], NORMAL, + 0, 0, SCOPE_LOCAL,0, "IRTS: NIR Cryostat Prism Assembly 2 is out of range", "") + ATTRIBUTE logical alarm8 + BEGIN + Definition IF( [IRTS_T9_ALARM.State] = 2 , 1, 0) + END + + ATTRIBUTE double IRTS_T10 + // BEGIN + // Definition IF( [last(0)] < 9999, [last(0)], IF([.simulation] = 0, [last(0)], [last(0)])) + // END + alrmAnalog3stHelpN(IRTS_T10_ALARM, IRTS_T10, SERIOUS, [^.IRTS_T10_Alarm], WARNING, [^.IRTS_T10_Warning], NORMAL, + 0, 0, SCOPE_LOCAL,0, "IRTS: NIR Cryostat Prism Assembly 3 is out of range", "") + ATTRIBUTE logical alarm9 + BEGIN + Definition IF( [IRTS_T10_ALARM.State] = 2 , 1, 0) + END + + ATTRIBUTE double IRTS_T11 + // BEGIN + // Definition IF( [last(0)] < 9999, [last(0)], IF([.simulation] = 0, [last(0)], [last(0)])) + // END + alrmAnalog3stHelpN(IRTS_T11_ALARM, IRTS_T11, SERIOUS, [^.IRTS_T11_Alarm], WARNING, [^.IRTS_T11_Warning], NORMAL, + 0, 0, SCOPE_LOCAL,0, "IRTS: NIR Cryostat Prism Assembly 4 is out of range", "") + ATTRIBUTE logical alarm10 + BEGIN + Definition IF( [IRTS_T11_ALARM.State] = 2 , 1, 0) + END + + ATTRIBUTE double IRTS_T12 + // BEGIN + // Definition IF( [last(0)] < 9999, [last(0)], IF([.simulation] = 0, [last(0)], [last(0)])) + // END + alrmAnalog3stHelpN(IRTS_T12_ALARM, IRTS_T12, SERIOUS, [^.IRTS_T12_Alarm], WARNING, [^.IRTS_T12_Warning], NORMAL, + 0, 0, SCOPE_LOCAL,0, "IRTS: NIR Cryostat Prism Assembly 5 is out of range", "") + ATTRIBUTE logical alarm11 + BEGIN + Definition IF( [IRTS_T12_ALARM.State] = 2 , 1, 0) + END + + ATTRIBUTE double IRTS_T13 + // BEGIN + // Definition IF( [last(0)] < 9999, [last(0)], IF([.simulation] = 0, [last(0)], [last(0)])) + // END + alrmAnalog3stHelpN(IRTS_T13_ALARM, IRTS_T13, SERIOUS, [^.IRTS_T13_Alarm], WARNING, [^.IRTS_T13_Warning], NORMAL, + 0, 0, SCOPE_LOCAL,0, "IRTS: NIR Cryostat Camera 1 is out of range", "") + ATTRIBUTE logical alarm12 + BEGIN + Definition IF( [IRTS_T13_ALARM.State] = 2 , 1, 0) + END + + ATTRIBUTE double IRTS_T14 + // BEGIN + // Definition IF( [last(0)] < 9999, [last(0)], IF([.simulation] = 0, [last(0)], [last(0)])) + // END + alrmAnalog3stHelpN(IRTS_T14_ALARM, IRTS_T14, SERIOUS, [^.IRTS_T14_Alarm], WARNING, [^.IRTS_T14_Warning], NORMAL, + 0, 0, SCOPE_LOCAL,0, "IRTS: NIR Cryostat Camera 2 is out of range", "") + ATTRIBUTE logical alarm13 + BEGIN + Definition IF( [IRTS_T14_ALARM.State] = 2 , 1, 0) + END + + ATTRIBUTE double IRTS_T15 + // BEGIN + // Definition IF( [last(0)] < 9999, [last(0)], IF([.simulation] = 0, [last(0)], [last(0)])) + // END + alrmAnalog3stHelpN(IRTS_T15_ALARM, IRTS_T15, SERIOUS, [^.IRTS_T15_Alarm], WARNING, [^.IRTS_T15_Warning], NORMAL, + 0, 0, SCOPE_LOCAL,0, "IRTS: NIR Cryostat Thermal Shield 1 is out of range", "") + ATTRIBUTE logical alarm14 + BEGIN + Definition IF( [IRTS_T15_ALARM.State] = 2 , 1, 0) + END + + ATTRIBUTE double IRTS_T16 + // BEGIN + // Definition IF( [last(0)] < 9999, [last(0)], IF([.simulation] = 0, [last(0)], [last(0)])) + // END + alrmAnalog3stHelpN(IRTS_T16_ALARM, IRTS_T16, SERIOUS, [^.IRTS_T16_Alarm], WARNING, [^.IRTS_T16_Warning], NORMAL, + 0, 0, SCOPE_LOCAL,0, "IRTS: NIR Cryostat Thermal Shield 2 is out of range", "") + ATTRIBUTE logical alarm15 + BEGIN + Definition IF( [IRTS_T16_ALARM.State] = 2 , 1, 0) + END + + ATTRIBUTE double IRTS_T17 + // BEGIN + // Definition IF( [last(0)] < 9999, [last(0)], IF([.simulation] = 0, [last(0)], [last(0)])) + // END + alrmAnalog3stHelpN(IRTS_T17_ALARM, IRTS_T17, SERIOUS, [^.IRTS_T17_Alarm], WARNING, [^.IRTS_T17_Warning], NORMAL, + 0, 0, SCOPE_LOCAL,0, "IRTS: NIR Cryostat CCD Head is out of range", "") + ATTRIBUTE logical alarm16 + BEGIN + Definition IF( [IRTS_T17_ALARM.State] = 2 , 1, 0) + END + + ATTRIBUTE double IRTS_T18 + // BEGIN + // Definition IF( [last(0)] < 9999, [last(0)], IF([.simulation] = 0, [last(0)], [last(0)])) + // END + alrmAnalog3stHelpN(IRTS_T18_ALARM, IRTS_T18, SERIOUS, [^.IRTS_T18_Alarm], WARNING, [^.IRTS_T18_Warning], NORMAL, + 0, 0, SCOPE_LOCAL,0, "IRTS: NIR Cryostat Array Preamp is out of range", "") + ATTRIBUTE logical alarm17 + BEGIN + Definition IF( [IRTS_T18_ALARM.State] = 2 , 1, 0) + END + + #endif +END + + +//*************** +// Device SENSOR3: +//*************** +#ifdef icbIC0FB_ENV +POINT ic0fbiSensor sxiINS_ROOT:IC0FB:DEVICES:CPTS +#else +POINT icbFB_SENSOR icsLCU_DEV_ROOT:CPTS +#endif + +BEGIN + ALIAS CPTS + ATTRIBUTE bytes20 device "cpts" + ATTRIBUTE bytes16 prefix "INS.SENSOR3" + ATTRIBUTE int32 lcuId 1 + + #ifndef icbIC0FB_ENV + + ATTRIBUTE double CPTS_T_Warning 26.0 + ATTRIBUTE double CPTS_T_Alarm 30.0 + + ATTRIBUTE double CPTS_T + // BEGIN + // Definition IF( [last(0)] < 9999, [last(0)], IF([.simulation] = 0, [last(0)], [last(0)])) + // END + alrmAnalog3stHelpN(CPTS_T_ALARM, CPTS_T, SERIOUS, [^.CPTS_T_Alarm], WARNING, [^.CPTS_T_Warning], NORMAL, + 0, 0, SCOPE_LOCAL,0, "CPTS: Temperature of Common Path is out of range", "cptst.hlp") + ATTRIBUTE logical alarm0 + BEGIN + Definition IF( [CPTS_T_ALARM.State] = 2 , 1, 0) + END + + #endif + +END + + +//*************** +// Device SENSOR4: +//*************** +#ifdef icbIC0FB_ENV +POINT ic0fbiIoDev32Ch sxiINS_ROOT:IC0FB:DEVICES:CROT +#else +POINT icbFB_IODEV_32_CH icsLCU_DEV_ROOT:CROT +#endif + + BEGIN + ALIAS CROT + ATTRIBUTE bytes20 device "crot" + ATTRIBUTE bytes16 prefix "INS.SENSOR4" + ATTRIBUTE int32 lcuId 1 + + #ifndef icbIC0FB_ENV + + ATTRIBUTE logical isActive 0; + BEGIN + Definition IF( [input(0)] = "NO", 0, 1 ) + END + alrmDiscrete2stHelp(CRAC, isActive, WARNING, 0, NORMAL, 1, SCOPE_LOCAL, 0, "CROT_CRAC: Co-rotator is active", "" ) + ATTRIBUTE logical alarm0 + BEGIN + Definition IF( NOT [.isActive], 0, 1) + END + + ATTRIBUTE logical isNoFault 0; + BEGIN + Definition IF( [input(0)] = "NO", 0, 1 ) + END + alrmDiscrete2stHelp(CRNF, isNoFault, WARNING, 0, NORMAL, 1, SCOPE_LOCAL, 0, "CROT_CRNF: Co-rotator is no-fault", "" ) + ATTRIBUTE logical alarm1 + BEGIN + Definition IF( NOT [.isNoFault], 0, 1) + END + + ATTRIBUTE logical isStandStill 0; + BEGIN + Definition IF( [input(0)] = "NO", 0, 1 ) + END + alrmDiscrete2stHelp(CRMS, isStandStill, WARNING, 0, NORMAL, 1, SCOPE_LOCAL, 0, "CROT_CRMS: Co-rotator motor is standstill", "" ) + ATTRIBUTE logical alarm2 + BEGIN + Definition IF( NOT [.isStandStill], 0, 1) + END + + ATTRIBUTE logical isTouched 0; + BEGIN + Definition IF( [input(0)] = "NO", 0, 1 ) + END + alrmDiscrete2stHelp(CRSW, isTouched, WARNING, 0, NORMAL, 1, SCOPE_LOCAL, 0, "CROT_CRSW: Co-rotator switch is touched", "" ) + ATTRIBUTE logical alarm3 + BEGIN + Definition IF( NOT [.isTouched], 0, 1) + END + + #endif + +END + + +#endif // !sxi_ENV1_DB + +// ___oOo___ diff --git a/ICS/sxi/dbl/sxiHISTORIAN.db b/ICS/sxi/dbl/sxiHISTORIAN.db new file mode 100644 index 0000000..2ddcfa1 --- /dev/null +++ b/ICS/sxi/dbl/sxiHISTORIAN.db @@ -0,0 +1,32 @@ +//***************************************************************************** +// E.S.O. - VLT project +// +// "@(#) $Id: sxiHISTORIAN.db 246635 2017-05-25 08:44:55Z dricci $" +// +// who when what +// -------- -------- ---------------------------------------------- +// dricci 2017-05-25 adapted from Template file +// + +//************************************************************************ +// NAME +// sxiHISTORIAN.db - INS WS HISTORIAN tables point +// +// DESCRIPTION +// Instrumentation database structure: HISTORIAN tables point. +// +//------------------------------------------------------------------------ +// + +#ifndef sxi_HISTORIAN_DB +#define sxi_HISTORIAN_DB + +#include "ic0HISTORIAN.class" + + + +#endif // !sxi_HISTORIAN_DB + +//************************************************************************ +// ___oOo___ + diff --git a/ICS/sxi/dbl/sxiSIM_CONTROL.class b/ICS/sxi/dbl/sxiSIM_CONTROL.class new file mode 100644 index 0000000..c8bbb27 --- /dev/null +++ b/ICS/sxi/dbl/sxiSIM_CONTROL.class @@ -0,0 +1,213 @@ +//***************************************************************************** +// E.S.O. - NTT project +// +// "@(#) $Id: sxiSIM_CONTROL.class 331490 2020-03-26 15:03:23Z dricci $" +// +// who when what +// -------- ---------- ----------------------------------------------- +// dricci 2019-09-20 Renamed OPTI5 (dummy standard device) to NISE (special device). +// dricci 2019-08-02 Added IRTS sensor. +// dricci 2018-06-29 Renamed PZTi to AFCi +// dricci 2018-06-27 Changed sensor names to CVTS, CPTS, CROT +// dricci 2018-04-11 Renamed KRIP to MERC. Added LAMP7 THAR. +// dricci 2018-02-16 Removed VFOC*, then renamed POS6 to POS2. Renamed VNTS to CPTS. +// dricci 2017-10-20 Added CUPS and NFOC devices. +// dricci 2017-07-11 Piezo IODEV and sensors for three Lakeshore 336. +// dricci 2017-06-22 Added and renamed devices. +// dricci 2017-05-25 Adapted from Template file. +// + +//************************************************************************ +// NAME +// sxiSIM_CONTROL.class - sxi simulation data structure +// +// DESCRIPTION +// SOXS instrument database. +// +//------------------------------------------------------------------------ +// + +#ifndef sxi_SIM_CONTROL_CLASS +#define sxi_SIM_CONTROL_CLASS +#ifndef MAKE_VXWORKS + +#include "ic0Defines.h" +#include "ic0.class" + +#define sxiSIM_DEFAULT_REPLY "Simulation reply OK !" + +// +// Simulator process +// +CLASS IC0_SIMSERVER sxiSIM_CONTROL +BEGIN + ATTRIBUTE int32 simDelay 1500 + ATTRIBUTE Table dataref (200) + BEGIN + Value ( + + // + // INSH - SHUT + // + ("INS.SHUT.ST", "INSH.status0", dbBYTES20), + ("INS.SHUT.SWSIM", "INSH.simulation", dbLOGICAL), + + // + // ACFW - FILT + // + ("INS.FILT.SWSIM", "ACFW.simulation", dbLOGICAL), + ("INS.FILT.NAME", "ACFW.status0", dbBYTES16), + + // + // QTH - LAMP1 + // + ("INS.LAMP1.ST", "QTH.status0", dbBYTES20), + ("INS.LAMP1.SWSIM", "QTH.simulation", dbLOGICAL), + + // + // DEUT - LAMP2 + // + ("INS.LAMP2.ST", "DEUT.status0", dbBYTES20), + ("INS.LAMP2.SWSIM", "DEUT.simulation", dbLOGICAL), + + // + // NEON - LAMP3 + // + ("INS.LAMP3.ST", "NEON.status0", dbBYTES20), + ("INS.LAMP3.SWSIM", "NEON.simulation", dbLOGICAL), + + // + // ARGO - LAMP4 + // + ("INS.LAMP4.ST", "ARGO.status0", dbBYTES20), + ("INS.LAMP4.SWSIM", "ARGO.simulation", dbLOGICAL), + + // + // XENO - LAMP5 + // + ("INS.LAMP5.ST", "XENO.status0", dbBYTES20), + ("INS.LAMP5.SWSIM", "XENO.simulation", dbLOGICAL), + + // + // MERC - LAMP6 + // + ("INS.LAMP6.ST", "MERC.status0", dbBYTES20), + ("INS.LAMP6.SWSIM", "MERC.simulation", dbLOGICAL), + + // + // THAR - LAMP7 + // + ("INS.LAMP7.ST", "THAR.status0", dbBYTES20), + ("INS.LAMP7.SWSIM", "THAR.simulation", dbLOGICAL), + + // + // CUPS - OPTI1 + // + ("INS.OPTI1.NAME", "CUPS.status0", dbBYTES16), + ("INS.OPTI1.SWSIM", "CUPS.simulation", dbLOGICAL), + + // + // CALS - OPTI2 + // + ("INS.OPTI2.NAME", "CALS.status0", dbBYTES16), + ("INS.OPTI2.SWSIM", "CALS.simulation", dbLOGICAL), + + // + // ACQS - OPTI3 + // + ("INS.OPTI3.NAME", "ACQS.status0", dbBYTES16), + ("INS.OPTI3.SWSIM", "ACQS.simulation", dbLOGICAL), + + // + // VISE - OPTI4 + // + ("INS.OPTI4.NAME", "VISE.status0", dbBYTES16), + ("INS.OPTI4.SWSIM", "VISE.simulation", dbLOGICAL), + + // + // NISE - NISE + // + ("INS.NISE.NAME", "NISE.status0", dbBYTES16), + ("INS.NISE.SWSIM", "NISE.simulation", dbLOGICAL), + + // + // AFOC - POS1 + // + ("INS.POS1.NAME", "AFOC.status0", dbBYTES20), + ("INS.POS1.SWSIM", "AFOC.simulation", dbLOGICAL), + + // + // NFOC - POS2 + // + ("INS.POS2.NAME", "NFOC.status0", dbBYTES20), + ("INS.POS2.SWSIM", "NFOC.simulation", dbLOGICAL), + + // + // ADC - ADC1 + // + ("INS.ADC1.SWSIM", "ADC1.simulation", dbLOGICAL), + ("INS.ADC1.MODE", "ADC1.status0", dbBYTES20), + ("INS.ADC1.ENC", "ADC1:MOTOR:STATUS.posEnc", dbINT32), + ("INS.ADC1.ENCREL", "ADC1:MOTOR:STATUS.posEnc", dbINT32), + + // + // ADC - ADC2 + // + ("INS.ADC2.SWSIM", "ADC2.simulation", dbLOGICAL), + ("INS.ADC2.MODE", "ADC2.status0", dbBYTES20), + ("INS.ADC2.ENC", "ADC2:MOTOR:STATUS.posEnc", dbINT32), + ("INS.ADC2.ENCREL", "ADC2:MOTOR:STATUS.posEnc", dbINT32), + + // + // AFC1 - IODEV1 + // + ("INS.IODEV1.SWSIM", "AFC1.simulation", dbLOGICAL), + + // + // AFC2 - IODEV2 + // + ("INS.IODEV2.SWSIM", "AFC2.simulation", dbLOGICAL), + + // + // SENSORi: sample sensor device, esi5SIM_CPNTROL.class only has only SWSIM + // + ("INS.SENSOR1.SWSIM", "CVTS.simulation", dbLOGICAL), + ("INS.SENSOR2.SWSIM", "IRTS.simulation", dbLOGICAL), + ("INS.SENSOR3.SWSIM", "CPTS.simulation", dbLOGICAL), + ("INS.SENSOR4.SWSIM", "CROT.simulation", dbLOGICAL), + + // /// CROT - IODEV3 + // ("INS.IODEV3.SWSIM", "CROT.simulation", dbLOGICAL), + + // // + // // CVTS - SENSOR2 + // ("INS.SENS11.VAL", "CPTS.last(0)", dbDOUBLE), + // ("INS.SENS11.REF", "CPTS.last(1)", dbDOUBLE), + + + + + // // + // // GRAT: sample grating wheel + // // + // ("INS.GRAT1.SWSIM", "GRAT.simulation", dbLOGICAL), + // ("INS.GRAT1.NO", "GRAT.status(3)", dbBYTES20), + // ("INS.GRAT1.ID", "GRAT.status(2)", dbBYTES20), + // ("INS.GRAT1.NAME", "GRAT.status0", dbBYTES20), + // ("INS.GRAT1.WLEN", "GRAT.status1", dbBYTES20), + // ("INS.GRAT1.DISP", "GRAT.status(4)", dbBYTES20), + // ("INS.GRAT1.ORDER", "GRAT.status6", dbBYTES20), + // ("INS.GRAT1.ENC", "GRAT:MOTOR:STATUS.posEnc", dbINT32), + // ("INS.GRAT1.ENCREL","GRAT:MOTOR:STATUS.posEnc", dbINT32), + + ("","")) + END +END + + +#endif +#endif //!sxi_SIM_CONTROL_CLASS + +//************************************************************************ +// ___oOo___ + diff --git a/ICS/sxi/include/sxiControl.h b/ICS/sxi/include/sxiControl.h new file mode 100644 index 0000000..a7888b9 --- /dev/null +++ b/ICS/sxi/include/sxiControl.h @@ -0,0 +1,21 @@ +#ifndef sxiControl_H +#define sxiControl_H +/******************************************************************************* +* E.S.O. - VLT project +* +* "@(#) $Id: sxiControl.h 297901 2017-05-26 17:40:15Z dricci $" +* +* who when what +* -------- -------- ---------------------------------------------- +* alongino 02/11/01 created +*/ + +/************************************************************************ + * + *---------------------------------------------------------------------- + */ + +#include "ic0FACTORY.h" // RegisterStorable + + +#endif /*!sxiControl_H*/ diff --git a/ICS/sxi/include/sxiCtrlMAIN_HANDLER.h b/ICS/sxi/include/sxiCtrlMAIN_HANDLER.h new file mode 100644 index 0000000..50be206 --- /dev/null +++ b/ICS/sxi/include/sxiCtrlMAIN_HANDLER.h @@ -0,0 +1,42 @@ +#ifndef sxiCtrlMAIN_HANDLER_H +#define sxiCtrlMAIN_HANDLER_H +/******************************************************************************* +* E.S.O. - VLT project +* +* "@(#) $Id: sxiCtrlMAIN_HANDLER.h 297901 2017-05-26 17:40:15Z dricci $" +* +* who when what +* -------- -------- ---------------------------------------------- +* alongino 16/06/97 created +*/ + +/************************************************************************ + * This file contains definitions used by class sxiCtrlMAIN_HANDLER + *---------------------------------------------------------------------- + */ + +#ifndef __cplusplus +#error This is a C++ include file and cannot be used from plain C +#endif + +/* + * VLT Headers + */ + +#include "ic0SERVER.h" // ic0SERVER +#include "ic0CtrlMAIN_HANDLER.h" // parent class + +class sxiCtrlMAIN_HANDLER : public ic0CtrlMAIN_HANDLER +{ + public: + sxiCtrlMAIN_HANDLER(const char *cfg); + + protected: + virtual ic0SERVER *NewServer(ccsPROCNAME simServer); // create server + + private: + +}; + + +#endif /*!sxiCtrlMAIN_HANDLER_H*/ diff --git a/ICS/sxi/include/sxiSERVER.h b/ICS/sxi/include/sxiSERVER.h new file mode 100644 index 0000000..2de04c5 --- /dev/null +++ b/ICS/sxi/include/sxiSERVER.h @@ -0,0 +1,35 @@ +#ifndef sxi_SERVER_H +#define sxi_SERVER_H +/******************************************************************************* +* E.S.O. - VLT project +* +* "@(#) $Id: sxiSERVER.h 297949 2017-05-29 17:30:25Z dricci $" +* +* who when what +* -------- -------- ---------------------------------------------- +* alongino 02/02/01 added AttachDbEvents (VLTSW20000565) +* alongino 25/01/00 created +*/ + +/************************************************************************ + * + *---------------------------------------------------------------------- + */ + +#include "ic0SERVER.h" // parent class +class sxiSERVER : public ic0SERVER +{ + public: + sxiSERVER(const dbSYMADDRESS dbRef, + ctooCONFIG &cfg, + ccsPROCNAME simServerName, + vltINT32 lcuNum, + ic0lcuSERVER *lcuServers, + char *dictionary); + + protected: + + private: +}; + +#endif /*!sxi_SERVER_H*/ diff --git a/ICS/sxi/src/Makefile b/ICS/sxi/src/Makefile new file mode 100644 index 0000000..3244283 --- /dev/null +++ b/ICS/sxi/src/Makefile @@ -0,0 +1,190 @@ +#******************************************************************************* +# E.S.O. - VLT project +# +# "@(#) $Id: Makefile 353934 2022-03-23 11:55:40Z dricci $" +# +# Makefile of sxi +# +# who when what +# -------- -------- ---------------------------------------------- +# dricci 2021-11-22 Commented ConfigSet libraries. +# dricci 2017-05-25 Adapted from Template file. +# + +#******************************************************************************* +# This Makefile follows VLT Standards (see Makefile(5) for more). +#******************************************************************************* +# REMARKS +#------------------------------------------------------------------------ + +# +# user definable C-compilation flags +USER_CFLAGS = -DLOG_LEVEL=5 + +# +# additional include and library search paths +#USER_INC = +#USER_LIB = + +# +# MODULE CODE DESCRIPTION: +# ------------------------ +# As a general rule: public file are "cleaned" and "installed" +# local (_L) are not "installed". + +COMMON_LIBS = sxi ic0 ctoo seq oslx slx misc evh eccs fnd C++ cfitsio CCS + +# +# C programs (public and local) +# ----------------------------- +EXECUTABLES = sxiControl +EXECUTABLES_L = + +# +# sxiControl is the main ICS WS front-end server process +sxiControl_OBJECTS = sxiControl +sxiControl_LIBS = $(COMMON_LIBS) +sxiControl_LDFLAGS = + +# +# special compilation flags for single c sources +#yyyyy_CFLAGS = + +# +# Includes (.h) files (public only) +# --------------------------------- +INCLUDES = sxiSERVER.h \ + sxiCtrlMAIN_HANDLER.h + +# +# Libraries (public and local) +# ---------------------------- +LIBRARIES = sxi +LIBRARIES_L = + +# +# library used by sxiControl +sxi_OBJECTS = sxiSERVER \ + sxiCtrlMAIN_HANDLER + +# +# Scripts (public and local) +# ---------------------------- +SCRIPTS = +SCRIPTS_L = + +# # +# # TCL scripts (public and local) +# # ------------------------------ +# TCL_SCRIPTS = sxiConfigSet +# TCL_SCRIPTS_L = + +# sxiConfigSet_OBJECTS = sxiConfigSet +# sxiConfigSet_TCLSH = seqSh +# sxiConfigSet_LIBS = sxiConfig ctooTcl ic0Class + +# +# +tttttt_OBJECTS = +tttttt_TCLSH = +tttttt_LIBS = + +# +# TCL libraries (public and local) +# ------------------------------ +TCL_LIBRARIES = sxiConfig +TCL_LIBRARIES_L = + +# # +# # +# sxiConfig_OBJECTS = sxiConfigLib + +# +# UIF panels (public and local) +# ---------------------------- +PANELS = +PANELS_L = + +# +# On-Line Database Files +# ---------------------- +DBL_CLASSES = sxiSIM_CONTROL sxiALARM +DBL_BCF = sxiEnv sxiEnv1 sxiHISTORIAN +DBL_FLAGS = +soxs_DBL_FLAGS = + +# +# man pages to be done +# -------------------- +MANSECTIONS = +MAN1 = $(SCRIPTS) +MAN3 = +MAN5 = +MAN7 = +MAN8 = + +# +# local man pages +# --------------- +MANl = + +# +# ASCII file to be converted into Framemaker-MIF +# -------------------- +ASCII_TO_MIF = + +# +# INS_ROOT files to be installed +#------------------------------- +#INS_ROOT_FILES = SOXS_ICS.alias +INS_ROOT_FILES = + +# +# other files to be installed +#---------------------------- +INSTALL_FILES = ../config/*.scan + +# +# list of all possible C-sources (used to create automatic dependencies) +# ------------------------------ +CSOURCENAMES = \ + $(foreach exe, $(EXECUTABLES) $(EXECUTABLES_L), $($(exe)_OBJECTS)) \ + $(foreach lib, $(LIBRARIES) $(LIBRARIES_L), $($(lib)_OBJECTS)) + +# +#>>>>> END OF standard rules + +# +# CHOSE PLATFORM +# -------------- +# Default is UNIX, for VxVorks application next line MUST BE UNCOMMENTED +#MAKE_VXWORKS = on + +# +# INCLUDE STANDARDS +# ----------------- +MAKEDIR = $(VLTROOT)/include +include $(MAKEDIR)/vltMakefile + +# +# TARGETS +# ------- +all: do_all + $(AT)#icbBuild scanLinks + @echo " . . . 'all' done" + +clean : clean_all + $(AT)#icbBuild clean scanLinks + @echo " . . . clean done" + +man : do_man + @echo " . . . man page(s) done" + +install : install_all + @echo " . . . installation done" + +db : db_all + @echo " . . . ../DB done" + + +#___oOo___ diff --git a/ICS/sxi/src/README b/ICS/sxi/src/README new file mode 100644 index 0000000..ab46a20 --- /dev/null +++ b/ICS/sxi/src/README @@ -0,0 +1,35 @@ +#******************************************************************************* +# E.S.O. - VLT project +# +# "@(#) $Id: README,v 1.17 2001/01/09 17:37:54 vltsccm Exp $" +# +# Makefile of xxi +# +# who when what +# -------- -------- ---------------------------------------------- +# alongino 25/01/00 created +#****************************************************************************** + +The module xxi contains the files needed by the instrument XXXX to run +the ICS WS part. + +Developers of ICS WS part are supposed to use the functionality +provided by icb (see module ic0). +However in some cases ICS has to implement special features specific +to one instrument. The module xxi contains examples, applied to the +instrument XXXX, of how to add special features to icb. + +Follows a description of the contents and purpose of each file: + +dbl/xxiEnv1.db definition of the OLDB structure for ICS LCU 1 +dbl/xxiEnv2.db definition of the OLDB structure for ICS LCU 2 +dbl/xxiSIM_CONTROL.class definition of the OLDB part reserved to the + LCU simulation WS process + +CDT/xxiControl.cdt CDT for xxiControl process +CDT/xxiSimControl.cdt CDT for xxiSimControl process + +src/xxiControl.C main for xxiControl process +src/xxiCtrlMAIN_HANDLER.C sub-class of ic0CtrlMAIN_SERVER +src/xxiSERVER.C sub-class of ic0SERVER +src/xxiINS_ANALOG class for special device YYYY diff --git a/ICS/sxi/src/sxiConfigLib.tcl b/ICS/sxi/src/sxiConfigLib.tcl new file mode 100644 index 0000000..01b7555 --- /dev/null +++ b/ICS/sxi/src/sxiConfigLib.tcl @@ -0,0 +1,76 @@ +#******************************************************************************* +# E.S.O. - VLT project +# +# "@(#) $Id: sxiConfigLib.tcl 297901 2017-05-26 17:40:15Z dricci $" +# +# +# who when what +# -------- ---------- --------------------------------------------- +# dricci 2017-05-25 adapted from Template file + +#************************************************************************ +# NAME +# ConfigGetSpecialDevices, ConfigSetSpecialDevice - configure special devices +# +# SYNOPSIS +# ConfigGetSpecialDevices +# ConfigSetSpecialDevice +# +# DESCRIPTION +# ConfigGetSpecialDevices returns the list of special devices +# ConfigSetSpecialDevice is called from within sxiConfigSet to +# append to the LCU .dbcfg file OLDB values for special devices +# +# FILES +# $INS_ROOT/SYSTEM/COMMON/CONFIGFILES/sxmcfgINS.cfg +# Main configuration file. +# +# $VLTDATA/config/.dbcfg +# Created LCU configuration file. +# +# ENVIRONMENT +# INS_ROOT Instrument root area +# INTROOT Integration area +# VLTROOT VLT area +# +# CAUTIONS +# INS_ROOT resp. INTROOT must be defined to be able to read +# a configuration stored in the corresponding location. +# +# EXAMPLES +# set specialDevices [ConfigGetSpecialDevices] +# ConfigSetSpecialDevice INS.MIRR2 +# +# SEE ALSO +# sxiConfigSet +# +# BUGS +# +#------------------------------------------------------------------------ +#/* +# return the list of special devices +proc ConfigGetSpecialDevices { } { + + set specialDevices {}; # list of special devices treated in the instrument + # set specialDevices { "INS.MIRR2" }; # list of special devices treated in the instrument + + return $specialDevices +} + +# set configuration parameters for a special device +proc ConfigSetSpecialDevice { device } { + global cfg2db cfg + + switch $device { + # "INS.MIRR2" { + # set devName [cfg Get [cconcat $device .DEVNAME]] + # set port [cfg Get [cconcat $device .PORT]] + # cfg2db PutsPoint "[string toupper $devName]:communication" + # cfg2db PutsScalar device $port + # } + default { + } + } +} + + diff --git a/ICS/sxi/src/sxiConfigSet.tcl b/ICS/sxi/src/sxiConfigSet.tcl new file mode 100644 index 0000000..afd276c --- /dev/null +++ b/ICS/sxi/src/sxiConfigSet.tcl @@ -0,0 +1,119 @@ +#******************************************************************************* +# E.S.O. - VLT project +# +# "@(#) $Id: sxiConfigSet.tcl 297901 2017-05-26 17:40:15Z dricci $" +# +# sxiConfigSet.tcl +# +# who when what +# -------- ---------- --------------------------------------------- +# alongino 31/10/2001 VLTSW20010621 +# rschmutz 30/04/2001 use ctooDBCFG::Append. +# rschmutz 09/12/2000 insid parameter added. +# alongino 13/06/2000 created +# + +#************************************************************************ +# NAME +# sxiConfigSet - set the SOXS special part of LCU config. +# +# SYNOPSIS +# sxiConfigSet [] +# +# DESCRIPTION +# +# This script is called as last step by ic0ConfigSet when +# pkginBuild processes the step called "INSTALL_FILES". +# The name of this file is specified in the configuration file of +# each ICS by the following keyword : +# +# INS.CON.CONFIGSET "sxiConfigSet" +# +# sxiConfigSet appends the part specific to special devices +# for the instrument SOXS to the LCU configuration file, +# according to the current instrument configuration. +# +# FILES +# $INS_ROOT/SYSTEM/COMMON/CONFIGFILES/sxmcfgINS.cfg +# Main configuration file. +# +# $VLTDATA/config/.dbcfg +# Created LCU configuration file. +# +# ENVIRONMENT +# INS_ROOT Instrument root area +# INTROOT Integration area +# VLTROOT VLT area +# +# CAUTIONS +# INS_ROOT resp. INTROOT must be defined to be able to read +# a configuration stored in the corresponding location. +# +# EXAMPLES +# sxiConfigSet lsxics1 +# +# SEE ALSO +# icbConfigSet +# +# BUGS +# +#------------------------------------------------------------------------ +# + +# set configuration of all special devices in one LCU +proc ConfigSetSpecial { envName } { + global env cfg2db cfg + + # Open environment config. file for append + + set fname "$env(VLTDATA)/config/${envName}.dbcfg" + seq_logData "sxiConfigSet Append $fname" + cfg2db Append $fname + + set firstEntry 1 + + set specialDevices [ConfigGetSpecialDevices $envName] + + foreach device $specialDevices { + set devLcu [cfg Get [cconcat $device .LCUID]] + set devEnv [lindex $lcuEnvs [incr devLcu -1]] + if { [string compare $envName $devEnv] == 0 } { + if { $firstEntry } { + cfg2db PutsCwp "@[set envName]:" + set firstEntry 0 + } + ConfigSetSpecialDevice $device + } + } + + # close environment config. file + cfg2db Close +} + + + +# main +ic0CONFIG2DBCFG cfg2db SOXS +ctooCONFIG cfg SOXS +set envList $argv +if {[catch { + # get list of environments to process + set lcuEnvs [cfg2db GetLcuEnvs] + if { "$envList" == "" } { + set envList $lcuEnvs + } + + # configure special devices + foreach envName $envList { + ConfigSetSpecial $envName + } +} err]} { + puts stderr "Error: $err" + puts stderr "" + puts stderr {Usage: sxiConfigSet []} + puts stderr " Known environments: $lcuEnvs" + exit 1 +} +exit 0 +#************************************************************************ +# ___oOo___ diff --git a/ICS/sxi/src/sxiControl.C b/ICS/sxi/src/sxiControl.C new file mode 100644 index 0000000..6a02e98 --- /dev/null +++ b/ICS/sxi/src/sxiControl.C @@ -0,0 +1,126 @@ +/******************************************************************************* +* E.S.O. - VLT project +* +* sxiControl.C +* +* who when what +* -------- -------- ---------------------------------------------- +* dricci 2017-05-25 adapted from Template file +*/ + +/************************************************************************ +* NAME +* sxiControl - ICS supervisor process +* +* SYNOPSIS +* sxiControl [-v] +* +* DESCRIPTION +* The sxiControl process is the frontend of ICS in the WS. +* The process initialises itself directly from the +* instrument configuration stored in the $INS_ROOT area. +* +* FILES +* $INS_ROOT/SYSTEM/COMMON/CONFIGFILES/INS.dic +* File containing the list of INS config. dictionaries. +* $INS_ROOT/SYSTEM/COMMON/CONFIGFILES/INS.cfg +* Main instrument configuration file. +* +* ENVIRONMENT +* INS_ROOT Instrument root area +* +* CAUTION +* INS_ROOT must be defined to be able to read the instrument +* configuration. +* +* SEE ALSO +* ic0Control(1) +* +*------------------------------------------------------------------------ +*/ + +/* + ***************************** + *** IMPLEMENTATION NOTES ** + ***************************** + * INSTRUMENT ARE SUPPOSED TO USE ic0Control BY DEFAULT. + * THIS FILE IS NEEDED ONLY IF THE FUNCTIONALITY PROVIDED + * BY ic0Control HAS TO BE MODIFIED FOR THE SPECIFIC INSTRUMENT NEEDS. + * ANY FUNCTIONALITY IMPLEMENTED IN THIS MODULE, DEVIATING FROM THE + * ic0Control BEHAVIOR, HAS TO BE APPROVED BY ESO. + * + * This file has to be copied as it is and then adapted to the + * specific instrument needs. In particular, customize ONLY the + * part contained between the lines + * // Begin of part describing the classes to be used + * + * // End of part describing the classes to be used + ***************************** +*/ + +#define _POSIX_SOURCE 1 +#include "vltPort.h" + +ATTRIBUTE_UNUSED static const char *rcsId="@(#) $Id: sxiControl.C 297901 2017-05-26 17:40:15Z dricci $"; + +/* + * NOTE + * ==== + * INSTRUMENT ARE SUPPOSED TO USE ic0Control BY DEFAULT. + * THIS FILE IS NEEDED ONLY IF THE FUNCTIONALITY PROVIDED + * BY ic0Control HAS TO BE MODIFIED FOR THE SPECIFIC INSTRUMENT NEEDS. + * ANY FUNCTIONALITY IMPLEMENTED IN THIS MODULE, DEVIATING FROM THE + * ic0Control BEHAVIOR, HAS TO BE APPROVED BY ESO. + * + * This file has to be copied as it is and then adapted to the + * specific instrument needs. In particular, customize ONLY the + * part contained between the lines + * // Begin of part describing the device type classes to be used + * + * // End of part describing the individual device classes to be used + * + */ + +/* + * System Headers + */ + +/* + * Local Headers + */ + +#include "sxiControl.h" // special classes +#include "ic0Defaults.h" // default classes + +//////////////////////////////////// +// main procedure // +//////////////////////////////////// +#include "sxiCtrlMAIN_HANDLER.h" // sxiCtrlMAIN_HANDLER + +int main(int argc, char *argv[]) +{ + sxiCtrlMAIN_HANDLER mainHandler("SOXS"); + + /* + *# Startup + * Register to CCS, set defaults, parse runstring, create SERVER object + */ + mainHandler.Init(argc, argv, rcsId); + + /* + *# Enter the main loop + */ + evhHandler->MainLoop(); + + /* + *# Terminate + * Deregister from CCS + */ + mainHandler.Exit(EXIT_SUCCESS); +} + +/////////////////////////////////////////////////////////////////////// + + +/*___oOo___*/ + diff --git a/ICS/sxi/src/sxiCtrlMAIN_HANDLER.C b/ICS/sxi/src/sxiCtrlMAIN_HANDLER.C new file mode 100644 index 0000000..ca06243 --- /dev/null +++ b/ICS/sxi/src/sxiCtrlMAIN_HANDLER.C @@ -0,0 +1,83 @@ +/******************************************************************************* +* E.S.O. - VLT project +* +* "@(#) $Id: sxiCtrlMAIN_HANDLER.C 297901 2017-05-26 17:40:15Z dricci $" +* +* who when what +* -------- -------- ---------------------------------------------- +* alongino 25/01/00 created +*/ + +/************************************************************************ +* NAME +* sxiCtrlMAIN_HANDLER - Class for handling of sxiControl main loop +* +* SYNOPSIS +* #include "sxiCtrlMAIN_HANDLER.h" +* +* sxiCtrlMAIN_HANDLER sxiControl +* +* PARENT CLASS +* ic0CtrlMAIN_HANDLER +* +* DESCRIPTION +* This class is used to overload methods of ic0CtrlMAIN_HANDLER, if +* needed. +* +* PUBLIC METHODS +* +* PUBLIC DATA MEMBERS +* +* PRIVATE METHODS +* +* PRIVATE DATA MEMBERS +* +* ON LINE DATABASE +* +* COMMANDS +* +* SEE ALSO +* +*------------------------------------------------------------------------ +*/ + +/* + ***************************** + *** IMPLEMENTATION NOTES ** + ***************************** + * INSTRUMENT ARE SUPPOSED TO USE ic0CtrlMAIN_HANDLER BY DEFAULT. + * THIS FILE IS NEEDED ONLY IF THE FUNCTIONALITY PROVIDED + * BY ic0CtrlMAIN_HANDLER HAS TO BE MODIFIED FOR THE SPECIFIC + * INSTRUMENT NEEDS. + * ANY FUNCTIONALITY IMPLEMENTED IN THIS MODULE, DEVIATING FROM THE + * ic0CtrlMAIN_HANDLER BEHAVIOR, HAS TO BE APPROVED BY ESO. + ***************************** +*/ + +#define _POSIX_SOURCE 1 +#include "vltPort.h" + +ATTRIBUTE_UNUSED static const char *rcsId="@(#) $Id: sxiCtrlMAIN_HANDLER.C 297901 2017-05-26 17:40:15Z dricci $"; + +#include "sxiCtrlMAIN_HANDLER.h" // class declaration +#include "sxiSERVER.h" + +/* + * Class constructor + */ +sxiCtrlMAIN_HANDLER::sxiCtrlMAIN_HANDLER(const char *cfg): + ic0CtrlMAIN_HANDLER(cfg) +{ + //cout << "Example of subclassing for ic0CtrlMAIN_HANDLER" << endl; +} + +/* + * NewServer method + */ +ic0SERVER* sxiCtrlMAIN_HANDLER::NewServer(ccsPROCNAME simServer) +{ + return new sxiSERVER(dbRoot, cfg, simServer, + lcuNum, lcuServer,dictionary); +} + +/* __o0o__ */ diff --git a/ICS/sxi/src/sxiSERVER.C b/ICS/sxi/src/sxiSERVER.C new file mode 100644 index 0000000..3f4b4bc --- /dev/null +++ b/ICS/sxi/src/sxiSERVER.C @@ -0,0 +1,71 @@ +/******************************************************************************* +* E.S.O. - VLT project +* +* sxiSERVER.C +* +* who when what +* -------- -------- ---------------------------------------------- +* dricci 2017-05-25 adapted from Template file +*/ + +/************************************************************************ +* NAME +* sxiSERVER - Class for handling ICS commands +* +* SYNOPSIS +* #include "sxiSERVER.h" +* +* sxiSERVER myServer("myPoint","myIcsSimServer", +* 1,&lcuServer,"myDictionary","myAliasFile"); +* +* PARENT CLASS +* public ic0SERVER +* +* DESCRIPTION +* This class is used to overload methods of ic0SERVER, if needed. +* +* COMMANDS +* +* RETURN VALUES +* +* SEE ALSO +* ic0SERVER(4) +*------------------------------------------------------------------------ +*/ + +/* + ***************************** + *** IMPLEMENTATION NOTES ** + ***************************** + * INSTRUMENT ARE SUPPOSED TO USE ic0SERVER BY DEFAULT. + * THIS FILE IS NEEDED ONLY IF THE FUNCTIONALITY PROVIDED + * BY ic0SERVER HAS TO BE MODIFIED FOR THE SPECIFIC + * INSTRUMENT NEEDS. + * ANY FUNCTIONALITY IMPLEMENTED IN THIS MODULE, DEVIATING FROM THE + * ic0SERVER BEHAVIOR, HAS TO BE APPROVED BY ESO. + ***************************** +*/ + +#define _POSIX_SOURCE 1 +#include "vltPort.h" + +ATTRIBUTE_UNUSED static const char *rcsId="@(#) $Id: sxiSERVER.C 297949 2017-05-29 17:30:25Z dricci $"; + +#include "sxiSERVER.h" + +/* + * Class constructors + */ +sxiSERVER::sxiSERVER(const dbSYMADDRESS dbRef, + ctooCONFIG &insCfg, + ccsPROCNAME simServerName, + vltINT32 lcuNum, + ic0lcuSERVER *lcuServers, + char *dictionary) : + ic0SERVER(dbRef, insCfg, simServerName, lcuNum, lcuServers, + dictionary) +{ +} + + +/* __o0o__ */ diff --git a/ICS/sxiafc/ChangeLog b/ICS/sxiafc/ChangeLog new file mode 100644 index 0000000..a6bf091 --- /dev/null +++ b/ICS/sxiafc/ChangeLog @@ -0,0 +1 @@ +"@(#) $Id$" diff --git a/ICS/sxiafc/config/sxiafc_TwinCAT.fbmap b/ICS/sxiafc/config/sxiafc_TwinCAT.fbmap new file mode 100644 index 0000000..128153e --- /dev/null +++ b/ICS/sxiafc/config/sxiafc_TwinCAT.fbmap @@ -0,0 +1,42 @@ +#******************************************************************************* +# ESO - VLT Project +# +# "@(#) $Id: sxiafc_TwinCAT.fbmap,v 0.55 2011/09/29 15:55:00 vltsccm Exp $" +# +# who when what +# -------- ---------- ------------------------------------------------------- +# bsalasni 2022-03-08 Removed iodev channels +# mdepasca 2020-29-07 Created +# +#******************************************************************************* +# SOXS AFC Special Device Name Mapping File. +#******************************************************************************* + +#------------------------------------------------------------------------------- +# Firmware Info Mapping: +#------------------------------------------------------------------------------- +InfoDate: info.sDate +InfoDescription: info.sDescription +InfoName: info.sName +InfoPlatform: info.sPlatform +InfoSynopsis: info.sSynopsis +InfoVersionMajor: info.nVersionMajor +InfoVersionMinor: info.nVersionMinor +#------------------------------------------------------------------------------- +# Control Parameters: +#------------------------------------------------------------------------------- +CtrlCommand: ctrl.nCommand +CtrlCommandText: ctrl.sCommand +CtrlExecute: ctrl.bExecute +#------------------------------------------------------------------------------- +# Status Parameters: +#------------------------------------------------------------------------------- +StatErrorCode: stat.nErrorCode +StatErrorText: stat.sErrorText +StatInitialised: stat.bInitialised +StatStatus: stat.nStatus +StatStatusText: stat.sStatus +StatCommandReplyText: stat.sReply +#------------------------------------------------------------------------------- + +# EOF diff --git a/ICS/sxiafc/dbl/sxiafcAFC.class b/ICS/sxiafc/dbl/sxiafcAFC.class new file mode 100644 index 0000000..65d6674 --- /dev/null +++ b/ICS/sxiafc/dbl/sxiafcAFC.class @@ -0,0 +1,39 @@ +//****************************************************************************** +// ESO - VLT Project +// +// "@(#) $Id: sxiafcAFC.class 355996 2022-05-04 15:39:36Z bsalasni $" +// +// who when what +// -------- ---------- -------------------------------------------------------- +// bsalasni 2022-05-04 Added commanded positions setpos1/2 +// mdepasca 2020-08-21 Added attribute to store device driver MODE +// mdepasca 2020-07-30 Created +// + +//****************************************************************************** +// NAME +// sxiafc - AFC Control Device +//------------------------------------------------------------------------------ + +#ifndef SXI_AFC_CLASS +#define SXI_AFC_CLASS + +#include "ic0fbDevice.class" + +CLASS ic0fbDevice sxiafcAFC +BEGIN + Residence RAM + + // handset required by icb + ATTRIBUTE logical handset 0 + + ATTRIBUTE int32 status + ATTRIBUTE bytes20 status0 + ATTRIBUTE bytes20 mode + ATTRIBUTE double curpos1 + ATTRIBUTE double curpos2 + ATTRIBUTE double setpos1 + ATTRIBUTE double setpos2 +END + +#endif // !SXI_AFC_CLASS diff --git a/ICS/sxiafc/dbl/sxiafcFB_AFC.class b/ICS/sxiafc/dbl/sxiafcFB_AFC.class new file mode 100644 index 0000000..49176e0 --- /dev/null +++ b/ICS/sxiafc/dbl/sxiafcFB_AFC.class @@ -0,0 +1,43 @@ +//****************************************************************************** +// ESO - VLT Project +// +// "@(#) $Id: sxiafcFB_AFC.class 355996 2022-05-04 15:39:36Z bsalasni $" +// +// who when what +// -------- ---------- -------------------------------------------------------- +// bsalasni 2022-05-04 Added commanded positions setpos1/2 +// mdepasca 2020-07-30 Created +// + +//****************************************************************************** +// NAME +// sxiafc - AFC Control Device +//------------------------------------------------------------------------------ + +#ifndef SXI_FB_AFC_CLASS +#define SXI_FB_AFC_CLASS + +#include "ic0fbDevice.class" + +CLASS NULL_CLASS sxiafcData +BEGIN + Residence RAM + + ATTRIBUTE bytes20 mode + ATTRIBUTE double curpos1 + ATTRIBUTE double curpos2 + ATTRIBUTE double setpos1 + ATTRIBUTE double setpos2 + ATTRIBUTE int32 status + ATTRIBUTE bytes20 status0 +END + +CLASS ic0fbDevice sxiafcFB_AFC +BEGIN + Residence RAM + ATTRIBUTE sxiafcData DATA +END + + + +#endif // !SXI_FB_AFC_CLASS diff --git a/ICS/sxiafc/doc/sxiafcDevDrvAfc.doc b/ICS/sxiafc/doc/sxiafcDevDrvAfc.doc new file mode 100644 index 0000000000000000000000000000000000000000..f94a300ceb5c03a33470471ceff396b6fbca29fa GIT binary patch literal 64512 zcmeHQ2V9la`#*PZ8L~t`1hgxnA|l|Phzc$opx_>Pfy*-|@0rhY#&e$cyyq=ET>0Eb zpL?EX2Bs~Ou}3AgOrhg1fqRT_?abIKaFgGol9Ceg9u2^0F)t7WZhX9xS>@Tv87p?# zPE2GBoQ1JrOl8lQBa2OmP4T?zd6)Cm`?Hn1vnDy<`-ePKNTn=OQsN}uHsuxqY~mb0 zSo7CpS9jyxW!bJmblAiMx@@S4XUtB;{SR@!37WBRUsaE>cqwB?+$nbX_NuCUI73^G zbdU^Fz$Rm^y}LeROAs+Jkg-@zJWUn2bc8>F4nn?yzhDdgrfi`+LU~y(wphEuRs2kOoH12<>V~HU7Fw9ifZy*TsH}QM+vjdIZC!_D7~a!hH*SKiUBq zia!oET`OS=`NR2CjF69zn7}W}=QwI3&{?nrehJrtEyOov3*iiHp*;$=srZ7wkiT$k z$~MeLxEAOvT${3mbOrtz+U4Ch4F9yQ1%8<-w<&+2ycM-grAK44EoO>~RTyi9c4Ea` z@J};}#XSEMh|Wz*Q)P{@w(b)Z-ae+IwY5W3Rz{{eD<@f4NAlJ}rn-D9HrX>V|s$}DxNT9vKF z?cVC_%#8HxoX;{mD;eo(gXwuI<5E=!thBa{>K>*H z%ZOJ8C_5!*rHxW$2`O7!cka_w8J(M%nUR%a9X%#HN1f(CUSSz&D1N=@d`>MUbr;=Prz$?2f0GF_EMb=5C#baGm5swyYLWQD{4 znyOI(398&wZQdqR&_>lSLD#TwE&0HO1a+1=9n8$hP~uild`4Vu8puFp4eO{3@6cTt zMpV_t5xhBK3-#*SFIpScPn}&)8(z4j4eys-k0V8B%|Pk(oIljmS8m86*C1^_aHSZE_G2 zRxZM}wH~0(9@jI&x=p+`0y5x>P>~o8(dwMsOv9p>U5pCkZxGZ0JuxR2{SrjT)}g|) z$l6FAV2-JFEi%^O`5yxRf0q#JJR86kZ~~lx%76<{9jF2L0*!%CpdHX2=n4!3t{mU_ z+3~qoj*m~-8PmakCr8Ubx1=g=pELKQ?&&93Gn+{r{GGxgTv=pkNVQ1M-3D8-ytN@ax-OG&w!QA(5`A#*%xj9 z)Mg4mV<;dQ+af8G+ClZPSng6}2al5N+ev#;r6_p$^5sa6F>`I#JF*qEtKN|@=0Sg+ zMI<UW@qi&p&bV zA7~Lswd4s}1Ya(`MKGD}7*At+o=_pON9kUq>t4JNZv7T8ywW@)JzydY4ey}8>Nf=M z7kX%LLjN~wL|`)A`Fs%gPZ~$jU~bkLy$h}PGk588l}0hBpNGfCLS#VMI(u5!tCj?Vm zH(F4k|C0;(N0%L%&z$?IXU?H#wSPZNH)&K{9gTVEZ+gDvbIcL>`)PA9>L~X7p z`-pOqY0*!V!6>X5;))+H*_jbil$V~8OevPsOli?PsZLC_qLMO&FHcg|gegk~W{$eN zC%&8R|50d?&)(?w_D7AsGctyA{XYuAlcoO~8}-ZV|GIsh`uX$Cf0E|)TZB0Nw}sqn z;eUnsFO2OpuG5(QeDlAw3`YxnuKx#ES@>^U>MOJV6VDF;=Yea_J^xp?dDm3`_k;{* z>Hih({{sJyfcGR=o&wGR)E=$^)F!S2w*hxs#;O80Pi$LxB7c11&B$iHfCv1udNff!q8MgKeULq=iMVtB<>>z)q5W88PI-Dau>|Hzs8j+o z$||PZGP`4i!qXsVM*1R0G;+8xjUltw6*T={D)eva+tjaP1)7kp zr}BNy^*;f43}>1DD?0zni06sGL}0~p&wm;2LlpxB=WGoY?m1oXIJl#&l?~O?SA^cViZ&-4ABW*W%1dE1~kV+L|zBX|*f5 zvJ&$zW2GcY3Ysuw|zaSgVSz|1@%#zFec(dSg$0Uf?zH+4T6YHyP-&`k7vt z=>Im5pe^Hng~xxPZ&SZ^!4ztm|IfqxU&i=<$HIRTPyNf({}SJC0k;8L@ZTAz3{YFB z0w{r+KwBUb=ng~yy?_zG^>@>EF{}mqpg?=sc=NFd$M;$Hve+>Db z#_%j)BJe6;n*Yza{I>(|7F+s%h5Nt2{|TBlFiq1Aro(;I~0-+;co1)x5^3lRGJ&v0J`@^m?__g;wU3%xf+^nxYp zrZ!CXqMz`j1{#@+~Hwlt;_k1uKX{44AmKrwI&V0f$|0i=Kv;0(9}Re|b24WJRw7-#}C1+Jag zj^C;i+uuJi`9v!H28NenrGbYy3RbGWgr7A`zg;Pgf|?n|m}Dc4f@aJ@q9jIPO=+%l zBvCQ{GG;Bzf10~xjlW_k%?NAWj4IZJQY^nNuGF`Q-^6Qy&%|TmFY&fEpv&9VxW1*! zyI*uK&g)+MsC#kD@`vD13pJI|}T^vJ`{UwL*YKDMrRO4#kin7tE| z`AV>i^(sfOmlpfrY?lz$#!haOL>dAJ5K9%Ii(PcA`UMlh~L3 zrM_%luM$g1>@p#DiIN|MF;DVyPnuIT)x5A`2`EN+B``ZxR#o7AJMgL_5CKpdm@0Az z4!xIx&AiZ!|J=Ea^v1EY2XSllCl>^S%09z)#F3@&MliQI(AfNM^o?+4CG>ad>(tNv zh2oQ4)8vKD4Sia2W7Bb>Wezq`RY)N>n8vi*iXyusPNrVUJTGqX6bqoZk5~pqQ6wIi zCv5w)#pZTyi>G#zrypXKvB^_=_wlxS>A%$v?Syti7rDKPN_lzfd+~4nmkL!Ths~~& z@ct+9oW^w;(@oFoD6qx6Fcc`=BaO}fTu+q>b2-i9G>1RE{=faD=b`@#Or!qKZSmA@ z^5pu8=^c`Y`9#}2pSb^10jlc{3FK9N|2L;jLjNb8lgvi)nx+2>t>wkGE7Jc3IeiWI zzX8ze|KhnfL=SI0qUh&AniPILbGK6m92ZLS{{y9^|3h5Soa$3*8ZUqT2fhFK{!eQ( z;{AFJ|2M)u0vrX-0_T7$z*XQT@EdR+cmO;E?6B?X`mrr5XN^zkozjMW{wd;G<;7Uj z9f_V&?uv?-^FlZNbK@>OYH|ACmOd36s-9QVIHr9dE5nf;{HFx_i6QikqJ8e zU+bss|5`t7{}=rJJIg-m|1$IXe?``RB)<{wD{J`g0lOMd2dE490rh~UKr^5X5CXIX zLIM6+-}cq-PDt(BF14XRcOARBu)l%cTY=`9f)fP4O6viy+PAtI}xf_JK=s$hb)=VtHQ<8$sdr~1j|D#;XfBxr0eV+JDyta)0 zI?eV4c2;Ek*X`qaW51s6zf59q`*2n#X7KXgQYZ~7uJ$)3|B0De#(!u6{+aP#synvR zxUP5pv)-dVy~ChI-nF^?rd|M(U46WMVuCCVY!1sQctCLLkV$b0T#4ErOR01^qwC zaK!iiz);|2U>HE(e&f#eUm?`TVwX<=g?kd$t;Bs@!z$O~z-V@*T`o7-SUw+MBtPuJm!B<0}o#$qRWav-+Kg|eCs@vc7_^&ti zzgXO@Kxw)0pO#8I|AXs2Isb*+Ux@Kv+K4sGPm;9CBpSR_P#B~vI2Tg0V6l}CP%GcV z$``0zfc>BayQLn0eg3ynp@tUw#izg_z41+>|f+M!pU3e-SXCNt!S zcNrYP+wf2MOEh{lD2pRzKV!OKz!9!KQlW+2R)GBysqBjy)Y5J%YK@dgzo@~tH>%w~ z_sIpFnraI{JbR)qDp+dEEWEX}WJ|y0zWxOH;0gB-{xhSLl7Gj9Bsu=1UCF$6Xqu4; z!}2m2KP*Sm@GO@SS)??JOlmkzJns83I>VJk0;lD!sWp|W zR*ulRcn!W~Oty^4|BW&EdDnYX^lXLcBteQ_8q!Aa;wqqS`CSv@Lr?#&BjJFN^Ix8NNld_DU9Le zRmt9+gmf!WNZ0IWXi2I*xs{!)90ET^rT8K8FUj!uf!Gc7HD-LI2yGY$$^ zq6@Dgqu$;{uEM@$UAwyR(9eqNW1d;})4W!weX)>hsfI!l5z@5ZGwFVhLweIiHdY~R zhdYht{j@q9a^j6b+u;N+rqFgct)I5TY5lYvPVl1+_ir-q2|66Apw~6&`YCp}$KkrA z!x>EB_U_NJ!$o*nIvgGw(hNk84-IYCJ9wD+-|BFi^afasfNA24(Tyfn(s z4_%E-&2m997E}S}NfL(Y`M#W&jEmf~>zwnDf~B}a5^<56Ru+EtXM7mZVU#X7w63U=}IMC!RTT7vByo#5;{wHks-UJ{*x*WcG0wJn^3Q<$6V5 zh3#EtPfD@HAcSoS3L1r1 z?Vv=W%2R*6H2fc=>AyHSnWm{m;47!?Rj{X7s95ST?qiHsyPqFviF%%Pqg$CXTB-eQ z6&L#cvHfl37o4Ap`T4>^e~yfihE{N!vT^QFxnT_BCSiTr1u*pg z|9D*h)i~9=5rD&N*$!M60_T8YfX;+;29!WB&<=7FqK>&Y@$7E5C)mWpe9#fSO(N*emI7QU=yI8qN_VG$mzTNfGf0PiE@ z$OG@HMObn9sBn++;`6bW55-s}!DE!6%-*#!mq$LcWnGvW>BqBVmd+AUUOK118Q~PZ zk}AuJnd`DPtX&=ELoZE*MJSP(5}7HG89sCed$7%

V2j%g}_g_R2p?K4Rg_9v>hh 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 + +/// +class sxiafcDevDrvAfc: public ic0fbDevDrvBase +{ + public: + + struct Dev dev; // strings defining local names of commands/status + struct Status status; // integers corresponging to idle, busy etc + struct CtrlCmd ctrlCmd; // integers corresponding to control commands + struct GcsCmd gcsCmd; // string defining GCS commands + + static const string ParMode; // MODE + static const string ParPos1; // POS1 + static const string ParPos2; // POS2 + + // separator and line end + static const char lineFeed; + static const char space; + static const string nanValue; + + static const string axis1ID; + static const string axis2ID; + + static const string DrotDbPoint; + static const vltFLOAT iniDelay; + static const vltFLOAT comDelay; + static const vltFLOAT atzDelay; + + /// @brief Constructor. + /// + /// UPDATE: Write specific documentation here. + sxiafcDevDrvAfc(); + + /// @brief Destructor. + /// + /// UPDATE: Write specific documentation here. + ~sxiafcDevDrvAfc(); + + //////////////////////////////////////////////////////////////////////////// + // Methods implementing the specific logic of the Device Driver: + //////////////////////////////////////////////////////////////////////////// + + /// @brief Specific implementation of the device initialisation operation. + /// @param[in] request Request handle object. + /// + /// UPDATE: Write specific documentation here. + /// + /// See also ic0fbDevDrvBase::initialiseDevice(). + virtual ccsCOMPL_STAT initialiseDeviceUser(ic0fbRequestHandle& request); + + /// @brief Specific implementation of the Device Driver Control Loop. + /// @param[in] request Request object. + /// + /// UPDATE: Write specific documentation here. + /// + /// See also ic0fbDevDrvBase.controlLoop(). + virtual ccsCOMPL_STAT controlLoopUser(ic0fbRequestHandle& request); + + /// @brief Specific implementation of the Control Loop, request status. + /// @param[in] request Request object. + /// + /// UPDATE: Write specific documentation here. + /// + /// See also ic0fbDevDrvBase::controlLoopUser(). + virtual ccsCOMPL_STAT controlLoopStatusUser(ic0fbRequestHandle& request); + + /// @brief Specific implementation of the device disable operation. + /// @param[in] request Request handle object. + /// + /// UPDATE: Write specific documentation here. + /// + /// See also ic0fbDevDrvBase::disable(). +// virtual ccsCOMPL_STAT disableUser(ic0fbRequestHandle& request); + + /// @brief Specific implementation of the disable operation, request status. + /// @param[in] request Request handle object. + /// + /// UPDATE: Write specific documentation here. + /// + /// See also sxiafcDevDrvAfc::disableStatus(). +// virtual ccsCOMPL_STAT disableStatusUser(ic0fbRequestHandle& request); + + /// @brief Specific implementation of the device enable operation. + /// @param[in] request Request handle object. + /// + /// UPDATE: Write specific documentation here. + /// + /// See also ic0fbDevDrvBase::enable(). +// virtual ccsCOMPL_STAT enableUser(ic0fbRequestHandle& request); + + /// @brief Specific implementation of the enable operation, request status. + /// @param[in] request Request handle object. + /// + /// UPDATE: Write specific documentation here. + /// + /// See also ic0fbDevDrvBase::enableStatus(). +// virtual ccsCOMPL_STAT enableStatusUser(ic0fbRequestHandle& request); + + /// @brief Specific implementation of the device exit operation. + /// @param[in] request Request handle object. + /// + /// UPDATE: Write specific documentation here. + /// + /// See also ic0fbDevDrvBase::exit(). +// virtual ccsCOMPL_STAT exitUser(ic0fbRequestHandle& request); + + /// @brief Specific implementation of the exit operation, request status. + /// @param[in] request Request handle object. + /// + /// UPDATE: Write specific documentation here. + /// + /// See also ic0fbDevDrvBase::exitStatus(). +// virtual ccsCOMPL_STAT exitStatusUser(ic0fbRequestHandle& request); + + /// @brief Specific implementation of the device offline operation. + /// @param[in] request Request handle object. + /// + /// UPDATE: Write specific documentation here. + /// + /// See also ic0fbDevDrvbase::off(). + virtual ccsCOMPL_STAT offUser(ic0fbRequestHandle& request); + + /// @brief Specific implementation of the offline operation, request status. + /// @param[in] request Request handle object. + /// + /// UPDATE: Write specific documentation here. + /// + /// See also ic0fbDevDrvBase::offStatus(). + virtual ccsCOMPL_STAT offStatusUser(ic0fbRequestHandle& request); + + /// @brief Specific implementation of the device online operation. + /// @param[in] request Request handle object. + /// + /// UPDATE: Write specific documentation here. + /// + /// See also ic0fbDevDrvBase::online(). + virtual ccsCOMPL_STAT onlineUser(ic0fbRequestHandle& request); + + /// @brief Specific implementation of the online operation, request status. + /// @param[in] request Request handle object. + /// + /// UPDATE: Write specific documentation here. + /// + /// See also ic0fbDevDrvBase::onlineStatus(). + virtual ccsCOMPL_STAT onlineStatusUser(ic0fbRequestHandle& request); + + /// @brief Specific implementation of the device read operation. + /// @param[in] request Request handle object. + /// + /// UPDATE: Write specific documentation here. + /// + /// See also ic0fbDevDrvBase::read(). +// virtual ccsCOMPL_STAT readUser(ic0fbRequestHandle& request); + + /// @brief Specific implementation of the read operation, request status. + /// @param[in] request Request handle object. + /// + /// UPDATE: Write specific documentation here. + /// + /// See also ic0fbDevDrvBase::readStatus(). +// virtual ccsCOMPL_STAT readStatusUser(ic0fbRequestHandle& request); + + /// @brief Specific implementation of the device scan operation. + /// @param[in] request Request handle object. + /// + /// UPDATE: Write specific documentation here. + /// + /// See also ic0fbDevDrvBase::scan(). +// virtual ccsCOMPL_STAT scanUser(ic0fbRequestHandle& request); + + /// @brief Specific implementation of the scan operation, request status. + /// @param[in] request Request handle object. + /// + /// UPDATE: Write specific documentation here. + /// + /// See also ic0fbDevDrvBase::scanStatus(). +// virtual ccsCOMPL_STAT scanStatusUser(ic0fbRequestHandle& request); + + /// @brief Specific implementation of the device setup operation. + /// @param[in] request Request handle object. + /// + /// UPDATE: Write specific documentation here. + /// + /// See also ic0fbDevDrvBase::setup(). + virtual ccsCOMPL_STAT setupUser(ic0fbRequestHandle& request); + + /// @brief Specific implementation of the setup operation, request status. + /// @param[in] request Request handle object. + /// + /// UPDATE: Write specific documentation here. + /// + /// See also ic0fbDevDrvBase::setupStatus(). + virtual ccsCOMPL_STAT setupStatusUser(ic0fbRequestHandle& request); + + /// @brief Specific implementation of the device standby operation. + /// @param[in] request Request handle object. + /// + /// UPDATE: Write specific documentation here. + /// + /// See also ic0fbDevDrvBase::standby(). + virtual ccsCOMPL_STAT standbyUser(ic0fbRequestHandle& request); + + /// @brief Specific implementation of the standby operation, request status. + /// @param[in] request Request handle object. + /// + /// UPDATE: Write specific documentation here. + /// + /// See also ic0fbDevDrvBase::standbyStatus(). + virtual ccsCOMPL_STAT standbyStatusUser(ic0fbRequestHandle& request); + + /// @brief Specific implementation of the device status operation. + /// @param[in] request Request handle object. + /// + /// UPDATE: Write specific documentation here. + /// + /// See also ic0fbDevDrvBase::status(). + virtual ccsCOMPL_STAT statusUser(ic0fbRequestHandle& request); + + /// @brief Specific implementation of the status operation, request status. + /// @param[in] request Request handle object. + /// + /// UPDATE: Write specific documentation here. + /// + /// See also ic0fbDevDrvBase::statusStatus(). + virtual ccsCOMPL_STAT statusStatusUser(ic0fbRequestHandle& request); + + /// @brief Specific implementation of the device stop operation. + /// @param[in] request Request handle object. + /// + /// UPDATE: Write specific documentation here. + /// + /// See also ic0fbDevDrvBase::stop(). +// virtual ccsCOMPL_STAT stopUser(ic0fbRequestHandle& request); + + /// @brief Specific implementation of the stop operation, request status. + /// @param[in] request Request handle object. + /// + /// UPDATE: Write specific documentation here. + /// + /// See also ic0fbDevDrvBase::stopStatus(). +// virtual ccsCOMPL_STAT stopStatusUser(ic0fbRequestHandle& request); + + /// @brief Specific implementation of the device write operation. + /// @param[in] request Request handle object. + /// + /// Write one or more parameters plus associated values to the device. + /// + /// UPDATE: Write specific documentation here. + /// + /// See also ic0fbDevDrvBase::write(). +// virtual ccsCOMPL_STAT writeUser(ic0fbRequestHandle& request); + + /// @brief Specific implementation of the write operation, request status. + /// @param[in] request Request handle object. + /// + /// UPDATE: Write specific documentation here. + /// + /// See also ic0fbDevDrvBase::writeStatus(). +// virtual ccsCOMPL_STAT writeStatusUser(ic0fbRequestHandle& request); + /////////////////////////////////////////////////////////////////////////// + + protected: + + private: + + ic0fbList m_readAnswerParNames; + ic0fbParameter m_parMode; + ic0fbParameter m_parPos[2]; + vltDOUBLE m_curPos[2]; + vltDOUBLE m_setPos[2]; + vltDOUBLE m_refPos[2]; + vltDOUBLE m_minPos[2]; + vltDOUBLE m_maxPos[2]; + // + ccsCOMPL_STAT activateServoMode(); + ccsCOMPL_STAT checkError(); + ccsCOMPL_STAT checkZeroPointAdjustment(); + ccsCOMPL_STAT computeNewPos(vltDOUBLE drotAngle); + ccsCOMPL_STAT initSerial(); + bool isSerialInit(); + string readAnswer(); + void strstreamReset (stringstream& _strStrmIn); + double stringToDouble (const string& s); + ccsCOMPL_STAT updateDbMode(); + ccsCOMPL_STAT updateDbCurPos(); + ccsCOMPL_STAT updateDbSetPos(); + ccsCOMPL_STAT updateDbStatus (vltINT32); + ccsCOMPL_STAT writeCommand (const stringstream& _strStrmCmd); + ccsCOMPL_STAT zeroPointAdjustment(); +}; + + +#endif // !sxiafcDevDrvAfc_H diff --git a/ICS/sxiafc/include/sxiafcDevDrvSimAfc.h b/ICS/sxiafc/include/sxiafcDevDrvSimAfc.h new file mode 100644 index 0000000..5429adb --- /dev/null +++ b/ICS/sxiafc/include/sxiafcDevDrvSimAfc.h @@ -0,0 +1,91 @@ +#ifndef sxiafcDevDrvSimAfc_H +#define sxiafcDevDrvSimAfc_H +//////////////////////////////////////////////////////////////////////////////// +// ESO - VLT Project +// +// "@(#) $Id: sxiafcDevDrvSimAfc.h 354074 2022-03-25 18:53:27Z bsalasni $" +// +// Who When What +// -------- ---------- ------------------------------------------------------- +// jknudstr 2009-11-30 Created +// UPDATE UPDATE Updated from template +//------------------------------------------------------------------------------ + +//////////////////////////////////////////////////////////////////////////////// +// Template header source file to use as starting point when implementing new +// IC0FB Device Driver Simulators. +//------------------------------------------------------------------------------ + +#ifndef __cplusplus +#error This is a C++ include file and cannot be used from plain C +#endif + + +#include "ic0fbDevDrvSimBase.h" +#include "sxiafcDefines.h" + +/// +class sxiafcDevDrvSimAfc: public ic0fbDevDrvSimBase +{ + public: + + struct Dev dev; + struct Status status; + struct GcsCmd gcsCmd; + + /// @brief Constructor. + /// + /// UPDATE: Write specific documentation here. + sxiafcDevDrvSimAfc(); + + /// @brief Destructor. + /// + /// UPDATE: Write specific documentation here. + ~sxiafcDevDrvSimAfc(); + + /////////////////////////////////////////////////////////////////////////// + // Methods implementing the specific logic of the Device Driver simulator: + /////////////////////////////////////////////////////////////////////////// + + /// @brief Context specific initialisation of the simulator. + /// + /// User provided method, handling internal preparation of the object. + virtual ccsCOMPL_STAT initialiseDeviceUser(); + + /// @brief Simulate reading a set of parameters from device. + /// @param[in] name Names of the parameters. + /// @param[in] parameter Parameter objects in which the info is stored. + /// + /// Implements the simulated behavior of reading information about a set of + /// specific parameters from the device name space. + virtual ccsCOMPL_STAT readUser(ic0fbList& parNames, + ic0fbPars_t& parameters); + + /// @brief Write a set of parameters to the device. + /// @param[in] parameters Vector of parameter objects. + /// + /// Handle simulated behavior of writing the parameters and their + /// associated values to the device. A context specific implementation must + /// be provided. + virtual ccsCOMPL_STAT writeUser(ic0fbPars_t& parameters); + /////////////////////////////////////////////////////////////////////////// + + protected: + + private: + + string m_strPos1; + string m_strPos2; + CtrlCmd m_ctrlCmd; + struct { + bool bExec = false; + vltINT32 nCmd = 0; + string sCmd = ""; + } m_cmdState; + + ccsCOMPL_STAT parseCmdMov(const string& str); +}; + + +#endif // !sxiafcDevDrvSimAfc_H + diff --git a/ICS/sxiafc/src/Makefile b/ICS/sxiafc/src/Makefile new file mode 100644 index 0000000..afd1004 --- /dev/null +++ b/ICS/sxiafc/src/Makefile @@ -0,0 +1,148 @@ +#******************************************************************************* +# E.S.O. - VLT project +# +# "@(#) $Id: Makefile 353934 2022-03-23 11:55:40Z dricci $" +# +# Makefile of sxiafcAfc +# +# who when what +# -------- ---------- ---------------------------------------------- +# mdepasca 2020-07-29 Created +# + +#******************************************************************************* +# This Makefile follows VLT Standards (see Makefile(5) for more). +#******************************************************************************* +# REMARKS +# None +#------------------------------------------------------------------------ +COMMON_LIBS = \ + open62541 \ + ic0fb ic0fbi ic0fbo \ + ixac ibac \ + seq \ + ctoo oslx slx misc \ + evh eccs fnd \ + CCS \ + cfitsio \ + C++ uuid +# +# user definable C-compilation flags +USER_CFLAGS = -DUA_NO_AMALGAMATION + +# +# additional include and library search paths +USER_INC = $(shell pkg-config --cflags-only-I open62541) +USER_LIB = $(shell pkg-config --libs-only-L open62541) + + + +# +# MODULE CODE DESCRIPTION: +# ------------------------ +# As a general rule: public file are "cleaned" and "installed" +# local (_L) are not "installed". + +# +# C programs (public and local) +# ----------------------------- +EXECUTABLES = sxiafcAfc sxiafcSimAfc +EXECUTABLES_L = + +# +# AFC device server +sxiafcAfc_OBJECTS = sxiafcDevSrvAfc +sxiafcAfc_LDFLAGS = +sxiafcAfc_LIBS = $(COMMON_LIBS) sxiafc + +# AFC device simulator +sxiafcSimAfc_OBJECTS = sxiafcDevSimAfc +sxiafcSimAfc_LDFLAGS = +sxiafcSimAfc_LIBS = $(COMMON_LIBS) sxiafc + +# +# Includes (.h) files (public only) +# --------------------------------- +INCLUDES = + +# +# Libraries (public and local) +# ---------------------------- +LIBRARIES = sxiafc +LIBRARIES_L = + +# +# AFC device driver and device driver simulator +sxiafc_OBJECTS = sxiafcDevDrvAfc sxiafcDevDrvSimAfc + +# +# On-Line Database Files +# ---------------------- +DBL_CLASSES = sxiafcAFC sxiafcFB_AFC +DBL_BCF = +DBL_FLAGS = + +# +# INS_ROOT files to be installed +#------------------------------- +INS_ROOT_FILES = +INS_ROOT_DIR = + +# +# other files to be installed +#---------------------------- +INSTALL_FILES = ../config/sxiafc_TwinCAT.fbmap \ + ../config/ESO-VLT-DIC.SXIAFC_CFG \ + ../config/ESO-VLT-DIC.SXIAFC_REF + +# +# list of all possible C-sources (used to create automatic dependencies) +# ------------------------------ +CSOURCENAMES = \ + $(foreach exe, $(EXECUTABLES) $(EXECUTABLES_L), $($(exe)_OBJECTS)) \ + $(foreach lib, $(LIBRARIES) $(LIBRARIES_L), $($(lib)_OBJECTS)) + +# +#>>>>> END OF standard rules + +# +# CHOSE PLATFORM +# -------------- +# Default is UNIX, for VxVorks application next line MUST BE UNCOMMENTED +#MAKE_VXWORKS = on + +# +# INCLUDE STANDARDS +# ----------------- +MAKEDIR = $(VLTROOT)/include +include $(MAKEDIR)/vltMakefile + +# +# TARGETS +# ------- +all: do_all + @echo " . . . 'all' done" + +clean : clean_all + @echo " . . . clean done" + +clean_dist : clean_all clean_dist_all + @echo " . . . clean_dist done" + +man : do_man + @echo " . . . man page(s) done" + +install : install_all + @echo " . . . installation done" + +db : db_all + @echo " . . . ../DB done" + +dic: + @echo "== Making dictionary: ESO-VLT-DIC.SXIAFC_REF" + $(AT)rm -f ../config/ESO-VLT-DIC.SXIAFC_REF + $(AT)ctooTxt2Dic sxiafcDIC_REF.dic > ../config/ESO\-VLT\-DIC.SXIAFC_REF + @echo "== Making dictionary: ESO-VLT-DIC.SXIAFC_CFG" + $(AT)rm -f ../config/ESO-VLT-DIC.SXIAFC_CFG + $(AT)ctooTxt2Dic sxiafcDIC_CFG.dic > ../config/ESO\-VLT\-DIC.SXIAFC_CFG +#___oOo___ diff --git a/ICS/sxiafc/src/sxiafcDIC_CFG.dic b/ICS/sxiafc/src/sxiafcDIC_CFG.dic new file mode 100644 index 0000000..4388f0c --- /dev/null +++ b/ICS/sxiafc/src/sxiafcDIC_CFG.dic @@ -0,0 +1,68 @@ +#****************************************************************************** +# E.S.O. - VLT project +# +# "@(#) $Id: sxiafcDIC_CFG.dic 335130 2020-09-03 13:28:15Z mdepasca $" +# +# SOXS_CFG dictionary +# +# who when what +# -------- ---------- ---------------------------------------------- +# bsalasni 2022-05-07 Added REFPOS, MINPOS, MAXPOS +# bsalasni 2022-03-15 Clean up: removed not used keywords +# mdepasca 9/9/2019 Created following approach used for ERIS NGIR +# +#****************************************************************************** +# This dictionary defines the configuration parameters for AFC Device Driver +# ******************************************************************************* +DICTIONARY SXIAFC_CFG "SXIAFC_CFG" "AFC Configuration Dictionary" +REVISION "$Revision: 334495 $" +CONTEXT "Instrument" + +################################################################################ +# AFC Special Device +################################################################################ +INSi.AFCi.IDi %10s Unique ID (c). +INSi.AFCi.NAME %s Element name (c). +INSi.AFCi.DEVNAME %19s Name of the ICS device (c). +INSi.AFCi.PREFIX %15s AFCi FITS prefix (c). +INSi.AFCi.DESC %s Short description (c) +INSi.AFCi.DEVDESC %19s Description of the ICS device (c). +INSi.AFCi.DEVTYPE %19s Device type (C). +INSi.AFCi.LCUID %d Id. of the PLC managing the device (c). +INSi.AFCi.SWSIM %c T for software simulation (c). +INSi.AFCi.ADDRESS %10s Address for normal mode (c) + This address is used to connect to the device + HW, when running in normal mode. +INSi.AFCi.SIMADDR %10s Address for simulation mode (c) + This address is used to connect to the + device HW, when running in simulation + mode. I.e., it makes the Device Server + connect to the Device Simulator Process. +INSi.AFCi.PERIOD %d [ms] Control Loop period (c) + The Control Loop period specifies with + which frequency the status parameters + are queried and logged. +INSi.AFCi.MAPPREFIX %30s Prefix for name mapping (c). +INSi.AFCi.MAPFILE %30s Name Mapping File (c). +INSi.AFCi.MAXBUF %d Max number of parameters to read/write (c). +INSi.AFCi.REFPOS1 %f [urad] Reference tip (c). +INSi.AFCi.REFPOS2 %f [urad] Reference tilt (c). +INSi.AFCi.MINPOS1 %f [urad] Minimum tip (c). +INSi.AFCi.MINPOS2 %f [urad] Minimum tilt (c). +INSi.AFCi.MAXPOS1 %f [urad] Maximum tip (c). +INSi.AFCi.MAXPOS2 %f [urad] Maximum tilt (c). +# GUI +INSi.AFCi.UIFCLASS %s Widget class to be used (c). +INSi.AFCi.UIFNB %d Index of notebook to be used (c). +INSi.AFCi.UIFTB %d Index of tab to be used (c). +# tat +INSi.AFCi.TESTMAX %d Maximum number of test commands (c) +INSi.AFCi.TESTCMDi %15s Command name (c). +INSi.AFCi.TESTPARi %256s Paramaters string (c). +INSi.AFCi.TESTERRi %c Expected Error reply (c). +INSi.AFCi.PROCNAME %32s Name of the device server (c). +# +#### + + + diff --git a/ICS/sxiafc/src/sxiafcDIC_REF.dic b/ICS/sxiafc/src/sxiafcDIC_REF.dic new file mode 100644 index 0000000..ff975eb --- /dev/null +++ b/ICS/sxiafc/src/sxiafcDIC_REF.dic @@ -0,0 +1,45 @@ +#******************************************************************************* +# ESO - VLT Project +# +# "@(#) $Id: sxiafcDIC_REF.dic,v 0.56 2011/10/11 13:52:32 vltsccm Exp $" +# +# who when what +# -------- ---------- -------------------------------------------------------- +# bsalasni 2022-03-15 Added MODE keyword +# bsalasni 2020-12-07 Created +# +#******************************************************************************* +# NAME +# ESO-VLT-DIC.SXIAFC_REF - Dictionary for AFC - Runtime Parameters +#------------------------------------------------------------------------------- + +DICTIONARY SXIAFC_REF "SXIAFC_REF" "Template Configuration Dictionary" +REVISION "1.0" +CONTEXT "Instrument" + +################################################################################ +# This dictionary defines the run-time parameters used when deploying the +# sxiAFC Device Drivers. +# +# The parameters in question are: +# +# - Setup. +# - Status (FITS header). +# - Operations Logging. +# +# Note, some parameters contained in this dictionary, are also used for the +# configuration. +# +# Note also, that some parameters needed by the SXIAFC Device Drivers may be +# defined in the "ICB_REF" dictionary. +# +# Instruments shall not use this dictionary directly, by should use it as a +# template to create their own dictinaries. +################################################################################ +#******************************************************************************* +# AFC Special Device +#******************************************************************************* +INS.AFCi.POSi %.3f [mrad] Current position (hso). +INS.AFCi.MODE %s Device mode (hso). +# EOF + diff --git a/ICS/sxiafc/src/sxiafcDevDrvAfc.C b/ICS/sxiafc/src/sxiafcDevDrvAfc.C new file mode 100644 index 0000000..b2c416d --- /dev/null +++ b/ICS/sxiafc/src/sxiafcDevDrvAfc.C @@ -0,0 +1,1083 @@ +/////////////////////////////////////////////////////////////////////////////// +// ESO - VLT Project +// +// "@(#) $Id: sxiafcDevDrvAfc.C 356146 2022-05-09 08:32:06Z bsalasni $" +// +// Who When What +//------------------------------------------------------------------------------ +// bsalasni 2022-05-07 Added config keywords: REFPOS1/2, MINPOS1/2, MAXPOS1/2 +// bsalasni 2022-05-07 Called ERR? after sending commands to the controller +// bsalasni 2022-05-04 setupUser: MOV params set to %1.f (serial buffer 22 char) +// bsalasni 2022-04-27 setupUser: added out of range check on POS1,POS2 +// bsalasni 2022-04-26 added short sleep before comInterface().write/read +// bsalasni 2022-03-08 General review +// mdepasca 2020-08-21 Implemented standbyStatusUser and standbyUser +// mdepasca 2020-08-20 Implemented methods to write and read from serial I/F +// mdepasca 2020-08-20 Implemented controlLoopUser +// mdepasca 2020-07-30 Added missing headers +// mdepasca 2020-07-29 Added SETUP keywords +// jknudstr 2009-11-09 Created +//------------------------------------------------------------------------------ + +//////////////////////////////////////////////////////////////////////////////// +// NAME +// sxiafcDevDrvAfc - AFC (Adaptive Flexure Compensator) device driver. +//------------------------------------------------------------------------------ + +#define _POSIX_SOURCE 1 +#include "vltPort.h" + +ATTRIBUTE_UNUSED static const char* rcsId="@(#) $Id: sxiafcDevDrvAfc.C 356146 2022-05-09 08:32:06Z bsalasni $"; + +#include "ic0fbUtils.h" +#include "ic0fbDevSrv.h" +#include "ic0fbDriverInfo.h" +#include "sxiafcDevDrvAfc.h" +#include + +const string sxiafcDevDrvAfc::ParMode = "MODE"; +const string sxiafcDevDrvAfc::ParPos1 = "POS1"; +const string sxiafcDevDrvAfc::ParPos2 = "POS2"; + +const char sxiafcDevDrvAfc::lineFeed = (char)0x0A; // ASCII char # 10 +const char sxiafcDevDrvAfc::space = (char)0x20; // ASCII char # 32 + +const string sxiafcDevDrvAfc::axis1ID = "1"; +const string sxiafcDevDrvAfc::axis2ID = "2"; +const string sxiafcDevDrvAfc::nanValue = "NaN"; +const string sxiafcDevDrvAfc::DrotDbPoint = "@wsxs:Appl_data:TCS:track.rotAngle"; +// delay set inside FB before providing answer from controller +const vltFLOAT sxiafcDevDrvAfc::iniDelay = 2.0; // seconds to execute FB init serial comm +const vltFLOAT sxiafcDevDrvAfc::comDelay = 0.5; // seconds before any r/w +const vltFLOAT sxiafcDevDrvAfc::atzDelay = 5.0; // seconds + +/// @brief Constructor +sxiafcDevDrvAfc::sxiafcDevDrvAfc() +{ + ic0fbTRACE; + className_(this); +} + +/// @brief Destructor +sxiafcDevDrvAfc::~sxiafcDevDrvAfc() +{ + ic0fbTRACE; +} + +/// @brief Specific implementation of the device initialisation procedure. +/// @param[in] request Request handle object. +ccsCOMPL_STAT sxiafcDevDrvAfc::initialiseDeviceUser( + ic0fbRequestHandle& request +) +{ + ic0fbTRACE; + + // Check for mandatory ICB configuration keys. + string cfgKeys[] = {"DEVNAME", "PREFIX", "DESC", "DEVDESC", + "SWSIM", "LCUID", "DEVTYPE", "ADDRESS", + "SIMADDR", "PERIOD", "MAPPREFIX", "MAPFILE", + "REFPOS1", "REFPOS2", + "MINPOS1", "MINPOS2", + "MAXPOS1", "MAXPOS2", + ""}; + + if (checkMandatoryKeys(cfgKeys) == FAILURE) + { + ic0fbFAILURE("Error checking for mandatory keys"); + } + + // Declaration of Device Driver information. + string drvInfoName = className(); + string drvInfoVersion = ic0fbUtils::getVersionFromScmId(rcsId); + string drvInfoDate = ic0fbUtils::getDateFromScmId(rcsId); + string drvInfoSynopsis = "Tip-tilt mirror for flexure compensation"; + string drvInfoDescription = + "IC0FB driver to control the SOXS Active Flexure Compensator" + "through the PI E-727 multi-channel piezo controller connected to the PLC" + "via a serial line."; + string drvInfoFirmwareVersion = "0.1"; + name(drvInfoName); + version(drvInfoVersion); + date(drvInfoDate); + synopsis(drvInfoSynopsis); + description(drvInfoDescription); + firmwareVersion(drvInfoFirmwareVersion); + //------------------------------------------------------------------------- + + // define the setup keywords and assign the default values + m_parMode = ic0fbParameter(device().prefix() + "." + ParMode, "REF"); // INS.AFCi.MODE + m_parPos[0] = ic0fbParameter(device().prefix() + "." + ParPos1, "0.0"); // INS.AFCi.POS1 + m_parPos[1] = ic0fbParameter(device().prefix() + "." + ParPos2, "0.0"); // INS.AFCi.POS2 + + // init values + string cfg_refPos[2] = {"REFPOS1", "REFPOS2"}; + vltDOUBLE refPos[2] = {1000.0, 1000.0}; + string cfg_minPos[2] = {"MINPOS1", "MINPOS2"}; + vltDOUBLE minPos[2] = {0.0, 0.0}; + string cfg_maxPos[2] = {"MAXPOS1", "MAXPOS2"}; + vltDOUBLE maxPos[2] = {2000.0, 2000.0}; + for (int j=0; j < 2; j++) + { + // current position + m_curPos[j] = 0.0; + // commanded position + m_setPos[j] = 0.0; + // reference position, from configuration + if (device().hasCfgKey(cfg_refPos[j])) + { + refPos[j] = device().cfgDblVal(cfg_refPos[j]); + ic0fbLOG2("PARAMETER FOUND: %s = %.1lf", cfg_refPos[j].c_str(), refPos[j]); + } + else + { + ic0fbLOG2("NO PARAMETER FOUND: %s. Using %.1lf", cfg_refPos[j].c_str(), refPos[j]); + } + m_refPos[j] = refPos[j]; + // min position, from configuration + if (device().hasCfgKey(cfg_minPos[j])) + { + minPos[j] = device().cfgDblVal(cfg_minPos[j]); + ic0fbLOG2("PARAMETER FOUND: %s = %.1lf", cfg_minPos[j].c_str(), minPos[j]); + } + else + { + ic0fbLOG2("NO PARAMETER FOUND: %s. Using %.1lf", cfg_minPos[j].c_str(), minPos[j]); + } + m_minPos[j] = minPos[j]; + // max position, from configuration + if (device().hasCfgKey(cfg_maxPos[j])) + { + maxPos[j] = device().cfgDblVal(cfg_maxPos[j]); + ic0fbLOG2("PARAMETER FOUND: %s = %.1lf", cfg_maxPos[j].c_str(), maxPos[j]); + } + else + { + ic0fbLOG2("NO PARAMETER FOUND: %s. Using %.1lf", cfg_maxPos[j].c_str(), maxPos[j]); + } + m_maxPos[j] = maxPos[j]; + } + +//ic0fbLOG2("REF: %f %f MIN: %f %f MAX: %f %f", refPos[0], refPos[1], minPos[0], minPos[1], maxPos[0], maxPos[1]); + + // init position in the DB + updateDbCurPos(); + updateDbSetPos(); + + // init MODE in the DB + updateDbMode(); + + request.status(ic0fbRequestHandle::ReqStatCompleted); + ic0fbLOG1("Device Driver initialised"); + return SUCCESS; +} + +ccsCOMPL_STAT sxiafcDevDrvAfc::computeNewPos(vltDOUBLE drotAngle) +{ + // compute the new position + ic0fbTRACE; + ic0fbLOG4("sxiafcDevDrvAfc::computeNewPos()"); + +// TBD (computeNewPos) - implement the computation, so far missing AUTO control law. + + // m_setPos[0] = ... + // m_setPos[1] = ... + return SUCCESS; +} + +ccsCOMPL_STAT sxiafcDevDrvAfc::controlLoopUser( + ic0fbRequestHandle& request +) +{ + ic0fbTRACE; + stringstream strStrmCmd; + vltDOUBLE drotAngle; + + ic0fbLOG1("sxiafcDevDrvAfc::controlLoopUser()"); + + // if MODE is AUTO: new position computed from de-rotator position and applied + string strMode = m_parMode.getValAsString(); + if (strMode == "AUTO") + { + // get derotator position from DB + if (dbRead(&drotAngle, (char *)DrotDbPoint.c_str()) == FAILURE) + { + ic0fbFAILURE("Error reading derotator angle from database"); + } + // compute new positions + computeNewPos(drotAngle); + + // change status to BUSY + updateDbStatus(status.Busy); + + // prepare the command "MOV 1 12.3 2 45.6" + char buff1[10]; + char buff2[10]; + snprintf(buff1, sizeof(buff1), "%.1lf", m_setPos[0]); + snprintf(buff2, sizeof(buff2), "%.1lf", m_setPos[1]); + string strBuff1 = buff1; + string strBuff2 = buff2; + // + strstreamReset(strStrmCmd); + strStrmCmd << gcsCmd.moveAbs << space + << axis1ID << space << strBuff1 << space + << axis2ID << space << strBuff2 << lineFeed; + // write command to device + if (writeCommand(strStrmCmd) == FAILURE) + { + request.status(ic0fbRequestHandle::ReqStatFailed); + } + + // ERR? + checkError(); + + // change status to IDLE + updateDbStatus(status.Idle); + + // update position in the DB + updateDbSetPos(); + + // call STATUS to get the real updated position + statusUser(request); + } + + request.status(ic0fbRequestHandle::ReqStatCompleted); + return SUCCESS; +} + + +ccsCOMPL_STAT sxiafcDevDrvAfc::controlLoopStatusUser( + ic0fbRequestHandle& request +) +{ + ic0fbTRACE; + ic0fbLOG4("sxiafcDevDrvAfc::controlLoopStatusUser()"); + if (ic0fbDevDrvBase::controlLoopStatusUser(request) == FAILURE) + { + ic0fbFAILURE("Error executing Control Loop logic"); + } + return SUCCESS; +} + + +ccsCOMPL_STAT sxiafcDevDrvAfc::onlineUser( + ic0fbRequestHandle& request +) +{ + ic0fbTRACE; + ic0fbLOG4("onlineUser()"); + + // change status to BUSY + updateDbStatus(status.Busy); + + // check on initialization of serial interface + if (!isSerialInit()) + { + ic0fbFAILURE("Error: driver not initialised. Please go OFF and then STANDBY to init."); + request.status(ic0fbRequestHandle::ReqStatFailed); + } + + // change status to IDLE + updateDbStatus(status.Idle); + + return SUCCESS; +} + + +ccsCOMPL_STAT sxiafcDevDrvAfc::onlineStatusUser( + ic0fbRequestHandle& request +) +{ + ic0fbTRACE; + ic0fbLOG4("onlineStatusUser()"); + request.status(ic0fbRequestHandle::ReqStatCompleted); + return SUCCESS; +} + + +ccsCOMPL_STAT sxiafcDevDrvAfc::setupUser( + ic0fbRequestHandle& request +) +{ + ic0fbTRACE; + ic0fbParameter tmpPar; + string strPos1; + string strPos2; + string strMode; + stringstream strStrmCmd; + bool bUpdateMode = false; + ccsCOMPL_STAT opStatus = SUCCESS; + + ic0fbLOG2("setupUser()"); + + // Allowed SETUP combinations are: + // + // INS.AFC.MODE REF + // INS.AFC.MODE AUTO + // INS.AFC.MODE STAT INS.AFC.POS1 12.3 + // INS.AFC.MODE STAT INS.AFC.POS2 56.7 + // INS.AFC.MODE STAT INS.AFC.POS1 12.3 INS.AFC.POS2 56.7 + // + // A POS1/POS2 setup without MODE is not allowed. + + // change status to BUSY + updateDbStatus(status.Busy); + + // look for MODE + if (ic0fbParameter::seek(buildKey(ParMode), request.inputPars(), tmpPar)) + { + strMode = tmpPar.getValAsString(); + boost::algorithm::trim(strMode); + strMode = ic0fbUtils::upper(strMode); + ic0fbLOG2("MODE = |%s|", strMode.c_str()); + if (strMode == "AUTO" || strMode == "REF" || strMode == "STAT") + { + // if mode is REF, move both axis to nominal position + // command "MOV 1 1000.0 2 1000.0" + if (strMode == "REF") + { + bUpdateMode = true; + strstreamReset(strStrmCmd); + strStrmCmd << gcsCmd.moveAbs << space + << axis1ID << space << m_refPos[0] << space + << axis2ID << space << m_refPos[1] << lineFeed; + if (writeCommand(strStrmCmd) == FAILURE) + { + request.status(ic0fbRequestHandle::ReqStatFailed); + ic0fbERR_LOG("Error writing the command"); + opStatus = FAILURE; + } + else + { + m_setPos[0] = m_refPos[0]; + m_setPos[1] = m_refPos[1]; + // update values in the DB + updateDbSetPos(); + } + // ERR? + checkError(); + } + else if (strMode == "AUTO") + { + bUpdateMode = true; + } + else // STAT + { + // handle the POS case + bool bSendCmd = false; + + // prepare the motion command "MOV 1 12.3 2 56.7" + strstreamReset(strStrmCmd); + strStrmCmd << gcsCmd.moveAbs << space; + // if POS1 + if (ic0fbParameter::seek(buildKey(ParPos1), request.inputPars(), tmpPar) ) + { + // check on SW limits + double val = tmpPar.doubleValue(); + if (val >= m_minPos[0] && val <= m_maxPos[0]) + { + // serial comm has a buffer limit of 22 char. Therefore we limit the + // value to %.1f. The longest case is "MOV 1 1000.1 2 1000.1" + char buff[10]; + snprintf(buff, sizeof(buff), "%.1lf", val); + string strBuff = buff; + strStrmCmd << axis1ID << space << strBuff; + // + m_setPos[0] = val; + bSendCmd = true; + } + else + { + ic0fbERR_LOG("POS1 not in range [%.1lf %.1lf]", m_minPos[0], m_maxPos[0]); + } + } + // if POS2 + if (ic0fbParameter::seek(buildKey(ParPos2), request.inputPars(), tmpPar) ) + { + // check on SW limits + double val = tmpPar.doubleValue(); + if (val >= m_minPos[1] && val <= m_maxPos[1]) + { + if(bSendCmd) + { + // it means we have to append the POS2 value + strStrmCmd << space; + } + char buff[10]; + snprintf(buff, sizeof(buff), "%.1lf", val); + string strBuff = buff; + strStrmCmd << axis2ID << space << strBuff; + // + m_setPos[1] = val; + bSendCmd = true; + } + else + { + ic0fbERR_LOG("POS2 not in range [%.1lf %.1lf]", m_minPos[1], m_maxPos[1]); + } + } + + if (bSendCmd) + { + // add terminal character + strStrmCmd << lineFeed; + if (writeCommand(strStrmCmd) == FAILURE) + { + request.status(ic0fbRequestHandle::ReqStatFailed); + ic0fbERR_LOG("Error writing the command"); + opStatus = FAILURE; + } + else + { + // ERR? + checkError(); + + // update the positions in the DB + updateDbSetPos(); + + // ok to update also MODE in the DB + bUpdateMode = true; + } + } + else + { + ic0fbERR_LOG("wrong SETUP: expected POS1 and/or POS2"); + opStatus = FAILURE; + } + } + if (bUpdateMode) + { + // update MODE + m_parMode.setVal(strMode); + // update mode in the DB + updateDbMode(); + } + // call STATUS to get the current values + statusUser(request); + } + else + { + ic0fbERR_LOG("Wrong MODE. Accepted: REF, STAT, AUTO."); + opStatus = FAILURE; + } + } + else + { + ic0fbERR_LOG("Missing MODE keyword. MODE is mandatory in a SETUP."); + opStatus = FAILURE; + } + + // change status to IDLE + updateDbStatus(status.Idle); + + request.status(ic0fbRequestHandle::ReqStatCompleted); + return opStatus; +} + + + +ccsCOMPL_STAT sxiafcDevDrvAfc::setupStatusUser( + ic0fbRequestHandle& request +) +{ + ic0fbTRACE; + + if (ic0fbDevDrvBase::setupStatusUser(request) == FAILURE) + { + ic0fbFAILURE("Error checking status of Device Driver Setup Operation"); + } + + return SUCCESS; +} + + +ccsCOMPL_STAT sxiafcDevDrvAfc::standbyUser( + ic0fbRequestHandle& request +) +{ + ic0fbTRACE; + ic0fbLOG2("standbyUser()"); + + // change status to BUSY + updateDbStatus(status.Busy); + + // if not initialised, call the auto homing procedure + if (!isSerialInit()) + { + // initialise HW serial interface + initSerial(); + + // check + if(isSerialInit()) + { + + // send ATZ 1 NaN 2 NaN + if (zeroPointAdjustment() == FAILURE) + { + request.status(ic0fbRequestHandle::ReqStatFailed); + ic0fbFAILURE("Error launching the zero point adjustment"); + } + + // send ATZ? 1 and ATZ? 2 + if (checkZeroPointAdjustment() == FAILURE) + { + request.status(ic0fbRequestHandle::ReqStatFailed); + ic0fbFAILURE("Zero point adjustment failed, sent AFC to OFF"); + offUser(request); + } + + // send SVO 1 1 2 1 + if (activateServoMode() == FAILURE) + { + request.status(ic0fbRequestHandle::ReqStatFailed); + ic0fbFAILURE("Error activating the servo mode"); + } + + } + } + + // change status to IDLE + updateDbStatus(status.Idle); + + return SUCCESS; +} + + +ccsCOMPL_STAT sxiafcDevDrvAfc::standbyStatusUser( + ic0fbRequestHandle& request) +{ + ic0fbTRACE; + request.status(ic0fbRequestHandle::ReqStatCompleted); + return SUCCESS; +} + + +ccsCOMPL_STAT sxiafcDevDrvAfc::statusUser( + ic0fbRequestHandle& request +) +{ + ic0fbTRACE; + ic0fbLOG4("statusUser()"); + + ccsCOMPL_STAT opStatus = SUCCESS; + stringstream strStrmCmd; + string strAns; + string strPos; + vltDOUBLE pos; + + // check on initialization of serial interface + if (!isSerialInit()) { + // initialise HW serial interface + initSerial(); + } + + // ask for position of axis 1 by sending the command "POS? 1" + strstreamReset(strStrmCmd); + strStrmCmd << gcsCmd.getPos << space << axis1ID << lineFeed; + if (writeCommand(strStrmCmd) == FAILURE) + { + request.status(ic0fbRequestHandle::ReqStatFailed); + } + else + { + // read reply + // "1=1.000701904e+02\n" + strPos = readAnswer(); + // trim "1=" + size_t n = strPos.find("1="); + if(n != string::npos) + strPos = strPos.substr(2); + // trim "\n" + n = strPos.find("\n"); + if(n != string::npos) + strPos = strPos.substr(0, n); + // convert to double + pos = stringToDouble(strPos); + ic0fbLOG2("Reply string: %s", strPos.c_str()); + // update the current pos + m_parPos[0].setVal(strPos); // this is published in FITS + m_curPos[0] = pos; // this is private + } + + // ERR? + checkError(); + + // ask for position of axis 2 by sending the command "POS? 2" + strstreamReset(strStrmCmd); + strStrmCmd << gcsCmd.getPos << space << axis2ID << lineFeed; + if (writeCommand(strStrmCmd) == FAILURE) + { + request.status(ic0fbRequestHandle::ReqStatFailed); + } + else + { + // read reply + strPos = readAnswer(); + // trim "2=" + size_t n = strPos.find("2="); + if(n != string::npos) + strPos = strPos.substr(2); + // trim "\n" + n = strPos.find("\n"); + if(n != string::npos) + strPos = strPos.substr(0, n); + // convert to double + pos = stringToDouble(strPos); + ic0fbLOG2("Reply string: %s", strPos.c_str()); + // update the current pos + m_parPos[1].setVal(strPos); // this is published in FITS + m_curPos[1] = pos; // this is private + } + + // ERR? + checkError(); + + // update the current POS values in the DB + updateDbCurPos() ; + + // return the parameters (FITS) + request.addOutputPar(m_parMode); + request.addOutputPar(m_parPos[0]); + request.addOutputPar(m_parPos[1]); + + // change status to IDLE + updateDbStatus(status.Idle); + + return opStatus; +} + + +ccsCOMPL_STAT sxiafcDevDrvAfc::statusStatusUser( + ic0fbRequestHandle& request +) +{ + ic0fbTRACE; + ic0fbLOG4("statusStatusUser()"); + request.status(ic0fbRequestHandle::ReqStatCompleted); + return SUCCESS; +} + + + +/* + * PURPOSE : Helper method to write command to serial interface + * PARAMS : const stringstream& _strStrmCmd - + * RETURNS : ccsCOMPL_STAT - + * NOTES : + */ +ccsCOMPL_STAT sxiafcDevDrvAfc::writeCommand( + const stringstream& _strStrmCmd + ) +{ + // at FB level: + // ctrl.nCommand = 2 + // ctrl.sCommand = "command text" + // ctrl.bExecute = True + + ic0fbTRACE; + ccsCOMPL_STAT opStatus = SUCCESS; + ic0fbPars_t pars; + + ic0fbLOG2("Writing GCS command string: |%s|", _strStrmCmd.str().c_str()); + + // Important note: the simulator prepares the reply only when it receives CtrlExecute, + // therefore this parameter MUST be the last one in the list. + pars.clear(); + pars.push_back(ic0fbParameter(dev.CtrlCommand, ctrlCmd.Write)); + pars.push_back(ic0fbParameter(dev.CtrlCommandText, _strStrmCmd.str())); + pars.push_back(ic0fbParameter(dev.CtrlExecute, (vltLOGICAL)TRUE)); + + // change status to BUSY + updateDbStatus(status.Busy); + + // in case of calls in sequence, give time the FB to launch the previous command + ic0fbUtils::sleep(comDelay); + + // write the commands + if (comInterface().write(pars) == FAILURE) + { + ic0fbERR_LOG("Error writing to device"); + opStatus = FAILURE; + } + + // change status to IDLE + updateDbStatus(status.Idle); + + return opStatus; +} + +/* + * PURPOSE : Read sReply from device controller + * RETURNS : string + */ +string sxiafcDevDrvAfc::readAnswer() +{ + ic0fbTRACE; + ic0fbLOG2("Reading answer"); + ic0fbParameter par; + string sReply = ""; + + // change status to BUSY + updateDbStatus(status.Busy); + + // give time the PLC to execute the command before read the reply + ic0fbUtils::sleep(comDelay); + + // read stat.sReply from the controller + if (comInterface().read(dev.StatCommandReplyText, par) == FAILURE) + { + ic0fbLOG1("Failed reading answer from device hardware"); + } + else + { + sReply = par.getValAsString(); + + // remove all leading or trailing white spaces + boost::algorithm::trim(sReply); + + ic0fbLOG3("Read parameter: %s %s %s", + par.internalName().c_str(), + par.address().c_str(), + par.getValAsString().c_str()); + } + + // change status to IDLE + updateDbStatus(status.Idle); + + return sReply; +} + + +void sxiafcDevDrvAfc::strstreamReset(stringstream& _strStrmIn) +{ + _strStrmIn.str(string()); + _strStrmIn.clear(); +} + +ccsCOMPL_STAT sxiafcDevDrvAfc::updateDbStatus(vltINT32 nStatus) +{ + ic0fbTRACE; + if (device().db().write("status", nStatus, ic0fbDb::DbDataPt) == FAILURE) { + ic0fbFAILURE("Error updating 'status' %d to database", nStatus); + return FAILURE; + } + return SUCCESS; +} + +ccsCOMPL_STAT sxiafcDevDrvAfc::updateDbMode() +{ + ic0fbTRACE; + string dbAttr = "mode"; + string mode = m_parMode.getValAsString(); + if (device().db().write(dbAttr, mode, ic0fbDb::DbDataPt) == FAILURE) { + ic0fbFAILURE("Error updating 'mode' %s to database", mode.c_str()); + return FAILURE; + } + return SUCCESS; +} + +ccsCOMPL_STAT sxiafcDevDrvAfc::updateDbCurPos() +{ + ic0fbTRACE; + stringstream dbAttr; + + for (int j=0; j < 2; j++) + { + strstreamReset(dbAttr); + dbAttr << "curpos" << j+1; + ic0fbLOG4("Updating '%s' = %lf to database", dbAttr.str().c_str(), m_curPos[j]); + if (device().db().write(dbAttr.str(), m_curPos[j], ic0fbDb::DbDataPt) == FAILURE) + { + ic0fbFAILURE("Updating '%s' = %lf to database", dbAttr.str().c_str(), m_curPos[j]); + return FAILURE; + } + } + return SUCCESS; +} + +ccsCOMPL_STAT sxiafcDevDrvAfc::updateDbSetPos() +{ + ic0fbTRACE; + stringstream dbAttr; + + for (int j=0; j < 2; j++) + { + strstreamReset(dbAttr); + dbAttr << "setpos" << j+1; + ic0fbLOG4("Updating '%s' = %lf to database", dbAttr.str().c_str(), m_setPos[j]); + if (device().db().write(dbAttr.str(), m_setPos[j], ic0fbDb::DbDataPt) == FAILURE) + { + ic0fbFAILURE("Updating '%s' = %lf to database", dbAttr.str().c_str(), m_setPos[j]); + return FAILURE; + } + } + return SUCCESS; +} + +bool sxiafcDevDrvAfc::isSerialInit() +{ + // check on initialization of serial interface + ic0fbParameter initPar; + + // before read anything from comInterface, sleep + ic0fbUtils::sleep(comDelay); + + // read + if (comInterface().read(dev.StatInitialised.c_str(), initPar) == FAILURE) + { + ic0fbFAILURE("Failed reading initialisation flag"); + } + + ic0fbLOG2("isSerialInit(): %s", initPar.booleanValue() ? "TRUE" : "FALSE"); + return initPar.booleanValue(); +} + +ccsCOMPL_STAT sxiafcDevDrvAfc::initSerial( + ) +{ + ic0fbTRACE; + ic0fbPars_t pars; + stringstream strStrmCmd; + string strAns; + + // At FB level: + // ctrl.nCommand = 1 + // ctrl.bExecute = True + pars.clear(); + pars.push_back(ic0fbParameter(dev.CtrlCommand, ctrlCmd.Init)); + pars.push_back(ic0fbParameter(dev.CtrlExecute, (vltLOGICAL) TRUE)); + + // write to PLC + ic0fbLOG2("Init serial comm between PLC and E-727"); + if (comInterface().write(pars) == FAILURE) + { + ic0fbFAILURE("Error writing EXEC and INIT cmd to serial interface"); + return FAILURE; + } + + // give time the PLC to inizialise HW IF before sending next command + ic0fbUtils::sleep(iniDelay); + + // ERR? + if(checkError() == SUCCESS) + ic0fbLOG2("initSerial(): done"); + + return SUCCESS; +} + +ccsCOMPL_STAT sxiafcDevDrvAfc::activateServoMode() +{ + ic0fbTRACE; + ccsCOMPL_STAT opStatus = SUCCESS; + stringstream strStrmCmd; + + ic0fbLOG2("activating the servo mode"); + + // send "SVO 1 1 2 1" command + strstreamReset(strStrmCmd); + strStrmCmd << gcsCmd.svo << space; + strStrmCmd << axis1ID << space << 1 << space; + strStrmCmd << axis2ID << space << 1 << lineFeed; + if (writeCommand(strStrmCmd) == FAILURE) + { + opStatus = FAILURE; + ic0fbFAILURE("Error writing command %s to device", strStrmCmd.str().c_str()); + } + + // ERR? + if(checkError() == SUCCESS) + ic0fbLOG2("activateServoMode(): done"); + + return opStatus; +} + +/* + * PURPOSE : Initialising HW controller + * RETURNS : ccsCOMPL_STAT - + * NOTES : + */ +ccsCOMPL_STAT sxiafcDevDrvAfc::zeroPointAdjustment( + ) +{ + ic0fbTRACE; + ccsCOMPL_STAT opStatus = SUCCESS; + stringstream strStrmCmd; + + ic0fbLOG2("Launching ATZ (automatic zero-point adjustment)"); + + // send "ATZ 1 NaN 2 NaN" command + strstreamReset(strStrmCmd); + strStrmCmd << gcsCmd.autoZero << space + << axis1ID << space << nanValue << space + << axis2ID << space << nanValue << lineFeed; + if (writeCommand(strStrmCmd) == FAILURE) + { + opStatus = FAILURE; + ic0fbFAILURE("Error writing command %s to device", strStrmCmd.str().c_str()); + } + else + { + // ATZ takes 2-3 seconds, let's wait for completion + ic0fbLOG2("Wait for ATZ completion"); + ic0fbUtils::sleep(atzDelay); + } + + // ERR? + opStatus = checkError(); + + return opStatus; +} + +/* + * PURPOSE : Check for motor initialisation by sending specific commands + * PARAMS : - + * RETURNS : ccsCOMPL_STAT - + * NOTES : + */ +ccsCOMPL_STAT sxiafcDevDrvAfc::checkZeroPointAdjustment() +{ + ic0fbTRACE; + stringstream strStrmCmd; + string strAnswer = ""; + string strAtzSuccess = "=1"; + std::size_t pos; + int axis = 0; + ccsCOMPL_STAT opStatus = SUCCESS; + + // check if auto zero procedure succeeded + // send "ATZ? 1" to check for auto zero procedure of axis 1 + // send "ATZ? 2" to check for auto zero procedure of axis 2 + // "ATZ? n" response is "n= LF" with uint=1 successful, uint=0 failure + // 1=1 --> ok + // 2=1 --> ok + + for (axis=1; axis<3; axis++) + { + // write the command + ic0fbLOG2("Checking for ATZ on axis %d", axis); + strstreamReset(strStrmCmd); + strStrmCmd << gcsCmd.autoZero << "?" << space << axis << lineFeed; + if (writeCommand(strStrmCmd) == FAILURE) + { + opStatus = FAILURE; + ic0fbFAILURE("Error writing command %s to device", strStrmCmd.str().c_str()); + } + else + { + // read the reply + strAnswer = readAnswer(); + ic0fbLOG2("ATZ reply=|%s|", strAnswer.c_str()); + // parse the reply + pos = strAnswer.find("="); // position of "=" + if (pos == string::npos) + { + // this should not happen + opStatus = FAILURE; + ic0fbLOG2("ATZ: unexpected reply %s", strAnswer); + } + else + { + strAnswer = strAnswer.substr(pos); + if (strAnswer == strAtzSuccess) + { + ic0fbLOG2("ATZ succeeded for axis %d", axis); + } + else + { + opStatus = FAILURE; + ic0fbLOG2("ATZ FAILED for axis %d", axis); + } + } + // ERR? + checkError(); + } + } + + return opStatus; +} + + +double sxiafcDevDrvAfc::stringToDouble(const string& s) { + +// TBD (stringToDouble) - add checks etc, do this method more robust + + stringstream ss; + double val; + strstreamReset(ss); + ss << s; + ss >> val; + return val; +} + + +ccsCOMPL_STAT sxiafcDevDrvAfc::offUser( + ic0fbRequestHandle& request +) +{ + ic0fbTRACE; + ic0fbPars_t pars; + + ic0fbLOG2("offUser()"); + + // At FB level: + // ctrl.bInitialised = False + pars.clear(); + pars.push_back(ic0fbParameter(dev.StatErrorCode, 0)); + pars.push_back(ic0fbParameter(dev.StatInitialised, (vltLOGICAL) FALSE)); + pars.push_back(ic0fbParameter(dev.StatStatus, status.Off)); + pars.push_back(ic0fbParameter(dev.CtrlCommand, ctrlCmd.None)); + pars.push_back(ic0fbParameter(dev.CtrlExecute, (vltLOGICAL) FALSE)); + + // write to PLC + ic0fbUtils::sleep(comDelay); + if (comInterface().write(pars) == FAILURE) + { + ic0fbFAILURE("Error writing EXEC and INIT cmd to serial interface"); + return FAILURE; + } + + // check + isSerialInit(); + + return SUCCESS; +} + + +ccsCOMPL_STAT sxiafcDevDrvAfc::offStatusUser( + ic0fbRequestHandle& request +) +{ + ic0fbTRACE; + ic0fbLOG4("offStatusUser()"); + request.status(ic0fbRequestHandle::ReqStatCompleted); + return SUCCESS; +} + +ccsCOMPL_STAT sxiafcDevDrvAfc::checkError() +{ + stringstream strStrmCmd; + string strAns; + ccsCOMPL_STAT opStatus = SUCCESS; + + // check for errors by sending the command "ERR?" + strstreamReset(strStrmCmd); + strStrmCmd << gcsCmd.error << lineFeed; + if (writeCommand(strStrmCmd) == FAILURE) + { + opStatus = FAILURE; + ic0fbFAILURE("Error seding ERR? command to device"); + } + else + { + strAns = readAnswer(); + if (strAns != "0") + { + opStatus = FAILURE; + ic0fbFAILURE("Error reported from device controller: code |%s|", + strAns.c_str()); + } + } + return opStatus; +} + + +// EOF diff --git a/ICS/sxiafc/src/sxiafcDevDrvSimAfc.C b/ICS/sxiafc/src/sxiafcDevDrvSimAfc.C new file mode 100644 index 0000000..b955a7e --- /dev/null +++ b/ICS/sxiafc/src/sxiafcDevDrvSimAfc.C @@ -0,0 +1,281 @@ +//////////////////////////////////////////////////////////////////////////////// +// ESO - VLT Project +// +// "@(#) $Id: sxiafcDevDrvSimAfc.C 355636 2022-04-27 15:06:40Z bsalasni $" +// +// Who When What +// -------- ---------- ------------------------------------------------------- +// bsalasni 2022-03-15 Reviewed +// mdepasca 2020 Updated from template +// jknudstr 2009-11-30 Created +//------------------------------------------------------------------------------ + +//////////////////////////////////////////////////////////////////////////////// +// NAME +// UPDATE: sxiafcDevDrvSimAfc - Template for IC0FB Device Drivers. +//------------------------------------------------------------------------------ + +#define _POSIX_SOURCE 1 +#include "vltPort.h" + +ATTRIBUTE_UNUSED static const char* rcsId="@(#) $Id: sxiafcDevDrvSimAfc.C 355636 2022-04-27 15:06:40Z bsalasni $"; + +#include +#include + +#include "ic0fbDriverInfo.h" +#include "sxiafcDevDrvSimAfc.h" + +sxiafcDevDrvSimAfc::sxiafcDevDrvSimAfc() +{ + ic0fbTRACE; + className_(this); + setDeviceType("sxiafcDevDrvAfc"); + m_strPos1 = "12.34"; + m_strPos2 = "56.78"; +} + +sxiafcDevDrvSimAfc::~sxiafcDevDrvSimAfc() +{ + ic0fbTRACE; +} + +ccsCOMPL_STAT sxiafcDevDrvSimAfc::initialiseDeviceUser() +{ + ic0fbTRACE; + ic0fbLOG2("initialiseDeviceUser()"); + + // Create the namespace and parse the fbmap file + if (createNameSpace() == FAILURE) + { + ic0fbLOG1("Error creating name space"); + } + + // Firmware information and default values + map firmwareInfo; + firmwareInfo[ic0fbDevice::DevInfoName] = className(); + firmwareInfo[ic0fbDevice::DevInfoPlatform] = ic0fbUtils::platform(); + firmwareInfo[ic0fbDevice::DevInfoVersionMajor] = "1"; + firmwareInfo[ic0fbDevice::DevInfoVersionMinor] = "0"; + firmwareInfo[ic0fbDevice::DevInfoDate] = ic0fbUtils::getDateFromScmId(rcsId); + firmwareInfo[ic0fbDevice::DevInfoSynopsis] = "Device driver simulator for AFC"; + firmwareInfo[ic0fbDevice::DevInfoDescription] = "Device driver simulator for Adaptive Flexure Compensator"; + if(addFirmwareInfo(firmwareInfo) == FAILURE) + { + ic0fbLOG1("Error adding firmware information"); + return FAILURE; + } + + // Define default values/types for parameters + ic0fbLOG2("Set default values of simulated parameters"); + setParameter(dev.CtrlCommand, 0); // ctrl.nCommand=0 + setParameter(dev.CtrlCommandText, ""); // ctrl.sCommand="" + setParameter(dev.CtrlExecute, (vltLOGICAL)FALSE); // ctrl.bExecute=false + setParameter(dev.StatStatusText, ""); // stat.sStatus="" + setParameter(dev.StatCommandReplyText, ""); // stat.sReply="" + setParameter(dev.StatErrorCode, 0); // stat.nErrorCode=0 + setParameter(dev.StatErrorCodeText, ""); // stat.sErrorText="" + setParameter(dev.StatStatus, 0); // stat.nStatus=0 + setParameter(dev.StatInitialised, (vltLOGICAL)FALSE); // stat.bInitialised=false + + return SUCCESS; +} + +ccsCOMPL_STAT sxiafcDevDrvSimAfc::readUser( + ic0fbList& parNames, + ic0fbPars_t& parameters +) +{ + ic0fbTRACE; + ic0fbLOG2("readUser()"); + + // push back the found parameters + ic0fbList::iterator nameIt; + ic0fbParameter* nextPar; + for (nameIt = parNames.begin(); nameIt != parNames.end(); nameIt++) + { + if (hasParameter(*nameIt)) + { + if (getParameter(*nameIt, &nextPar) == FAILURE) + { + ic0fbFAILURE("Error retrieving parameter: %s", nameIt->c_str()); + } + ic0fbLOG2("Found parameter: %s/%s. Type: %s. Value: |%s|", + nextPar->internalName().c_str(), + nextPar->address().c_str(), + ic0fbParameter::typeToString(nextPar->type()).c_str(), + nextPar->getValAsString().c_str()); + parameters.push_back(*nextPar); + } + else + { + ic0fbFAILURE("Unknown parameter requested: %s", (*nameIt).c_str()) + } + } + + return SUCCESS; +} + + +ccsCOMPL_STAT sxiafcDevDrvSimAfc::writeUser( + ic0fbPars_t& parameters +) +{ + ic0fbTRACE; + + ic0fbLOG2("writeUser - received %d parameters", parameters.size()); + for (ic0fbParsIt_t parIt = parameters.begin(); parIt != parameters.end(); parIt++) { + ic0fbLOG4("writeUser - parameter: %s | %s | %s", + parIt->internalName().c_str(), + parIt->address().c_str(), + parIt->getValAsString().c_str()); + } + + // update the parameter in the namespace + if (ic0fbDevDrvSimBase::writeUser(parameters) == FAILURE) + { + ic0fbFAILURE("Error writing to device"); + } + + ic0fbParameter par; + if (ic0fbParameter::seek(dev.CtrlExecute, parameters, par)) + { + m_cmdState.bExec = par.booleanValue(); + } + if (ic0fbParameter::seek(dev.CtrlCommand, parameters, par)) + { + m_cmdState.nCmd = par.integerValue(); + } + if (ic0fbParameter::seek(dev.CtrlCommandText, parameters, par)) + { + m_cmdState.sCmd = par.getValAsString(); + } + + // handle the command only when execute is received + if (m_cmdState.bExec) // ctrl.Execute == true + { + if (m_cmdState.nCmd == m_ctrlCmd.Init) // ctrl.nCommand == 1 + { + ic0fbLOG2("Handling INIT SERIAL"); + // stat.bInitialised = 1 + // stat.nStatus = 3 + setParameter(dev.StatInitialised, (vltLOGICAL)TRUE); + setParameter(dev.StatStatus, status.Off); + } + else if (m_cmdState.nCmd == m_ctrlCmd.Write) // ctrl.nCommand == 2 + { + ic0fbLOG2("Simulating GCS command %s", m_cmdState.sCmd.c_str()); + // ctrl.sCommand --> stat.sReply + // "ERR?" "0" + // "POS? 1" "1=12.34" + // "POS? 2" "2=56.78" + // "ATZ? 1" "1=1" + // "ATZ? 2" "2=1" + // (char)0x05 "0" + if(m_cmdState.sCmd.rfind("ERR?", 0) == 0) + { + setParameter(dev.StatCommandReplyText, "0"); + } + else if(m_cmdState.sCmd.rfind("POS? 1", 0) == 0) + { + setParameter(dev.StatCommandReplyText, "1=" + m_strPos1); + } + else if(m_cmdState.sCmd.rfind("POS? 2", 0) == 0) + { + setParameter(dev.StatCommandReplyText, "2=" + m_strPos2); + } + else if(m_cmdState.sCmd.rfind("ATZ? 1", 0) == 0) + { + setParameter(dev.StatCommandReplyText, "1=1"); + } + else if(m_cmdState.sCmd.rfind("ATZ? 2", 0) == 0) + { + setParameter(dev.StatCommandReplyText, "2=1"); + } + // (char)0x05 + else if(m_cmdState.sCmd.rfind(gcsCmd.checkMotion, 0) == 0) + { + setParameter(dev.StatCommandReplyText, "0"); + } + // all commands which do not foresee a reply + else if(m_cmdState.sCmd.rfind('?') == std::string::npos) + { + // parse the MOV case to get the passed POS1 and POS2 values + parseCmdMov(m_cmdState.sCmd); + + // in any case for all these commands the reply is empty + setParameter(dev.StatCommandReplyText, ""); + } + } + else + { + ic0fbFAILURE("%s: Illegal Control Command Code: %d", + device().alias().c_str(), m_cmdState.nCmd); + } + + // reset + m_cmdState.bExec = false; + m_cmdState.nCmd = 0; + m_cmdState.sCmd = ""; + } + + + return SUCCESS; +} + +ccsCOMPL_STAT sxiafcDevDrvSimAfc::parseCmdMov(const string& str) +{ + // The received command can be: + // MOV 1 12.34 2 56.78 + // MOV 1 12.34 + // MOV 2 56.78 + // Parse the input string to extract 12.34 and/or 56.78 + + bool bNextIsPos1 = false; + bool bParsedPos1 = false; + bool bNextIsPos2 = false; + bool bParsedPos2 = false; + + if (str.find("MOV") != std::string::npos) + { + // MOV found + string token; + std::istringstream iss(str); + while (iss >> token) + { + ic0fbLOG4("|%s|", token.c_str()); + + if (token == "1" && bParsedPos1 == false) + { + bNextIsPos1 = true; + bParsedPos1 = true; + } + else if (bNextIsPos1) + { + bNextIsPos1 = false; + m_strPos1 = token; + } + else if (token == "2" && bParsedPos2 == false) + { + bNextIsPos2 = true; + bParsedPos2 = true; + } + else if (bNextIsPos2) + { + bNextIsPos2 = false; + m_strPos2 = token; + } + } + ic0fbLOG4("POS1=|%s| POS2=|%s|", + m_strPos1.c_str(), + m_strPos2.c_str()); + } + + return SUCCESS; +} +// EOF + + + + + diff --git a/ICS/sxiafc/src/sxiafcDevSimAfc.C b/ICS/sxiafc/src/sxiafcDevSimAfc.C new file mode 100644 index 0000000..83ed3a3 --- /dev/null +++ b/ICS/sxiafc/src/sxiafcDevSimAfc.C @@ -0,0 +1,40 @@ +//////////////////////////////////////////////////////////////////////////////// +// ESO - VLT Project +// +// "@(#) $Id: sxiafcDevSimAfc.C 354074 2022-03-25 18:53:27Z bsalasni $" +// +// Who When What +// -------- ---------- ------------------------------------------------------- +// jknudstr 2009-11-30 Created +// UPDATE UPDATE Updated from template +//------------------------------------------------------------------------------ + +//////////////////////////////////////////////////////////////////////////////// +// NAME +// UPDATE: sxiafcDevSimAfc - Template for IC0FB an Device Simulator +// Process. +//------------------------------------------------------------------------------ + +#define _POSIX_SOURCE 1 +#include "vltPort.h" + +ATTRIBUTE_UNUSED static const char* rcsId="@(#) $Id: sxiafcDevSimAfc.C 354074 2022-03-25 18:53:27Z bsalasni $"; +#include "ic0fbDevSimBase.h" +#include "sxiafcDevDrvSimAfc.h" + + +/// @brief UPDATE: Write specific documentation here. +/// +/// UPDATE: Write specific documentation here. + + +// Main function. +int main(int argc, + char* argv[]) +{ + ic0fbLOG1("*** Executing AFC simulator ***"); + ic0fbEXECUTE_DEV_SIM("Afc", sxiafcDevDrvSimAfc); +} + + +// EOF diff --git a/ICS/sxiafc/src/sxiafcDevSrvAfc.C b/ICS/sxiafc/src/sxiafcDevSrvAfc.C new file mode 100644 index 0000000..9012cd4 --- /dev/null +++ b/ICS/sxiafc/src/sxiafcDevSrvAfc.C @@ -0,0 +1,40 @@ +//////////////////////////////////////////////////////////////////////////////// +// ESO - VLT Project +// +// "@(#) $Id: sxiafcDevSrvAfc.C 353934 2022-03-23 11:55:40Z dricci $" +// +// Who When What +// -------- ---------- ------------------------------------------------------- +// jknudstr 2009-11-09 Created +// UPDATE UPDATE Updated from template +//------------------------------------------------------------------------------ + +//////////////////////////////////////////////////////////////////////////////// +// NAME +// UPDATE: sxiafcDevSrvAfc - Template for IC0FB Device Servers. +//------------------------------------------------------------------------------ + +#define _POSIX_SOURCE 1 +#include "vltPort.h" + +ATTRIBUTE_UNUSED static const char* rcsId="@(#) $Id: sxiafcDevSrvAfc.C 353934 2022-03-23 11:55:40Z dricci $"; + +#include "ic0fbDevSrv.h" +#include "sxiafcDevDrvAfc.h" +#include "ic0fbIfCcs.h" +#include "ic0fboIfOpcUa.h" + +// Instantiate, initialise and run the Device Server with the +// Device Driver and the Communication Interfaces. +int main(int argc, + char* argv[]) +{ + ic0fbEXECUTE_DEVICE_SERVER(ic0fbDevSrv, + sxiafcDevDrvAfc, + ic0fboIfOpcUa, + ic0fbIfCcs); +} + + +// EOF + diff --git a/ICS/sxinise/ChangeLog b/ICS/sxinise/ChangeLog new file mode 100644 index 0000000..a6bf091 --- /dev/null +++ b/ICS/sxinise/ChangeLog @@ -0,0 +1 @@ +"@(#) $Id$" diff --git a/ICS/sxinise/config/sxinise_TwinCAT.fbmap b/ICS/sxinise/config/sxinise_TwinCAT.fbmap new file mode 100644 index 0000000..8893feb --- /dev/null +++ b/ICS/sxinise/config/sxinise_TwinCAT.fbmap @@ -0,0 +1,63 @@ +#******************************************************************************* +# ESO - VLT Project +# +# "@(#) $Id: sxinise_Beckhoff.fbmap,v 0.56 2019/01/17 12:06:33 vltsccm Exp $" +# +# who when what +# -------- ---------- ------------------------------------------------------- +# mdepasca 2019-10-02 Changed mappings for text input and output signals +# abaruffo 2019-01-17 Created +# +#******************************************************************************* +# SOXS NISE Special Device Name Mapping File. +#******************************************************************************* + +################################################################################ +# Firmware Info Mapping: +#------------------------------------------------------------------------------- +InfoDate: info.sVerDate +InfoDescription: info.sDescription +InfoName: info.sName +InfoPlatform: info.sPlatform +InfoSynopsis: info.sSynopsis +InfoVersionMajor: info.sVersionMajor +InfoVersionMinor: info.sVersionMinor +#------------------------------------------------------------------------------- + +################################################################################ +# General Configuration Parameters: +#------------------------------------------------------------------------------- +# None. +#------------------------------------------------------------------------------- + +################################################################################ +# General Control Parameters: +#------------------------------------------------------------------------------- +CtrlCommand: ctrl.nCommand +CtrlExecute: ctrl.bExecute +#------------------------------------------------------------------------------- + +################################################################################ +# General Status Parameters: +#------------------------------------------------------------------------------- +StatErrorCode: stat.nErrorCode +StatErrorText: stat.sErrorText +StatInitialised: stat.bInitialised +StatStatus: stat.nStatus +StatStatusText: stat.sStatus +#------------------------------------------------------------------------------- + +#------------------------------------------------------------------------------- +# Text Input Signals: +#------------------------------------------------------------------------------- +StatTextIn0: stat.sReply +#------------------------------------------------------------------------------- + +#------------------------------------------------------------------------------- +# Text Output Signals: +#------------------------------------------------------------------------------- +CtrlTextOut0: ctrl.sCommand +#------------------------------------------------------------------------------- + +# EOF + diff --git a/ICS/sxinise/dbl/sxiniseFB_NISE.class b/ICS/sxinise/dbl/sxiniseFB_NISE.class new file mode 100644 index 0000000..0f68193 --- /dev/null +++ b/ICS/sxinise/dbl/sxiniseFB_NISE.class @@ -0,0 +1,40 @@ +//****************************************************************************** +// ESO - VLT Project +// +// "@(#) $Id: sxiniseFB_NISE.class 329908 2020-02-03 09:50:26Z mdepasca $" +// +// who when what +// -------- ---------- -------------------------------------------------------- +// mdepasca 2020-02-03 Modified status0 to store string value +// mdepasca 2019-04-18 Created +// + +//****************************************************************************** +// NAME +// sxinise - NISE Control Device +//------------------------------------------------------------------------------ + +#ifndef SXI_FB_NISE_CLASS +#define SXI_FB_NISE_CLASS + +#include "ic0fbDevice.class" + +CLASS NULL_CLASS sxiniseData +BEGIN + Residence RAM + + ATTRIBUTE double pos + ATTRIBUTE int32 status + // status0 to store named position + ATTRIBUTE bytes20 status0 +END + +CLASS ic0fbDevice sxiniseFB_NISE +BEGIN + Residence RAM + ATTRIBUTE sxiniseData DATA +END + + + +#endif // !SXI_FB_NISE_CLASS diff --git a/ICS/sxinise/dbl/sxiniseNISE.class b/ICS/sxinise/dbl/sxiniseNISE.class new file mode 100644 index 0000000..de255d6 --- /dev/null +++ b/ICS/sxinise/dbl/sxiniseNISE.class @@ -0,0 +1,40 @@ +//****************************************************************************** +// ESO - VLT Project +// +// "@(#) $Id: sxiniseNISE.class 329908 2020-02-03 09:50:26Z mdepasca $" +// +// who when what +// -------- ---------- -------------------------------------------------------- +// mdepasca 2020-02-03 Modified status0 to store string value +// mdepasca 2019-04-18 Created +// + +//****************************************************************************** +// NAME +// sxinise - NISE Control Device +//------------------------------------------------------------------------------ + +#ifndef SXI_NISE_CLASS +#define SXI_NISE_CLASS + +#include "ic0fbDevice.class" +//#include "sxiniseFB_NISE.class" + +CLASS ic0fbDevice sxiniseNISE +BEGIN + Residence RAM + + // handset required by icb + ATTRIBUTE logical handset 0 + ATTRIBUTE double pos + + ATTRIBUTE int32 status + // status0 to store named position + ATTRIBUTE bytes20 status0 +END + +#endif // !SXI_NISE_CLASS + + + + diff --git a/ICS/sxinise/doc/sxiniseDevDrvNise.doc b/ICS/sxinise/doc/sxiniseDevDrvNise.doc new file mode 100644 index 0000000000000000000000000000000000000000..f94a300ceb5c03a33470471ceff396b6fbca29fa GIT binary patch literal 64512 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

V2j%g}_g_R2p?K4Rg_9v>hh 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 +#include +/// +/// Device Driver for UPDATE. +class sxiniseDevDrvNise: public ic0fbiDevDrvBase +{ + public: + static const string DevCtrlCommand; + static const string DevCtrlExecute; + static const string DevCtrlTextOut0; + static const string DevCfgTimeoutInit; + + static const vltINT32 CtrlCmdNone; + static const vltINT32 CtrlCmdInit; + static const vltINT32 CtrlCmdWrite; + static const vltINT32 CtrlCmdPowerOn; + static const vltINT32 CtrlCmdPowerOff; + + static const string ParPosition; + static const string ParPosName; + + // Device control parameters (Internal Names) + + // Device status parameters (Internal Names) + static const string DevStatPosName; + static const string DevStatPosition; + static const string DevStatInitialised; + static const string DevStatErrorText; + static const string DevStatStatus; + + // Device status (numerical) + static const vltINT32 StatusOff; + static const vltINT32 StatusIdle; + static const vltINT32 StatusError; + static const vltINT32 StatusBusy; + static const vltINT32 StatusMoving; + static const vltINT32 StatusFailed; + + // Device status (string representation) + static const string StatusOffStr; + static const string StatusIdleStr; + static const string StatusErrorStr; + static const string StatusBusyStr; + static const string StatusMovingStr; + static const string StatusFailedStr; + + // HW device status bit maks + static const bitset<8> ERR_MASK; + static const bitset<8> ACC_MASK; + static const bitset<8> CONST_MASK; + static const bitset<8> DEC_MASK; + static const bitset<8> STOP_MASK; + static const bitset<8> PROG_MASK; + static const bitset<8> PLS_MASK; + static const bitset<8> NLS_MASK; + + + /// @brief Constructor. + /// + /// UPDATE: Write specific documentation here. + sxiniseDevDrvNise(); + + /// @brief Destructor. + /// + /// UPDATE: Write specific documentation here. + ~sxiniseDevDrvNise(); + + ic0fbiIoMgr& ioMgr(); + + //////////////////////////////////////////////////////////////////////////// + // Methods implementing the specific logic of the Device Driver: + //////////////////////////////////////////////////////////////////////////// + + /// @brief Specific implementation of the device initialisation operation. + /// @param[in] request Request handle object. + /// + /// UPDATE: Write specific documentation here. + /// + /// See also ic0fbDevDrvBase::initialiseDevice(). + virtual ccsCOMPL_STAT initialiseDeviceUser(ic0fbRequestHandle& request); + + /// @brief Specific implementation of the Device Driver Control Loop. + /// @param[in] request Request object. + /// + /// UPDATE: Write specific documentation here. + /// + /// See also ic0fbDevDrvBase.controlLoop(). + virtual ccsCOMPL_STAT controlLoopUser(ic0fbRequestHandle& request); + + /// @brief Specific implementation of the Control Loop, request status. + /// @param[in] request Request object. + /// + /// UPDATE: Write specific documentation here. + /// + /// See also ic0fbDevDrvBase::controlLoopUser(). + // virtual ccsCOMPL_STAT controlLoopStatusUser(ic0fbRequestHandle& request); + + /// @brief Specific implementation of the device disable operation. + /// @param[in] request Request handle object. + /// + /// UPDATE: Write specific documentation here. + /// + /// See also ic0fbDevDrvBase::disable(). + virtual ccsCOMPL_STAT disableUser(ic0fbRequestHandle& request); + + /// @brief Specific implementation of the disable operation, request status. + /// @param[in] request Request handle object. + /// + /// UPDATE: Write specific documentation here. + /// + /// See also sxiniseDevDrvNise::disableStatus(). + virtual ccsCOMPL_STAT disableStatusUser(ic0fbRequestHandle& request); + + /// @brief Specific implementation of the device enable operation. + /// @param[in] request Request handle object. + /// + /// UPDATE: Write specific documentation here. + /// + /// See also ic0fbDevDrvBase::enable(). + virtual ccsCOMPL_STAT enableUser(ic0fbRequestHandle& request); + + /// @brief Specific implementation of the enable operation, request status. + /// @param[in] request Request handle object. + /// + /// UPDATE: Write specific documentation here. + /// + /// See also ic0fbDevDrvBase::enableStatus(). + virtual ccsCOMPL_STAT enableStatusUser(ic0fbRequestHandle& request); + + /// @brief Specific implementation of the device exit operation. + /// @param[in] request Request handle object. + /// + /// UPDATE: Write specific documentation here. + /// + /// See also ic0fbDevDrvBase::exit(). + virtual ccsCOMPL_STAT exitUser(ic0fbRequestHandle& request); + + /// @brief Specific implementation of the exit operation, request status. + /// @param[in] request Request handle object. + /// + /// UPDATE: Write specific documentation here. + /// + /// See also ic0fbDevDrvBase::exitStatus(). + virtual ccsCOMPL_STAT exitStatusUser(ic0fbRequestHandle& request); + + /// @brief Specific implementation of the device offline operation. + /// @param[in] request Request handle object. + /// + /// UPDATE: Write specific documentation here. + /// + /// See also ic0fbDevDrvbase::off(). + virtual ccsCOMPL_STAT offUser(ic0fbRequestHandle& request); + + /// @brief Specific implementation of the offline operation, request status. + /// @param[in] request Request handle object. + /// + /// UPDATE: Write specific documentation here. + /// + /// See also ic0fbDevDrvBase::offStatus(). + virtual ccsCOMPL_STAT offStatusUser(ic0fbRequestHandle& request); + + /// @brief Specific implementation of the device online operation. + /// @param[in] request Request handle object. + /// + /// UPDATE: Write specific documentation here. + /// + /// See also ic0fbDevDrvBase::online(). + virtual ccsCOMPL_STAT onlineUser(ic0fbRequestHandle& request); + + /// @brief Specific implementation of the online operation, request status. + /// @param[in] request Request handle object. + /// + /// UPDATE: Write specific documentation here. + /// + /// See also ic0fbDevDrvBase::onlineStatus(). + virtual ccsCOMPL_STAT onlineStatusUser(ic0fbRequestHandle& request); + + /// @brief Specific implementation of the device read operation. + /// @param[in] request Request handle object. + /// + /// UPDATE: Write specific documentation here. + /// + /// See also ic0fbDevDrvBase::read(). + virtual ccsCOMPL_STAT readUser(ic0fbRequestHandle& request); + + /// @brief Specific implementation of the read operation, request status. + /// @param[in] request Request handle object. + /// + /// UPDATE: Write specific documentation here. + /// + /// See also ic0fbDevDrvBase::readStatus(). + virtual ccsCOMPL_STAT readStatusUser(ic0fbRequestHandle& request); + + /// @brief Specific implementation of the device scan operation. + /// @param[in] request Request handle object. + /// + /// UPDATE: Write specific documentation here. + /// + /// See also ic0fbDevDrvBase::scan(). + virtual ccsCOMPL_STAT scanUser(ic0fbRequestHandle& request); + + /// @brief Specific implementation of the scan operation, request status. + /// @param[in] request Request handle object. + /// + /// UPDATE: Write specific documentation here. + /// + /// See also ic0fbDevDrvBase::scanStatus(). + virtual ccsCOMPL_STAT scanStatusUser(ic0fbRequestHandle& request); + + /// @brief Specific implementation of the device setup operation. + /// @param[in] request Request handle object. + /// + /// UPDATE: Write specific documentation here. + /// + /// See also ic0fbDevDrvBase::setup(). + virtual ccsCOMPL_STAT setupUser(ic0fbRequestHandle& request); + + /// @brief Specific implementation of the setup operation, request status. + /// @param[in] request Request handle object. + /// + /// UPDATE: Write specific documentation here. + /// + /// See also ic0fbDevDrvBase::setupStatus(). + virtual ccsCOMPL_STAT setupStatusUser(ic0fbRequestHandle& request); + + /// @brief Specific implementation of the device standby operation. + /// @param[in] request Request handle object. + /// + /// UPDATE: Write specific documentation here. + /// + /// See also ic0fbDevDrvBase::standby(). + virtual ccsCOMPL_STAT standbyUser(ic0fbRequestHandle& request); + + /// @brief Specific implementation of the standby operation, request status. + /// @param[in] request Request handle object. + /// + /// UPDATE: Write specific documentation here. + /// + /// See also ic0fbDevDrvBase::standbyStatus(). + virtual ccsCOMPL_STAT standbyStatusUser(ic0fbRequestHandle& request); + + /// @brief Specific implementation of the device status operation. + /// @param[in] request Request handle object. + /// + /// UPDATE: Write specific documentation here. + /// + /// See also ic0fbDevDrvBase::status(). + virtual ccsCOMPL_STAT statusUser(ic0fbRequestHandle& request); + + /// @brief Specific implementation of the status operation, request status. + /// @param[in] request Request handle object. + /// + /// UPDATE: Write specific documentation here. + /// + /// See also ic0fbDevDrvBase::statusStatus(). + virtual ccsCOMPL_STAT statusStatusUser(ic0fbRequestHandle& request); + + /// @brief Specific implementation of the device stop operation. + /// @param[in] request Request handle object. + /// + /// UPDATE: Write specific documentation here. + /// + /// See also ic0fbDevDrvBase::stop(). + virtual ccsCOMPL_STAT stopUser(ic0fbRequestHandle& request); + + /// @brief Specific implementation of the stop operation, request status. + /// @param[in] request Request handle object. + /// + /// UPDATE: Write specific documentation here. + /// + /// See also ic0fbDevDrvBase::stopStatus(). + virtual ccsCOMPL_STAT stopStatusUser(ic0fbRequestHandle& request); + + /// @brief Specific implementation of the device write operation. + /// @param[in] request Request handle object. + /// + /// Write one or more parameters plus associated values to the device. + /// + /// UPDATE: Write specific documentation here. + /// + /// See also ic0fbDevDrvBase::write(). + virtual ccsCOMPL_STAT writeUser(ic0fbRequestHandle& request); + + /// @brief Specific implementation of the write operation, request status. + /// @param[in] request Request handle object. + /// + /// UPDATE: Write specific documentation here. + /// + /// See also ic0fbDevDrvBase::writeStatus(). + virtual ccsCOMPL_STAT writeStatusUser(ic0fbRequestHandle& request); + /////////////////////////////////////////////////////////////////////////// + + protected: + + private: + ic0fbiIoMgr m_ioMgr; + + ic0fbiMotPosTable *m_devicePosTable; + string m_currentNamedPos; + + vltLOGICAL m_devDrvIsInit; + vltLOGICAL m_devIsSim; + vltLOGICAL m_devHWIsInit; + vltLOGICAL m_devHWIsStopped; + static const string m_cmdPrefix; + static const string m_cmdSuffix; + static const double m_absSoftLS; + + ////////////////////////////// + // Configuration parameters // + ////////////////////////////// + vltINT32 m_cfgTimeoutInit; + + + + ///////////////////// + // utility methods // + ///////////////////// + ccsCOMPL_STAT checkForErrors(ic0fbPars_t& _rawPars); + ccsCOMPL_STAT clearErrorBuffer(); + ccsCOMPL_STAT checkDevStatus(ic0fbParameter& _statusPar); + ccsCOMPL_STAT checkHWStatus(const bitset<8>& _chk_mask=bitset<8>(255)); + ccsCOMPL_STAT writeCommandString(const string& _cmdStr); + ccsCOMPL_STAT readAnswer(ic0fbPars_t& _rawPars); + ccsCOMPL_STAT getCurrentPosition(vltDOUBLE& _position); + ccsCOMPL_STAT initialiseMotor(); + ccsCOMPL_STAT checkMotorHoming(); +}; + + +#endif // !sxiniseDevDrvNise_H + + + + + + + + + + + + + + diff --git a/ICS/sxinise/include/sxiniseDevDrvSimNise.h b/ICS/sxinise/include/sxiniseDevDrvSimNise.h new file mode 100644 index 0000000..781d4dd --- /dev/null +++ b/ICS/sxinise/include/sxiniseDevDrvSimNise.h @@ -0,0 +1,116 @@ +#ifndef sxiniseDevDrvSimNise_H +#define sxiniseDevDrvSimNise_H +//////////////////////////////////////////////////////////////////////////////// +// ESO - VLT Project +// +// "@(#) $Id: sxiniseDevDrvSimNise.h 329630 2020-01-23 08:01:06Z dricci $" +// +// Who When What +// -------- ---------- ------------------------------------------------------- +// jknudstr 2009-11-30 Created +// UPDATE UPDATE Updated from template +//------------------------------------------------------------------------------ + +//////////////////////////////////////////////////////////////////////////////// +// Template header source file to use as starting point when implementing new +// IC0FB Device Driver Simulators. +//------------------------------------------------------------------------------ + +#ifndef __cplusplus +#error This is a C++ include file and cannot be used from plain C +#endif + +#include +#include + +#include "ic0fbDriverInfo.h" +#include "sxiniseDevDrvNise.h" + +#include "ic0fbDevDrvSimBase.h" + + +/// +/// Device Driver Simulator for UPDATE +class sxiniseDevDrvSimNise: public ic0fbDevDrvSimBase +{ + public: + + // UPDATE: Provide comment for all constants/group of constants. + static const string Constant; + + /// @brief Constructor. + /// + /// UPDATE: Write specific documentation here. + sxiniseDevDrvSimNise(); + + /// @brief Destructor. + /// + /// UPDATE: Write specific documentation here. + ~sxiniseDevDrvSimNise(); + + /////////////////////////////////////////////////////////////////////////// + // Methods implementing the specific logic of the Device Driver simulator: + /////////////////////////////////////////////////////////////////////////// + + /// @brief Context specific initialisation of the simulator. + /// + /// User provided method, handling internal preparation of the object. + /// + /// See sxiniseDevDrvSimNise::initialiseDevice(). + virtual ccsCOMPL_STAT initialiseDeviceUser(); + + /// @brief Simulated procedure call. + /// @param[in] procedure Name of procedure to invoke. + /// @param[in] parameters Vector of parameter objects. + /// + /// Handle simulated behavior of executing a procedure. + virtual ccsCOMPL_STAT procedureUser(const string& procedure, + ic0fbPars_t& parameters); + + /// @brief Simulate reading a set of parameters from device. + /// @param[in] name Names of the parameters. + /// @param[in] parameter Parameter objects in which the info is stored. + /// + /// Implements the simulated behavior of reading information about a set of + /// specific parameters from the device name space. + virtual ccsCOMPL_STAT readUser(ic0fbList& parNames, + ic0fbPars_t& parameters); + + /// @brief Scan the device name space for parameters. + /// @param[out] parameters Vector with info about parameters. + /// + /// The method scans the name of the device, and returns a vector with the + /// parameters found. + /// + /// Implements simulated behavior of scanning the device address space. + virtual ccsCOMPL_STAT scanUser(ic0fbPars_t& parameters); + + /// @brief Write a set of parameters to the device. + /// @param[in] parameters Vector of parameter objects. + /// + /// Handle simulated behavior of writing the parameters and their + /// associated values to the device. A context specific implementation must + /// be provided. + virtual ccsCOMPL_STAT writeUser(ic0fbPars_t& parameters); + /////////////////////////////////////////////////////////////////////////// + + protected: + + private: + static string m_homeStatus; + static string m_myPosition; + static string m_myNamedPos; + static string m_errorMsg; + static const string m_cmdPrefix; + static const string m_cmdSuffix; + // flags + static bool m_posAsked; + static bool m_homeStatusAsked; + static bool m_errorAsked; + static bool m_statusAsked; + + +}; + + +#endif // !sxiniseDevDrvSimNise_H diff --git a/ICS/sxinise/src/Makefile b/ICS/sxinise/src/Makefile new file mode 100644 index 0000000..1e39033 --- /dev/null +++ b/ICS/sxinise/src/Makefile @@ -0,0 +1,215 @@ +#******************************************************************************* +# E.S.O. - VLT project +# +# "@(#) $Id: Makefile 329554 2020-01-21 09:31:45Z dricci $" +# +# Makefile of ........ +# +# who when what +# -------- ---------- ---------------------------------------------- +# mdepasca 2020-01-15 Removed headers for position table not used in NISE +# mdepasca 2019-05-17 Added correct db points for NISE +# soxsmgr yyyy-mm-dd created +# mdepasca 2019-09-13 Adapted to NISE SOXS's special device + +#******************************************************************************* +# This Makefile follows VLT Standards (see Makefile(5) for more). +#******************************************************************************* +# REMARKS +# None +#------------------------------------------------------------------------ + +COMMON_LIBS = \ + open62541 \ + ic0fb ic0fbi ic0fbo \ + ixac ibac \ + seq \ + ctoo oslx slx misc \ + evh eccs fnd \ + CCS \ + cfitsio \ + C++ uuid + + +# +# user definable C-compilation flags +USER_CFLAGS = -DUA_NO_AMALGAMATION + +# +# additional include and library search paths +USER_INC = $(shell pkg-config --cflags-only-I open62541) +# USER_INC = -I /opt/open62541/include/open62541/ +USER_LIB = $(shell pkg-config --libs-only-L open62541) + +# +# MODULE CODE DESCRIPTION: +# ------------------------ +# As a general rule: public file are "cleaned" and "installed" +# local (_L) are not "installed". + +# +# C programs (public and local) +# ----------------------------- +EXECUTABLES = sxiniseNise sxiniseSimNise +EXECUTABLES_L = + +# +# +sxiniseNise_OBJECTS = sxiniseDevSrvNise + +sxiniseNise_LDFLAGS = +sxiniseNise_LIBS = $(COMMON_LIBS) sxinise + +sxiniseSimNise_OBJECTS = sxiniseDevSimNise +sxiniseSimNise_LDFLAGS = +sxiniseSimNise_LIBS = $(COMMON_LIBS) sxinise + +# +# special compilation flags for single c sources +#yyyyy_CFLAGS = + +# +# Includes (.h) files (public only) +# --------------------------------- +INCLUDES = sxinisePosTable.h sxinisePosInfo.h + +# +# Libraries (public and local) +# ---------------------------- +LIBRARIES = sxinise +LIBRARIES_L = + +# +# +sxinise_OBJECTS = sxiniseDevDrvNise sxiniseDevDrvSimNise + +# +# Scripts (public and local) +# ---------------------------- +SCRIPTS = +SCRIPTS_L = + +# +# TCL scripts (public and local) +# ------------------------------ +TCL_SCRIPTS = +TCL_SCRIPTS_L = + +# +# +tttttt_OBJECTS = +tttttt_TCLSH = +tttttt_LIBS = + +# +# TCL libraries (public and local) +# ------------------------------ +TCL_LIBRARIES = +TCL_LIBRARIES_L = + +# +# +tttlll_OBJECTS = + +# +# UIF panels (public and local) +# ---------------------------- +PANELS = +PANELS_L = + +# +# On-Line Database Files +# ---------------------- +DBL_CLASSES = sxiniseNISE sxiniseFB_NISE +DBL_BCF = +DBL_FLAGS = +xxxx_DBL_FLAGS = + +# +# IDL Files and flags +# +IDL_FILES = +IDL_TAO_FLAGS = +USER_IDL = + +# +# man pages to be done +# -------------------- +MANSECTIONS = +MAN1 = +MAN3 = +MAN5 = +MAN7 = +MAN8 = + +# +# local man pages +# --------------- +MANl = + +# +# ASCII file to be converted into Framemaker-MIF +# -------------------- +ASCII_TO_MIF = + +# +# INS_ROOT files to be installed +#------------------------------- +INS_ROOT_FILES = +INS_ROOT_DIR = + +# +# other files to be installed +#---------------------------- +INSTALL_FILES = ../config/sxinise_TwinCAT.fbmap \ + ../config/ESO-VLT-DIC.SXINISE_CFG \ + ../config/ESO-VLT-DIC.SXINISE_REF + +# +# list of all possible C-sources (used to create automatic dependencies) +# CSOURCENAMES removed as unused since VLT2011 - VLTSW-10877 + +# +#>>>>> END OF standard rules + +# +# CHOSE PLATFORM +# -------------- +# Default is UNIX, for VxVorks application next line MUST BE UNCOMMENTED +#MAKE_VXWORKS = on + +# +# INCLUDE STANDARDS +# ----------------- +MAKEDIR = $(VLTROOT)/include +include $(MAKEDIR)/vltMakefile + +# +# TARGETS +# ------- +all: do_all + @echo " . . . 'all' done" + +clean : clean_all + @echo " . . . clean done" + +clean_dist : clean_all clean_dist_all + @echo " . . . clean_dist done" + +man : do_man + @echo " . . . man page(s) done" + +install : install_all + @echo " . . . installation done" + +db : db_all + @echo " . . . ../DB done" +dic : + @echo "== Making dictionary: ESO-VLT-DIC.SXINISE_REF" + $(AT)rm -f ../config/ESO-VLT-DIC.SXINISE_REF + $(AT)ctooTxt2Dic sxiniseDIC_REF.dic > ../config/ESO\-VLT\-DIC.SXINISE_REF + @echo "== Making dictionary: ESO-VLT-DIC.SXINISE_CFG" + $(AT)rm -f ../config/ESO-VLT-DIC.SXINISE_CFG + $(AT)ctooTxt2Dic sxiniseDIC_CFG.dic > ../config/ESO\-VLT\-DIC.SXINISE_CFG + +#___oOo___ diff --git a/ICS/sxinise/src/sxiniseDIC_CFG.dic b/ICS/sxinise/src/sxiniseDIC_CFG.dic new file mode 100644 index 0000000..5513e3d --- /dev/null +++ b/ICS/sxinise/src/sxiniseDIC_CFG.dic @@ -0,0 +1,79 @@ +#****************************************************************************** +# E.S.O. - VLT project +# +# "@(#) $Id: sxiniseDIC_CFG.dic 325505 2019-09-09 10:07:47Z mdepasca $" +# +# SOXS_CFG dictionary +# +# who when what +# -------- ---------- ---------------------------------------------- +# mdepasca 9/9/2019 Created following approach used for ERINGIR +# + +#****************************************************************************** +# +# This dictionary defines the configuration parameters for SXINISE Device Driver +# ******************************************************************************* + +DICTIONARY SXINISE_CFG "SXINISE_CFG" "NISE Configuration Dictionary" +REVISION "$Revision: 329630 $" +CONTEXT "Instrument" + +################################################################################ +# NISE Special Device +################################################################################ + +INSi.NISE.IDi %10s Unique ID (c). +INSi.NISE.NAME %s Element name (c). +INSi.NISE.DEVNAME %19s Name of the ICS device (c). +INSi.NISE.PREFIX %15s NISE FITS prefix (c). +INSi.NISE.DEVDESC %19s Description of the ICS device (c). +INSi.NISE.DEVTYPE %19s Device type (C). +INSi.NISE.LCUID %d Id. of the PLC managing the device (c). +INSi.NISE.SWSIM %c T for software simulation (c). +INSi.NISE.ADDRESS %10s Address for normal mode (c) + This address is used to connect to the device + HW, when running in normal mode. +INSi.NISE.SIMADDR %10s Address for simulation mode (c) + This address is used to connect to the + device HW, when running in simulation + mode. I.e., it makes the Device Server + connect to the Device Simulator Process. +INSi.NISE.PERIOD %d [ms] Control Loop period (c) + The Control Loop period specifies with + which frequency the status parameters + are queried and logged. +INSi.NISE.MAPPREFIX %30s Prefix for name mapping (c). +INSi.NISE.MAPFILE %30s Name Mapping File (c). +INSi.NISE.MAXBUF %d Max number of parameters to read/write (c). +INSi.NISE.MINPOS %.4f [um] Minimum physical position of device (c). +INSi.NISE.MAXPOS %.4f [um] Maximum physical position of device (c). +INSi.NISE.TOLERANCE %.4f [um] Positioning threshold control (c). +INSi.NISE.MOVETOUT %d [ms] Movement timeout (c). +INSi.NISE.INITTOUT %d [ms] Initialisation timeout (c). +INSi.NISE.TIMEOUT %d [ms] General timeout (c). + +INSi.NISE.CHi.NAME %19s Name of the channel (c). +INSi.NISE.CHi.DESC %19s Description of the channel (c). +INSi.NISE.CHi.TYPE %19s Channel type (c). +INSi.NISE.CHi.AVAIL %c T if available (c). +INSi.NISE.CHi.SIGNAL %10s Signal used (c). +INSi.NISE.CHi.RANGE1 %30s Valid range (c). + +INSi.NISE.UIFCLASS %s Widget class to be used (c). +INSi.NISE.UIFNB %d Index of notebook to be used (c). +INSi.NISE.UIFTB %d Index of tab to be used (c). +INSi.NISE.TESTMAX %d Maximum number of test commands (c) +INSi.NISE.TESTCMDi %15s Command name (c). +INSi.NISE.TESTPARi %256s Paramaters string (c). +INSi.NISE.TESTERRi %c Expected Error reply (c). +INSi.NISE.PROCNAME %32s Name of the device server (c). + +INSi.NISE.STATUS %d Global status (c). + +INSi.NISE.POSNUM %d Number of named positions (c). +INSi.NISE.NAMEi %s Position name (c). +INSi.NISE.POSi %.3f [mm] Position of the named position (c). +INSi.NISE.POS %.3f [mm] Position (c). +INSi.NISE.TYPEi %.3f Element type (c). + diff --git a/ICS/sxinise/src/sxiniseDevDrvNise.C b/ICS/sxinise/src/sxiniseDevDrvNise.C new file mode 100644 index 0000000..6357a61 --- /dev/null +++ b/ICS/sxinise/src/sxiniseDevDrvNise.C @@ -0,0 +1,1843 @@ +//////////////////////////////////////////////////////////////////////////////// +// ESO - VLT Project +// +// "@(#) $Id: sxiniseDevDrvNise.C 329907 2020-02-03 09:48:36Z mdepasca $" +// +// Who When What +// -------- ---------- ------------------------------------------------------- +// mdepasca 2019/10/04 Implemented utility private methods +// mdepasca 2019/09/25 Implemented initialize, setup, online, onlineStatus, +// standby and statusStatus +// abaruffo 2018/08/02 Created from template +//------------------------------------------------------------------------------ + +//////////////////////////////////////////////////////////////////////////////// +// NAME +// sxiniseDevDrvNise - Special IC0FB device to drive SOXS NIR Slit Exchanger +//------------------------------------------------------------------------------ + +#define _POSIX_SOURCE 1 +#include "vltPort.h" + +ATTRIBUTE_UNUSED static const char* rcsId="@(#) $Id: sxiniseDevDrvNise.C 329907 2020-02-03 09:48:36Z mdepasca $"; + +#include "ic0fbUtils.h" +#include "ic0fbDevSrv.h" +#include "ic0fbDriverInfo.h" +#include "ic0fbiChannelBase.h" +#include "sxiniseDevDrvNise.h" + +/// @name sxiniseDevDrvNise +/// @brief SOXS NIR Slit Exchanger Device Driver +/// +/// Driver to control and monitor the Micronix controller used +/// to select slits in SOXS NIR channel. +/// +/// The following setup keywords are used: +/// +/// INSi.NISE.NAME (string): Positions the device by name. +/// INSi.NISE.POS (float): Positions the device in user units. +/// +/// The following status keywords are generated by the driver: +/// +/// INSi.NISE.NAME (string): Current named position. +/// INSi.NISE.POS (float): Current position in user units. +/// +/// The following configuration keywords are used (apart from the standard +/// ones): +/// +/// INSi.NISE.NAMEi: i-th position name +/// INSi.NISE.POSi: i-th poisition in user units + +/// @name Keys for the name mapping. +// @{ +// Config +// +// TO DO +// +// Control +const string sxiniseDevDrvNise::DevCtrlCommand = "CtrlCommand"; +const string sxiniseDevDrvNise::DevCtrlExecute = "CtrlExecute"; +const string sxiniseDevDrvNise::DevCtrlTextOut0 = "CtrlTextOut0"; + +const string sxiniseDevDrvNise::DevCfgTimeoutInit = "CfgTimeoutInit"; + +const vltINT32 sxiniseDevDrvNise::CtrlCmdNone = 0; +const vltINT32 sxiniseDevDrvNise::CtrlCmdInit = 1; +const vltINT32 sxiniseDevDrvNise::CtrlCmdWrite = 2; +const vltINT32 sxiniseDevDrvNise::CtrlCmdPowerOn = 3; +const vltINT32 sxiniseDevDrvNise::CtrlCmdPowerOff = 4; + +const string sxiniseDevDrvNise::ParPosition = "POS"; +const string sxiniseDevDrvNise::ParPosName = "NAME"; +// Status +const string sxiniseDevDrvNise::DevStatPosName = "StatPosName"; +const string sxiniseDevDrvNise::DevStatPosition = "StatPosition"; +const string sxiniseDevDrvNise::DevStatInitialised = "StatInitialised"; +const string sxiniseDevDrvNise::DevStatErrorText = "StatErrorText"; +const string sxiniseDevDrvNise::DevStatStatus = "StatStatus"; +// @} + +/// @name Status literals written into the "status0" DB attribute +// @{ +const string sxiniseDevDrvNise::StatusOffStr = "OFF"; +const string sxiniseDevDrvNise::StatusIdleStr = "IDLE"; +const string sxiniseDevDrvNise::StatusErrorStr = "ERROR"; +const string sxiniseDevDrvNise::StatusFailedStr = "FAILED"; +const string sxiniseDevDrvNise::StatusMovingStr = "MOVING"; +const string sxiniseDevDrvNise::StatusBusyStr = "BUSY"; +// @} + +/// @name Numerical representations of status literals. +// @{ +const vltINT32 sxiniseDevDrvNise::StatusIdle = 0; // 1; +const vltINT32 sxiniseDevDrvNise::StatusBusy = 1; // 3; +const vltINT32 sxiniseDevDrvNise::StatusError = 2; +const vltINT32 sxiniseDevDrvNise::StatusOff = 3; // 0; +const vltINT32 sxiniseDevDrvNise::StatusMoving = 4; +const vltINT32 sxiniseDevDrvNise::StatusFailed = -1; +// @} + +/// @name Status and configuration FITS keys +// @{ + +// @} + +const bitset<8> sxiniseDevDrvNise::ERR_MASK (128); // 10000000 +const bitset<8> sxiniseDevDrvNise::ACC_MASK (64); // 01000000 +const bitset<8> sxiniseDevDrvNise::CONST_MASK(32); // 00100000 +const bitset<8> sxiniseDevDrvNise::DEC_MASK (16); // 00010000 +const bitset<8> sxiniseDevDrvNise::STOP_MASK (8); // 00001000 +const bitset<8> sxiniseDevDrvNise::PROG_MASK (4); // 00000100 +const bitset<8> sxiniseDevDrvNise::PLS_MASK (2); // 00000010 +const bitset<8> sxiniseDevDrvNise::NLS_MASK (1); // 00000001 + + +const string sxiniseDevDrvNise::m_cmdPrefix = "#"; +const string sxiniseDevDrvNise::m_cmdSuffix = "\n\r"; +const double sxiniseDevDrvNise::m_absSoftLS = 5.8; + +sxiniseDevDrvNise::sxiniseDevDrvNise() +{ + ic0fbTRACE; + + className_(this); + ic0fbLOG2("sxiniseDevDrvNise()"); + m_devDrvIsInit = false; + m_devHWIsInit = false; + m_devHWIsStopped = true; + m_devicePosTable = new ic0fbiMotPosTable; + // changing public const member values, + // raising WARNING on building + m_devicePosTable->ParPosEnc = "POS"; + m_devicePosTable->ParPosUser = "POS"; + m_devicePosTable->ParPosId = "NAME"; + + m_currentNamedPos = "UNDEFINED"; + m_devIsSim = simulation(); +} + + +sxiniseDevDrvNise::~sxiniseDevDrvNise() +{ + ic0fbTRACE; + free(m_devicePosTable); +} + +ic0fbiIoMgr& sxiniseDevDrvNise::ioMgr() +{ + ic0fbTRACE; + ic0fbLOG2("ioMgr()"); + return m_ioMgr; +} + +ccsCOMPL_STAT sxiniseDevDrvNise::initialiseDeviceUser( + ic0fbRequestHandle& request + ) +{ + ic0fbTRACE; + ic0fbLOG2("initialiseDeviceUser()"); + ic0fbLOG1("Provide implementation of " + "sxiniseDevDrvNise::initialiseDeviceUser()"); + ostringstream ostrmCmd; + ic0fbParameter initPar(DevCtrlCommand, CtrlCmdInit); + ic0fbParameter execPar(DevCtrlExecute, (vltLOGICAL) TRUE); + ic0fbParameter writePar(DevCtrlCommand, CtrlCmdWrite); + ic0fbParameter processedPar; + ic0fbPars_t rawPars; + + ic0fbParameter initTimeoutPar(DevCfgTimeoutInit, device().getInitTimeout()/1e3); + + logParameter(ic0fbParameter("INS.NISE.INIT", "NISE init sequence started")); + + if (!m_devDrvIsInit) + { + // Check for mandatory ICB configuration keys. + string cfgKeys[] = + { + "DEVNAME", + "POSNUM", + "TOLERANCE", + "" + }; + if (checkMandatoryKeys(cfgKeys) == FAILURE) + { + ic0fbFAILURE("Error checking for mandatory keys"); + } + + // Check for mandatory Device Driver<->Firmware Name Mappings defined in + // the configuration. + // string nameMappings[] = + // {"UPDATE", + // ""}; + // if (checkNameMappings(nameMappings) == FAILURE) + // { + // ic0fbFAILURE("Issue encountered in Device Name Mappings"); + // } + + //////////////////////////////////////////////////////////////////////////// + // Name mappings when reading from the device + //////////////////////////////////////////////////////////////////////////// + addReadNameMapping(buildKey(ic0fbDevice::ParStatus), ic0fbDevice::DevStatStatus); + + //////////////////////////////////////////////////////////////////////////// + // Name mappings when writing to the device + //////////////////////////////////////////////////////////////////////////// + addWriteNameMapping(buildKey(ic0fbDevice::ParName), ic0fbDevice::ParName); + addWriteNameMapping(buildKey(ParPosition), device().prefix() + "." + ParPosition); + //////////////////////////////////////////////////////////////////////////// + + //////////////////////////////////////////////////////////////////////////// + // Declaration of Device Driver information. + //////////////////////////////////////////////////////////////////////////// + string drvInfoName = className(); + string drvInfoVersion = ic0fbUtils::getVersionFromScmId(rcsId); + string drvInfoDate = ic0fbUtils::getDateFromScmId(rcsId); + string drvInfoSynopsis = "NIR Slit Exchanger Driver"; + string drvInfoDescription = + "IC0FB driver to control the SOXS NIR slit exchanger" + "through the Micronix MMC-103 controller attached to a PLC" + "via a serial line."; + string drvInfoFirmwareVersion = "0.0/alpha"; + //------------------------------------------------------------------------- + name(drvInfoName); + version(drvInfoVersion); + date(drvInfoDate); + synopsis(drvInfoSynopsis); + description(drvInfoDescription); + firmwareVersion(drvInfoFirmwareVersion); + //------------------------------------------------------------------------- + // Configuration Keys (Mandatory): + string mandCfgKeys[] = + { + buildKey("DEVNAME"), + buildKey("POSNUM"), + buildKey("TOLERANCE"), + "" + }; + addCfgKeys(mandCfgKeys); + //------------------------------------------------------------------------- + // Optional Configuration Keys: + // string optCfgKeys[] = + // {buildKey("UPDATE"), + // ""}; + // addOptCfgKeys(optCfgKeys); + //------------------------------------------------------------------------- + // Setup Keys: + string setupKeys[] = + { + buildKey(ic0fbDevice::ParName), + buildKey(sxiniseDevDrvNise::ParPosition), + buildKey(sxiniseDevDrvNise::ParPosName), + "" + }; + addSetupKeys(setupKeys); + //------------------------------------------------------------------------- + // Status Keys: + string statusKeys[] = + { + buildKey(ic0fbDevice::ParName), + buildKey(sxiniseDevDrvNise::ParPosition), + "" + }; + addStatusKeys(statusKeys); + + //////////////////////////////////////////////////////////////////////////// + + // Name mappings when writing to the device + // for (int i = 1; i <= ic0fbiChannelBase::MaxChannels; i++) + // { + // // Internal name: .CH + // stringstream internalName; + // internalName << device().prefix() << "." + // << ic0fbiChannelBase::ParCh << i; + // // High level name: .CH.VALUE. + // stringstream highLevelName; + // highLevelName << internalName.str() << "." + // << ic0fbiChannelBase::ParValue; + // addWriteNameMapping(highLevelName.str(), internalName.str()); + // } + + // initialize position table from INS config file + if (m_devicePosTable->initialise(device()) == FAILURE) + { + ic0fbTHROW_ERR("Error creating position table"); + } + // ic0fbiMotPosInfo** motPosInfo; + ic0fbLOG2("Number of positions from table: %d", m_devicePosTable->getNbOfPositions()); + + // Initialise the I/O manager, it loads/check/install the ICB configuration, + // pertinent to this Device Driver. + if (ioMgr().initialise(device(), comInterface().nameMapping()) == FAILURE) + { + ic0fbFAILURE("Error initialising I/O Manager for device: %s", + device().prefix().c_str()); + } + for (unsigned int i=0; i ic0fb::SubstateIdle)) + { + return SUCCESS; + } + + if (devIsSim != m_devIsSim) + { + ic0fbLOG2("changed SIMULATION state"); + m_devDrvIsInit = false; + initialiseDeviceUser(request); + } + m_devIsSim = devIsSim; + + // if (ioMgr().updateDb(request.outputPars()) == FAILURE) + // { + // ic0fbFAILURE("Error updating the DB"); + // } + + // TODO + // Submit the Operations Logs. + // if (genOpsLog(request.outputPars()) == FAILURE) + // { + // ic0fbFAILURE("Error generating Ops Logs"); + // } + + return SUCCESS; +} + +ccsCOMPL_STAT sxiniseDevDrvNise::disableUser( + ic0fbRequestHandle& request +) +{ + ic0fbTRACE; + + ic0fbLOG2("sxiniseDevDrvNise::disableUser ..."); + ccsCOMPL_STAT opStatus = SUCCESS; + + m_devDrvIsInit = false; + + if (m_devHWIsInit) + { + if (stopUser(request) == FAILURE) + { + request.status(ic0fbRequestHandle::ReqStatFailed); + ic0fbFAILURE("Unable to stop device"); + } + else + { + if (clearErrorBuffer() == FAILURE) + { + opStatus = FAILURE; + request.status(ic0fbRequestHandle::ReqStatFailed); + } + else + { + request.status(ic0fbRequestHandle::ReqStatCompleted); + } + } + } + + m_devHWIsInit = false; + + return opStatus; +} + + +ccsCOMPL_STAT sxiniseDevDrvNise::disableStatusUser( + ic0fbRequestHandle& request +) +{ + ic0fbTRACE; + + ic0fbLOG2("sxiniseDevDrvNise::disableStatusUser()"); + request.status(ic0fbRequestHandle::ReqStatCompleted); + + return SUCCESS; +} + + +ccsCOMPL_STAT sxiniseDevDrvNise::enableUser( + ic0fbRequestHandle& request +) +{ + ic0fbTRACE; + ic0fbLOG2("sxiniseDevDrvNise::enableUser()"); + ccsCOMPL_STAT opStatus = SUCCESS; + ostringstream ostrmCmd; + ic0fbParameter initPar(DevCtrlCommand, CtrlCmdInit); + ic0fbParameter execPar(DevCtrlExecute, (vltLOGICAL) TRUE); + ic0fbParameter writePar(DevCtrlCommand, CtrlCmdWrite); + ic0fbParameter processedPar; + ic0fbPars_t rawPars; + + // FITS log for initialisation timeout + // ic0fbParameter initTimeoutPar(DevCfgTimeoutInit, device().getInitTimeout()/1e3); + // logParameter(ic0fbParameter("INS.NISE.INITTOUT", device().getInitTimeout())); + + // if not done, initialise device driver + if (device().db().write("status", StatusBusy, ic0fbDb::DbDataPt) == FAILURE) + { + ic0fbFAILURE("Error initialising status to database"); + } + + if (!(m_devDrvIsInit)) + { + if (initialiseDeviceUser(request) == FAILURE) + { + offUser(request); + ic0fbFAILURE("Failed device driver initialisation, set device to OFF"); + } + } + + if (!(m_devHWIsInit)) + { + request.requestTime(ic0fbUtils::time()); // time is in microsec + ic0fbLOG2("request start time: %d microsec",request.requestTime()); + logParameter(ic0fbParameter("INS.NISE.MOVE", "move to home reference position")); + + if (initialiseMotor() == FAILURE) + { + request.status(ic0fbRequestHandle::ReqStatFailed); + ic0fbFAILURE("Error writing HOMING string to the device"); + } + m_devHWIsStopped = false; + } + + return opStatus; +} + + +ccsCOMPL_STAT sxiniseDevDrvNise::enableStatusUser( + ic0fbRequestHandle& request +) +{ + ic0fbTRACE; + ic0fbLOG2("sxiniseDevDrvNise::enableStatusUser() ..."); + ccsCOMPL_STAT opStatus = SUCCESS; + ostringstream ostrmCmd; + ic0fbParameter processedPar; + ic0fbPars_t rawPars; + + + // Check if homing procedure has been carried out + ostrmCmd.str(""); + ostrmCmd.clear(); + processedPar.reset(); + rawPars.clear(); + + if (checkMotorHoming() == FAILURE) + { + if ((request.timeElapsed()*1e6) > (device().getInitTimeout()*1e3)) + { + request.status(ic0fbRequestHandle::ReqStatFailed); + offUser(request); + ic0fbFAILURE("Device has not been homed, set it to OFF"); + } + } + else + { + opStatus = SUCCESS; + if (device().db().write("status", StatusIdle, ic0fbDb::DbDataPt) == FAILURE) + { + ic0fbFAILURE("Error initialising status to database"); + } + logParameter(ic0fbParameter("INS.NISE.MOVEDONE", "reached home reference position")); + m_devHWIsInit = true; + request.status(ic0fbRequestHandle::ReqStatCompleted); + } + + return opStatus; +} + + +ccsCOMPL_STAT sxiniseDevDrvNise::exitUser( + ic0fbRequestHandle& request +) +{ + ic0fbTRACE; + + ic0fbLOG1("Provide implementation of " + "sxiniseDevDrvNise::exitUser()"); + m_devDrvIsInit = false; + + exitStatusUser(request); + + if (device().db().write("status", StatusOff, ic0fbDb::DbDataPt) == FAILURE) + { + ic0fbFAILURE("Error initialising status to database"); + } + + return SUCCESS; +} + + +ccsCOMPL_STAT sxiniseDevDrvNise::exitStatusUser( + ic0fbRequestHandle& request +) +{ + ic0fbTRACE; + + ic0fbLOG2("Provide implementation of " + "sxiniseDevDrvNise::exitStatusUser()"); + request.status(ic0fbRequestHandle::ReqStatCompleted); + + return SUCCESS; +} + + +ccsCOMPL_STAT sxiniseDevDrvNise::offUser( + ic0fbRequestHandle& request +) +{ + ic0fbTRACE; + ic0fbLOG1("sxiniseDevDrvNise::offUser()"); + ccsCOMPL_STAT opStatus = SUCCESS; + + m_devDrvIsInit = false; + m_devHWIsInit = false; + + if (stopUser(request) == FAILURE) + { + ic0fbFAILURE("Unable to stop device"); + opStatus = FAILURE; + request.status(ic0fbRequestHandle::ReqStatFailed); + } + else + { + if (clearErrorBuffer() == FAILURE) + { + opStatus = FAILURE; + request.status(ic0fbRequestHandle::ReqStatFailed); + } + else + { + request.status(ic0fbRequestHandle::ReqStatCompleted); + } + } + if (device().db().write("status", StatusOff, ic0fbDb::DbDataPt) == FAILURE) + { + ic0fbFAILURE("Error initialising status to database"); + } + + + return opStatus; +} + + +ccsCOMPL_STAT sxiniseDevDrvNise::offStatusUser( + ic0fbRequestHandle& request +) +{ + ic0fbTRACE; + + ic0fbLOG2("Provide implementation of " + "sxiniseDevDrvNise::offStatusUser()"); + request.status(ic0fbRequestHandle::ReqStatCompleted); + + return SUCCESS; +} + + +ccsCOMPL_STAT sxiniseDevDrvNise::onlineUser( + ic0fbRequestHandle& request +) +{ + ic0fbTRACE; + ic0fbLOG1("onlineUser"); + ccsCOMPL_STAT opStatus = SUCCESS; + ic0fbList namedPosInfoList; + ic0fbParameter initPar; + ic0fbPars_t rawPars; + string strTheorPosMM = ""; + string strEncPosMM = ""; + string strCommand = ""; +// string::size_type commaPos = string::npos; + + + ic0fbLOG2("check on initialization of serial interface"); + + if (device().db().write("status", StatusBusy, ic0fbDb::DbDataPt) == FAILURE) + { + ic0fbFAILURE("Error initialising status to database"); + } + + // check on initialization of serial interface + if (comInterface().read(ic0fbDevice::DevStatInitialised.c_str(), + initPar) == FAILURE) + { + ic0fbFAILURE("Failed reading initialisation flag"); + } + + + if (!(initPar.booleanValue() && m_devDrvIsInit)) + { // device should have already been initialised, + // if it is not, something went wrong, thus setting device OFF + // ic0fbLOG2("Calling standby (within OnlineUser()) ..."); + // if (standbyUser(request) == FAILURE) + // { + // ic0fbFAILURE("Error initialising device"); + // } + if (offUser(request) == FAILURE) + { + ic0fbFAILURE("Error setting device to OFF"); + } + } + + return opStatus; +} + + + + +ccsCOMPL_STAT sxiniseDevDrvNise::onlineStatusUser( + ic0fbRequestHandle& request +) +{ + ic0fbTRACE; + ic0fbLOG2("sxiniseDevDrvNise::onlineStatusUser"); + ccsCOMPL_STAT opStatus = SUCCESS; + ic0fbList namedPosInfoList; + ic0fbParameter initPar; + ic0fbPars_t rawPars; + string strTheorPosMM = ""; + string strEncPosMM = ""; + string strCommand = ""; + vltDOUBLE currentPos = -99; +// string::size_type commaPos = string::npos; + + if (checkMotorHoming() == FAILURE) + { + request.status(ic0fbRequestHandle::ReqStatFailed); + ic0fbFAILURE("Device has not been homed"); + } + else + { + request.status(ic0fbRequestHandle::ReqStatCompleted); + } + + + if (getCurrentPosition(currentPos) == FAILURE) + { + request.status(ic0fbRequestHandle::ReqStatFailed); + ic0fbFAILURE("Error reading current position from device"); + } + + // check if position is contained in named positions table + ic0fbLOG2("Calling m_devicePosTable->getPosInfoFromPosUser"); + + if (m_devicePosTable->getPosInfoFromPosUser(currentPos, //rawPars[0].doubleValue(), + namedPosInfoList) == FAILURE) + { + ic0fbLOG2("Failed retrieving information on named pos from POSUSER"); + m_currentNamedPos = "UNDEFINED"; + } + else + { + ic0fbLOG2("Initializing current named pos"); + m_currentNamedPos = namedPosInfoList[0]->posId(); + } + + if (device().db().write("pos", currentPos, ic0fbDb::DbDataPt) == FAILURE) + { + request.status(ic0fbRequestHandle::ReqStatFailed); + ic0fbFAILURE("Error initialising status to database"); + } + // request.status(ic0fbRequestHandle::ReqStatCompleted); + // } + // } + // else + // { + // ic0fbFAILURE("Device has not been homed"); + // offUser(request); + // request.status(ic0fbRequestHandle::ReqStatFailed); + // } + // } + if (device().db().write("status", StatusIdle, ic0fbDb::DbDataPt) == FAILURE) + { + request.status(ic0fbRequestHandle::ReqStatFailed); + ic0fbFAILURE("Error initialising status to database"); + } + + // request.status(ic0fbRequestHandle::ReqStatCompleted); + + // if (device().db().write("status", StatusIdle, ic0fbDb::DbDataPt) == FAILURE) + // { + // ic0fbFAILURE("Error initialising status to database"); + // } + + return opStatus; +} + + +ccsCOMPL_STAT sxiniseDevDrvNise::readUser( + ic0fbRequestHandle& request +) +{ + ic0fbTRACE; + ic0fbLOG2("readUser"); + + return SUCCESS; +} + + +ccsCOMPL_STAT sxiniseDevDrvNise::readStatusUser( + ic0fbRequestHandle& request +) +{ + ic0fbTRACE; + ic0fbLOG2("readStatusUser"); + + request.status(ic0fbRequestHandle::ReqStatCompleted); + return SUCCESS; +} + + +ccsCOMPL_STAT sxiniseDevDrvNise::scanUser( + ic0fbRequestHandle& request +) +{ + ic0fbTRACE; + // ic0fbLOG2("scanUser"); + // if (ic0fbDevDrvBase::scanUser(request) == FAILURE) + // { + // ic0fbFAILURE("Error executing Device Driver Scan Operation"); + // } + + return SUCCESS; +} + + +ccsCOMPL_STAT sxiniseDevDrvNise::scanStatusUser( + ic0fbRequestHandle& request +) +{ + ic0fbTRACE; + // ic0fbLOG2("scanStatusUser"); + // if (ic0fbDevDrvBase::scanStatusUser(request) == FAILURE) + // { + // ic0fbFAILURE("Error checking status of Device Driver Scan Operation"); + // } + + request.status(ic0fbRequestHandle::ReqStatCompleted); + + return SUCCESS; +} + + +ccsCOMPL_STAT sxiniseDevDrvNise::setupUser( + ic0fbRequestHandle& request +) +{ + ic0fbTRACE; + ic0fbLOG1("Managing the request."); + ic0fbLOG2("sxiniseDevDrvNise::setupUser"); + ccsCOMPL_STAT opStatus = SUCCESS; + ostringstream ostrmCmd; + ostringstream strmPosValue; + ic0fbParameter processedPar; + ic0fbParameter writePar; + ic0fbParameter execPar; + ic0fbiMotPosInfo *namedPosInfo; + ic0fbList namedPosInfoList; + //bool atNamedPos; + //bool inputParIsOK; + + // atNamedPos=false; + // atNamedPos==false ? atNamedPos=false : atNamedPos=false ; + // inputParIsOK=false; + + // Updating the status in the OLDB to BUSY + if (device().db().write("status", StatusBusy, ic0fbDb::DbDataPt) == FAILURE) + { + ic0fbFAILURE("Error initialising status to database"); + } + ic0fbLOG2("%s",request.inputPars()[0].internalName().c_str()); + + if (request.inputPars()[0].internalName() == "INS.NISE.POS") + { + //inputParIsOK = true; + ic0fbLOG1("%s = %s", + request.inputPars()[0].internalName().c_str(), + request.inputPars()[0].getValAsString().c_str()); + strmPosValue << request.inputPars()[0].doubleValue(); + + if (abs(request.inputPars()[0].doubleValue()) > m_absSoftLS) + { + //inputParIsOK = false; + ic0fbFAILURE("Requested motion to position out of range (abs(%+7.3f) > %+7.3f), ignoring command", + request.inputPars()[0].doubleValue(), + m_absSoftLS); + + } + ostrmCmd << "2MVA" << strmPosValue.str(); + // check if requested position is in named positions table + if (m_devicePosTable->posDefined(request.inputPars()[0].doubleValue())) + { + ic0fbLOG2("Requested position is a named position"); + if (m_devicePosTable->getPosInfoFromPosUser(request.inputPars()[0].doubleValue(), + namedPosInfoList) == FAILURE) + { + ic0fbLOG2("Failed retrieving information on named po from POSUSER"); + } + namedPosInfo = namedPosInfoList[0]; + //atNamedPos = true; + } + else + { + ic0fbLOG2("Setup to a not named position"); + } + } + else + { + // for a not clearified reason, sending a SETUP message for a named position + // to NISE from sxiControl, the parameter name gets transformed to NAME. + // This is true only for INS.NISE.NAME, not for INS.NISE.POS + if ((request.inputPars()[0].internalName() == "INS.NISE.NAME") || + (request.inputPars()[0].internalName() == "NAME")) + { + // check if requested named position is valid + if (m_devicePosTable->getPosInfoFromPosId( + request.inputPars()[0].getValAsString(), &namedPosInfo) == FAILURE) + { + //inputParIsOK = false; + ic0fbFAILURE("No position associated to ID: %s", + request.inputPars()[0].getValAsString().c_str()); + } + // atNamedPos = true; + strmPosValue << namedPosInfo->posUser(); + ostrmCmd << "2MVA" << strmPosValue.str(); + ic0fbLOG2("Command to be sent to PLC: %s", ostrmCmd.str().c_str()); + // inputParIsOK = true; + + } + else + { + request.status(ic0fbRequestHandle::ReqStatFailed); + ic0fbFAILURE("Uknown parameter %s or wrong value.", request.inputPars()[0].internalName().c_str()); + } + } + + if (device().db().write("status", StatusMoving, ic0fbDb::DbDataPt) == FAILURE) + { + ic0fbFAILURE("Error initialising status to database"); + } + + logParameter(ic0fbParameter("INS.NISE.MOVE", "move to absolute position " + strmPosValue.str() + " mm")); + request.requestTime(ic0fbUtils::time()); // in microsec + request.timeout(device().getTimeout()*1e3); + + if (writeCommandString(ostrmCmd.str()) == FAILURE) + { + request.status(ic0fbRequestHandle::ReqStatFailed); + ic0fbFAILURE("Failed to write command %s to device", ostrmCmd.str().c_str()); + } + + return opStatus; +} + + +ccsCOMPL_STAT sxiniseDevDrvNise::setupStatusUser( + ic0fbRequestHandle& request +) +{ + ic0fbTRACE; + ic0fbLOG2("sxiniseDevDrvNise::setupStatusUser"); + ccsCOMPL_STAT opStatus = SUCCESS; + ostringstream ostrmCmd; + ic0fbPars_t rawPars; + ic0fbPars_t errPars; + ic0fbParameter statusPar; + ic0fbList namedPosInfoList; +// string::size_type suffixPos; + string strStatus; + istringstream issStatus; + bitset<8> bitStatus; + vltDOUBLE currentPos; + + if ((request.timeElapsed()*1e6) > (device().getTimeout()*1e3)) + { + request.status(ic0fbRequestHandle::ReqStatFailed); + offUser(request); + ic0fbFAILURE("SETUP command went timeout, set device to OFF"); + } + + if (checkHWStatus(ERR_MASK) == SUCCESS) + { + request.status(ic0fbRequestHandle::ReqStatFailed); + ic0fbFAILURE("Status reported error on HW device.") + } + + // for a not clearified reason, sending a SETUP message for a named position + // to NISE from sxiControl, the parameter name gets transformed to NAME. + // This is true only for INS.NISE.NAME, not for INS.NISE.POS + if ((request.inputPars()[0].internalName() == "INS.NISE.POS") || + (request.inputPars()[0].internalName() == "INS.NISE.NAME") || + (request.inputPars()[0].internalName() == "NAME") ) + { + if (checkHWStatus(STOP_MASK) == SUCCESS) + { + m_devHWIsStopped = true; + request.status(ic0fbRequestHandle::ReqStatCompleted); + // Updating the status in the OLDB to IDLE + if (device().db().write("status", StatusIdle, ic0fbDb::DbDataPt) == FAILURE) + { + ic0fbFAILURE("Error initialising status to database"); + } + if (getCurrentPosition(currentPos) == FAILURE) + { + ic0fbFAILURE("Error reading current position from device"); + } + if (device().db().write("pos", currentPos, ic0fbDb::DbDataPt) == FAILURE) + { + ic0fbFAILURE("Error writing current position to database"); + } + // check if position corresponds to named pos, if so write it in DB + if (m_devicePosTable->posDefined(currentPos)) + { + ic0fbLOG2("Requested position is a named position"); + if (m_devicePosTable->getPosInfoFromPosUser(currentPos, + namedPosInfoList) == FAILURE) + { + ic0fbFAILURE("Failed retrieving information on named po from POSUSER"); + } + m_currentNamedPos = namedPosInfoList[0]->posId(); + } + else + { + ic0fbLOG2("Setup to a not named position"); + m_currentNamedPos = "UNDEFINED"; + } + if (device().db().write("status0", m_currentNamedPos, ic0fbDb::DbDataPt) == FAILURE) + { + ic0fbFAILURE("Error writing current position to database"); + } + opStatus = SUCCESS; + } + + } + + return opStatus; +} + + +ccsCOMPL_STAT sxiniseDevDrvNise::standbyUser( + ic0fbRequestHandle& request +) +{ + ic0fbTRACE; + ic0fbLOG2("sxiniseDevDrvNise::standbyUser()"); + ccsCOMPL_STAT opStatus = SUCCESS; + ic0fbParameter initPar; + +// Updating the status in the OLDB and setting the flag BUSY + if (device().db().write("status", StatusBusy, ic0fbDb::DbDataPt) == FAILURE) + { + ic0fbFAILURE("Error writing status to database"); + } + + if (!m_devDrvIsInit) + { + // FITS log for initialisation timeout + // ic0fbParameter initTimeoutPar(DevCfgTimeoutInit, device().getInitTimeout()/1e3); + // logParameter(ic0fbParameter("INS.NISE.INITTOUT", device().getInitTimeout())); + + if (initialiseDeviceUser(request) == FAILURE) + { + ic0fbFAILURE("Failed device driver initialisation"); + } + // Note: It is important to clear the I/O Manager when going from LOADED + // to STANDBY (or ONLINE), since the configuration may have changed + // and needs to be reloaded. + // if (ioMgr().initialise(device(), comInterface().nameMapping()) == FAILURE) + // { + // ic0fbFAILURE("Error initialising I/O Manager for device: %s", + // device().prefix().c_str()); + // } + + // ic0fbLOG2("Initialising device (writing init flag) ..."); + // ic0fbParameter initPar(DevCtrlCommand, CtrlCmdInit); + // if (comInterface().write(initPar) == FAILURE) + // { + // ic0fbFAILURE("Error writing to device"); + // } + // ic0fbParameter execPar(DevCtrlExecute, (vltLOGICAL)TRUE); + // if (comInterface().write(execPar) == FAILURE) + // { + // ic0fbFAILURE("Error writing to device"); + // } + // ic0fbUtils::sleep(0.5); + // ic0fbLOG2("Initialised device (wrote init flag)"); + } + + // check on initialization of serial interface + if (comInterface().read(ic0fbDevice::DevStatInitialised.c_str(), + initPar) == FAILURE) + { + ic0fbFAILURE("Failed reading initialisation flag"); + } + + if (!(initPar.booleanValue() && m_devHWIsInit)) + // if (!m_devHWIsInit) + { + logParameter(ic0fbParameter("INS.NISE.MOVE", "move to home reference position")); + if (initialiseMotor() == FAILURE) + { + request.status(ic0fbRequestHandle::ReqStatFailed); + ic0fbFAILURE("Error writing HOMING string to the device"); + } + m_devHWIsStopped = false; + // if (enableUser(request) == FAILURE) + // { + // ic0fbFAILURE("Failed hardware device initialization"); + // } + } + + return opStatus; +} + + +ccsCOMPL_STAT sxiniseDevDrvNise::standbyStatusUser( + ic0fbRequestHandle& request) +{ + ic0fbTRACE; + ic0fbLOG1("sxiniseDevDrvNise::standbyStatusUser()"); + ccsCOMPL_STAT opStatus = SUCCESS; + + if (checkMotorHoming() == FAILURE) + { + if ((request.timeElapsed()*1e6) > (device().getInitTimeout()*1e3)) + { + request.status(ic0fbRequestHandle::ReqStatFailed); + offUser(request); + ic0fbFAILURE("Device has not been homed, set it to OFF"); + } + } + else + { + opStatus = SUCCESS; + if (device().db().write("status", StatusIdle, ic0fbDb::DbDataPt) == FAILURE) + { + ic0fbFAILURE("Error initialising status to database"); + } + logParameter(ic0fbParameter("INS.NISE.MOVEDONE", "reached home reference position")); + m_devHWIsInit = true; + request.status(ic0fbRequestHandle::ReqStatCompleted); + } + + + + // request.status(ic0fbRequestHandle::ReqStatCompleted); + + return opStatus; +} + + +ccsCOMPL_STAT sxiniseDevDrvNise::statusUser( + ic0fbRequestHandle& request +) +{ + /* + * asks device for status and position + */ + ic0fbTRACE; + ic0fbLOG2("sxiniseDevDrvNise::statusUser ..."); + ic0fbPars_t rawPars; + ic0fbPars_t errPars; + ic0fbParameter statStatus; + ic0fbParameter initPar; + ic0fbParameter execPar(DevCtrlExecute, (vltLOGICAL) TRUE); + ic0fbParameter currentPosPar; + ic0fbParameter currentNamedPosPar; + ic0fbList namedPosInfoList; + string strTheorPosMM = ""; + string strEncPosMM = ""; + string strCommand = ""; +// string::size_type commaPos = string::npos; +// string::size_type suffixPos = string::npos; + istringstream istrmHWStatus; + bitset<8> bitHWStatus; + vltDOUBLE currentPos; + //////////////////////////////// + // sending request for status // + //////////////////////////////// + if (device().db().write("status", StatusBusy, ic0fbDb::DbDataPt) == FAILURE) + { + ic0fbFAILURE("Error writing status to database"); + } + if (comInterface().read(ic0fbDevice::DevStatInitialised.c_str(), + initPar) == FAILURE) + { + ic0fbFAILURE("Failed reading initialisation flag"); + } + + if (initPar.booleanValue() && m_devHWIsInit) + { + if (checkHWStatus(ERR_MASK) == SUCCESS) + { + request.status(ic0fbRequestHandle::ReqStatFailed); + offUser(request); + if (checkForErrors(errPars) == FAILURE) + { + ic0fbFAILURE("Error %s", errPars[0].getValAsString().c_str()); + } + ic0fbFAILURE("Status reported error on HW device."); + } + + // check if stage has reached positive limit switch + if (checkHWStatus(PLS_MASK) == SUCCESS) + { + // + ic0fbLOG2("PLS_MASK %s", PLS_MASK.to_string().c_str()); + stopUser(request); + request.status(ic0fbRequestHandle::ReqStatFailed); + ic0fbFAILURE("Motor reached positive limit switch: stopped"); + } + // check if stage has reached negative limit switch + if (checkHWStatus(NLS_MASK) == SUCCESS) + { + stopUser(request); + request.status(ic0fbRequestHandle::ReqStatFailed); + ic0fbFAILURE("Motor reached negative limit switch: stopping"); + } + if (getCurrentPosition(currentPos) == FAILURE) + { + ic0fbFAILURE("Error reading current position from device"); + } + if (m_devicePosTable->getPosInfoFromPosUser(currentPos, + namedPosInfoList) == FAILURE) + { + ic0fbLOG2("Failed retrieving information on named pos from POSUSER class member"); + m_currentNamedPos = "UNDEFINED"; + } + else + { + m_currentNamedPos = namedPosInfoList[0]->posId(); //namedPosInfoList[0]; + } + + + currentPosPar = ic0fbParameter(device().prefix() + "." + sxiniseDevDrvNise::ParPosition, + currentPos); + + currentNamedPosPar = ic0fbParameter(device().prefix() + "." + sxiniseDevDrvNise::ParPosName, + m_currentNamedPos.c_str()); + + + + + request.status(ic0fbRequestHandle::ReqStatCompleted); + + } + else + { + // Initialise HW serial interface + initPar = ic0fbParameter(DevCtrlCommand, CtrlCmdInit); + ic0fbLOG2("Init serial interface"); + if (comInterface().write(initPar) == FAILURE) + { + ic0fbFAILURE("Error writing INIT cmd to serial interface"); + } + // Setting EXEC flag + if (comInterface().write(execPar) == FAILURE) + { + ic0fbFAILURE("Error writing EXEC flag to device"); + } + ic0fbUtils::sleep(float(3.0)); + m_devHWIsInit = true; + + if (getCurrentPosition(currentPos) == FAILURE) + { + ic0fbFAILURE("Error reading current position from device"); + } + currentPosPar = ic0fbParameter(device().prefix() + "." + sxiniseDevDrvNise::ParPosition, + -99); + currentNamedPosPar = ic0fbParameter(device().prefix() + "." + sxiniseDevDrvNise::ParPosName, + m_currentNamedPos.c_str()); + + } + + request.addOutputPar(currentPosPar); + request.addOutputPar(currentNamedPosPar); + if (device().db().write("status", StatusIdle, ic0fbDb::DbDataPt) == FAILURE) + { + ic0fbFAILURE("Error writing status to database"); + } + + return SUCCESS; +} + +ccsCOMPL_STAT sxiniseDevDrvNise::statusStatusUser( + ic0fbRequestHandle& request +) +{ + ic0fbTRACE; + ic0fbLOG2("sxiniseDevDrvNise::statusStatusUser ..."); + ccsCOMPL_STAT opStatus = SUCCESS; + ic0fbParameter currentPosPar; + ic0fbParameter currentNamedPosPar; + ic0fbParameter statusPar; + ic0fbParameter initPar; //(DevCtrlCommand, CtrlCmdInit); + ic0fbParameter execPar(DevCtrlExecute, (vltLOGICAL) TRUE); + ic0fbPars_t rawPars; + ic0fbPars_t errPars; + string strTheorPosMM = "", strEncPosMM = ""; + ostringstream ostrmCmd; + istringstream istrmHWStatus; +// string::size_type commaPos = string::npos; +// string::size_type suffixPos = string::npos; + bitset<8> bitHWStatus; + vltDOUBLE currentPos = -99; + + if (device().db().write("status", StatusBusy, ic0fbDb::DbDataPt) == FAILURE) + { + ic0fbFAILURE("Error writing status to database"); + } + + + if (comInterface().read(ic0fbDevice::DevStatInitialised.c_str(), + initPar) == FAILURE) + { + ic0fbFAILURE("Failed reading initialisation flag"); + } + ic0fbLOG2("initPar.booleanValue() %d && m_devHWIsInit %d", initPar.booleanValue(), m_devHWIsInit); + if (initPar.booleanValue() && m_devHWIsInit) + { + if (checkHWStatus(ERR_MASK) == SUCCESS) + { + request.status(ic0fbRequestHandle::ReqStatFailed); + offUser(request); + if (checkForErrors(errPars) == FAILURE) + { + ic0fbFAILURE("Error %s", errPars[0].getValAsString().c_str()); + } + ic0fbFAILURE("Status reported error on HW device."); + } + + // check if stage has reached positive limit switch + if (checkHWStatus(PLS_MASK) == SUCCESS) + { + // + ic0fbLOG2("PLS_MASK %s", PLS_MASK.to_string().c_str()); + stopUser(request); + request.status(ic0fbRequestHandle::ReqStatFailed); + ic0fbFAILURE("Motor reached positive limit switch: stopped"); + } + // check if stage has reached negative limit switch + if (checkHWStatus(NLS_MASK) == SUCCESS) + { + stopUser(request); + request.status(ic0fbRequestHandle::ReqStatFailed); + ic0fbFAILURE("Motor reached negative limit switch: stopping"); + } + + if (getCurrentPosition(currentPos) == FAILURE) + { + ic0fbFAILURE("Error reading current position from device"); + } + + ic0fbLOG2("Received string from device: %s", rawPars[0].getValAsString().c_str()); + currentPosPar = ic0fbParameter(device().prefix() + "." + sxiniseDevDrvNise::ParPosition, + currentPos +); + + currentNamedPosPar = ic0fbParameter(device().prefix() + "." + sxiniseDevDrvNise::ParPosName, + m_currentNamedPos.c_str()); + + + request.status(ic0fbRequestHandle::ReqStatCompleted); + } + else + { + // Initialise HW serial interface + initPar = ic0fbParameter(DevCtrlCommand, CtrlCmdInit); + ic0fbLOG2("Init serial interface"); + if (comInterface().write(initPar) == FAILURE) + { + ic0fbFAILURE("Error writing INIT cmd to serial interface"); + } + // Setting EXEC flag + if (comInterface().write(execPar) == FAILURE) + { + ic0fbFAILURE("Error writing EXEC flag to device"); + } + ic0fbUtils::sleep(float(3.0)); + m_devHWIsInit = true; + + if (getCurrentPosition(currentPos) == FAILURE) + { + ic0fbFAILURE("Error reading current position from device"); + } + currentPosPar = ic0fbParameter(device().prefix() + "." + sxiniseDevDrvNise::ParPosition, + -99); + currentNamedPosPar = ic0fbParameter(device().prefix() + "." + sxiniseDevDrvNise::ParPosName, + m_currentNamedPos.c_str()); + + } + + request.addOutputPar(currentPosPar); + request.addOutputPar(currentNamedPosPar); + if (device().db().write("status", StatusIdle, ic0fbDb::DbDataPt) == FAILURE) + { + ic0fbFAILURE("Error writing status to database"); + } + + request.status(ic0fbRequestHandle::ReqStatCompleted); + return opStatus; +} + + +ccsCOMPL_STAT sxiniseDevDrvNise::stopUser( + ic0fbRequestHandle& request +) +{ + ic0fbTRACE; + + ic0fbLOG1("sxiniseDevDrvNise::stopUser()"); + ostringstream ostrmCmd; + ccsCOMPL_STAT opStatus = SUCCESS; + ostrmCmd << "2STP"; + ic0fbLOG2("Stopping the device motion %s ...", ostrmCmd.str().c_str()); + request.requestTime(ic0fbUtils::time()); // in microsec + if (writeCommandString(ostrmCmd.str()) == FAILURE) + { + ic0fbFAILURE("Error writing HOMING string to the device"); + opStatus = FAILURE; + } + + return opStatus; +} + + +ccsCOMPL_STAT sxiniseDevDrvNise::stopStatusUser( + ic0fbRequestHandle& request +) +{ + ic0fbTRACE; + + ic0fbLOG2("sxiniseDevDrvNise::stopStatusUser(...) ..."); + + if ((request.timeElapsed()*1e6) < (device().getTimeout()*1e3)) + { + if (checkHWStatus(STOP_MASK)) + { + request.status(ic0fbRequestHandle::ReqStatCompleted); + } + } + else + { + request.status(ic0fbRequestHandle::ReqStatFailed); + offUser(request); + ic0fbFAILURE("SETUP command went timeout, set device to OFF"); + } + + return SUCCESS; +} + + +ccsCOMPL_STAT sxiniseDevDrvNise::writeUser( + ic0fbRequestHandle& request +) +{ + ic0fbTRACE; + ic0fbLOG2("sxiniseDevDrvNise::writeUser(...) ..."); + if (ic0fbDevDrvBase::writeUser(request) == FAILURE) + { + ic0fbFAILURE("Error executing Device Driver Write Operation"); + } + + return SUCCESS; +} + + +ccsCOMPL_STAT sxiniseDevDrvNise::writeStatusUser( + ic0fbRequestHandle& request +) +{ + ic0fbTRACE; + ic0fbLOG2("writeStatusUser"); + ic0fbLOG4("Provide implementation of " + "sxiniseDevDrvNise::writeStatusUser()"); + + + request.status(ic0fbRequestHandle::ReqStatCompleted); + + return SUCCESS; +} + + +/* + * +*/ +ccsCOMPL_STAT sxiniseDevDrvNise::checkForErrors(ic0fbPars_t& _rawPars) +{ + ic0fbTRACE; + ic0fbLOG2("sxiniseDevDrvNise::checkForErrors ..."); + + ccsCOMPL_STAT opStatus = SUCCESS; + ic0fbParameter processedPar; + string strCommand = ""; + + // Check for errors + strCommand = "2ERR?"; + ic0fbLOG2("Checking for errors ... %s ", strCommand.c_str()); + if (writeCommandString(strCommand) == FAILURE) + { + ic0fbFAILURE("Failed writing command to check for errors.") + } + else + { + ic0fbUtils::sleep(float(0.2)); + // Reading the received status from input channel 0 + if (comInterface().read(ioMgr().inputSignalNames(), _rawPars) == FAILURE) + { + ic0fbERR_LOG("Received string from device: %s || Read in: %s", _rawPars[0].getValAsString().c_str(), + ioMgr().inputSignalNames()[0].c_str()); + opStatus = FAILURE; + // ic0fbFAILURE("Error reading Input from the device"); + } + else + { + ic0fbLOG2("Successfully received error string from device: %s", _rawPars[0].getValAsString().c_str()); + + if ((_rawPars[0].getValAsString() == m_cmdPrefix + "0" + m_cmdSuffix) || + (_rawPars[0].getValAsString() == "\n") || + (_rawPars[0].getValAsString() == "\r")) + { + ic0fbLOG2("No error"); + } + else + { + // request.status(ic0fbRequestHandle::ReqStatFailed); + ic0fbERR_LOG("Error string received: %s || len %lu", _rawPars[0].getValAsString().c_str(), + _rawPars[0].getValAsString().size()); + + opStatus = FAILURE; + // ic0fbFAILURE("Device sent error: ***%s***", _rawPars[0].getValAsString().c_str()); + } + } + } + return opStatus; +} + + +ccsCOMPL_STAT sxiniseDevDrvNise::clearErrorBuffer() +{ + ic0fbTRACE; + ic0fbLOG2("sxiniseDevDrvNise::clearErrorBuffer ..."); + ccsCOMPL_STAT opStatus = SUCCESS; + string strCmd; + + + strCmd = "2CER"; + if (writeCommandString(strCmd) == FAILURE) + { + ic0fbFAILURE("Unable to clear errors from HW"); + opStatus = FAILURE; + } + + + return opStatus; +} + + +ccsCOMPL_STAT sxiniseDevDrvNise::writeCommandString(const string& _cmdStr) +{ + ic0fbTRACE; + ic0fbLOG2("sxiniseDevDrvNise::writeCommandString ..."); + ccsCOMPL_STAT opStatus = SUCCESS; + ostringstream ostrmCmd; + ic0fbParameter processedPar; + ic0fbParameter writePar; + ic0fbParameter execPar; + + ic0fbLOG2("writeCommandString %s", _cmdStr.c_str()); + + ostrmCmd << _cmdStr; + processedPar = ic0fbParameter(DevCtrlTextOut0, ostrmCmd.str()); + // Write the processed parameter to the device. + if (comInterface().write(processedPar) == FAILURE) + { + ic0fbERR_LOG("Error sending %s command to device", ostrmCmd.str().c_str()); + opStatus = FAILURE; + } + else + { + // Send WRITE command + writePar = ic0fbParameter(DevCtrlCommand, CtrlCmdWrite); + ic0fbLOG2("write parameter %s", writePar.getValAsString().c_str()); + if (comInterface().write(writePar) == FAILURE) + { + ic0fbERR_LOG("Error seding WRITE command to device"); + opStatus = FAILURE; + } + else + { + // Set the execute flag + ic0fbLOG2("Set the execute flag for command %s", _cmdStr.c_str()); + execPar = ic0fbParameter(DevCtrlExecute, (vltLOGICAL) TRUE); + if (comInterface().write(execPar) == FAILURE) + { + ic0fbERR_LOG("Error writing the EXEC flag to device"); + opStatus = FAILURE; + } + } + } + ic0fbUtils::sleep(float(0.1)); + return opStatus; +} + + +ccsCOMPL_STAT sxiniseDevDrvNise::checkDevStatus(ic0fbParameter& _statusPar) +{ + ic0fbTRACE; + ic0fbLOG2("sxiniseDevDrvNise::checkDevStatus ..."); + ccsCOMPL_STAT opStatus = SUCCESS; + ic0fbParameter statusPar; + + if (comInterface().read(ic0fbDevice::DevStatStatus, _statusPar) == FAILURE) + { + ic0fbFAILURE("Error reading status parameter: %s", + ic0fbDevice::DevStatStatus.c_str()); + } + else + { + ic0fbLOG2("ic0fbDevice::DevStatStatus = %d", _statusPar.integerValue()); + if (_statusPar.integerValue() == 2) + { + // device is not initialised + m_devHWIsInit = false; + opStatus = FAILURE; + ic0fbERR_LOG("Device HW not initialised, please initialise it."); + } + } + + + return opStatus; +} + + +ccsCOMPL_STAT sxiniseDevDrvNise::checkHWStatus(const bitset<8>& _chk_mask) +{ + ic0fbTRACE; + ic0fbLOG2("sxiniseDevDrvNise::checkHWStatus ..."); + ccsCOMPL_STAT opStatus = SUCCESS; + ic0fbParameter currentPosPar; + ic0fbParameter currentNamedPosPar; + ic0fbParameter statusPar; + ic0fbPars_t rawPars; + ic0fbPars_t errPars; + string strTheorPosMM = "", strEncPosMM = ""; + ostringstream ostrmCmd; + istringstream istrmHWStatus; + unsigned long long ullStatus; +// string::size_type commaPos = string::npos; + string::size_type suffixPos = string::npos; + bitset<8> bitHWStatus; + + ic0fbLOG2("checkHWStatus"); + if (device().db().write("status", StatusBusy, ic0fbDb::DbDataPt) == FAILURE) + { + ic0fbFAILURE("Error writing status to database"); + } + + //////////////////////////////// + // sending request for status // + //////////////////////////////// + ostrmCmd << "2STA?"; + if (writeCommandString(ostrmCmd.str()) == FAILURE) + { + ic0fbFAILURE("Error writing %s command to device", ostrmCmd.str().c_str()); + } + else + { + //////////////// + // get answer // + //////////////// + if (readAnswer(rawPars) == FAILURE) + { + ic0fbFAILURE("Error reading status parameter: %s", + ic0fbDevice::DevStatStatus.c_str()); + } + else + { + // reading answer for STA? command; if limit switch reached or error set status to FAILURE. + // Other statuses are OK. + // Position will be asked on the basis of status + + // `\n\r` is removed from the output string, from the result is created a string stream + // used to perform convertion to double and finally to bitset + suffixPos = rawPars[0].getValAsString().find(m_cmdSuffix); + if (suffixPos != string::npos) + { + // getting the bitset from the status for comparison with status masks + istrmHWStatus.str(rawPars[0].getValAsString().substr(1,suffixPos-1)); + istrmHWStatus >> ullStatus; + bitHWStatus = bitset<8>(ullStatus); + ic0fbLOG2("Status mask %s", bitHWStatus.to_string().c_str()); + // check status bit mask with input check mask + if ((bitHWStatus & _chk_mask) == _chk_mask) + { + // request.status(ic0fbRequestHandle::ReqStatCompleted); + opStatus = SUCCESS; + } + else + { + opStatus = FAILURE; + } + } + } + } + return opStatus; +} + + + + +ccsCOMPL_STAT sxiniseDevDrvNise::readAnswer(ic0fbPars_t& _rawPars) +{ + ic0fbTRACE; + ic0fbLOG2("sxiniseDevDrvNise::readAnswer ..."); + ccsCOMPL_STAT opStatus = SUCCESS; + if (comInterface().read(ioMgr().inputSignalNames(), _rawPars) == FAILURE) + { + ic0fbERR_LOG("Failed reading answer from device hardware"); + opStatus = FAILURE; + } + else + { + ic0fbLOG2("Received string from device: %s || Read in: %s", _rawPars[0].getValAsString().c_str(), + ioMgr().inputSignalNames()[0].c_str()); + } + return opStatus; +} + + +ccsCOMPL_STAT sxiniseDevDrvNise::getCurrentPosition(vltDOUBLE& _position) +{ + ic0fbTRACE; + ic0fbLOG2("sxiniseDevDrvNise::getCurrentPosition ..."); + ccsCOMPL_STAT opStatus = SUCCESS; + vltDOUBLE encPosMM; + vltDOUBLE theorPosMM; + string strTheorPosMM; + string strEncPosMM; + ostringstream ostrmCmd; + string::size_type commaPos = string::npos; + ic0fbPars_t rawPars; + ic0fbPars_t errPars; + + ostrmCmd.str(""); + ostrmCmd.clear(); + ostrmCmd << "2POS?"; + rawPars.clear(); + if (writeCommandString(ostrmCmd.str()) == FAILURE) + { + opStatus = FAILURE; + } + else + { + ic0fbUtils::sleep(float(0.1)); + rawPars.clear(); + // read answer from device + if (readAnswer(rawPars) == FAILURE) + { + ic0fbFAILURE("Error reading answer from device: %s", + ic0fbDevice::DevStatStatus.c_str()); + opStatus = FAILURE; + } + else + { + // Position is given as string "#Theoretical position in mm, Encoder position in mm\n\r" + // + // then string is split at the comma, then: + // - `#` is removed from strTheorPosMM + // - `\n\r` are removed from strEncPosMM + // strTheorPosMM and strEncPosMM are converted to double + // comparison with position table is done with are converted to double + // comparison with position table is done with strEncPosMM + ic0fbLOG2("Received answer %s", rawPars[0].getValAsString().c_str()); + commaPos = rawPars[0].getValAsString().find(","); + strTheorPosMM = rawPars[0].getValAsString().substr(1, commaPos - 1); + strEncPosMM = rawPars[0].getValAsString().substr(commaPos + 1, + rawPars[0].getValAsString().size()-2); + + ic0fbLOG2("theoretical = %s | encoder = %s", strTheorPosMM.c_str(), strEncPosMM.c_str()); + + std::istringstream(strEncPosMM) >> encPosMM; + std::istringstream(strTheorPosMM) >> theorPosMM; + ic0fbLOG2("encoder = %+9.6f", encPosMM); + + _position = encPosMM; + + } + } + return opStatus; +} + + +ccsCOMPL_STAT sxiniseDevDrvNise::initialiseMotor() +{ + ic0fbTRACE; + ic0fbLOG2("sxiniseDevDrvNise::initialiseMotor ..."); + ccsCOMPL_STAT opStatus = SUCCESS; + ostringstream ostrmCmd; + ic0fbParameter initPar(DevCtrlCommand, CtrlCmdInit); + ic0fbParameter execPar(DevCtrlExecute, (vltLOGICAL) TRUE); + ic0fbParameter writePar(DevCtrlCommand, CtrlCmdWrite); + ic0fbParameter processedPar; + ic0fbPars_t rawPars; + + // Initialise HW serial interface + ic0fbLOG2("Init serial interface"); + if (comInterface().write(initPar) == FAILURE) + { + ic0fbFAILURE("Error writing INIT cmd to serial interface"); + } + // Setting EXEC flag + if (comInterface().write(execPar) == FAILURE) + { + ic0fbFAILURE("Error writing EXEC flag to device"); + } + + // Sleep to be sure the serial interface has been initialised + ic0fbUtils::sleep(3.0); + + // ostrmCmd << "2DEF"; + + // if (writeCommandString(ostrmCmd.str()) == FAILURE) + // { + // ic0fbERR_LOG("Failed setting factory defaults"); + // return FAILURE; + // } + + // Homing the device + ostrmCmd.str(""); + ostrmCmd.clear(); + ic0fbLOG2("Homing the device %s ...", ostrmCmd.str().c_str()); + ostrmCmd << "2HOM"; + if (writeCommandString(ostrmCmd.str()) == FAILURE) + { + ic0fbFAILURE("Error writing HOMING string to the device"); + } + m_devHWIsStopped = false; + + return opStatus; + +} + + + +ccsCOMPL_STAT sxiniseDevDrvNise::checkMotorHoming() +{ + ic0fbTRACE; + + ic0fbLOG2("sxiniseDevDrvNise::checkMotorHoming()"); + ccsCOMPL_STAT opStatus = SUCCESS; + ostringstream ostrmCmd; + ic0fbParameter processedPar; + ic0fbPars_t rawPars; + // Check if homing procedure has been carried out + ostrmCmd.str(""); + ostrmCmd.clear(); + processedPar.reset(); + rawPars.clear(); + + if (device().db().write("status", StatusBusy, ic0fbDb::DbDataPt) == FAILURE) + { + ic0fbFAILURE("Error initialising status to database"); + } + + ostrmCmd << "2HOM?"; + // ic0fbLOG2("time Elapsed %f", request.timeElapsed()*1e6); + // timeElapsed returns value in sec, while timeout in microsec + // while ((request.timeElapsed()*1e6) firmwareInfo; + firmwareInfo[ic0fbDriverInfo::ParInfoTagName] = className(); + firmwareInfo[ic0fbDriverInfo::ParInfoTagPlatform] = ic0fbUtils::platform(); + firmwareInfo[ic0fbDriverInfo::ParInfoTagVersion] = + ic0fbUtils::getVersionFromScmId(rcsId); + firmwareInfo[ic0fbDriverInfo::ParInfoTagDate] = + ic0fbUtils::getDateFromScmId(rcsId); + firmwareInfo[ic0fbDriverInfo::ParInfoTagSynopsis] = + "Special device driver simulator for SOXS NIR Slit Exchanger"; + firmwareInfo[ic0fbDriverInfo::ParInfoTagDescription] = + "Special device driver simulator for SOXS NIR Slit Exchanger"; + + if (addFirmwareInfo(firmwareInfo) == FAILURE) + { + ic0fbFAILURE("%s: Error adding firmware info", + device().alias().c_str()); + } + //////////////////////////////////////////////////////////////////////////// + + ic0fbDevDrvSimBase::initialiseDeviceUser(); + + return SUCCESS; +} + + +ccsCOMPL_STAT sxiniseDevDrvSimNise::procedureUser( + const string& procedure, + ic0fbPars_t& parameters +) +{ + ic0fbTRACE; + ic0fbLOG1("procedureUser"); + ic0fbLOG1("Provide implementation of " + "sxiniseDevDrvSimNise::procedureUser()"); + + return SUCCESS; +} + + +ccsCOMPL_STAT sxiniseDevDrvSimNise::readUser( + ic0fbList& parNames, + ic0fbPars_t& parameters +) +{ + ic0fbTRACE; + ic0fbLOG2("readUser %d params", parNames.size()); + string::size_type suffixPos = string::npos; + string retVal; + + ic0fbDevDrvSimBase::readUser(parNames, parameters); + + // priority goes to error checking, so flag on error asked drives the switch case + if (m_errorAsked) + { + // handling request for error + ic0fbLOG2("Handling request for error"); + for (uint i = 0 ; i < parameters.size(); i++) + { + if (parameters[i].internalName() == "StatTextIn0") + { + parameters[i].setVal(m_errorMsg); + ic0fbLOG2("setting value of StatTextIn0 to: %s", m_errorMsg.c_str()); + } + } + // resetting the flag + m_errorAsked = 0; + ic0fbLOG2("Reset home m_errorAsked flag to %d", m_errorAsked); + // break; + } + else + { + if (m_posAsked) + { + ic0fbLOG2("value for flag m_posAsked = %d", m_posAsked); + ic0fbLOG2("Last known position: %s mm", m_myPosition.c_str()); + suffixPos = m_myPosition.find(m_cmdSuffix); + retVal = m_myPosition.substr(0, suffixPos)+","+m_myPosition.substr(1,m_myPosition.size()); + + for (uint i = 0 ; i < parameters.size(); i++) + { + if (parameters[i].internalName() == "StatTextIn0") + { + parameters[i].setVal(retVal);//m_myPosition); + ic0fbLOG2("setting value of StatTextIn0 to: %s", retVal.c_str()); //m_myPosition.c_str()); + } + } + // reset the flag + m_posAsked = false; + ic0fbLOG2("Reset m_posAsked flag to %d", m_posAsked); + } + else + { + // If has been sent a get home status command + if (m_homeStatusAsked) + { + ic0fbLOG2("Home status: %s",m_homeStatus.c_str()); + for (uint i = 0 ; i < parameters.size(); i++) + { + if (parameters[i].internalName() == "StatTextIn0") + { + parameters[i].setVal(m_homeStatus); + ic0fbLOG2("setting value of StatTextIn0 to: %s", m_homeStatus.c_str()); + } + } + // reset the flag + m_homeStatusAsked = false; + ic0fbLOG2("Reset m_homeStatusAsked flag to %d", m_homeStatusAsked); + } + else + { + // if a get status command has been sent + if (m_statusAsked) + { + ic0fbLOG2("Handling request device status"); + for (uint i = 0 ; i < parameters.size(); i++) + { + if (parameters[i].internalName() == "StatTextIn0") + { + ic0fbLOG2("setting value of StatTextIn0 to: %s", "8"); + parameters[i].setVal(m_cmdPrefix + "8" + m_cmdSuffix); + } + } + m_statusAsked = false; + ic0fbLOG2("Reset m_statusAsked flag to %d", m_statusAsked); + } + } + } + } + + // Updating the status in the OLDB and setting the flag IDLE + ic0fbLOG3("Updating the status in the OLDB and setting the flag IDLE"); + if (device().db().write("status", 1, ic0fbDb::DbDataPt) == + FAILURE) + { + ic0fbFAILURE("Error initialising status to database"); + } + return SUCCESS; +} + + +ccsCOMPL_STAT sxiniseDevDrvSimNise::scanUser( + ic0fbPars_t& parameters +) +{ + ic0fbTRACE; + ic0fbLOG2("scanUser"); + + // if (ic0fbDevDrvSimBase::scanUser(parameters) == FAILURE) + // { + // ic0fbFAILURE("Error executing Device Driver Scan Operation"); + // } + + return SUCCESS; +} + + +ccsCOMPL_STAT sxiniseDevDrvSimNise::writeUser( + ic0fbPars_t& parameters +) +{ + ic0fbTRACE; + string parValStr; + stringstream cmdss; + + + ic0fbLOG2("writeUser %d parameters", parameters.size()); + + // Standard commands + // Commands defined as integer + if (parameters[0].type() == ic0fbTypeInteger) + { + // NONE commands defined as integer + if (parameters[0].integerValue() == sxiniseDevDrvNise::CtrlCmdNone) + { + ic0fbLOG2("NONE CMD received."); + } + else if (parameters[0].integerValue() == sxiniseDevDrvNise::CtrlCmdInit) + { + ic0fbLOG2("INIT CMD received"); + } + else if (parameters[0].integerValue() == sxiniseDevDrvNise::CtrlCmdWrite) + { + ic0fbLOG2("WRITE CMD received"); + } + else + { + ic0fbLOG2("GENERIC CMD received"); + } + } + + // Commands defined as boolean + if (parameters[0].type() == ic0fbTypeBoolean) + { + // EXEC cmd as boolean + if (parameters[0].booleanValue() == TRUE) + { + ic0fbLOG2("EXEC command received"); + } + } + + if (parameters[0].type() == ic0fbTypeString) + { + parValStr = parameters[0].getValAsString(); + ic0fbLOG1("Parameter %s is of type string", parameters[0].name().c_str()); + // switch (parValStr.size()) + // { + // case 4: + // { + if (parValStr == string("2HOM")) + { + ic0fbLOG2("Homing command received"); + // status returned by controller after successfull homing + parameters[0].setVal(m_cmdPrefix+"1" + m_cmdSuffix); + m_myPosition = m_cmdPrefix+ "0.0" + m_cmdSuffix; + m_homeStatus = m_cmdPrefix+ "1" + m_cmdSuffix; + // break; + } + else + { + if (parValStr == string("2HOM?")) + { + ic0fbLOG2("Get home status received"); + m_myPosition = m_cmdPrefix+ "0.0" + m_cmdSuffix; //0.0; + m_homeStatusAsked = true; + } + else + { + if (parValStr == string("2POS?")) + { + ic0fbLOG2("Read position command received"); + m_posAsked = true; + } + else + { + if (parValStr == string("2ERR?")) + { + ic0fbLOG2("%s command received", parValStr.c_str()); + m_errorAsked = 1; + ic0fbLOG2("Set m_errorAsked flag to %d", m_errorAsked); + } + else + { + if (parValStr == string("2CER")) + { + ic0fbLOG1("Cleared errors"); + } + else + { + if (parValStr == string("2STA?")) + { + ic0fbLOG2("%s command received", parValStr.c_str()); + m_statusAsked = true; + } + else + { + if ((parValStr.find("2MVA") != string::npos)) + { + cmdss << parValStr.substr(4, string::npos); //pos; + ic0fbLOG2("Move absolute command received: %s", parValStr.c_str()); + m_myPosition = m_cmdPrefix + cmdss.str() + m_cmdSuffix; + } + else + { + if ((parValStr.find("2STP") != string::npos)) + { + ic0fbLOG1("Stopped device on request"); + } + else + { + ic0fbFAILURE("Invalid command received!"); + m_errorMsg = "Invalid Command"; + } + } + } + } + } + } + } + } + } + return SUCCESS; +} + +// EOF + + + + + + + + + + diff --git a/ICS/sxinise/src/sxiniseDevSimNise.C b/ICS/sxinise/src/sxiniseDevSimNise.C new file mode 100644 index 0000000..d94b73a --- /dev/null +++ b/ICS/sxinise/src/sxiniseDevSimNise.C @@ -0,0 +1,38 @@ +//////////////////////////////////////////////////////////////////////////////// +// ESO - VLT Project +// +// "@(#) $Id: sxiniseDevSimNise.C 329452 2020-01-17 14:09:40Z mdepasca $" +// +// Who When What +// -------- ---------- ------------------------------------------------------- +// jknudstr 2009-11-30 Created +// UPDATE UPDATE Updated from template +//------------------------------------------------------------------------------ + +//////////////////////////////////////////////////////////////////////////////// +// NAME +// UPDATE: sxiniseDevSimNise - Template for IC0FB an Device Simulator +// Process. +//------------------------------------------------------------------------------ + +#define _POSIX_SOURCE 1 +#include "vltPort.h" + +ATTRIBUTE_UNUSED static const char* rcsId="@(#) $Id: sxiniseDevSimNise.C 329452 2020-01-17 14:09:40Z mdepasca $"; + +#include "ic0fbDevSimBase.h" +#include "sxiniseDevDrvSimNise.h" + +/// @brief UPDATE: Write specific documentation here. +/// +/// UPDATE: Write specific documentation here. + + +// Main function. +int main(int argc, + char* argv[]) +{ + ic0fbEXECUTE_DEV_SIM("Nise", sxiniseDevDrvSimNise); +} + +// EOF diff --git a/ICS/sxinise/src/sxiniseDevSrvNise.C b/ICS/sxinise/src/sxiniseDevSrvNise.C new file mode 100644 index 0000000..61da05e --- /dev/null +++ b/ICS/sxinise/src/sxiniseDevSrvNise.C @@ -0,0 +1,52 @@ +//////////////////////////////////////////////////////////////////////////////// +// ESO - VLT Project +// +// "@(#) $Id: sxiniseDevSrvNise.C 329452 2020-01-17 14:09:40Z mdepasca $" +// +// Who When What +// -------- ---------- ------------------------------------------------------- +// mdepasca 2019-09-30 Using open OPC UA libraries +// jknudstr 2009-11-09 Created +// UPDATE UPDATE Updated from template +//------------------------------------------------------------------------------ + +//////////////////////////////////////////////////////////////////////////////// +// NAME +// UPDATE: sxiniseDevSrvNise - Template for IC0FB Device Servers. +//------------------------------------------------------------------------------ + +#define _POSIX_SOURCE 1 +#include "vltPort.h" + +ATTRIBUTE_UNUSED static const char* rcsId="@(#) $Id: sxiniseDevSrvNise.C 329452 2020-01-17 14:09:40Z mdepasca $"; + +#include "ic0fbDevSrv.h" +#include "sxiniseDevDrvNise.h" +#include "ic0fboIfOpcUa.h" +#include "ic0fbIfCcs.h" + + +// Instantiate, initialise and run the Device Server with the +// Device Driver and the Communication Interfaces. +int main(int argc, + char* argv[]) +{ + ////////////////////////////////// + // device driver in development // + ////////////////////////////////// + // ic0fbEXECUTE_DEVICE_SERVER(ic0fbDevSrv, + // sxiniseDevDrvNise, + // ic0fbIfCcs, //ic0fboIfOpcUa, + // ic0fbIfCcs); + + + ic0fbEXECUTE_DEVICE_SERVER(ic0fbDevSrv, + sxiniseDevDrvNise, + ic0fboIfOpcUa, + ic0fbIfCcs); + +} + + +// EOF + diff --git a/ICS/sxipan/ChangeLog b/ICS/sxipan/ChangeLog new file mode 100644 index 0000000..e97d820 --- /dev/null +++ b/ICS/sxipan/ChangeLog @@ -0,0 +1,112 @@ +Wed Jun 29 09:12:33 2016 + + * src/xxipanControl.pan,v : + Removed (actually commented) unused frame Notebook2 + +Thu Jun 23 11:31:32 2016 + + * src/xxipanControl.pan,v : + Panel initialization moved to a common procedure. + Add setting of panel and notebook dimensions. + Add minimum size in order to be sure the ICS status widgets is + always visible. (VLTSW-12360) + + +Tue Sep 30 10:07:47 2008 xxipan version: 1.29 + * (DPO): + * Addition of xxilamp widget for the workshop. +Fri Jul 1 11:42:50 2005 Antonio Longinotti + + * src/Makefile: fixed bug with manpages + +Fri Jul 01 11:42:14 2005 xxipan version: 1.28 +Tue Jul 27 11:16:42 2004 Antonio Longinotti + + * src/xxipanControl.pan: bug fix + +Wed Jul 14 16:39:08 2004 xxipan version: 1.27 +Thu Nov 27 16:14:58 2003 Antonio Longinotti + + * src/xxipanControl.pan: removed not existing library + +Thu Nov 27 16:06:12 2003 xxipan version: 1.26 +Tue Sep 23 10:19:06 2003 Antonio Longinotti + + * src/xxipanControl.pan: contents of xxipanControl.tcl merged here + +Tue Sep 23 10:11:55 2003 xxipan version: 1.25 +Wed Sep 3 16:59:03 2003 Antonio Longinotti + + * src/Makefile: examples moved to icbpan/test + +Wed Sep 03 09:48:35 2003 xxipan version: 1.24 +Tue Sep 2 13:02:06 2003 Antonio Longinotti + + * src/xxipanControl.pan: VLTSW20030305 completed + +Mon Sep 01 16:05:17 2003 xxipan version: 1.23 +Fri Aug 29 17:21:39 2003 Antonio Longinotti + + * src/xxipanControl.pan: VLTSW20030305 + +Mon Aug 18 13:47:05 2003 xxipan version: 1.22 +Fri Nov 29 14:41:39 2002 Antonio Longinotti + + * src/xxipanSpecial_uifClass.tcl: VLTSW20020565 + +Fri Nov 29 11:41:12 2002 xxipan version: 1.21 +Mon Jun 10 12:22:31 2002 Antonio Longinotti + + * src/xxipanSpecial.tcl: VLTSW20020393 + +Mon Jun 10 12:08:36 2002 xxipan version: 1.20 +Wed May 15 15:33:02 2002 xxipan version: 1.19 +Thu Oct 18 11:42:30 2001 Antonio Longinotti + + * tmp/xxmcfgINS.cfg: deleted + +Thu Oct 18 11:32:38 2001 xxipan version: 1.18 +Wed Oct 17 12:57:54 2001 xxipan version: 1.17 +Wed Aug 29 19:03:01 2001 Antonio Longinotti + + * src/xxipanSpecial_uifClass.tcl: data2 uses polling (example) + * src/xxipanControl.pan: added standard options to menu for OLDB refresh + +Wed Aug 29 13:20:29 2001 xxipan version: 1.16 +Tue Aug 28 17:24:07 2001 xxipan version: 1.15 +Mon Aug 13 20:54:21 2001 Antonio Longinotti + + * src/xxipanControl.tcl: ported to icbpan 1.11 + +Thu Aug 09 13:01:57 2001 xxipan version: 1.14 +Tue Jul 31 08:34:30 2001 xxipan version: 1.13 + * man pages improved +Mon Jul 23 10:21:53 2001 xxipan version: 1.12 + * man pages improved +Fri Jul 20 12:57:29 2001 xxipan version: 1.11 + * added man pages +Wed Jul 18 11:15:10 2001 xxipan version: 1.10 + * SPR20010320 implemented +Mon Jul 16 09:03:03 2001 xxipan version: 1.9 + * added xxinsGUI class +Mon Jun 04 14:50:20 2001 xxipan version: 1.8 + * added xxipanGrat.tcl - example for inheritance usage +Mon Jun 04 11:41:38 2001 xxipan version: 1.7 + * xxipanSpecial_uifClass.tcl improved +Fri May 25 13:28:57 2001 Antonio Longinotti + + * src/xxipanSpecial.tcl: added + +Mon May 21 12:51:00 2001 xxipan version: 1.5 + * improved handling of class display +Mon May 21 10:11:57 2001 xxipan version: 1.4 + * added tabnotebook widget +Mon Apr 02 08:49:06 2001 xxipan version: 1.3 + * added menus for handling setup files, selection ... +Thu Mar 22 10:35:51 2001 xxipan version: 1.2 + * created +Mon Jan 8 17:30:43 2001 Antonio Longinotti + + * src/Makefile: added dummy Makefile to be able to build the module + +"@(#) $Id: ChangeLog 285238 2016-06-29 09:14:06Z mcomin $" diff --git a/ICS/sxipan/bitmaps/soxslogo.gif b/ICS/sxipan/bitmaps/soxslogo.gif new file mode 100644 index 0000000000000000000000000000000000000000..b577fee7007f07a8b483e0705bf7e5ea48f6a2b2 GIT binary patch literal 3186 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 literal 0 HcmV?d00001 diff --git a/ICS/sxipan/src/Makefile b/ICS/sxipan/src/Makefile new file mode 100644 index 0000000..2b3b621 --- /dev/null +++ b/ICS/sxipan/src/Makefile @@ -0,0 +1,182 @@ +#******************************************************************************* +# E.S.O. - VLT project +# +# "@(#) $Id: Makefile 353934 2022-03-23 11:55:40Z dricci $" +# +# Makefile of sxipan +# +# who when what +# -------- -------- ---------------------------------------------- +# bsalasni 2022-03-15 Added AFC +# dricci 2018-06-29 Renamed PZT to AFC. +# dricci 2017-05-25 adapted from Template file +# + +#******************************************************************************* +# This Makefile follows VLT Standards (see Makefile(5) for more). +#******************************************************************************* +# REMARKS +# None +#------------------------------------------------------------------------ + +# +# user definable C-compilation flags +#USER_CFLAGS = + +# +# additional include and library search paths +#USER_INC = +#USER_LIB = + +# +# MODULE CODE DESCRIPTION: +# ------------------------ +# As a general rule: public file are "cleaned" and "installed" +# local (_L) are not "installed". + +# +# C programs (public and local) +# ----------------------------- +EXECUTABLES = +EXECUTABLES_L = + +# +# +sxipan_OBJECTS = +sxipan_LDFLAGS = +sxipan_LIBS = + +# +# special compilation flags for single c sources +#yyyyy_CFLAGS = + +# +# Includes (.h) files (public only) +# --------------------------------- +INCLUDES = + +# +# Libraries (public and local) +# ---------------------------- +LIBRARIES = +LIBRARIES_L = + +# +# +lllll_OBJECTS = + +# +# Scripts (public and local) +# ---------------------------- +SCRIPTS = +SCRIPTS_L = + +# +# TCL scripts (public and local) +# ------------------------------ +TCL_SCRIPTS = +TCL_SCRIPTS_L = + +# +# +tttttt_OBJECTS = +tttttt_TCLSH = +tttttt_LIBS = + +# +# TCL libraries (public and local) +# ------------------------------ +TCL_LIBRARIES = sxipanSpecialDev +TCL_LIBRARIES_L = +# tcl classes of the IODEV devices (AFC1 and AFC2) +sxipanSpecialDev_OBJECTS = sxipanNISE \ + sxipanNISE_uifClass \ + sxipanAFC \ + sxipanAFC_uifClass \ + sxipanEntry \ + sxipanNamedPos \ + sxipanNamedPos_uifClass + +# +# UIF panels (public and local) +# ---------------------------- +PANELS = sxipanControl +PANELS_L = + +# +# On-Line Database Files +# ---------------------- +DBL_CLASSES = +DBL_BCF = +DBL_FLAGS = +erer_DBL_FLAGS = + +# +# man pages to be done +# -------------------- +MANSECTIONS = 1 +MAN1 = $(addsuffix .doc, $(PANELS)) + +# +# local man pages +# --------------- +MANl = + +# +# ASCII file to be converted into Framemaker-MIF +# -------------------- +ASCII_TO_MIF = + +# +# INS_ROOT files to be installed +#------------------------------- +INS_ROOT_FILES = +INS_ROOT_DIR = + +# +# other files to be installed +#---------------------------- +INSTALL_FILES = ../bitmaps/*.gif + +# +# list of all possible C-sources (used to create automatic dependencies) +# ------------------------------ +CSOURCENAMES = \ + $(foreach exe, $(EXECUTABLES) $(EXECUTABLES_L), $($(exe)_OBJECTS)) \ + $(foreach lib, $(LIBRARIES) $(LIBRARIES_L), $($(lib)_OBJECTS)) + +# +#>>>>> END OF standard rules + +# +# CHOSE PLATFORM +# -------------- +# Default is UNIX, for VxVorks application next line MUST BE UNCOMMENTED +#MAKE_VXWORKS = on + +# +# INCLUDE STANDARDS +# ----------------- +MAKEDIR = $(VLTROOT)/include +include $(MAKEDIR)/vltMakefile + +# +# TARGETS +# ------- +all: do_all + @echo " . . . 'all' done" + +clean : clean_all + @echo " . . . clean done" + +man : do_man + @echo " . . . man page(s) done" + +install : install_all + @echo " . . . installation done" + +db : db_all + @echo " . . . ../DB done" + + +#___oOo___ diff --git a/ICS/sxipan/src/sxipanAFC.tcl b/ICS/sxipan/src/sxipanAFC.tcl new file mode 100755 index 0000000..3f7bc3b --- /dev/null +++ b/ICS/sxipan/src/sxipanAFC.tcl @@ -0,0 +1,283 @@ +#******************************************************************************* +# E.S.O. - VLT project +# +# "@(#) $Id: sxipanAFC.tcl 355996 2022-05-04 15:39:36Z bsalasni $" +# +# who when what +# -------- ---------- ---------------------------------------------- +# bsalasni 2022/03/15 Created +# +#************************************************************************ +# NAME +# sxipanAFC - sxipan special device implementation for AFC +# (automatic flexure compensation system) +# +# SYNOPSIS +# sxipanAFC .w \ +# -background Grey90 \ +# -relief flat \ +# -cfgObj $cfgObj \ +# -cwp "${devName}" \ +# -devType $devType] +# +# where cfgObj is a ctooCONFIG object; +# devType is extracted from INS.CON.DEVICE${i} +# devName is extracted from ${devType}.DEVNAME +# +# +# DESCRIPTION +# This is the AFC special device itcl wrapper class, which is be +# drawn automatically on the ICS control panel at the startup (provided +# the keyw ${devtype}.UIFCLASS in the sxmcfgINS.cfg is defined). +# +# It allows to send the implemented SETUP keyword: +# MODE: device mode, can be: +# REF set a fixed reference position. +# AUTO enable the automatic positioning +# STAT to move to a specific input position +# POS1: specific input position +# POS2: specific input position +# Example: +# msgSend wsxs sxiControl SETUP "INS.AFC1.MODE REF" +# msgSend wsxs sxiControl SETUP "INS.AFC1.MODE AUTO" +# msgSend wsxs sxiControl SETUP "INS.AFC1.MODE STAT INS.AFC1.POS1 12.34 INS.AFC1.POS2 56.78" +# +# PUBLIC METHODS +# Following the steps needed to create a special device class: +# - inherit sxipanAFC_uifClass in a wrapper itcl class (this class) +# - in the inherited class implement the following methods +# (mandatory) +# * sxipanAFC::isSelected +# - returns 0/1 depending on the current status of the checkbutton +# * sxipanAFC::setSelected { val } +# - set the checkbutton to 1/0 +# * sxipanAFC::getKeyw { } +# - get the string (pair keyw + value) to be sent to xxiControl +# (i.e. these are the parameters for the SETUP cmd) +# * sxipanAFC::setKeyw { val } +# - based on the passed string (pair keyw + value) set +# accordingly the widgets of the uifClass +# +# PUBLIC VARIABLES +# - add the following public variables (mandatory): +# * public variable devType "" +# * public variable cfgObj "" +# +# (if the special device is a kind of sensor add also the +# * public variable isSensor "") +# +# To let the panel load automatically the just created class, add +# all the necessary configuration keywords in the sxmcfgINS.cfg file. +# +# FILES +# +# ENVIRONMENT +# INS_ROOT Instrument root area +# INTROOT Integration area +# VLTROOT VLT area +# +# CAUTIONS +# All the required methods and public variables MUST be implemented, +# even if they will be empty. Due to overhead in fact, no check is +# done on the method's existence. +# +# EXAMPLES +# see synopsis section +# +# SEE ALSO +# +# BUGS +# +#------------------------------------------------------------------------ +# + +class sxipanAFC { + inherit sxipanAFC_uifClass + + constructor {args} { + global ::shArea + + eval itk_initialize -helparea $shArea -relief flat $args + display + after idle [code $this initFunction] + } + + method initFunction { } { + + # initialise Entry widgets + initEntry + + # initialize option button values + set names { "REF" "AUTO" "STAT"} + foreach name $names { + lappend elements $name + lappend helps "" + } + + # initialize option button widget: + # - displayed value = current value of the widget "mode" + # - change selection event = updateWdg + set last [getData mode] + if { [lsearch -exact $elements $last] < 0 } { + set last "" + } + $cv.modeSetup configure -itemList $elements -default $last \ + -command [code $this updateWdg] + + # enable/disable the Entry widgets according to the + # selected mode + enableEntry $last + } + + public method initEntry {} { + + $cv.entry1 configure -valType float + $cv.entry1 configure -minVal "0" + $cv.entry1 configure -maxVal "2000" + $cv.entry1 configHelp "" + + $cv.entry2 configure -valType float + $cv.entry2 configure -minVal "0" + $cv.entry2 configure -maxVal "2000" + $cv.entry2 configHelp "" + } + + public method updateWdg { item } { + global ::gvar + + if {[cequal $item ""]} {return 0} + + #puts "updateWdg::item = $item" + + # select check button + setSelected 1 + + # enable/disable the Entry widgets according to the selected option + enableEntry $item + + # update the values displayed by the Entry widgets + if {[cequal $item $last]} { + # option unchanged + set valueX [getData entry1] + set valueY [getData entry2] + } else { + # option changed + set valueX ""; # clean entry widget value + set valueY ""; # clean entry widget value + } + setData entry1 $valueX + setData entry2 $valueY + + set last $item + } + + # configure the Entry widgets according to the selected option + protected method enableEntry { item } { + + if {[cequal $item "STAT"]} { + $cv.entry1 enable + $cv.entry2 enable + } else { + $cv.entry1 disable + $cv.entry2 disable + } + } + +# return status of the checkbutton + public method isSelected { } { + global ::gvar + + upvar #0 [$cv.devUse cget -variable] sel + return $sel + } + +# set status of the checkbutton + public method setSelected { val } { + global ::gvar + + upvar #0 [$cv.devUse cget -variable] sel + set sel $val + #puts "setSelected::val = $val" + } + +# return the parameters for the SETUP command + public method getKeyw { } { + global ::gvar + + upvar #0 [$cv.entry1 cget -variable] data1 + upvar #0 [$cv.entry2 cget -variable] data2 + upvar #0 [$cv.modeSetup cget -variable] nameval + + if {[cequal $nameval ""]} { return "" } + + if {[cequal $nameval "STAT"]} { + set setup "${devType}.MODE STAT ${devType}.POS1 ${data1} ${devType}.POS2 ${data2}" + } + + if {[cequal $nameval "AUTO"]} { + set setup "${devType}.MODE AUTO" + } + + if {[cequal $nameval "REF"]} { + set setup "${devType}.MODE REF" + } + + return $setup + } + + +# based on the passed string (pair keyw + value) set +# accordingly the widgets of the uifClass + public method setKeyw { val } { + global ::gvar + + set keyw [lindex $val 0] + set value [lindex $val 1] + + set newOption "" + set newValue "" + if { [cequal ${devType}.POS1 $keyw] } { + setSelected 1 + set newOption "STAT" + $cv.entry2 configure -default $value + } elseif { [cequal ${devType}.POS2 $keyw] } { + setSelected 1 + set newOption "STAT" + $cv.entry2 configure -default $value + } else { + set newOption "" + } + + #puts "setKwd:: newOption=|$newOption| newValue=|$newValue| last=|$last|" + + if {![cequal $newOption ""]} { + set last $newOption + $cv.modeSetup configure -default $last + } + } + + # return the list of entry widgets whose variable must be traced + public method entryWdg { } { + return {entry1 entry2} + } + + protected method setData { widget value } { + $cv.$widget configure -default $value + $cv.$widget setValue $value + } + + protected method getData { widget } { + upvar #0 [ $cv.$widget cget -variable] wdgVar + return $wdgVar + } + + public variable devType "" + public variable cfgObj "" + + private variable elements {} + private variable names {} + private variable helps {} + private variable last "" +} + +# ___oOo___ diff --git a/ICS/sxipan/src/sxipanAFC_uifClass.tcl b/ICS/sxipan/src/sxipanAFC_uifClass.tcl new file mode 100644 index 0000000..99e2c21 --- /dev/null +++ b/ICS/sxipan/src/sxipanAFC_uifClass.tcl @@ -0,0 +1,192 @@ +# +#************************************************************* +# E.S.O. - VLT project +# +# "@(#) $Id: sxipanAFC_uifClass.tcl 355996 2022-05-04 15:39:36Z bsalasni $" +# +# sxipanAFC_uifClass.tcl +# +# This file has been produced by the panel editor +# version: panel.tcl 330695 +# date : Wed May 04 14:58:01 UTC 2022 +# +# !!!!!!!!!! DO NOT MANUALLY EDIT THIS FILE !!!!!!!!! +# +#-------------------------------------------------------------- + + +class sxipanAFC_uifClass { + inherit UifPanel + + constructor {args} { + + global ::shArea + panSetAutoPath {} libsxipanSpecialDev + parseClassName $this + + itk_component add top { + canvas $itk_interior.cv -width 439 -height 114 \ + -borderwidth 2 -highlightthickness 0 + } { + keep -relief + } + + pack $itk_component(top) -fill both -expand 1 + eval itk_initialize $args + +UifFrame $cv.sxipanAFC-wdg1 -canvasAnchor nw -height 100 \ + -width 2 +UifOutput $cv.curpos1 -anchor center -canvasAnchor nw \ + -color #000000 -dbMode dbEvent -evtFilter != \ + -evtScript {panEvtDbUpdate curpos1 %A %T %D %Q} \ + -font -Adobe-courier-medium-r-normal--14*-iso8859-1 \ + -frame 1 -label {Cur} \ + -labelFont -Adobe-helvetica-medium-r-normal--14*-iso8859-1 \ + -labelWidth 3 -variable gvar(.curpos1) -width 8 +UifOutput $cv.curpos2 -anchor center -canvasAnchor nw \ + -color #000000 -dbMode dbEvent -evtFilter != \ + -evtScript {panEvtDbUpdate curpos2 %A %T %D %Q} \ + -font -Adobe-courier-medium-r-normal--14*-iso8859-1 \ + -frame 1 \ + -labelFont -Adobe-helvetica-medium-r-normal--14*-iso8859-1 \ + -labelWidth 0 -variable gvar(.curpos2) -width 8 +UifOutputString $cv.devSimHset -anchor center -canvasAnchor nw \ + -font -Adobe-courier-medium-r-normal--14*-iso8859-1 \ + -frame 1 \ + -labelFont -Adobe-helvetica-medium-r-normal--14*-iso8859-1 \ + -labelWidth 0 -listColors {Black Red} \ + -listStrings {{} SIM} -listValues {0 1} \ + -variable gvar(devSimHset) -width 4 +UifOutputString $cv.devState -anchor center -canvasAnchor nw \ + -dbMode dbEvent -evtFilter != \ + -evtScript {panEvtDbUpdate devState %A %T %D %Q} \ + -font -Adobe-courier-bold-r-normal--14*-iso8859-1 \ + -frame 1 \ + -labelFont -Adobe-helvetica-medium-r-normal--14*-iso8859-1 \ + -labelWidth 0 -listColors {Red Red Blue OliveDrab} \ + -listStrings {OFF LOADED STANDBY ONLINE} \ + -listValues {0 1 2 3} -variable gvar(.state) \ + -width 7 +UifCheckButton $cv.devUse -anchor w -canvasAnchor nw -default 0 \ + -offVal 0 -onVal 1 -variable gvar(devUse) -width 0 +UifOutput $cv.device -anchor center -canvasAnchor nw \ + -color #000000 -dbMode dbEvent -evtFilter != \ + -evtScript {panEvtDbUpdate device %A %T %D %Q} \ + -font -Adobe-courier-medium-r-normal--14*-iso8859-1 \ + -frame 1 \ + -labelFont -Adobe-helvetica-medium-r-normal--14*-iso8859-1 \ + -labelWidth 0 -variable gvar(.device) -width 5 +sxipanEntry $cv.entry1 -background Grey90 -colBadVal red \ + -eraseOnEnter 1 \ + -font -Adobe-helvetica-medium-r-normal--14* \ + -foreground Black -id undefined \ + -initialState normal -justify left \ + -labelColor Black -labelFont TkDefaultFont \ + -labelWidth 0 -maxVal 2000 -minVal 0 \ + -selectbackground Black -selectforeground Grey90 \ + -state normal -undo 0 -valType float \ + -variable .sxipanAFC.top.wdg.sxipanAFC.cv.entry1.sxipanAFC-wdg12 \ + -width 8 +sxipanEntry $cv.entry2 -background Grey90 -colBadVal red \ + -eraseOnEnter 1 \ + -font -Adobe-helvetica-medium-r-normal--14* \ + -foreground Black -id undefined \ + -initialState normal -justify left \ + -labelColor Black -labelFont TkDefaultFont \ + -labelWidth 0 -maxVal 2000 -minVal 0 \ + -selectbackground Black -selectforeground Grey90 \ + -state normal -undo 0 -valType float \ + -variable .sxipanAFC.top.wdg.sxipanAFC.cv.entry2.sxipanAFC-wdg13 \ + -width 8 +UifOutput $cv.mode -anchor center -canvasAnchor nw \ + -color #000000 -dbMode dbEvent -evtFilter != \ + -evtScript {panEvtDbUpdate mode %A %T %D %Q} \ + -font -Adobe-courier-medium-r-normal--14*-iso8859-1 \ + -frame 1 -label {Mode} \ + -labelFont -Adobe-helvetica-medium-r-normal--14*-iso8859-1 \ + -labelWidth 0 -variable gvar(.mode) -width 9 +UifOptionButton $cv.modeSetup -canvasAnchor nw -default REF -length 5 \ + -selectMode label -variable gvar(modeSetup) +UifOutput $cv.setpos1 -anchor center -canvasAnchor nw \ + -color #000000 -dbMode dbEvent -evtFilter != \ + -evtScript {panEvtDbUpdate setpos1 %A %T %D %Q} \ + -font -Adobe-courier-medium-r-normal--14*-iso8859-1 \ + -frame 1 -label {Set} \ + -labelFont -Adobe-helvetica-medium-r-normal--14*-iso8859-1 \ + -labelWidth 3 -variable gvar(.setpos1) -width 8 +UifOutput $cv.setpos2 -anchor center -canvasAnchor nw \ + -color #000000 -dbMode dbEvent -evtFilter != \ + -evtScript {panEvtDbUpdate setpos2 %A %T %D %Q} \ + -font -Adobe-courier-medium-r-normal--14*-iso8859-1 \ + -frame 1 \ + -labelFont -Adobe-helvetica-bold-r-normal--14*-iso8859-1 \ + -labelWidth 0 -variable gvar(.setpos2) -width 8 + + # + # Canvas Items + # + + $cv create text 284 4 -tags "text sxipanAFC-item1 classItem sxipanAFC" -anchor nw \ + -text "Tip (urad)" \ + -fill black -font -Adobe-helvetica-medium-r-normal--14*-iso8859-1 + + $cv create text 360 4 -tags "text sxipanAFC-item2 classItem sxipanAFC" -anchor nw \ + -text "Tilt (urad)" \ + -fill black -font -Adobe-helvetica-medium-r-normal--14*-iso8859-1 + + }; # end of constructor + + #------------------------------------------- + #*# Method init + + public method init { } { + global ::panWidget ::gvar ::panDbData ::panWidgetHlp + set top $className + + # + # Set Widget Configuration + # + set panWidget(${top}.curpos1) {UifOutput 248 80 1 1 0 0 1 .curpos1 0 %.1f {}} + set panWidget(${top}.curpos2) {UifOutput 356 80 1 1 0 0 1 .curpos2 0 %.1f {}} + set panWidget(${top}.devSimHset) {UifOutputString 148 4 1 0 0 0 1 devSimHset 0 {}} + set panWidget(${top}.devState) {UifOutputString 76 4 1 1 0 0 1 .state 0 {}} + set panWidget(${top}.devUse) {UifCheckButton 4 4 1 0 0 0 1 devUse 0 0 1 0 0 0} + set panWidget(${top}.device) {UifOutput 24 4 1 1 0 0 1 .device 0 {} {}} + set panWidget(${top}.entry1) {PubClass 280 24 1 0 libsxipanSpecialDev.tcl nw 0 {} 0} + set panWidget(${top}.entry2) {PubClass 360 24 1 0 libsxipanSpecialDev.tcl nw 0 {} 0} + set panWidget(${top}.mode) {UifOutput 100 48 1 1 0 0 1 .mode 0 {} {}} + set panWidget(${top}.modeSetup) {UifOptionButton 144 76 1 0 REF 0 1 modeSetup 0 {}} + set panWidget(${top}.setpos1) {UifOutput 248 52 1 1 0 0 1 .setpos1 0 %.1f {}} + set panWidget(${top}.setpos2) {UifOutput 356 52 1 1 0 0 1 .setpos2 0 %.1f {}} + set panWidget(${top}.sxipanAFC-wdg1) {UifFrame 244 12 1 0 0 0 1 {} 0 0} + + # + # Set Database Configuration + # + set panDbData(${top}.curpos1) [list out local .curpos1 0 0 0 0 0 0 0 {}] + set panDbData(${top}.curpos2) [list out local .curpos2 0 0 0 0 0 0 0 {}] + set panDbData(${top}.devState) [list out local .state 0 0 0 0 0 0 0 {}] + set panDbData(${top}.device) [list out local .device 0 0 0 0 0 0 0 {}] + set panDbData(${top}.mode) [list out local .mode 0 0 0 0 0 0 0 {}] + set panDbData(${top}.setpos1) [list out local .setpos1 0 0 0 0 0 0 0 {}] + set panDbData(${top}.setpos2) [list out local .setpos2 0 0 0 0 0 0 0 {}] + + # + # Set Short Help for each widget + # + set panWidgetHlp(${top}.curpos1) {Current position of axis #1} + set panWidgetHlp(${top}.curpos2) {Current position of axis #2} + set panWidgetHlp(${top}.devSimHset) {Operational mode (blank = no simulation)} + set panWidgetHlp(${top}.devState) {Device state} + set panWidgetHlp(${top}.devUse) {Device selected/unselected} + set panWidgetHlp(${top}.device) {Device name} + set panWidgetHlp(${top}.mode) {Current device mode} + set panWidgetHlp(${top}.modeSetup) {Device mode (REF, AUTO, STAT)} + set panWidgetHlp(${top}.setpos1) {Commanded position of axis #1} + set panWidgetHlp(${top}.setpos2) {Commanded position of axis #2} + + setInstanceData + set initDone 1 + }; # end of init + +} ; #end of the class diff --git a/ICS/sxipan/src/sxipanControl.pan b/ICS/sxipan/src/sxipanControl.pan new file mode 100644 index 0000000..63ca520 --- /dev/null +++ b/ICS/sxipan/src/sxipanControl.pan @@ -0,0 +1,313 @@ +#!/bin/sh +# Define which version of the sequencer to use \ + exec seqWish "$0" ${1+"$@"} +# +#************************************************************* +# E.S.O. - VLT project +# +# "@(#) $Id: sxipanControl.pan 355996 2022-05-04 15:39:36Z bsalasni $" +# +# sxipanControl.pan +# +# This file has been produced by the panel editor +# version: panel.tcl 330695 +# date : Wed May 04 14:54:58 UTC 2022 +# +# !!!!!!!!!! DO NOT MANUALLY EDIT THIS FILE !!!!!!!!! +# +#-------------------------------------------------------------- +# +global par gvar cv bcv actAreaHeight shArea panClassLib +global geoCmdReply panClassLib panUsrProcs panUsrLib +global argv0 env panWidget panWidgetHlp panDbData cwp ckHeartBeat +global menu menuBar menuHelp ckMenuBar ckActBut ckShHelp ckCCS +# + if { [catch {seq_findFile lib/libpanPublic.tcl } ret] } { + puts stderr "panel EXITS : Tcl library libpanPublic.tcl not found " + exit -1 +} else { + lappend auto_path $ret +} + +# +# Link panel to user libraries +# +set panUsrLib {libicbpan libicbpan_uifClass libctooTcl libistUifClass libsxipanSpecialDev} +set panClassLib {} + +panSetAutoPath $panUsrLib $panClassLib + +if {[info exists EDITING]} { + set panRoot .sxipanControl + set panUsrProcs {sxipanControlInit sxipanControlExit sxipanControlInitData} + set argc 0 ; set argv {} +} else { + set par(MY_NAME) [file tail $argv0] + set EDITING 0 + set tk_strictMotif 0 + setPublicVar + if {[info exists panImportFlag] && $panImportFlag != 0} { + set panRoot .sxipanControl + } else { + set panRoot . + } +} + +# User's Init Data : called just after panInit +# It contains data to be defined before widgets are created + +proc sxipanControlInitData {} { + + # Declare global variables + + global + + # Statements to be executed when exiting +} + + + +# User's Init Procedure : called in panMainStart +# It is executed after the widgets have been created + +proc sxipanControlInit {} { + global cv menuBar EDITING sxipan + + if {$EDITING} { return } + catch {package require SeqOslx} + catch {eval delete object [itcl_info objects ::sxinsCfg*]} + + if {[ catch { ctooCONFIG sxinsCfg SOXS } res ]} { + tk_dialog .oslxDialog "ICS Dialog" $res info 0 OK + return "" + } + + # object used for widget positioning/drawing on the main panel + catch {eval delete object [itcl_info objects ::sxinsGUI*]} + icbpanGUIcfg sxinsGUI sxinsCfg + + # add "LCU boot cmd" in the panel menu + set menuPath ${menuBar}.lcu.menu + sxinsGUI lcuBootMenu $menuPath + + set sxipan(allDevices) [sxinsGUI initClass $cv] + + # add logo + catch { + set img [image create photo -file [findVLTFile bitmaps/soxslogo.gif]] + } + if { $img != "" } { + $cv create image 1000 5 -anchor nw -image $img + } +} + + + +# +#----------------------------------------------- +# Widget Definition +#----------------------------------------------- +# + +set ckHeartBeat 1 ;# Enable Heart-beat +set ckShHelp 1 ;# Set Short Help +set ckActBut 2 ;# Set Action Button Area +set ckMenuBar 1 ;# Setup Menu Bar +set ckCCS 1 ;# Initialize CCS +set ckCmdReply 1 ;# Display Cmd. Reply +set cwp "" ;# Set Current Working Point +set par(sizeCmdReply) 3 ;# Size of reply window +set actAreaHeight 40; # Set height of action area + +panReadOption winter +set par(PANELX) 1 ;# Panel X position +set par(PANELY) 0 ;# Panel Y position +panCreateFrame sxipanControl ;# Create empty frame +panGetCvNames sxipanControl cv bcv ;# Get Canvas Names +panInit $argc $argv sxipanControl ;# Initialization + + + +UifFrame $cv.sxipanICSState -canvasAnchor nw -height 40 \ + -width 700 +UifFrame $cv.sxipanNotebook1 -canvasAnchor nw -height 540 \ + -width 450 +UifFrame $cv.sxipanNotebook2 -canvasAnchor nw -height 540 \ + -width 656 +UifActionButton $bcv.icbpanSetup -canvasAnchor nw -command {icbpanSetup} \ + -initialState normal -label {SETUP} \ + -stateVar gvar(idle) -width 10 +UifActionButton $bcv.icbpanStop -canvasAnchor nw -command {icbpanStop} \ + -initialState normal -label {STOP} -stateVar gvar(stop) \ + -width 10 + +# +# Canvas Items +# + +$cv create text 48 28 -tags "text sxipanControl-item1" -anchor nw \ + -text "SOXS" \ + -fill black -font -Adobe-helvetica-bold-r-normal--24*-iso8859-1 + + +# +# Set Widget Configuration +# +set panWidget(icbpanSetup) {UifActionButton 50 10 1 0 0 0 0 {} 0 {}} +set panWidget(icbpanStop) {UifActionButton 280 8 1 0 0 0 0 {} 0 {}} +set panWidget(sxipanICSState) {UifFrame 200 20 1 0 0 0 0 {} 0 1} +set panWidget(sxipanNotebook1) {UifFrame 672 90 1 0 0 0 0 {} 0 1} +set panWidget(sxipanNotebook2) {UifFrame 8 90 1 0 0 0 0 {} 0 1} + +# +# Set Database Configuration +# + +# +# Set Short Help for each widget +# +set panWidgetHlp(icbpanSetup) {Apply setup to all selected devices} +set panWidgetHlp(icbpanStop) {Stop all selected devices} +set panWidgetHlp(sxipanICSState) {frame containing the global ICS state widgets} + +# +#----------------------------------------------- +# Menu Bar Definition +#----------------------------------------------- +# + +set menu(0) {File 1 file} +set menu(1) {ICS 0 ics {}} +set menu(2) {Devices -1 selection {}} +set menu(3) {Maintenance -1 icsoptions {}} +set menu(4) {{Std. Options} -1 stdoptions {}} +set menu(5) {Help 1 help} + + +# Add MenuButton < File > + +set mb [addMenuButton $menuBar file " File " -1 left] + +# Menu + +addMenuCmd $mb "Save Setup" 0 {global sxipan; icbpanSaveSetup $sxipan(allDevices) sxipan.ins SOXS_ICS} +addMenuCmd $mb "Save Setup as..." 0 {global sxipan; icbpanSaveAsSetup $sxipan(allDevices) SOXS_ICS } +addMenuCmd $mb "Load Setup..." 0 {global sxipan; icbpanLoadSetup $sxipan(allDevices) "" SOXS_ICS} +$mb add separator +addMenuCmd $mb "Restart panel" 0 {icbpanRestartGui} +addMenuCmd $mb "Quit" 0 {panClosePanel} + +# Add MenuButton + +set mb [addMenuButton $menuBar ics "ICS" 0 left] + +# Menu + +addMenuCmd $mb "Startup" 0 {icbpanStartup} +addMenuCmd $mb "Shutdown" 0 {icbpanShutdown} +$mb add separator +addMenuCmd $mb "OFF" 0 {icbpanState OFF} +addMenuCmd $mb "STANDBY" 0 {icbpanState STANDBY} +addMenuCmd $mb "ONLINE" 0 {icbpanState ONLINE} + +# Add MenuButton + +set mb [addMenuButton $menuBar selection "Devices" -1 left] + +# Menu + +addMenuCmd $mb "Select all devices" 0 {global sxipan; icbpanSelectAll $sxipan(allDevices)} +addMenuCmd $mb "Deselect all devices" 0 {global sxipan; icbpanDeselectAll $sxipan(allDevices)} +$mb add separator +addMenuCmd $mb "OFF" 0 {icbpanDevState OFF} +addMenuCmd $mb "STANDBY" 0 {icbpanDevState STANDBY} +addMenuCmd $mb "ONLINE" 0 {icbpanDevState ONLINE} +$mb add separator +addMenuCmd $mb "Simulate HW" -1 {icbpanSimulation YES} +addMenuCmd $mb "Use HW" -1 {icbpanSimulation NO} + +# Add MenuButton + +set mb [addMenuButton $menuBar icsoptions "Maintenance" -1 left] + +# Menu + +addMenuCmd $mb "Edit cfg. file..." 0 {icbpanEditCfgFile sxmcfgINS.cfg} + +# Add MenuButton + +set mb [addMenuButton $menuBar stdoptions "Std. Options" -1 left] + +# Menu + +addMenuCmd $mb "Refresh Database values" 0 {global sxipan; icbpanUpdateOutput $sxipan(allDevices)} +addMenuCmd $mb "Re-Start Database Events" -1 {global sxipan; icbpanEvtDbRestart $sxipan(allDevices)} + +# Add MenuButton < Help > + +set mb [addMenuButton $menuBar help " Help " -1 right] + +# Menu + +addMenuCmd $mb "Extended Help" 0 {puts "Not Implemented"} + +# +#----------------------------------------------- +# Menu Help Definition +#----------------------------------------------- +# + +set menuHelp(.sxipanControl.topMenu.menu.file.menu) { \ + {} {Save the panel content in "sxipan.ins" setup file} \ + {Save the panel content in a setup file} \ + {Load the content of a setup file in the panel} {} {Restart this panel} {} \ +} + +set menuHelp(.sxipanControl.topMenu.menu.selection.menu) { \ + {} {Select all functions} {Deselect all functions} {} \ + {Send command OFF for the selected devices} \ + {Send command STANDBY for the selected devices} \ + {Send command ONLINE for the selected devices} \ + {Simulate the hw associated to all selected devices} \ + {The hw associated to all selected devices is used, i.e. it is not simulated} \ +} + +set menuHelp(.sxipanControl.topMenu.menu.ics.menu) { \ + {} {Start ICS processes} {Terminate ICS processes} {} {Send OFF to ICS} \ + {Send STANDBY to ICS} {Send ONLINE to ICS} \ +} + +set menuHelp(.sxipanControl.topMenu.menu.icsoptions.menu) { \ + {} {Load/edit the instrument configuration file} \ +} + + +# +#----------------------------------------------- +# Create the Panel +#----------------------------------------------- +# + +wm geometry $panRoot 1126x832 +wm title $panRoot "SOXS ICS Control" +set par(TITLE) "SOXS ICS Control" + +panMainStart sxipanControl $argc $argv + +#-------------------- End of Main -------------------- + + + +##################################################### +# Definition of Local Procedures +##################################################### + + +proc sxipanControlExit {} { + + # Declare global variables + + global + + # Statements to be executed when exiting +} diff --git a/ICS/sxipan/src/sxipanEntry.tcl b/ICS/sxipan/src/sxipanEntry.tcl new file mode 100755 index 0000000..013b247 --- /dev/null +++ b/ICS/sxipan/src/sxipanEntry.tcl @@ -0,0 +1,321 @@ +#******************************************************************************* +# E.S.O. - VLT project +# +# "@(#) $Id: sxipanEntry.tcl 299643 2017-07-11 16:02:19Z dricci $" +# +# who when what +# -------- ---------- ---------------------------------------------------------- +# dricci 2017-07-11 adapted for SOXS +# pgrani 2017-02-22 created +# +#******************************************************************************* +# NAME +# sxipanEntry - UifEntry derived class +# +# SYNOPSIS +# sxipanEntry +# +# DESCRIPTION +# sxipanEntry is a mega-widget which can be imported and configured +# with the panel editor. +# It inherits the standard UifEntry class and adds specific features +# required by sxipan: +# +# - validate entry value: highlight background when a wrong value is +# entered or undo "bad" typing +# - handle key events: see SPECIFIC BINDINGS +# - return entry value +# +# PUBLIC METHODS +# public method getSelected { updateBackground } +# - return entry value after checking for validity. +# Return empty string if entry value is not valid. +# If updateBackground=1, update background according to validity +# default=0 (do not update background) +# public method configHelp { txt } +# - configure short help text +# public method setValue { val } +# - set entry value +# +# WIDGET OPTIONS +# valType Value type (integer, float, any), default=float +# command Command callback: evaluated when a non-empty value +# was entered; optional, default={}. Adds entry value. +# justify Where entered characters start, default=left +# undo Automatically undo "bad" typing (0=no, 1=yes), +# default=no +# colBadVal Background color when a "bad" char was entered, +# default=red +# id Entry id. Used to distinguish among different entry +# types (e.g. user units versus encoder units) +# +# SPECIFIC BINDINGS +# Checks the value +# Clears the entry +# Clears the entry +# Displays last entered value (or the value returned by +# method getSelected) +# Returns the value +# +# CAUTIONS +# +# EXAMPLES +# $cv.sxipanMOTEnc config \ +# -valType integer \ +# -command [code $this encoderEnterCb] \ +# -justify right \ +# -undo 0 \ +# -colBadVal red +# +# SEE ALSO +# UifEntry +# +# BUGS +# +#------------------------------------------------------------------------ +# + +class sxipanEntry { + inherit UifEntry + + constructor {args} { + global shArea EDITING + # If editing with panel editor and return here, all settings (e.g. width, label etc) + # are lost, i.e. when class containing this widget is reloaded the default settings + # is taken instead of the last edited one. + #if { $EDITING } { return } + itk_initialize + eval configure -helparea $shArea $args + + set uifEntry_ $itk_component(uifEntry) + set bgcol_ [$uifEntry_ cget -background] + + # configure widget + # VLTSW20070079 Avoid renaming after Save and Load with Panel Editor + set origVar [cget -variable] + if { "$origVar" == "" } { + config -variable "$wthis" + } else { + set last [string last "." $origVar] + if { $last == -1 } { + config -variable "$wthis.$origVar" + } else { + incr last + config -variable "$wthis.[string range $origVar $last end]" + } + } + $uifEntry_ configure -justify $justify + configure -units [cget -units]; # needed to show units on the right side + + set autoHelp_ -1 + # User defined short help text is loaded only after construction + # Useless to check here: it will always result in empty user defined short-help + #configHelp + + # Add binding to handle key events + bind $uifEntry_ [code $this enterCb] + bind $uifEntry_ [code $this traceEntry] + bind $uifEntry_ [code $this erase] + bind $uifEntry_ [code $this eraseCb] + bind $uifEntry_ [code $this entryLast] + update + } + + # + # return the value of the entry field + # + public method getSelected { {updateBackground 0} } { + if { ! [valid] } { + if { $updateBackground } { + $uifEntry_ configure -background $colBadVal + } + return {} + } + if { $updateBackground } { + $uifEntry_ configure -background $bgcol_ + } + + # store last entered value for later usage (Up key) + set last_($id) [string trim [get]] + return $last_($id) + } + + # + # clear the background of the entry field + # + public method clearBg { } { + $uifEntry_ configure -background $bgcol_ + } + + # + # configure help text + # + public method configHelp { {txt "Set encoder/position value"} } { + global ::panWidgetHlp + + if { $autoHelp_ < 0 } {; # first time this method is called + if { "[cget -helptext]" == "" } { + set autoHelp_ 1 + } else { + set autoHelp_ 0 + } + } + if { $autoHelp_ == 0 } { return } + + set help $txt + if { $help != "" } { + set help "$help =last, or =clear" + + if { "[cget -command]" != "" } { + set help "$help, =enter value" + } + } + + # Panel does not handle an empty string properly: add a blank as workaround + if { $help == "" } { set help " " } + configure -helptext "$help" + } + + # + # set entry value + # + public method setValue { val } { + set insert [$uifEntry_ index insert] + erase + $uifEntry_ insert 0 $val + # update background color + traceEntry + # keep cursor where it was (VLTSW20040349) + $uifEntry_ icursor $insert + } + + # + # enable + # Need to overload for proper return on cget -state + # + public method enable { } { + $this configure -state normal + UifEntry::enable + } + + # + # disable + # Need to overload for proper return on cget -state + # + public method disable { } { + $this configure -state disabled + UifEntry::disable + } + + # + # enterCb: called when a value was entered with + # + private method enterCb { } { + set value [getSelected] + if { "$value" == "" } { return } + + # To allow external tracing (e.g. to activate a check button) + # rewrite the value in the entry field + setValue $value + + # call the command callback + if { "$command" != "" } { + eval $command {"$value"} + if {[cequal $eraseOnEnter 1]} { + erase + } + } + } + + # + # eraseCb: erase entry contents and remove bad background + # + private method eraseCb { } { + erase + traceEntry + } + + # + # trace typed chars. Highlight background or undo if there is a typing error + # + private method traceEntry { } { + if { [valid 1] } { + $uifEntry_ configure -background $bgcol_ + return + } + if { ! $undo } { + $uifEntry_ configure -background $colBadVal + } else { + set insert [expr {[$uifEntry_ index insert] - 1}] + $uifEntry_ delete $insert + $uifEntry_ icursor $insert + } + } + + # + # Check if entry string is valid. Return 1 if yes else 0. + # + private method valid { { typing 0 } } { + if { "$valType" == "any" } {return 1 } + + set value [string trimleft [get]] + set min $itk_option(-minVal) + set max $itk_option(-maxVal) + if { $typing && ("$value" == "-" || "$value" == "") } { return 1 } + + if { "$valType" == "integer" } { + set status [expr {! [catch {string index dummy $value}]}] + } elseif { "$valType" == "float" } { + if { "$value" == "" } { set status 0 + } else { set status [expr {! [catch {expr {$value + 1.0}}]}]} + } + # check range, if defined + if {![cequal $min "" ] && $status} { + if { $value < $min } { set status 0 } + } + if {![cequal $max "" ] && $status} { + if { $value > $max } { set status 0 } + } + return $status + } + + # + # insert last entry value + # + private method entryLast { } { + if { ![info exists last_($id)] } { + set last_($id) $itk_option(-default) + } + if {[cequal $last_($id) "" ]} { return } + erase + $uifEntry_ insert 0 $last_($id) + } + + #------------------------------------------------------------------- + # Private variables + #------------------------------------------------------------------- + # last value entered + private variable last_ + + # uifEntry component + private variable uifEntry_ + + # default background color + private variable bgcol_ + + # Change automatically short-help text, depending on the context + private variable autoHelp_ + + #------------------------------------------------------------------- + # Public variables + #------------------------------------------------------------------- + public variable valType {float} + public variable undo {0} + public variable command {} + public variable justify {left} + public variable colBadVal {red} + public variable id {undefined} + public variable eraseOnEnter {1} +} + +#___oOo___ diff --git a/ICS/sxipan/src/sxipanNISE.tcl b/ICS/sxipan/src/sxipanNISE.tcl new file mode 100755 index 0000000..064dcea --- /dev/null +++ b/ICS/sxipan/src/sxipanNISE.tcl @@ -0,0 +1,307 @@ +#******************************************************************************* +# E.S.O. - VLT project +# +# "@(#) $Id: sxipanNISE.tcl 353934 2022-03-23 11:55:40Z dricci $" +# +# who when what +# -------- -------- ---------------------------------------------- +# bsalasni 21/08/19 Trac #211: created, based on esipanNamedPos by ESPRESSO. +# + +#************************************************************************ +# NAME +# sxipanNISE - wrapper class for icbpanNamedPos_uifClass +# +# SYNOPSIS +# sxipanNISE .w \ +# -background Grey90 \ +# -relief flat \ +# -cfgObj $cfgObj \ +# -cwp "${devName}" \ +# -devType $devType] +# +# where cfgObj is a ctooCONFIG object; +# devType is extracted from INS.CON.DEVICE${i} +# devName is extracted from ${devType}.DEVNAME +# +# DESCRIPTION +# Itcl wrapper class to handle ICB motorized devices with discrete (named) +# positions, such as FILT, MIRR, OPTI etc. The corresponding +# ibcpanNamedPos_uifClass contains a set of output widget (linked to OLDB) +# which in turn display the device name, keyword used to identify the +# device, the current simulation level (N=normal,S=simulate), the current +# device state, handset mode (H, if active) and the current position +# (named and in encoder unit). The class contains also an option +# button to select among various setup parameters and an entry widget +# for setting position values. Finally a checkbutton is used to +# indicate if the corresponding device is selected for some actions. +# Class icbpanNamedPosShutter is meant for motorised shutter devices +# +# PUBLIC METHODS +# icbpanNamedPos xxx +# constructor. Calls "initFunction" which initialize the option +# button with appropriate parameters. +# isSelected +# get the current status of the checkbutton (0/1). +# setSelected 0/1 +# set the checkbutton state to 0 or 1 (unselected or selected). +# getKeyw +# returns the associated setup keyw. + value. This method reads +# from the option button and entry widget the current user +# settings and prepare a string to be sent to ICS control process. +# This method is normally called when the SETUP cmd is invoked. +# setKeyw val +# extract from "val" the keyword parameter + value and fill the +# corresponding option button + entry. This method is called usually +# during a reading of a previously saved setup file. +# +# PROTECTED METHODS +# updateWdg item +# this method is called to modify on-the-fly the appearance of +# the widgets. E.g. if a particular param. selection requires also some +# input values, the corresponding entry widget is enabled, +# otherwise it is disabled. User can override this method to +# implement some specific behavior. +# +# PUBLIC VARIABLES +# cfgObj +# ctooCONFIG object (configuration file interface) +# devType +# device type extracted from INS.CON.DEVICE${i} +# +# FILES +# $INS_ROOT/SYSTEM/COMMON/CONFIGFILES/*CONFIG.cfg +# +# ENVIRONMENT +# INS_ROOT Instrument root area +# INTROOT Integration area +# VLTROOT VLT area +# +# CAUTIONS +# +# SEE ALSO +# ctooCONFIG(8) +# +# BUGS +# +#------------------------------------------------------------------------ +# + + +class sxipanNISE { + inherit sxipanNISE_uifClass + + constructor {args} { + global ::shArea + itk_initialize + eval configure -helparea $shArea -relief flat $args + display + after idle [code $this initFunction] + } + + method initFunction { } { + + # determine prefix to be used + set prefix [icbpanGetDevicePrefix $cfgObj $devType] + + # initialize option lists + set posNum [$cfgObj Get ${devType}.POSNUM] + loop i 1 [incr posNum 1] { + set name [convertName [$cfgObj Get ${devType}.NAME$i]] + lappend elements $name + lappend helps "" + } + + if { ![catch { $cfgObj Get ${devType}.PLCUNIT } unit ] } { + set plcunit $unit + } + + lappend elements $plcunit + lappend helps "Set plc unit" + + # initialize option button widget (value from status) + upvar #0 [ $cv.devStatus0 cget -variable] wdgVar + set last $wdgVar + if { [lsearch -exact $elements $last] < 0 } { set last "" } + $cv.devSetup configure -itemList $elements -default $last \ + -command [code $this updateWdg] + + # Handle special status string values + initStatus + + # initialize encoder entry widget + configEnc $last + + } + + public method updateWdg { item } { + global ::gvar + + if {[cequal $item ""]} {return 0} + + # select check button + setSelected 1 + + # configure entry widget + configEnc $item + if {[cequal $item $last]} {; # option unchanged + set value [getEnc] + } else {; # option changed + set value ""; # clean entry widget value + } + setEnc $value + + set last $item + } + + # return status of the checkbutton + public method isSelected { } { + global ::gvar + + upvar #0 [$cv.devUse cget -variable] sel + return $sel + } + + + # set status of the checkbutton + public method setSelected { val } { + global ::gvar + + upvar #0 [$cv.devUse cget -variable] sel + set sel $val + } + + + # return associated setup keyword + public method getKeyw { } { + global ::gvar + + upvar #0 [$cv.devSetupEnc cget -variable] encval + upvar #0 [$cv.devSetup cget -variable] namevar + set nameval [convertName $namevar 1 0] + + if {[cequal $nameval ""]} { return "" } + + if {[cequal $nameval $plcunit]} { + set setup "${prefix}.POS $encval" + } else { + set setup "${prefix}.$setupKey $nameval" + } + + return $setup + } + + # set setup keyword+value + public method setKeyw { val } { + global ::gvar + + set keyw [lindex $val 0] + set value [lindex $val 1] + + set newOption "" + set newValue "" + if {[cequal ${prefix}.$setupKey $keyw]} { + setSelected 1 + set newOption [convertName $value] + } elseif { [cequal ${prefix}.POS $keyw] } { + setSelected 1 + set newValue $value + set newOption $plcunit + } else { + set newOption "" + } + if {![cequal $newOption ""]} { + set last $newOption + $cv.devSetup configure -default $last + configEnc $last + setEnc $newValue + } + } + + # return the list of entry widgets whose variable must be traced + public method entryWdg { } { + + return {devSetupEnc} + } + + # configure encoder entry widget + protected method configEnc { item } { + + set index [lsearch -exact $elements $item] + set txt "" + $cv.devSetupEnc configure -id $item + if { [cequal $item $plcunit] } { + $cv.devSetupEnc configure -valType float + } else { + $cv.devSetupEnc configure -valType integer + } + $cv.devSetupEnc configure -minVal "" + $cv.devSetupEnc configure -maxVal "" + if {[cequal $item $plcunit]} { + if {$index >= 0} {; # valid option + set txt [lindex $helps $index] + } + $cv.devSetupEnc enable + } else { + $cv.devSetupEnc disable + } + $cv.devSetupEnc configHelp $txt + } + + # set value in encoder entry widget + protected method setEnc { value } { + $cv.devSetupEnc configure -default $value + $cv.devSetupEnc setValue $value + } + + # get value in encoder entry widget + protected method getEnc { } { + upvar #0 [ $cv.devSetupEnc cget -variable] wdgVar + return $wdgVar + } + + # convert labels for named position + protected method convertName { name {fromIndex 0} {toIndex 1} } { + foreach element $setupConvert { + set from [lindex $element $fromIndex] + if {[cequal $name $from]} { + set name [lindex $element $toIndex] + break + } + } + return $name + } + + # handle special status strings + protected method initStatus { } { + if { [llength $statusString] > 0 } { + set listKey [$cv.devStatus0 cget -listKey] + set listColor [$cv.devStatus0 cget -listColor] + foreach element $statusString { + lappend listKey [lindex $element 0] + lappend listColor [lindex $element 1] + } + $cv.devStatus0 configure -listKey $listKey -listColor $listColor + # refresh status value to get wanted color + upvar #0 [ $cv.devStatus0 cget -variable] wdgVar + $cv.devStatus0 setValue $wdgVar + } + } + + public variable devType "" + public variable cfgObj "" + + protected variable setupConvert {} + protected variable statusString {} + protected variable setupKey "NAME" + + private variable prefix "" + private variable plcunit "unit" + private variable elements {} + private variable helps {} + private variable last "" +} + + +# +# ___oOo___ diff --git a/ICS/sxipan/src/sxipanNISE_uifClass.tcl b/ICS/sxipan/src/sxipanNISE_uifClass.tcl new file mode 100644 index 0000000..060e590 --- /dev/null +++ b/ICS/sxipan/src/sxipanNISE_uifClass.tcl @@ -0,0 +1,141 @@ +# +#************************************************************* +# E.S.O. - VLT project +# +# "@(#) $Id: sxipanNISE_uifClass.tcl 353934 2022-03-23 11:55:40Z dricci $" +# +# sxipanNISE_uifClass.tcl +# +# This file has been produced by the panel editor +# version: panel.tcl 330695 +# date : Wed Mar 16 09:59:29 UTC 2022 +# +# !!!!!!!!!! DO NOT MANUALLY EDIT THIS FILE !!!!!!!!! +# +#-------------------------------------------------------------- + + +class sxipanNISE_uifClass { + inherit UifPanel + + constructor {args} { + + global ::shArea + panSetAutoPath {} libicbpan + parseClassName $this + + itk_component add top { + canvas $itk_interior.cv -width 651 -height 29 \ + -borderwidth 2 -highlightthickness 0 + } { + keep -relief + } + + pack $itk_component(top) -fill both -expand 1 + eval itk_initialize $args + +UifOutput $cv.devEnc -anchor w -canvasAnchor nw -color #000000 \ + -dbMode dbEvent -evtFilter "!=" \ + -evtScript {panEvtDbUpdate devEnc %A %T %D %Q} \ + -font -Adobe-courier-medium-r-normal--14*-iso8859-1 \ + -frame 1 \ + -labelFont -Adobe-helvetica-medium-r-normal--14*-iso8859-1 \ + -labelWidth 0 -variable gvar(.pos) -width 15 +UifOptionButton $cv.devSetup -canvasAnchor nw -default 0 -length 10 \ + -selectMode label -variable gvar(devSetup) +icbpanEntry $cv.devSetupEnc -background Grey90 -colBadVal red \ + -eraseOnEnter 1 \ + -font -Adobe-helvetica-medium-r-normal--14* \ + -foreground Black -id undefined \ + -initialState normal -justify left \ + -labelColor Black -labelFont {Helvetica -12 bold} \ + -labelWidth 0 -maxVal 100 -minVal 0 \ + -selectbackground Black -selectforeground Grey90 \ + -state normal -undo 0 -valType float \ + -variable .sxipanNISE.top.wdg.sxipanNISE.cv.devSetupEnc.sxipanNISE-wdg10 \ + -width 8 +UifOutputString $cv.devSimHset -anchor center -canvasAnchor nw \ + -font -Adobe-courier-medium-r-normal--14*-iso8859-1 \ + -frame 1 \ + -labelFont -Adobe-helvetica-medium-r-normal--14*-iso8859-1 \ + -labelWidth 0 -listColors {Black Red Red} \ + -listStrings {{} HSET SIM} -listValues {0 1 2} \ + -variable gvar(devSimHset) -width 4 +UifOutputString $cv.devState -anchor center -canvasAnchor nw \ + -dbMode dbEvent -evtFilter != \ + -evtScript {panEvtDbUpdate devState %A %T %D %Q} \ + -font -Adobe-courier-bold-r-normal--14*-iso8859-1 \ + -frame 1 \ + -labelFont -Adobe-helvetica-medium-r-normal--14*-iso8859-1 \ + -labelWidth 0 -listColors {Red Red Blue OliveDrab} \ + -listStrings {OFF LOADED STANDBY ONLINE} \ + -listValues {0 1 2 3} -variable gvar(.state) \ + -width 7 +UifOutputList $cv.devStatus0 -anchor w -canvasAnchor nw \ + -color #000000 -dbMode dbEvent -evtFilter != \ + -evtScript {panEvtDbUpdate devStatus0 %A %T %D %Q} \ + -font -Adobe-courier-medium-r-normal--14*-iso8859-1 \ + -frame 1 \ + -labelFont -Adobe-helvetica-medium-r-normal--14*-iso8859-1 \ + -labelWidth 0 -listColor {Blue Blue Red Red} \ + -listKey {INIT MOVING STOP FAILED} \ + -variable gvar(.status0) -width 12 +UifCheckButton $cv.devUse -anchor w -canvasAnchor nw -default 0 \ + -offVal 0 -onVal 1 -variable gvar(devUse) -width 0 +UifOutput $cv.device -anchor center -canvasAnchor nw \ + -color #000000 -dbMode dbEvent -evtFilter != \ + -evtScript {panEvtDbUpdate device %A %T %D %Q} \ + -font -Adobe-courier-medium-r-normal--14*-iso8859-1 \ + -frame 1 \ + -labelFont -Adobe-helvetica-medium-r-normal--14*-iso8859-1 \ + -labelWidth 0 -variable gvar(.device) -width 5 + + # + # Canvas Items + # + + }; # end of constructor + + #------------------------------------------- + #*# Method init + + public method init { } { + global ::panWidget ::gvar ::panDbData ::panWidgetHlp + set top $className + + # + # Set Widget Configuration + # + set panWidget(${top}.devEnc) {UifOutput 308 4 1 1 0 0 1 .pos 0 {} {}} + set panWidget(${top}.devSetup) {UifOptionButton 452 4 1 0 0 0 1 devSetup 0 {}} + set panWidget(${top}.devSetupEnc) {PubClass 576 4 1 0 libicbpan.tcl nw 0 {} 0} + set panWidget(${top}.devSimHset) {UifOutputString 148 4 1 0 0 0 1 devSimHset 0 {}} + set panWidget(${top}.devState) {UifOutputString 77 4 1 1 0 0 1 .state 0 {}} + set panWidget(${top}.devStatus0) {UifOutputList 192 4 1 1 0 0 1 .status0 0 {} {}} + set panWidget(${top}.devUse) {UifCheckButton 4 4 1 0 0 0 1 devUse 0 0 1 0 0 0} + set panWidget(${top}.device) {UifOutput 26 4 1 1 0 0 1 .device 0 {} {}} + + # + # Set Database Configuration + # + set panDbData(${top}.devEnc) [list out local .pos 0 0 0 0 0 0 0 {}] + set panDbData(${top}.devState) [list out local .state 0 0 0 0 0 0 0 {}] + set panDbData(${top}.devStatus0) [list out local .status0 0 0 0 0 0 0 0 {}] + set panDbData(${top}.device) [list out local .device 0 0 0 0 0 0 0 {}] + + # + # Set Short Help for each widget + # + set panWidgetHlp(${top}.devEnc) {Current position in encoder unit} + set panWidgetHlp(${top}.devSetup) {Device control: accepts Enc value, position name or formula input.} + set panWidgetHlp(${top}.devSimHset) {Operational mode (blank = no simulation, no handset)} + set panWidgetHlp(${top}.devState) {Device state} + set panWidgetHlp(${top}.devStatus0) {Current position} + set panWidgetHlp(${top}.devUse) {Device selected/unselected} + set panWidgetHlp(${top}.device) {Device name} + + setInstanceData + set initDone 1 + }; # end of init + +} ; #end of the class diff --git a/ICS/sxipan/src/sxipanNamedPos.tcl b/ICS/sxipan/src/sxipanNamedPos.tcl new file mode 100755 index 0000000..80b6c1d --- /dev/null +++ b/ICS/sxipan/src/sxipanNamedPos.tcl @@ -0,0 +1,328 @@ +#******************************************************************************* +# E.S.O. - VLT project +# +# "@(#) $Id: sxipanNamedPos.tcl 329630 2020-01-23 08:01:06Z dricci $" +# +# who when what +# -------- -------- ---------------------------------------------- +# bsalasni 21/08/19 Trac #211: created, based on esipanNamedPos by ESPRESSO. +# + +#************************************************************************ +# NAME +# sxipanNamedPos - wrapper class for icbpanNamedPos_uifClass +# +# SYNOPSIS +# icbpanNamedPos .w \ +# -background Grey90 \ +# -relief flat \ +# -cfgObj $cfgObj \ +# -cwp "${devName}" \ +# -devType $devType] +# +# where cfgObj is a ctooCONFIG object; +# devType is extracted from INS.CON.DEVICE${i} +# devName is extracted from ${devType}.DEVNAME +# +# DESCRIPTION +# ESPRESSO specific: increases size of the widget and adds POS +# keyword to handle PLC units. +# +# Itcl wrapper class to handle ICB motorized devices with discrete (named) +# positions, such as FILT, MIRR, OPTI etc. The corresponding +# ibcpanNamedPos_uifClass contains a set of output widget (linked to OLDB) +# which in turn display the device name, keyword used to identify the +# device, the current simulation level (N=normal,S=simulate), the current +# device state, handset mode (H, if active) and the current position +# (named and in encoder unit). The class contains also an option +# button to select among various setup parameters and an entry widget +# for setting position values. Finally a checkbutton is used to +# indicate if the corresponding device is selected for some actions. +# Class icbpanNamedPosShutter is meant for motorised shutter devices +# +# PUBLIC METHODS +# icbpanNamedPos xxx +# constructor. Calls "initFunction" which initialize the option +# button with appropriate parameters. +# isSelected +# get the current status of the checkbutton (0/1). +# setSelected 0/1 +# set the checkbutton state to 0 or 1 (unselected or selected). +# getKeyw +# returns the associated setup keyw. + value. This method reads +# from the option button and entry widget the current user +# settings and prepare a string to be sent to ICS control process. +# This method is normally called when the SETUP cmd is invoked. +# setKeyw val +# extract from "val" the keyword parameter + value and fill the +# corresponding option button + entry. This method is called usually +# during a reading of a previously saved setup file. +# +# PROTECTED METHODS +# updateWdg item +# this method is called to modify on-the-fly the appearance of +# the widgets. E.g. if a particular param. selection requires also some +# input values, the corresponding entry widget is enabled, +# otherwise it is disabled. User can override this method to +# implement some specific behavior. +# +# PUBLIC VARIABLES +# cfgObj +# ctooCONFIG object (configuration file interface) +# devType +# device type extracted from INS.CON.DEVICE${i} +# +# FILES +# $INS_ROOT/SYSTEM/COMMON/CONFIGFILES/*CONFIG.cfg +# +# ENVIRONMENT +# INS_ROOT Instrument root area +# INTROOT Integration area +# VLTROOT VLT area +# +# CAUTIONS +# +# SEE ALSO +# ctooCONFIG(8) +# +# BUGS +# +#------------------------------------------------------------------------ +# + + +class sxipanNamedPos { + inherit sxipanNamedPos_uifClass + + constructor {args} { + global ::shArea + itk_initialize + eval configure -helparea $shArea -relief flat $args + display + after idle [code $this initFunction] + } + + method initFunction { } { + + # determine prefix to be used + set prefix [icbpanGetDevicePrefix $cfgObj $devType] + + # initialize option lists + set posNum [$cfgObj Get ${devType}.POSNUM] + loop i 1 [incr posNum 1] { + set name [convertName [$cfgObj Get ${devType}.NAME$i]] + lappend elements $name + lappend helps "" + } + + if { ![catch { $cfgObj Get ${devType}.PLCUNIT } unit ] } { + set plcunit $unit + } + + lappend elements $plcunit + lappend helps "Set plc unit" + lappend elements $encoder + lappend helps "Set encoder value" + lappend elements $encrel + lappend helps "Set encoder relative value" + + # initialize option button widget (value from status) + upvar #0 [ $cv.devStatus0 cget -variable] wdgVar + set last $wdgVar + if { [lsearch -exact $elements $last] < 0 } { set last "" } + $cv.devSetup configure -itemList $elements -default $last \ + -command [code $this updateWdg] + + # Handle special status string values + initStatus + + # initialize encoder entry widget + configEnc $last + + } + + public method updateWdg { item } { + global ::gvar + + if {[cequal $item ""]} {return 0} + + # select check button + setSelected 1 + + # configure entry widget + configEnc $item + if {[cequal $item $last]} {; # option unchanged + set value [getEnc] + } else {; # option changed + set value ""; # clean entry widget value + } + setEnc $value + + set last $item + } + + # return status of the checkbutton + public method isSelected { } { + global ::gvar + + upvar #0 [$cv.devUse cget -variable] sel + return $sel + } + + + # set status of the checkbutton + public method setSelected { val } { + global ::gvar + + upvar #0 [$cv.devUse cget -variable] sel + set sel $val + } + + + # return associated setup keyword + public method getKeyw { } { + global ::gvar + + upvar #0 [$cv.devSetupEnc cget -variable] encval + upvar #0 [$cv.devSetup cget -variable] namevar + set nameval [convertName $namevar 1 0] + + if {[cequal $nameval ""]} { return "" } + + if {[cequal $nameval $encoder]} { + set setup "${prefix}.ENC $encval" + } elseif {[cequal $nameval $encrel]} { + set setup "${prefix}.ENCREL $encval" + } elseif {[cequal $nameval $plcunit]} { + set setup "${prefix}.POS $encval" + } else { + set setup "${prefix}.$setupKey $nameval" + } + + return $setup + } + + # set setup keyword+value + public method setKeyw { val } { + global ::gvar + + set keyw [lindex $val 0] + set value [lindex $val 1] + + set newOption "" + set newValue "" + if {[cequal ${prefix}.$setupKey $keyw]} { + setSelected 1 + set newOption [convertName $value] + } elseif { [cequal ${prefix}.POS $keyw] } { + setSelected 1 + set newValue $value + set newOption $plcunit + } elseif { [cequal ${prefix}.ENC $keyw] } { + setSelected 1 + set newValue $value + set newOption $encoder + } elseif { [cequal ${prefix}.ENCREL $keyw] } { + setSelected 1 + set newValue $value + set newOption $encrel + } else { + set newOption "" + } + if {![cequal $newOption ""]} { + set last $newOption + $cv.devSetup configure -default $last + configEnc $last + setEnc $newValue + } + } + + # return the list of entry widgets whose variable must be traced + public method entryWdg { } { + + return {devSetupEnc} + } + + # configure encoder entry widget + protected method configEnc { item } { + + set index [lsearch -exact $elements $item] + set txt "" + $cv.devSetupEnc configure -id $item + if { [cequal $item $plcunit] } { + $cv.devSetupEnc configure -valType float + } else { + $cv.devSetupEnc configure -valType integer + } + $cv.devSetupEnc configure -minVal "" + $cv.devSetupEnc configure -maxVal "" + if {[cequal $item $encoder] || [cequal $item $encrel] || [cequal $item $plcunit]} { + if {$index >= 0} {; # valid option + set txt [lindex $helps $index] + } + $cv.devSetupEnc enable + } else { + $cv.devSetupEnc disable + } + $cv.devSetupEnc configHelp $txt + } + + # set value in encoder entry widget + protected method setEnc { value } { + $cv.devSetupEnc configure -default $value + $cv.devSetupEnc setValue $value + } + + # get value in encoder entry widget + protected method getEnc { } { + upvar #0 [ $cv.devSetupEnc cget -variable] wdgVar + return $wdgVar + } + + # convert labels for named position + protected method convertName { name {fromIndex 0} {toIndex 1} } { + foreach element $setupConvert { + set from [lindex $element $fromIndex] + if {[cequal $name $from]} { + set name [lindex $element $toIndex] + break + } + } + return $name + } + + # handle special status strings + protected method initStatus { } { + if { [llength $statusString] > 0 } { + set listKey [$cv.devStatus0 cget -listKey] + set listColor [$cv.devStatus0 cget -listColor] + foreach element $statusString { + lappend listKey [lindex $element 0] + lappend listColor [lindex $element 1] + } + $cv.devStatus0 configure -listKey $listKey -listColor $listColor + # refresh status value to get wanted color + upvar #0 [ $cv.devStatus0 cget -variable] wdgVar + $cv.devStatus0 setValue $wdgVar + } + } + + public variable devType "" + public variable cfgObj "" + + protected variable setupConvert {} + protected variable statusString {} + protected variable setupKey "NAME" + + private variable prefix "" + private variable plcunit "unit" + private variable encoder "enc" + private variable encrel "encrel" + private variable elements {} + private variable helps {} + private variable last "" +} + + +# +# ___oOo___ diff --git a/ICS/sxipan/src/sxipanNamedPos_uifClass.tcl b/ICS/sxipan/src/sxipanNamedPos_uifClass.tcl new file mode 100644 index 0000000..21e1246 --- /dev/null +++ b/ICS/sxipan/src/sxipanNamedPos_uifClass.tcl @@ -0,0 +1,153 @@ +# +#************************************************************* +# E.S.O. - VLT project +# +# "@(#) $Id: sxipanNamedPos_uifClass.tcl 353934 2022-03-23 11:55:40Z dricci $" +# +# sxipanNamedPos_uifClass.tcl +# +# This file has been produced by the panel editor +# version: panel.tcl 330695 +# date : Wed Mar 16 09:48:06 UTC 2022 +# +# !!!!!!!!!! DO NOT MANUALLY EDIT THIS FILE !!!!!!!!! +# +#-------------------------------------------------------------- + + +class sxipanNamedPos_uifClass { + inherit UifPanel + + constructor {args} { + + global ::shArea + panSetAutoPath {} libicbpan + parseClassName $this + + itk_component add top { + canvas $itk_interior.cv -width 654 -height 28 \ + -borderwidth 2 -highlightthickness 0 + } { + keep -relief + } + + pack $itk_component(top) -fill both -expand 1 + eval itk_initialize $args + +UifOutput $cv.devEnc -anchor w -canvasAnchor nw -color #000000 \ + -dbMode dbEvent -evtFilter "!=" \ + -evtScript {panEvtDbUpdate devEnc %A %T %D %Q} \ + -font -Adobe-courier-medium-r-normal--14*-iso8859-1 \ + -frame 1 \ + -labelFont -Adobe-helvetica-medium-r-normal--14*-iso8859-1 \ + -labelWidth 0 -variable gvar(MOTOR:STATUS.posEnc) \ + -width 8 +UifOutput $cv.devPos -anchor w -canvasAnchor nw -color #000000 \ + -dbMode dbEvent -evtFilter != \ + -evtScript {panEvtDbUpdate devPos %A %T %D %Q} \ + -font -Adobe-courier-medium-r-normal--14*-iso8859-1 \ + -frame 1 \ + -labelFont -Adobe-helvetica-medium-r-normal--14*-iso8859-1 \ + -labelWidth 0 -variable gvar(MOTOR:STATUS.pos) \ + -width 6 +UifOptionButton $cv.devSetup -canvasAnchor nw -default 0 -length 10 \ + -selectMode label -variable gvar(devSetup) +icbpanEntry $cv.devSetupEnc -background Grey90 -colBadVal red \ + -eraseOnEnter 1 \ + -font -Adobe-helvetica-medium-r-normal--14* \ + -foreground Black -id undefined \ + -initialState normal -justify left \ + -labelColor Black -labelFont {Helvetica -12 bold} \ + -labelWidth 0 -maxVal 100 -minVal 0 \ + -selectbackground Black -selectforeground Grey90 \ + -state normal -undo 0 -valType float \ + -variable .sxipanNamedPos.top.wdg.sxipanNamedPos.cv.devSetupEnc.sxipanNamedPos-wdg10 \ + -width 8 +UifOutputString $cv.devSimHset -anchor center -canvasAnchor nw \ + -font -Adobe-courier-medium-r-normal--14*-iso8859-1 \ + -frame 1 \ + -labelFont -Adobe-helvetica-medium-r-normal--14*-iso8859-1 \ + -labelWidth 0 -listColors {Black Red Red} \ + -listStrings {{} HSET SIM} -listValues {0 1 2} \ + -variable gvar(devSimHset) -width 4 +UifOutputString $cv.devState -anchor center -canvasAnchor nw \ + -dbMode dbEvent -evtFilter != \ + -evtScript {panEvtDbUpdate devState %A %T %D %Q} \ + -font -Adobe-courier-bold-r-normal--14*-iso8859-1 \ + -frame 1 \ + -labelFont -Adobe-helvetica-medium-r-normal--14*-iso8859-1 \ + -labelWidth 0 -listColors {Red Red Blue OliveDrab} \ + -listStrings {OFF LOADED STANDBY ONLINE} \ + -listValues {0 1 2 3} -variable gvar(.state) \ + -width 7 +UifOutputList $cv.devStatus0 -anchor w -canvasAnchor nw \ + -color #000000 -dbMode dbEvent -evtFilter != \ + -evtScript {panEvtDbUpdate devStatus0 %A %T %D %Q} \ + -font -Adobe-courier-medium-r-normal--14*-iso8859-1 \ + -frame 1 \ + -labelFont -Adobe-helvetica-medium-r-normal--14*-iso8859-1 \ + -labelWidth 0 -listColor {Blue Blue Red Red} \ + -listKey {INIT MOVING STOP FAILED} \ + -variable gvar(.status0) -width 12 +UifCheckButton $cv.devUse -anchor w -canvasAnchor nw -default 0 \ + -offVal 0 -onVal 1 -variable gvar(devUse) -width 0 +UifOutput $cv.device -anchor center -canvasAnchor nw \ + -color #000000 -dbMode dbEvent -evtFilter != \ + -evtScript {panEvtDbUpdate device %A %T %D %Q} \ + -font -Adobe-courier-medium-r-normal--14*-iso8859-1 \ + -frame 1 \ + -labelFont -Adobe-helvetica-medium-r-normal--14*-iso8859-1 \ + -labelWidth 0 -variable gvar(.device) -width 5 + + # + # Canvas Items + # + + }; # end of constructor + + #------------------------------------------- + #*# Method init + + public method init { } { + global ::panWidget ::gvar ::panDbData ::panWidgetHlp + set top $className + + # + # Set Widget Configuration + # + set panWidget(${top}.devEnc) {UifOutput 308 4 1 1 0 0 1 MOTOR:STATUS.posEnc 0 {} {}} + set panWidget(${top}.devPos) {UifOutput 388 4 1 1 0 0 1 MOTOR:STATUS.pos 0 %.2f {}} + set panWidget(${top}.devSetup) {UifOptionButton 452 4 1 0 0 0 1 devSetup 0 {}} + set panWidget(${top}.devSetupEnc) {PubClass 576 4 1 0 libicbpan.tcl nw 0 {} 0} + set panWidget(${top}.devSimHset) {UifOutputString 148 4 1 0 0 0 1 devSimHset 0 {}} + set panWidget(${top}.devState) {UifOutputString 76 4 1 1 0 0 1 .state 0 {}} + set panWidget(${top}.devStatus0) {UifOutputList 192 4 1 1 0 0 1 .status0 0 {} {}} + set panWidget(${top}.devUse) {UifCheckButton 4 4 1 0 0 0 1 devUse 0 0 1 0 0 0} + set panWidget(${top}.device) {UifOutput 26 4 1 1 0 0 1 .device 0 {} {}} + + # + # Set Database Configuration + # + set panDbData(${top}.devEnc) [list out local MOTOR:STATUS.posEnc 0 0 0 0 0 0 0 {}] + set panDbData(${top}.devPos) [list out local MOTOR:STATUS.pos 0 0 0 0 0 0 0 {}] + set panDbData(${top}.devState) [list out local .state 0 0 0 0 0 0 0 {}] + set panDbData(${top}.devStatus0) [list out local .status0 0 0 0 0 0 0 0 {}] + set panDbData(${top}.device) [list out local .device 0 0 0 0 0 0 0 {}] + + # + # Set Short Help for each widget + # + set panWidgetHlp(${top}.devEnc) {Current position in encoder unit} + set panWidgetHlp(${top}.devPos) {Current position in PLC unit} + set panWidgetHlp(${top}.devSetup) {Device control: accepts Enc value, position name or formula input.} + set panWidgetHlp(${top}.devSimHset) {Operational mode (blank = no simulation, no handset)} + set panWidgetHlp(${top}.devState) {Device state} + set panWidgetHlp(${top}.devStatus0) {Current position} + set panWidgetHlp(${top}.devUse) {Device selected/unselected} + set panWidgetHlp(${top}.device) {Device name} + + setInstanceData + set initDone 1 + }; # end of init + +} ; #end of the class diff --git a/MS/sxmait/ChangeLog b/MS/sxmait/ChangeLog new file mode 100644 index 0000000..a6bf091 --- /dev/null +++ b/MS/sxmait/ChangeLog @@ -0,0 +1 @@ +"@(#) $Id$" diff --git a/MS/sxmait/src/GP_bias.obd b/MS/sxmait/src/GP_bias.obd new file mode 100644 index 0000000..f37bd58 --- /dev/null +++ b/MS/sxmait/src/GP_bias.obd @@ -0,0 +1,49 @@ +# +# OBD-file written by BOB +# It includes the description of one observation block +# + +# Standard parameter file header + +PAF.HDR.START ; # Marks start of header +PAF.TYPE "OB Description"; # Type of parfile +PAF.ID ""; # Unused +PAF.NAME ""; # Unused +PAF.DESC ""; # Unused +PAF.CRTE.NAME "BOB"; # Broker for OBs +PAF.CRTE.DAYTIM "2021-06-03T11:41:33"; # Date+time of creation +PAF.LCHG.NAME ""; # Unused +PAF.LCHG.DAYTIM "2021-06-03T11:41:33"; # Date+time of last change +PAF.CHCK.NAME ""; # Unused +PAF.CHCK.DAYTIM ""; # Unused +PAF.CHCK.CHECKSUM ""; # Unused +PAF.HDR.END ; # Marks end of header + +# Observation Block description follows +# OB edited by BOB +OBS.ID "-1" +OBS.DID "ESO-VLT-DIC.OBS-2.2" +OBS.GRP "0" +OBS.NAME "Maintenance" +OBS.PI-COI.ID "0" +OBS.PI-COI.NAME "Condor" +OBS.PROG.ID "Maintenance" + + + +# TPL edited by BOB +TPL.ID "SOXS_img_cal_Bias" +TPL.NAME "Bias exposures for ACQ detector" +TPL.NEXP "3" +TPL.MODE "CAL" +DET3.EXPO.WIN.BINX "1" +DET3.EXPO.WIN.BINY "1" +DET3.EXPO.WIN.NX "1024" +DET3.EXPO.WIN.NY "1024" +DET3.EXPO.WIN.STARTX "1" +DET3.EXPO.WIN.STARTY "1" +DET3.READ.RATE "50KHz"; +DPR.CATG "CALIB" +DPR.TECH "IMAGE" +DPR.TYPE "BIAS" +SEQ.NEXPO "1" diff --git a/MS/sxmait/src/GP_dark.obd b/MS/sxmait/src/GP_dark.obd new file mode 100644 index 0000000..37d6539 --- /dev/null +++ b/MS/sxmait/src/GP_dark.obd @@ -0,0 +1,50 @@ +# +# OBD-file written by BOB +# It includes the description of one observation block +# + +# Standard parameter file header + +PAF.HDR.START ; # Marks start of header +PAF.TYPE "OB Description"; # Type of parfile +PAF.ID ""; # Unused +PAF.NAME ""; # Unused +PAF.DESC ""; # Unused +PAF.CRTE.NAME "BOB"; # Broker for OBs +PAF.CRTE.DAYTIM "2021-06-03T10:23:43"; # Date+time of creation +PAF.LCHG.NAME ""; # Unused +PAF.LCHG.DAYTIM "2021-06-03T10:23:43"; # Date+time of last change +PAF.CHCK.NAME ""; # Unused +PAF.CHCK.DAYTIM ""; # Unused +PAF.CHCK.CHECKSUM ""; # Unused +PAF.HDR.END ; # Marks end of header + +# Observation Block description follows +# OB edited by BOB +OBS.ID "-1" +OBS.DID "ESO-VLT-DIC.OBS-2.2" +OBS.GRP "0" +OBS.NAME "Maintenance" +OBS.PI-COI.ID "0" +OBS.PI-COI.NAME "Condor" +OBS.PROG.ID "Maintenance" + + + +# TPL edited by BOB +TPL.ID "SOXS_img_cal_Dark" +TPL.NAME "Dark exposures for ACQ detector" +TPL.NEXP "3" +TPL.MODE "CAL" +DET3.EXPO.TIME "0.1" +DET3.EXPO.WIN.BINX "1" +DET3.EXPO.WIN.BINY "1" +DET3.EXPO.WIN.NX "1024" +DET3.EXPO.WIN.NY "1024" +DET3.EXPO.WIN.STARTX "1" +DET3.EXPO.WIN.STARTY "1" +DET3.READ.RATE "50KHz"; +DPR.CATG "CALIB" +DPR.TECH "IMAGE" +DPR.TYPE "DARK" +SEQ.NEXPO "3" diff --git a/MS/sxmait/src/Makefile b/MS/sxmait/src/Makefile new file mode 100644 index 0000000..992c21a --- /dev/null +++ b/MS/sxmait/src/Makefile @@ -0,0 +1,210 @@ +#******************************************************************************* +# E.S.O. - VLT project +# +# "@(#) $Id: Makefile 343686 2021-06-19 09:54:05Z abaruffo $" +# +# Makefile of ........ +# +# who when what +# -------- ---------- ---------------------------------------------- +# soxsmgr yyyy-mm-dd created +# + +#******************************************************************************* +# This Makefile follows VLT Standards (see Makefile(5) for more). +#******************************************************************************* +# REMARKS +# None +#------------------------------------------------------------------------ + +GP_OBDs = GP_bias.obd GP_dark.obd + +# +# user definable C-compilation flags +#USER_CFLAGS = + +# +# additional include and library search paths +#USER_INC = +#USER_LIB = + +# +# MODULE CODE DESCRIPTION: +# ------------------------ +# As a general rule: public file are "cleaned" and "installed" +# local (_L) are not "installed". + +# +# PYTHON SCRIPTS +# -------------- +PY_SCRIPTS = +PY_SCRIPTS_L = +PY_MODULES = +PY_PACKAGES = + +# +# Qt Designer UI file to compile into mmmmmm module +mmmmmm_UIFILE = + +# +# Qt Designer UI files to compile into submodules of pppppp package +pppppp_UIFILES = + +# +# C programs (public and local) +# ----------------------------- +EXECUTABLES = +EXECUTABLES_L = + +# +# +xxxxx_OBJECTS = +xxxxx_LDFLAGS = +xxxxx_LIBS = + +# +# special compilation flags for single c sources +#yyyyy_CFLAGS = + +# +# Includes (.h) files (public only) +# --------------------------------- +INCLUDES = + +# +# Libraries (public and local) +# ---------------------------- +LIBRARIES = +LIBRARIES_L = + +# +# +lllll_OBJECTS = + +# +# Scripts (public and local) +# ---------------------------- +SCRIPTS = +SCRIPTS_L = + +# +# TCL scripts (public and local) +# ------------------------------ +TCL_SCRIPTS = +TCL_SCRIPTS_L = + +# +# +tttttt_OBJECTS = +tttttt_TCLSH = +tttttt_LIBS = + +# +# TCL libraries (public and local) +# ------------------------------ +TCL_LIBRARIES = +TCL_LIBRARIES_L = + +# +# +tttlll_OBJECTS = + +# +# UIF panels (public and local) +# ---------------------------- +PANELS = +PANELS_L = + +# +# On-Line Database Files +# ---------------------- +DBL_CLASSES = +DBL_BCF = +DBL_FLAGS = +xxxx_DBL_FLAGS = + +# +# IDL Files and flags +# +IDL_FILES = +IDL_TAO_FLAGS = +USER_IDL = + +# +# man pages to be done +# -------------------- +MANSECTIONS = +MAN1 = +MAN3 = +MAN5 = +MAN7 = +MAN8 = + +# +# local man pages +# --------------- +MANl = + +# +# pkg-config files +# ---------------- +PKGCONFIG_TEMPLATES = + +# +# ASCII file to be converted into Framemaker-MIF +# -------------------- +ASCII_TO_MIF = + +# +# INS_ROOT files to be installed +#------------------------------- +INS_ROOT_FILES = $(GP_OBDs) +INS_ROOT_DIR = + +# +# other files to be installed +#---------------------------- +INSTALL_FILES = + +# +# list of all possible C-sources (used to create automatic dependencies) +# CSOURCENAMES removed as unused since VLT2011 - VLTSW-10877 + +# +#>>>>> END OF standard rules + +# +# CHOSE PLATFORM +# -------------- +# Default is UNIX, for VxVorks application next line MUST BE UNCOMMENTED +#MAKE_VXWORKS = on + +# +# INCLUDE STANDARDS +# ----------------- +MAKEDIR = $(VLTROOT)/include +include $(MAKEDIR)/vltMakefile + +# +# TARGETS +# ------- +all: do_all + @echo " . . . 'all' done" + +clean : clean_all + @echo " . . . clean done" + +clean_dist : clean_all clean_dist_all + @echo " . . . clean_dist done" + +man : do_man + @echo " . . . man page(s) done" + +install : install_all + @echo " . . . installation done" + +db : db_all + @echo " . . . ../DB done" + + +#___oOo___ diff --git a/MS/sxmseq/ChangeLog b/MS/sxmseq/ChangeLog new file mode 100644 index 0000000..9032ad7 --- /dev/null +++ b/MS/sxmseq/ChangeLog @@ -0,0 +1,34 @@ +Tue Sep 17 16:17:03 2004 Stewart McLay + + * config/XXXX_ngcoptimg_tec_parasitic.ref: Adapted from FIERA to NGCOPT + * config/XXXX_optimg_tec_parasitic.ref: Deleted obselete file + * src/XXXX_ngcoptimg_tec_parasitic.obdv: Adapted from FIERA to NGCOPT + * src/XXXX_optimg_tec_parasitic.obdv: Deleted obselete file + * src/xxmseqGenTecMSTest.txt: Adapted from FIERA to NGCOPT + * src/xxmseqTsfList.txt: Adapted from FIERA to NGCOPT + +Fri Oct 29 16:17:03 2004 Antonio Longinotti + + * test/*: removed according to new test scheme (see xxmcfgTEST.cfg) + +Fri Oct 29 16:16:48 2004 xxmseq version: 1.6 +Fri Jul 9 10:28:23 2004 Antonio Longinotti + + * config/XXXX_optimg_tec_parasitic.ref: changed CLKIND for FIERA + +Fri Jul 09 10:27:07 2004 xxmseq version: 1.5 +Wed Jun 30 12:25:16 2004 Template Instrument Manager (care of Anotnio Longinotti) + + * test/xxmseqTest: UT0 --> UT1 + +Wed Jun 30 14:24:36 2004 xxmseq version: 1.4 +Fri Jun 11 12:54:38 2004 Antonio Longinotti + + * src/XXXX_optimg_tec_parasitic.obdv: added + +Wed Jun 09 15:36:17 2004 xxmseq version: 1.3 +Sun Nov 25 12:00:00 2001 xxmseq version: 1.1.1.1 + + * config/XXXX_optimg_tec_parasitic.ref: created. + +"@(#) $Id: ChangeLog 246639 2013-09-17 16:45:09Z smclay $" diff --git a/MS/sxmseq/bitmaps/SOXS_NIR_E2E_Frame_Noise1_CPdefocus_2.fits b/MS/sxmseq/bitmaps/SOXS_NIR_E2E_Frame_Noise1_CPdefocus_2.fits new file mode 100644 index 0000000000000000000000000000000000000000..dfcde0b6bd38ef7577236a042a4d8eee98b6419a GIT binary patch literal 33557760 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

!^Nwj_1T}-~mqX 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