Ügyféldokumentáció

Adatelemző szoftver teljes dokumentáció

Ez az oldal a jelenlegi szoftver működésének teljes referencia leírása: funkciók, mérési logika, fogalmak, képletek, paraméterek, exportok és gyakorlati használati útmutató.

Dokumentáció verzió: jelenlegi kódbázis állapot (frissítve: 2026-05-18).

Áttekintés

A szoftver fő célja több AM1 mérési fájl egyesítése és automatizált elemzése ügyfél szintű riportoláshoz.

  • Több `.am1` fájl importja egyszerre (`part_0000.am1`, `part_0001.am1`, ...).
  • 2/3/4 csatorna automatikus felismerése.
  • ADC család auto-detekció a nyers mintatartomány alapján (ADS1015-szerű / ADS1115-szerű skálázás).
  • Automatikus trimming, ha a payload nem osztható frame mérettel.
  • Összefűzött idővonal és csatornánkénti engineering görbe (`mm` vagy `bar`).
  • Többcsatornás checkboxos nézet (`All` + egyedi csatornák), külön analysis channel választással.
  • Csatornánként külön mértékegység-választó és skála-beállítás: `mm` vagy `bar`.
  • `mm` módban csatornánként választható: `File scale`, `40 mm`, `80 mm`.
  • `bar` módban csatornánként külön `min` és `max` tartomány állítható.
  • Eseménydetektálás belső `shot / flush / unknown` típusokkal, amelyek a felületen `Squeeze / Lubrication / Unknown` néven látszanak.
  • Típusfüggő duration, stroke és slope ellenőrzés, egyenkénti hibajelzésekkel.
  • Ciklusdetektálás (`shot + flush`), cycle target/tolerance alapú bad cycle jelölés.
  • Downtime számítás Squeeze/Lubrication eseménymentes szakaszokból, minimum-idő küszöb szűréssel.
  • Valós idő megjelenítés fájlból felismert vagy manuálisan megadott méréskezdet alapján.
  • Kapcsolható csatorna baseline-align kizárólag vizuális célra.
  • Külön `/gaps` tesztoldal gap és fájlhatár vizualizációhoz.
  • KPI-k, events/cycles táblák, cycle trend chart, fájlhatár-jelölések, CSV exportok és nyomtatható/PDF riport.

Az elemzés mindig egy kijelölt csatornán fut. Több csatorna egyszerre is megjeleníthető, de az eseménydetektálás és a ciklusdetektálás egy konkrét analysis channel alapján történik.

Gyors indulás

  1. Nyisd meg az alkalmazást.
  2. Válassz ki egy vagy több `.am1` fájlt.
  3. Állítsd be a rendezést (`Filename` javasolt).
  4. Várd meg a parsing és merge folyamat végét.
  5. Jelöld ki a megjelenítendő csatornákat; ha több csatorna aktív, válaszd ki az analysis channel-t is.
  6. Ha szükséges, állítsd be a mérés kezdeti idejét `Auto from file` vagy `Manual` módban.
  7. Finomhangold az `Analysis settings` paramétereket.
  8. Értékeld a KPI-ket, a grafikonokat, az Events és Cycles táblákat, valamint a cycle trend chartot.
  9. Exportáld a szükséges adatokat (`combined.csv`, `events.csv`, `downtime.csv`, PDF).

Teljes munkafolyamat

1) Import

A fájlok kliens oldalon kerülnek beolvasásra. A rendszer a kiválasztott fájlokat rendezheti fájlnév szerint vagy megtarthatja a manuális kiválasztási sorrendet.

2) Parsing és validálás

A parser beolvassa a fejlécet, azonosítja a csatornaszámot, kiszámolja a frame struktúrát, majd nyers mintákból származtatott mértékegységeket képez. A nyers minták amplitúdója alapján automatikusan kiválasztja a 12 bites vagy 16 bites gain-táblát is.

3) Merge

A part fájlok idősorai folyamatos idővonallá állnak össze. Ha átfedés vagy nulláról újraindulás látható, a rendszer időeltolással illeszti a következő részt. A merge metaadatként part-határokat is tárol, ezekből rajzolódnak a szaggatott fájlhatár-vonalak a grafikonon.

A merge a fájlok startEpoch metaadatait is eltárolja. A jelenlegi logika szerint az automatikus méréskezdet az első importált fájl startEpoch értékéből származik, mert ez felel meg a valós mérésindulásnak. Ha az első fájl kezdőideje hiányzik vagy érvénytelen, az automatikus kezdőidő nem használható, és manuális megadás szükséges.

4) Eseményanalízis

Dinamikus küszöbökkel történik a szegmentálás, majd eseményenként statisztika, osztályozás, slope és bad jelölés készül. Az események akkor is kapnak elsődleges típust, ha kiesnek a pontos időtartam-tartományból; ezt a rendszer a `durationOk` mezőben külön validálja. Ciklusdetektálás is készül (`shot + flush` párok), célidő-alapú eltérésvizsgálattal.

5) Vizualizáció és riport

