conducted_emission_mpylab documentation

Start here

See Getting started for installation, diagnostic commands, and first use.

API

Final-scan CSV assessment

The five result columns remain frequency in Hz, SCUQ value, dBµV value, dBµV limit and status. Finite measured values with a finite limit retain the Passed / Failed comparison. Missing (None/NaN) or infinite limits and nonfinite measured levels now have status Not evaluated; they cannot be reported as passing. The summary retains Freqs Measured and Freqs Failed and adds Freqs Not Evaluated. The measured count includes all exported rows. Existing files are not rewritten. The saved scan dictionaries are unchanged.

German / Deutsch

Die fünf Ergebnisspalten bleiben Frequenz in Hz, SCUQ-Wert, dBµV-Wert, dBµV-Grenzwert und Status. Endliche Werte mit endlichem Grenzwert behalten Passed / Failed. Fehlende (None/NaN) oder unendliche Grenzwerte sowie nichtendliche Messwerte erhalten Not evaluated. Die Zusammenfassung behält Freqs Measured und Freqs Failed und ergänzt Freqs Not Evaluated. Die Anzahl gemessener Frequenzen umfasst alle exportierten Zeilen. Bestehende Dateien und gespeicherte Scan-Dictionaries bleiben erhalten.

FCC frequency assessment / FCC-Frequenzbewertung

New profile assessment APIs are detected optionally on the bound limit callable; older MPyLab profiles and arbitrary callables retain the finite-value fallback. The five CSV result columns stay unchanged. The status vocabulary additionally supports Exempt and Unresolved; both count as not evaluated, never as passed. No new keys are added to saved scan-data dictionaries. Limit settings retain module/class/kwargs and may additionally save case, distance and optional operating_frequency in kwargs. Old settings remain loadable.

Neue Bewertungs-APIs werden optional am gebundenen Grenzwert-Callable erkannt; ältere Profile und freie Funktionen bleiben nutzbar. Die fünf CSV-Spalten bleiben erhalten. Exempt und Unresolved ergänzen die Statuswerte und zählen als nicht bewertet, niemals als bestanden. Scan-Dictionaries erhalten keine neuen Felder. Grenzwert-Einstellungen behalten module/class/kwargs und speichern optional case, distance und operating_frequency in kwargs. Alte Einstellungen bleiben ladbar.

Known FCC18 profiles without assess_frequency are marked Unresolved and skip limit-based final-scan measurement. Upgrade MPyLab before using FCC exceptions. This fallback prevents an older FCC table-only profile from implying a pass. Bekannte FCC18-Profile ohne assess_frequency gelten als Unresolved und lösen keine grenzwertbasierte Nachmessung aus. Für FCC-Ausnahmen muss MPyLab die neue Bewertungs-API unterstützen; alte reine Tabellenprofile begründen kein Bestehen.

Invalid saved limit specifications now raise an explicit error instead of loading a default profile. Missing settings still use the initial default; legacy pickled-only settings require explicit profile selection. Registered module aliases are restored through the shared mpylab limit resolver.

Ungültige gespeicherte Grenzwertangaben lösen jetzt einen ausdrücklichen Fehler aus. Sie werden nicht durch ein Default-Profil ersetzt. Fehlende Einstellungen verwenden weiterhin den initialen Standard; ausschließlich alte Pickle-Einstellungen erfordern eine ausdrückliche Profilauswahl.

Explicit limit profiles / Explizite Grenzwertprofile

For new configuration mappings use a complete profile selection, for example:

{"profile": "conducted_emission.en_55011", "group": "1",
 "classification": "B", "detector": "QP", "port": "AC (<= 20 kVA)"}

Für neue Konfigurationsmappings alle Auswahlparameter mit profile angeben. Bestehende module-/name-Angaben behalten ihre Konstruktordefaults; Tippfehlervorschläge führen zu keiner automatischen Auswahl. Existing saved GUI settings continue to use their compatible module/class representation; migration of user settings is not required.

Scan cancellation and device errors

