EUT-Überwachung verwenden und erweitern¶
EUT-Überwachung ist Bestandteil jeder Störfestigkeitsprüfung. mpylab trennt dabei drei Verantwortungen:
Monitore beobachten den Prüfling und liefern strukturierte Ereignisse.
Der Messkernel entscheidet über Fortsetzen, Wiederholen oder Abbruch.
Der Mess-Worker führt Sicherheitsaktionen wie RF-Off unmittelbar aus.
Ein Monitor greift deshalb nicht direkt auf MGraph oder HF-Geräte zu.
Manuelle Intervention bleibt auch bei automatischer Überwachung verfügbar.
Die vollständige Ereignisstruktur und Bewertung ist separat dokumentiert.
Vorhandene Messklassen verwenden¶
MSC.Measure_Immunity und TEMCell.Measure_Immunity akzeptieren dieselben
grundlegenden Parameter:
eut_monitorEin automatischer
EUTMonitoroder eine Folge von Monitoren.manual_eut_monitorOptionaler manueller Monitor einer UI. Ohne Angabe erzeugt die Messklasse eine tastaturgestützte Rückfallebene.
performance_criterionLeistungskriterium
"A","B"oder"C":A: Das EUT muss während und nach der Exposition ohne unzulässige Beeinträchtigung bestimmungsgemäß arbeiten.
B: Eine vorübergehende Beeinträchtigung während der Exposition ist zulässig. Danach muss das EUT selbsttätig wieder normal arbeiten; Betriebsart und gespeicherte Daten dürfen nicht verloren gehen.
C: Ein vorübergehender Funktionsausfall ist zulässig. Die normale Funktion darf sich selbsttätig, durch Bedienereingriff oder Reset wiederherstellen.
Die konkrete Produktnorm kann diese allgemeinen Kriterien präzisieren oder zusätzliche Anforderungen festlegen.
post_exposure_timeoutBeobachtungszeit nach RF-Off. Sie ist insbesondere für die Bewertung der Erholung nach Kriterium B oder C erforderlich.
eut_event_policyAnwendungsentscheidung für
degraded,failedundnot_evaluated. Die Sicherheitsanforderungsafety_action="rf_off"wird davon unabhängig behandelt.
Ein reproduzierbarer virtueller Monitor eignet sich für den ersten Lauf:
from mpylab.env.eut import VirtualEUTMonitor
monitor = VirtualEUTMonitor([{
"status": "degraded",
"reason": "virtual_output_tolerance",
"safety_action": "none",
}])
status = measurement.Measure_Immunity(
description="EUT",
eut_monitor=monitor,
performance_criterion="B",
post_exposure_timeout=10.0,
eut_event_policy={
"degraded": "continue",
"failed": "stop",
"not_evaluated": "stop",
"max_retries": 0,
},
# weitere verfahrensspezifische Parameter
)
Die MSC-Schwellwertsuche erhält den Monitor im Parameterblock des
ImmunityThresholdKernel. Qt-Anwendungen reichen ihren
ManualEUTMonitor und automatische Monitore an die Messklasse weiter.
TEMField bietet dafür set_automatic_eut_monitor. Die
MSC- und TEM-Anleitungen beschreiben die jeweiligen Messabläufe.
Einen spezifischen Monitor entwickeln¶
Ein anwendungsspezifischer Monitor erbt von EUTMonitor. Typische Quellen
sind Kamerabilder, Kommunikationsantworten, digitale Zustände oder
Prozessmesswerte. poll_event muss nichtblockierend oder zeitlich klar
begrenzt sein:
from mpylab.env.eut import EUTMonitor, make_eut_event
class CommunicationEUTMonitor(EUTMonitor):
def start_exposure(self, context):
self.frequency = context.get("frequency")
self.start_observation()
def poll_event(self):
observation = self.read_status_nonblocking()
if observation is None:
return None
if observation == "ok":
return make_eut_event(
"passed",
"communication_ok",
source="eut_link",
)
return make_eut_event(
"failed",
"communication_lost",
details={"frequency": self.frequency},
safety_action="rf_off",
source="eut_link",
)
def stop_exposure(self):
self.stop_observation()
def close(self):
self.close_connection()
Treiberzugriffe mit nennenswerter Laufzeit werden gekapselt:
from mpylab.env.eut import ThreadedEUTMonitor
monitor = ThreadedEUTMonitor(
CommunicationEUTMonitor(),
poll_interval=0.02,
join_timeout=1.0,
)
Der umschlossene poll_event-Aufruf muss trotzdem eine endliche maximale
Laufzeit besitzen, damit der Thread beim Stoppen sicher beendet werden kann.
Ein Ausfall eines automatischen Monitors wird als monitor_diagnostic
gespeichert; er darf nicht als beobachteter EUT-Ausfall ausgegeben werden.
In eine neue Anwendung integrieren¶
EUTMonitoringSession bündelt manuelle und automatische Monitore und
verwaltet Exposition, Phasen, Eventvalidierung und Diagnosen:
from mpylab.env.eut import EUTMonitoringSession, ManualEUTMonitor
manual = ManualEUTMonitor(poll_key=my_poll_key, keylist="sS")
session = EUTMonitoringSession.from_monitors(manual, [monitor])
try:
session.start_exposure({"frequency": frequency, "position": position})
event = session.poll_event()
if event is not None and event["safety_action"] == "rf_off":
measurement_worker.rf_off() # unmittelbarer Sicherheitspfad
session.start_phase(
"post_exposure",
{"frequency": frequency, "position": position, "rf_on": False},
)
finally:
session.close()
Die Session schaltet RF niemals selbst. Eine neue Messanwendung muss
Sicherheitsaktionen im Worker ausführen, Monitorereignisse in die
Messhistorie übernehmen und close in einem finally aufrufen. RF-Off
muss dabei vor möglicherweise fehlschlagendem Monitor-Cleanup erfolgen.
Ohne Hardware testen¶
VirtualEUTMonitorliefert vorgegebene Ereignisse deterministisch.RandomEUTMonitor(seed=...)eignet sich für längere Ablauf- und UI-Tests, nicht als Nachweis eines realen EUT-Verhaltens.Tests müssen manuelle Intervention, sofortiges RF-Off, Post-Exposure, Monitordiagnosen und Cleanup-Fehler abdecken.
Ein virtueller End-to-End-Lauf soll dieselben Messklassenparameter wie der spätere Hardwarelauf verwenden.
Die kuratierte Python-API dokumentiert alle öffentlichen Monitor- und Sessionmethoden. Thread- und GUI-Regeln stehen unter UI-Adapter und Worker-Schnittstelle.