A grafikonon mm és sebesség görbe is bekapcsolható, az Events/Cycles táblákból fókuszálható a nézet, és külön trend chartok mutatják a ciklushossz, valamint a `Squeeze` és `Lubrication` rise slope alakulását. A rise trend chartok mind az Events, mind a Cycles nézetben láthatók; pontkattintásra az aktuális nézetnek megfelelő event vagy cycle fókuszálódik, és a megfelelő tábla automatikusan leszűr a kiválasztott sorra. A `Distribution view` külön hisztogramnézetet ad a fő metrikákhoz, KPI tile-okkal és bin-alapú rekordszűréssel. A táblák görgethetők, sticky fejléccel dolgoznak, és a sidebar magasságához igazodnak.

AM1 fájlformátum (bináris)

Fejléc általános képlete

Header méret: 16 + 15 * N, ahol N a csatornaszám. Frame méret: 4 + 2 * N.

  • Közös rész (16 byte): magic(4), version(u16), reserved(u16), start_epoch(u32), time_scale_us(u32).
  • Csatorna blokkok: sps(u16) * N, gain_code(u8) * N, shunt(f32) * N, fullScale(f32) * N, offset(f32) * N.

Magic ellenőrzés

Elfogadott értékek: AM01, AM02, AM10, AM1\0.

Trim viselkedés

Ha a payload maradékot ad (payload % frameSize != 0), a maradék byte-ok levágásra kerülnek és a trim érték logolódik, de a feldolgozás nem áll le.

ADC skála autodetekció

A rendszer a legnagyobb abszolút raw mintából dönti el, hogy 12 bites vagy 16 bites konverziós táblát használjon. Ha maxAbsRaw <= 2047, akkor 12 bites skálázás lép életbe, egyébként 16 bites.

Összefűzés (merge)

A merge logika célja a part fájlokból folytonos, növekvő időtengely létrehozása.

  • A rendszer meghatározza a part medián mintaközét (medianDt) pozitív időkülönbségekből.
  • Ha a következő part kezdete átfed az előző végével (t0 + offset <= prevEnd + dt*0.5) vagy majdnem nulláról indul (t0 < dt*2), időeltolás történik.
  • Eltolás képlete: offset = prevEnd + dt - t0.
  • A merge stratégia jelenleg shift.
  • A merge eredmény partRanges metaadatot is tartalmaz: start, end, gapBefore és shifted jelzővel.
  • A merge eredmény tárolja a partok startEpoch értékeit, valamint egy resolvedStartEpoch mezőt, amely az első importált part érvényes kezdőidejét tartalmazza, ha rendelkezésre áll.

Az import logban fájlonként látható: feldolgozási sorrend, csatornaszám, minta darabszám, trim byte, első és utolsó időbélyeg.

Eseménydetektálás

1) Dinamikus küszöbök

A rendszer robust quantile alapú küszöböt számol az mm jelből: q10, q90, majd hiszterézis:

span = max(1e-6, q90 - q10)
entry = q10 + 0.55 * span
exit  = q10 + 0.40 * span

2) Szegmensképzés

  • Belépés: amikor mm eléri vagy meghaladja az `entry` küszöböt.
  • Kilépés: amikor mm visszaesik az `exit` alá.
  • Minimum hossz: legalább 3 minta különbség.
  • Közeli szegmensek összevonása, ha a köztük lévő rés <= 0.2 s.

3) Eseménytípus besorolás

  • Belső típusok: `shot`, `flush`, `unknown`.
  • Felületi megnevezések: `Squeeze`, `Lubrication`, `Unknown`.
  • `shot`: ha `shotMinS <= durationS <= shotMaxS`.
  • `flush`: ha `flushMinS <= durationS <= flushMaxS`.
  • Ha egyik tartományba sem esik bele, a rendszer akkor is a közelebbi családhoz sorolja, de `durationOk = false` lesz.
  • Ha ugyanaz az esemény mindkét tartományba beleesik, a középértékhez közelebbi osztály nyer.

4) Stroke és slope

  • `strokeMm = peakMm - baselineMm`.
  • `strokeTimeS` azt mutatja, hogy a jel mennyi idő alatt fut fel a nyugalmi szint közeléből a felső szint közeléig.
  • A stroke idő kezdete a zajtűrés miatt a `baselineMm + 5% * strokeMm` szint első átlépése, vége a `baselineMm + 95% * strokeMm` első átlépése.
  • A plató és a végén lévő leszálló szakasz nem számít bele a stroke időbe.
  • `baselineMm` elsődlegesen az esemény előtti 2.0 s ablak 10. percentilise, ha ehhez elég minta áll rendelkezésre.
  • Ha ez nem stabil, a rendszer fallbackként az utolsó 400 véges minta 10. percentilisét, végső esetben a globális `q10` értéket használja.
  • `strokeOk` típusfüggő küszöbbel számol: Squeeze és Lubrication külön target + tolerancia alapján.
  • `areaUnderCurveMmS` az esemény nyugalmi szint feletti integrálja: a baseline feletti jel trapézszabály szerinti összesített területe (`mm*s`). Ez mutatja az esemény teljes összhatását időben.
  • `riseVelocityAreaMm` a stroke felfutási ablak pozitív sebességének integrálja. Mivel a sebesség idő szerinti integrálja elmozdulás, az érték mm-ben értelmezhető.
  • Ha van mentett Squeeze vagy Lubrication referencia, az integrál eltérés is hibának számít, ha kilép a `shapeAreaTolerancePct` százalékos sávból.
  • A `riseSlope` lineáris legkisebb négyzetes illesztéssel készül a stroke felfutási szakaszán.
  • Az `Emelkedési ablak kezdete` azt adja meg, hogy a stroke felfutás kezdetétől hány másodperccel később induljon a riseSlope illesztés.
  • Az illesztés vége a `baselineMm + 95% * strokeMm` szint első átlépése.
  • A `fallSlope` továbbra is technikai exportmező, de a fő felület nem használja minősítésre.

