diff --git a/CONFIG/sxmcfg/ChangeLog b/CONFIG/sxmcfg/ChangeLog new file mode 100644 index 0000000000000000000000000000000000000000..64659dad3bc0679572aab76afd7b4b0248abe4df --- /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 0000000000000000000000000000000000000000..356112e65f86a8bdbf3fdb455d5659865c74c15f --- /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 0000000000000000000000000000000000000000..9173cd745d6db9d8d9780b726670a9d5f583b684 --- /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 0000000000000000000000000000000000000000..7e90e8b74e562ea05b8aee19fe18a63d1e024fca --- /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 0000000000000000000000000000000000000000..0dcf9271814bb2d7c3e702c6d197e1a747cd0660 --- /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 0000000000000000000000000000000000000000..2e1fa410adaeee2bc07c5a92626ac16aa4084953 --- /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 0000000000000000000000000000000000000000..c569b14de6d66a0930d05e6c2e520a4dce30034e --- /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 0000000000000000000000000000000000000000..4f5ab0241f13880ff91e9c6bed4ec89dd5854cf3 --- /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 0000000000000000000000000000000000000000..a29d1a8d5d618981ae2e0ed53959eea4153977bc --- /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 0000000000000000000000000000000000000000..3e33ac9ca7fa57d7f109fce51366d0db818a6935 --- /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 0000000000000000000000000000000000000000..2dbe8d5b74f3effe9f0efa0df2d29b16cd015d6f --- /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 0000000000000000000000000000000000000000..dfc22005628f6447dbede93bcf3b582f9b0bb826 --- /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 0000000000000000000000000000000000000000..dc364ccb3646c3360e19ac045d0785a4567b6e21 --- /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 0000000000000000000000000000000000000000..690e861592200df287a9fa4941514a2fd22a9307 --- /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 0000000000000000000000000000000000000000..8bd2c9a9ab4ec8a772fa5f957573a96fc64b7ce9 --- /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 0000000000000000000000000000000000000000..f2028baa2aa14f1b2fd75663dc7c92e77851f3a9 --- /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 0000000000000000000000000000000000000000..b24f7257c61656f413d11bca031c33c4e425914d --- /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 0000000000000000000000000000000000000000..f9a1a790fd98e9ee05742e29ee8235318aa89ee0 --- /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 0000000000000000000000000000000000000000..d2f38b4d21b954220140d5d0d4758bb8dae69851 --- /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 0000000000000000000000000000000000000000..c5939b8fb13ac1a9267550045e5e7e01b6769801 --- /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 0000000000000000000000000000000000000000..4fbb457bd1c782608f8e1966bd2a8b75ced7de45 --- /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 0000000000000000000000000000000000000000..f7f02b1699d1e9a333d06553ef7ff8a346ca57f3 --- /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 0000000000000000000000000000000000000000..4aa41f94a0d4a8c3facfb54c4feb9aadb728f65a --- /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 0000000000000000000000000000000000000000..91557334d56d60e689927704382818b4421862c3 --- /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 0000000000000000000000000000000000000000..f777091b54630127ab33f4f9db41118316ac6321 --- /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 0000000000000000000000000000000000000000..57ea51494d994a6beb0424ca1a9fc2768dd168f0 --- /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 0000000000000000000000000000000000000000..1bce40d4d9d4fd97769f08ed2bb9fca212c58128 --- /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 0000000000000000000000000000000000000000..bf42fc6e91afec70ed1e964cbd1f93b25dd53862 --- /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 0000000000000000000000000000000000000000..519d84c14bd2f16a1d9bc4a6593a0125823a8e52 --- /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 0000000000000000000000000000000000000000..dce1e3eb366ce2d7099ab953c53257510cdb23b9 --- /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 0000000000000000000000000000000000000000..c1b3ae9b22e9d885fdfcf36934c4a29d3b1a4d3c --- /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 0000000000000000000000000000000000000000..c606ab6f6fc09015b8197852af79cf6d4fa484cf --- /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 0000000000000000000000000000000000000000..6b5f4e4c840560aecca9f8a0d025aff944c2803d --- /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 0000000000000000000000000000000000000000..20daaefd3e0b6a0d0de6ac59296828af00030da1 --- /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 0000000000000000000000000000000000000000..df28a858d8dda05e6afdd419c58319ec06c2acdd --- /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 0000000000000000000000000000000000000000..d95eaf09fc113d052368c2945f89331b1418c71a --- /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 0000000000000000000000000000000000000000..4edd347d71cb4f14b94c919dc39a416a247b592b --- /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 0000000000000000000000000000000000000000..de416d5f4c21d8b2f42245f29f20a519f91a7043 --- /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 0000000000000000000000000000000000000000..a54f2a5be8eb49a8da4e3d28f1b90306f5811f4f --- /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 0000000000000000000000000000000000000000..0e92be11e78675efe06100eb67099c3b12396931 --- /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 0000000000000000000000000000000000000000..4f7da2e31e48b6a8e6af34107b04a6dd33319aef --- /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 0000000000000000000000000000000000000000..b659cfb2665c80462327b7d7d82ddd1fd4c56a29 --- /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 0000000000000000000000000000000000000000..0a3854beaec847322b9122778a1b6bf1a71132b9 --- /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 0000000000000000000000000000000000000000..192b2cf4c440a3b404592dadf5a511d35309e0ca --- /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 0000000000000000000000000000000000000000..53107d196299ab34deea322587b682efdde0d7b3 --- /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 0000000000000000000000000000000000000000..5005949ff2fd92bfbb657baa42d6689c44ac7b51 --- /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 0000000000000000000000000000000000000000..0b3beb97b3cd4723348352f63f9510fe767b0ca4 --- /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 0000000000000000000000000000000000000000..3fcde55c4bd2d0eb24a3d7d8c8f3b126dc7112a4 --- /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 0000000000000000000000000000000000000000..6de1c2a7a3ed258e26ed401fc643390f3d701aa8 --- /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 0000000000000000000000000000000000000000..1ba0fa0984161722bf02ef0f70ccf68f627fa8d4 --- /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 0000000000000000000000000000000000000000..27519ed051a355ff4bf8fc278d09c6534d9286bd --- /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 0000000000000000000000000000000000000000..8939c755ef48a5a22fd671888fe3082f8fe3f053 --- /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 0000000000000000000000000000000000000000..6ce34542adeb4d0225d6f0a2564daa1354d39506 --- /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 0000000000000000000000000000000000000000..392b81b7b37ebfc819612d40ae674a642394dce2 --- /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 0000000000000000000000000000000000000000..dfcb4878b835ab2810ad5f117a5854761d8ffd77 --- /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 0000000000000000000000000000000000000000..1e272b8a4c666b71317512204a1ec72731bdca6e --- /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 0000000000000000000000000000000000000000..819d0d4f3a29c8dd1c8ac01d3826d46e88f68c66 --- /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 0000000000000000000000000000000000000000..cc42b06e4d1c674fb48a179606dc8c36b1bc4ebb --- /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 0000000000000000000000000000000000000000..25e44a72e07c8648bae2bb4013abd8532fb08bca --- /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 0000000000000000000000000000000000000000..2ddcfa194aada62a66fe78bbcb655b2e89e71297 --- /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 0000000000000000000000000000000000000000..c8bbb27bc015af7adb1c6e9b8b4bc02a83b03041 --- /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 0000000000000000000000000000000000000000..a7888b922fe2813a1d5965e53744c6474f48e7a5 --- /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 0000000000000000000000000000000000000000..50be20621ee03ba2b27fcd4fe3ec1ed2f22543f5 --- /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 0000000000000000000000000000000000000000..2de04c58149438d8fe8d3b9ecd6e702e29c308e1 --- /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 0000000000000000000000000000000000000000..324428376e616130c75e18de307194596ecd9608 --- /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 0000000000000000000000000000000000000000..ab46a20654185123d9ebf3e6a7a543cfb88f5a08 --- /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 0000000000000000000000000000000000000000..01b7555a241c085dbfb69694449d66045e8de7ea --- /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 0000000000000000000000000000000000000000..afd276c485d444e79361f7137a6711fc2728d691 --- /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 0000000000000000000000000000000000000000..6a02e98732f76718adf05310427171b1b55cee66 --- /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 0000000000000000000000000000000000000000..ca062438c354cea7b4fd0ea459ee1bcc6d2690aa --- /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 0000000000000000000000000000000000000000..3f4b4bcd85a2a49ac2728a37e215de4b49ba5298 --- /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 0000000000000000000000000000000000000000..a6bf091b522213900a055a4eb1a126d8732a01fb --- /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 0000000000000000000000000000000000000000..128153e418a0d0bf17e7554288016c10ca2a1a5e --- /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 0000000000000000000000000000000000000000..65d6674eb760f4c33c89716f2bc879e6eb942168 --- /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 0000000000000000000000000000000000000000..49176e0d7a69d1dd0129b4f2684dac43cb961b5b --- /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 Binary files /dev/null and b/ICS/sxiafc/doc/sxiafcDevDrvAfc.doc differ diff --git a/ICS/sxiafc/include/sxiafcDefines.h b/ICS/sxiafc/include/sxiafcDefines.h new file mode 100644 index 0000000000000000000000000000000000000000..265f28350c280e329f2fb95d91e2b192a75569d0 --- /dev/null +++ b/ICS/sxiafc/include/sxiafcDefines.h @@ -0,0 +1,60 @@ +#ifndef ic0fbiDEFINES_H +#define ic0fbiDEFINES_H + +#ifndef __cplusplus +#error This is a C++ include file and cannot be used from plain C +#endif + +// definitions common to both the device driver and the simulator + +struct Dev { + const string StatErrorCode = "StatErrorCode"; // stat.nErrorCode + const string StatErrorCodeText = "StatErrorCodeText"; // stat.sErrorText + const string StatInitialised = "StatInitialised"; // stat.bInitialised + const string StatStatus = "StatStatus"; // stat.nStatus + const string StatStatusText = "StatStatusText"; // stat.sStatus + const string StatCommandReplyText = "StatCommandReplyText"; // stat.sReply + const string CtrlCommand = "CtrlCommand"; // ctrl.nCommand + const string CtrlCommandText = "CtrlCommandText"; // ctrl.sCommand + const string CtrlExecute = "CtrlExecute"; // ctrl.bExecute +}; + +struct Status { + const vltINT32 Idle = 0; + const vltINT32 Busy = 1; + const vltINT32 Error = 2; + const vltINT32 Off = 3; + const vltINT32 Moving = 4; + const vltINT32 Failed = -1; +}; + +struct CtrlCmd { + const vltINT32 None = 0; + const vltINT32 Init = 1; + const vltINT32 Write = 2; +}; + +// GCS commands +struct GcsCmd { + const char checkMotion = (char)0x05; + //const char checkReady = (char)0x07; + //const char stopAxes = (char)0x18; + const string autoZero = "ATZ"; + //const string halt = "HLT"; + const string error = "ERR?"; + const string moveAbs = "MOV"; + //const string moveRel = "MVR"; + const string getPos = "POS?"; + //const string unit = "PUN"; + //const string reboot = "RBT"; + //const string stop = "STP"; + const string svo = "SVO"; + //const string getMin = "TMN"; + //const string getMax = "TMX"; +}; + +#endif // !ic0fbiDEFINES_H + + + + diff --git a/ICS/sxiafc/include/sxiafcDevDrvAfc.h b/ICS/sxiafc/include/sxiafcDevDrvAfc.h new file mode 100644 index 0000000000000000000000000000000000000000..d229edd6073da75f0c5ab9afaecab98e7e14f763 --- /dev/null +++ b/ICS/sxiafc/include/sxiafcDevDrvAfc.h @@ -0,0 +1,318 @@ +#ifndef sxiafcDevDrvAfc_H +#define sxiafcDevDrvAfc_H +//////////////////////////////////////////////////////////////////////////////// +// ESO - VLT Project +// +// "@(#) $Id: sxiafcDevDrvAfc.h 356146 2022-05-09 08:32:06Z bsalasni $" +// +// Who When What +// -------- ---------- ------------------------------------------------------- +// jknudstr 2009-11-09 Created +// UPDATE UPDATE Updated from template +//------------------------------------------------------------------------------ + +//////////////////////////////////////////////////////////////////////////////// +// UPDATE: Template header source file to use as starting point when +// implementing new IC0FB Device Drivers. +//------------------------------------------------------------------------------ + +#ifndef __cplusplus +#error This is a C++ include file and cannot be used from plain C +#endif + +#include "ic0fbDevDrvBase.h" +#include "sxiafcDefines.h" +#include + +/// +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 0000000000000000000000000000000000000000..5429adbd30967e19b4ce02be19fd55b447561c00 --- /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 0000000000000000000000000000000000000000..afd100420f4eadc4a40df4609321858f868c296a --- /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 0000000000000000000000000000000000000000..4388f0c67fe9800a8e0ed33c95591a0a44d9e271 --- /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 0000000000000000000000000000000000000000..ff975ebe9864b6e49ce393002485d35abf2bcab6 --- /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 0000000000000000000000000000000000000000..b2c416d5c67ca336cf8a8a547df75376e4043195 --- /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 0000000000000000000000000000000000000000..b955a7e2fa03e33601569ce48c09c379c629fb87 --- /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 0000000000000000000000000000000000000000..83ed3a3b575b73fe24fc4cea39b1fd69fe5b0095 --- /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 0000000000000000000000000000000000000000..9012cd4991cb841c4542f447a0ee2c2131d0feb6 --- /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 0000000000000000000000000000000000000000..a6bf091b522213900a055a4eb1a126d8732a01fb --- /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 0000000000000000000000000000000000000000..8893feb3eb125d3a181987d6ef6b336c7320fc85 --- /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 0000000000000000000000000000000000000000..0f68193119eca89d2f9b1b5899c8b914ef8474a0 --- /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 0000000000000000000000000000000000000000..de255d6b7578484ef16e4fe62fbdcd92b55c2539 --- /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 Binary files /dev/null and b/ICS/sxinise/doc/sxiniseDevDrvNise.doc differ diff --git a/ICS/sxinise/include/sxiniseDevDrvNise.h b/ICS/sxinise/include/sxiniseDevDrvNise.h new file mode 100644 index 0000000000000000000000000000000000000000..af34f6d1d4b9a7e7073eaa7c906ebd811569f0bd --- /dev/null +++ b/ICS/sxinise/include/sxiniseDevDrvNise.h @@ -0,0 +1,372 @@ +#ifndef sxiniseDevDrvNise_H +#define sxiniseDevDrvNise_H +//////////////////////////////////////////////////////////////////////////////// +// ESO - VLT Project +// +// "@(#) $Id: sxiniseDevDrvNise.h 329452 2020-01-17 14:09:40Z mdepasca $" +// +// Who When What +// -------- ---------- ------------------------------------------------------- +// jknudstr 2009-11-09 Created +// UPDATE UPDATE Updated from template +//------------------------------------------------------------------------------ + +//////////////////////////////////////////////////////////////////////////////// +// UPDATE: Template header source file to use as starting point when +// implementing new IC0FB Device Drivers. +//------------------------------------------------------------------------------ + +#ifndef __cplusplus +#error This is a C++ include file and cannot be used from plain C +#endif + +#include "ic0fbiDevDrvBase.h" + +#include "ic0fbiIoMgr.h" +#include "ic0fbiMotPosTable.h" + +#include +#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 0000000000000000000000000000000000000000..781d4dd4ac9f7481f77a1bbbb95b9d6b211e23ed --- /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 0000000000000000000000000000000000000000..1e390335523141136536236d97c55bc393752ae3 --- /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 0000000000000000000000000000000000000000..5513e3d7a71f46d4a46a27b885bf1a5fdf7c3f5c --- /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 0000000000000000000000000000000000000000..6357a617ed7b27cdf8ea2825a4bff65a5789722c --- /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 0000000000000000000000000000000000000000..d94b73a2781000b6a1b524eb3a50320515a92bbb --- /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 0000000000000000000000000000000000000000..61da05ee527e3a424c58cf28b4403c890bcd00ec --- /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 0000000000000000000000000000000000000000..e97d820b88c88ce07cbbd730abb0f90544671da5 --- /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 Binary files /dev/null and b/ICS/sxipan/bitmaps/soxslogo.gif differ diff --git a/ICS/sxipan/src/Makefile b/ICS/sxipan/src/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..2b3b6214e2958cf85a4da3114e6ed33886319f93 --- /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 0000000000000000000000000000000000000000..3f7bc3b44bb4078525228da240d6c924c0cc7309 --- /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 0000000000000000000000000000000000000000..99e2c21b5cdd7c501cde8640adabb45c949211ba --- /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 0000000000000000000000000000000000000000..63ca5201a116bda9ed4fa881832710ac146f05f2 --- /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 0000000000000000000000000000000000000000..013b247ada0baab8016225df3c26dd0d83ee39ef --- /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 0000000000000000000000000000000000000000..064dcea1c8e1cbb0d66d552fc600e7aeee05c228 --- /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 0000000000000000000000000000000000000000..060e590e86f705f9e4ca969467a66f0315bb304e --- /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 0000000000000000000000000000000000000000..80b6c1d819b54ff1e2b06ebce1abef0249d07acc --- /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 0000000000000000000000000000000000000000..21e124669e56bd10381843312a65c00815ce1288 --- /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 0000000000000000000000000000000000000000..a6bf091b522213900a055a4eb1a126d8732a01fb --- /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 0000000000000000000000000000000000000000..f37bd58285903dd0b972d77e9ebd37d7aef708bb --- /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 0000000000000000000000000000000000000000..37d65391b39a80dfa236e2f1c5019a2d66fd09e4 --- /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 0000000000000000000000000000000000000000..992c21a506c8fe26dfd137c00b40ce4ddb581cf3 --- /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 0000000000000000000000000000000000000000..9032ad7d5051b6c1d392a53bd17a1af3ad9ef4e7 --- /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 Binary files /dev/null and b/MS/sxmseq/bitmaps/SOXS_NIR_E2E_Frame_Noise1_CPdefocus_2.fits differ diff --git a/MS/sxmseq/bitmaps/SOXS_NIR_E2E_Frame_Noise1_CPdefocus_3.fits b/MS/sxmseq/bitmaps/SOXS_NIR_E2E_Frame_Noise1_CPdefocus_3.fits new file mode 100644 index 0000000000000000000000000000000000000000..33221f8507d249805ef11491bef5c401d64d7683 Binary files /dev/null and b/MS/sxmseq/bitmaps/SOXS_NIR_E2E_Frame_Noise1_CPdefocus_3.fits differ diff --git a/MS/sxmseq/bitmaps/SOXS_NIR_E2E_Frame_Noise1_CPdefocus_4.fits b/MS/sxmseq/bitmaps/SOXS_NIR_E2E_Frame_Noise1_CPdefocus_4.fits new file mode 100644 index 0000000000000000000000000000000000000000..5781530fcc0c558775ca970fc719e801f3c2aa5e Binary files /dev/null and b/MS/sxmseq/bitmaps/SOXS_NIR_E2E_Frame_Noise1_CPdefocus_4.fits differ diff --git a/MS/sxmseq/bitmaps/SOXS_NIR_E2E_Frame_Noise1_CPdefocus_5.fits b/MS/sxmseq/bitmaps/SOXS_NIR_E2E_Frame_Noise1_CPdefocus_5.fits new file mode 100644 index 0000000000000000000000000000000000000000..3b71635b8a020137fc9cff2e61d51ff794c0eb82 Binary files /dev/null and b/MS/sxmseq/bitmaps/SOXS_NIR_E2E_Frame_Noise1_CPdefocus_5.fits differ diff --git a/MS/sxmseq/bitmaps/SOXS_NIR_E2E_Frame_Noise1_CPdefocus_6.fits b/MS/sxmseq/bitmaps/SOXS_NIR_E2E_Frame_Noise1_CPdefocus_6.fits new file mode 100644 index 0000000000000000000000000000000000000000..5781530fcc0c558775ca970fc719e801f3c2aa5e Binary files /dev/null and b/MS/sxmseq/bitmaps/SOXS_NIR_E2E_Frame_Noise1_CPdefocus_6.fits differ diff --git a/MS/sxmseq/bitmaps/SOXS_NIR_E2E_Frame_Noise1_CPdefocus_7.fits b/MS/sxmseq/bitmaps/SOXS_NIR_E2E_Frame_Noise1_CPdefocus_7.fits new file mode 100644 index 0000000000000000000000000000000000000000..33221f8507d249805ef11491bef5c401d64d7683 Binary files /dev/null and b/MS/sxmseq/bitmaps/SOXS_NIR_E2E_Frame_Noise1_CPdefocus_7.fits differ diff --git a/MS/sxmseq/bitmaps/SOXS_NIR_E2E_Frame_Noise1_CPdefocus_8.fits b/MS/sxmseq/bitmaps/SOXS_NIR_E2E_Frame_Noise1_CPdefocus_8.fits new file mode 100644 index 0000000000000000000000000000000000000000..dfcde0b6bd38ef7577236a042a4d8eee98b6419a Binary files /dev/null and b/MS/sxmseq/bitmaps/SOXS_NIR_E2E_Frame_Noise1_CPdefocus_8.fits differ diff --git a/MS/sxmseq/bitmaps/pinhole_stddev1_7.0.fits b/MS/sxmseq/bitmaps/pinhole_stddev1_7.0.fits new file mode 100644 index 0000000000000000000000000000000000000000..9da6f3cee3bdd435455ba9983bb31a74da3dae82 --- /dev/null +++ b/MS/sxmseq/bitmaps/pinhole_stddev1_7.0.fits @@ -0,0 +1,24762 @@ +SIMPLE = T / conforms to FITS standard BITPIX = -64 / array data type NAXIS = 2 / number of array dimensions NAXIS1 = 1024 NAXIS2 = 1024 ORIGIN = 'TEST ' / European Southern Observatory DATE = '2020-04-09T15:44:26.2345' / Date the file was written TELESCOP= 'Tel name not set' / ESO INSTRUME= 'SOXS ' / Instrument used. OBJECT = 'stddev1_7.0_0px' / Original target. RA = 360.000000 / [deg] 23:59:59.9 RA (J2000) pointing DEC = -80.00000 / [deg] -79:59:59.9 DEC (J2000) pointing EQUINOX = 2000.0 / Standard FK5 RADECSYS= 'FK5 ' / Coordinate system EXPTIME = 1.1000000 / Integration time MJD-OBS = 58948.65583363 / 2020-04-09T15:44:24.0258 DATE-OBS= '2020-04-09T15:44:24.0258' / Observing date UTC = 56663.312 / [s] 15:44:23.312 UTC LST = 968.337 / [s] 00:16:08.337 LST PI-COI = 'Condor ' / PI-COI name. CTYPE1 = 'PIXEL ' / Pixel coordinate system CTYPE2 = 'PIXEL ' / Pixel coordinate system CRPIX1 = 0.5 / Ref pixel in axis1 CRPIX2 = 0.5 / Ref pixel in axis2 CRVAL1 = 1. / Coordinate value of reference pixel CRVAL2 = 1. / Coordinate value of reference pixel CD1_1 = 1. / Transformation matrix element CD2_1 = 0. / Transformation matrix element CD1_2 = 0. / Transformation matrix element CD2_2 = 1. / Transformation matrix element ORIGFILE= 'SOXS_GEN_OBS_NIR_100_0001.fits' / Original File Name BUNIT = 'adu ' / Physical Unit HIERARCH ESO ADA ABSROT END = 0.00000 / [deg] Abs rot angle at exp end HIERARCH ESO ADA ABSROT PPOS = 'POS ' / sign of probe position HIERARCH ESO ADA ABSROT START = 0.00000 / [deg] Abs rot angle at exp start HIERARCH ESO ADA GUID DEC = 0.00000 / [deg] 00:00:00.0 Guide star DEC J2000 HIERARCH ESO ADA GUID RA = 0.000000 / [deg] 00:00:00.0 Guide star RA J2000 HIERARCH ESO ADA GUID STATUS = 'ON ' / Status of autoguider HIERARCH ESO ADA POSANG = 0.00000 / [deg] Position angle at start HIERARCH ESO DET ACQ1 APPREV = 0 / Pre-processor application revision HIERARCH ESO DET ACQ1 CONT = F / Acq.-process continuous mode HIERARCH ESO DET ACQ1 DISKMEM= F / Disk-memory enabled HIERARCH ESO DET ACQ1 PROC = 'ngciracqH11' / Process name HIERARCH ESO DET ACQ1 QDUMP = F / Queue Dump Mode HIERARCH ESO DET ACQ1 QUEUE = 0 / Frame queue size HIERARCH ESO DET ACQ1 REV = 1 / Pre-processor framework revision HIERARCH ESO DET ACQ1 SOFW MODE= 'LCU-SIM' / Software operational mode HIERARCH ESO DET ACQ1 WIN NX = 1024 / Acq.-window NX HIERARCH ESO DET ACQ1 WIN NY = 1024 / Acq.-window NY HIERARCH ESO DET ACQ1 WIN STRX= 1 / Acq.-window start-x HIERARCH ESO DET ACQ1 WIN STRY= 1 / Acq.-window start-y HIERARCH ESO DET ADC1 CLAMP = F / Clamp-and-Sample HIERARCH ESO DET ADC1 DELAY = 0 / Conv.-strobe delay (ticks) HIERARCH ESO DET ADC1 FILTER = 0 / Filter (0 = 0.5us, 1 = 5us) HIERARCH ESO DET ADC1 OFFSET = 3.000 / [V] ADC offset value HIERARCH ESO DET ADC1 PPENA = F / Pre-processor enabled HIERARCH ESO DET ADC1 PPFOWLER= F / Fowler mode HIERARCH ESO DET ADC1 PPINVERT= F / Invert Fowler-Pairs HIERARCH ESO DET ADC1 PPNINT = 1 / Integration frame counter HIERARCH ESO DET ADC1 PPNSAMP= 1 / Sub-pixel samples HIERARCH ESO DET ADC1 PPNX = 0 / Pre-processor x-dimension HIERARCH ESO DET ADC1 PPNY = 0 / Pre-processor y-dimension HIERARCH ESO DET ADC1 TEMP = 20.18 / [C] Board temperature HIERARCH ESO DET CHIP DATE = '2005-08-03' / Date of installation HIERARCH ESO DET CHIP GAIN = 1.00 / [e-/ADU] Gain HIERARCH ESO DET CHIP ID = 'myChipId' / Detector chip identification HIERARCH ESO DET CHIP INDEX = 1 / Chip index HIERARCH ESO DET CHIP LIVE = T / Detector alive HIERARCH ESO DET CHIP NAME = 'Tomatito' / Detector chip name HIERARCH ESO DET CHIP NX = 1024 / number of pixels along x HIERARCH ESO DET CHIP NY = 1024 / number of pixels along y HIERARCH ESO DET CHIP PSZX = 1. / [um] Size of pixel in X HIERARCH ESO DET CHIP PSZY = 1. / [um] Size of pixel in Y HIERARCH ESO DET CHIP PXSPACE= 1.000E-06 / [m] Pixel-Pixel Spacing HIERARCH ESO DET CHIP RGAP = 0. / [deg] Angle of gap between chips HIERARCH ESO DET CHIP RON = 0.00 / [e-] Read-out noise HIERARCH ESO DET CHIP TYPE = 'myChipType' / The Type of detector chip HIERARCH ESO DET CHIP X = 1 / X location in array HIERARCH ESO DET CHIP XGAP = 10. / Gap after chip along x HIERARCH ESO DET CHIP Y = 1 / Y location in array HIERARCH ESO DET CHIP YGAP = 10. / Gap after chip along y HIERARCH ESO DET CHOP CYCSUM = T / Half-Cycle Averaging HIERARCH ESO DET CHOP CYCSYNC= F / Sync to cycle HIERARCH ESO DET CHOP FREQ = 0.000000 / [Hz] Chopping frequency HIERARCH ESO DET CHOP ST = F / Chopping enabled HIERARCH ESO DET CHOP TIM = 1.1000000 / [s] TIM period HIERARCH ESO DET CHOP TRANSTIM= 0.025 / [s] Chopper transition time HIERARCH ESO DET CLDC1 CLKHI1= 1.000 / [V] Clock voltage setup value HIERARCH ESO DET CLDC1 CLKHI10= 0.000 / [V] Clock voltage setup value HIERARCH ESO DET CLDC1 CLKHI11= 0.000 / [V] Clock voltage setup value HIERARCH ESO DET CLDC1 CLKHI12= 0.000 / [V] Clock voltage setup value HIERARCH ESO DET CLDC1 CLKHI13= 0.000 / [V] Clock voltage setup value HIERARCH ESO DET CLDC1 CLKHI14= 0.000 / [V] Clock voltage setup value HIERARCH ESO DET CLDC1 CLKHI15= 0.000 / [V] Clock voltage setup value HIERARCH ESO DET CLDC1 CLKHI16= 0.000 / [V] Clock voltage setup value HIERARCH ESO DET CLDC1 CLKHI17= 0.000 / [V] Clock voltage setup value HIERARCH ESO DET CLDC1 CLKHI18= 0.000 / [V] Clock voltage setup value HIERARCH ESO DET CLDC1 CLKHI2= 2.000 / [V] Clock voltage setup value HIERARCH ESO DET CLDC1 CLKHI3= 3.000 / [V] Clock voltage setup value HIERARCH ESO DET CLDC1 CLKHI4= 4.000 / [V] Clock voltage setup value HIERARCH ESO DET CLDC1 CLKHI5= 5.000 / [V] Clock voltage setup value HIERARCH ESO DET CLDC1 CLKHI6= 6.000 / [V] Clock voltage setup value HIERARCH ESO DET CLDC1 CLKHI7= 7.000 / [V] Clock voltage setup value HIERARCH ESO DET CLDC1 CLKHI8= 8.000 / [V] Clock voltage setup value HIERARCH ESO DET CLDC1 CLKHI9= 0.000 / [V] Clock voltage setup value HIERARCH ESO DET CLDC1 CLKHINM1= 'clk1Hi' / Name of clock high HIERARCH ESO DET CLDC1 CLKHINM10= 'clk10Hi' / Name of clock high HIERARCH ESO DET CLDC1 CLKHINM11= 'clk11Hi' / Name of clock high HIERARCH ESO DET CLDC1 CLKHINM12= 'clk12Hi' / Name of clock high HIERARCH ESO DET CLDC1 CLKHINM13= 'clk13Hi' / Name of clock high HIERARCH ESO DET CLDC1 CLKHINM14= 'clk14Hi' / Name of clock high HIERARCH ESO DET CLDC1 CLKHINM15= 'clk15Hi' / Name of clock high HIERARCH ESO DET CLDC1 CLKHINM16= 'clk16Hi' / Name of clock high HIERARCH ESO DET CLDC1 CLKHINM17= 'CLOCK_17_L1' / Name of clock high HIERARCH ESO DET CLDC1 CLKHINM18= 'CLOCK_18_L1' / Name of clock high HIERARCH ESO DET CLDC1 CLKHINM2= 'clk2Hi' / Name of clock high HIERARCH ESO DET CLDC1 CLKHINM3= 'clk3Hi' / Name of clock high HIERARCH ESO DET CLDC1 CLKHINM4= 'clk4Hi' / Name of clock high HIERARCH ESO DET CLDC1 CLKHINM5= 'clk5Hi' / Name of clock high HIERARCH ESO DET CLDC1 CLKHINM6= 'clk6Hi' / Name of clock high HIERARCH ESO DET CLDC1 CLKHINM7= 'clk7Hi' / Name of clock high HIERARCH ESO DET CLDC1 CLKHINM8= 'clk8Hi' / Name of clock high HIERARCH ESO DET CLDC1 CLKHINM9= 'clk9Hi' / Name of clock high HIERARCH ESO DET CLDC1 CLKHIT1= 1.000 / [V] Telemetry value clock-hi HIERARCH ESO DET CLDC1 CLKHIT10= 0.000 / [V] Telemetry value clock-hi HIERARCH ESO DET CLDC1 CLKHIT11= 0.000 / [V] Telemetry value clock-hi HIERARCH ESO DET CLDC1 CLKHIT12= 0.000 / [V] Telemetry value clock-hi HIERARCH ESO DET CLDC1 CLKHIT13= 0.000 / [V] Telemetry value clock-hi HIERARCH ESO DET CLDC1 CLKHIT14= 0.000 / [V] Telemetry value clock-hi HIERARCH ESO DET CLDC1 CLKHIT15= 0.000 / [V] Telemetry value clock-hi HIERARCH ESO DET CLDC1 CLKHIT16= 0.000 / [V] Telemetry value clock-hi HIERARCH ESO DET CLDC1 CLKHIT17= 0.000 / [V] Telemetry value clock-hi HIERARCH ESO DET CLDC1 CLKHIT18= 0.000 / [V] Telemetry value clock-hi HIERARCH ESO DET CLDC1 CLKHIT2= 2.000 / [V] Telemetry value clock-hi HIERARCH ESO DET CLDC1 CLKHIT3= 3.000 / [V] Telemetry value clock-hi HIERARCH ESO DET CLDC1 CLKHIT4= 4.000 / [V] Telemetry value clock-hi HIERARCH ESO DET CLDC1 CLKHIT5= 5.000 / [V] Telemetry value clock-hi HIERARCH ESO DET CLDC1 CLKHIT6= 5.999 / [V] Telemetry value clock-hi HIERARCH ESO DET CLDC1 CLKHIT7= 7.000 / [V] Telemetry value clock-hi HIERARCH ESO DET CLDC1 CLKHIT8= 8.000 / [V] Telemetry value clock-hi HIERARCH ESO DET CLDC1 CLKHIT9= 0.000 / [V] Telemetry value clock-hi HIERARCH ESO DET CLDC1 CLKLO1= 0.000 / [V] Clock voltage setup value HIERARCH ESO DET CLDC1 CLKLO10= 0.000 / [V] Clock voltage setup value HIERARCH ESO DET CLDC1 CLKLO11= 0.000 / [V] Clock voltage setup value HIERARCH ESO DET CLDC1 CLKLO12= 0.000 / [V] Clock voltage setup value HIERARCH ESO DET CLDC1 CLKLO13= 0.000 / [V] Clock voltage setup value HIERARCH ESO DET CLDC1 CLKLO14= 0.000 / [V] Clock voltage setup value HIERARCH ESO DET CLDC1 CLKLO15= 0.000 / [V] Clock voltage setup value HIERARCH ESO DET CLDC1 CLKLO16= 0.000 / [V] Clock voltage setup value HIERARCH ESO DET CLDC1 CLKLO17= 0.000 / [V] Clock voltage setup value HIERARCH ESO DET CLDC1 CLKLO18= 0.000 / [V] Clock voltage setup value HIERARCH ESO DET CLDC1 CLKLO2= 0.000 / [V] Clock voltage setup value HIERARCH ESO DET CLDC1 CLKLO3= 0.000 / [V] Clock voltage setup value HIERARCH ESO DET CLDC1 CLKLO4= 0.000 / [V] Clock voltage setup value HIERARCH ESO DET CLDC1 CLKLO5= 0.000 / [V] Clock voltage setup value HIERARCH ESO DET CLDC1 CLKLO6= 0.000 / [V] Clock voltage setup value HIERARCH ESO DET CLDC1 CLKLO7= 0.000 / [V] Clock voltage setup value HIERARCH ESO DET CLDC1 CLKLO8= 0.000 / [V] Clock voltage setup value HIERARCH ESO DET CLDC1 CLKLO9= 0.000 / [V] Clock voltage setup value HIERARCH ESO DET CLDC1 CLKLONM1= 'clk1Lo' / Name of clock low HIERARCH ESO DET CLDC1 CLKLONM10= 'clk10Lo' / Name of clock low HIERARCH ESO DET CLDC1 CLKLONM11= 'clk11Lo' / Name of clock low HIERARCH ESO DET CLDC1 CLKLONM12= 'clk12Lo' / Name of clock low HIERARCH ESO DET CLDC1 CLKLONM13= 'clk13Lo' / Name of clock low HIERARCH ESO DET CLDC1 CLKLONM14= 'clk14Lo' / Name of clock low HIERARCH ESO DET CLDC1 CLKLONM15= 'clk15Lo' / Name of clock low HIERARCH ESO DET CLDC1 CLKLONM16= 'clk16Lo' / Name of clock low HIERARCH ESO DET CLDC1 CLKLONM17= 'CLOCK_17_L0' / Name of clock low HIERARCH ESO DET CLDC1 CLKLONM18= 'CLOCK_18_L0' / Name of clock low HIERARCH ESO DET CLDC1 CLKLONM2= 'clk2Lo' / Name of clock low HIERARCH ESO DET CLDC1 CLKLONM3= 'clk3Lo' / Name of clock low HIERARCH ESO DET CLDC1 CLKLONM4= 'clk4Lo' / Name of clock low HIERARCH ESO DET CLDC1 CLKLONM5= 'clk5Lo' / Name of clock low HIERARCH ESO DET CLDC1 CLKLONM6= 'clk6Lo' / Name of clock low HIERARCH ESO DET CLDC1 CLKLONM7= 'clk7Lo' / Name of clock low HIERARCH ESO DET CLDC1 CLKLONM8= 'clk8Lo' / Name of clock low HIERARCH ESO DET CLDC1 CLKLONM9= 'clk9Lo' / Name of clock low HIERARCH ESO DET CLDC1 CLKLOT1= 0.000 / [V] Telemetry value clock-lo HIERARCH ESO DET CLDC1 CLKLOT10= 0.000 / [V] Telemetry value clock-lo HIERARCH ESO DET CLDC1 CLKLOT11= 0.000 / [V] Telemetry value clock-lo HIERARCH ESO DET CLDC1 CLKLOT12= 0.000 / [V] Telemetry value clock-lo HIERARCH ESO DET CLDC1 CLKLOT13= 0.000 / [V] Telemetry value clock-lo HIERARCH ESO DET CLDC1 CLKLOT14= 0.000 / [V] Telemetry value clock-lo HIERARCH ESO DET CLDC1 CLKLOT15= 0.000 / [V] Telemetry value clock-lo HIERARCH ESO DET CLDC1 CLKLOT16= 0.000 / [V] Telemetry value clock-lo HIERARCH ESO DET CLDC1 CLKLOT17= 0.000 / [V] Telemetry value clock-lo HIERARCH ESO DET CLDC1 CLKLOT18= 0.000 / [V] Telemetry value clock-lo HIERARCH ESO DET CLDC1 CLKLOT2= 0.000 / [V] Telemetry value clock-lo HIERARCH ESO DET CLDC1 CLKLOT3= 0.000 / [V] Telemetry value clock-lo HIERARCH ESO DET CLDC1 CLKLOT4= 0.000 / [V] Telemetry value clock-lo HIERARCH ESO DET CLDC1 CLKLOT5= 5.000 / [V] Telemetry value clock-lo HIERARCH ESO DET CLDC1 CLKLOT6= 0.000 / [V] Telemetry value clock-lo HIERARCH ESO DET CLDC1 CLKLOT7= 0.000 / [V] Telemetry value clock-lo HIERARCH ESO DET CLDC1 CLKLOT8= 0.000 / [V] Telemetry value clock-lo HIERARCH ESO DET CLDC1 CLKLOT9= 0.000 / [V] Telemetry value clock-lo HIERARCH ESO DET CLDC1 CLKOFF= 2.000 / [V] Clock voltage offset HIERARCH ESO DET CLDC1 DC1 = 0.100 / [V] Bias voltage setup value HIERARCH ESO DET CLDC1 DC10 = 1.000 / [V] Bias voltage setup value HIERARCH ESO DET CLDC1 DC11 = 1.100 / [V] Bias voltage setup value HIERARCH ESO DET CLDC1 DC12 = 1.200 / [V] Bias voltage setup value HIERARCH ESO DET CLDC1 DC13 = 1.300 / [V] Bias voltage setup value HIERARCH ESO DET CLDC1 DC14 = 1.400 / [V] Bias voltage setup value HIERARCH ESO DET CLDC1 DC15 = 1.500 / [V] Bias voltage setup value HIERARCH ESO DET CLDC1 DC17 = 0.000 / [V] Bias voltage setup value HIERARCH ESO DET CLDC1 DC18 = 0.000 / [V] Bias voltage setup value HIERARCH ESO DET CLDC1 DC19 = 0.000 / [V] Bias voltage setup value HIERARCH ESO DET CLDC1 DC2 = 0.200 / [V] Bias voltage setup value HIERARCH ESO DET CLDC1 DC20 = 0.000 / [V] Bias voltage setup value HIERARCH ESO DET CLDC1 DC3 = 0.300 / [V] Bias voltage setup value HIERARCH ESO DET CLDC1 DC4 = 0.400 / [V] Bias voltage setup value HIERARCH ESO DET CLDC1 DC5 = 0.500 / [V] Bias voltage setup value HIERARCH ESO DET CLDC1 DC6 = 0.600 / [V] Bias voltage setup value HIERARCH ESO DET CLDC1 DC7 = 0.700 / [V] Bias voltage setup value HIERARCH ESO DET CLDC1 DC8 = 0.800 / [V] Bias voltage setup value HIERARCH ESO DET CLDC1 DC9 = 0.900 / [V] Bias voltage setup value HIERARCH ESO DET CLDC1 DCNM1 = 'DC1' / Name of bias voltage HIERARCH ESO DET CLDC1 DCNM10= 'DC10' / Name of bias voltage HIERARCH ESO DET CLDC1 DCNM11= 'DC11' / Name of bias voltage HIERARCH ESO DET CLDC1 DCNM12= 'DC12' / Name of bias voltage HIERARCH ESO DET CLDC1 DCNM13= 'DC13' / Name of bias voltage HIERARCH ESO DET CLDC1 DCNM14= 'DC14' / Name of bias voltage HIERARCH ESO DET CLDC1 DCNM15= 'DC15' / Name of bias voltage HIERARCH ESO DET CLDC1 DCNM17= 'DC-17' / Name of bias voltage HIERARCH ESO DET CLDC1 DCNM18= 'DC-18' / Name of bias voltage HIERARCH ESO DET CLDC1 DCNM19= 'DC-19' / Name of bias voltage HIERARCH ESO DET CLDC1 DCNM2 = 'DC2' / Name of bias voltage HIERARCH ESO DET CLDC1 DCNM20= 'DC-20' / Name of bias voltage HIERARCH ESO DET CLDC1 DCNM3 = 'DC3' / Name of bias voltage HIERARCH ESO DET CLDC1 DCNM4 = 'DC4' / Name of bias voltage HIERARCH ESO DET CLDC1 DCNM5 = 'DC5' / Name of bias voltage HIERARCH ESO DET CLDC1 DCNM6 = 'DC6' / Name of bias voltage HIERARCH ESO DET CLDC1 DCNM7 = 'DC7' / Name of bias voltage HIERARCH ESO DET CLDC1 DCNM8 = 'DC8' / Name of bias voltage HIERARCH ESO DET CLDC1 DCNM9 = 'DC9' / Name of bias voltage HIERARCH ESO DET CLDC1 DCOFF = 2.000 / [V] Bias voltage offset HIERARCH ESO DET CLDC1 DCT1 = 0.100 / [V] Telemetry value bias HIERARCH ESO DET CLDC1 DCT10 = 1.000 / [V] Telemetry value bias HIERARCH ESO DET CLDC1 DCT11 = 1.099 / [V] Telemetry value bias HIERARCH ESO DET CLDC1 DCT12 = 1.200 / [V] Telemetry value bias HIERARCH ESO DET CLDC1 DCT13 = 1.300 / [V] Telemetry value bias HIERARCH ESO DET CLDC1 DCT14 = 1.400 / [V] Telemetry value bias HIERARCH ESO DET CLDC1 DCT15 = 1.500 / [V] Telemetry value bias HIERARCH ESO DET CLDC1 DCT17 = 0.000 / [V] Telemetry value bias HIERARCH ESO DET CLDC1 DCT18 = 0.000 / [V] Telemetry value bias HIERARCH ESO DET CLDC1 DCT19 = 0.000 / [V] Telemetry value bias HIERARCH ESO DET CLDC1 DCT2 = 0.200 / [V] Telemetry value bias HIERARCH ESO DET CLDC1 DCT20 = 0.000 / [V] Telemetry value bias HIERARCH ESO DET CLDC1 DCT3 = 0.300 / [V] Telemetry value bias HIERARCH ESO DET CLDC1 DCT4 = 0.399 / [V] Telemetry value bias HIERARCH ESO DET CLDC1 DCT5 = 0.500 / [V] Telemetry value bias HIERARCH ESO DET CLDC1 DCT6 = 0.600 / [V] Telemetry value bias HIERARCH ESO DET CLDC1 DCT7 = 0.700 / [V] Telemetry value bias HIERARCH ESO DET CLDC1 DCT8 = 0.800 / [V] Telemetry value bias HIERARCH ESO DET CLDC1 DCT9 = 0.900 / [V] Telemetry value bias HIERARCH ESO DET CLDC1 DIODE = 0.000 / [V] Diode bias HIERARCH ESO DET CLDC1 FILE = 'sxdirTest.v' / Voltage configuration file HIERARCH ESO DET CLDC1 PREAMP= 0.000 / [V] Preamplifier offset HIERARCH ESO DET CLDC1 STATUS= 'disabled' / Output status HIERARCH ESO DET CLDC1 TEL1 = 5.381 / [V] PREAMP-Supply(pos.) HIERARCH ESO DET CLDC1 TEL2 = -5.374 / [V] Power-Variable(neg.) HIERARCH ESO DET CLDC1 TEL3 = 5.376 / [V] Power-Variable(pos.) HIERARCH ESO DET CLDC1 TEL4 = 5.448 / [V] ANALOG(+5V) HIERARCH ESO DET CLDC1 TEL5 = 26.246 / [V] Power-High(pos.) HIERARCH ESO DET CLDC1 TEL6 = -5.511 / [V] DAC-Supply(neg.) HIERARCH ESO DET CLDC1 TEL7 = 5.512 / [V] DAC-Supply(pos.) HIERARCH ESO DET DETCFG = 'sxdir.dcf' / Detector configuration HIERARCH ESO DET DEV1 BOARD1 BCKPL= 'B000A98F1076' / Serial no (backplane) HIERARCH ESO DET DEV1 BOARD1 REV= '7.2.0' / Revision HIERARCH ESO DET DEV1 BOARD1 SERNO= '00011234ABCD' / Serial no (board) HIERARCH ESO DET DEV1 BOARD1 TRANS= '0001EDCB5432' / Serial no (trans.-board) HIERARCH ESO DET DEV1 BOARD1 TYPE= 'FEB' / Type HIERARCH ESO DET DEV1 BOARD1 VERSION= 0 / Version HIERARCH ESO DET DEV1 REV = '2.1.1' / Revision HIERARCH ESO DET DEV1 SERNO = 'ABCD12345678' / Serial no HIERARCH ESO DET DEV1 SOFW BASE= 'Revision 326109' / Base software version HIERARCH ESO DET DEV1 SOFW MODE= 'LCU-SIM' / Software operational mode HIERARCH ESO DET DID = 'ESO-VLT-DIC.NGCDCS-327198' / Used dictionaries HIERARCH ESO DET EXP ID = 17 / Unique exposure ID HIERARCH ESO DET EXP POSTPROC= T / Post-processor enabled HIERARCH ESO DET EXP REV = 1 / Exposure-handling revision HIERARCH ESO DET EXP UTC = '2020-04-09T15:44:26.2300' / Time Recv Frame HIERARCH ESO DET FRAM FORMAT = 'single' / FITS file format HIERARCH ESO DET FRAM INITCNT= 1 / Initial counter HIERARCH ESO DET FRAM NDIT = 1 / Number of integrations in pixel data HIERARCH ESO DET FRAM NO = 1 / Frame number HIERARCH ESO DET FRAM STRX = 1 / Start-X (lower left) HIERARCH ESO DET FRAM STRY = 1 / Start-Y (lower left) HIERARCH ESO DET FRAM TYPE = 'INT' / Frame type HIERARCH ESO DET FRAM UTC = '2020-04-09T15:44:26.2345' / File Creation Time HIERARCH ESO DET ID = 'SOXS' / Detector system Id HIERARCH ESO DET NAME = 'SOXS' / Name of detector system HIERARCH ESO DET NDIT = 1 / Number of Sub-Integrations HIERARCH ESO DET NDITSKIP = 0 / DITs skipped at 1st.INT HIERARCH ESO DET READ CURID = 1 / Used readout mode id HIERARCH ESO DET READ CURNAME= 'Uncor' / Used readout mode name HIERARCH ESO DET SEQ BREAK = F / Break enabled HIERARCH ESO DET SEQ UTC = '2020-04-09T15:44:24.0258' / Sequencer Start TimeHIERARCH ESO DET SEQ1 CONT = F / Continuous mode active HIERARCH ESO DET SEQ1 CVTEXT = T / External convert active HIERARCH ESO DET SEQ1 DIT = 1.1000000 / [s] Integration time HIERARCH ESO DET SEQ1 EXPTIME= 1.1000000 / [s] Exposure Sequence Time HIERARCH ESO DET SEQ1 INITTIME= 0.0000000 / [s] Exposure Init Time HIERARCH ESO DET SEQ1 MINDIT = 0.5000000 / [s] Minimum DIT HIERARCH ESO DET SEQ1 PERIOD = 0.0000000 / [s] Trigger period HIERARCH ESO DET SEQ1 REALDIT= 1.1000000 / [s] Actual integration time HIERARCH ESO DET SEQ1 RUNCTRL= T / Run-control active HIERARCH ESO DET SEQ1 SLX ENA= F / SELEX interface enabled HIERARCH ESO DET SEQ1 SYNCEXT= T / External SYNC-pulse HIERARCH ESO DET SEQ1 TIMEADD= 1 / Dwell-time add value HIERARCH ESO DET SEQ1 TIMEFAC= 2 / Dwell-time factor HIERARCH ESO DET SEQ1 TRIGGER= F / Trigger mode active HIERARCH ESO DET SEQ1 TRIGMODE= 0 / Trigger mode (0=direct,1=shutter) HIERARCH ESO DET SEQ1 WIN NX = 1024 / Read-out window NX HIERARCH ESO DET SEQ1 WIN NY = 1024 / Read-out window NY HIERARCH ESO DET SEQ1 WIN ROT= 0 / [deg] Read-out window rotation HIERARCH ESO DET SEQ1 WIN STRX= 1 / Read-out window start-x HIERARCH ESO DET SEQ1 WIN STRY= 1 / Read-out window start-y HIERARCH ESO DET SOFW BASE = 'Revision 327149' / Base software version HIERARCH ESO DET SOFW MODE = 'LCU-SIM' / Software operational mode HIERARCH ESO DET SYSCFG = 'sxdir.cfg' / System configuration HIERARCH ESO DPR CATG = 'TECHNICAL' / Observation category HIERARCH ESO DPR TECH = 'TECH ' / Observation technique HIERARCH ESO DPR TYPE = 'OBJECT ' / Observation type HIERARCH ESO INS ACFW ENC = 100 / Encoder position HIERARCH ESO INS ACFW ID = 'SDSS-u ' / Unique ID. HIERARCH ESO INS ACFW NAME = 'SDSS-u ' / Position element name HIERARCH ESO INS ACFW NO = 1 / Position number. HIERARCH ESO INS ACFW POS = 100.000000 / [UU] Position in user units HIERARCH ESO INS ACFW SWSIM = 'T ' / Software simulation. HIERARCH ESO INS ACFW TYPE = 'FILTER ' / Element type HIERARCH ESO INS ACQS ENC = 200 / Encoder position HIERARCH ESO INS ACQS ID = 'Spectroscopy' / Unique ID. HIERARCH ESO INS ACQS NAME = 'Spectroscopy' / Position element name HIERARCH ESO INS ACQS NO = 2 / Position number. HIERARCH ESO INS ACQS POS = 2.000000 / [UU] Position in user units HIERARCH ESO INS ACQS SWSIM = 'T ' / Software simulation. HIERARCH ESO INS ACQS TYPE = 'FREE ' / Element type HIERARCH ESO INS ADC1 ENC = 118 / [Enc] ADC absolute position. HIERARCH ESO INS ADC1 ID = 'adc1 ' / ADC device unique id. HIERARCH ESO INS ADC1 MODE = 'OFF ' / AO-NGSi ADCi motor compensation mode. HIERARCH ESO INS ADC1 NAME = 'ADC motor 1' / ADC named pos HIERARCH ESO INS ADC1 POS = 118.609582 / ADC pos HIERARCH ESO INS ADC1 SWSIM = T / T for software simulation. HIERARCH ESO INS ADC2 ENC = 118 / [Enc] ADC absolute position. HIERARCH ESO INS ADC2 ID = 'adc2 ' / ADC device unique id. HIERARCH ESO INS ADC2 MODE = 'OFF ' / AO-NGSi ADCi motor compensation mode. HIERARCH ESO INS ADC2 NAME = 'ADC motor 2' / ADC named pos HIERARCH ESO INS ADC2 POS = 118.609581 / ADC pos HIERARCH ESO INS ADC2 SWSIM = T / T for software simulation. HIERARCH ESO INS AFC1 ID = 'afc1 ' / Unique ID. HIERARCH ESO INS AFC1 NAME = 'I/O Pupil stabil 1' / Element name. HIERARCH ESO INS AFC1 SWSIM = 'T ' / Software simulation. HIERARCH ESO INS AFC2 ID = 'afc2 ' / Unique ID. HIERARCH ESO INS AFC2 NAME = 'I/O Pupil stabil 2' / Element name. HIERARCH ESO INS AFC2 SWSIM = 'T ' / Software simulation. HIERARCH ESO INS AFOC ENC = 12 / Encoder position HIERARCH ESO INS AFOC ID = 'afoc ' / Unique ID. HIERARCH ESO INS AFOC NAME = 'Support Board Z' / Position element name HIERARCH ESO INS AFOC POS = 12.3 / [mm] Position of device HIERARCH ESO INS AFOC SWSIM = 'T ' / Software simulation. HIERARCH ESO INS ARGO SWSIM = 'T ' / Software simulation. HIERARCH ESO INS CALS ENC = 200 / Encoder position HIERARCH ESO INS CALS ID = 'Calib ' / Unique ID. HIERARCH ESO INS CALS NAME = 'Calib ' / Position element name HIERARCH ESO INS CALS NO = 2 / Position number. HIERARCH ESO INS CALS POS = 2.000000 / [UU] Position in user units HIERARCH ESO INS CALS SWSIM = 'T ' / Software simulation. HIERARCH ESO INS CALS TYPE = 'MIRR ' / Element type HIERARCH ESO INS CPTS ID = 'cpts ' / Sensor device unique id. HIERARCH ESO INS CPTS NAME = 'Common Path T Sensor' / Sensor device common name.HIERARCH ESO INS CPTS SWSIM = 'T ' / Software simulation. HIERARCH ESO INS CROT ID = 'crot ' / Sensor device unique id. HIERARCH ESO INS CROT NAME = 'Co-rotator sensor' / Sensor device common name. HIERARCH ESO INS CROT SWSIM = 'T ' / Software simulation. HIERARCH ESO INS CUPS ENC = 200 / Encoder position HIERARCH ESO INS CUPS ID = 'Free ' / Unique ID. HIERARCH ESO INS CUPS NAME = 'Free ' / Position element name HIERARCH ESO INS CUPS NO = 2 / Position number. HIERARCH ESO INS CUPS POS = 2.000000 / [UU] Position in user units HIERARCH ESO INS CUPS SWSIM = 'T ' / Software simulation. HIERARCH ESO INS CUPS TYPE = 'MIRR ' / Element type HIERARCH ESO INS CVTS ID = 'cvts ' / Sensor device unique id. HIERARCH ESO INS CVTS NAME = 'Cryo Vacuum Sensors' / Sensor device common name. HIERARCH ESO INS CVTS SWSIM = 'T ' / Software simulation. HIERARCH ESO INS DATE = '2017-10-16' / Instrument release date (yyyy-mm-dd). HIERARCH ESO INS DEUT SWSIM = 'T ' / Software simulation. HIERARCH ESO INS DID1 = 'SOXS_ICS-329630' / Data dictionary for INS. HIERARCH ESO INS DID2 = 'PRIMARY-FITS-1.2' / Data dictionary for INS. HIERARCH ESO INS ID = 'SOXS/$Revision: 239337 $' / Instrument ID. HIERARCH ESO INS INSH ID = 'insh ' / Unique ID. HIERARCH ESO INS INSH NAME = 'Shutter ' / Element name. HIERARCH ESO INS INSH ST = F / Shutter open/close. HIERARCH ESO INS INSH SWSIM = 'T ' / Software simulation. HIERARCH ESO INS IRTS ID = 'irts ' / Sensor device unique id. HIERARCH ESO INS IRTS NAME = 'Infrared Cryostat Sensors' / Sensor device common HIERARCH ESO INS IRTS SWSIM = 'T ' / Software simulation. HIERARCH ESO INS LAMPS = 'OFF ' / Lamps assembly. HIERARCH ESO INS MERC SWSIM = 'T ' / Software simulation. HIERARCH ESO INS MODE = 'GENERIC ' / Instrument mode used. HIERARCH ESO INS NEON SWSIM = 'T ' / Software simulation. HIERARCH ESO INS NFOC ENC = 12 / Encoder position HIERARCH ESO INS NFOC ID = 'nfoc ' / Unique ID. HIERARCH ESO INS NFOC NAME = 'Support Board Z' / Position element name HIERARCH ESO INS NFOC POS = 12.3 / [mm] Position of device HIERARCH ESO INS NFOC SWSIM = 'T ' / Software simulation. HIERARCH ESO INS NISE ID = 'nise ' / Unique ID. HIERARCH ESO INS NISE NAME = 'Slit_1.5' / Position element name HIERARCH ESO INS NISE POS = -1.000 / [mm] Position HIERARCH ESO INS NISE SWSIM = 'T ' / Software simulation. HIERARCH ESO INS QTH SWSIM = 'T ' / Software simulation. HIERARCH ESO INS SENS401 ST = F / Co-rotator final stage. 0: Enabled 1: DisabledHIERARCH ESO INS SENS402 ST = F / Sensor boolean value. HIERARCH ESO INS SENS403 ST = F / Sensor boolean value. HIERARCH ESO INS SENS404 ST = F / Sensor boolean value. HIERARCH ESO INS SWSIM = 'NORMAL ' / Software simulation. HIERARCH ESO INS TEMP101 VAL = 2.51 / [C] VIS Cryostat CFC Gas Exchanger. HIERARCH ESO INS TEMP102 VAL = 2.51 / [C] VIS Cryostat CFC Cold Head. HIERARCH ESO INS TEMP103 VAL = 2.51 / [C] VIS Cryostat CFC Cryopump. HIERARCH ESO INS TEMP104 VAL = 2.51 / [C] VIS Cryostat CCD Baseplate. HIERARCH ESO INS TEMP105 VAL = 2.51 / [C] VIS Cryostat CCD Rear. HIERARCH ESO INS TEMP201 VAL = 2.51 / [C] NIR Cryostat Cold finger 1. HIERARCH ESO INS TEMP202 VAL = 2.51 / [C] NIR Cryostat Cold finger 2. HIERARCH ESO INS TEMP203 VAL = 2.51 / [C] NIR Cryostat Optical Bench 1. HIERARCH ESO INS TEMP204 VAL = 2.51 / [C] NIR Cryostat Optical Bench 2. HIERARCH ESO INS TEMP205 VAL = 2.51 / [C] NIR Cryostat Optical Bench 3. HIERARCH ESO INS TEMP206 VAL = 2.51 / [C] NIR Cryostat Cryopump. HIERARCH ESO INS TEMP207 VAL = 2.51 / [C] NIR Cryostat Slit Assembly. HIERARCH ESO INS TEMP208 VAL = 2.51 / [C] NIR Cryostat Prism Assembly 1. HIERARCH ESO INS TEMP209 VAL = 2.51 / [C] NIR Cryostat Prism Assembly 2. HIERARCH ESO INS TEMP210 VAL = 2.51 / [C] NIR Cryostat Prism Assembly 3. HIERARCH ESO INS TEMP211 VAL = 2.51 / [C] NIR Cryostat Prism Assembly 4. HIERARCH ESO INS TEMP212 VAL = 2.51 / [C] NIR Cryostat Prism Assembly 5. HIERARCH ESO INS TEMP213 VAL = 2.51 / [C] NIR Cryostat Camera 1. HIERARCH ESO INS TEMP214 VAL = 2.51 / [C] NIR Cryostat Camera 2. HIERARCH ESO INS TEMP215 VAL = 2.51 / [C] Thermal Shield 1. HIERARCH ESO INS TEMP216 VAL = 2.51 / [C] Thermal Shield 2. HIERARCH ESO INS TEMP217 VAL = 2.51 / [C] NIR Cryostat CCD Head. HIERARCH ESO INS TEMP218 VAL = 2.51 / [C] NIR Cryostat Array Preamp. HIERARCH ESO INS TEMP301 VAL = 2.47 / [C] Common Path T Sensor. HIERARCH ESO INS THAR SWSIM = 'T ' / Software simulation. HIERARCH ESO INS TILT2 MODE = 'STAT ' / Tilt mode used. HIERARCH ESO INS VISE ENC = 300 / Encoder position HIERARCH ESO INS VISE ID = 'Slit_1.5' / Unique ID. HIERARCH ESO INS VISE NAME = 'Slit_1.5' / Position element name HIERARCH ESO INS VISE NO = 3 / Position number. HIERARCH ESO INS VISE POS = 3.000000 / [UU] Position in user units HIERARCH ESO INS VISE SWSIM = 'T ' / Software simulation. HIERARCH ESO INS VISE TYPE = 'MIRR ' / Element type HIERARCH ESO INS XENO SWSIM = 'T ' / Software simulation. HIERARCH ESO OBS DID = 'ESO-VLT-DIC.OBS-2.0' / OBS Dictionary HIERARCH ESO OBS GRP = '0 ' / linked blocks HIERARCH ESO OBS ID = -1 / Observation block ID HIERARCH ESO OBS NAME = 'Maintenance' / OB name HIERARCH ESO OBS NTPL = 16 / Number of templates within OB HIERARCH ESO OBS PI-COI ID = 0 / ESO internal PI-COI ID HIERARCH ESO OBS PI-COI NAME = 'Condor ' / PI-COI name HIERARCH ESO OBS PROG ID = 'Maintenance' / ESO program identification HIERARCH ESO OBS START = '2020-04-09T15:43:17' / OB start time HIERARCH ESO OBS TPLNO = 7 / Template number within OB HIERARCH ESO OCS DET1 IMGNAME = 'SOXS_GEN_OBS_NIR_' / Data File Name. HIERARCH ESO SEQ ARM = 'NIR ' / Instrument Arm. HIERARCH ESO TEL AIRM END = 0.000 / Airmass at end HIERARCH ESO TEL AIRM START = 0.000 / Airmass at start HIERARCH ESO TEL ALT = 34.732 / [deg] Alt angle at start HIERARCH ESO TEL AMBI FWHM END = 0.00 / [arcsec] Observatory Seeing queried fromHIERARCH ESO TEL AMBI FWHM START = 0.00 / [arcsec] Observatory Seeing queried frHIERARCH ESO TEL AMBI IRSKY TEMP = 0.0 / Temperature of the IR sky, from radiomeHIERARCH ESO TEL AMBI IWV END = 0.00 / Integrated Water Vapor HIERARCH ESO TEL AMBI IWV START = 0.00 / Integrated Water Vapor HIERARCH ESO TEL AMBI IWV30D END = 0.00 / IWV at 30deg elev. HIERARCH ESO TEL AMBI IWV30D START = 0.00 / IWV at 30deg elev. HIERARCH ESO TEL AMBI IWV30DSTD END = 0.00 / IWV at 30deg elev. HIERARCH ESO TEL AMBI IWV30DSTD START = 0.00 / IWV at 30deg elev. HIERARCH ESO TEL AMBI IWVSTD END = 0.00 / Standard Deviation of Integrated WaterHIERARCH ESO TEL AMBI IWVSTD START = 0.00 / Standard Deviation of Integrated WatHIERARCH ESO TEL AMBI PRES END = 750.00 / [hPa] Observatory ambient air pressureHIERARCH ESO TEL AMBI PRES START = 750.00 / [hPa] Observatory ambient air pressuHIERARCH ESO TEL AMBI RHUM = 12.0 / [%] Observatory ambient relative humidity quHIERARCH ESO TEL AMBI TAU0 = 0.0000 / [s] Average coherence time HIERARCH ESO TEL AMBI TEMP = 10.00 / [deg C] Observatory ambient temperature queHIERARCH ESO TEL AMBI WINDDIR = 0.0 / [deg] Observatory ambient wind direction qHIERARCH ESO TEL AMBI WINDSP = 10.00 / [m/s] Observatory ambient wind speed querHIERARCH ESO TEL AZ = 0.813 / [deg] Az angle at start S=0,W=90 HIERARCH ESO TEL CHOP ST = F / True when chopping is active HIERARCH ESO TEL DATE = '2010-06-09T07:20:35' / TCS installation date HIERARCH ESO TEL DID = 'ESO-VLT-DIC.TCS' / Data dictionary for TEL HIERARCH ESO TEL DOME STATUS = 'FULLY-OPEN' / Dome status HIERARCH ESO TEL FO POS = 0.000000 / Adapter focus position during tracking HIERARCH ESO TEL FOCU ID = 'CA ' / Telescope focus station ID HIERARCH ESO TEL FOCU LEN = 108.827 / [m] Focal length HIERARCH ESO TEL FOCU SCALE = 1.894 / [arcsec/mm] Focal scale HIERARCH ESO TEL FOCU VALUE = 1.000 / [mm] M2 setting HIERARCH ESO TEL GEOELEV = 2648.0 / [m] Elevation above sea level HIERARCH ESO TEL GEOLAT = -24.6276 / [deg] Tel geo latitute (+=North) HIERARCH ESO TEL GEOLON = -70.4051 / [deg] Tel geo longitude (+=East) HIERARCH ESO TEL IA FWHM = 0.60 / [arcsec] Delivered seeing corrected by airmassHIERARCH ESO TEL IA FWHMLIN = 0.77 / Delivered seeing on IA detector (linear fitHIERARCH ESO TEL IA FWHMLINOBS = 0.88 / Delivered seeing on IA detector (linear HIERARCH ESO TEL ID = 'v 313108' / TCS version number HIERARCH ESO TEL MOON DEC = 0.00000 / [deg] 00:00:00.0 DEC (J2000) HIERARCH ESO TEL MOON RA = 0.000000 / [deg] 00:00:00.0 RA (J2000) HIERARCH ESO TEL OPER = 'Operator name not set' / Telescope Operator HIERARCH ESO TEL PARANG END = 4.215 / [deg] Parallactic angle at end HIERARCH ESO TEL PARANG START = 4.206 / [deg] Parallactic angle at start HIERARCH ESO TEL TARG ALPHA = 0.000 / Alpha coordinate for the target HIERARCH ESO TEL TARG COORDTYPE = 'M ' / Coordinate type (M=mean A=apparenHIERARCH ESO TEL TARG DELTA = -800000.000 / Delta coordinate for the target HIERARCH ESO TEL TARG EPOCH = 2000.000 / [yr] Epoch 1950 or 2000 HIERARCH ESO TEL TARG EPOCHSYSTEM = 'J ' / Epoch system (J=Julian / B=BessHIERARCH ESO TEL TARG EQUINOX = 2000.000 / [yr] Equinox HIERARCH ESO TEL TARG PARALLAX = 0.000 / [arcsec] Parallax HIERARCH ESO TEL TARG PMA = 0.000000 / [arcsec/yr] Proper Motion Alpha HIERARCH ESO TEL TARG PMD = 0.000000 / [arcsec/yr] Proper motion Delta HIERARCH ESO TEL TARG RADVEL = 0.000 / [km/s] Radial velocity HIERARCH ESO TEL TH M1 TEMP = 0.00 / [deg C] M1 superficial temperature HIERARCH ESO TEL TRAK STATUS = 'NORMAL ' / Tracking status HIERARCH ESO TPL DID = 'ESO-VLT-DIC.TPL-1.9' / Data dictionary for TPL HIERARCH ESO TPL EXPNO = 1 / Exposure number within template HIERARCH ESO TPL ID = 'SOXS_gen_tec_ObsFree' / Template signature ID HIERARCH ESO TPL NAME = 'Full generic observations' / Template name HIERARCH ESO TPL NEXP = 4 / Number of exposures within template HIERARCH ESO TPL PRESEQ = 'SOXS_gen_tec_ObsFree.seq' / Sequencer script HIERARCH ESO TPL START = '2020-04-09T15:44:20' / TPL start time HIERARCH ESO TPL VERSION = '$Revision: 319899 $' / Version of the template END ?Й' +?.aw?͍Rx?S:&1?P$I2? N?eJ?<:?=p*?ݠz?]2m?ְJ; ?>(?&Mf?϶9$?`?T?PXjN?%V⠸?.EX?J_?`K'쨧?V?d?TX?__J?^亸?,??jC?8ߞ1n?rR?x?,?R`?ڭ?G [tZ?qX? ҄*?`U!`?ԉd:?!y3?]Y$xO?ٿq?F*Y?3uFB{?_]0?.??qoH|?럴V4d?%п?f1+_L?!?7?ż%w} ?1z?]TS?]xW?Ԧi?}U/?>7)Z?{7?X?䶎 +?¡-,8?ྕ4 ?rĘ?닀%>?[?WF?fPm"$?VH? Z︺?W\?#b!P?q`?@*?6U?鉖̛?ǐ'@?; ?`? +* +/?GFX?w 9?™*&?Ƙs49E?Ԝf`?yw =?ؿ?՘ +?_z[?}bj<?֫?V^D]?Є;n?鶤}"#U?Ӣx1~?kݏL?YU?$gd?R?DncF?3@?xz͊?߄_^?Vv+?Yn?il?t\?+RC?ͱFY-`H?AH{J? U9?佰V?~dK?hu?`?wټ?ɢo?]|?p'? ?0?dpv?h?zr?Ӫ"\?:? +0;6ޘ?ԥČ?Ui2(?[ےؐ?=D?l~=>yQ?ou"?'?P:? +?G?ŊkEt?ƊL> ?p!?L`mA?퉷k?K?ɩ?љA)V?6Kme?N?7 ?;N`?3B?nuS?ڒՄ?Ě*Y*? %?fщn?=a(O? ?UgRO?ӡhKx?R\?Z]ي?\ꭙ?1a7?@?NUoѼ?tfi??6nhY$?%G 4?\H??u<~Z?ߨ?t$I?ݎ^ +?3g?Xz?r9זT?ʸEɲH?7?_X˾??4I2?lC?Cf +?p~?֛,?tx?z]2?bx!A?7Y +?Vpr4?Ԛ}?ý%?߽)o?aU?ic)D?iFh?s *G?BJ?`z?V۶`N?82?z?8?zi?ӧC*?&㩻?zyH?F7?,6V? 6\?a)|??ɾi?$TX?爡B!r?$?P@?%(?ϡ ?=?:˾?`u +?ϫQK\?P((g?m2M@? zri?+?D?Mjސ?]D{iA?溎ٴ?Xs8:? cHң?@L? 8/e?SN5?u(?5PN?Bxݾ?EJ?ֻ1{?E]j?&U?+c?ζWQ?O"?O5?w<7b?6C?b?mu?:0Y0?8jI0??ʽQD?@kY`D?w %?Ԍ|\z?g?P?볇54N?'H?Gq?'enP?-"t?~ӆ+?j$T2l??EN@?6 B^??+?"#k??8?WXv:?s?≝׈j?o?wԄ?A? ?#,~?S0S8?/^?ߋ?Lv@?\<$o?Ұ.ӆ?zz?L?: Cr?ZvNp?䛼6_??}Po?ꜙIAV?#'?l1?Qͳ)p?$? @?nr?,?Ȝ+F?g`?1(\?ȭ??+F?䔮H?>m3?/J(?T5?!z* +?ǜCtݤ?#'ϱ?-+?ƝO?jRF?VE'~? +Uq*?J:?EkN?f?N?H?^?X?H+?,w@?&=~?Ѯ֥?`?ϸҌ?г! ?Ľ0?? dTb?W/0?G^p?4t'?쎨l?tO?ZDz?ߧ"g?i&?e ?&"h?a,z V?́f? ?#qRQ?4*4?Yď~?C?p?b{?N?f?{iǴ?=id?/?buN?,0Z?ҿ!{,?t?ƥA?Ӑ/P?fud?拫W\?ڷC?ENQ?.ITf?dwR??-"?ʪ<6?^0?᫫?Ը+1L?{/p?Lh6?͆l0??Ux?Ѝq?Դ-5b?M%?!OUB?֣;5"?ݮ)(?@ZuG@?^aE0?Φ̀&?ACv?:!?1+h?{?b,?[M;T?>Ө?ҥ7A?Ul?^MZ`?A ?}M?4%>?eor?T n?ǁxm?eY ??6 n?ﻨ?-1h?LL?qI?d_I?Y@?M?غX?Wx+4?!?fx?Y 8?֌s?<&4?ó?MQ`?.ߊl?FYw?3/6?4q<#?哉?G?+`?)vx?Oah???.??ô"?Fo?1) +~?U]+/?.;H6?zV{|q?9&̏a>?qf€?5 +v(?\B?ѭ?[o8A?Ƅ?l*<~ ?ɬ)?ôf?Ƹ%?Ϣ.ôh?M0f"? |?O?`R?_5U?xs,@?$?cn +?!L?䢵?Zm?Gn T?.?w*r?4"?冹a?FM?S?ޫ??T# ?䆽Mp?mv?5˒ ?l@?^?)??L?%%?Ҳ~Ou~? 5u{?׭vBT?:GC5? ?USr?켔;p?ğ+ ?6r?pD&?3j^Q?fus?$)?+Nr?qi|n?Ƀsc{D?ݰ:O?ud8?޵qT?1?ވq?_,V?/(i?q?`CӔ?w ?CƢ?׃*I?xI0^?T;㚝?ۅ@?܉ 93? ?QNGz?ԜKu?Rӓ?#r? f?B帼p?~ 5 ?]?5@?uZB?2΅\?#3|?2P?"lځ ?`my?wD?m?۱QYIb?ts?雸ݷa?gT?=YSl?W>?ܪw%]?h?Ԟ3n? ?^0?`JX)?#D?M5:4?/ j?Sn?B?j0)? ןM?)OZ?,7Ǒ?"Nj@?哉e$a?ҹ6@?Ol^?呄"?X??ӻ#VC?:ap?ӗt#?D?jR"?biUs?M(?f˟[?cҊ?يd?ez?&YD?F?i?u8FK&?4xr?q[?F]?q#L?^zb?݌ ?AwL?٢գ>?{?KMX??C?h?Ƥ +?-uGF?ηx ?ղP? + [?E /F4?k6]?q?Ax5,? ER@?ɯ??VI?ci?Qք?wO0?C*vo?.?迢^?>K +?e?B'`&?db`?o?L8?`C7?}K`?IXI h?ט뗶?ӫt[F??mr)?zI[??ī[,t?懧g?c?֯#?{J??)>K|?єn&??z K?\!? ;?CJ+? O0[?~dʴY?쉖4ǂ?u-?F|? +j<2?|%?E?Sb=?a|)?d@?Y*'?C9?7XO?gj?ӭ7[? _x~?w'38?תU9?+Џ?璌a?NA?]?rl_yx?t #l?ߒ>? Ux?vv?{3?읋?y9&?qI]?޴o<ڊ?fh?=C\?<6K?*?XEH?5 )Zz?֋bz2l?  N?NJ?AG~ {P?p ??ڤ ?2-B??Ԝ?Iu%??L?`aK?Ű?ӝ}Jn?'me*?=&,?ot?I?2.1'?s)-u?F?-X?ަ#h?$v?g T?w8)?Ȃ8?O?MܜOc?Y??Ox? h?Γ|*&?S4`?J!&?Y +`?Ѭ9?kR?SԂ??w?i\X#? J5?琛'?•#/?VC^?3Y+-?,ٜp?R?ZtT:n?j5W?h\?xs? 9 +?dlA_?)Hs?sD/?O/?قmQB?/Q`?K.Ɣ?ıF?6LLV?UK?b?$ +v??—+p?/-2??I?HX&!? Q}R?c2?sMѲ>?K_u?~gj ;?W:{?U!?Gt W?oF?k76X?,^It??R|Gh??vsb?K2?HyQj?υCk ?j+?8,n6?#_EN? @?B?_?͍`k?[g8̆`?`(?ô?%?4M?s\Q?޵LM&?͓?UF\?Ѩs?0^d?4(?Ԅ ?,\t?ዌ5?Ǩd~T? W?d}?Q2%?PJZ(v?Q<@?e?d?^?KI:N?cuC?:A +?ۥ?r @?;|?sn]?7ɲ-?4So? &+3?D:?:3e?Q&? 6Y?eN?͵G?,5ԯ?]ۏ +L?rT?ߴ?0Tu?/ia?D3?〽3|m?jiň?ž*֪l?v^zl?+;?>P^?YcR ?;'B?9?E^8>?rfR?FN?x?6ѩ[?ɽbfr?>P?C?5bS0X?1{?+)Q?kv?VaQ?ШZ? Z-/?9hwin?zQ?(LOa?eĀ?1-'?a?, Q?0;Ȓ?D(?6D]?깞&?M?1x?4}}%?.?Ťm?}@|?c{0?>F + ?KN?Ք? 4^?j?u ?r& C ?.??`w?W2zS\?{hyz?6N?B>?ѣr?%U@?> +#?~8>K?\-?M`? 38?FJq;?z?5?cA)?|H?Ž1,?ҽ;?О,$?Y@X?j׿?¨`w?н~?&4?c1?. (?S1?5@?䯟ڽ?sTA7?`.X5?ﶖ?քBÊ?в?OY?ӺFv?,ߑ?؈v?8 ؈L?[?"ا=F?CZs?Lb#?҈Q?"#?BDžq|?!kt?Vg?Eh?Юh+L?LAHH?ښ26? ?0?:5W`? 0'?̈d?!0mɁ?ҼЖ?O&\?ngR?n:??[?$Q?}Ƶ?u\?{Mf?au?,Ib?/KK?ͬ?w4l_W?e1.?!_?^ ?U?to_?j~&?'{?MLW?B?틂m)?q5m}?O +j*?<{?l?=|?K#޷6?v4E?LF?_j?ov?nPL? ʛ?ّa?ĵ0??3;@n ?P?ꁀ?mg?i>ʑ?֏6!?XMHJ?˜<@?fs,?r=p r?1k>m?LM~?=?dO~&?M?碮d?27z?w\?Bp?ѹ?<$?ncH?za?6Ȁ?suMd?l@?\3vk+?@ (?S<lj ?(*F?jyC?7,YG?V ? +:?`?V@*?\ۢ?[A^Θ?l\;? bݙ??@@?Ԝ?E/rT?>W?2o?ߓ?ô4А?Us.?)?k/dq?,=A?2?V?R+?㮹Hܳ?R!V?5@?6?O(?Z?#+t͑&?5iðh\??H]?R(0h? q?G,?mCVY?uI?o\?e?9w?Ō ?]Z?Ž5!?Fkg?\ѷ??϶zl?X?tbn?X {?K??t@ ?]j ?\qAY)?_sm?A?"l?⎋ ?ݥIʺ?|GX:?jr|?骂 f?Ü?̊y?ѕ)\?*?xXS?Y/w?/ +@?Kغ?Ǐu4?i?o^^R?b$ ?Qjio(?:%?=cc%g?7W?ʶI?1?V"?ػzc?N^?<???{.7?Yc@? o?t?ЀQ?}+@?jv?ƒ;?t=L?o,?e?Qi?$`?ٰ?ϾcF +S?A?@;D??&N?j[?^n ?姼?fj@? ?|z/?換Uf?̷ [?u%`0?@h2 /^?N?׾w0?ڣ^dN?LWs.? ?4QdH?Э:L?h\x!?@W`?S ʽ?Dh=6??A?ˀP?d?$܎?zp?㷫!k=? +d?RP?依@?۷[@;?s?1?Ld?>⏌?$Dex?|?KAJ?n7r?qg.?Dhc?S&?j}Bz ?8k?s$ \?ɄPt?0Gg?,X?˛[?hr?\ǰ?Ex}?JO?K?tA{p΅?X!4?폙 ?Y`?V96?Ⅾ)? +(H ?:?O?Ԝg?˯2pN?lX?z?"|2?ƣ.?+;݈?BR?|fʿ#?N?u?x*?䆢"u?>t@?uݲ?GBd?Ԧٟ?ܷ|?fԗǬX?~ +?-a?5礸?4!f?[,7? +0?S?du?'5 ?ޭ{|p?˔p?ض8=?\Mz?%[|?EY -:?DK?x?t3$?U=B?ۖV\?N'?}.E?#e?VVP`?ްp?nM˩?k?姎i?K N?_E?P?Ԩ?BF?0$56?[ pZ?X϶J?^J&?4?T ?mS4I ?AS1 R?߭_d p$?,M?V?[%?ԟ]SP?_6'?Ol?Dw} ?5v?j?(rxH?:"?p^K$?qu^޶?}?Ni!?ew +_H?8 į p?ݓDD.:?`R%l?9(|?\-?P`?"26h?OFu?up ?Rs~?KWe ?O(??vi6 ?R7?w8Bd?F`l?֝wx?Q?Q?¯H\?ظǑ3?ٱ}מ?\ tϳ`?pJp?׃>K?f>?UX)q?v@[?b|? ɵ?1Cl?/tH?Q0T8?W]j?u6%9?Ԯ ???>86?ٗ?zF?U;?Ail>?๼舚?OA_f?vScY?ry?bH?s?9?L~?ڴ `02?F`?x :?If?䀔nv?_ׇB?⡓=?ϣ69?&|?y?}Hh?4?Ӂu7?S?Jn@?<}NXWL?ގ ?&(D?Ձˈ?5o?m&?T?zkK?ܬ&?\?Mum??[ $?8>(?Q3?Ns?ᛡB?I?)D?Tϰk?бOT?ʇp?`[? 8}P?Zg?8?+o9gè?Q}R?/7`d?ʵb7?̓?-T?~A??WW0u0?У@?a3?Ec?3C?"8?d5?G-?*s`?_?+ ? C?fw?њ^7T?p.%?柜-g?1bQ`!?ИTґ?gR4?jN?ѻo~cZ?m?mN?W-2%/?꽾US?ZNsx?Mi"P?:<=m?mF?X=v? wL?r<?QN'j?́ j|?T?. D?8ǣ?mP3'$?ZO8ǿ?%jC?#N.?`ɏs?6ՋD?}7?(p??r%ɧ??b?.Ĭ?\lp?*t?Ϋ?-Bj:?!,ø?',t?G?5{?( +?30ɗ?أ./? 'ZR?ۡV?^gP?Z?W?#~?]sI?֑` +6?R['j?AښK?'J?k뎞l?XE?- +j?ձƚ*?Bg??]#&?9!?13M?;Z?39?bk?Ż 7?nErH?`6$v?P?#6??OZߛ?Tu?PE?݌x^?q>,H?"E(?y2F?nθ n?#9 ?FTD?_*P?0`q?#UIȇ?Gy\?̶`Ġ?Yk?ܬ͕?eߙPߘ?b?Dvp?ʠ?Pa7?_?ْ![fH?q ?>v"l?D8 ?b*f1?/дm?/B,?Ģck?7#f?8#?8jC?(pWR?=/?-M?`id?wD,ʱ?$1ӿ4?F>d?Z) ? +?Kp?(?|=Q?1 g?$ ?0̢`?b=&?W?l\$)?͡-1?L?A ?zjm?%c{?f?>G?n?2yh:?Lg?^[.?j\?рm06?5R?ƶB|p?zd?^tq?U?˂?},?勖.!?R=?DLT?G]@? +V?-Q+?ϻt?P*?̀0`?ܫEd?p]J:?=L?yύH?ok?k#=?Lm%f? +ktt??!??ؗ|"?儍?FB?ʡPF(?吏{ ?]rX?d[?C?2~$? ~{,?[)=Q?C#?5?=A\|?2pUK?`J+f?<\@?Ν?/w$h?[?HIl?l=3?gM͓T?M?_?*"|!j?1 +gy?LU?ɓ0D?/3? +by?qp?y?ਝ4?%2^?UA*e ? :@? r;L?T"?Fb?9&{?Pv8E?٣m-?…?~½?Lj?5?΍?u&6?Na? +@:5?e[]?e ?7Pr?+?4`?"gzY?y4=V?HPZl?wx??>p?J?ZF0?\V?9q?.lpH?Յ㐒?ݪ("?AU+͞?)??i?ƪ!D?1_/?4՝?Efо? NF?8?KX?wh.?O2 ??6b?}C'?)m?)?R?P}?}c?f_?0u?ЖΈr?j?ׇM@?z7K0? P,?3Vg?1?R{?TCZ?rhP;?`h?fP?8$Q?vpH?Fq +?K#?IMw4?Z?1?91)k?lݝ?My?1?qkJ?65?|5{?PaF׎?mJK?i>?!??ٖ&?nW%h? |>??.;s?jW?d2?Au.xJ?mj|?HcAN?2w4?|8?tg`?N?ꉩ#?z?hGom2?sf.bx?Y0?6 ä?Ά*[p?T?(/:?l0?|?:-!B.?YH ?ىzL0?sʸ~?켬T?ze?O3?^nH?0P7=.?̤sG?"sڸ?@?ӛ?'0ߺ?*5?},F?ؑ=d?&L\’?X')z?jh72?Sp?|c4?;:?.&?=GȬ?D?ㅔ(?f,aAdm?I(j ?Ѿ} +?Ir.?>۴?v_?{H2?(S?YQm?SHev?mhkh?[^XP?Tl=?Gr ?ݨ,?EuR?ޣ1?h? +֮p?(XN?8M`?혧Y@?ip?#Ȱ]+? #?GE ?`X?ȆЭ? ?ؒWT&?5>Uyn?ðqQ?п E6?%?;;iE?l?d;C?@]KK+?X=?i:?W6VP?RJ?秊_<?'ȟ?UIŞs?nd3?%-f?|PZe?䪰j?R:?2Z"?|7?o;,?ߗ.k?i46#K?كt?}T3?'܈m?U*?Nm p?1H?Q?lD|"?%(?˿}?G,?Vx5?B?Q|m?Ȋ_,&@?v?`?q;?2~-?׼q?zh?3n'U?p-?`hT?@bCK?-FD?ŮŇ?ء]퉐?kM-b?åZť?y$? ?)\?ӱ3^?Kl ?:8 +?ü E?OE?<ҹ?p?̨Y*H?;h? jf?L ?I?m~0?]hS6?yFP?x1P ?烽?~^آ?|s?\_3?wS.?V`?bZ]?/kW'?Ȫ?>(2?q* ?ʈ4|D?!{I?#+G3P?oX?$޼rl?]=8?*q1?_(v\?S/}c??j.ku? (0?["հ?:Y2?B*M?X#?Ե  `??: ?Yy(?Dpӛ*?JEھ?֖$i)n?[?)̇rI?4/fSVw?s4ah?:|?] ?O畈?*;?Vw?7? +n20?5kgP?Yx?tN?I%?dt}'?f@a?Խz?Z;?̲tvD?o&?O1?>1S?(sZ?׃? Ah@?~d\hp?=6LW5?^EUIh?2m?K?`mO?=9?޺ ?r^?1q?fTT?n h?-c ?kO?Z1?L_?ܹ@g?g-p?ԥu?1) +?+X;&?v: b?י!P$&?J { ?z`?TXrK@?_2?x:Z?*3?/-@?/U?{uʄ?O`#?[?ѹI?NsT?ߧ+X?>~U?w?*(sg?id?#?|Uב?˲Ŧؕ@?t6?ЁC_?`lh?X +~^?Ύ6O?}6?Zb)4?^`T' ?U?NUi7?2 a?9>?ah?$, +gl?T ?% +?lz?/? @?+BzZ?,#?(/?kO?oe"?Ãr΍?u,v{? y?*؟?ܤ|?ώ?%ߣ~?Kv*?[ ?Ued?*T6Od?Le.p?h~?گl?eGm?Ă ?ZP?- +?˖ZEL?CZ ?Q =/?46Z?A?Оެv?I?E%?v \?}?P +zf0?ɣ?!?XM?-A ?Ҥ"? Ţ?%0?czN?ط˦?]~׉zF?U"?xLZ?ըObi?28!??w b??x?Dxh?/f?J3큁?%S)`?߁K?ٮWK?V¸Db??g~hU?T B?LtMo?')R?ZPC?ҋZ|?ÜV%?L+?"Ϳ]?7Q_?5= =Z?)fv?Ex?&D .?舰?紸/;?:׃'?Ș? |/6?%@1 DP?E?#_?BDf?5rv?w?J +?  +?O|"?զU a"? 9????$x?bm!?fHe?C>(7$?Ѵ/l?(fP?Aň?@z ?[ ?+2UP?~?랹|n'?lw??}?̍p?#w?Zx ?5ȣI?ZI[?҂$?Se?ya?)*Ȇ?"!a?N?oE&?-$T?g3?v#{k?EH[%!?㲽?SBY +?7Q?|Er0?ҙ :?S'?_K'?ˈSH (?"?a?Ƒ_?E?c?r0?T&?lą'?BX?Ю;V8?Sw ?3y ?՛ ??T.H?%?K?k4?m',? e?0?ߐͅ0?9&O?k??&ҜX?K=H?Ľ~0\??zR0?!X?]S?C4?Ԓ?~ ^?4? ȜS@?fAI?bH?S#?28?KS?~'?BA孼??:٘R?7?e?`*"?hrE? J ?u8n.? z?|jj?W$r?i}ZV?WgT??Y?i??ܥ?υp?s ?6\X?+Å?)s?1 8?&e.(?ӻ{AvM?z?bg-~?^?9?~,?2/?9,L?'Ϫ?=0#0?>U ?Zώ?S?ݛ%?? WDh?饺@'? ?zMl?E/?ُ+(?KZ@F?"?1+?̽v?c`?O'|?㙚}t`?yŨ?餟.?㳉I?rR?&)`?yx3f)? +C?4r?}Oub? @P?q?1!V +N?՚ᩀ?F^?h?5@?l3Z%?綺p%?y?x||v?NGP??ۛې?<>?~eԦ?ދg?lϠ?a?7=r_?\VPN?!E4?1yxd2M?vLr?d:?Ӽ@?G% ??05|?؂ ?KOe;?ϟ?Pa?kU3?5?5BV_?Ov?{;+? B]?BU@L?Sٌ׭?q?m?ܧ"f?؆FG? ?[]H?g8ԯ0?Jݙ?Ӟڿ?XE?=go?hZ?CA?đHU8?⸑uU?w ? +jt?ϫ/q?ڍ ?= oM?v[^>?iw?Կ5?Mh?)pQ5,?n;>?{?XDԐ? +5qWp? +d2?kB+`?%q+?ʗR?~w?Ro`E?ռ.Z?PDV?y/Os?(B?G@?gCt?ΞZ?̴^?^ٗ,?{7䩀?U#~?oS)n?ݎD?S2iy?o;&?ڥ)VZ?p|?4}?ZN?6ރnȈ?u?쉈#?9M?Ym!P?З4@?죚?ˡE?!?}!?.j.8?-? H?jJ%?tH?4PaA?f?&5?dc4G?`{?^T}?n?߿l ?÷+? nQC?&$6,?-u%?k_?|xq?Q,b q? 4?M洋?vc ?B?Kְ"?[ޫP?G/?!H=?⇍X)l?MC?XG?-/o?8u?x?B?? tS?cj?6 SO?^ ?=L?7.I?Ş'?|C'ۂ?l? +,?L 3?ވ_?#;w?4EW?o;?Ca?K ?nFɰ? "?u'$X?6͆?OIx?:k~Kh?/>6?V?g@? .$?5ꓣ?c+H ?Hz ?d?߇?JqY,?vr?fJP>?k6Hd??{Jw?YfYz?Ǘͽ?<4?WY?z{?zt`?mVZ?rȀ?} ?A?}4?Ę&?Smlh?^?_ ?"׋~6?: >?&IF'3?iJF?{zJ!?JːX?#Kj?`p?r9`?Yjx?ch?S?M̤s'?+q?s:? v+?Ilt\ ?$3v>?Uw8[A?gkzĖ?Tjn?{v?c>? މ?t+q|?_ T@??\?a\6f(?6鏰?%f?W]?_Es?V?f% 9T?o.S>?Y?T?ꊡB? +DnF?kJ?͞h?^]9$?l?@?A?HoPsA?0u?xZ\ ?=wW@?H]?=ߣy? ܦ ?+?c*tl?нbP?ru?۫?,S5?z3=a?=۳?R?Ύs(?SLq3?EK̗?Ι?W8c?YL?J)@?x(?] ?{.}?=?.#=Q?|fX?U.2?]ؗ?r˚?٨Uͳnh?T?1?ޛIb?>?7|?'??d \?טw ?;I+?5%:0?Qucx?S?۶Z?2Z5g?GC5 4?#Q?K~?DH{?*?~O&?h?OGa?~b7?ߙaV@?g*W%?h2',(?i^!?j?ۘt{B?7]?. ? ?O?2?q?E!?԰?l?KJ?Z#jh?Ph*?ps??f n?kd?"?{[Oy?v???%?0?k?ߦ,a@`?ҥ?6?aO`~?ݱ+%?LV? A?8o+?Φ̑?݄[Th?DͿ +? ZӀ?QRW?;%H??ѢmX?X!0 ?dU?Z?myGH?Kt{J? ?K?_?G|?_m?Bnr?27 +Y?cs?T?£mΆ?|r^]k?̆/G?+j~?RΗ?`C"??fuI`?^?KlV?l?|=H?>P *?U(7u?ňC0G?ij5`?&4"?|?-֜?f? y?C[@X?;^?حˆ?ey -[?ji?"?߇M?LM?/K==?梾ቴ?ï"ȸ? ?3 r{?7N{cx?ᐻ3?2f?AY,~4?ۨ)t?خ8)?s]l,?aG&?E ~?i??,@@?:̨?? lcj?x?UE>?zCK?VF{#?^ s?`ns?Jw +g? !(?gh ?tHe?릈Lj?G,uB?uTt?Հ?]p?Ҽudd?Nx0?'zy$?~rAQ?>IW7?nrS?VrPx? +y?pXM?ݓp#? hCN?WE +k?̎+=?V?MY:H7?必qA?h?_M`d(?&?z? ?멹?:> ?Y>?خ=?)@h?ݲ&=?߄Q6&?w (? {4??  ? !2!?af?5f?k#?U&t?s!=y?ʥ>=?Hb%$?ĝHL?;=ݚ=?)8~_?++ʫl?5WX?کk)r?۽3>~?juT?B) ?9eu?ʕʛ. ?դ)p-?轾(?vjЍ?MeB@e3? +HI+?EBT?ٕ3f?X*B?ػ>9?gv?R\]??j-1?'a?LǁT?W&?řa;?הs?IqSJ?ީ?_0$Ѹ?ib +?#4,?J ?-.@?kG?A? V?Ư6?Jk{T?v~?ov (?/`?hVT&?促ȯT?=?,X?C92? +z(?\u?좞b>?팇4E?ߙd?x ? =A ? +C ?pHPT$?W +?^o?gg?@?U??ykՎ?Sg~?Ė,qH?⥿Lrk?T:?&M?Hg8?btG?'ۤ?)`?Pz??&?r?j%*?ۏwCuF?.?@O%?ޮ P?#P?ݙVr,?0?r.#O ?Y5?T/DR?i\?_@P?>*?#OV?]av?®mm?^_?4*?ܤj?ƵIE?n-ԑ?z? 9?#4?z>?ߌU?g-[? 8X?jx,?A9?Q=O?4?Z5?ֻ5R?SGGn?d3?~X};?ň:?R? +9!{?)5P?dx2?끈 e?3Q@$?`?bC ?߉:Ը?}n1?LI?CL{r?@l?P|4?c3?%l?S&*|?ͮJM?q?ΖR(.?t#t?p T@D?aP"ŋ?|;"|?U!B?畍6?V?:ŏ є?}2y?2?wCF,(?L)?ݤ?ا#?Cp?YkQ?zEx? ?:f@?$?K|r?՚;1"? 5? 6_?@Pd?~?^ى,?2e\?VF[B?fg?{R@?ILA/V?8a`?š x?*?~ ? +nn?b4?|(?: r?u?'[.?Y#T?>}?䘋o4?3+p?=~pd?&K?ӎ + ?!=?ɮ?ޣ?Oؾ?7v.v8??#P?xT?Ʌn ?}6?v7J?v`O?[2 1?K'~H?ldK?[?넆u?퍨bC?Eg?bp +>?}8S?|G?a ?(?Cwǔ:??ֹ5E?D8?M+. ?5q?,R h??v?jd?O?@?݄D"r?B?ׅk?ȍ?a: _?z*L?b?KGB9{?T&y?0qC7?,˄?|Qh?Q;4?C u?5>?u(f?>? x?)Pc?nq?1Ė)#?1`?*[B?]I=V?C ?~B ?qm?!3$?3ޝZ?#?1y(~?1~JL?PL?t%t?}C?- +?8-@?MZ?R5g?ͽ>Pl?Ivp=;?Dd?BL3?Td7)?kH?fuR?/K&?f0?l?T~?ɸVm,_?ߏ~?ʯ?5?y!(?rssxJ?ѹQ,?ԡϬ?; ?!N~?֬ ۹l?5?$bS??*\^d?ګ&?F#? +x ?Dp?z+B?WZ`?f?@[M?}G?zElf?ӃӬ0n?dV2? ?!i u? 6%?g ^_?E??l[?苪g$?/n`?9V?ÿ +7?@ھ?g>?.3?|3!\?ڨמ?-)#Տ?軥[4?"um ?38a1?WMp? +F?~-?P90?_U.o?\ǭb?!k?P6?CI-g?<] +?P>}8?) `?a`?=-68?6;??[є?J&b?KY?TڟO?,bΒ?'P?wY+?i$%?][)4?ޤ5?}}? +? K?oGO?~(KX?آȈ?"Q$?&w?.*Di?$0l?՗Ȍ?ƚԗ?<[?5?Ą7ɘ?0z?"@?̍&>X??X|)d?XB[?M?'l,%?{H?хY-?̏8h?FFu?I?W ?Ǡʀa8?͋%А?3#ş?:K?*8?Xɠ?j,s@?x2 ?D?!ۘ?έ:$?9"ax?8Y{!?d-?n?9B?ߤ$?PBܜ?j?. G?I?sB?d ?dX?ߩ$??_d#?Ġ}rI?ge:?$n?=[P`?A ~&5?#['?&2c?Ha?̼tY?a;?|a?yw?ń!?07v:?oɄ?֞ R~?CA/?Ϸ)?]0?)3?>?%>?Һc9R?aK?<4*?U3? ^&?z?bE?lS:?f'?T_!; ? 9s?ҤRnz?#?{Cx?Ţb?anPv? +!)?-?T˼0?٠qb?+G@?#Ԉ??8ޯ5?<>X?- ʖ?`Afw?n?֩ j?RF?7"?Ǥ?b@*?.?Mv?@5?R?<ܙk?/rB{?/4 ?5?HPގ1?ҒsN6z?$7e\?Ԫtn?=j?;g.?h]??Π3x?^?\?1B?JD,q?¨?toڤ?D^{?Z=?} +`c7?sˋ8?k=i?9D?4hm|?|?4!?q&(?Ԥ ?(W?1|E?v^~?6Ǡi?3= ?Yw? +?Y8?L0?O?p}g?j:Gu9?-#4߈?5k?y^?#VƦm?Q{?{@?2'? +5r?B?w)=)_?-@f?iug?.(A?x5md?{y!??n9}?.:`?L +՚?Ws??I?ގ=`dD?ջ>B??'(>?"b>?W2|$?i; ?P? k(?L?Xi?.%H?d?׆DDž?ZSw?ᤚu?|!?&?&) ?:?{[N/?ڎɕ5F?T_wx?c=b?zt?9+b?㊺Mqr?{Ͻ!?VIފ?k^5?@?2K?aNo?(37R8?U(f҃?$/(?Є'q?t?I?ǁa?珁OZ?@0?.E? F?H?.ۯk?Xji?X.Y~?ֳ4t?d?D0z1h?N?KDh?!Ҹ?#?яjG(?W?{xk?k8F??ֆ?ot?Ϥ?la2?&hD?=w? +Vb0?Wc5?ÅǔA?IB?Ny?jAV?_[?r?&^ĠC?ą5p?drG?ٗ.A?L??yh?戨r6|?x5֏?0o?jmw?+p?2h?&vTk?fd[<6?j?@C?ioԈ ?%5z *?$j4N?L~`? M@?hD?Mk4?<T?q]^?9^v2?z_??`?CR?$ /b?-;$?걠9?ŀ +?㋡V?t4FMQ?׌3r\?iANs?@=c?}C?Q??ꤚ?g`?~%q%^?äw?gad?[!-o?ᱺ&EX?"M-x?O"[?(PVHx?ϴ:?dR?҉yml?QL?ԥ^?u?IJ +,?/n??i ?۲`?1$?r2sAr?{ ?ܖ绠?ډ@]?e?rHSe?sQ?2:o? ?}V?ҙ|f?ER?MKG]?S5? _J֊?Bn?ձ,T??`?}h?ؤ&h?zĶU?p? !?A?{K!?V?B?[Snw?ϩ^?/=?К?]*?ܫF|?=X?@?᠙?.kO?aXWlH?Q6z? `?CG?N=\?j?l(1$?AD? >.??uԅ??PreI~?GR?8A?2 FS?~N?빐???(?|Ot?zO?Ӓ?2b= 4?ps??u?dxe*?ܥCV?a}?tFE ?8r?ۊ@?#w?+F?(FLe?W?_PA?cڻYy??Z?ITB?@"?+ R'??umt?יA?͒t?-D҆oO?GC@?x7F!?S}C?{PT?eӵ?P$)?h}?Ŵ.>T?~R%??¢9+`(??UY?a 1?9 ,'?cd:?ox?SkX?Տn?\Yy??dpg4?8Y?r5?ލ}0?$Cy? ?$mQH?ɽ["R? i?ݫĺ?{$1?"h?[J_?|u* +?r!?LQ_? Ow?w%?/"}0?)M}?իj?網?X?L!(?e#L?ԁj ?zKX?X^ ?͆5?4&?Bd?C*ɮ??o!`n?خ_o?"L6V?R$ǘ?p>?Cw?ݩ.?{=R? |?E?y)H@?҇⿥z?ҊCK.?#HH?5v?Q6?ys+C?Χz?sn t? e"?Vڈg?ф/d?_7KV?t/&j?T ?}"?P#? ("?ɳ +?lb?Qom2?ZU?ýϿ?rbr?7jq?I\',?g1}? ?5me?Ґ|f?M~?BӢk?l + +?ן ] ?D?ACu! ?Sxt?`{? fy9?9W?/Uū?dT=>?*0/_|?^\+P?qIa-?D#?ks?‚1\?ߩű?P? % +?ѝ?q.~?ܡExV +t? F#?51)?1[Ґ?2f? Q ?1?63l(?f +7s?!LHr?I}?~l?I۞ܸ?Hl0?_mWAp?٬*S?]A8? \=?ww?tK?/` H?״u[?plz?NQ7z?`vx?ܡZ?^?(z$/?5??#?R?׏WM? !X?䙫q?π@?Ԇ[.?漖|e?*N,?;<%>PY?֪m?B ?쓟j?㝓d?⇩e?&X?I'6x?S[js?ޛGt?0O?-K??rC~?d}?W+? +Mq?F>:n>?֫ڂ N?%2?&_(??l?k]j?lW?*cV?k?̋{?#?L9?k?S.?yMeiϬ?H"?KJ?ﯶ2֡? ?Z+y.$?.B ?@?"h.?ڱ܊?@h?T?I_?M4gTO?Lf?⋖?l?\?ca:?޴0簈6?_Q ?.hgM?ŐC(?/l4?2aq:?`j?Tn?;Np?P`?T'?fQ%?O ?Hd,?d ^?TB?1{Ro?R?i֙*?)*?#+;l?aw/? A?Tno?Plʽ?SY?,Vr?xA?y]?4dx?΁Fy?B?st?*`?) X??U!@?L?.U|?M]:?ְ؁Ъ?ش ??y(?mGd?ӆJ#,?2?.>6r ?$yǎ,?;Sy?7}Y(?Qa p?_?5?1NG?}j?LBp?57"fG?Wd?2ʔ4?޴!O?nI?ٛS?,g? ?!tg%?=ft?QB?W:h+5? 7?zYL?4K?褫9?IYP?ih?Ҫ?P??Wym?Y?ޅ?D),?3Po?"`?P,?SX?DJr?cXf{?Mp?ߓq gh??-c:?9%?Bv?ڻ?L?x'{w?Dr?"`0?¬i? v~?`G(@?QXY:D?B_V8??WN?@ +r?B8?#)d?a:?Ҁ˪&?n$+?;G?A?.؁?Β_?VR͸?Hv3LI?ӫ!?? +ܶC? u$!?T2+?9bXV?~?W^t?8 M?F1?Қh]?EN?Z`?~ *?D0?I+\ez?D"?8X?s? ??,?ܠ,FpP?o:?7r?R?Zf?'lG?sQ?ϳ_?~h?;p??g)w?Q?R{Zq?نU +?qy#?򚜛?F?ݱa?R +b?W#?U ?y΋6?7wp?t0$?m ?¢nT? cz?1s:? XH?HNk?pqؐ??y!2?1U( 7?k?i82!?*BF?9&e?,[r`? d?u&磱?A8`?>TF?©O{a?n{4? AY'?*#_P?8ǯO?]D???)d?ٜ^?U@r?l`.B?&?O?aԶ?ܼc,.?E N?۬'?e[͜?G`??XSz?тz? b?jm?6韆 ,?W?浗;?oB<?%LRY.?slH? f?o7ƞH?|AN?.'8?BdY?IO??N.?@?6?MPn?hl6?w_"+0?ۻgƒnL?E?kK:??$o}?½R ?T'H?ELY?u@iF?kP?h?1>0??ÎR{n?KJ?n!jT?'9-?ĂHn4?'?meax?W߿?e\?lg*?@)}?Hf ?60?ͬ?0g?of ? (?(Bj?$P|?v,TJ?bJO&?΋rh?]82?r/?q?6;?IH,?7^2?>i?jE3 ?cK ?箧+f?9+$ ?߫!# ?;_L?j?B^u?aXW?֥4?t?^?yߐp?3Ц2 z?a7 ?s!?"6?5l ?-:?y@?pzn?Ù?˞B?rmT?ieND?. п:n?E,.a?, ;?O] %?lj?mÆl?K㢆?NZؼ?=6?ӓ?E݋?=VRx?P[ ?Cď?]y3S{?,?Dt(?T>?J4? +a?q?ۻ`?"M?⚤]@?D?wAc?, +T?, L 0?]=E:?w֊[??l3?/0?nzA?;-u?Reۺ?˕KD?[Y?LE?`6?7l@?)@?M ??܇t?u}?Ӡdt~? +&?f1? Et?dŪ ?.u]$?V5V!?Xayf?LQ]?ّ?\?]P7?ƽ?e"?ǂ6x?.L?u? +. `??u/]Ӟ?5 ?츦{s?i?%?ի9?d㩰?6C|s?z6x6?!(?U?$ۆ??۝OIV?bE|?tH?G(8?m[O?#? ?~ޯ??ހP.?vU2Q?NN`?!ίV?JĂӳ? ׫eEx??b!/|?d6(?t?>?f ?诸q?*[Ǽs`?flP?ia?Gt? +\PP?ϑ@?aJb?.<\?vZ>??T={H?!?h8? ?(y?ڟ?CC= +??Mύ?퉞u?C?2?k`y?e?>Z?DE#?<+D?h`7?RڿZ ? 6&M?>9?̦eY/?m*D?ˬ#F?\œj?ZjB?VH2?X]O ?朎4?́Y?`^!?زӌu?}E?d.=?ia?fswB?cl"v?/3k?ו7??!"o0?8(;0?*c?% )?#/?:` ?8d`?ΰ?dVjt?O?^}E?up(?^҈?ز0X*?AAT?TvT?͉L?:V?f?ƴclQ.H?uü?jJ?׻???le???,& 4O?ݰ>~?1_? ?Kn?lT?׈"?N?vM/?yzJ8L?ۏ?߄I_4??DfO|?Z$`?+ z?ÙNV?|?/h?8r?M7?MS?M?ް,j?1֭ ?;׆?;x&?r`?@?˧z?DW? ϴ?ܟ?]?/r ? We?8|i?ANp?u_??)1$?4?I? {K?ՀE|}X?{<]@?Kg)2?'t?.? `? Ŝ?G 6$?&? +oy??X6x ?A?ݧۭ[?8?h?fLh?G=t??r?|?H> ?4w?#|Z?:G}? ~?qa΄?8(D8?Kǚ|?ڗ?ljĠ?ᘆ)?q(n?D7LZ?b[V?bd?7լ=?pC?{u?GW?e?M/?]=?"ȡ?;8?9?׺tF?ݷnY$?eyj?SMd?$?׵%lT?E?cc?Ɩ}v?2?Lmi?=]²?=/I +?MC'?ͽ<;?s5v?胎ǧw)?xA^^}?K7?#ϷP? Um?fXxW?ou?c"?ٶL^=J?B0p;L?Ǫ?_F?þ~x8?U99(?40Z?p&,? ?o#f-? {?>x?qw)~?Y:\ ?#?^(Fz?ƾ;t?7[?fUH@?]ߏ$?1|?djq?AYX?4b(?^4{N?c=S0? +]32?}?7" ?؆˜? ^B?72()?AG\?ֱJL?l袀?ִX0`?n????㑤??{'-?4;m???$d?IU?.?C?Q?؇SϦ?̚(?qon?q4_s"?ሷd D?-٬?}?$?ʹob8?埩YCo?F?E?H?oS?p?$Z?X?9?ű?7 |?H-X?E_z?B?WvO?+20?4®?>?J$?ns?<D?aN^N?fnJ?E~Z0?k@?"t"x?6&??TЗ@?h`'Ő?1v?磷c?ؾ U?NT߮?OBb?]>ɇ?Bd?99q?,?m&K?\R?<Xs? +yT?oA%?fN ?ѯ:cx?aL@?((.??؇ "?yj_?[Y,S?E^`y?l?[=?ۡ{J?&%?`?zC1?mS?@8?aP?v6`?ʃ?֨|šr*?!:?gg&?de ?rԧ#[?ℊe?ez9?k| ?5I?p?9*z?oA.?-/c^?I<0?Fc,?j9Y,?JiG?ˮ :՘?[\?T;?^z?YL?JSMP?܍?· +6@?˛\??]'Tj4?qg"?T;?F ?sJU?7p? X?<);@?-M?q S?:?؇NrYL?Tc6F?iiy?9e7aw?r?o@Za3?cn?tr?~Og[?|%1`?]{?j7?oՑ?V`z>m?^)?/ ?6f?^''? <B?:J?~lX ?\?K'Xq??P/EE??ȫ|?኶vR?u?r:*?H~?3 ?(jZ?-vGv?k՗?ވA?`k?/?i;?ƛ0?@?۩b8?k#0?1?Ȼ)?/i?ߦ;H??Qn@?:?9f?,i֋?x?Vjp?%d=?&x?dw?P|? IE_$?ޤb?xSh?m% ?U $9?vmr?uwр?_8?<j?4R?FȖ?J?ؘm{Z?xdV?z̞@?wa?4ە?S1?h+H?H@D?@yC.?ul ? ӂ`?І]?*!;0? =?,?7?O?ẖ!?Ԙ8?C\5?HȥR?pL?{$?ub>x?<?{e?p?of4?lf?̕?3|Y +?SqP?bnh?O?[?hO?s+?U?f)?Ij?j\,k? RП?Eݔ?@7?LF?O\?2?C"{?z?J`U??[N?”Fd H?;Nf?).?a B?鿋?Yu"?4G2?q;p?MJ!?=|?XCR?NYD?HZx1?q? +H?寨C!?m \?y!?㥚5?^U?@;Bv?X~?I+@?Z}?CtO?P3?vno?]i?ӭ?ѫ g?hh| ?Zj k?(T'`?ɶ?_m?Ss?NeS? 0;?ܰ|N?#NMx?Kb7?6XP?-%?i?8y&?a9ܿ8?ͬ!?܎:6?R5H?ˉ?ہ z?NqK???6S"?*?q=9?B4?<&4?0Tс3?3?}$?u1??nr$+??-?_5?^,?H?e)?O?`W?{?䏱_$b?gW?dC]nX?- ??MD?0ϣ~?3$*?3va?`إ٨?.>?C P?ڒpz?;`:? t? Ğp?rs?~?M[ ?)?-3+m?:cI{?_?c_Y?rg0T?axQ?;#?̥S?M&=v?I%?&Y?ڪ?wL?d-ݥ?4̓l??'N[?r?3&x?ڣFP?󛛀?rshK?&-? ?*F?V4(?S>/,?-^?4,:t?{ ?S`?gᆆ?JW?}bS?Fxvb??>N&?^X?ھ+?O?l\?NW(?]?mLg;?%*~?Yd*?Ȭ*ð?I?=Y??(6?k̸E?|v?u(,?*|I4?A &?鈲:>?@?IU?l6.?s.A?!* ?k4C+?5^?O!?߬roz?h3"?ѱtE0?Zo.?ɰJ?Msa?/&?@FR?x_֊?FN\?$V?nD?%yJ?b[??ӉiY?_T8?w +?O0;?я ?Z_?Ăb?q&1B?ol? K.?uQ?ٶp`?ؙnAP?ތ6#d???%?ǬtH?7>pI@?)S ?/ ?679y*?|x??c%gd?3S?rp? d ,?(?N^?)1?j_?;{?~48?śh?mo)? +…P?`]Cc?\}0?~L?K2Ew?4O~d?χ?ց@?7۹cv?!Px?b`?(?$=/h?\x?f*$?~;?ʐ?xn?]n??\?.\>?h?Ē?% ?X?-7?͇.@t?Ju?8HD?+?6~?ƴ?I'?p o\t?x0?\?͏q?ْf?u?b~Y6??#{hȶ?Ԗ?u?Ѹ_M]?Ɂc3e ?Ih@?s:]6?/ +J?9 +?"p_b?l(?ԋ?x Fx?Ѱ퍥zZ?Y?cj|F?C&?7"j?׌@|?-K^?@?f?ԡ??C|)?ߒ[~?NJbP?Ҡ?@QL&?di6?ʼnc?鵐Z?.0n}q? KX?x T?T=+`r?ji?: ֠?קyf?$?I'?ķ>!(?j\j?dvΑ ?UJWB?;f-?GB?&M?!{$?*w?,?濔=\?'ʣ?}9i?0-?>9o?`D?Z=?&IU?{˒ˡ?$?Ӻ?ː@4?ԲA?S%?J 1?‹?)»S?H?2O?AGw"?Ij|,?`? *?Ɉ,Ԗ?0??~\?\?$g?+?6|X(?[A?u?qKD?vc ?A;' ?'e$?4^v ?WIT?}?* ?ԇ-zs?@+8?V?Dǂ?. ?td="4?<'?ꫭ?вq?QW?nFr"2@?඲ ?R?%E!?[X?ނ?!(?Gl?t?/xE?k,W?̢֠?+#?62S{u?gN2? Z9?.]%?sD?~.`?Ч"l?K?ۅN???7;|?sJ?Ǖk?}y(?tc?%?9 +?\b?p?A&^?P%ن?D_?a(?õ=?J}v*b?$1n?D-?4۰?OC쁢?x;?c/,?i?Ϫh?݉?V?/J\U?8H?Q?'u"/X?xP?4Ȉ?hd?!Hf_>?U?Ov?臡 +|?&?~A?s%Ss?d\? 0S?~"?~\a|?SyE6?8?q(?5QRn?j9X?0E=?]X/?lefՌ?98Ct?=D?r?Էp?\l@C?︊ :?j'[?#9?Մ!*?MD&Ϡ?hhI? +=?? +r?Ӥf |? |?D?,'? ć?:;EX?#)h? z?|?rD?CSbt? o?"*3c?5<b?M=l?骤k'n?//?髮u?;?,:#?js?@AR?' ?;,r?_)J%?ԙf?S/!8?`s??`?sU ˛?H?| Y?ժky?h]x?߃V6B?4ly4?J?Rvr?Z p?^Z?7i?&ldU?>?wu o?ħr?֠Pyְ?"0?9b +?Mmk?~Y@?^u[e?>MW?s?aQJ?8?(?qs?Mc(A?}@/?׉H?DI5 ?J;U#?Qm_?% ?!?oKSn?^3|e?D?eyT?8x?>?)Ø? +?Wv+?YT?bf?B*?Tʒ?W?N6? <j?ӌj?*x?)Qc?hH?sd? ?|:?Pm?(t?Y?@V;?F#?< n?>x@?>ւ?jGc?H7??0`?lW?֞K?͊tH?Nʘ?׶aJ?楙?!+?+CX6?̵b?:m?tVH`?$gq/?;(f؀?E?'yL?$u[? ƺ?جu?Z:?n7w?Ԙx?ϣ?#zA$?g`?Y6 F?>MX?ݔ?}?}~?2 5?$w^E?ڣ&N??K 9?ɠW?|)?S?Z͉ N?Wa7?O:T?_3q?gJ? ?Q>~?౲#?6EGe?}f?bHA?߷Plc8?$[V? F<p?̣g|?!<@4?azW?f7ͬ|?Ŋ`X?F*}hU?-l(|?wM2d?蓒{?q?( ?d?m=%? a?蓗/]?u5VA?qS?5$n[n?:}"?*L?+?XC!?8s?wR?ϭ?}r;?dx?>Neg?E8?;N?Oic4?2l=?03?\(b?HaH?9B?fi??m+N?Ң7?2j?g)M}?NH?R?F˳F??Y? υo?򝍌=?R?9?.+?W?z?DZޯ?弚@9?WT?oߙ?8i?{"S?G.?0?כ.??e~n?Lz?f?P6+?椲\?L,h1?EAC(?y`\?K?rK4R?1?lvG!H$?hѾ?媞J??ƭ?g ?~?ҶMN?4d?rF5?9/6 ?{l&?0V4?9?ZA?!r?i~?HY?֕6g@?Qaq?}t?.% ?}U?g@?%ʱP?˩d<?sd?vb?Ȟ8?F`Lx?!ռ`&? L?Lɥ?S%?o#}?暃Cɕ? ?SzS? Tc?wk?vP?m?? -Y?^?%?݁gx?6W>?`H3ťx? ?$?3Qgk?BWs?q?e=?U.n?]^b??V*?"?jM?|F?X,?҄i?ܴuRF?h(?4B/S?P)]T? +#X?z?R?u" ?3lQz?9sT?=ठ?6z?՘d*R?oHP2?9DZ?돚?:v9 ?#.0?x?7':U?j9?x?v9:??Njh?z?hm?Ƃ7?$nH??‹C|H?0us<?a\`?񮅰H?J3j8?Se6]?=?Iy?1pa0?)At?eV?ޒtH? ?ZBM?'i?DU[$? +W?>4 +?1S?ی \?e ?V~?董RXn?X?獰?Blx?[ ?弛M?ho;?OӁP? +P?z.`?J?YԚ?>YKa?s5l8?n:?!4?ߟ ?ͬ?vIi?Ũҝ!T?ూ?Y>[?י$r?SM4?^HJ?촌?{ Sn?@!= ?:En?zr?O14_?ُ ?ЈL?E?ߓ T?+J{;?v g? ܰ?{C?8,z?H C?K?K "?^L`?y(? 5*?g~:?/K?Y[r? `? !?㡺_?A_?=?)!?)#?n(?A?䶄4y?V(? n0?k`eh?&mp?4T?.?Hc?ڸڗ?{M?Y1?V0=?7?GV?i?Ѷ6U?pfH? (?Tj?W/?K؄?ao?w?$v?HM~?䪂BT\?*G>i?$T`?bG[?1z?fp (?¶k+ ?a?Zz?x8?dҜ2 +?ɂ +,?ʤn?2 ?\V?DUB??ʿ?]Ϗ0?(?)R&?奶@?sM?$D?X,?TȰ?swo?bxP?n?_dק?e`?.Pz([c?p2x5k|?|?)Ttlp?iWd)?^mC?JU?0v?@;vf?60@?g8j? ?Ui_o?ayL? =~?v jg?T֥?N03m?ApZC?XI?o)n?/?܀?:߸?Ͽ,?} O$@??7$?AJ?Q?R9[?:˗?6Nx?z?݃˙F?*b?2T5?τ;ϊ,?EޓL?+F?9Gx?G((?a'?ˢKT?~b@?'E?DV.?X??Nk?Q`5?r\6?Xr^? y"GJ?݆/?dC?ʘ\ F8?bCS?x8${?سDd́?f=O?2Rϡ?}0?טۤ?A0(?fm6>?MaM?{ظ7f?`-k?fIe???wp?yf޿?]߅p?m'?鉪hl?Gh?ܡS?߷SB?s4?儻Jn?7i+?xi ?I4I?ޚ~ͯ?1rLa?u?P&G?a@?ѸCXC?5T0?ك>?լ4?ꄬH/?€x?Jq?8ݳ? ?ߒ$?ߨ|d? .v?6.?҄?nMe?J_ks?#ibK:?;?r}?'k ?@?az?oYa?yz1'??Ěw?tK-"?&Y 84?4P?s[?븀?߅ +z?ޖ[&?=%if?&4i?ѕX??0qX??ݙΨ?*,H6?Hh?}p?U`?+yBۿ?<'\*?ݼ?J=߉?u_c?<K?j\[?"hy?sȍ?Ֆ7j%n?nE-]p?Z1T?p#P?m?TϾ8?$K?ޕ?B?uc3O?CX?ery?(\LR>?km?a"?ٖ?T<0??[`]? __`?Pw?;?2G?yt?L? +lljH?먊P?J ?RACd?$10?y)?ꞔ/?zhx?! ?Ij?܇uD.?f.?vn6?#/t +\D?bk4?ל?Xg8?*T?ug\?TZ2lD?z[iB?= +?,/?6Ve?O=`h#?B܁?玩B+?~KJ?͍q?Hb?5ҭi?p&?ߊ6?@RU@? L?2T?*?ђpT?!;|(?m?P?QrJ?IU?O)mW?1?DZRx?cI(?i?9D?ڍa?YЅԌn?w?v8?a?<*?? ?ݰu3cE ?-H=?x$Ϻ?sTð?js6Y?G{.?뷩5?`}А? /te?Zakw?Sθ ?޳УwD?*D?ӏ71\?ҜQQ?S=|?5.?쒺S}\?-M\?+0?P`?Ё9I?n/?v^(?䤌F?xm?N+s??Q@/?_=VC??=+fXW`?Ǧ fH?͜!??"l6?5jl?6r?/|?'v@?ҀSBb?||m?X8[?)?Fy?f*9?ʕHL?Ơ所ܐ?d ?8 g$?ۯ7~t?컐G ?П-㠄? G@ ?_I?"3J?ȉJd?|=h?Dw?Q +?x y?՚U?KYد?`UY?;l.8 ??ыc? +v?r&?jTyM?CNm?dMu4?C?ҢV~?€ک?xr?W€?͇S?P?G^?Y}ue?~D? 7P? <]??r.?<?ś.?yrւ?~VP?o M?>b?~?LIt?_Qd??3?>A~?x,H/?ػ?b)G#b?#P?X~Ȩv?p:w?l?兙d@?1I?|Wo,?ov?ɚ>@?ۛ=o?À?Yo?%:A?}?ٷmX?$GM?uewE?kwz?8L\?=ئ?Cĸ^?Ť ~?"(?[}\`?lN?ڣTޮ?[bM?r ?Їy*=?ȿT?0wuD?6,$?6P%?@EE;۹?bY?g[N?Hd U?CjJ?~uSY[}?w/]?_u?Y?L ?ƫu?YV?ޢ$?Y`R??:'De?E?A?>Tq?])y? 6?^)u?VN?DHU?*U,?ED@?ǵ(?a^[?b-P?Yjy?J?/m?ۚ9?-?O,?tz?K ?߸Nf?)?GK盠?оҲ?wQ2?˓MW? ps?<`? c?]M6??%?:L\?ى5?9_&H?U?Lmn?m>??¾C@?a?l^ ?Ya? Ҧ?ڻ%?J8z?j(?A? ?0?l>EC8T?E2?wq$t?-( ?f?h0??'Q?UղLn?я U??BYX#r?b@?Օ2?~j?rG?-?t074?듁Y?1y?Y]R?eq?6d?ŗ?$ɍ^?or? +(m, ? ?˭Dh8?k*?ϥw?,?.?u. ?3dI?Se?ޢƊa?QƜ?eǙo ?Sjt?uiG?ϳT?`Kn0?"٤{%i?ֻ ?6v?<9#?Q]W?8p?HYk1?Lj?Ve^N?k*?) M? (?ƍX?DKel?X?E +m?E 6i&?![sJ?Ư5?į (?/}?ɹ*?:fvb?K"?yk? ?*G?~,?"2z?}?8Ѩ?$%m?" +F?lA'c?&M%?f?pA}?l?/N?iǜ?un@P?qVa?N?wzC~?)܀T0?`?~v)S?͐?sHn?# P?TBu?f:?W, ~?ڮ? ?lړ?"qh?0cO{y? Qd8?B?ZQ?<?_}?J ?U?HE. ?:gH?n/f?uM?jz]??aYٶh? WX??תX?ޠc$?ԹJlη?L AT?1?v?7L?ŎУϐ?ꀆi&?Q9G2?;&? 5?(' ?5)W ? 5y?z!? Ku&?ǘ?Ѕf6?Xm?|=8?[,G?KvƊ?M +.?B$j\?K??De\`?]#v?^])Ó? q@? )?;ʆ9?u^ֈ?E#8?椦?kXE?%O?a?dj?T?6U?XIw?\ee?w5L?I8?]=?ŌQ ?]a?Ypޅh?V,? ?l؛?{N(?:Jj??A^?؊2G@?k:?ݘSZD?LnRD?Ku6f?.Å?T(`O?%g?;3V? +҃?i6?WD|?K?~O ?]?w?OJ(? 8?ˮ??K?]?ۗ?`X?괠ɾY=?Y5?ӣ?/?ԐT??vY?W_?j?+̐=h?~?V?n~9?~s?SC|?,7/?2 KL?]G ?Lg.-?ͤ1?D?7-U1?̿Z?=?Գo+m?Ν`?s1??9m?IM?*?b2_A?1.?0|?ںy?X??۾SI?A+,?Řw?Q??aW?SI?:*)Q?D:? -H??`naH?. +l?qi ?Gs}*?ܩ3C@?Of?7pDtL?r˙8?5p6?tI?` ?e;?Pk?Kx?Т,5?轐?/$,m?x"?u\?g4?-p?(;6?cy +?إx?e?pQ6?c״2?I0o=?'ӝ&?F ?`?y4=? 9?SlK?U*B??-2?fFq?V?!`Fy?bk+(?\ʈ?ы?8 ?=?2<9/??CD$?n?E[?%U?vqux?'#x?ԥ%i?zZ?}?KB?45G?=ܿ"?h?l?|?ø\??e|nj?CѨ? d ??D5V?@@? +H?̃߁_?L?Ͷ0?56"9?c^Z?,?I +?B\?-|?z?$?iS?@&?d.ew|?㈷fcF?sǀ?ⷹŲ?L ݭ,??K?47!H`?⍑l?;^tg?XKDQX?,aV?һ0Ġ?.uG?#t?͆ET?¹?UŨ?դgm̀^?ǝJ&?ٹl@T?rɛF?h01?Y?IQ?M"T?hk_?ۮ`H?nƤ0?5?@gL D? )?UT=?4g,?>~?wz?׮f?&j|?Q?O׬?㝒 ż?&K?<0?'ђ+?=ߺ8?2)4?n@?݃/`'J?whAJ?bd?Mp-?٣r¢"?>xC?޴g;N?Im?^TG&ż??[=|?`Ҡ?%'|?vv? ?Yyi?Ih?Բx َ?U?m)5?_g|?= o?볢{??"79$1?Xuu?jH? c?`?n *_?)2?"CVq?S L53?! ?; l7?r{.?FggV? I6?=lL#?BT&?BG?gO?G?%?>?[)(? J2?r" ?e/?p ?ᶌ2?djO ?ys?\Z D?4?\| +?s?>?5vy?ruǖ?,tN?s\?C}h?Q?u^[H?6??غ&&?פ??qk"?^$( ?2?|yu?=ʋL?f?-+d?>ْX?㰔 +?]?`? Pkɋ?HH?gK?"B~C?fbU?${?ÈRY?P ?vh=?إ9?SS?ʰO?lW?;?uAg ?<|t2I?t +m?Tn*?Ҷ?X?^w? + ?et ?DůZ?!?_*7?_hHD?vEq?3?4?p-QW?͐(?k?ᘙR?t򖼆?\J ?Cj?Bt?`l/?FE`Rc?<?R(?س| ?kT?15c?-Z?o$?([G?9 ?SEyS?z8?r?PեH??wO=?vc?-)&?䬾c?Bh?Z?夢K?>J??<|7#}?u ?]FA?g7?ze ?^R.>?( ?p?ﰲd?\+?܆?c?~ ?< $?/u?O?^?aܸ0?5Հr?ҵtHr?+j?rkv?Iqq?lӒB?ÜI?q ?'w?=ˠ?ԎQM?@?Ƈ?¥mA?ꔷW:m?(?0C?ֿ,q?ߑSF0?ܟT?Q,@)?(?p8 +?eW?ף?ej"L?X?CʨDz?bEg?P?#?( fd?/' ?o\?EH?ZּX2?p,?ㄼ|??ہZPE:?˭'t'?',in?ogd).?ep?2`?i(v?4r ?l)?Fo8?Ğ?e4?_!D?)v[м?Vw>o@?s|?WO"|?K?x;?|l?ɞ"8?{ rF4?K?iD?]ƈ?-E1 ?%.?F-?/Aa?Ww?:??+Q8W?}al??%à?A)?~EC? +ha?XGʷ,8?s?麋z3?#ֶ?$i?)]#?yGK?v*j?К? +U?ՙ:?xVe?*̐?ൕۄ??ϑ?ͦx^h?N$?Ȟ;T?ҏ 4?T$?LT?ڽy?^P~?GRǪ0?թ^vV?cu0?䠗9e?px(?tМ?dn?+fT?K?C4cZ?dGL?L,to?~N4?|?rS+??l&?&o唬?5i!??*8T\?,~:?,?[=ih?+%?9=ˆ?VFk?{,?rwJ?9h?V"*&?<[z?fz?)W!?H?}Y@`??눱o?nO\?OU?ke15?xF?[p?vU 7?ab ??'q#R? p?$?R>F?7?/\N+Y|?~o?ҫWTL?!Wi?ֲ4?vW7:??kb?yy?8;j? ?JXRI?t?CG?K-[?N׶?Fsm)!?6V:?ڍ<|m?߅+w? ?vs?ضYX?B,?d?|EΊ?.F?ԨiǮ?ZfB?[?SV?}?f9h=?d+?ܧV?e3?m.d?o1?$M%?˟Re?5?;B?$?fe?Ւ^?١hz>?mc?N L\?`i?ӵ8v@?츖5v?D?:s?ys}s?XK0m&?"!?znB?U?"f?aypd?%$0?W>ǒ?Fn?!=?ԧ(mc?yH +A ?X}?a`=?(K"?#&?>N ?VS!?WiZ?tO`uM?A H?8?ױ8?m[?H?q2?瑉?zX)B?0 vȘ?䅷`\?}DŽu?Q?C$z,>?R$?H6n?8.1?EI}g?y0?1zjN?iGo?5[v?Z?Lrl? ﹭?iYU8z?{?W>@?TŸb?j"=? /?Cp??l=?3O%?x@?7?eg=@?L+=?1Í?Ҷ,?x?`e?$=)?=Y4gl?1D?Ӑ?ו4?c(Ƀ ?0x?Pn?@?ƽ\?$ ?ӸDy?sS/L?s?ri%?äom?@?vi?L?ߡ?WTu? H?%eP?D(&?đޣ?J0Zx?$1?B;?ɖF=?kl?@?XJ#h?R+{? +N&?CΙ_G?[N\,Cp?Q'ӡ?q`?嘘%k)?>`T?rW?ݠi>?ћPG1?xf?EG?o?ﴨRl?68U`?|KY?zV}v?r]?^g,?ii?K!W x?n3w.?(?/dʿ??ZX}? 6.? XnD?f?RXq4? O@@?x(i?Mt6??q?Y??Ҹ@?m;/F?*)2<:?ҡ.[Ւ?Ӈ~?-ކ?J2?@g? <?(>?,;?+IX?եew~?@۶?5n-? ?_PEN?uDX?;Z ?׳@?S?[=y?/?n?@)?1~?bai?˗?ϱۖ?$:t?o?ځu(?p ?V\?آo&p?3au?j?{?ǻ=֜?鼚0#?׻X'j?UE?F}4(?b?m? X?M3N?i?ؾl ?}?#-j?q6lo?;e?It?F1 K?~?PyZ??ЈҔ?pդ˘?ˉqut?yQ?h?&$?C%6?2m9z?*?cy|?;|?+lh?^g9?dZ?}*A ?bQ=?X"b0?**O?2'?X?[7{+?EÈ7l?w(N?Λ+<`?]nà?}zS"u?,qc?ۙ-E8?{?j((?XI4d?LZu.?Ł$/vˆ?M?]7D??"?~gw?H~?տ$C?Aa$X?qs?uv+ge?St ?Q6AP?.+~m@?4Tǡ??,$c?Y!?̠V?F#f?1.?S ?`Bv"?!]T?E%g?C<{)e?hn@??e.-?yR9?me $?'Ö ?Yp?:\o$88?9O5v?P##3?d?뀴_?э=?f, ? yf?ʕ??nWO +?ۑR t?⦱n?? ֹP?1x?H?)Y#?fY?C?ID?W?yzH?:9cn?RaZ?G'?g>?xPsZ?D ?/,p? /Ӊ*?hEv*?ף?BLڧ`?5k?*Ez?S̰Z?6˗j?=?)?ԪqhÍ*?ޯl?EQ?Tʵ?ӽu]?ajT?I ?K [?uG?E?DO0?(?\܎?#߾?rMTnO?ɴڟu? +G?레?le?Ѵ Y?䖠=?=;??`nT?pr?+OJfc?.e>QZ?ȷ1?8ª?bh}??゘A?;.?;xB?룍+x?#_A?J3;m?&\+@?ris?ҭAR?4LJp?Y?l?AOi?0[0?b?&g?&Rr?ع?گ"AN?v?sY?: 7 hy[?D?),̈́?[Z?@?Us[?\W/a"?ӎ)B\?ӳ?ѲMR?uA?޶|?Tf?a N?^?ޢ/Z?nBz? c?}?E@?&֡?ϟ;??ꖝ$`?RS{?.aD?a9?ׁ@?Z(??w4ר?H^}? bzc?H|?Þ ڸ?鵯p?´ϲ|AH??_]h?t@?õ&s!?op?-?Y{K-1?ڠ?ҳC2? `?kI?1+?}`H8?_8?o^ ?8vw`?qͣ?ӐMX?߼ a?t.?H?\P??O?"?Cc?[RH ? ms? o*?KM.v@?}s{J? Z!?3=>?@#I5?s2X9o?edU?P{TW?$.? +E?پ~[?xűј?ypu?;?Ĥ_ ?bѸ0?6H?Z0"?CDz?%"?ks?P?aAV?ڄ??Գs?8c-?Y$P?͋r?$Q??$9F?Მ*K&?p׮:XD?ke?%<?M +3u?f?臅?Ō;?2ez&?3,?NV?i?<;ŀ?zT?¥^U?+: ?LZn>>?$"?Ez<`?5 +s?)ӿ?$[?dN?$e?3~}?z?xfo?ѻ{?ZފS?Iѕ`?c;*?LC\?\4?"* ?p~?Fpn?͒??בf,-*?^h?,O?w>qR?A9y?v?_3?:?*Tqv?9DkHX?(J?qu?#C5V?b%vF?j?уIl?>Vhl? w?Fz?  R?RT?-eVv?K-e~ ?cog?`;1aH?Vw?FR`?!&?tQ?޽?N^?gd?kgDR?p4`?T jC?ncTG?}?rmc0?̌u;+8?@}?Z?=EhP?آT.[6?;5?0?Й? ̹?+4{?j?ח?t?´Pz?|[ݧ?#l,!?_`?jQ\?>"?x?eAB?ĮS??f o?ܜv4?=?p/??P?ph?or?R?˦9'd?2| hS?_'Z؀?½ ?s ?©:?b\ ?D2xK;?D?ܛC| ?g/:?{C&?О{?O\N2?>p?l"?ؔ-y?)-0?`?m?h-?ޖ-O!?+y?x+>4?ӋT4d?ةܾH?R L?F{j?^2?̕X?)p?Y?J?dφVk?t5d?P`?7(? z_ ?2m4\%?Jvr?1ZD?O?߭"?S7yG? ńB&?F8d&?Z?! B?þ +p?39???镪D?xr? +=)_t?є9T??h0R??\e\??0N?oT?|W~j?Yvg=?Ag39#?HU/?V.?R?Am`?-8 x?]?wL9? :?eh? U?ܵ?ۨl)?,?驕e9?d?aլty ?|ԑ?jԗ?'Ҭ?c,J?muC?(:^H ??4|?,kAF?>?O/}?ʔ׶?1iP?S?x(y?ז o@x?`1?<?| ?ߢNF?(0q֎?#-?u\l?&?l!?~? HQ?N0?@P`?詭8D +?[fW? sE+?zgY??Z۳B?ߤ魕M?աkW?^_ ?ni|?@ޱ?QL ?bߜ?#J?嶱 +?%P?"w?s1 :,?]H?kLy?lA?@?\!s?~~;@??;!b$?Bj԰?RN?ͻ`?LІ!? v,?%(?a? W?)ȉz?ݝ*6?`id?E=s?KJ-?ғa۪?`Ol8T?4LJ?Ts?Kuُ?w:?ǟx?޻3K?z?e?j|Z?K6?tD}?~d ?Eti0?V4Gg?"S?{x@?EO?; dJ?/s_?3bx?3׏b?u+AJ?tb8?O a2u?Ѽ$?gEy??b[JR?vRc[?׉?қ_?JQ{^?N )T?%.$?-l58?}ZFlJ?ѳ$?[?Ѡ?Z?HFp?ҾՉ7?Ӷ"?1l??&nI??lE?#l'?ܚK?p?QQ,?%S?즐 %?ޥmˈP?؜T=*?̐rx?FĶ?Χ=a?:>?۞?L?wHt r?aJ?]\?=EO?j^?+zx?烿/??Oo?K[?nLM?Y:|?;?~Op?Ȧ?2?X{9? +kd??гĎi??h{‘?ҨRdP?m=K p?H,?L?fP?܏s\?ד0'|?T`?&?6??7ވ?ҥh>B>?$Y?Rt?VCIb?"7i7?ߦn7?%Bo?&.?{l?r h?{b?Ҷ1(?J?">?~{?ӓA b?s`?Q!dyf?ۓz?W?ѻȑ?7#S?H$?-?4 +i?.S͠?Ύ?S~uw?)v-z?ЄR?俫;?{1XB?f?rD?nw@}?߫3l ?H^ ?#Rʹs???b`?IJ9?(-7*?L&\@?!64g?;Sz?I?셂B̝?~/E?ᷤe=?β?ͽ? +-?|;@p?`!?>E=?㓥rIt?gz?#?RkQf?\{*?ipF?<Ot?9qy~?E?v~?5D?^?y67b?ǯa?_ӽ?Z`1?X>*?ʦP'Ϩ?0 ?jѕ?i#.?*\~t`?̮t#1?_`!?w'XX?{V?@ft?;8?tw}?ǎ ? +?s?+V?Q6r0?Ua?Wn? l?@-D?)@k?tq¨@?Ͽ-*?96<?+EPa?ᐒ?A{7?+l?H'?ROz֑?כј?I?ěRM?O7hA?x̵?>^?b➆? ?zGa?`'I?y?qzV?̃[l?ifu&??KB7?ʮL!?P&<8?xIrr?$1?"d?(P}B?5N ?癟YYu?3?8(m?)$?ښpߨT?۳!?f?'TRd?׵wf?na???̣?px?1?{j?Oq8M?ߓ ?vxv?dq??]je?xt_?T +@?+N?ړzFҠ?`e?Iy?瘲K?"HP?)?;%<?6;?S ?Q?zx?Д?=?&;=?th i?ϵ­D?Lxp?&?l[Ԣ? ܘ?Q?`Aڭߙ? bSb?wz9?2IG?ۈ_?us?ӽCl\?T?fvX??֚wdZ?ljҞ?'r㜽?:h?>f?Hs?1mt +p?Y(?Σ]@?wA?tX?xR-?W=?I?)TM?`}+?H#2?Vl?! +?C?΃YT?{GP?9ui+:?۹yH?ei?%T?G?S@?ж͍1?T(?ɝO?FZ?iJ?ߤV?RI?؛?)硛G?er3?>lq1x?eF?Ȥ? ?{w ?L9|?ViH?I!?$?AO?zC_?_h,8?->?h4?m?7.?׬/w?c~jp?[ɀ?Ӓ4Ǻ?mE8ɘ?Lx»|?肻#?qB?㛎p?̝_0?z)x ?zV=3?%օ?|Z ?J +d??Sө_h?觵T?vV=?R?$& ??%i?ZK?:ud%?5BO?p?#\΅?E=A?។x?@?⊝?A)?1P?p?>M?и?Z3uN?8[t?Ыem,?sTG?ޡ |f?ꦡ1?!?hsI?Fu2?N{?=* ?[?@#? {?2?LX?ֆ?0C=?lt?Sq5?Ų?Ib?奦4H?Ēܸ?cJ?S(?ݦ?Ѧ\7?Iy?&N?|a_P|?=(?g??$S?Pݚ?T?2#-? ?J?K??_?z +JNS?oS,Y?sr?=܎u?i?݉{&x?B%J?@ut?䔩X?*,md?܉d?e8?cfn?ElBP?YsZ?j?"ny?ӛ?Кޙ?N&?|5q?VcC?8Ŧ^?Ր5՘F?՞`X?˲ 4?I ?Ϙ*?V?"ih?I?D?s!?0?&-Jlp?u? NK&?9 ?ჄjM?`a2?Uۡ?<8 ?x?q8}r?{'X?*PԳ?U,g?`φ`h?40?E?2Ih|?m!P?[0u"?P[?r: 1?.Ҏ@?oq@?'a?{#Ȋ?T6?N-π?Ph)x?1>(?$9&?^8P8?O=/?} ?gOI]?0 Mp? R]?w?yU?P?9X׺?j2?(q?ezO?oh?%N?(k؊cH?<?Ϣxۣ??΋yݑz?۝`s$?0 ?Vv?4C?ڹ~8?q +1\X?䚧q?=h?ajl?1p?vd?/??{6o*?(.#?Bŭ&?D`t?_Q_"?Z/"?魖Q&M?~f?5,?)?"8h?R{?ˠwl2?f ?Y1qL?H{8?&Ӊ??&?aA?$ ?o ?Р&?FK a?1?ۣ?؉!辒?r)qc?9b[l?!9}6?ˊf0?J$qD?ӭTT?ǻ?ޖխ2?xQ?x&{b? +\p?>u0?hxn?YF9?r?(Kff?|cd?26?%?ڇD?d|? ygT?&`S?⺄fҶ?͒?&HӇ+?pd?}0?&e%? ' ?'{j?3znx?JCLN?: +? Q?mT??9x?H5`?惏= ?VȈ?_?V8?3IT?}h *a?ԦĻTP?Ӭ*?ʁ8?š7ݥT?ilt?-?b8A?6 0?Ζox?%L?z7:P?t$Q?c?۬?b?0|q@?fo?HT6?nl4?Agt u?WD?GΏ1?0?8?Fu/?9fOc?蝜)?u(V?"*h_?Ʈ9_?OẆ?T[s?†?爁??7:?*?zU# J.?@$.?`&o?s<&?׼Ǭ8?R_s?.O?^qC? fN??e&vd?Y?8Gzd?.Z?ݍ=zd? IO?﷧ψ??j?EQ8?6ݠ3\?y?B˩L?Ofc?dH?fA4?\'?k|?Ҩ``?#=?48Mv?ƹoJ\?А +Xp?ߜ#H?A> UpP?o] +?Y?x*?זx@?ּ704?jT? ?B?J?4?q|aP?{?CL}Z?T<?M\g?Eߡz8?ٗ?ܢe?p?4ex?q?ʾ? :?"H?м?ă#66?,o(?zv ?E? 33?YD ?hъ?6h+?7?6$?옯?cE+`?`??. j?bhGq?JF?'/6?D4J??Zԕ?lHa?X +,?~u}?^R'?*"|??B ؈?\/a? ?h۰?ٲc>?4B ?loCn?Hih?< g? ?/>?\_?7i?pOP?;?bal?1?I?d{?{S C?E?21?|Hh??wR#Y?B8~?"B? 1S?QS?3oC?؂+~b?:0??yT#J?Ӥ L,^??-5?shΙ0?C +]?<70?D?ոvؒ?/k?.ye ?@vn?=$h?’6d?D\?Δ +?;'?L,?^ީ?T+??Yj?hs?%R9_?႑x?^?̸?ވ>?Ty?.;??a4?<g?ϲW$?JU??jca?mb?BȝK?k}#?$L1$?.8@?[A?@:t&?-++?ب?Z g?噶F?敹L~x?Q?w|]@??*[?䫈A?TBVq?~?LMc?1\[?5?ɶb?<DѨ? 0?*2,?eљHz?bM8?܃xI?ƞ}x?\ꬄ?< + +?ԽLL?(x^?nNx?"Mx?wD?Gb?\{~@?hw?H?Ъ#r?ʎld??@O?yCp?jC_PD(?l?6޳?_#?ۢT?Y1*?֣&c^?ķ%?z`vEE<?둪sR?u٘?>5X?谙 ?ṋ?Ц_2??އY?6 ?~D? eF?>`?c92b?ܛdr?Aj? ?^o +?d,|?*dxU?V-p$?Z?d>,+?] ? {x?۷Ɲ>l?Z;i?zS +5?"e?T?+xǙ?;@?b=x?VX?ڵ?csL#?yp?۱`J?@?$$|[?>R?}?֋,Ϋn?w?a;9FD?!R?f\?WzZ?  ?O}v ??xʭ?g~Ok? +\?S: ?Ηp$?}gz?19=V?β?.a:j?7*?b"C3? 2?]?rv?*Q?Ҡq-L?ߡL~I?i, ?ܶ";?hA>?F?[+4s?6?mHԸ?_30?? `?4ّ&?6?h?9Qh?~?TG&0?tKv?Ze-?0?n.?o1H?^~((u?&^3?Ӵ]ю?4m[?k?춲ݑC?d1?L$H^?Ǎ/?$Д?+?Sh8?f_a?Yo?G?~=f?N2~? +?y@Q?חU? ;?T?w?ՃUb?M?ﶰ}?Mch?.Ce(?J+7Ÿ`?*x?怆 .? m?Lhm?尶Dt?%2?q,?<?9A?=?=8t5??1 +r?c;,?hn?ܺ;? &$?}\7?ٔk?{pR?] ?Néd?]x?c?hidL?T&#[?u >Z?:?–j?֘|ݸ?E?_p?E(?u-6?a?=d?Qf?ܝA">?$?Llp?uaڐ?hL?͎|,ׄ?y?/?)w,(?ͯi|?_:?vf?IE ?O&t?4?8"?0D0?YLR?@??u/L?{@O?ݕK?V?(uHV?pQRQ?mon\?A_?5%?He?ƨA+,?CM;?ߧ?פ5R5?[p^^?Dmj?M?3W ?zc?bM!+??)n?ǩ8b?a.Cu?h`*?9c?Xa:?xiD?5?xlP&??4?ߟBh? ?FuȮ?IzW? +&?[eHR?K?q7-?b:ͨ?}kf<???ǑL?;q?K4?Dq:?M2?년??ڸ?;Xx@?=֠?FڎE?ݹRHt?{PL$?tjtwb?,a`?_2'?`րJR?7?|S?5ζ?m&ӽT?BOl?j-7Ψ?tab?e-0?NU?[f?)??Kn?jU?XR?U~|`?:r?ᇏ?8?ª&?X&A?K& BB?o?Sn|?EZx?1,?i&F0?Yv?~*Lk?cF=_?mxR?HV?ȶ '?g+M?˟r?^*F?طkw?+6?LU'?2d?/=cv?F?Nm[?,}?n#v?c?Έny5?ΜyP?9K?lK| +P?V?@?N*gY?ӢN?K?Zd< ?ܣY1t??8d z?{^V?f2?|*A?L%WD?#: O? S?먷ط?؋Pe.?͗ ?O'??ߊYQs?.J?QK#?b? ZX?OZIm?ּp!]?~/ ?[P4?xg?ֺqD?fƍ?k7?o?@?+Yz\?ކ6J?;< +?cbt?Zj ?; ?S]? _df?6X?>f*?ڒ賨?&P^?F[ZG?{-z?gLj?'wf ?M?r?Ũ?0?~:~*?8.?( G?ʠ?Y6e?|P?BX?QOQv?>=\?[+5?d9 )?K?"u`?6?7hT?}a;4? ?ì?cRD?+?,0?-?DU#G?%V3?Դ ܙ? X?09(?_?zMOr??7"?;>[?^y?ɥ??ݣSr?'? Ci?LV?"׸?'w?AA.0?1L?`˱?!?)Wv?zN?ۋG?ᦓPs?u冬?T+\?~0{?ԇ?T8>?^#oG?+ <9?-ڷ.9?ͺC;?F%ٺ?֥(?N$?K5K?!0?5j`?uJ`l?UR?ͤqF6?Y~?[2[?ɜ`?A~d? +?յ"7?V)#?NC?B.s{?^V?⥑~ w?dW?S]Md?0,A?ōPc? @?ϰj?ҘAi,?ꆷ,`?׺"?`>J?fƬ?L?VA?D?k\Q?lP9&?∄*u@?d`Y?e:?R'L?yS?Hm ?cl +?fW"?aMN?84?{Μ.?Aq?F{x?uv?3"JU ?|,M?BtEy?ԏl:#??쥞P?k@T?zJIz? ˴ʸ?t.$?w,Ux?6o?E]-k?ŭ,[[?sw(?/'T?$mD?x?ͤ&%?)j ?="U#?S.+?I$$T?c}R?ub?i)t?׼?OO?"X??ea?Y@?ӪMn?ٖ*~?iā?G|w!D?ŐP?䁡#6?ߚ,tO>?7ʟ"?AHQ(?3Tݐ?.7?ʹTM?2|р?a& ?c8.?0] >?ɍ=nH?0sv?'_ +I?ߏ6w>?UY?Jb7?I?W?oZ?!J?䓲f9??ꛓ¬?a?XZ?@`?3:?JmR?o&.?7dS6?K?r>?SVJ?NQ?H:?:k?o ?ٜa1(?G_%/?Ȩ@&j?(Bo?^7?d"b-?v :X?ğD8?|_(?vy>?5Js{r?KY?Px?D)?"'s#L?I2}?B?"J%(?0H ?3?HV8? ۴?Ϣ $?I?]pE?𗮷%? +&@?n ?T~?[ +p'?Oe?DRT? B?J#.`??>}`?іU,?A<`#?`6& ?[tT?P?]$?q3J?Q?vV?\yX8?P}$\?PO/?4 0j?pGh?h$:? me?ӫ$~H?x?fX#P? '?F?烓 ?Ԛ8z?$E*?8ޠ?F2q?2?P?zj?ɔ*?LLi~?hDql?8R1?Uz? +HR?Jt-o??X?L }``?He?F?p{,?K?,L AA?bÆm"?X0b@?1&?ʺq=?-!?#'?Lh?ю?9,? ʘ!?Q[??/iJb?GkJ^?ǩ?ö?p C?Κ4?-i~XX?\a?Ӣ0G\?u? +__K?M!?hh j|?B /դ4? }?l3"?3?u+G"^?+c!UH?TRAF?ҍ6$?+5?-9?4L^?Lb?Co?zfͱ?ul?Dd]?ø頪?ڽ?z?9 +??y4?ŢR? `?"aSJw?醥(?FP*?03P@?Щ/]b?ۈM B?$8??a[?zJl!?LF?Ҡ?CrL?Ҍ4?6?FG?x(v1:P?V?h(-?p|?KG-?ԏ^?'#[?Zݮ?ǂ>?AWup?v?ŕG?϶ ?c\IR`?PCWv?`#d? +1?\?r +t?M-8U??ŀ?!L1?jY06?ㅈ?w?N +?xz?ey|?썠?F n4?Yt?geg@?EC?N?Ⱦ ?t1`?rw8?6i ?[W?U;Ql?oJA},??g?+?ԫVPT|?NTS?G^uJ?ាe ?ҰvN?Р$9?M\?Z>d?׵F1?Ï?F?)AP?JWCn?ظ,b?9&nY?_o`0?ѻN8??WQ[?ڀM?yWMV\?׺s:?Q"?J?7 ?e] ?-?]P݊?TІ(?wc ?̒ x? sg?pHiD?Z٥? )H?Fso?(?8&zi?ϰ.C?w@?׹?2:?]6=Ph?qOfQ?߽\?6?]?c 1?XW +?m1NS?D? M)?B `?;T[?P0(??&l9,Ψ? +P?U +I?µb?>?dV?[?Ty7?,"?CQ?^I5?(Q ?F'䪘?6ȰI?-[S?VO?;&?= ?X=&?Ưuu(?:7h_? ?ƀ +Ֆ?mOE?#_k?J@)?,0? c?Z3Ҿ?)&?hW?(8^ ?]P?ş?#zFf?M(K?õ4?ᯒ`?!0X?V*cT?c}?4'k&?ݽy?ɂj,^?2^?MU{P \?4H?Η@$?.⼽\x??O7)?d?|Z,L?ʠqr?E͠K\?"?dZd?5LfW\?քh;T?D;~?D?%q? ?C? +dt?W©U?߳L?sƞ?U bG? +]?ҿ?!D?ʋz>HL?cޒX?̊;[?F)?o;? J>?!wN?mH<(?EE9(??ER?-g1?m%?2&?o'i?Or?4C:?? F3?%F?O$X?_.?Kge?,xh[?ڮhd̻X?γf?`?„$ex?H +?E/c?^?= ? 69?hʱxX?1C@?i#?s/L?l$>?wom?o? #?NQ?2[?˖.Lt?1!?|Q?ܳUsfJ?.'i?өY?/Vv?F?4+J?%T0;l?е20?d??!2̐?0`? Ȃ|?)OX?%^70?J?b?WH`?ε?m?tuG?`Dfz?Mv)2?Fb:C"?䌊?q#(f?Qe-;?Dm?d?@b?{(?,_,`?R?{?Ni?j/?M˙;?7TK?Na~(-?΂?b_u?9quA0?0?Ow?3?!K?_?^-?+ʱ q?XF#O8?\?reu?\rfi?5? [.qp?xgL6?A=???ϴKi4?0a,?랆\?𰕦-?G9?F;?דıN?Z?jMB>?'q.\? +O?ȭz?ݧ G8?ݧN7?_1~X??cc?i?E#?b9K? +? +^ ??Ꞗ,N)?ߚz?mB?(O?Nh?*?塺v#w?u7v??;H?H D?\F9?* Cs??6"=?r ??>QU?_X?Ӂu}@?f1p?nϫ+0?ڸҿJ?t.?}Jh?; e ?$%oPl?޲? +(0?݀?Ⱒ` )?rfN??mB$?ږB{?:?Z'x?BM??8c˱?,x??S]?]qb?[D2?: I?۞Ѩ|??p??Hz2?О耾?=19?ާ?yERg??IF.?Ӏh?֗,N?J?'?'A?5d?-?b$ ? ? i?l0XV?l?glw+?SX?`έE?ǧ.@]?P礭0?@Ϋ{?z^?@?GvW?!ѥ2?. ???#?J>?p-?\WTw? Cf?ͥ0B1?@u ?8n? +dt?*/D+4?8κO?rӧZ?p?WB`?P?(ZA|?Y"P?{Q\?_? ?1?׳l?ʹ.ȸ?ۂ? ?]y?ԛ0?̖9|?횜?l?W>X?ʰl!eh?g5i?Dˀ?o!g??t +O?f: I?h?ڰ<Q?k ?IYT?\?°| ?-$Yv?Yȍ?Ѣr)p?|]T?&]D?TI?r]?? +z(?Gz? Rx?Ql'?Kp?y0t?ƩլH?;1}NC? +;\fU&?꺬#?n&?%,?J6?w̕q\?݈x?" Z?եEH??%?5[?]D?޵-\b?_;.v?ڕ,?ܹ,? +R ?<\ P?՟F?K^-I? ZF(?Q F?+(?^Gm`?I=.?0ב?P?&`γ?+%.]?̄j!B?!:?ײ0?>??<#?(HB?w[X?v?Ǒb0?yz(8?۲OgH?yC?;?(?6حgN?[?K??o:?%ɐ?U?*?p2X?<?F?X??޵H?i[X?qdጕ?gKDp?aL7 s?Mi?q?YIOWp?/U?',l?j_^?4}Z?xCTD?Z8?غQU?եsMV?E`Ap?*(?L&0?]LA++?X|T?{8G?_~-;?3P&?}E)?ܭh?=D$?ٛj?Lj?"R"o?Oz +0?(Sg1P?#j +0?Pt,?(?$ D$?ԭM? Pn?HEC?Ȭc?^?%8)?3oS?LZ?ք肊?~a +?gѳw?Gf?i?f^J?E (?ͫbP?y?'j?Ec?4E?' c?l|7?\?I?̌Z?UT??z+d?n2?)-T?y?ro?AG8?N(n?\Y?tI%?Od?Dy}P?b ?!VW ?32?ҳl?ͭH+?ߖ~L?Ģ5Ҥ?.iV@D?ڤ\D#? +e?u?*_&u?O- ?GY#(?)>7?lde?ڷcF ?pM~T^?\:GN?XW+B?u.W?9H&?hI?'? +/ry? ٸW8??t$?҄<[F\?鏃y:?De?SXg?o?s<\`?=Y]?Ҩ.qG?C fھ??ЏmY?QۑO?ԃiJ?.nE?P9zP?4! ?&ݸ?k?,?){v?ﰸ%c?#9Ft?_ +g?jvs +0?(?z?& L?z^q?ݺ?yOR?ԁ?MA?3|?,e?W`?a$?>S\?ÅLR?Y ?H&3?t^? ?N䬭M?,Y?FP?{z$&?6yP>?Q1$W[? +nI?&b+{?eu?a|? c?ߣ+?ұ(?ӈ]y?QƴWK?Ӡ4 ?5#?kb? +?e}?r?ϛ8?b+?Wr?hԟ?*t?L54?BXb\?IQ ?h#q/?9e?уKJH?˶?JbޘG?pf??2?c8??m?=ch?Ppg??vyX?8L ?AzF('? +jM?N`?ّ}f?=xW?H1?Bp?nl?WPxC\?$Ͻ??̕c?\>X?t}+?Akaf?0??\_]o?S:ջc?4?jhH?A ?AMI?z~J?ùO3m$?Qw,?Lg?8-?C*uO?<*?s̎?Ȟ+L?䧥h~?݅"Ϊ4?r`?w?q||?q_ ?WdY;:?M$l?e)?4?H?[9E%?ɝο?TdL?#E?ix?kҹ? #`?UfT?!qS?\e?BH)?ޕIg1J?4?E=qH?5n?j?O?p $88?$I?E71?>N?5t.?%Mn??z)*?ٲƮW?Ӄwv?7_(?v:3?rE9?l ??'޼-?rP|?ޕ`A?n#?ӣ=?妳n(?>~80?*BX?t>5=?' ?r]?e^?Թ>P?NX[y)?1 H?kN,?5[H?vQƾ?mfe?0?д?h!OaJ?|03?ⲞLf?8?H_?,zE?S"?2?_ٵ?)[`?=?&rN?Ւ]j?? \?_׉b?$[??E ?j_G?-?0 ?86.?h)c?s_??ez?óN?b?k(H?لkTn?V@?poW?H- ?>U3DM?E +@?BǸ>O?W5RPV?A?ۚo?my???ޱS~.?ܞI;?:_R? +͘?G]NL?pj ?~S?[ג݄?;?XqG?\̊?!٨?~!?|N7b?;U?,nN:? ;+?JL>9?T)@?BYۄ?K9T\T?䍟s?ҍA4?K6Yv?yvjX?1T +6?"*#?_䘖?Lo?η`x?ǛFq?U&?&*,^?|NR?G0?ߚ:P?/1av? @?M ]?& ?8xl1?'!,?X u8q^??<?f_X:T?B@?.1s?ƬKl?-?01r?ezZ?JA/T?gOQb[?'C&>?+ۘ?ޣhG?z?yE?9PH:?Ȭq0? +˰$?ά;3X?Ɗފ`?b``?ՌAG3?e'Y?3tͳ?,X?ȅ?s?ќ?n0?ew?ݏHw/?ȹl?S4g?K\~V?#V?C.?ַū?ԛI+.?2Mo?UJd?)#-Ka?I?\Wf\?Te?-4R? ۖ*?T*QI?1v ?K|4?AP?J'~h?7XDB?BLӶ??j?M8˖?M?ƢЖ?N9N.?KZ +?l~y?mHި?) ? h?ւ8? (r?*?j{0?̎$PP? +~(mS?JU?o?FP?u2?$?u?3W?٤^ޞ?ԍUA?ݝE"L?(E}?x(?gmԅ?֐2 x?էY ?`?^3ڜ?ݤxn6J? +?!. ?lo=7?B?9-P?㲋zx?͚3u?zwz?;LY?ۂ3O?TU?׏A?3F%h?)?aq?)N^?M?7d{W?V?`WVl?]6[?ue=T!?h(?MR{qߞ?ϽhR,?b?j $?|_e?rߎj?}?k+_ ?0F?ۉZQi?P?韨wn?WjGg?ܱh?aC?䚵?ijv(?&Jz?Et?=M?ʬi7 ?<0?I ?xFZ?øz?f /?hǞ?Gev?6ahfr?ǎZ;?rO?k +2/w?Q:?e?oCm(?[^P8?!lp?ƛHt?ޅ7?w ?vtAO?~ړF?UA5ا?i?俖N +?c>?H M@?w"9?`(*~?QA4?`IN?⻑8e?Ƞ?]?c!%?4q0?Aq?ɼ#`?8M8K.?\jv?hhT?3b?. +?Ɖl?fjX? c?c eB?t6?#v\!?q?E*x?@Yl?s#D:?=,.?{m2A?m5?b?d9.?#5ҡ?zW5h?ڨ~j?$?S"MH?6؏~?M?!sW?Ԗ? +qx%?;V2Ѽ?m9w?N?@?dO ?3Qh?Ѕy\$?j7è?̙ ?cx]E?g?H@??扃J$?ǔU?Vs͵?aOZ?0\ ?"'/SL?݁E6rn?ڧC?4?>uN?giJ?'ti?ge?u?\?Jl?24?ނ_/F?e.?mi? +"??>^?;qfs?5~ om?H>,^?h0?pzn,?Dh?$5??.?ϐY7?/"?Gp`?3?ʰ%?UV??K?A._?]dp?دtԅ:?3 N? V?i?Wj]?j& ]?I?L=6? \NJ2@?8@R?㯜G +?#BrX?7i? )5?sw"??-Q!?:QdKL?s?p?.]?4Sa?|?п]7?@@?NN? c?s5?Ve?97?븋*1?#h{}L?5KX?_?\Zo?V?1[g?ɲ?mpk? ?)l1?_ӌ?rKT?|̄?Og-VxD?&?AUd?DL?*`?H?ڍٟL?j%p?sS?̩ǁ>J ?qD?hliͲ?8?'E&?'7n6Q?BvY,h?S ?J,?gV?,:TƠ?@|UF~?:?W1?:1j^l?_]>ʠ?GE?A|?ѵ9?;,w`??_Pz?hU +C?Q<?m%?Z@P?Ƙ;s?f&&?`ZrI?lu?Ȧ0?[g+0?$`Z?5?߬B@?K+?a7r~?IiXs?ڋUة?^W?_LA?k(?9L^?y.&0?;Lk?g7P?DZ aN?ǃ ?n1ܴB?w*?h?te?͛x?|tx?钇TgFT?}ą~?dp?C??@~?0? s\z?a*U>?.й?Yx(fp?o?syQ?R?f?Ήx|?چV?Q%?8J?<`T?m̠)??+ol?J\?4z?̢D?- ?}v +?iM?wYK?j@@?i?Jk?(Y?g?’p?"0?M?FR"?̟7Z?h}?VL=`?1?~s?]PI?oꕠ?۹g(8?ĉX?Q?;b?ӥeD8?&#S?︼5?掇ؒ?~m?Ȫ?2'ȵ??nn?¡kf?*y??.?$"?fmn?+c6/?ϒV_Y|?ᖉ_|?`]&? r׼O?(^?0>^?~#^?(@R?G[?Ԝm?#9y?Qa;? $?zH\?.3?d&+`?wGV?b@Z?s(v???栤?װ?h۝?ڌԁP?pNr(?8S'?m,?0Di? Y~?cj?&;Vh?$V?zg1?f+l?oN? kp?WI +s?~Umv?vY?["(?Vr{?1j?M? 7/!?g<#?א?yπ?z&z8?ni?-#0?yNU?<q`?@:?s!?'1?jA?CS?}>?;dp?{ ~n?ᒽ´?+J?໴`L?˙7`?,z|\?d 1Ɣ?eq?&'h?<7?O:$?!G-L?Ўqy[?M?b+=}~D? %5?덠V`%?킻jt?ڍ,d?齨WZ?a,,?֏*?Ip?8@O?vpP?8"G?T &?:ޠ?ʪY=?(g??ֈ.?|?ٟ{FS?иa`?(b`?aÿL?I)\?;o4?ƥt?0?൏ =?;T+`?xL\?I1?x3ִ?Dxx?'&J?yB?h&F?8TW}?.R ?܊-Tդ?䔲J?ס6?R?Nr?/by?ԐA?X 4%?$e?k% ?.MK?tC?ÉC^6?)k?zb7?]>.?n %z?dor#<`?㓙/~ce?G?ie#?傩Ϝ??ɕ}h!4?.!X(?^?|u\?Զ`?e6x?'1~P?P ?ƃ,t?׃wrh?f{\%.?tb@r?: +ӥ?!=?(IvB?޹?rr+D?l?'jl?"?:M?4@ +?ԇ)%Fͪ?Y0dw?=(?-%a?Y:5H?ZE?ϩ[?Ƌ?٢ܕ?Bs'~?܃v?RAI?Un?s[?Bj?yR~t=?Ns?WvN ?C6#,? ۙ?ϨP?JB?p2 ?g)]%?~0?ΑCG?Q?m4?5$h>?3T?攕#laC?`?0xe?Da[?..?@c?t`?ݧ?ȥ=T?1/)3?Yӂ?^b?h??/S?_"?ȅ#?푒Io?d?tߥ?5/Cý? Kð?럏0q?Y?ƣK[?БUG?QLFӦ?0?{F?Y{`?Ĕ@V?qO?a)`?}O?F?oVF?e1?Jc"/1?m~s?==K?q?$>l?!ʔ?tW8??Q?Cp"? +c=?Wb$??(<@*X?Wo?Єp?noV! 0?mP??Ԅ3N?^jU?T1i*,?"?[h:?il^?&?r? 떭?)`'?r?WX?bdX?7;A?o!X?š5?~9 ?ߝa8! ?˨L?2/?L#?H⩱?ȶ ?g㴼?!vͰ?=,?l>$?^\>?k=9)?IC=?:mw?rn-???T(Lv?TX?p,/?ҽ?nΒ?ג?ϕM|#?B?Qv?0 ?5X1=?Ķ(P?A_6F?)RKMr?h ?Ԝ#Sa?ϩh[?vM"\|?~l?DŽPU_x?.^?Z|vŨ?r:?p?.?Xƫ?ּ ?ߥx#zH?,T?r??jh?F ?ቓ:@?h? +ƙ?^q-? ?6 V?ۍھs?0?=X?_[?!M?߂$ @?!N7L?}x?EB7m?++?O +Fhn??X.?_ G?^?(M4?Rf?*bT?|p?>ݥ`?K6,$?3QMo0?o8 T?v M?Kg>e?( U?oA??kױ?vsP?7f?1R?굇?֊?_Ƕƌ?e_}?w*y?:ab?K=b?hMH?ދh?L+ve?e$Z?-?Fĉy?ÇR?YAک0?oX?>r_?XLĮ?Ps?`h? -y?w?f?NSp?ށk,`?wFUkC?baה?},KP?f[Ϡ?+֒"?Tq?ЙFI?*X5?St?N?<?‡?YJr?Bso1?LV?(3Q? ڦ b?C?8?ޯ-h?u~P?b_?膮h\?*̹Ѵ?n?5x6?Bv:?lB?<;\?폺\ ?{(?MHAz? +?>bI?gJ?= ?~Y,|?HmQ?55l?Br? Z?uUs1$?FkP?TȋB?3 ?4iA?V"{?Lp͝?䖬A?Rs?3K^?ܖ:9?G?1}7??_q?;M~G2?у蕊V?b?koC??Oij?|3"O ?qPF?]?ճ ?_ Yz ?Eq:!Z]?6?C@?D"׻?p_7?$X?2N?:_0"?TzR>?`-?q ?쐽u?Y50?ڪ!dn?pT"J?Se?ࢠَR?Ը +%# ?}?#5?:'XP?A?&"u5?^C?/ .&?Y–:"?8<zf?`?oP|?\2 ?Aq?a:W?(O?#u i?A侮?ނ?B#l?V>?p7?8f޵d?Ca@?,$? O?" ?^a?JP?හ$J?Р{ ?W˭8?釶oI??נ~&?([?)YD?rP?+n?$z?w~p,{?[V?5 X?ڏr@3?:@? M?WK?-ǴM?Y _?!?Ni:?YH)H?G}_u ?Aq\a?U{t?pj?,?UP?d3/?O σ?BF?[Cvƌ?J_'?布n`y?[ox?|8i ? /v?~V5?c]?lFV?1v%?ײۛ3?Օ6?!?ݑCb4?Hs?]?2?/?,W?̤F? ({Y?U/ ?D4~hb?p.* ?Jp#?ެ]ǚO$?٦4*?NNyv?igm1?[B2GK\?4?E&?Kx?Wd?Z?↶?Ǿs?X﹫?s?s*/?~?=Lg?5??ӫ"`?B;:B?".s?8#T?aJ?VeX?><,qU?4?7#r??Q?HM?$H!?{bĂ?A7E?QX"?Mp?kC"uB??Qx?Z}4?LY?<6+ %?!3?$}AJ?ư,?F?kJh?͏S?sܾ?r9l?\o*?pD>R~?uQ&?r%Le??7R?4??a,~?[/-?nꙻ?!f?9ƔM?YC1s?V ?G. +?gq?<'~?uwK?U,?S)˕?,hJ?nG6?]{?|B?Z?l,?Nr&?ܩ"?騷1~?N?I? +B?ؿ%?EIp?4f?E6?ff`?IGR?Iq[?ˡCR?;?&%?f(m?ӉQܜ?=Np?"?ݪZ\T?4Bv?cQ)r?տ-!?띵x?k9?Ln?v{?#%i?mHM?8@? ?ث?q\?ZNy`?2C0?k?l /c[`?ן$??5Hv?@Ck?^D?NP?}uL?ٰ9qN?̒??g)\?fl],?>B\[?x-H?eU?/ԏ{.?(&\?ݕɸ?"6 ?4>m?z?߬o cX?#ة?kul?bMʱ?ҝ0M?{Wjnt?A ?Ҟ%d?׉0?YOɪ +?r?Ni?M; >Z?cݺ?oH?"?֫j0? J?:L?B?+?߻g@L?;?E+@?S#o?*nT?3?_ )?frNa??Ӣ?QF3?I"?ѵ*?$yd?ېO2?ϫ}h"?7'?|R{0ǀ?\{"?׭E6?儾* +?lA?w?e0WF?qD?)?a?ר[t?ux-?5e{ ?ٱ^n?7'd?U`#?*,n??ϿUJ?BP?ޝëh? C?g[^?.A?+G$?иWŵt?ďA=?ˮ'`0?ư?]U_?Ż:?QJQ=R?ȟF8?3?{?4,?Ď=?Q۲?(˓c?Zr?K[?>?}c0_?QT{?ռ?2?዗r\?`t5?bAd?P?#6T&?-i?sD?)#U&T?^&a?R{(v?r=0b?Ͷг?Un/~?ޯ8!u?u'X?xW?۬T-~?Զ?ERJ?6e?=m,?Kb? ,?[F?L?;?hN?YfD?`Xs]?߶~?Cf?ޟt8>?k'\@?7Ͱ+?odO?=+Kro?Ot?q1Q?;?eD`?gϜ7?Xz$?Q%͐?깗)?8W(?tE;h?r?ޤj}A?[^R?ôå??,{n?ٯ.?9h?E?;`?`/&?R* +U?EkQ|?$S?F]?*s)8?uMʾ?BTSQ?w{u?ۥ}?Lz=?Uk(_# ?F?@.D? ?,.R?$58? sD?n?S?ܞK~?k?U)?~r/?;k?u?Z?r`!ٓ?U@4)?n?7qV?D*cx?>`?*T#?K?;v,*m?U|`?iF?-Zz?>;2?Ɔ?CX?F?T$?覅E?-)`濛??Ԛ:}Z?N]?)P?&]DM?,e%?ֶQ_&?JӤ?ߏ&?nj(?XɎ?ue!??t?k@??Co?麒IX?d? +2?SMZp?Ey?iș?JDq_?ԍ?3+&U?=^?>P?ѩ?,_?شD9?!?Q5J?|4wO?ժU-h?d?2R?V{?u| Y ?6e:W?+"TD?՝R?hc?՟S?iۘ?kV|@|?ڙ?JZ?Ť谈ܬ?!Qg?@㵢?w2'?D??'+?/~?=>?nh?7,WsF?Ͱ??i*o?Kw?ޑVN9?χ??cl?KM?H%A? ?m?mQD4˖?`r/?l Q?ơ@1ڪ5r?٥!E?݌ ?ց0rnjp?.!?}4?Eu/8?Fi?پE?p|?Ѧz?nۙ2?Ȍ-|x? nH!P?#1?w?1f?`Hs@?I ?u(>?ot"n? ?yU?Z?U0?~?M`?g+LDR?# ?煸_?AU +??7+L?^?_?3q?K?ܺ!q}?[7I^\t?(?01&)?҂ڢ?