remove non-ascii

pull/11/head
Zilog80 2019-04-06 22:13:53 +02:00
rodzic 1a87be1a50
commit 3af2f1e474
11 zmienionych plików z 185 dodań i 61 usunięć

Wyświetl plik

@ -466,7 +466,7 @@ typedef struct {
int jahr; int monat; int tag; int jahr; int monat; int tag;
int wday; int wday;
int std; int min; float sek; int std; int min; float sek;
double lat; double lon; double h; double lat; double lon; double alt;
double vH; double vD; double vV; double vH; double vD; double vV;
double vE; double vN; double vU; double vE; double vN; double vU;
//int freq; //int freq;
@ -624,7 +624,7 @@ int get_GPSalt() {
gpsheight |= gpsheight_bytes[i] << (8*(3-i)); gpsheight |= gpsheight_bytes[i] << (8*(3-i));
} }
height = gpsheight / 1000.0; height = gpsheight / 1000.0;
gpx.h = height; gpx.alt = height;
if (height < -100 || height > 60000) return -1; if (height < -100 || height > 60000) return -1;
return 0; return 0;
@ -722,14 +722,14 @@ void print_frame(int crc_err, int len) {
get_GPSlon(); get_GPSlon();
err = get_GPSalt(); err = get_GPSalt();
if (!err) { if (!err) {
printf(" lat: %.6f° ", gpx.lat); printf(" lat: %.6f ", gpx.lat);
printf(" lon: %.6f° ", gpx.lon); printf(" lon: %.6f ", gpx.lon);
printf(" alt: %.2fm ", gpx.h); printf(" alt: %.2fm ", gpx.alt);
//if (option_verbose) //if (option_verbose)
{ {
get_GPSvel24(); get_GPSvel24();
//if (option_verbose == 2) printf(" (%.1f ,%.1f,%.1f) ", gpx.vE, gpx.vN, gpx.vU); //if (option_verbose == 2) printf(" (%.1f ,%.1f,%.1f) ", gpx.vE, gpx.vN, gpx.vU);
printf(" vH: %.1fm/s D: %.1f° vV: %.1fm/s ", gpx.vH, gpx.vD, gpx.vV); printf(" vH: %.1fm/s D: %.1f vV: %.1fm/s ", gpx.vH, gpx.vD, gpx.vV);
} }
} }
if (crc_err==0) printf(" [OK]"); else printf(" [NO]"); if (crc_err==0) printf(" [OK]"); else printf(" [NO]");

Wyświetl plik

@ -468,7 +468,7 @@ typedef struct {
int jahr; int monat; int tag; int jahr; int monat; int tag;
int wday; int wday;
int std; int min; float sek; int std; int min; float sek;
double lat; double lon; double h; double lat; double lon; double alt;
double vH; double vD; double vV; double vH; double vD; double vV;
double vE; double vN; double vU; double vE; double vN; double vU;
//int freq; //int freq;
@ -626,7 +626,7 @@ int get_GPSalt() {
gpsheight |= gpsheight_bytes[i] << (8*(3-i)); gpsheight |= gpsheight_bytes[i] << (8*(3-i));
} }
height = gpsheight / 100.0; height = gpsheight / 100.0;
gpx.h = height; gpx.alt = height;
if (height < -100 || height > 60000) return -1; if (height < -100 || height > 60000) return -1;
return 0; return 0;
@ -760,13 +760,13 @@ void print_frame(int crc_err, int len) {
get_GPSlon(); get_GPSlon();
err = get_GPSalt(); err = get_GPSalt();
if (!err) { if (!err) {
printf(" lat: %.6f° ", gpx.lat); printf(" lat: %.6f ", gpx.lat);
printf(" lon: %.6f° ", gpx.lon); printf(" lon: %.6f ", gpx.lon);
printf(" alt: %.2fm ", gpx.h); printf(" alt: %.2fm ", gpx.alt);
//if (option_verbose) //if (option_verbose)
{ {
get_GPSvel16(); get_GPSvel16();
printf(" vH: %.1fm/s D: %.1f° vV: %.1fm/s ", gpx.vH, gpx.vD, gpx.vV); printf(" vH: %.1fm/s D: %.1f vV: %.1fm/s ", gpx.vH, gpx.vD, gpx.vV);
} }
} }
if (crc_err==0) printf(" [OK]"); else printf(" [NO]"); if (crc_err==0) printf(" [OK]"); else printf(" [NO]");

Wyświetl plik

@ -647,7 +647,7 @@ int print_pos(int csOK) {
err |= get_GPSvel(); err |= get_GPSvel();
if (!err) { if (!err) {
//if (option_verbose == 2) fprintf(stdout, " "col_GPSvel"(%.1f , %.1f : %.1f)"col_TXT" ", datum.vx, datum.vy, datum.vD2); //if (option_verbose == 2) fprintf(stdout, " "col_GPSvel"(%.1f , %.1f : %.1f)"col_TXT" ", datum.vx, datum.vy, datum.vD2);
fprintf(stdout, " vH: "col_GPSvel"%.1f"col_TXT" D: "col_GPSvel"%.1f"col_TXT"° vV: "col_GPSvel"%.1f"col_TXT" ", datum.vH, datum.vD, datum.vV); fprintf(stdout, " vH: "col_GPSvel"%.1f"col_TXT" D: "col_GPSvel"%.1f"col_TXT" vV: "col_GPSvel"%.1f"col_TXT" ", datum.vH, datum.vD, datum.vV);
} }
if (option_verbose >= 2) { if (option_verbose >= 2) {
get_SN(); get_SN();
@ -681,8 +681,8 @@ int print_pos(int csOK) {
if (option_verbose) { if (option_verbose) {
err |= get_GPSvel(); err |= get_GPSvel();
if (!err) { if (!err) {
//if (option_verbose == 2) fprintf(stdout, " (%.1f , %.1f : %.1f°) ", datum.vx, datum.vy, datum.vD2); //if (option_verbose == 2) fprintf(stdout, " (%.1f , %.1f : %.1f) ", datum.vx, datum.vy, datum.vD2);
fprintf(stdout, " vH: %.1f D: %.1f° vV: %.1f ", datum.vH, datum.vD, datum.vV); fprintf(stdout, " vH: %.1f D: %.1f vV: %.1f ", datum.vH, datum.vD, datum.vV);
} }
if (option_verbose >= 2) { if (option_verbose >= 2) {
get_SN(); get_SN();

Wyświetl plik

@ -616,7 +616,7 @@ static void print_frame(gpx_t *gpx, int crc_err, int len) {
printf(" alt: %.2fm ", gpx->alt); printf(" alt: %.2fm ", gpx->alt);
get_GPSvel24(gpx); get_GPSvel24(gpx);
//if (gpx->option.vbs == 2) printf(" (%.1f ,%.1f,%.1f) ", gpx->vE, gpx->vN, gpx->vU); //if (gpx->option.vbs == 2) printf(" (%.1f ,%.1f,%.1f) ", gpx->vE, gpx->vN, gpx->vU);
printf(" vH: %.1fm/s D: %.1f° vV: %.1fm/s ", gpx->vH, gpx->vD, gpx->vV); printf(" vH: %.1fm/s D: %.1f vV: %.1fm/s ", gpx->vH, gpx->vD, gpx->vV);
} }
if (crc_err==0) printf(" [OK]"); else printf(" [NO]"); if (crc_err==0) printf(" [OK]"); else printf(" [NO]");

Wyświetl plik

@ -700,7 +700,7 @@ static int print_pos(gpx_t *gpx, int csOK) {
fprintf(stdout, " alt: "col_GPSalt"%.2f"col_TXT" ", gpx->alt); fprintf(stdout, " alt: "col_GPSalt"%.2f"col_TXT" ", gpx->alt);
if (!err2) { if (!err2) {
//if (gpx->option.vbs == 2) fprintf(stdout, " "col_GPSvel"(%.1f , %.1f : %.1f)"col_TXT" ", gpx->vx, gpx->vy, gpx->vD2); //if (gpx->option.vbs == 2) fprintf(stdout, " "col_GPSvel"(%.1f , %.1f : %.1f)"col_TXT" ", gpx->vx, gpx->vy, gpx->vD2);
fprintf(stdout, " vH: "col_GPSvel"%.1f"col_TXT" D: "col_GPSvel"%.1f"col_TXT"° vV: "col_GPSvel"%.1f"col_TXT" ", gpx->vH, gpx->vD, gpx->vV); fprintf(stdout, " vH: "col_GPSvel"%.1f"col_TXT" D: "col_GPSvel"%.1f"col_TXT" vV: "col_GPSvel"%.1f"col_TXT" ", gpx->vH, gpx->vD, gpx->vV);
} }
if (gpx->option.vbs >= 2) { if (gpx->option.vbs >= 2) {
get_SN(gpx); get_SN(gpx);
@ -731,8 +731,8 @@ static int print_pos(gpx_t *gpx, int csOK) {
fprintf(stdout, " lon: %.5f ", gpx->lon); fprintf(stdout, " lon: %.5f ", gpx->lon);
fprintf(stdout, " alt: %.2f ", gpx->alt); fprintf(stdout, " alt: %.2f ", gpx->alt);
if (!err2) { if (!err2) {
//if (gpx->option.vbs == 2) fprintf(stdout, " (%.1f , %.1f : %.1f°) ", gpx->vx, gpx->vy, gpx->vD2); //if (gpx->option.vbs == 2) fprintf(stdout, " (%.1f , %.1f : %.1f) ", gpx->vx, gpx->vy, gpx->vD2);
fprintf(stdout, " vH: %.1f D: %.1f° vV: %.1f ", gpx->vH, gpx->vD, gpx->vV); fprintf(stdout, " vH: %.1f D: %.1f vV: %.1f ", gpx->vH, gpx->vD, gpx->vV);
} }
if (gpx->option.vbs >= 2) { if (gpx->option.vbs >= 2) {
get_SN(gpx); get_SN(gpx);

Wyświetl plik

@ -84,7 +84,7 @@ typedef struct {
double lat; double lon; double alt; double lat; double lon; double alt;
double vN; double vE; double vU; double vN; double vE; double vU;
double vH; double vD; double vD2; double vH; double vD; double vD2;
float T; float T; float RH;
ui32_t crc; ui32_t crc;
ui8_t frame[FRAME_LEN]; ui8_t frame[FRAME_LEN];
ui8_t calibytes[51*16]; ui8_t calibytes[51*16];
@ -95,6 +95,7 @@ typedef struct {
float ptu_calT1[3]; // calibration T1 float ptu_calT1[3]; // calibration T1
float ptu_co2[3]; // { -243.911 , 0.187654 , 8.2e-06 } float ptu_co2[3]; // { -243.911 , 0.187654 , 8.2e-06 }
float ptu_calT2[3]; // calibration T2-Hum float ptu_calT2[3]; // calibration T2-Hum
float ptu_calH[2]; // calibration Hum
ui16_t conf_fw; // firmware ui16_t conf_fw; // firmware
ui8_t conf_cd; // kill countdown (sec) (kt or bt) ui8_t conf_cd; // kill countdown (sec) (kt or bt)
ui16_t conf_kt; // kill timer (sec) ui16_t conf_kt; // kill timer (sec)
@ -495,6 +496,9 @@ static int get_CalData(gpx_t *gpx) {
memcpy(gpx->ptu_calT1+1, gpx->calibytes+93, 4); // 0x05*0x10+13 memcpy(gpx->ptu_calT1+1, gpx->calibytes+93, 4); // 0x05*0x10+13
memcpy(gpx->ptu_calT1+2, gpx->calibytes+97, 4); // 0x06*0x10+ 1 memcpy(gpx->ptu_calT1+2, gpx->calibytes+97, 4); // 0x06*0x10+ 1
memcpy(gpx->ptu_calH+0, gpx->calibytes+117, 4); // 0x07*0x10+ 5
memcpy(gpx->ptu_calH+1, gpx->calibytes+121, 4); // 0x07*0x10+ 9
memcpy(gpx->ptu_co2+0, gpx->calibytes+293, 4); // 0x12*0x10+ 5 memcpy(gpx->ptu_co2+0, gpx->calibytes+293, 4); // 0x12*0x10+ 5
memcpy(gpx->ptu_co2+1, gpx->calibytes+297, 4); // 0x12*0x10+ 9 memcpy(gpx->ptu_co2+1, gpx->calibytes+297, 4); // 0x12*0x10+ 9
memcpy(gpx->ptu_co2+2, gpx->calibytes+301, 4); // 0x12*0x10+13 memcpy(gpx->ptu_co2+2, gpx->calibytes+301, 4); // 0x12*0x10+13
@ -506,6 +510,7 @@ static int get_CalData(gpx_t *gpx) {
return 0; return 0;
} }
/*
static float get_Tc0(gpx_t *gpx, ui32_t f, ui32_t f1, ui32_t f2) { static float get_Tc0(gpx_t *gpx, ui32_t f, ui32_t f1, ui32_t f2) {
// y = (f - f1) / (f2 - f1); // y = (f - f1) / (f2 - f1);
// y1 = (f - f1) / f2; // = (1 - f1/f2)*y // y1 = (f - f1) / f2; // = (1 - f1/f2)*y
@ -523,6 +528,21 @@ static float get_Tc0(gpx_t *gpx, ui32_t f, ui32_t f1, ui32_t f2) {
// R/R0 = 1 + at + bt^2 + c(t-100)t^3 , R0 = 1000 Ohm, t/Celsius // R/R0 = 1 + at + bt^2 + c(t-100)t^3 , R0 = 1000 Ohm, t/Celsius
return t; return t;
} }
*/
// T_RH-sensor
static float get_TH(gpx_t *gpx, ui32_t f, ui32_t f1, ui32_t f2) {
float *p = gpx->ptu_co2;
float *c = gpx->ptu_calT2;
float g = (float)(f2-f1)/(gpx->ptu_Rf2-gpx->ptu_Rf1), // gain
Rb = (f1*gpx->ptu_Rf2-f2*gpx->ptu_Rf1)/(float)(f2-f1), // ofs
Rc = f/g - Rb,
//R = (Rc + c[1]) * c[0],
//T = p[0] + p[1]*R + p[2]*R*R;
R = Rc * c[0],
T = (p[0] + p[1]*R + p[2]*R*R + c[1])*(1.0 + c[2]);
return T;
}
// T-sensor, platinum resistor
static float get_Tc(gpx_t *gpx, ui32_t f, ui32_t f1, ui32_t f2) { static float get_Tc(gpx_t *gpx, ui32_t f, ui32_t f1, ui32_t f2) {
float *p = gpx->ptu_co1; float *p = gpx->ptu_co1;
float *c = gpx->ptu_calT1; float *c = gpx->ptu_calT1;
@ -536,13 +556,32 @@ static float get_Tc(gpx_t *gpx, ui32_t f, ui32_t f1, ui32_t f2) {
return T; return T;
} }
// rel.hum., capacitor
// (data:) ftp://ftp-cdc.dwd.de/pub/CDC/observations_germany/radiosondes/
// (diffAlt: Ellipsoid-Geoid)
static float get_RH(gpx_t *gpx, ui32_t f, ui32_t f1, ui32_t f2, float T) {
float b0 = gpx->ptu_calH[0]/46.64; // empirical
float b1 = 0.1276; // empirical
float fh = (f-f1)/(float)(f2-f1);
float rh = 100.0 * (fh-b0)/b1;
float T0 = 0.0, T1 = -30.0; // T/C
if (T < T0) rh += T0 - T/5.5; // empir. temperature compensation
if (T < T1) rh *= 1.0 + (T1-T)/75.0; // empir. temperature compensation
if (rh < 0.0) rh = 0.0;
if (rh > 100.0) rh = 100.0;
if (T < -273.0) rh = -1.0;
return rh;
}
static int get_PTU(gpx_t *gpx) { static int get_PTU(gpx_t *gpx) {
int err=0, i; int err=0, i;
int bR, bc1, bT1, int bR, bc1, bT1,
bc2, bT2; bc2, bT2;
int bH;
ui32_t meas[12]; ui32_t meas[12];
float Tc = -273.15; float Tc = -273.15;
float Tc0 = -273.15; float TH = -273.15;
float RH = -1.0;
get_CalData(gpx); get_CalData(gpx);
@ -561,14 +600,25 @@ static int get_PTU(gpx_t *gpx) {
bT1 = gpx->calfrchk[0x05] && gpx->calfrchk[0x06]; bT1 = gpx->calfrchk[0x05] && gpx->calfrchk[0x06];
bc2 = gpx->calfrchk[0x12] && gpx->calfrchk[0x13]; bc2 = gpx->calfrchk[0x12] && gpx->calfrchk[0x13];
bT2 = gpx->calfrchk[0x13]; bT2 = gpx->calfrchk[0x13];
bH = gpx->calfrchk[0x07];
if (bR && bc1 && bT1) { if (bR && bc1 && bT1) {
Tc = get_Tc(gpx, meas[0], meas[1], meas[2]); Tc = get_Tc(gpx, meas[0], meas[1], meas[2]);
Tc0 = get_Tc0(gpx, meas[0], meas[1], meas[2]); //Tc0 = get_Tc0(gpx, meas[0], meas[1], meas[2]);
} }
gpx->T = Tc; gpx->T = Tc;
if (gpx->option.vbs == 4) if (bR && bc2 && bT2) {
TH = get_TH(gpx, meas[6], meas[7], meas[8]);
}
if (bH) {
RH = get_RH(gpx, meas[3], meas[4], meas[5], Tc); // TH, TH-Tc (sensorT - T)
}
gpx->RH = RH;
if (gpx->option.vbs == 4 && (gpx->crc & (crc_PTU | crc_GPS3))==0)
{ {
printf(" h: %8.2f # ", gpx->alt); // crc_GPS3 ? printf(" h: %8.2f # ", gpx->alt); // crc_GPS3 ?
@ -578,17 +628,25 @@ static int get_PTU(gpx_t *gpx) {
printf(" # "); printf(" # ");
printf("3: %8d %8d %8d", meas[6], meas[7], meas[8]); printf("3: %8d %8d %8d", meas[6], meas[7], meas[8]);
printf(" # "); printf(" # ");
if (Tc > -273.0) {
printf(" T: %8.4f , T0: %8.4f ", Tc, Tc0); //if (Tc > -273.0 && RH > -0.5)
} {
printf(" ");
printf(" Tc:%.2f ", Tc);
printf(" RH:%.1f ", RH);
printf(" TH:%.2f ", TH);
}
printf("\n"); printf("\n");
if (gpx->alt > -100.0) { if (gpx->alt > -400.0)
{
printf(" %9.2f ; %6.1f ; %6.1f ", gpx->alt, gpx->ptu_Rf1, gpx->ptu_Rf2); printf(" %9.2f ; %6.1f ; %6.1f ", gpx->alt, gpx->ptu_Rf1, gpx->ptu_Rf2);
printf("; %10.6f ; %10.6f ; %10.6f ;", gpx->ptu_calT1[0], gpx->ptu_calT1[1], gpx->ptu_calT1[2]); printf("; %10.6f ; %10.6f ; %10.6f ", gpx->ptu_calT1[0], gpx->ptu_calT1[1], gpx->ptu_calT1[2]);
printf(" %8d ; %8d ; %8d ", meas[0], meas[1], meas[2]); //printf("; %8d ; %8d ; %8d ", meas[0], meas[1], meas[2]);
printf("; %10.6f ; %10.6f ; %10.6f ;", gpx->ptu_calT2[0], gpx->ptu_calT2[1], gpx->ptu_calT2[2]); printf("; %10.6f ; %10.6f ", gpx->ptu_calH[0], gpx->ptu_calH[1]);
printf(" %8d ; %8d ; %8d" , meas[6], meas[7], meas[8]); //printf("; %8d ; %8d ; %8d ", meas[3], meas[4], meas[5]);
printf("; %10.6f ; %10.6f ; %10.6f ", gpx->ptu_calT2[0], gpx->ptu_calT2[1], gpx->ptu_calT2[2]);
//printf("; %8d ; %8d ; %8d" , meas[6], meas[7], meas[8]);
printf("\n"); printf("\n");
} }
} }
@ -1061,12 +1119,14 @@ static int print_position(gpx_t *gpx, int ec) {
//if (gpx->option.vbs) //if (gpx->option.vbs)
{ {
//fprintf(stdout, " (%.1f %.1f %.1f) ", gpx->vN, gpx->vE, gpx->vU); //fprintf(stdout, " (%.1f %.1f %.1f) ", gpx->vN, gpx->vE, gpx->vU);
fprintf(stdout," vH: %4.1f D: %5.1f° vV: %3.1f ", gpx->vH, gpx->vD, gpx->vU); fprintf(stdout," vH: %4.1f D: %5.1f vV: %3.1f ", gpx->vH, gpx->vD, gpx->vU);
if (gpx->option.vbs == 3) fprintf(stdout," sats: %02d ", gpx->numSV); if (gpx->option.vbs == 3) fprintf(stdout," sats: %02d ", gpx->numSV);
} }
} }
if (gpx->option.ptu && !err0) { if (gpx->option.ptu && !err0) {
if (gpx->T > -273.0) printf(" T=%.1fC ", gpx->T); printf(" ");
if (gpx->T > -273.0) printf(" T=%.1fC ", gpx->T);
if (gpx->RH > -0.5) printf(" RH=%.0f%% ", gpx->RH);
} }
@ -1120,6 +1180,9 @@ static int print_position(gpx_t *gpx, int ec) {
if (gpx->option.ptu && !err0 && gpx->T > -273.0) { if (gpx->option.ptu && !err0 && gpx->T > -273.0) {
fprintf(stdout, ", \"temp\": %.1f", gpx->T ); fprintf(stdout, ", \"temp\": %.1f", gpx->T );
} }
if (gpx->option.ptu && !err0 && gpx->RH > -0.5) {
fprintf(stdout, ", \"humidity\": %.1f", gpx->RH );
}
if (gpx->aux) { // <=> gpx->xdata[0]!='\0' if (gpx->aux) { // <=> gpx->xdata[0]!='\0'
fprintf(stdout, ", \"aux\": \"%s\"", gpx->xdata ); fprintf(stdout, ", \"aux\": \"%s\"", gpx->xdata );
} }

Wyświetl plik

@ -876,7 +876,7 @@ static int get_GPSkoord(gpx_t *gpx, int N) {
fprintf(stdout, "lat: %.5f , lon: %.5f , alt: %.1f ", lat, lon, alt); fprintf(stdout, "lat: %.5f , lon: %.5f , alt: %.1f ", lat, lon, alt);
fprintf(stdout, " (d:%.1f)", diter); fprintf(stdout, " (d:%.1f)", diter);
if ( gpx->gps.opt_vel == 4 ) { if ( gpx->gps.opt_vel == 4 ) {
fprintf(stdout, " vH: %4.1f D: %5.1f° vV: %3.1f ", vH, vD, vU); fprintf(stdout, " vH: %4.1f D: %5.1f vV: %3.1f ", vH, vD, vU);
} }
fprintf(stdout, " sats: "); fprintf(stdout, " sats: ");
fprintf(stdout, "%02d %02d %02d %02d ", gpx->gps.prn[i0], gpx->gps.prn[i1], gpx->gps.prn[i2], gpx->gps.prn[i3]); fprintf(stdout, "%02d %02d %02d %02d ", gpx->gps.prn[i0], gpx->gps.prn[i1], gpx->gps.prn[i2], gpx->gps.prn[i3]);
@ -986,7 +986,7 @@ static int get_GPSkoord(gpx_t *gpx, int N) {
ecef2elli(pos1s_ecef[0], pos1s_ecef[1], pos1s_ecef[2], &lat1s, &lon1s, &alt1s); ecef2elli(pos1s_ecef[0], pos1s_ecef[1], pos1s_ecef[2], &lat1s, &lon1s, &alt1s);
if (gpx->gps.opt_vergps == 8) { if (gpx->gps.opt_vergps == 8) {
fprintf(stdout, "\ndeltachips1s lat: %.6f , lon: %.6f , alt: %.2f ", lat1s, lon1s, alt1s); fprintf(stdout, "\ndeltachips1s lat: %.6f , lon: %.6f , alt: %.2f ", lat1s, lon1s, alt1s);
fprintf(stdout, " vH: %4.1f D: %5.1f° vV: %3.1f ", vH, vD, vU); fprintf(stdout, " vH: %4.1f D: %5.1f vV: %3.1f ", vH, vD, vU);
fprintf(stdout, "\n"); fprintf(stdout, "\n");
} }
} }
@ -1010,7 +1010,7 @@ static int get_GPSkoord(gpx_t *gpx, int N) {
fprintf(stdout, "bancroft[%2d] lat: %.6f , lon: %.6f , alt: %.2f ", N, lat, lon, alt); fprintf(stdout, "bancroft[%2d] lat: %.6f , lon: %.6f , alt: %.2f ", N, lat, lon, alt);
fprintf(stdout, " (d:%.1f)", gpx->diter); fprintf(stdout, " (d:%.1f)", gpx->diter);
if (gpx->gps.opt_vel) { if (gpx->gps.opt_vel) {
fprintf(stdout, " vH: %4.1f D: %5.1f° vV: %3.1f ", vH, vD, vU); fprintf(stdout, " vH: %4.1f D: %5.1f vV: %3.1f ", vH, vD, vU);
} }
fprintf(stdout, " DOP["); fprintf(stdout, " DOP[");
for (j = 0; j < N; j++) { for (j = 0; j < N; j++) {
@ -1120,7 +1120,7 @@ static int print_position(gpx_t *gpx, int ec) { // GPS-Hoehe ueber Ellipsoid
fprintf(stdout, " (d:%.1f)", gpx->diter); fprintf(stdout, " (d:%.1f)", gpx->diter);
} }
if (gpx->gps.opt_vel /*&& gpx->gps.opt_vergps >= 2*/) { if (gpx->gps.opt_vel /*&& gpx->gps.opt_vergps >= 2*/) {
fprintf(stdout," vH: %4.1f D: %5.1f° vV: %3.1f ", gpx->vH, gpx->vD, gpx->vU); fprintf(stdout," vH: %4.1f D: %5.1f vV: %3.1f ", gpx->vH, gpx->vD, gpx->vU);
} }
if (gpx->option.vbs) { if (gpx->option.vbs) {
if (gpx->gps.opt_vergps != 2) { if (gpx->gps.opt_vergps != 2) {

Wyświetl plik

@ -55,7 +55,7 @@ typedef struct {
double lat; double lon; double alt; double lat; double lon; double alt;
double vN; double vE; double vU; double vN; double vE; double vU;
double vH; double vD; double vD2; double vH; double vD; double vD2;
float T; float T; float RH;
ui32_t crc; ui32_t crc;
} gpx_t; } gpx_t;
@ -354,6 +354,7 @@ float Rf1, // ref-resistor f1 (750 Ohm)
calT1[3], // calibration T1 calT1[3], // calibration T1
co2[3], // { -243.911 , 0.187654 , 8.2e-06 } co2[3], // { -243.911 , 0.187654 , 8.2e-06 }
calT2[3]; // calibration T2-Hum calT2[3]; // calibration T2-Hum
float calH[2]; // calibration Hum
double c = 299.792458e6; double c = 299.792458e6;
@ -498,6 +499,9 @@ int get_CalData() {
memcpy(calT1+1, calibytes+93, 4); // 0x05*0x10+13 memcpy(calT1+1, calibytes+93, 4); // 0x05*0x10+13
memcpy(calT1+2, calibytes+97, 4); // 0x06*0x10+ 1 memcpy(calT1+2, calibytes+97, 4); // 0x06*0x10+ 1
memcpy(calH+0, calibytes+117, 4); // 0x07*0x10+ 5
memcpy(calH+1, calibytes+121, 4); // 0x07*0x10+ 9
memcpy(co2+0, calibytes+293, 4); // 0x12*0x10+ 5 memcpy(co2+0, calibytes+293, 4); // 0x12*0x10+ 5
memcpy(co2+1, calibytes+297, 4); // 0x12*0x10+ 9 memcpy(co2+1, calibytes+297, 4); // 0x12*0x10+ 9
memcpy(co2+2, calibytes+301, 4); // 0x12*0x10+13 memcpy(co2+2, calibytes+301, 4); // 0x12*0x10+13
@ -509,6 +513,7 @@ int get_CalData() {
return 0; return 0;
} }
/*
float get_Tc0(ui32_t f, ui32_t f1, ui32_t f2) { float get_Tc0(ui32_t f, ui32_t f1, ui32_t f2) {
// y = (f - f1) / (f2 - f1); // y = (f - f1) / (f2 - f1);
// y1 = (f - f1) / f2; // = (1 - f1/f2)*y // y1 = (f - f1) / f2; // = (1 - f1/f2)*y
@ -526,6 +531,21 @@ float get_Tc0(ui32_t f, ui32_t f1, ui32_t f2) {
// R/R0 = 1 + at + bt^2 + c(t-100)t^3 , R0 = 1000 Ohm, t/Celsius // R/R0 = 1 + at + bt^2 + c(t-100)t^3 , R0 = 1000 Ohm, t/Celsius
return t; return t;
} }
*/
// T_RH-sensor
float get_TH(ui32_t f, ui32_t f1, ui32_t f2) {
float *p = co2;
float *c = calT2;
float g = (float)(f2-f1)/(Rf2-Rf1), // gain
Rb = (f1*Rf2-f2*Rf1)/(float)(f2-f1), // ofs
Rc = f/g - Rb,
//R = (Rc + c[1]) * c[0],
//T = p[0] + p[1]*R + p[2]*R*R;
R = Rc * c[0],
T = (p[0] + p[1]*R + p[2]*R*R + c[1])*(1.0 + c[2]);
return T;
}
// T-sensor, platinum resistor
float get_Tc(ui32_t f, ui32_t f1, ui32_t f2) { float get_Tc(ui32_t f, ui32_t f1, ui32_t f2) {
float *p = co1; float *p = co1;
float *c = calT1; float *c = calT1;
@ -539,13 +559,32 @@ float get_Tc(ui32_t f, ui32_t f1, ui32_t f2) {
return T; return T;
} }
// rel.hum., capacitor
// (data:) ftp://ftp-cdc.dwd.de/pub/CDC/observations_germany/radiosondes/
// (diffAlt: Ellipsoid-Geoid)
float get_RH(ui32_t f, ui32_t f1, ui32_t f2, float T) {
float b0 = calH[0]/46.64; // empirical
float b1 = 0.1276; // empirical
float fh = (f-f1)/(float)(f2-f1);
float rh = 100.0 * (fh-b0)/b1;
float T0 = 0.0, T1 = -30.0; // T/C
if (T < T0) rh += T0 - T/5.5; // empir. temperature compensation
if (T < T1) rh *= 1.0 + (T1-T)/75.0; // empir. temperature compensation
if (rh < 0.0) rh = 0.0;
if (rh > 100.0) rh = 100.0;
if (T < -273.0) rh = -1.0;
return rh;
}
int get_PTU() { int get_PTU() {
int err=0, i; int err=0, i;
int bR, bc1, bT1, int bR, bc1, bT1,
bc2, bT2; bc2, bT2;
int bH;
ui32_t meas[12]; ui32_t meas[12];
float Tc = -273.15; float Tc = -273.15;
float Tc0 = -273.15; float TH = -273.15;
float RH = -1.0;
get_CalData(); get_CalData();
@ -564,14 +603,25 @@ int get_PTU() {
bT1 = calfrchk[0x05] && calfrchk[0x06]; bT1 = calfrchk[0x05] && calfrchk[0x06];
bc2 = calfrchk[0x12] && calfrchk[0x13]; bc2 = calfrchk[0x12] && calfrchk[0x13];
bT2 = calfrchk[0x13]; bT2 = calfrchk[0x13];
bH = calfrchk[0x07];
if (bR && bc1 && bT1) { if (bR && bc1 && bT1) {
Tc = get_Tc(meas[0], meas[1], meas[2]); Tc = get_Tc(meas[0], meas[1], meas[2]);
Tc0 = get_Tc0(meas[0], meas[1], meas[2]); //Tc0 = get_Tc0(meas[0], meas[1], meas[2]);
} }
gpx.T = Tc; gpx.T = Tc;
if (option_verbose == 4) if (bR && bc2 && bT2) {
TH = get_TH(meas[6], meas[7], meas[8]);
}
if (bH) {
RH = get_RH(meas[3], meas[4], meas[5], Tc); // TH, TH-Tc (sensorT - T)
}
gpx.RH = RH;
if (option_verbose == 4 && (gpx.crc & (crc_PTU | crc_GPS3))==0)
{ {
printf(" h: %8.2f # ", gpx.alt); // crc_GPS3 ? printf(" h: %8.2f # ", gpx.alt); // crc_GPS3 ?
@ -581,17 +631,25 @@ int get_PTU() {
printf(" # "); printf(" # ");
printf("3: %8d %8d %8d", meas[6], meas[7], meas[8]); printf("3: %8d %8d %8d", meas[6], meas[7], meas[8]);
printf(" # "); printf(" # ");
if (Tc > -273.0) {
printf(" T: %8.4f , T0: %8.4f ", Tc, Tc0); //if (Tc > -273.0 && RH > -0.5)
{
printf(" ");
printf(" Tc:%.2f ", Tc);
printf(" RH:%.1f ", RH);
printf(" TH:%.2f ", TH);
} }
printf("\n"); printf("\n");
if (gpx.alt > -100.0) { //if (gpx.alt > -400.0)
{
printf(" %9.2f ; %6.1f ; %6.1f ", gpx.alt, Rf1, Rf2); printf(" %9.2f ; %6.1f ; %6.1f ", gpx.alt, Rf1, Rf2);
printf("; %10.6f ; %10.6f ; %10.6f ;", calT1[0], calT1[1], calT1[2]); printf("; %10.6f ; %10.6f ; %10.6f ", calT1[0], calT1[1], calT1[2]);
printf(" %8d ; %8d ; %8d ", meas[0], meas[1], meas[2]); //printf("; %8d ; %8d ; %8d ", meas[0], meas[1], meas[2]);
printf("; %10.6f ; %10.6f ; %10.6f ;", calT2[0], calT2[1], calT2[2]); printf("; %10.6f ; %10.6f ", calH[0], calH[1]);
printf(" %8d ; %8d ; %8d" , meas[6], meas[7], meas[8]); //printf("; %8d ; %8d ; %8d" , meas[3], meas[4], meas[5]);
printf("; %10.6f ; %10.6f ; %10.6f ", calT2[0], calT2[1], calT2[2]);
//printf("; %8d ; %8d ; %8d" , meas[6], meas[7], meas[8]);
printf("\n"); printf("\n");
} }
} }
@ -1060,12 +1118,14 @@ int print_position(int ec) {
//if (option_verbose) //if (option_verbose)
{ {
//fprintf(stdout, " (%.1f %.1f %.1f) ", gpx.vN, gpx.vE, gpx.vU); //fprintf(stdout, " (%.1f %.1f %.1f) ", gpx.vN, gpx.vE, gpx.vU);
fprintf(stdout," vH: %4.1f D: %5.1f° vV: %3.1f ", gpx.vH, gpx.vD, gpx.vU); fprintf(stdout," vH: %4.1f D: %5.1f vV: %3.1f ", gpx.vH, gpx.vD, gpx.vU);
if (option_verbose == 3) fprintf(stdout," numSV: %02d ", gpx.numSV); if (option_verbose == 3) fprintf(stdout," numSV: %02d ", gpx.numSV);
} }
} }
if (option_ptu && !err0) { if (option_ptu && !err0) {
if (gpx.T > -273.0) printf(" T=%.1fC ", gpx.T); printf(" ");
if (gpx.T > -273.0) printf(" T=%.1fC ", gpx.T);
if (gpx.RH > -0.5) printf(" RH=%.0f%% ", gpx.RH);
} }

Wyświetl plik

@ -920,7 +920,7 @@ int get_GPSkoord(int N) {
fprintf(stdout, "lat: %.5f , lon: %.5f , alt: %.1f ", lat, lon, alt); fprintf(stdout, "lat: %.5f , lon: %.5f , alt: %.1f ", lat, lon, alt);
fprintf(stdout, " (d:%.1f)", diter); fprintf(stdout, " (d:%.1f)", diter);
if ( option_vel == 4 ) { if ( option_vel == 4 ) {
fprintf(stdout, " vH: %4.1f D: %5.1f° vV: %3.1f ", vH, vD, vU); fprintf(stdout, " vH: %4.1f D: %5.1f vV: %3.1f ", vH, vD, vU);
} }
fprintf(stdout, " sats: "); fprintf(stdout, " sats: ");
fprintf(stdout, "%02d %02d %02d %02d ", prn[i0], prn[i1], prn[i2], prn[i3]); fprintf(stdout, "%02d %02d %02d %02d ", prn[i0], prn[i1], prn[i2], prn[i3]);
@ -1030,7 +1030,7 @@ int get_GPSkoord(int N) {
ecef2elli(pos1s_ecef[0], pos1s_ecef[1], pos1s_ecef[2], &lat1s, &lon1s, &alt1s); ecef2elli(pos1s_ecef[0], pos1s_ecef[1], pos1s_ecef[2], &lat1s, &lon1s, &alt1s);
if (option_vergps == 8) { if (option_vergps == 8) {
fprintf(stdout, "\ndeltachips1s lat: %.6f , lon: %.6f , alt: %.2f ", lat1s, lon1s, alt1s); fprintf(stdout, "\ndeltachips1s lat: %.6f , lon: %.6f , alt: %.2f ", lat1s, lon1s, alt1s);
fprintf(stdout, " vH: %4.1f D: %5.1f° vV: %3.1f ", vH, vD, vU); fprintf(stdout, " vH: %4.1f D: %5.1f vV: %3.1f ", vH, vD, vU);
fprintf(stdout, "\n"); fprintf(stdout, "\n");
} }
} }
@ -1054,7 +1054,7 @@ int get_GPSkoord(int N) {
fprintf(stdout, "bancroft[%2d] lat: %.6f , lon: %.6f , alt: %.2f ", N, lat, lon, alt); fprintf(stdout, "bancroft[%2d] lat: %.6f , lon: %.6f , alt: %.2f ", N, lat, lon, alt);
fprintf(stdout, " (d:%.1f)", gpx.diter); fprintf(stdout, " (d:%.1f)", gpx.diter);
if (option_vel) { if (option_vel) {
fprintf(stdout, " vH: %4.1f D: %5.1f° vV: %3.1f ", vH, vD, vU); fprintf(stdout, " vH: %4.1f D: %5.1f vV: %3.1f ", vH, vD, vU);
} }
fprintf(stdout, " DOP["); fprintf(stdout, " DOP[");
for (j = 0; j < N; j++) { for (j = 0; j < N; j++) {
@ -1156,7 +1156,7 @@ int print_position(int ec) { // GPS-Hoehe ueber Ellipsoid
fprintf(stdout, " (d:%.1f)", gpx.diter); fprintf(stdout, " (d:%.1f)", gpx.diter);
} }
if (option_vel /*&& option_vergps >= 2*/) { if (option_vel /*&& option_vergps >= 2*/) {
fprintf(stdout," vH: %4.1f D: %5.1f° vV: %3.1f ", gpx.vH, gpx.vD, gpx.vU); fprintf(stdout," vH: %4.1f D: %5.1f vV: %3.1f ", gpx.vH, gpx.vD, gpx.vU);
} }
if (option_verbose) { if (option_verbose) {
if (option_vergps != 2) { if (option_vergps != 2) {

Wyświetl plik

@ -983,7 +983,7 @@ float get_TLC555freq(float count) {
float get_C_RH(float freq, float T) { // TLC555 astable: R_A=3.65k, R_B=338k float get_C_RH(float freq, float T) { // TLC555 astable: R_A=3.65k, R_B=338k
float R_B = 338e3; float R_B = 338e3;
float R_A = 3.65e3; float R_A = 3.65e3;
float td = 1e-6; float td = 0;
float C_RH = (1/freq - 2*td) / (LN2 * (R_A + 2*R_B)); float C_RH = (1/freq - 2*td) / (LN2 * (R_A + 2*R_B));
// freq/T compensation ... // freq/T compensation ...
return C_RH; return C_RH;
@ -1054,7 +1054,7 @@ int print_pos(int csOK) {
err |= get_GPSvel(); err |= get_GPSvel();
if (!err) { if (!err) {
//if (option_verbose == 2) fprintf(stdout, " "col_GPSvel"(%.1f , %.1f : %.1f)"col_TXT" ", datum.vx, datum.vy, datum.vD2); //if (option_verbose == 2) fprintf(stdout, " "col_GPSvel"(%.1f , %.1f : %.1f)"col_TXT" ", datum.vx, datum.vy, datum.vD2);
fprintf(stdout, " vH: "col_GPSvel"%.1f"col_TXT" D: "col_GPSvel"%.1f"col_TXT"° vV: "col_GPSvel"%.1f"col_TXT" ", datum.vH, datum.vD, datum.vV); fprintf(stdout, " vH: "col_GPSvel"%.1f"col_TXT" D: "col_GPSvel"%.1f"col_TXT" vV: "col_GPSvel"%.1f"col_TXT" ", datum.vH, datum.vD, datum.vV);
} }
if (option_verbose >= 2) { if (option_verbose >= 2) {
get_SN(); get_SN();
@ -1092,8 +1092,8 @@ int print_pos(int csOK) {
if (option_verbose) { if (option_verbose) {
err |= get_GPSvel(); err |= get_GPSvel();
if (!err) { if (!err) {
//if (option_verbose == 2) fprintf(stdout, " (%.1f , %.1f : %.1f°) ", datum.vx, datum.vy, datum.vD2); //if (option_verbose == 2) fprintf(stdout, " (%.1f , %.1f : %.1f) ", datum.vx, datum.vy, datum.vD2);
fprintf(stdout, " vH: %.1f D: %.1f° vV: %.1f ", datum.vH, datum.vD, datum.vV); fprintf(stdout, " vH: %.1f D: %.1f vV: %.1f ", datum.vH, datum.vD, datum.vV);
} }
if (option_verbose >= 2) { if (option_verbose >= 2) {
get_SN(); get_SN();

Wyświetl plik

@ -585,7 +585,7 @@ float Rf1, // ref-resistor f1 (750 Ohm)
calT1[3], // calibration T1 calT1[3], // calibration T1
co2[3], // { -243.911 , 0.187654 , 8.2e-06 } co2[3], // { -243.911 , 0.187654 , 8.2e-06 }
calT2[3]; // calibration T2-Hum calT2[3]; // calibration T2-Hum
float calH[2]; // calibration Hum ? float calH[2]; // calibration Hum
double c = 299.792458e6; double c = 299.792458e6;
@ -803,6 +803,7 @@ float get_RH(ui32_t f, ui32_t f1, ui32_t f2, float T) {
if (T < T1) rh *= 1.0 + (T1-T)/75.0; // empir. temperature compensation if (T < T1) rh *= 1.0 + (T1-T)/75.0; // empir. temperature compensation
if (rh < 0.0) rh = 0.0; if (rh < 0.0) rh = 0.0;
if (rh > 100.0) rh = 100.0; if (rh > 100.0) rh = 100.0;
if (T < -273.0) rh = -1.0;
return rh; return rh;
} }
@ -1348,14 +1349,14 @@ int print_position(int ec) {
//if (option_verbose) //if (option_verbose)
{ {
//fprintf(stdout, " (%.1f %.1f %.1f) ", gpx.vN, gpx.vE, gpx.vU); //fprintf(stdout, " (%.1f %.1f %.1f) ", gpx.vN, gpx.vE, gpx.vU);
fprintf(stdout," vH: %4.1f D: %5.1f° vV: %3.1f ", gpx.vH, gpx.vD, gpx.vU); fprintf(stdout," vH: %4.1f D: %5.1f vV: %3.1f ", gpx.vH, gpx.vD, gpx.vU);
if (option_verbose == 3) fprintf(stdout," sats: %02d ", gpx.numSV); if (option_verbose == 3) fprintf(stdout," sats: %02d ", gpx.numSV);
} }
} }
if (option_ptu && !err0) { if (option_ptu && !err0) {
printf(" "); printf(" ");
if (gpx.T > -273.0) printf(" T=%.1fC ", gpx.T); if (gpx.T > -273.0) printf(" T=%.1fC ", gpx.T);
if (gpx.RH > -0.5) printf(" RH=%.1f%% ", gpx.RH); if (gpx.RH > -0.5) printf(" RH=%.0f%% ", gpx.RH);
} }
if (option_crc) { if (option_crc) {