5) Hibajelölések

A slope minősítés két külön logikából állhat. Ha nincs kézi minimum küszöb, a rendszer az összes squeeze `riseSlope` érték 10. percentilisét használja automata minimum thresholdnak.

  • lower-bound: az esemény hibás, ha riseSlope < minimumSlopeThreshold.
  • reference-deviation: az esemény hibás, ha a rise slope a kézi referenciaértéktől a megadott százalékos sávnál jobban eltér.
  • combined: a fenti két szabály együtt fut.
  • Unknown esemény referenciaalapú slope minősítést nem kap.
  • A `minimumStrokeTimeS` külön, abszolút másodperc alapú ellenőrzés: ha `strokeTimeS` ez alá esik, az Events table Bad jelzést és konkrét hibaokot mutat.
referenceDeviation = abs(riseSlope - referenceSlope) / referenceSlope
badSlopeReference = referenceDeviation > tolerancePct / 100

Best practice szerint akkor érdemes referenciaalapú módot használni, ha van egy jóváhagyott referencia mérésed. Ilyenkor a referencia mérés tipikus `Squeeze` és/vagy `Lubrication` rise slope értékét kézzel megadod, majd toleranciát állítasz köré. Így nem csak a túl alacsony, hanem a túl magas, a normáltól eltérő slope-ok is hibának számítanak.

  • Ajánlott induló beállítás: slopeQualityMode = combined.
  • Tipikus kezdő tolerancia: ±10%, majd igény szerint szigorítható vagy lazítható.
  • A `Squeeze` és `Lubrication` referencia slope külön érték, mert a két eseménytípus dinamikája eltérhet.
eventIsBad = !durationOk || !strokeOk || badSlope

A felületi hibajelölés ezt kiegészítheti referencia görbe alapú hibákkal is: formaeltérés, integrál / terület eltérés, max. slope eltérés és stroke idő eltérés. Ezek a `Görbeforma figyelés` beállításaiból és a Hasonlóság tabon mentett referencia eseményekből számolódnak.

Ciklus elemzés

1) Ciklus párosítás

  • Az események időrendbe rendezve kerülnek feldolgozásra.
  • A rendszer mindig a legutóbbi még el nem párosított `shot` eseményt tartja meg jelöltként.
  • Egy `flush` esemény ezzel a legutóbbi megelőző `shot` eseménnyel alkot ciklust.
  • `unknown` esemény nem alkot ciklust.
  • Ez a szabály ellenállóbb arra az esetre, amikor egy lubrication kimarad, és több squeeze érkezik egymás után.

2) Ciklus mezők

  • `shotDurationS`, `flushDurationS`, `gapAfterShotS`.
  • `durationS = tEnd - tStart`.
  • `deltaS = durationS - cycleTargetS` (ha target elérhető).
  • `badDuration = abs(deltaS) > cycleToleranceS`.
  • `shotStrokeMm`, `flushStrokeMm`: a két esemény stroke értéke külön-külön.
  • `shotRiseSlope`, `flushRiseSlope`: a két esemény rise slope értéke külön-külön.

3) Cycle target

  • `auto` módban: a detektált ciklushosszak mediánja.
  • `manual` módban: a felhasználó által megadott `cycleTargetS` érték.
  • A tolerancia mindig `cycleToleranceS`.

4) Squeeze–Lubrication egyformaság ellenőrzés

A rendszer külön cycle-level hibaként jelöli, ha a squeeze és lubrication egy cikluson belül túl hasonlóvá válik. Ez az ügyféloldali logikában tipikusan rendellenes működésre vagy felismerési hibára utal.

  • `durationSimilarity = min(shotDuration, flushDuration) / max(shotDuration, flushDuration)`.
  • `strokeSimilarity = min(shotStroke, flushStroke) / max(shotStroke, flushStroke)`.
  • `riseSimilarity = min(shotRiseSlope, flushRiseSlope) / max(shotRiseSlope, flushRiseSlope)`.
  • Mindegyik mutató `0..1` tartományban van; minél közelebb van `1`-hez, annál egyformább a pár.
  • Az auto küszöbök robusztusan készülnek: medián + MAD alapú számolással, metrikánként külön minimum ráhagyással.
  • `badPairDuration`, `badPairStroke`, `badPairRise` külön zászlók, és ezek együtt képezik a `badAny` cycle-level állapotot.

