Changeset 8617 in ntrip for trunk/BNC


Ignore:
Timestamp:
Feb 28, 2019, 2:46:37 PM (6 years ago)
Author:
stuerze
Message:

a computed lock time is added for RTCM3 phase observations as an optional feed engine output

Location:
trunk/BNC/src
Files:
14 edited

Legend:

Unmodified
Added
Removed
  • trunk/BNC/src/RTCM3/RTCM3Decoder.cpp

    r8476 r8617  
    149149    }
    150150    GETBITS(i, 7);
     151    frqObs->_lockTime = lti2sec(type,i);
     152    frqObs->_lockTimeValid = (frqObs->_lockTime >= 0.0 && frqObs->_phaseValid);
    151153    frqObs->_slipCounter = i;
    152154    if (type == 1002 || type == 1004) {
     
    193195      }
    194196      GETBITS(i, 7);
     197      frqObs->_lockTime = lti2sec(type,i);
     198      frqObs->_lockTimeValid = (frqObs->_lockTime >= 0.0 && frqObs->_phaseValid);     
    195199      frqObs->_slipCounter = i;
    196200      if (type == 1004) {
     
    714718                      + (rrmod[numsat]) * LIGHTSPEED / 1000.0 / cd.wl;
    715719                  frqObs->_phaseValid = true;
     720                  frqObs->_lockTime = lti2sec(type,ll[count]);
     721                  frqObs->_lockTimeValid = (frqObs->_lockTime >= 0.0);                 
    716722                  frqObs->_slipCounter = ll[count];
    717723                }
     
    728734                      + rrmod[numsat] * LIGHTSPEED / 1000.0 / cd.wl;
    729735                  frqObs->_phaseValid = true;
     736                  frqObs->_lockTime = lti2sec(type,ll[count]);
     737                  frqObs->_lockTimeValid = (frqObs->_lockTime >= 0.0);                 
    730738                  frqObs->_slipCounter = ll[count];
    731739                }
     
    743751                          / cd.wl;
    744752                  frqObs->_phaseValid = true;
     753                  frqObs->_lockTime = lti2sec(type,ll[count]);
     754                  frqObs->_lockTimeValid = (frqObs->_lockTime >= 0.0);                 
    745755                  frqObs->_slipCounter = ll[count];
    746756                }
     
    761771                          / cd.wl;
    762772                  frqObs->_phaseValid = true;
     773                  frqObs->_lockTime = lti2sec(type,ll[count]);
     774                  frqObs->_lockTimeValid = (frqObs->_lockTime >= 0.0);                 
    763775                  frqObs->_slipCounter = ll[count];
    764776                }
     
    784796                          / cd.wl;
    785797                  frqObs->_phaseValid = true;
     798                  frqObs->_lockTime = lti2sec(type,ll[count]);
     799                  frqObs->_lockTimeValid = (frqObs->_lockTime >= 0.0);                 
    786800                  frqObs->_slipCounter = ll[count];
    787801                }
     
    802816                          / cd.wl;
    803817                  frqObs->_phaseValid = true;
     818                  frqObs->_lockTime = lti2sec(type,ll[count]);
     819                  frqObs->_lockTimeValid = (frqObs->_lockTime >= 0.0);                 
    804820                  frqObs->_slipCounter = ll[count];
    805821                }
     
    890906    }
    891907    GETBITS(i, 7);
     908    frqObs->_lockTime = lti2sec(type,i);
     909    frqObs->_lockTimeValid = (frqObs->_lockTime >= 0.0 && frqObs->_phaseValid);   
    892910    frqObs->_slipCounter = i;
    893911    if (type == 1010 || type == 1012) {
     
    934952      }
    935953      GETBITS(i, 7);
     954      frqObs->_lockTime = lti2sec(type,i);
     955      frqObs->_lockTimeValid = (frqObs->_lockTime >= 0.0 && frqObs->_phaseValid);     
    936956      frqObs->_slipCounter = i;
    937957      if (type == 1012) {
  • trunk/BNC/src/RTCM3/RTCM3coDecoder.cpp

    r8408 r8617  
    444444    satPhaseBias._dispBiasConstistInd = _phaseBias.DispersiveBiasConsistencyIndicator;
    445445    satPhaseBias._MWConsistInd        = _phaseBias.MWConsistencyIndicator;
    446     satPhaseBias._yawDeg     = _phaseBias.Sat[ii].YawAngle * 180.0 / M_PI;
    447     satPhaseBias._yawDegRate = _phaseBias.Sat[ii].YawRate * 180.0 / M_PI;
     446    satPhaseBias._yaw     = _phaseBias.Sat[ii].YawAngle;
     447    satPhaseBias._yawRate = _phaseBias.Sat[ii].YawRate;
    448448    for (unsigned jj = 0; jj < _phaseBias.Sat[ii].NumberOfPhaseBiases; jj++) {
    449449      const PhaseBias::PhaseBiasSat::PhaseBiasEntry& biasEntry = _phaseBias.Sat[ii].Biases[jj];
  • trunk/BNC/src/bnccaster.cpp

    r8397 r8617  
    9696  }
    9797
     98  _printLockTime = settings.value("printLockTime",false).toBool();
    9899  _samplingRateMult10 = int(settings.value("outSampl").toString().split("sec").first().toDouble() * 10.0);
    99100  _outWait            = settings.value("outWait").toDouble();
     
    172173           << setw(4)  << obs._time.gpsw()                      << " "
    173174           << setw(14) << setprecision(7) << obs._time.gpssec() << " "
    174            << bncRinex::asciiSatLine(obs) << endl;
     175           << bncRinex::asciiSatLine(obs,_printLockTime) << endl;
    175176
    176177      string hlpStr = oStr.str();
     
    317318                 << setprecision(7) << obs._time.gpssec() << endl;
    318319          }
    319           oStr << obs._staID << ' ' << bncRinex::asciiSatLine(obs) << endl;
     320          oStr << obs._staID << ' '
     321               << bncRinex::asciiSatLine(obs,_printLockTime) << endl;
    320322          if (!it.hasNext()) {
    321323            oStr << endl;
  • trunk/BNC/src/bnccaster.h

    r8397 r8617  
    7777   QList<QByteArray>               _staIDs;
    7878   QList<bncGetThread*>            _threads;
     79   bool                            _printLockTime;   
    7980   int                             _samplingRateMult10;
    8081   double                          _outWait;
  • trunk/BNC/src/bnchelp.html

    r8562 r8617  
    26882688
    26892689<p>
     2690An optional valid 'Lock Time' is only presented for observations from RTCM Version 3 streams. The parameter provides a measure of the amount of time that has elapsed during which the receiver has maintained continuous lock on that satellite signal. If a cycle slip occurs during the previous measurement cycle, the lock time will be reset to Zero. The 'Lock Time' could be of interest becuase the Lock Time Inficator is different for different RTCM3 measurement types. Hence, the 'Lock Time' in seconds is computed with the respective calculation rule.
     2691</p>
     2692
     2693<p>
    26902694The following table describes the format of BNC's synchronized output of GNSS observations which consists of 'Epoch Records' and 'Observation Records'. Each Epoch Record is followed by one or more Observation Records. The Observation Record is repeated for each satellite having been observed in the current epoch. The length of an Observation Record is given by the number of observation types for this satellite.
    26912695</p>
     
    27302734<tr><td>Observation Code</td><td><b>S</b>2W</td><td>1X,A3</td></tr>
    27312735<tr><td>Observed Signal Strength &nbsp; &nbsp;</td><td>34.750</td><td>1X,F8.3</td></tr>
     2736
     2737<tr><td><u>Lock Time (optional)</u></td><td></td><td></td></tr>
     2738<tr><td>Observation Code</td><td><b>T</b>2W</td><td>1X,A3</td></tr>
     2739<tr><td>Computed Lock Time &nbsp; &nbsp;</td><td>937.000</td><td>1X,F8.3</td></tr>
    27322740
    27332741</table>
  • trunk/BNC/src/bncrinex.cpp

    r8500 r8617  
    601601// One Line in ASCII (Internal) Format
    602602////////////////////////////////////////////////////////////////////////////
    603 string bncRinex::asciiSatLine(const t_satObs& obs) {
     603string bncRinex::asciiSatLine(const t_satObs& obs, bool printLockTime) {
    604604
    605605  ostringstream str;
     
    630630          << left  << setw(3) << "S" + frqObs->_rnxType2ch << ' '
    631631          << right << setw(8) << setprecision(3) << frqObs->_snr;
     632    }   
     633    if (frqObs->_lockTimeValid && printLockTime) {
     634      str << ' '
     635          << left  << setw(3) << "T" + frqObs->_rnxType2ch << ' '
     636          << right << setw(9) << setprecision(3) << frqObs->_lockTime;
    632637    }
    633638  }
  • trunk/BNC/src/bncrinex.h

    r8397 r8617  
    4949                               bool rnxV3,
    5050                               QDateTime* nextEpoch = 0);
    51    static std::string asciiSatLine(const t_satObs& obs);
     51   static std::string asciiSatLine(const t_satObs& obs, bool printLockTime);
    5252
    5353 private:
  • trunk/BNC/src/bncsettings.cpp

    r8563 r8617  
    145145    setValue_p("outFile",             "");
    146146    setValue_p("outUPort",            "");
     147    setValue_p("printLockTime",       "0");   
    147148    // Serial Output
    148149    setValue_p("serialMountPoint",    "");
  • trunk/BNC/src/bncutils.cpp

    r8417 r8617  
    949949}
    950950
     951// Convert RTCM3 lock-time indicator to lock time in seconds
     952////////////////////////////////////////////////////////////////////////////
     953double lti2sec(int type, int lti) {
     954
     955  if ( (type>=1001 && type<=1004) ||
     956       (type>=1009 && type<=1012)    ) { // RTCM3 msg 100[1...4] and 10[09...12]
     957         if (lti<   0) return  -1;
     958    else if (lti<  24) return   1*lti;      // [  0   1   23]
     959    else if (lti<  48) return   2*lti-24;   // [ 24   2   70]
     960    else if (lti<  72) return   4*lti-120;  // [ 72   4  164]
     961    else if (lti<  96) return   8*lti-408;  // [168   8  352]
     962    else if (lti< 120) return  16*lti-1176; // [360  16  728]
     963    else if (lti< 127) return  32*lti-3096; // [744  32  905]
     964    else if (lti==127) return  937;
     965    else               return  -1;
     966  }
     967  else if (type%10==2 || type%10==3 ||
     968           type%10==4 || type%10==5) {  // RTCM3 MSM-2/-3/-4/-5
     969    switch(lti) {
     970      case( 0) : return      0;
     971      case( 1) : return     32e-3;
     972      case( 2) : return     64e-3;
     973      case( 3) : return    128e-3;
     974      case( 4) : return    256e-3;
     975      case( 5) : return    512e-3;
     976      case( 6) : return   1024e-3;
     977      case( 7) : return   2048e-3;
     978      case( 8) : return   4096e-3;
     979      case( 9) : return   8192e-3;
     980      case(10) : return  16384e-3;
     981      case(11) : return  32768e-3;
     982      case(12) : return  65536e-3;
     983      case(13) : return 131072e-3;
     984      case(14) : return 262144e-3;
     985      case(15) : return 524288e-3;
     986      default  : return     -1;
     987    };
     988  }
     989  else if (type%10==6 || type%10==7) {  // RTCM3 MSM-6 and MSM-7
     990         if (lti<   0) return (     -1               );
     991    else if (lti<  64) return (      1*lti           )*1e-3;
     992    else if (lti<  96) return (      2*lti-64        )*1e-3;
     993    else if (lti< 128) return (      4*lti-256       )*1e-3;
     994    else if (lti< 160) return (      8*lti-768       )*1e-3;
     995    else if (lti< 192) return (     16*lti-2048      )*1e-3;
     996    else if (lti< 224) return (     32*lti-5120      )*1e-3;
     997    else if (lti< 256) return (     64*lti-12288     )*1e-3;
     998    else if (lti< 288) return (    128*lti-28672     )*1e-3;
     999    else if (lti< 320) return (    256*lti-65536     )*1e-3;
     1000    else if (lti< 352) return (    512*lti-147456    )*1e-3;
     1001    else if (lti< 384) return (   1024*lti-327680    )*1e-3;
     1002    else if (lti< 416) return (   2048*lti-720896    )*1e-3;
     1003    else if (lti< 448) return (   4096*lti-1572864   )*1e-3;
     1004    else if (lti< 480) return (   8192*lti-3407872   )*1e-3;
     1005    else if (lti< 512) return (  16384*lti-7340032   )*1e-3;
     1006    else if (lti< 544) return (  32768*lti-15728640  )*1e-3;
     1007    else if (lti< 576) return (  65536*lti-33554432  )*1e-3;
     1008    else if (lti< 608) return ( 131072*lti-71303168  )*1e-3;
     1009    else if (lti< 640) return ( 262144*lti-150994944 )*1e-3;
     1010    else if (lti< 672) return ( 524288*lti-318767104 )*1e-3;
     1011    else if (lti< 704) return (1048576*lti-671088640 )*1e-3;
     1012    else if (lti==704) return (2097152*lti-1409286144)*1e-3;
     1013    else               return (     -1               );
     1014  }
     1015  else {
     1016    return -1;
     1017  };
     1018};
  • trunk/BNC/src/bncutils.h

    r8011 r8617  
    142142int          factorial(int n);
    143143
     144/** Convert RTCM3 lock-time indicator to lock time in seconds
     145* depending on input message format. Returns -1 if format is
     146* unknown or indicator is invalid
     147*/
     148double       lti2sec(int type, int lti);
    144149
    145150// CRC24Q checksum calculation function (only full bytes supported).
  • trunk/BNC/src/bncwindow.cpp

    r8562 r8617  
    307307  _outFileLineEdit    = new QLineEdit(settings.value("outFile").toString());
    308308  _outUPortLineEdit   = new QLineEdit(settings.value("outUPort").toString());
     309  _printLockTimeCheckBox = new QCheckBox();
     310  _printLockTimeCheckBox->setCheckState(Qt::CheckState(settings.value("printLockTime").toInt())); 
    309311
    310312  connect(_outPortLineEdit, SIGNAL(textChanged(const QString &)),
     
    312314
    313315  connect(_outFileLineEdit, SIGNAL(textChanged(const QString &)),
     316          this, SLOT(slotBncTextChanged()));
     317         
     318  connect(_printLockTimeCheckBox, SIGNAL(stateChanged(int)),
    314319          this, SLOT(slotBncTextChanged()));
    315320
     
    824829  sLayout->addWidget(new QLabel("Port (unsynchronized)"),           4, 0);
    825830  sLayout->addWidget(_outUPortLineEdit,                             4, 1);
    826   sLayout->addWidget(new QLabel(""),                                5, 1);
    827   sLayout->setRowStretch(6, 999);
     831  sLayout->addWidget(new QLabel("Print lock time"),                 5, 0);
     832  sLayout->addWidget(_printLockTimeCheckBox,                        5, 1);
     833  sLayout->addWidget(new QLabel(""),                                6, 1);
     834  sLayout->setRowStretch(7, 999);
    828835
    829836  sgroup->setLayout(sLayout);
     
    13421349  _outFileLineEdit->setWhatsThis(tr("<p>Specify the full path to a file where synchronized observations are saved in plain ASCII format.</p><p>Beware that the size of this file can rapidly increase depending on the number of incoming streams. <i>[key: outFile]</i></p>"));
    13431350  _outUPortLineEdit->setWhatsThis(tr("<p>BNC can produce unsynchronized observations in a plain ASCII format on your local host via IP port.</p><p>Specify a port number to activate this function. <i>[key: outUPort]</i></p>"));
     1351  _printLockTimeCheckBox->setWhatsThis(tr("<p>Print the lock time in seconds in the feed engine output.</p>"));
    13441352
    13451353  // WhatsThis, Serial Output
     
    13731381  // WhatsThis, PPP (1)
    13741382  // ------------------
    1375   _pppWidgets._dataSource->setWhatsThis(tr("<p>Select 'Real-time Streams' for real-time PPP from RTCM streams or 'RINEX Files' for post processing PPP from RINEX files.</p><p><ul><li>Real-time PPP requires that you pull a RTCM stream carrying GNSS observations plus a stream providing corrections to Broadcast Ephemeris. If the observations stream does not contain Broadcast Ephemeris then you must in addition pull a Broadcast Ephemeris stream like 'RTCM3EPH' from Ntrip Broadcaster <u>products.igs-ip.net</u>.<br></li><li>Post processing PPP requires RINEX Observation files, RINEX Navigation files and a file with corrections to Broadcast Ephemeris in plain ASCII format as saved beforehand using BNC.</li></ul></p><p>Note that BNC allows to carry out PPP solutions simultaneously for several stations. <i>[key: PPP/dataSource]</i></p>"));
    1376   _pppWidgets._rinexObs->setWhatsThis(tr("<p>Specify the RINEX Observation file. <i>[key: PPP/rinexObs]</i></p>"));
    1377   _pppWidgets._rinexNav->setWhatsThis(tr("<p>Specify the RINEX Navigation file. <i>[key: PPP/rinexNav]</i></p>"));
    1378   _pppWidgets._corrMount->setWhatsThis(tr("<p>Specify a 'mountpoint' from the 'Streams' canvas below which provides corrections to Broadcast Ephemeris.</p><p>If you don't specify a corrections stream via this option, BNC will fall back to Single Point Positioning (SPP, positioning from observations and Broadcast Ephemeris only) instead of doing PPP. <i>[key: PPP/corrMount]</i></p>"));
    1379   _pppWidgets._corrFile->setWhatsThis(tr("<p>Specify the Broadcast Ephemeris Corrections file as saved beforehand using BNC.</p><p>If you don't specify corrections by this option, BNC will fall back to Single Point Positioning (SPP, positioning from RINEX Obs and RINEX Nav files only) instead of doing PPP. <i>[key: PPP/corrFile]</i></p>"));
    1380   _pppWidgets._antexFile->setWhatsThis(tr("<p>Observations in RTCM streams or RINEX files should be referred to the receiver's and to the satellite's Antenna Phase Center (APC) and therefore be corrected for<ul><li>Receiver APC offsets</li><li>Receiver APC variations</li><li>Satellite APC offsets.</li></ul> Specify the full path to an IGS 'ANTEX file' which contains APC offsets and variations.</p><p>If you don't specify an 'ANTEX file' then observations will not be corrected for APC offsets and variations. <i>[key: PPP/antexFile]</i></p>"));
    1381   _pppWidgets._blqFile->setWhatsThis(tr("<p>Enter the full path to an ocean loading file in BLQ format. It contains a record for each site, which shows a header with information on the ocean tide model, the site name and the geographic coordinates. The first three rows of numbers designate amplitudes (meter), radial, west, south, and are followed by three lines with the corresponding phase values (degrees). <i>[key: PPP/blqFile]</i></p>"));
    1382   _pppWidgets._crdFile->setWhatsThis(tr("<p>Enter the full path to an ASCII file which specifies the streams or files of those stations you want to process. Specifying a 'Coordinates file' is optional. If it exists, it should contain one record per station with the following parameters separated by blank character:<p><ul><li>Specify the station either by<ul><li>the 'Mountpoint' of the station's RTCM stream (when in real-time PPP mode), or</li><li>the 4-charater station ID of the RINEX Observations file (when in post processing PPP mode).</li></ul></li><li>Approximate X,Y,Z coordinate of station's Antenna Reference Point [m] (ARP, specify '0.0 0.0 0.0' if unknown).</li><li>North, East and Up component of antenna eccentricity [m] (specify '0.0 0.0 0.0' if unknown).</li><li>20 Characters describing the antenna type and radome following the IGS 'ANTEX file' standard (leave blank if unknown).</li><li>Receiver type following the naming conventions for IGS equipment.</li></ul></p><p>Records with exclamation mark '!' in the first column or blank records will be interpreted as comment lines and ignored. <i>[key: PPP/crdFile]</i></p>"));
    1383   _pppWidgets._v3filenames->setWhatsThis(tr("<p>Tick 'Version 3 filenames' to let BNC create so-called extended filenames for PPP logfiles, NMEA files and SINEX Troposphere files following the RINEX Version 3 standard.</p><p>Default is an empty check box, meaning to create filenames following the RINEX Version 2 standard. The file content is not affected by this option. It only concerns the filenames. <i>[key: PPP/v3filenames]</i></p>"));
    1384   _pppWidgets._logPath->setWhatsThis(tr("<p>Specify a directory for saving daily PPP logfiles. If the specified directory does not exist, BNC will not create such files.</p><p>Default is an empty option field, meaning that no PPP logfiles shall be produced. <i>[key: PPP/logPath]</i></p>"));
    1385   _pppWidgets._nmeaPath->setWhatsThis(tr("<p>Specify a directory for saving coordinates in daily NMEA files. If the specified directory does not exist, BNC will not create such files.</p><p>Default is an empty option field, meaning that no NMEA file shall be produced. <i>[key: PPP/nmeaPath]</i></p>"));
    1386   _pppWidgets._snxtroPath->setWhatsThis(tr("<p>Specify a directory for saving SINEX Troposphere files. If the specified directory does not exist, BNC will not create such files.</p><p>Default is an empty option field, meaning that no SINEX Troposphere files shall be produced. <i>[key: PPP/snxtroPath]</i></p>"));
    1387   _pppWidgets._snxtroIntr->setWhatsThis(tr("<p>Select a length for SINEX Troposphere files.</p><p>Default 'SNX TRO interval' for saving SINEX Troposphere files on disk is '1 hour'. <i>[key: PPP/snxtroIntr]</i></p>"));
    1388   _pppWidgets._snxtroSampl->setWhatsThis(tr("<p>Select a 'Sampling' rate for saving troposphere parameters. <i>[key: PPP/snxtroSampl]</i></p>"));
    1389   _pppWidgets._snxtroAc->setWhatsThis(tr("<p>Specify a 3-character abbreviation describing you as the generating Analysis Center (AC) in your SINEX troposphere files. <i>[key: PPP/snxtroAc]</i></p>"));
    1390   _pppWidgets._snxtroSol->setWhatsThis(tr("<p>Specify a 4-character solution ID to allow a distingtion between different solutions per AC. <i>[key: PPP/snxtroSol]</i></p>"));
     1383  _pppWidgets._dataSource->setWhatsThis(tr("<p>Select 'Real-time Streams' for real-time PPP from RTCM streams or 'RINEX Files' for post processing PPP from RINEX files.</p><p><ul><li>Real-time PPP requires that you pull a RTCM stream carrying GNSS observations plus a stream providing corrections to Broadcast Ephemeris. If the observations stream does not contain Broadcast Ephemeris then you must in addition pull a Broadcast Ephemeris stream like 'RTCM3EPH' from Ntrip Broadcaster <u>products.igs-ip.net</u>.<br></li><li>Post processing PPP requires RINEX Observation files, RINEX Navigation files and a file with corrections to Broadcast Ephemeris in plain ASCII format as saved beforehand using BNC.</li></ul></p><p>Note that BNC allows to carry out PPP solutions simultaneously for several stations.</p>"));
     1384  _pppWidgets._rinexObs->setWhatsThis(tr("<p>Specify the RINEX Observation file.</p>"));
     1385  _pppWidgets._rinexNav->setWhatsThis(tr("<p>Specify the RINEX Navigation file.</p>"));
     1386  _pppWidgets._corrMount->setWhatsThis(tr("<p>Specify a 'mountpoint' from the 'Streams' canvas below which provides corrections to Broadcast Ephemeris.</p><p>If you don't specify a corrections stream via this option, BNC will fall back to Single Point Positioning (SPP, positioning from observations and Broadcast Ephemeris only) instead of doing PPP.</p>"));
     1387  _pppWidgets._corrFile->setWhatsThis(tr("<p>Specify the Broadcast Ephemeris Corrections file as saved beforehand using BNC.</p><p>If you don't specify corrections by this option, BNC will fall back to Single Point Positioning (SPP, positioning from RINEX Obs and RINEX Nav files only) instead of doing PPP.</p>"));
     1388  _pppWidgets._antexFile->setWhatsThis(tr("<p>Observations in RTCM streams or RINEX files should be referred to the receiver's and to the satellite's Antenna Phase Center (APC) and therefore be corrected for<ul><li>Receiver APC offsets</li><li>Receiver APC variations</li><li>Satellite APC offsets.</li></ul> Specify the full path to an IGS 'ANTEX file' which contains APC offsets and variations.</p><p>If you don't specify an 'ANTEX file' then observations will not be corrected for APC offsets and variations.</p>"));
     1389  _pppWidgets._crdFile->setWhatsThis(tr("<p>Enter the full path to an ASCII file which specifies the streams or files of those stations you want to process. Specifying a 'Coordinates file' is optional. If it exists, it should contain one record per station with the following parameters separated by blank character:<p><ul><li>Specify the station either by<ul><li>the 'Mountpoint' of the station's RTCM stream (when in real-time PPP mode), or</li><li>the 4-charater station ID of the RINEX Observations file (when in post processing PPP mode).</li></ul></li><li>Approximate X,Y,Z coordinate of station's Antenna Reference Point [m] (ARP, specify '0.0 0.0 0.0' if unknown).</li><li>North, East and Up component of antenna eccentricity [m] (specify '0.0 0.0 0.0' if unknown).</li><li>20 Characters describing the antenna type and radome following the IGS 'ANTEX file' standard (leave blank if unknown).</li><li>Receiver type following the naming conventions for IGS equipment.</li></ul></p><p>Records with exclamation mark '!' in the first column or blank records will be interpreted as comment lines and ignored.</p>"));
     1390  _pppWidgets._v3filenames->setWhatsThis(tr("<p>Tick 'Version 3 filenames' to let BNC create so-called extended filenames for PPP logfiles, NMEA files and SINEX Troposphere files following the RINEX Version 3 standard.</p><p>Default is an empty check box, meaning to create filenames following the RINEX Version 2 standard. The file content is not affected by this option. It only concerns the filenames.</p>"));
     1391  _pppWidgets._logPath->setWhatsThis(tr("<p>Specify a directory for saving daily PPP logfiles. If the specified directory does not exist, BNC will not create such files.</p><p>Default is an empty option field, meaning that no PPP logfiles shall be produced.</p>"));
     1392  _pppWidgets._nmeaPath->setWhatsThis(tr("<p>Specify a directory for saving coordinates in daily NMEA files. If the specified directory does not exist, BNC will not create such files.</p><p>Default is an empty option field, meaning that no NMEA file shall be produced.</p>"));
     1393  _pppWidgets._snxtroPath->setWhatsThis(tr("<p>Specify a directory for saving SINEX Troposphere files. If the specified directory does not exist, BNC will not create such files.</p><p>Default is an empty option field, meaning that no SINEX Troposphere files shall be produced.</p>"));
     1394  _pppWidgets._snxtroIntr->setWhatsThis(tr("<p>Select a length for SINEX Troposphere files.</p><p>Default 'SNX TRO interval' for saving SINEX Troposphere files on disk is '1 hour'.</p>"));
     1395  _pppWidgets._snxtroSampl->setWhatsThis(tr("<p>Select a 'Sampling' rate for saving troposphere parameters.</p>"));
     1396  _pppWidgets._snxtroAc->setWhatsThis(tr("<p>Specify a 3-character abbreviation describing you as the generating Analysis Center (AC) in your SINEX troposphere files.</p>"));
     1397  _pppWidgets._snxtroSol->setWhatsThis(tr("<p>Specify a 4-character solution ID to allow a distingtion between different solutions per AC.</p>"));
    13911398
    13921399  // WhatsThis, PPP (3)
     
    15151522  delete _outFileLineEdit;
    15161523  delete _outUPortLineEdit;
     1524  delete _printLockTimeCheckBox; 
    15171525  delete _serialMountPointLineEdit;
    15181526  delete _serialPortNameLineEdit;
     
    19671975  settings.setValue("outSampl",    _outSamplComboBox->currentText());
    19681976  settings.setValue("outFile",     _outFileLineEdit->text());
    1969   settings.setValue("outUPort",    _outUPortLineEdit->text());
     1977  settings.setValue("printLockTime",_printLockTimeCheckBox->checkState());    settings.setValue("outUPort",    _outUPortLineEdit->text());
     1978
    19701979// Serial Output
    19711980  settings.setValue("serialMountPoint",_serialMountPointLineEdit->text());
  • trunk/BNC/src/bncwindow.h

    r8397 r8617  
    138138    QLineEdit* _outPortLineEdit;
    139139    QLineEdit* _outUPortLineEdit;
     140    QCheckBox* _printLockTimeCheckBox;       
    140141    QLineEdit* _ephOutPortLineEdit;
    141142    QLineEdit* _corrPortLineEdit;
  • trunk/BNC/src/satObs.cpp

    r8483 r8617  
    284284    }
    285285    *out << satPhaseBias._prn.toString() << ' '
    286          << setw(12) << setprecision(8) << satPhaseBias._yawDeg << ' '
    287          << setw(12) << setprecision(8) << satPhaseBias._yawDegRate << "   "
     286         << setw(12) << setprecision(8) << satPhaseBias._yaw  * 180.0 / M_PI << ' '
     287         << setw(12) << setprecision(8) << satPhaseBias._yawRate  * 180.0 / M_PI<< "   "
    288288         << setw(2) << satPhaseBias._bias.size();
    289289    for (unsigned ii = 0; ii < satPhaseBias._bias.size(); ii++) {
     
    330330
    331331    int numBias;
    332     in >> satPhaseBias._prn  >> satPhaseBias._yawDeg >> satPhaseBias._yawDegRate
    333       >> numBias;
     332    double yawDeg, yawDegRate;
     333    in >> satPhaseBias._prn  >> yawDeg >> yawDegRate  >> numBias;
     334    satPhaseBias._yaw = yawDeg * M_PI / 180.0;
     335    satPhaseBias._yawRate = yawDegRate * M_PI / 180.0;
    334336
    335337    while (in.good()) {
  • trunk/BNC/src/satObs.h

    r8483 r8617  
    2323    _snr             = 0.0;
    2424    _snrValid        = false;
     25    _lockTime        = 0.0;
     26    _lockTimeValid   = false;   
    2527    _slip            = false;
    2628    _slipCounter     = 0;
     
    3638  double            _snr;
    3739  bool              _snrValid;
     40  double            _lockTime;
     41  bool              _lockTimeValid;   
    3842  bool              _slip;
    3943  int               _slipCounter;
     
    164168    _dispBiasConstistInd = 0;
    165169    _MWConsistInd = 0;
    166     _yawDeg     = 0.0;
    167     _yawDegRate = 0.0;
     170    _yaw        = 0.0;
     171    _yawRate    = 0.0;
    168172  }
    169173  static void writeEpoch(std::ostream* out, const QList<t_satPhaseBias>& biasList);
     
    175179  unsigned int                _dispBiasConstistInd; // not satellite specific
    176180  unsigned int                _MWConsistInd;        // not satellite specific
    177   double                      _yawDeg;
    178   double                      _yawDegRate;
     181  double                      _yaw;
     182  double                      _yawRate;
    179183  std::vector<t_frqPhaseBias> _bias;
    180184};
Note: See TracChangeset for help on using the changeset viewer.