/*************************************************************************** datastruct_def.h - description ------------------- Version : 16.05.2011 Author : (C) 2002 by J.Neidhoefer ***************************************************************************/ #ifndef DATASTRUCTDEF_H #define DATASTRUCTDEF_H #define DOUBLE_DATA_DIM 350 #define INTEG_DATA_DIM 250 #define BOOL_DATA_DIM 100 typedef struct dat_dbl { double azi; // Azimut, Grad double dazi; // soll-ist double mdazi; // Regelungsabweichung double cazi; // counterdifferenz und einzelne double caz1; double caz2; double vazi; // Geschw. double uazi; // up-down counter double sazi; // Striche double pazi; // ideal Azimut ohne Pointing double pvaz; double sollazi; // Sollwerte double sollvaz; double indazi; // indicated double indvaz; double tecazi; // unbehandelte hardware inputs // double tecvaz; double haz; double outazi; // Ausgabewerte // double outvaz; // double outbaz; // Beschleunigung // ***************** neue Werte von VME double rxaz; double hysa; double elv; // Elevation dgl. double delv; double mdelv; // Regelungsabweichung double celv; // counterdifferenz und einzelne double cel1; double cel2; double velv; double uelv; double selv; double pelv; // ideal Elevation ohne Pointing double pvel; double sollelv; // Sollwerte und Abweichung double sollvel; double indelv; // indicated double indvel; double tecelv; // unbehandelte hardware inputs // double tecvel; double hel; double outelv; // Ausgabewerte // double outvel; // double outbel; // Beschleunigung // ***************** neue Werte von VME double rxel; double hyse; //----- Foci fc1-fc3: linear xyz, fc4-fc6: rotation xyz, fc7: Polarisation double foc_sollpos[7]; // Sollpositionen in mm oder Grad double foc_sollvel[7]; // Sollgeschw. double foc_solldist[7]; // Bei Fahren: Distanz double foc_istpos[7]; // Istpositionen double foc_istvel[7]; // Istgeschw. double foc_realpos[7]; // berechnete Position (zB bei Fahren) //----- FocusWechsel double focrx_soll; double focrx_ist; double slam; // eingegeben double vlam; double olam; double sbet; double vbet; double obet; double ra50; // VME-System: Eingabe-Koordinaten double dk50; double ra2000; // ... (2000.0) double dk2000; double gallong; // ... galaktisch double gallat; double hangle; // Stundenwinkel double paral; // Parallaktischer Winkel double actlam; // aktive Werte fuer Anzeige double actbet; double actruncoor; // laufende und fixed Koordinate double actfixcoor; double actveloc; // aktive Geschw. double hpa; // Luftdruck in Hpa double temp; // Temperatur in C double humi; // Luftfeuchte in % double waterpress; // Wasserdruck in Hpa double refract; // Refractive Index in " double windvel; // Windgeschw in km/s double winddir; // Windrichtung in Grad double juldat; // julianisches Datum in [d] double time; // Uhrzeit in [h] double sit; // siderische Zeit in [h] double subsctime; // Zeit im Subscan [h] double subscdist; // Distanz im Subscan in [] double rxfreq; // RX-Frequenz double nule; // Pointingwerte double nula; double coll; double poifc1; double poifc2; /* double vme_elv1[11]; // AXPUG-Feld vmetelescope*/ double foc_wanted; // gewuenschter Fokus double foc_elev; // Elevation fuer Oberflaeche double foc_azim; double foc_mjd; // Zeit der Fokusdaten in mjd double foc_surfstatus; // Status der Oberflaeche double foc_time; // focmjd-tage /* double vme_elv1[5]; // AXPUG-Feld vmetelescope double vme_elv2[11]; // AXPUG-Feld vmetelescope double vme_azi1[11]; // AXPUG-Feld vmetelescope double vme_azi2[11]; // AXPUG-Feld vmetelescope */ /* VME - Teleskop- Felder 0 = elev, 1 = azim ... weitere Felder s.o. */ double el_enc[2]; // Encoderwerte double az_enc[2]; // Encoderwerte double soll[2]; // astron. Werte double ist[2]; double vsoll[2]; double vist[2]; double poscom[2]; // kommandierte + Korr. double volt[2]; double poicorr[2]; double mjuld; // Zeit Ende des Puffers double time_to_end; // in s bis Messende double dUT1; double lb_mjd; // Werte fuer lam/bet (apparent) double lb_pos[2]; double lb_offs[2]; double starttime; // in mjd des Subscans double act_focus; // aktiver Fokus (1,2) double wavelength; // Wellenlaenge Rx in mm double vnula; double vcoll; double vnule; double vtemperature; double vhumidity; double vpressure; double vwindvel; double vwinddir; double vrefract; double obs_timeon; // selected observation time per subscan (on) [h] // double obs_timeref; // selected observation time per subscan (ref) [h] double time_scanbegin; // VME: Zeit am Begin des ersten Subscans double obs_timeact; // actual observation time in subscan [h] double obs_velocity; // selected observation velocity [ per min] double obs_distance; // selected observation distance [] double obs_timerest; // rest time in subscan [h] //***** naechster ist double(171) // Frontend-Daten double fe_ulo_frqs[3]; // berechnete ULO-Frequenzen signal,switch,fixed double fe_update; // update-time in JD double fe_frqs[3]; // Synthesizer-Frequenzen signal,switch,fixed in [GHz] double fe_amps[3]; // ... dgl Amplituden in [dBm] double fe_dfms[3]; // gelesene Frequenzen double fe_diffs[3]; // Diff zwischen gelesen und gesetzt double fe_facts[3]; // Faktor fr Frequenzberechnung double fe_scfs[7]; // eingegebene Frqs: scf,ocf,rlf,olf,rhf,ohf,suf double fe_rxfrq; // receiver Frequenz double fe_reffrq; // Referenz " double fe_frqoff; // Offset " double fe_sif; // IF " double fe_sif2; // not used //----- Fahrprogramm-Fokuswerte double foc_offset[6]; double foc_set[6]; double foc_geom[6]; double hourangle; double sidtime; //----- Daten aus dem Delphin-System double delphin[75]; double ekllong; // VME-System: Eingabe-Koordinaten double ekllat; // ... (Ekliptikal) double freilong; // ... ( freie Koordinaten) double freilat; double anzeige_lam; // VME: Anzuzeigende Koordinaten double anzeige_bet; double dreserve[47]; // double dreserve[53]; } DOUBLE_DATA; typedef struct dat_intg { long year; // Kalenderdaten long month; long day; long weekday; long day_year; long statazi; // Status-Bits der Achsen long statelv; long statfc1; long statfc2; long statfc3; long statpos; long scannr; long subscnr; long srp1; long srp2; long srp3; long srp4; long vax_statclock[2]; // BCD-kodierte Stationsuhr long vax_antclock; // VAX Antennencrate Clockcontroller long vax_beclock; // VAX Backend Clockcontroller long steuerpult_sw; // Steuerpultschalter long camac_adcs[16]; // ADCS von VAX Camac long camac_dacs[16 ]; // DACS von VAX-Camac 12 Bit long camac_dac18[2]; // 18-Bit DAC von VAX Camac long camac_digin[6]; // Digitale Inputs von VAX Camac long camac_digout[2]; // Digitale Outputs von VAX Camac long camac_veloc[4]; // Geschw. von VAX Camac long camac_currents[16]; // actuelle Werte von VAX Camac long vaxevents96; // Eventflags der VAX long vaxevents64; long scanning_axis; // scannende Achse 1:lam,2:bet,3:azm ... //***** naechste beginnt mit long(87) // Frontend Daten long fe_status_bits; // gegenw�tiger Status Frontend long fe_used_syn; // benutzte Synthesizer (sut) long fe_ulomode; // fsm long fe_act_fcunr; // aktive fcu-Nr long fe_fcu_first; // erste und letzte fcu-Nr long fe_fcu_last; long fe_fcu_avail; // verfuegbare fcus long fe_fcu_notavail; long fe_obs_status; // Status of observation long fe_err_severity; // Error Severity long fe_ulo_contr[6]; // Frontend Einheiten Einstellung // ulocontr1,2,esm_contr,vlba_contr, 2 not used long fe_syn_typ[3]; // Synthesizer typ long fe_syn_adr[3]; // IEC adresse long fe_syn_fd[3]; // file-descriptor (IEC) long fe_syn_funct[3]; // welche Funktion hat er long fe_syn_severity[3]; // error severity long fe_dfm_alert[3]; // Frequenz-Abweichungs Status long fe_dfm_typ[3]; // Typ long fe_dfm_adr[3]; // IEC Adresse long fe_dfm_fd[3]; // filedescriptor (IEC) long fe_dfm_funct[3]; // welche Funktion hat er long fe_dfm_chan[3]; // welcher Eingangskanal long fe_dfm_severity[3]; // error severity long fe_fcu_number; // Nr der Steuereinheit long fe_bac_mul80; // Backend-Multiplexer Einheit long fe_bac_if750; // IF-Umschaltung 750/150 long fe_bac_if150; // IF-150-Verteilung long fe_fcu_blanktime; // Blankzeit in 100 microsec long fe_fcu_phtime; // Phasenzeit in millisec long fe_fcu_mode; // long fe_fcu_status; // Status-info long fe_fcu_severity; // error severity long fe_fcu_dyn10; // Schalter dynamisch blockiert long fe_fcu_dynxx; // " geschaltet long fe_fcu_off10; // dgl. fuer Offscan long fe_fcu_offxx; // long fe_fcu_stat1; // statische Schalter 9-16 long fe_fcu_stat2; // " 17-24 long fe_fcu_phases; // Anzahl Phasen long fe_fcu_workmode; // Betriebsart (1,2,3) long fe_fcu_phmatrix[4]; // Phasenmatrix long fe_scf_opts[7]; // eingegebene Optionen // synt-,fcu-,units-simul,ulo_berechnung,rhf,ohf,frq long fe_mul; long fe_sid; long fe_switchmode; long fe_version[4]; long steps; // Nr. of steps in scanning direction // Focus-Informationen long foc_input; // Eingabe-Bits long foc_status1; // Ausgabe-Status long foc_status2; long foc_sendport; // PortNr. fuer Senden an Focusprozessor long foc_controlport; // PortNr. fuer Kontrollrechner long foc_receiveport; // PortNr. fuer Statusempfang long foc_fahrachse; // bei Fokusfahren: Fahrachse long foc_spiegelklappen; // Status der Spiegelklappen //---- VME Achsen (0=elev, 1=azim) // status-Input: 0:elev,1:azim,3:focus // 0,1: 0-manual,1-idle,2-pos,3-ready,4-start,5-meas,6-end,7-stop,99-lost // 2: 0-idle,1-pos,2-ready,3-start,4-meas,5-end,6-stop,99-abort // --> gewandelt nach Bit 0-manual ... Bit 7-stop, Bit 8-abort long axstatus[3]; long axoptions[2]; long axspsbits[4]; //---- VME-Scannr. usw. long vscan; long vsubscan; long vanzsubs; long vonoff; long topomode; long act_coordsys; // VME aktuelles Eingabe-Koordinatensystem // 0= app 1 = 2000 2 = 1950 3 = Gal 4 = Ekl 5 = Horizontal 6 =frei long wwgeber[4]; long ireserve[48]; } INTEG_DATA; typedef struct dat_bool { bool alive; bool man_elv; bool man_azi; bool man_foci; bool ok_elv; bool ok_azi; bool ok_foci; bool ist_onscan; bool observation; bool azim_ein; // Inputs von SPS bool azim_rechner; bool azim_soll0; bool azim_endsch; bool azim_ist20d; bool azim_ist40d; bool elev_ein; bool elev_rechner; bool elev_soll0; bool elev_endsch; bool elev_ist10d; bool elev_ist20d; bool foc_messung; bool foc_active; bool foc_surface; bool foc_standard; bool foc_offsets; bool foc_ellipse; bool foc_prim; bool foc_sek; bool foc_surfaceok; bool foc_onpos; // Frontend-Daten bool fe_unit_remote[6]; // FrontendKontrolleinheiten remote // ulocontr1,2,esm_contr,vlba_contr, 2 not used bool fe_syn_standby[3]; // Synthesizer standby-mode bool fe_syn_exist[3]; // Synthesizer exist bool fe_dfm_exist[3]; // Frequenzzaehler exist bool fe_fcu_hand; // Wird in Hand benutzt bool fe_fcu_exist; // existiert bool fe_fcu_remote; // Schalter auf remote bool fe_be_mul80_remote; // mul80 auf remote bool fe_be_if750_remote; // if750 auf remote bool fe_be_if150_remote; // if150 auf remote bool azonpos; // vme az/el auf position bool elonpos; bool istmess; bool focusfahren; // alles vme ... bool posit_fast_elv; bool posit_fast_azm; bool without_corr_elv; bool without_corr_azm; bool simulation_elv; bool simulation_azm; bool sfl_corr; bool sun_allow; bool steer_parangle; bool wetter_manual; bool frontend_active; bool horizon_on; bool breserve[32]; } BOOL_DATA; //------ Anzahl der Textstring-Felder #define TEXT_DATA_DIM 14 typedef struct in_data { unsigned short write; // TRUE, wenn noch nicht alle Werte erneuert sind unsigned short read; // TRUE, wenn Werte noch dargestellt werden int running; // wird immer von 0-99 gez�lt bei jedem Update char datum[32]; // Kalenderzeit in ascii /* char sourcename[80];*/ char sourcename[40]; char fuelling[20]; // *** vorlaeufig VME-sourcename char fahraxis[10]; // focusfahrachse text char spgklapp[10]; // Spiegelklappen-text offen,zu usw. char scancoord[16]; // Scannende Koordinate lam,bet,azm usw. char velocity[16]; // aktuelle Geschwindigkeitsart char displ_coo_lam[16]; // Displaykoordinate in Lam char displ_coo_bet[16]; // Displaykoordinate in Bet char front_msg[80]; // Error von Frontend char front_inf[80]; // Info von Frontend (severity 0,1) char fahroffsets[16]; // Fahroffset-Koordinaten char topochar[10]; // topomode char project[40]; char beobachter[40]; char operateur[40]; char noch[30]; // freier Platz union doubledata { struct dat_dbl d; double dfeld[350]; } d; union integdata { struct dat_intg i; long ifeld[250]; } i; union booldata { struct dat_bool b; bool bfeld[100]; } b; } DISPLAY_DATA; #endif // DATASTRUCTDEF_H