5) Downtime számítás

A detektált `Squeeze` és `Lubrication` események időintervallumai összevonásra kerülnek (átfedések nélkül), majd downtime a teljes mérésen belüli, eseménymentes szakaszokból képződik.

A `downtimeThresholdS` mező aktív: csak azok az eseménymentes szakaszok kerülnek be a summary-ba és a `downtime.csv` exportba, amelyek elérik ezt a minimum hosszt.

Képletek és számolások

Raw → mV konverzió

mv = raw * lsbMv, ahol lsbMv a gain kódtól függő táblázatos érték.

A parser automatikusan választ 12-bit (ADS1015-szerű) és 16-bit (ADS1115-szerű) gain tábla között a raw tartomány alapján.

12-bit gain map: 0:3.0, 1:2.0, 2:1.0, 3:0.5, 4:0.25, 5:0.125 mV/LSB.

16-bit gain map: 0:0.1875, 1:0.125, 2:0.0625, 3:0.03125, 4:0.015625, 5:0.0078125 mV/LSB.

mV → mA konverzió

ma = mv / shuntOhms, ha shuntOhms > 0.1, különben 0.

mA → mm konverzió (4-20 mA)

pct = clamp((ma - 4.0) / 16.0 * 100.0, 0, 100)
mm  = (pct / 100.0) * fullScaleMm + offsetMm

Ha a felületen `40 mm` vagy `80 mm` override van kiválasztva, akkor a rendszer a 4-20 mA jelet közvetlenül `0..40 mm` vagy `0..80 mm` tartományra képezi le.

mA → bar konverzió (állítható bar min/max)

pct = clamp((ma - 4.0) / 16.0 * 100.0, 0, 100)
bar = barMin + (pct / 100.0) * (barMax - barMin)

A jelenlegi verzióban a `bar` skála csatornánként állítható. PR110 esetén tipikus alapérték: `0..600 bar`, de ettől eltérő `min/max` is megadható a felületen.

Lineáris meredekség illesztés

Illesztés: y = a*t + b, ahol a keresett meredekség a. Zárt forma:

a = (n*sum(t*y) - sum(t)*sum(y)) / (n*sum(t*t) - sum(t)^2)

Sebesség (mm/s) számítás

  • Első pont: előre differencia.
  • Köztes pontok: középső differencia.
  • Utolsó pont: visszafelé differencia.
  • Opcionális simítás: mozgóátlag, alapértelmezett ablak = 5 minta.

Sampling és gap statisztikák

A mintaközből medián és p95 készül (sampling alapú mintaalkalmazással), gap akkor számít, ha dt > medianDt * 10.

Ciklus képletek

cycleDuration = cycle.tEnd - cycle.tStart
deltaS = cycleDuration - cycleTargetS
badDuration = abs(deltaS) > cycleToleranceS
areaUnderCurveMmS = integral(max(0, mm - baselineMm) dt)
riseVelocityAreaMm = sum(max(0, mm[i] - mm[i-1])) over rise window
badStrokeTimeMinimum = minimumStrokeTimeS != null && strokeTimeS < minimumStrokeTimeS
durationSimilarity = min(shotDuration, flushDuration) / max(shotDuration, flushDuration)
strokeSimilarity = min(shotStroke, flushStroke) / max(shotStroke, flushStroke)
riseSimilarity = min(shotRiseSlope, flushRiseSlope) / max(shotRiseSlope, flushRiseSlope)
badAny = badDuration || badPairDuration || badPairStroke || badPairRise
totalCycleS = union_length(all_cycle_ranges)
rawDowntimeSegments = complement_of(union_length(all_squeeze_and_lubrication_event_ranges))
totalDowntimeS = sum(rawDowntimeSegments >= downtimeThresholdS)

Paraméter referencia

ParaméterAlapértékMértékegységJelentés
shotMinS2.0sSqueeze esemény minimális időtartama. A belső típusnév ehhez: shot.
shotMaxS3.0sSqueeze esemény maximális időtartama.
flushMinS5.0sLubrication esemény minimális időtartama. A belső típusnév ehhez: flush.
flushMaxS9999.0sLubrication esemény maximális időtartama.
shotExpectedStrokeMm25.0mmSqueeze események elvárt stroke értéke. A jelenlegi stroke definíció a nyugalmi szinttől a csúcsig mért elmozdulás.
shotStrokeTolMm3.0mmSqueeze stroke tolerancia. Ezen belül strokeOK = true.
flushExpectedStrokeMm25.0mmLubrication események elvárt stroke értéke, külön targettel a squeeze értékhez képest.
flushStrokeTolMm3.0mmLubrication stroke tolerancia.
riseWindowS0.30sA stroke felfutási idején belüli kezdő offset. A riseSlope ettől a ponttól a stroke felső szintjéig számolódik.
slopeThresholdMmPerSnull (auto)mm/sMinimum slope küszöb. Ha üres, automatikusan a squeeze események riseSlope értékeinek 10. percentilise lesz a küszöb.
slopeQualityModecombined-Slope minősítési mód. `lower-bound`: csak minimum küszöb, `reference-deviation`: csak referenciaeltérés, `combined`: a kettő együtt. Új beállításnál ez az ajánlott alapmód.
shotReferenceSlopeMmPerSnullmm/sKézi Squeeze referencia slope. Ha meg van adva, a rendszer ehhez képest is nézi az eltérést.
shotReferenceTolerancePct10%Megengedett Squeeze eltérés a referencia slope körül.
flushReferenceSlopeMmPerSnullmm/sKézi Lubrication referencia slope. Ha meg van adva, a rendszer ehhez képest is nézi az eltérést.
flushReferenceTolerancePct10%Megengedett Lubrication eltérés a referencia slope körül.
shapeReferenceDeviationPct15%Mentett referencia görbéhez képesti megengedett formaeltérés. A Hasonlóság tab eseményszintű minősítésében használja a rendszer.
shapeAreaTolerancePct20%Mentett referencia esemény integrál / terület értékéhez képesti megengedett eltérés. Ez állítja az integrál trend chart toleranciasávját is.
shapeStrokeTimeTolerancePct20%Mentett referencia esemény stroke idejéhez képesti megengedett eltérés.
minimumStrokeTimeSnullsOpcionális abszolút minimum stroke idő. Ha meg van adva, az ennél rövidebb stroke idő Bad jelzést kap.
downtimeThresholdS30.0sA detektált downtime szegmensek minimum hossza. Downtime-nak az a threshold-feletti időszak számít, ahol nincs detektált Squeeze vagy Lubrication esemény.
cycleTargetModeauto-Cycle target forrása: auto (medián) vagy manual.
cycleTargetS0sManuális cycle target érték (csak manual módban aktív).
cycleToleranceS1.0sMegengedett eltérés a cycle target körül. Ha túllépi, a ciklus bad jelölést kap.
velocityAxisModeauto-Sebesség tengely skálázási mód: auto, clamp, symmetric.
velocityClampTop-100mm/sClamp módban a sebesség tengely felső határa.

A beállítások böngészőben perzisztensen tárolódnak: localStorage["am1.settings.v1"].

Régebbi mentett beállítások automatikusan migrálódnak az új sémára, például a korábbi egyetlen stroke target/tolerance kettéválik squeeze és lubrication értékekre.

