Changeset 11098 in ntrip


Ignore:
Timestamp:
Oct 17, 2026, 11:20:29 PM (18 hours ago)
Author:
stuerze
Message:

orbit-switching logic enhanced

Location:
trunk/BNC
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • trunk/BNC/CHANGELOG.md

    r11088 r11098  
    1010- ADDED: Combination: clocks of AC satellites without code biases of both reference signals are combined, but excluded from the clock datum (hourly message)
    1111- ADDED: Combination: hourly report of AC satellites persistently rejected as outliers, and of satellites skipped because fewer than 2 ACs provide corrections
     12- CHANGED: Combination: the orbits of a system come from the first stream in the table providing that system; after an outage of that stream, BNC switches back to it once it delivers again for 60 s (before, a single missing epoch moved the orbits permanently to another stream)
    1213- ADDED: Combination of APC (SSRA) and CoM (SSRC) streams together: with an ANTEX file the combination is done in the CoM frame, the orbits of the APC streams are converted to CoM; ACs not combined because of a different reference point are reported
    1314- ADDED: Option 'Reference Signals' (key ssrRefSignals): reference signals of the satellite clocks per GNSS for the combination (AC clock referral, code biases from the Bias SINEX file) and the SSR QC, default IGS Real-Time convention G:1W&2W R:1P&2P E:1C&5Q C:2I&6I J:1C&2L S:1C&5Q, e.g. for a switch of BDS to C1P/C5P or of QZSS to L1/L5
  • trunk/BNC/src/bnchelp.html

    r11091 r11098  
    84368436  </p>
    84378437  <p>
    8438     The sequence of entries in the 'Combine Corrections' table is not of importance.
    8439     Note that the orbit information in the final combination stream is just copied from one of the incoming streams.
    8440     The stream used for providing the orbits may vary over time: if the orbit-providing stream has an outage then BNC
    8441     switches
    8442     to the next remaining stream for getting hold of the orbit information.</p>
     8438    The sequence of entries in the 'Combine Corrections' table defines the preference for the orbits: the orbit
     8439    information in the final combination stream is copied from one of the incoming streams, per satellite system from
     8440    the first stream in the table that provides corrections for that system (a stream that excludes a system, e.g.
     8441    with 'C' in its exclusion list, or never sends it, is skipped). Put the stream with the best orbits of a system
     8442    first. If the orbit-providing stream has an outage, BNC switches to the next stream in the table that provides
     8443    corrections. As soon as a stream higher in the table delivers again without interruption for 60 seconds, BNC
     8444    switches back to it, so that a single missing epoch does not move the orbits permanently to another stream, and
     8445    the orbits do not change back and forth. Each switch is written to the combination logfile, e.g.</p>
     8446  <pre>
     84472026-10-15 00:01:50.000 Switching Master R CHC00 --> GMV00
     84482026-10-15 00:03:00.000 Switching Master R GMV00 --> CHC00 (preferred AC delivers again)
     8449</pre>
     8450  <p>
    84438451  <p>
    84448452    It is possible to specify only one Broadcast Ephemeris correction stream in the 'Combine Corrections' table.
  • trunk/BNC/src/combination/bnccomb.cpp

    r11087 r11098  
    10501050      }
    10511051    }
     1052    if (AC->numObs[sys] > 0) {
     1053      if (!AC->presentSince[sys].valid()) {
     1054        AC->presentSince[sys] = epoTime;
     1055      }
     1056    }
     1057    else {
     1058      AC->presentSince[sys].reset();
     1059    }
    10521060    out << epoTime.datestr().c_str()    << " "
    10531061        << epoTime.timestr().c_str()    << " "
    … …  
    10861094        }
    10871095      }
     1096    }
     1097  }
     1098
     1099  // Switch back to an AC higher in the table (the preferred one) once it
     1100  // delivers again without interruption for SWITCH_BACK_SEC, so that a single
     1101  // missing epoch of the preferred AC does not move the orbits permanently
     1102  // to another AC, and the orbits do not change back and forth
     1103  // ------------------------------------------------------------------------
     1104  const double SWITCH_BACK_SEC = 60.0;
     1105  QListIterator<cmbAC*> icPref(_ACs);
     1106  while (icPref.hasNext()) {
     1107    cmbAC* AC = icPref.next();
     1108    if (AC->name == _masterOrbitAC[sys]) {
     1109      break;
     1110    }
     1111    if (AC->numObs[sys] > 0 && AC->presentSince[sys].valid() &&
     1112        epoTime - AC->presentSince[sys] >= SWITCH_BACK_SEC) {
     1113      out <<  epoTime.datestr().c_str()    << " "
     1114          << epoTime.timestr().c_str()     << " "
     1115          << "Switching Master " << sys << " "
     1116          << _masterOrbitAC[sys].toLatin1().data() << " --> "
     1117          << AC->name.toLatin1().data()   << " (preferred AC delivers again)\n";
     1118      _masterOrbitAC[sys] = AC->name;
     1119      _masterIsAPC[sys]   = _cmbCoM ? false : AC->isAPC;
     1120      break;
    10881121    }
    10891122  }
  • trunk/BNC/src/combination/bnccomb.h

    r11087 r11098  
    106106    bool                 isAPC;
    107107    QString              attitudeSource; // "Computed", "SSR", or "Nominal"
     108    QMap<char, bncTime>  presentSince;   // per system: delivering without interruption since
    108109    QMap<char, unsigned> numObs;
    109110  };
Note: See TracChangeset for help on using the changeset viewer.