Direct prescan/final-scan calls proceed without a pause callback. should_stop is checked before LISN path changes and receiver points. A false result from wait_if_paused ends the scan. Completed measurements are retained; the GUI exports the partial prescan after a stop and does not start the final scan. Stopped scans are logged as stopped, not successfully finished.

Nonzero receiver or initialization status codes now cause a RuntimeError; erroneous receiver samples are not stored. Missing, NaN or infinite limits do not trigger final measurements. Equality at the margin threshold triggers a final reading. Units, persisted scan dictionaries and CSV columns are unchanged.

The GUI worker owns device cleanup for success, cancellation and errors, then emits finished. Measurement and cleanup errors appear in its log. Window shutdown requests stop and waits for the worker; it does not close instruments from the UI thread. If the worker has not stopped within three seconds, closing is deferred and the window remains open. Direct library callers remain responsible for calling quit after failed preparation or measurement.

German / Deutsch

Direkte Prescan-/Finalscan-Aufrufe laufen auch ohne Pause-Callback. should_stop wird vor LISN-Pfadwechseln und Empfängermesspunkten geprüft. Ein False von wait_if_paused beendet den Scan. Vorhandene Messwerte bleiben erhalten; nach Stop exportiert die GUI den Teil-Prescan und startet keinen Finalscan. Ein gestoppter Scan wird nicht als erfolgreich beendet protokolliert.

Empfänger- und Initialisierungsfehlercodes ungleich null lösen RuntimeError aus; fehlerhafte Empfängersamples werden nicht gespeichert. Fehlende, NaN- oder unendliche Grenzwerte lösen keine Nachmessung aus. Gleichheit an der Margin-Schwelle führt zur Nachmessung. Einheiten, gespeicherte Scan-Dictionaries und CSV-Spalten bleiben erhalten.

Der GUI-Worker gibt Geräte bei Erfolg, Stop und Fehler frei und sendet danach finished. Mess- und Freigabefehler erscheinen im Log. Beim Schließen fordert die GUI Stop an und wartet auf den Worker; sie schließt keine Instrumente aus dem UI-Thread. Ist der Worker nach drei Sekunden noch aktiv, bleibt das Fenster offen. Direkte Bibliotheksaufrufer müssen quit auch nach fehlgeschlagener Vorbereitung oder Messung aufrufen.

GUI validation and coverage

The main window now creates its default logger correctly. Invalid scan inputs (no LISN path, nonpositive start frequency or step, or stop below start) are rejected before a worker thread is created. A single positive frequency with start equal to stop is supported. Invalid intermediate frequency edits show an empty frequency list until the input is corrected. Saved setting keys and export formats remain unchanged.

The hardware-independent suite now exercises actual Qt widgets, isolated INI settings, limit selection, button states and plots. Integration tests load the shipped dummy-driver graph through MGraph, verify screening and final CSV results, and prohibit physical VISA/TCP access. The CI test job requires at least 80% combined line and branch coverage; only generated UI/version modules are excluded.

German / Deutsch

Das Hauptfenster erzeugt den Standardlogger jetzt korrekt. Ungültige Messparameter (kein LISN-Pfad, Startfrequenz oder Schrittweite nicht positiv, Stoppfrequenz unter Startfrequenz) werden vor dem Worker-Start zurückgewiesen. Eine einzelne positive Frequenz mit gleichem Start und Stopp ist zulässig. Während ungültiger Frequenzeingaben bleibt die Frequenzliste leer. Gespeicherte Einstellungsschlüssel und Exportformate bleiben erhalten.

Die Tests prüfen echte Qt-Widgets, isolierte INI-Einstellungen, Grenzwertwahl, Buttonzustände und Plots. Integrationstests laden den mitgelieferten Dummy-Treibergraphen über MGraph, prüfen Screening und finale CSV-Ergebnisse und verhindern physische VISA-/TCP-Zugriffe. Der CI-Testjob fordert mindestens 80% kombinierte Zeilen- und Zweigabdeckung; ausschließlich generierte UI-/Versionsmodule sind ausgenommen.