Grafikon és nézetek

  • Measured value (`mm` vagy `bar`) és Velocity (mm/s) külön-külön kapcsolható.
  • A csatornák checkboxokkal választhatók: `All` + egyedi `CH1..CH4`.
  • Több aktív csatorna esetén külön `Analysis channel` választható; egyetlen aktív csatornánál az analízis automatikusan azon fut.
  • `mm` módban csatornánként választható `File scale`, `40 mm` vagy `80 mm` skála.
  • `bar` módban csatornánként szabadon állítható a `min` és `max` tartomány; PR110 esetén tipikus alapérték: `0..600 bar`.
  • Az esemény- és cycle-analízis csak `mm` csatornán fut, és a kiválasztott `mm` skálázást használja; a `bar` csatornák trendként jelennek meg.
  • Automatikus downsample: 3000-6000 kirajzolt pont a teljesítmény miatt.
  • A grafikon lineáris időtengelyt használ.
  • Zoom slider, egér/pointer drag pan, teljes nézet visszaállítás.
  • Kapcsolható `Align channel baselines` opció: a kijelölt csatornák q10 baseline-ját az analysis channel-hez igazítja, kizárólag vizuális célra.
  • Esemény kiválasztáskor automatikus fókusz történik az esemény ablakára.
  • Ciklus kiválasztáskor automatikus fókusz történik a kiválasztott ciklus időablakára.
  • Aktív event chip: az aktuális viewport közepén lévő esemény gyorsan szűrhető a táblában.
  • Az `Aktuális esemény` sorban előző/következő gombbal vagy konkrét sorszám beírásával kézzel is fókuszálható egy esemény.
  • Events/Cycles/Distribution tab váltás a három fő elemző nézet között.
  • Cycle trend chart: kattintható pontok, target és ±tolerance referenciavonalakkal; pontkattintás a megfelelő ciklusra fókuszál, és a Cycles table automatikusan leszűr erre az egy ciklusra.
  • Külön `Squeeze` és `Lubrication` trend chartok mutatják a kiválasztott metrika alakulását nézetfüggő sorszámozással.
  • A trend chartokon választható metrika: rise slope, max. rise slope, stroke, stroke idő, integrál / terület, felfutási sebesség integrál vagy esemény-időtartam.
  • Az integrál / terület trend az esemény nyugalmi szint feletti teljes területét mutatja (`mm*s`), ezért jól jelzi, ha az esemény összhatása változik, még akkor is, ha a csúcs vagy a stroke önmagában hasonló.
  • A stroke idő trend chart megőrzi a referencia vonalat, és bekapcsolt `Minimum stroke idő` esetén külön alsó határ vonalat is rajzol.
  • A felfutási sebesség integrál trend a felfutás közbeni pozitív mozgás összegét mutatja mm-ben.
  • Az integrál trend Y tengelye nem fixen 0-ról indul, hanem a mért értékek köré számolt robusztus tartományt használ, hogy az 50 körüli kis eltérések is láthatók legyenek túlzott felnagyítás nélkül.
  • Mentett referencia esetén az integrál trend chart referencia vonalat és ± integrál tolerancia sávot mutat; a sávon kívüli események hibás integrál eltérést kapnak.
  • Az Events nézetben a trend pontjaira kattintva a megfelelő `Squeeze` vagy `Lubrication` esemény fókuszálódik, és az Events table automatikusan csak erre az egy sorra szűr.
  • A Cycles nézetben ugyanez a megfelelő ciklust választja ki, és a Cycles table automatikusan csak erre az egy ciklusra szűr.
  • Az Events nézetben a trend x-tengelye az esemény sorszámát (`Squeeze #` vagy `Lubrication #`) mutatja; a Cycles nézetben továbbra is a ciklusszám látszik.
  • A `Distribution view` metric-választóval (pl. Squeeze duration, Cycle time, Stroke, Stroke time, Rise slope, Integrál, Downtime duration) hisztogramot rajzol, `All / Good only / Bad only` scope szűréssel.
  • A hisztogram oszlopaira kattintva a nézet a kiválasztott binhez tartozó rekordokat listázza, és esemény/ciklus rekord esetén a fő grafikon ugyanarra a rekordra fókuszálható.
  • A Distribution KPI tile-ok a kiválasztott metric és subset alapján `Count`, `Median`, `P95`, `Mean`, `Range` és `Bad share` összesítőt mutatnak.
  • Ha kézi referencia slope van megadva, a trend chartok referencia vonalat és ± tolerancia sávot is mutatnak.
  • A rise trend pontok színezése követi az aktív slope minősítést: referenciaeltérés vagy lower-bound sértés esetén piros kiemelést kapnak.
  • Ha nincs kézi referencia, a trend chartok medián referencia vonalat mutatnak, minősítési sáv nélkül.
  • A Hasonlóság tab eseményszintű összehasonlítást használ: Squeeze eseményeket Squeeze referenciához, Lubrication eseményeket Lubrication referenciához mér.
  • A referencia görbe vizualizáció overlay és abszolút eltérés nézetben mutatja az adott típus referencia-görbéjét és a kijelölt esemény görbéjét.
  • A Hasonlóság tab hibaoszlopa formaeltérést, integrál eltérést és stroke idő eltérést jelöl; a max slope eltérés itt csak tájékoztató érték.
  • A `Cycles table` hasonlósági oszlopai (`dur sim %`, `stroke sim %`, `rise sim %`) és a Summary breakdown mezői info ikonnal magyarázhatók a felületen.
  • Kapcsolható `Show file boundaries` opció szaggatott szürke függőleges vonalakkal.
  • A görbe idősorhézagoknál step/bridge logikát használ: kisebb hézagoknál megtartja az előző szintet, nagy hézagoknál visszaejti a jelet a nyugalmi szintre.
  • A `/gaps` oldalon külön tesztjelleggel megjeleníthetők a gap háttérsávok, a gap összesítő és a fájlhatárok.
  • Az Events és Cycles táblák teljes listát mutatnak görgethető, sticky fejlécű nézetben.
  • Az Events és Cycles táblák `Start time` / `End time` oszlopokat is mutatnak, ha a méréshez van feloldott valós kezdőidő.
  • Az abszolút idő cellák két sorba törnek (`dátum` + `idő`), hogy a táblák oldalirányú scroll nélkül olvashatóak maradjanak.

Az X tengely továbbra is relatív másodpercben marad. A valós idő csak a táblákban és a nyomtatható/PDF nézetben jelenik meg.

Velocity tengely módok

  • auto: dinamikus minimum/maximum az adatokból.
  • clamp: fix felső határ a velocityClampTop alapján.
  • symmetric: 0 körüli szimmetrikus skála.

Exportok

1) combined.csv

OszlopJelentés
time_sIdő másodpercben.
raw_chXNyers ADC érték csatornánként (X = 0..N-1).
mm_chXKalibrált pozíció mm-ben csatornánként.

Formátum: time_s 6 tizedes, mm_chX 2 tizedes.

A `combined.csv` nem tartalmaz merge metaadatot, fájlhatárt vagy partRanges információt, csak az összevont idősorokat.

2) events.csv

OszlopJelentés
indexEsemény sorszáma (1-alapú).
typeBelső típusérték: shot / flush / unknown. A felületen ezek Squeeze / Lubrication / Unknown néven jelennek meg.
t_start_s, t_end_s, t_peak_sKezdő, záró és csúcsidő.
duration_sEsemény hossza másodpercben.
peak_mm, min_mm, max_mmEseményen belüli szélsőértékek.
stroke_mmNyugalmi szint -> peak elmozdulás. A nyugalmi szintet a rendszer az esemény előtti ablak alacsony kvantiliséből becsüli.
area_under_curve_mm_sAz esemény nyugalmi szint feletti integrálja.
rise_velocity_area_mmA felfutási ablak pozitív sebességgörbéje alatti terület, mm-ben értelmezve.
stroke_time_sBecsült felfutási idő másodpercben: a baseline + 5% stroke szinttől a baseline + 95% stroke szintig. A plató és a leszálló szakasz nem számít bele.
bad_stroke_time_minimum1, ha az esemény stroke ideje a beállított abszolút minimum stroke idő alatt van.
stroke_ok1, ha a stroke a tolerancián belül van, egyébként 0.
rise_slope_mm_per_sFelfutó szakasz lineáris meredeksége.
fall_slope_mm_per_sLefutó szakasz lineáris meredeksége.
bad_slope1, ha az aktív slope minősítési mód szerint hibás az esemény. Ez lehet minimum threshold vagy referenciaeltérés alapú is.

Az `events.csv` jelenleg nem exportálja külön a `durationOk` mezőt, az összesített `eventIsBad` státuszt vagy a felületen látható részletes hibamagyarázatot. A `bad_slope` oszlop az összesített slope flaget tartalmazza; a `badSlopeLowerBound`, `badSlopeReference`, `referenceSlopeMmPerS`, `slopeDeltaMmPerS` és `slopeDeltaPct` segédmezők csak a felületi értelmezésben jelennek meg.

3) downtime.csv

OszlopJelentés
indexDowntime szegmens sorszáma.
t_start_s, t_end_sSzünet kezdete és vége.
duration_sSzünet időtartama.

A `downtime.csv` már a `downtimeThresholdS` szerint szűrt szegmenseket tartalmazza.

4) cycles.csv

OszlopJelentés
indexCiklus sorszáma (1-alapú).
shot_index, flush_indexA ciklust alkotó squeeze és lubrication esemény sorszáma.
t_start_s, t_end_sA teljes ciklus kezdete és vége relatív másodpercben.
shot_duration_s, flush_duration_sA squeeze és lubrication külön időtartama.
gap_after_shot_sA squeeze vége és a lubrication kezdete közötti rés.
cycle_duration_s, delta_sTeljes ciklushossz és a cycle targettől vett eltérés.
shot_stroke_mm, flush_stroke_mmA két esemény stroke értéke.
shot_rise_slope_mm_per_s, flush_rise_slope_mm_per_sA két esemény rise slope értéke.
duration_similarity, stroke_similarity, rise_similarityA squeeze-lubrication pár hasonlósági mutatói 0..1 tartományban.
bad_duration, bad_pair_duration, bad_pair_stroke, bad_pair_rise, bad_anyCycle-level hibaflagek 0/1 formában.

A `cycles.csv` export már tartalmazza az új squeeze-lubrication similarity mezőket és a cycle-level hibaflageket is.

5) PDF

A PDF export a böngésző nyomtatási folyamata (window.print()) alapján készül, fekvő (landscape) oldallal.

Ha van feloldott méréskezdet, a kiválasztott event vagy cycle a PDF-ben abszolút `Start time` / `End time` mezőkkel jelenik meg; ha nincs, ezek helyén `n/a` látszik.

KPI-k és minőség

KPI definíciók

  • total: összes detektált esemény.
  • cycles: detektált ciklusok száma (`shot + flush`).
  • badCycles: az összes cycle-level hibás ciklus száma, vagyis `badAny = true`.
  • badCycleDuration: target/tolerance miatt hibás ciklusok száma.
  • badPairDuration: túl hasonló squeeze/lubrication időtartam miatt jelölt ciklusok száma.
  • badPairStroke: túl hasonló squeeze/lubrication stroke miatt jelölt ciklusok száma.
  • badPairRise: túl hasonló squeeze/lubrication rise slope miatt jelölt ciklusok száma.
  • shots, flush, unknown: belső típus szerinti darabszámok, UI-n: Squeeze / Lubrication / Unknown.
  • badDuration: olyan események száma, ahol `durationOk = false`.
  • badStroke: olyan események száma, ahol `strokeOk = false`.
  • badSlope: olyan események száma, ahol az aktív slope minősítési mód alapján `badSlope = true`.
  • badSlopeLowerBound: olyan események száma, ahol a rise slope a minimum threshold alá esett.
  • badSlopeReference: olyan események száma, ahol a rise slope a kézi referenciaértéktől a tolerált sávon túl eltért.
  • badTotal: olyan események száma, ahol `!durationOk || !strokeOk || badSlope`.
  • badRate = badTotal / total.
  • totalCycleS: az összes ciklus egyesített időtartama, átfedésmentesen.
  • totalDowntime: a Squeeze/Lubrication eseménymentes, már küszöb szerint szűrt szakaszok összege.
  • downtimeRatio = totalDowntime / totalMeasurementTime.
cycleBadRate = badCycles / cycles
qualityScore = clamp(100 * (1 - (badRate + downtimeRatio) / 2), 0, 100)

Minél nagyobb az érték, annál jobb a minőség. A mutató a hibaarányt és az állásidő-arányt egyszerre veszi figyelembe.

Hibaelhárítás

Nem tölt be a fájl

  • Ellenőrizd, hogy valóban AM1 formátumú fájlt adtál meg.
  • Ha a magic érték eltér a támogatottaktól, parse hiba keletkezik.

