Konekäännös, jota äidinkielinen puhuja ei ole tarkistanut. Viitteenä on englanninkielinen versio.

AjoitusMuokkaa GitHubissaLähde: docs/TIMING-HIL.md

Ajoituksen hardware-in-the-loop: vedä antenni irti, pisteytä holdover

Telekommunikaatio- ja sähköyhtiöt testaavat ajoitusjärjestelmää poistamalla siltä GNSS:n ja katsomalla, mitä kello tekee. Kshana ei tee sitä heidän puolestaan eikä koske heidän laitteisiinsa. Se lukee käyttäjän omien mittarien tuottaman aikavirhetallenteen, jakaa sen käyttäjän ilmoittamien kahden ajan kohdalta ja mittaa jokaisen vaiheen julkisia ITU-T-maskeja vastaan. Skenaariotyyppi on holdover-test; esimerkkiskenaariot ovat scenarios/holdover-test-example.toml ja scenarios/holdover-test-ptp4l.toml.

Tämä on laitteistoturvallisuuden vaihe 1: passiivinen, vain vastaanotto, ei Kshanan RF-lähetystä (HARDWARE-SAFETY.md). Ohjeellinen ohjelmisto, ei tyyppihyväksytty laite. Kukaan ei ole luokitellut, hyväksynyt tai tarkistanut tätä menettelyä, eikä se kerro mitään siitä, täyttääkö järjestelmä suosituksen.

Aikavirhetallenteesta pisteytetty holdover-testi, moottorin v0.40.0 todellisesta ajosta skenaariolla scenarios/holdover-test-example.toml (601 näytettä 5 s välein). Operaattori poistaa GNSS:n hetkellä 600 s ja palauttaa sen hetkellä 2400 s; aikavirhe ajautuu arvoon 299 ns holdoverin lopussa, ylittää 100 ns budjetin 675 s kohdalla ja palaa 100 ns kaistan sisään 70 s palautuksen jälkeen. Tulokset: perustason maskit PASS, holdover-maskit FAIL, holdover-verhokäyrä FAIL, toipuminen RECOVERED. Mitattu maskia vasten, ei hyväksyntä. Ajat ovat operaattorin ilmoitus, eivät Kshanan varmentamia. Ohjeellinen: tutkimus- ja suunnittelutyökalun analyysitulos; ei tyyppihyväksytty navigointilaite eikä ihmishengen turvaamiseen tarkoitettu palvelu.Aikavirhetallenteesta pisteytetty holdover-testi, moottorin v0.40.0 todellisesta ajosta skenaariolla scenarios/holdover-test-example.toml (601 näytettä 5 s välein). Operaattori poistaa GNSS:n hetkellä 600 s ja palauttaa sen hetkellä 2400 s; aikavirhe ajautuu arvoon 299 ns holdoverin lopussa, ylittää 100 ns budjetin 675 s kohdalla ja palaa 100 ns kaistan sisään 70 s palautuksen jälkeen. Tulokset: perustason maskit PASS, holdover-maskit FAIL, holdover-verhokäyrä FAIL, toipuminen RECOVERED. Mitattu maskia vasten, ei hyväksyntä. Ajat ovat operaattorin ilmoitus, eivät Kshanan varmentamia. Ohjeellinen: tutkimus- ja suunnittelutyökalun analyysitulos; ei tyyppihyväksytty navigointilaite eikä ihmishengen turvaamiseen tarkoitettu palvelu.

Menettely#

Käyttäjä ajaa neljä vaihetta. Kshana ei tee yhtäkään niistä.

Askel Mitä käyttäjä tekee Mitä tallenne osoittaa
1. Lähtötaso Antaa järjestelmän toimia GNSS:ään lukittuna niin kauan kuin testi vaatii (ja merkitsee muistiin, kuinka monta päivää se oli ollut lukittuna aiemmin). Aikavirhe ohjattuna.
2. GNSS poistettu Poistaa GNSS:n testattavalta järjestelmältä, esimerkiksi antennikaapelin vastaanottimelta tai laboratorion oman simulaattorin lähdön, ja kirjaa ajan ylös. Tarkista ensin vastaanottimen valmistajan käsikirja: jotkin vastaanottimet syöttävät antennille virran, ja joissakin avoin portti tarvitsee päätevastuksen. Hetki, jolloin aikavirhe alkaa vaellella.
3. Holdover Jättää järjestelmän omalle oskillaattorilleen suunnitelluksi ajaksi. Järjestelmän holdover.
4. Palautuminen Palauttaa GNSS:n ja kirjaa ajan ylös. Aikavirhe palaa (tai ei palaa).

