| https:///weradocs/WeraDesk_25/XHeader.shtml |
The extended header data structure contains information on the current measurement status and control and is attached in front of the measurement header, which is copied to all data sets.
/* ctrl_data.h - */
/*
The structure ctrl_data contains all information
that can be generated or influenced by the program
WeraDesk in ASCII representation.
*/
// These are the commands implemented in the WERA command processor
#define WRITE_HEADER "write_head\n"
#define RECEIVED_HEADER "got_header\n"
#define SET_FILENAME "set_filnam\n"
#define RECEIVED_FILENAME "got_filnam\n"
#define GET_GPSTIME "get_gpstim\n"
#define SHUTDOWN_VME "shutdwnvme\n"
#define START_ACQ "start_acqu\n"
#define FINISH_ACQ "stopp_acqu\n"
#define UNSUPP_CMD "unsupp_cmd\n"
#define PC104_EXIT "pc104_exit\n"
#define WERA_STATUS "werastatus\n"
#define ASK_4_BUSY "areu_ready\n"
#define SOFTWAREINFO "_software_\n"
#define SEND_AUXPORTSTART "sndaxstart\n"
#define SEND_AUXPORTSTOP "sndaxstop_\n"
// These are the commands implemented in WeraDesk
#define SET_SWEEP_FRQ "set_sw_frq"
#define SET_CYCLE_TIME "set_cyctim"
#define SET_MAST_SLAVE "set_mstslv"
#define DATAFILE_EXT ".dat"
#define SWEEP_FRQ "8.5MHZ"
#define START_TIME "13:05"
#define CYCLE_TIME "20MIN"
#define MASTER_SLAVE "MASTER"
//define sub-structures
struct wera_com
{
char command[11],on_off[1];
};
struct wera_store
{
char device[4],on_off[1]; //device=tape,disk,netw
};
struct wera_proc
{
char process[4],on_off[1]; //process=raw,rad,spec
};
struct wera_acq
{
char acq_typ[4],on_off[1]; //acq_typ=sngl,cont,test
};
//define structure of extended header
struct ctrl_data
{
struct wera_com write_header, //----------- command-data
received_header,
set_filename,
received_filename,
get_gpstime,
shutdown_vme,
start_acq,
finish_acq,
set_sweep_frq,
set_cycle_time,
set_mast_slave,
set_path2data,
set_sngl_acq,
set_cont_acq,
set_calib_acq; //----------- last command-data
char datafile_ext[4]; //-------------------- control-data
char sweep_frq[6];
char start_time[5];
char cycle_time[5];
char master_slave[6];
char path2data[128]; // /data/wera/.../
char url_store[128]; // wera@ifmaxp3.ifm.uni-hamburg.de/data/wera/
char tar_command[128]; // tar -xvf /dev/nrmt0
struct wera_store wstore[3]; //device=tape,disk,netw
struct wera_proc wproc[3]; //process=raw,cal,sort
struct wera_acq wacqtyp[3]; //acq_typ=sngl,cont,test
char samp[4],du1[11]; //------ 512 byte measurement header
char date[9],du2[1];
char atime[9],du3[2];
char loc[12];
char locid[6],du4[10];
char wfrq[7],du5[4];
char y2000[9],du6[13]; //----9 characters e.g. YEAR 2001
char range[6],du7[14];
char truen[3],du8[11];
char rate[8],du9[11];
char nrcels[3],du10[16];
char lon[11],du11[7];
char lat[11],du12[18];
char win[2],du13[5];
char nant[2],du14[4];
char rc[2],du15[9];
char offs[3],du16[10];
char rxoffs[10],du17[25];
char note1[128];
char note2[96]; //----- end of 512 byte measurement header
};
|
This is a FORTRAN program to write the eXtended Header data structure:
C Parameters for extended Header
C
CHARACTER*1 CR
LOGICAL STOP_ACQ !.TRUE. = Stop ACQ set
LOGICAL RAW !.TRUE. = Process RAW set
LOGICAL SORT !.TRUE. = Process SORT set
LOGICAL CAL !.TRUE. = Process CAL set
CHARACTER*1147 CTRL_DATA
INTEGER SAMPLES
INTEGER RAN_RES
INTEGER BAND_WIDTH
REAL FREQ
INTEGER TRUE_NO
REAL CHIRPLN
INTEGER CHIRPMT
INTEGER POWER ! max = 4095
REAL RAN_OFF
INTEGER RX_OFFS
INTEGER NUM_RAN
INTEGER LAT_DEG
INTEGER LAT_MIN
INTEGER LAT_SEC
CHARACTER*1 LAT_NS
INTEGER LON_DEG
INTEGER LON_MIN
INTEGER LON_SEC
CHARACTER*1 LON_EW
CHARACTER*12 LOC_NAME
CHARACTER*3 TIM_COD
CHARACTER*3 CODE
CHARACTER*5 STA_TIM
CHARACTER*2 REP_TIM
CHARACTER*6 STATION
CHARACTER*30 DATADIR
CHARACTER*5 ACQ_SNGL
CHARACTER*5 ACQ_CONT
CHARACTER*5 ACQ_CALI
CHARACTER*6 FM_MODE
INTEGER MAX_RAN
INTEGER ACQ_MIN
INTEGER ACQ_SEC
CHARACTER*80 COMMENT
REAL PHAS(16)
LOGICAL PA_ON !.TRUE. = Switch power amplifier to 'on'
LOGICAL INT_CAL !.TRUE. = Switch to 'internal calibrati
LOGICAL TX !.TRUE. = Program TX DDS
LOGICAL RX !.TRUE. = Program RX DDS
INTEGER I_PA_ON ! 0000 0000 0001
INTEGER I_INT_CAL ! 0000 0000 0010
INTEGER I_TX ! 0000 0001 0000
INTEGER I_RX ! 0000 0010 0000
INTEGER MODE ! Mode bits
INTEGER POWER ! max = 4095
CR = CHAR(13)
C Calculate CHIRPMT (Calibration SweepReduction)
C
CHIRPMT = NINT(DBLE(CHIRPLN)*768.0D0/0.26D0)
MODE = 0
IF(PA_ON) MODE = MODE + I_PA_ON
IF(INT_CAL) MODE = MODE + I_INT_CAL
IF(TX) MODE = MODE + I_TX
IF(RX) MODE = MODE + I_RX
DO I = 1,16
PHAS(I) = 0.0
END DO
DO I=1,LEN(CTRL_DATA)
CTRL_DATA(I:I) = ' '
END DO
CTRL_DATA( 1: 10) = 'write_head'
CTRL_DATA( 11: 11) = CR
CTRL_DATA( 12: 12) = '1'
CTRL_DATA( 13: 22) = 'got_header'
CTRL_DATA( 23: 23) = CR
CTRL_DATA( 24: 24) = '0'
CTRL_DATA( 25: 34) = 'set_filnam'
CTRL_DATA( 35: 35) = CR
CTRL_DATA( 36: 36) = '1'
CTRL_DATA( 37: 46) = 'got_filnam'
CTRL_DATA( 47: 47) = CR
CTRL_DATA( 48: 48) = '0'
CTRL_DATA( 49: 58) = 'get_gpstim'
CTRL_DATA( 59: 59) = CR
CTRL_DATA( 60: 60) = '0'
CTRL_DATA( 61: 70) = 'shutdwnvme'
CTRL_DATA( 71: 71) = CR
CTRL_DATA( 72: 72) = '0'
CTRL_DATA( 73: 82) = 'start_acqu'
CTRL_DATA( 83: 83) = CR
IF(STOP_ACQ) THEN
CTRL_DATA( 84: 84) = '0'
ELSE
CTRL_DATA( 84: 84) = '1'
END IF
CTRL_DATA( 85: 94) = 'stopp_acqu'
CTRL_DATA( 95: 95) = CR
IF(STOP_ACQ) THEN
CTRL_DATA( 96: 96) = '1'
ELSE
CTRL_DATA( 96: 96) = '0'
END IF
CTRL_DATA( 97: 106) = 'set_sw_frq'
CTRL_DATA( 107: 107) = CR
CTRL_DATA( 108: 108) = '1'
CTRL_DATA( 109: 118) = 'set_cyctim'
CTRL_DATA( 119: 119) = CR
CTRL_DATA( 120: 120) = '1'
CTRL_DATA( 121: 130) = 'set_mstslv'
CTRL_DATA( 131: 131) = CR
CTRL_DATA( 132: 132) = '1'
CTRL_DATA( 133: 142) = 'set_pth2dt'
CTRL_DATA( 143: 143) = CR
CTRL_DATA( 144: 144) = '1'
CTRL_DATA( 145: 154) = 'set_sglacq'
CTRL_DATA( 155: 155) = CR
CTRL_DATA( 156: 156) = '1'
CTRL_DATA( 157: 166) = 'set_cntacq'
CTRL_DATA( 167: 167) = CR
CTRL_DATA( 168: 168) = '1'
CTRL_DATA( 169: 178) = 'set_calacq'
CTRL_DATA( 179: 179) = CR
CTRL_DATA( 180: 180) = '1'
CTRL_DATA( 181: 181) = '.'
CTRL_DATA( 182: 184) = CODE(1:3)
WRITE(UNIT=CTRL_DATA( 185: 187), FMT='(I3)') BAND_WIDTH
CTRL_DATA( 188: 190) = 'KHZ'
CTRL_DATA( 191: 195) = STA_TIM(1:5)
CTRL_DATA( 196: 197) = REP_TIM(1:2)
CTRL_DATA( 198: 200) = 'MIN'
CTRL_DATA( 201: 206) = STATION(1:6)
CTRL_DATA( 207: 222) = '/home/wera/data/'
CTRL_DATA( 223: 252) = DATADIR(1:30)
CTRL_DATA( 335: 381) = 'wera@ifmpc143.ifm.uni-hamburg.de/home/wera/data'
CTRL_DATA( 382: 382) = CHAR(0)
CTRL_DATA( 463: 481) = 'tar -cvf /dev/nrmt0'
CTRL_DATA( 482: 482) = CHAR(0)
CTRL_DATA( 591: 595) = 'TAPE0'
CTRL_DATA( 596: 600) = 'DISK0'
CTRL_DATA( 601: 605) = 'NETW0'
IF(RAW) THEN
CTRL_DATA( 606: 610) = 'RAW 1'
ELSE
CTRL_DATA( 606: 610) = 'RAW 0'
END IF
IF(CAL) THEN
CTRL_DATA( 611: 615) = 'CAL 1'
ELSE
CTRL_DATA( 611: 615) = 'CAL 0'
END IF
IF(SORT) THEN
CTRL_DATA( 616: 620) = 'SORT1'
ELSE
CTRL_DATA( 616: 620) = 'SORT0'
END IF
CTRL_DATA( 621: 625) = ACQ_SNGL(1:5)
CTRL_DATA( 626: 630) = ACQ_CONT(1:5)
CTRL_DATA( 631: 635) = ACQ_CALI(1:5)
C Measurement Header starts here
C
WRITE(UNIT=CTRL_DATA( 636: 639), FMT='(I4)') SAMPLES
CTRL_DATA( 640: 666) = ' SAMPLES 05-FEB-02 15:20 '
CTRL_DATA( 667: 669) = TIM_COD(1:3)
CTRL_DATA( 670: 671) = ' '
CTRL_DATA( 672: 683) = loc_name(1:12)
CTRL_DATA( 684: 689) = FM_MODE(1:6)
CTRL_DATA( 690: 699) = ' FREQUENZ'
WRITE(UNIT=CTRL_DATA( 700: 706), FMT='(F7.3)') FREQ
CTRL_DATA( 707: 731) = 'MHZ YEAR 2002 RANGE: '
WRITE(UNIT=CTRL_DATA( 732: 738), FMT='(F7.4)') RAN_RES/1000.0
CTRL_DATA( 739: 752) = ' KM,TRUENORTH:'
WRITE(UNIT=CTRL_DATA( 753: 755), FMT='(I3)') TRUE_NO
CTRL_DATA( 756: 766) = ' GRAD,RATE:'
WRITE(UNIT=CTRL_DATA( 767: 774), FMT='(F8.6)') CHIRPLN
CTRL_DATA( 775: 785) = 'S,NRRANGES:'
WRITE(UNIT=CTRL_DATA( 786: 788), FMT='(I3)') NUM_RAN
CTRL_DATA( 789: 804) = ' LAENGE:'
WRITE(UNIT=CTRL_DATA( 805: 807), FMT='(I3)') LON_DEG
IF(CTRL_DATA( 805: 805).EQ.' ') CTRL_DATA( 805: 805) = '0'
IF(CTRL_DATA( 806: 806).EQ.' ') CTRL_DATA( 806: 806) = '0'
CTRL_DATA( 808: 808) = '-'
WRITE(UNIT=CTRL_DATA( 809: 810), FMT='(I2)') LON_MIN
IF(CTRL_DATA( 809: 809).EQ.' ') CTRL_DATA( 809: 809) = '0'
CTRL_DATA( 811: 811) = '-'
WRITE(UNIT=CTRL_DATA( 812: 813), FMT='(I2)') LON_SEC
IF(CTRL_DATA( 812: 812).EQ.' ') CTRL_DATA( 812: 812) = '0'
CTRL_DATA( 814: 814) = ' '
CTRL_DATA( 815: 815) = LON_EW(1:1)
CTRL_DATA( 816: 823) = 'BREITE: '
WRITE(UNIT=CTRL_DATA( 824: 825), FMT='(I2)') LAT_DEG
IF(CTRL_DATA( 824: 824).EQ.' ') CTRL_DATA( 824: 824) = '0'
CTRL_DATA( 826: 826) = '-'
WRITE(UNIT=CTRL_DATA( 827: 828), FMT='(I2)') LAT_MIN
IF(CTRL_DATA( 827: 827).EQ.' ') CTRL_DATA( 827: 827) = '0'
CTRL_DATA( 829: 829) = '-'
WRITE(UNIT=CTRL_DATA( 830: 831), FMT='(I2)') LAT_SEC
IF(CTRL_DATA( 830: 830).EQ.' ') CTRL_DATA( 830: 830) = '0'
CTRL_DATA( 832: 832) = ' '
CTRL_DATA( 833: 833) = LAT_NS(1:1)
CTRL_DATA( 834: 838) = ' MT: '
WRITE(UNIT=CTRL_DATA( 839: 843), FMT='(I5)') CHIRPMT
CTRL_DATA( 844: 849) = ' PWR: '
WRITE(UNIT=CTRL_DATA( 850: 853), FMT='(I4.4)') POWER
CTRL_DATA( 854: 864) = ' ANT:16 MD:'
WRITE(UNIT=CTRL_DATA( 865: 867), FMT='(Z3.3)') MODE
CTRL_DATA( 868: 875) = ' OFFSET:'
WRITE(UNIT=CTRL_DATA( 876: 878), FMT='(F3.1)') RAN_OFF
CTRL_DATA( 879: 888) = ' RXOFFSET:'
WRITE(UNIT=CTRL_DATA( 889: 898), FMT='(I10)') RX_OFFS
CTRL_DATA( 924:1003) = COMMENT(1:80)
DO I = 1004,1147
CTRL_DATA(I:I) = ' '
END DO
DO I = 1,16
WRITE(UNIT=CTRL_DATA(1020+8*(I-1):1020+8*I), FMT='(I7.7,X)')
* NINT(1000*PHAS(I))
END DO
C Write ctrl_data.asc
C
OPEN(UNIT=1,
* FORM='BINARY',
* TYPE='REPLACE',
* ACCESS='DIRECT',
* RECORDTYPE='FIXED',
* RECL=1147,
* INITIALSIZE=1147,
* FILE=CTRL)
WRITE(1,REC=1) (CTRL_DATA(I:I),I=1,1147)
CLOSE(UNIT=1)
CALL EXIT (0)
END