Furcsa eseményszám / rossz besorolás

  • Állítsd a `shotMinS`, `shotMaxS`, `flushMinS`, `flushMaxS` értékeket a valós squeeze/lubrication időkhöz.
  • Ha egy esemény jó típusba kerül, de mégis rossznak látszik, ellenőrizd külön a duration, stroke és slope okokat a táblázat `bad` oszlopában.
  • Finomítsd az `Emelkedési ablak kezdete` értéket, ha a rise slope-ot korábban vagy később szeretnéd mérni a stroke felfutásán belül.
  • Adj kézi `slopeThresholdMmPerS` értéket, ha az auto minimum küszöb nem stabil.
  • Ha nem a túl alacsony slope, hanem a referencia méréstől való eltérés a fontos, használd a `combined` vagy `reference-deviation` módot kézi referencia slope-pal.

Túl sok downtime

  • Ellenőrizd a `shotMinS`, `shotMaxS`, `flushMinS`, `flushMaxS` beállításokat (ezekből áll össze a ciklus).
  • Ellenőrizd, hogy valóban képződnek-e ciklusok (Cycles table és trend chart).
  • Nézd meg a mintavételi gap statisztikát, mert idősor hézagok torzíthatnak.

Nincs detektált ciklus

  • Csökkentsd vagy szélesítsd a squeeze és lubrication időtartományokat.
  • Ellenőrizd, hogy a folyamatban ténylegesen van-e lubrication minden ciklushoz; ha ez hiányzik, a kimaradt lubrication nem képez ciklust.
  • Ha több squeeze érkezik egymás után, a rendszer a legutóbbi squeeze-t párosítja a következő lubricationnel.
  • Nézd át az import sorrendet és a smart merge figyelmeztetéseket.

Túl sok “Bad pair” jelzés a ciklusoknál

  • Nézd meg a `Cycles table` similarity oszlopait és a hover info ikonokat; ezek megmondják, hogy időtartam, stroke vagy rise alapján lett-e túl hasonló a pár.
  • Ellenőrizd a `Squeeze` és `Lubrication` trend chartokat rise slope, stroke, stroke idő, integrál vagy időtartam nézetben: gyakran itt látszik először, ha a két görbe dinamikája összecsúszik.
  • Ha a folyamat valójában természetesen hasonlóvá vált, a current-file auto threshold miatt a jelölések számát a teljes ciklushalmaz mintázata befolyásolja.

Hasonlóság tab referencia nélkül

  • Válassz ki egy jó Squeeze eseményt, majd a Hasonlóság tabon mentsd Squeeze referenciának.
  • Válassz ki egy jó Lubrication eseményt is, és mentsd Lubrication referenciának.
  • A tab táblázata csak az adott eseménytípus saját referenciájához képest jelöl hibaokot; a ciklustábla hibái itt nem keverednek bele.
  • Az integrál / terület hiba csak akkor aktív, ha van mentett referencia az adott eseménytípushoz.

Import sorrend problémák

  • Használd a `Sort files by: Filename` módot (ajánlott).
  • Kapcsold be a `Smart merge check` opciót az átfedés figyelmeztetésekért.

Modulok és architektúra

FájlFelelősség
core/am1/parse.tsAM1 bináris parser: fejléc olvasás, csatorna autodetekció, 12/16 bites ADC-skála autodetekció, mértékegység-konverzió (raw -> mV -> mA -> engineering value: mm vagy bar).
core/am1/merge.tsTöbb part idővonal-összefűzése, overlap/zero-start kezelése shift stratégiával, partRanges meta generálása a fájlhatárok kirajzolásához, valamint a partok startEpoch konzisztencia-ellenőrzése.
workers/am1-worker.tsWeb Worker oldali parse + merge futtatás; progress és eredmény visszaküldése UI-nak.
core/analysis/events.tsEseménydetektálás, kategorizálás, slope elemzés, ciklusdetektálás, downtime számítás, sampling statisztikák.
core/analysis/velocity.tsSebesség számítása középső differenciával, opcionális simítással.
components/MmChart.tsxGrafikon kirajzolás (mm + sebesség), zoom/pan, nézetváltás, többcsatornás megjelenítés, opcionális baseline-align, event vagy cycle fókusz.
components/CycleChart.tsxÚjrahasznosítható metric chart: cycle duration trend, squeeze rise trend, lubrication rise trend, target/tolerance sáv, valamint kattintható event- vagy cikluskiválasztás és nézetfüggő x-tengely címkézés.
components/HistogramChart.tsxÚjrahasznosítható hisztogram chart a Distribution view-hoz, kattintható oszlopokkal és bin-alapú rekordszűréssel.
core/csv/export.tsÖsszefűzött idősor CSV export.
core/csv/events.tsEsemények, ciklusok és downtime export CSV formátumban. A CSV-k a fő validációs mezőket exportálják, de nem minden UI-magyarázó szöveget.
app/page.tsxFő felület: import, beállítások, KPI-k, event/cycle táblák, trend chart, export, nyomtatás/PDF.

A parse és merge folyamat Web Worker-ben fut, így nagy fájloknál is folyamatos marad a felület válaszkészsége.