Kaksi asiaa, jotka käyttäjän on tehtävä, koska Kshana ei voi:

  • Ilmoita kaksi aikaa. gnss_removed_s ja gnss_restored_s ovat käyttäjän ilmoitus. Kshana ei havaitse poistoa tallenteesta eikä varmenna aikoja. Väärä aika siirtää vaiheiden rajoja ja siten tulosta.
  • Käytä samaa kelloa tallenteelle ja ajoille. Kellolokissa aika-akseli alkaa ensimmäisestä lukemasta, joten kaksi aikaa ovat sekunteja lokin ensimmäisestä rivistä.

Mitä tallentaa#

Mikä tahansa näistä, olemassa olevien lukijoiden clock_log kautta (CLOCK-LOG-FORMATS.md):

Mittari Formaatti Miten tallenne tehdään
linuxptp ptp4l (orja- tai rajakellon servo) ptp4l aja asetuksella -m ja säilytä rivit ptp4l[time]: master offset N sK freq ...
linuxptp phc2sys phc2sys rivit phc2sys[time]: CLOCK_REALTIME phc offset N sK ...
linuxptp ts2phc ts2phc rivit ts2phc[time]: /dev/ptpN offset N sK ...
chrony tracking.log chrony-tracking log tracking tiedostossa chrony.conf
chrony statistics.log chrony-statistics log statistics tiedostossa chrony.conf
TAPR TICC -laskuri ticc aikaleimatila vertausta vastaan
TimeLab ASCII -vienti timelab vaihe ilmoitetussa yksikössä
RINEX-kellotiedosto rinex-clk yksi kello
mikä tahansa muu samples tai csv_path time_s,time_error_ns -parit, tasavälisesti näytteistetty

Sillä on väliä, mitä tallenne mittaa. Servo-loki (linuxptp, chrony) tallentaa siirtymän, jonka daemon mittasi ja jota se korjaa: se on servo-ohjauksen alla jäljelle jäävä aikavirhe, ei kellon riippumaton mittaus UTC:tä vastaan. Testin holdover-vaiheen aikana, joka todella poistaa vertauksen, servo-loki näyttää silti sen, mitä daemon uskoi, mikä voi poiketa todellisesta virheestä. TICC tai muu laskuri riippumatonta vertausta vastaan on vahvempi tallenne; kerro, mitä käytit, kun raportoit tuloksen.

Skenaario#

kind = "holdover-test"
masks = ["prtc-a", "eprtc-a-holdover"]      # see docs/TELECOM-TIMING.md for the ids

[test]
gnss_removed_s = 600.0                      # the operator's statement
gnss_restored_s = 2400.0                    # omit if GNSS was not restored within the record
locked_duration_days = 5.0                  # how long it was locked before step 2 (sets the ePRTC-A period)
recovery_band_ns = 100.0                    # |TE| inside this counts as recovered
recovery_dwell_s = 60.0                     # ... and must stay inside this long

[series.clock_log]                          # or [series] samples = [[t, ns], ...] or csv_path = "..."
format = "ptp4l"
path = "holdover-2026-11-02.log"            # or text = "..." inline
kshana holdover-test.toml

Valinnaiset avaimet: budgets (nimi, max_abs_te_ns, lähde; telecom-timing-oletukset, kun puuttuvat) ja clock = "..." osiossa [series.clock_log] yhden lähteen valitsemiseksi lokista, jossa niitä on useita.

