📄 autoobs.c
字号:
/**************************************************************//* *//* Program Name : autoobs *//* *//* Version: 0.0 2001-08-17 *//* 2.21 2002-07-22 *//* *//* Copyright (c) 2002 T.Kondo/CRL All Right Reserved *//* *//**************************************************************/#include <stdio.h>#include <errno.h>#include <fcntl.h>#include <unistd.h>#include <string.h>#include <math.h>#include <stdlib.h>#include <sys/stat.h>#ifdef linux#include <sys/time.h>#else#include <time.h>#endif#include <sys/tdsio.h>#include "libipvlbi.h" // IP-VLBI梡娭悢孮(by T.Kondo)#include "libipvlbi_board.h" // IP-VLBI僒儞僾儔乕儃乕僪梡娭悢孮(by T.Kondo)#define SLEEP_USEC 10000 // watch dog timer sep (10msec)#define GET_TIME_FROM_BOARD 1 // 帺摦塣梡偺帪崗傪儃乕僪偐傜摼傞偐俹俠偺帪崗偐傜摼傞偐偺敾掕 // 1: 儃乕僪偐傜 0:俹俠偐傜/* 俬俹亅倁俴俛俬丂僆僼儔僀儞帺摦娤應儘僌儔儉 乮帪崗僙僢僩偼暿偺僜僼僩偱峴偆乯 by T.Kondo 2001.8.17 Ver 2.1 2002.5.26 Ver 2.2 2002.7.12 Ver 2.21 2002.7.22 憱傜偣曽丂autoobs sked_file station_id [span [sfreq [adbit [numch [outdir]]]]] 偙偙偱丂sked_file ---- 僗働僕儏乕儖僼傽僀儖柤 staion_id ---- 嬊 ID (僗働僕儏乕儖僼傽僀儖偱婰弎偝傟偰偄傞嬊俬俢) span ---- 娤應帪娫 (sec) 乮僗働僕儏乕儖僼傽僀儖偱婯掕偟偰偄傞 娤應帪娫傛傝抁偔偡傞栚揑乯 僨僼僅儖僩偼侾侽昩 僗働僕儏乕儖僼傽僀儖捠傝偺娤應帪娫偲偡傞偲偒偼 偙偙傪侽偲偡傞 sfreq 僒儞僾儕儞僌廃攇悢 40,100,200,500 (kHz) 1,2,4,8,16 (MHz) 僨僼僅儖僩偼16 adbit 俙俢暘夝擻乮價僢僩) 1,2,4,8 僨僼僅儖僩偼1 numch 僠儍僱儖悢 1丂傑偨偼 4 僨僼僅儖僩偼1 outdir 僨乕僞僼傽僀儖弌椡僨傿儗僋僩儕 僨僼僅儖僩偼僇儗儞僩僨傿儗僋僩儕*/int main(int argc, char *argv[]){ char dev[] = "/dev/tds0"; char outfile [80]; char fname [50]; char outdir [60]; char* dflt_dir="./"; // default out file directory char skdname[80]; char mystation[11]; char stat_id[4]; char cbuf[60]; char afreq[20]; int fd_in,rv; int i, span, sfreq, adbit, numch; int nobs, obsspan, fixspan; int year,ddd,hh,mm,ss ; int yearf,dddf,hhf,mmf,ssf ; // to keep 1st obs info int yearl,dddl,hhl,mml,ssl ; // to keep last obs info int year1,ddd1,hh1,mm1,ss1 ; // int year2,ddd2,hh2,mm2,ss2 ; // int yearn,dddn,hhn,mmn,ssn ; int yearPC; // to keep yaer get from PC int month,mday; int monthf,mdayf; int monthl,mdayl; int month1,mday1; int month2,mday2; int monthn,mdayn; int iofset; int flagobs; unsigned int time,day,sec; // 僨僶僀僗偐傜撉傒崬傫偩尰嵼偺帪崗忣曬傪奿擺 unsigned int secold, sec1st, seclast, secobsst, secobset, secnow, secnext; int day1st, daylast, daynow, daynext; int h, m, s; int counter; int time_mode; // 帺摦塣梡偺帪崗傪儃乕僪偐傜摼傞偐俹俠偺帪崗偐傜摼傞偐偺敾掕 // 0: 儃乕僪偐傜丂丂丂1:俹俠偐傜 float timeoffset; // PCI board time - CPU time label (in sec) float tofset, fsec; float w1,w2,w3,w4,w5 ; // work double dtime1st,dtimelast,dtimenow, dtimenext, dtimenext2; double dtime1, dtime2; // manually set obs time range double dwork; static sked_data_t skd; if(argc == 1){ printf("autoobs Ver.2.21\n"); printf("Usage: autoobs sked_file station_id [span [sfreq [adbit [numch [outdir]]]]]\n"); printf("\n"); printf(" where sked_file ---- schedule file name\n"); printf(" staion_id ---- station ID (A1)\n"); printf(" span ---- duration (sec)\n"); printf(" compulsory shorten obs length!\n"); printf(" default = 10 (sec)\n"); printf(" =0 means no effect\n"); printf(" sfreq ---- sampling frequency\n"); printf(" 40,100,200,500 (for kHz)\n"); printf(" 1,2,4,8,16 (for MHz)\n"); printf(" default is 16\n"); printf(" adbit ---- A/D bit\n"); printf(" 1,2,4,8\n"); printf(" default is 1\n"); printf(" numch ---- number of channel\n"); printf(" 1,4\n"); printf(" default is 1\n"); printf(" outdir ---- output file directory\n"); printf(" default is current directory\n"); exit(0); } if (argc>=2) { strcpy(skdname,argv[1]); } if (argc>=3) { strcpy(stat_id,argv[2]); } else { strcpy(stat_id,"G"); // default set to KOGANEI } if (argc>=4) { fixspan = atoi(*(argv + 3 )); } else { fixspan=10; // default fix span (sec) } if (argc>=5) { sfreq = atoi(*(argv + 4 )); } else { sfreq=16; } if (argc>=6) { adbit = atoi(*(argv + 5 )); } else { adbit=1; } if (argc>=7) { numch = atoi(*(argv + 6 )); } else { numch=1; } if (argc>=8) { strcpy(outdir,*(argv+7)); } else { strcpy(outdir,dflt_dir); } /* check out dir name accompanied by "/" or not */ i=strlen(outdir); //printf("i= %d\n",i); if(outdir[i-1] != '/') { outdir[i]='/'; outdir[i+1]='\0'; } time_mode=GET_TIME_FROM_BOARD; // current TIME get from IP-VLBI board or not //time_mode=0; // current TIME get from PC board printf(" skedname = %s\n",skdname); // debug printf(" station_id = %s\n",stat_id); // debug printf(" span = %d\n",fixspan); // debug printf(" sfreq= %d\n",sfreq); // debug printf(" adbit= %d\n",adbit); // debug printf(" numch= %d\n",numch); // debug printf(" outdir= %s\n",outdir); // debug if(sfreq==40){ strcpy(afreq,"40kHz");} else if(sfreq==100){ strcpy(afreq,"100kHz");} else if(sfreq==200){ strcpy(afreq,"200kHz");} else if(sfreq==500){ strcpy(afreq,"500kHz");} else if(sfreq==1){ strcpy(afreq,"1MHz");} else if(sfreq==2){ strcpy(afreq,"2MHz");} else if(sfreq==4){ strcpy(afreq,"4MHz");} else if(sfreq==8){ strcpy(afreq,"8MHz");} else if(sfreq==16){ strcpy(afreq,"16MHz");} else { strcpy(afreq,"INVALID");} /* schedule file read and analysis */ readskd(skdname, &skd); if (skd.nobs <= 0) { goto exitend ; } /* Observation Time Range Check */ yearf=skd.start[0][0]+2000; dddf=skd.start[0][1]; hhf=skd.start[0][2]; mmf=skd.start[0][3]; ssf=skd.start[0][4]; sec1st=hhf*3600+mmf*60+ssf; day1st=dddf; printf("day1st %d\n",day1st); dtime1st=day1st+sec1st/86400.0; ddd2md(yearf,dddf,&monthf,&mdayf); printf("1st Obseravtion : %04d/%02d/%02d %02d:%02d:%02d %s\n",yearf,monthf,mdayf,hhf,mmf,ssf, skd.obsstar[0]); yearl=skd.start[skd.nobs-1][0]+2000; dddl=skd.start[skd.nobs-1][1]; hhl=skd.start[skd.nobs-1][2]; mml=skd.start[skd.nobs-1][3]; ssl=skd.start[skd.nobs-1][4]; seclast=hhl*3600+mml*60+ssl; daylast=dddl; dtimelast=daylast+seclast/86400.0; ddd2md(yearl,dddl,&monthl,&mdayl); printf("Last Obseravtion : %04d/%02d/%02d %02d:%02d:%02d %s\n",yearl,monthl,mdayl,hhl,mml,ssl, skd.obsstar[skd.nobs-1]); // printf("Date range %f -- %f\n",dtime1st,dtimelast); dtime1=dtime1st; dtime2=dtimelast; year1=yearf; year2=yearl; ddd1=dddf; ddd2=dddl; month1=monthf; month2=monthl; mday1=mdayf; mday2=mdayl; hh1=hhf; hh2=hhl; mm1=mmf; mm2=mml; ss1=ssf; ss2=ssl; /* Observation range limit if selected so */ strcpy(cbuf,"\0"); //printf(" Observation Time range Change? (Y/[N]) ----> "); printf(" Observation Time range Change? (Y/N) ----> "); scanf("%s",&cbuf); if(strncmp(cbuf,"Y",1)==0 || strncmp(cbuf,"y",1)==0 ) { year1=yearf; printf("Enter Start Time (month mday hour min sec)\n");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -