Schichtdicken-Skalierung der Required-Dose (UV-Curing)
Erfasst: 2026-04-28 (Phase 5.2, Engine-Erweiterung)
Bezug: app/src/lib/engine/curing.ts (scaledRequiredDose),
app/src/lib/components/wizard/SubstrateThicknessPicker.svelte,
Migration 074 in db/migrations.ts,
verwandt: lambert-cosine-law.md (geometrische Komponente)
Worum geht's
UV-Curing-Datenblätter geben die "Required-Dose" eines Klebstoffs/Coatings nicht als universelle Konstante an, sondern gegen eine spezifische Referenz-Schichtdicke. Henkel, Dymax, DELO, Loctite usw. spec'en typisch gegen 100 µm oder 200 µm Layer-Dicke. Wer dicker oder dünner aufträgt, kann die Dose nicht 1:1 übernehmen.
Beispiel Loctite AA 3494: 1000 mJ/cm² @ 100 µm Layer. Bei 200 µm Layer bleibt die Frage: braucht man wirklich nur 1000 mJ/cm² oder mehr?
Physik dahinter (Kurz-Version)
UV durchquert die noch unausgehärtete Coat-Schicht und wird dabei absorbiert — vom Photoinitiator (gewollt: das ist die Reaktion) UND vom Bindemittel/Pigmenten (parasitär). Beer-Lambert sagt:
I(z) = I₀ × exp(-α × z)
Wobei α der substrat-spezifische Absorptions-Koeffizient ist und z die Tiefe in der Schicht. Die Bottom-Fläche eines 200-µm-Layers sieht weniger UV als die Bottom-Fläche eines 100-µm-Layers desselben Coats — deshalb braucht man an der Oberfläche mehr Dose, damit unten genug ankommt für volle Vernetzung.
Lineare Skalierung als Näherung (Phase 5.2)
Strenge Lambert-Beer-Modellierung braucht α-Werte pro Substrat × Wellenlänge. Die haben wir aktuell nicht systematisch erhoben. Bis dahin nutzt die Engine eine konservative lineare Näherung:
effectiveDose = referenceDose × (selectedThickness / referenceThickness)
Beispiel:
- Loctite AA spec 1000 mJ/cm² @ 100 µm
- User trägt 200 µm auf → effectiveDose = 1000 × (200/100) = 2000 mJ/cm²
- User trägt 50 µm auf → effectiveDose = 1000 × (50/100) = 500 mJ/cm²
Warum lineare Näherung "konservativ" ist
Im mittleren Bereich der Hersteller-Range (typisch 50–200 µm) liefert lineare Skalierung Werte, die in der gleichen Größenordnung wie Lambert-Beer liegen. Bei sehr dicken Schichten (> Hersteller-Max) unterschätzt Linear die echte Required-Dose, weil die exponentielle Absorption schneller zunimmt — der UI-Picker zeigt dann "ausserhalb empfohlener Bereich" in amber, damit der User das Datenblatt heranzieht.
Im sehr dünnen Bereich (< Hersteller-Min) überschätzt Linear, weil die Oberflächen-Sauerstoff-Inhibition (Sauerstoff fängt freie Radikale) bei sehr dünnen Layers ein eigenes Problem ist, das proportional zu sinkender Dose nicht 1:1 mitgeht. Auch hier: Out-of-Range-Warning.
Wann ist Linear "falsch"
- Bei stark pigmentierten/gefüllten Coatings (hohe parasitäre Absorption): Linear liefert zu niedrige Dose, echte Werte aus dem Datenblatt nehmen.
- Bei Tiefen-Aushärtung kritischer Anwendungen (Optik-Klebungen, Medizin- Klassen): nicht linear extrapolieren, immer Datenblatt + Hersteller- Empfehlung.
- Bei Substraten ohne Reference-Thickness im DB (alle 33 Luvex-Standard- Seeds aktuell): keine Skalierung, Engine nimmt die Spec-Dose 1:1.
Hersteller-Praxis (was steht im Datenblatt)
Typische Felder die wir aus Datenblättern systematisch erheben:
| Feld | Beispiel | Bedeutung |
|---|---|---|
referenceThicknessUm |
100 | Schichtdicke gegen die Required-Dose spec'd ist |
thicknessRangeUmMin |
50 | Untere Grenze der validen Anwendung |
thicknessRangeUmMax |
250 | Obere Grenze der validen Anwendung |
requiredDose |
1000 mJ/cm² | Erforderliche Dosis @ referenceThickness |
Reale Werte aus offiziellen TDS-PDFs (live in der DB seit Migration 075,
2026-04-28). PDFs liegen in docs/uv-knowledge/datasheets/{hersteller}/:
- Henkel/Loctite AA 3494 (Adhesive, TDS Jan-2015): 3000 mJ/cm² @ 200 µm Reference, Range 50–500 µm, 320–410 nm. Glas-Bonding/Potting/Sealing.
- Henkel/Loctite AA 3525 (Adhesive, TDS May-2024): 1500 mJ/cm² @ 100 µm Reference, Range 50–500 µm, 365–410 nm. Modernes LED-cure-Profil (365 + 405 nm dual-LED getestet).
- Dymax Light-Weld 3221-SC (Adhesive, TDS 2012): 3000 mJ/cm² @ 100 µm Reference, Range 100–810 µm, 320–450 nm. TDS hat explizite Schichtdicken-Tabelle: 100 µm/15 s/200 mW = 3000, 810 µm/35 s/200 mW = 7000 mJ/cm². Empirisch sub-linear (×2.33 statt ×8.1) — bestaetigt dass unsere lineare Naeherung konservativ ist.
- Dymax Light Weld 4-20508 (Coating, TDS 2018): 2250 mJ/cm² @ 5 mm Reference (Dome Coating!), Range 1–10 mm, 360–400 nm. High-dome novelty-coating fuer Nameplates/Keychains.
- Dymax Multi-Cure 6-621 (Adhesive, TDS 2019): 1000 mJ/cm² @ 100 µm Reference, Range 50–1000 µm, 320–450 nm. Metall-Glas-Bonding, Coil-Winding, Potting (Multi-Cure mit Heat + Activator-Backup).
- DELO PHOTOBOND 4442 (Sealant, TDS 08.05.2023): 3600 mJ/cm² @ 100 µm Reference, Range 50–1000 µm, 320–410 nm. Mini-Lautsprecher-Voice-Coil, modifiziertes Acrylat 1C.
Empirische Beobachtung (Dymax 3221-SC TDS-Tabelle): die echte Dose- Skalierung mit Schichtdicke ist sub-linear — bei 8x Layer-Dicke nur 2.3x Dose-Bedarf, nicht 8x. Unsere lineare Engine-Skalierung ueberschaetzt damit den Bedarf bei dicken Schichten und ist sicherheits- technisch konservativ. Phase 5.3 (Lambert-Beer) wird das praezisieren.
App-Integration
Setup-Page
Komponente SubstrateThicknessPicker.svelte rendert konditional, wenn das
gewählte Substrat eine referenceThicknessUm hat. Slider-Range nutzt
thicknessRangeUmMin/Max wenn vorhanden, sonst ±50% um Reference.
Live-Vorschau rechts: Skalierungs-Faktor (×0.50–×3.00) farbig
(<1 cyan, =1 neutral, >1 amber) + effektive Dose in mJ/cm² oder
J/cm². Out-of-Range-Hinweis erscheint amber sobald die Slider-Position
außerhalb min/max liegt.
Override wird als state.target.thicknessUm persistiert (Draft-LocalStorage).
Wenn das Substrat keine Reference hat, ist der Picker unsichtbar — der
Engine-Default (scaleFactor = 1) bleibt aktiv.
Results-Page
Beide Curing-Physics-Modelle (stationary-surface + linear-moving-surface)
ziehen state.target?.thicknessUm durch und rufen scaledRequiredDose()
auf — die "Time-to-Full-Cure" und der "Belt-Speed-Vorschlag" reflektieren
also automatisch die User-Layer-Wahl.
Unter dem Time-to-Cure-Wert zeigt die UI eine Mono-Zeile:
Layer 200 µm · Spec 100 µm · ×2.00 → 2000 mJ/cm² (Spec 1000) mit
Out-of-Range-Badge wenn der gewählte Layer außerhalb der Hersteller-Range
liegt. Der User sieht so explizit, was die Engine angenommen hat.
PDF-Print
Im PDF-Detail des Substrats steht der gleiche Layer-Hinweis nach der
Wellenlängen-Range:
Dosis 1000 mJ/cm² · 350–400 nm · Layer 200 µm (Spec 100 µm, ×2.00).
So bleibt beim Ausdruck nachvollziehbar, gegen welche Schichtdicke der Berechnungs-Wert gerechnet wurde.
Settings-Page (Substrate-Library)
Das Substrate-Anlage-/Edit-Dialog hat eine eigene "Schichtdicke (optional)"-
Sektion mit drei Inputs (Min/Max/Ref µm). emptyToNull() normalisiert leere
Eingaben, thicknessValid() validiert dass min ≤ max und min ≤ ref ≤ max
gilt — Validation-Fehler erscheinen rot inline. Die DB hat dafür dieselben
CHECK-Constraints (Migration 074) als Defense-in-Depth.
Nächste Phasen (Roadmap)
- Phase 5.2 (LIVE 2026-04-28): Lineare Näherung, UI-Picker, PDF, Tests
- Phase 5.3 (geplant): Lambert-Beer mit Substrat × Wellenlängen-α-Tabelle. Voraussetzung: systematische Erhebung der Absorptions-Koeffizienten der Top-20-Substrate. Domain-Quelle: Photoinitiator-Hersteller-Datenblätter (BASF, IGM Resins) + UV-Coating-Fachliteratur.
- Phase 5.4 (geplant): Tiefen-Profil-Visualisierung (Heatmap "Dose at
depth z" für ein gewähltes Substrat × Lampen-Spektrum). Erweitert
lambert-cosine-law.md-Architektur (Surface2D) um eine z-Tiefen-Achse.
Querverweise
- App-Texte mit Layer-Skalierung: alle Curing-Apps (
spot-curing,conveyor-curing) zeigen die Effekte automatisch sobald Hersteller- Substrate mit Thickness-Daten in der DB sind. - Verwandte Knowledge-Artikel:
lambert-cosine-law.md— Geometrische Inzidenz (orthogonal zur Schichtdicke)systems/system-typen-taxonomie.md— Surface2D-Architektur erweitert sich später aufSurface3D-zanlagen-typologien/spot-curing-industrien.md— Anwendungs-Klassen pro Layer-Bereich (Mikroelektronik 5–50 µm vs. Glas-Bonding 200–500 µm)