Mitä raportti sisältää#

  • steps: lähtötasolle, holdoverille ja palautumiselle alku ja loppu, näytemäärä sekä aikavirheen keskiarvo, rms-, suurin ja loppuarvo.
  • masks: jokainen nimeämäsi maski mitattuna vaiheessa, jonka ehto sen nimeää. Lukitulle kellolle kirjoitettu maski mitataan lähtötasolla; holdoverille tai autonomiselle kellolle kirjoitettu holdoverissa. Jokaisella tarkistuksella on raja, mitattu arvo, marginaali ja taulukko, josta se on jäljennetty. Maski, joka tarvitsee pidemmän tallenteen kuin vaihe antoi, on INCOMPLETE, ei koskaan ekstrapoloitu; maski, jota moottori ei voi arvioida tallenteen näyteväliä varten, on NOT-EVALUATED syineen.
  • holdover: murtotaajuussiirtymä, jonka järjestelmä piti (pienimmän neliösumman suoran kulmakerroin holdoverin aikavirheen läpi, yksikössä ns/s, mikä on miljardisosia), jäännös tuon suoran ympärillä, suurin absoluuttinen aikavirhe ja sen ajankohta sekä askel poiston hetkellä.
  • holdover_envelope: ITU-T G.8272.1 taulukon 3 ePRTC-A:n holdover-verhokäyrä arvosta locked_duration_days, sekä aika, jolloin se ylitetään ensimmäisen kerran.
  • budgets: aika poiston jälkeen, jolloin kukin aikavirhebudjetti ylitetään ensimmäisen kerran.
  • recovery: tuliko |TE| kaistan sisään ja pysyikö siinä viipymäajan, kuinka kauan GNSS:n paluun jälkeen se alkoi, huippu palautuksen jälkeen ja suurin askel peräkkäisten näytteiden välillä palautumisen aikana.
  • curves: lähtötaso- ja holdover-vaiheiden MTIE ja TDEV.
  • verdicts: yhden sanan yhteenveto vaihetta kohti.

Jokaisella luvulla on yksikkönsä ja tieto siitä, mistä se tuli, raportin lohkossa units.

Sanat ja rajat#

  • Tulos on mitattu maskia vastaan. Maskit on jäljennetty vapaasti ladattavista ITU-T-suosituksista (samat taulukot kuin tyypissä telecom-timing, lueteltu sivulla TELECOM-TIMING.md), ja jokainen kohta, jonka suositukset jättävät ”jatkotutkimuksen kohteeksi”, puuttuu, eikä sitä ole täytetty. Kshana ei sano, että kello tai järjestelmä täyttää suosituksen tai on hyväksytty sitä vastaan, eikä raportti sano sitä myöskään.
  • MODELLED. Vaiheiden logiikka, suoran sovitus ja palautumissääntö on tarkistettu tallenteilla, jotka on rakennettu kaavoista, joiden vastaukset tiedetään ennen ajoa; mitään laboratorion holdoveria ei ole pisteytetty ulkoista oraakkelia vastaan, eikä mikään kumppani tai laboratorio ole sopinut mistään. Ajoituslaboratoriota tarvittaisiin, ennen kuin mitään kellokohtaista lukua voitaisiin ylentää.
  • Mitä ei katsota, ilmoitettuna jokaisessa raportissa: oliko GNSS todella poistettu ja palautettu ilmoitettuina aikoina; mikä tahansa vaihe, jota käyttäjä ei tallentanut; maskit, jotka on määritelty 0,1 Hz:n suodattimen kautta tallenteelle, joka on näytteistetty hitaammin kuin kerran sekunnissa; mittarin oma mittausepävarmuus; sekä mikä tahansa suosituksen menettely aikavirhetallenteen ulkopuolella (lämpötilaprofiilit, pakettiverkon kuorma).
  • Palautumiskaista on testin oma valinta. Oletus 100 ns on PRTC-A:n suurin absoluuttinen aikavirhe (ITU-T G.8272); se on kätevä viiva, ei minkään suosituksen vaatimus palautumiselle.
  • Ei lähetyspolkua. Kshana lukee tiedostoja. Se ei tuota signaalia, ja GNSS:n poistaminen laboratoriossa tehdään laboratorion omilla laitteilla ja sen omalla luvalla.

Pinnat#

holdover-test on skenaariotyyppi, joten se ajetaan kaikkialla, missä tyyppejä ajetaan: kshana <scenario.toml>, Rust-rajapinta (kshana::api::run_toml), Python-sidos (kshana.run), WebAssembly- ja npm-koonti (sisäinen samples tai clock_log.text; tiedostoavaimet eivät ole siellä käytettävissä), MCP-palvelin (run_scenario, vain sisäinen sisältö) ja Kshana Studion skenaarioajuri. Kaksi skenaariotiedostoa on mukana toimitettu (kshana example holdover-test-example).