# SSV-Konzept

URL: https://irs.systems/docs/ssv/ssv-concept

![SSV-Konzept: Eingang und Trigger pro Kanal, den Kanälen zugewiesene Window-Sets, Analysefenster mit Analysefunktionen; Referenztrigger und Timer-Trigger](/docs/assets/ssv/images/ssv-concept.png)

## Analyseprojekt

Ein SSV-Analyseprojekt ist eine einzelne Konfigurationsdatei, die alle Informationen zu Hardware-Setup, Kanaleinstellungen, Triggern, Fenstern und Funktionen enthält.

## Gerät

Ein „Gerät“ ist definiert als Kombination aus einer National Instruments FlexRio-FPGA-Karte und einem IRS SSV-Modul. Es ermöglicht eine echt parallele Abtastung mit definierten Abtastraten und Kanalzahlen (abhängig von den Fähigkeiten des SSV-Moduls).
Die Geräteressource entspricht der Aliasdefinition der FlexRio-Basiskarte in MAX, z. B. „Rio01“

Ein Gerät wird immer aus einer Vorlage erstellt, die die Fähigkeiten und Eigenschaften des Moduls vollständig definiert.
Um ein Gerät zu konfigurieren, verwenden Sie den [Channel Explorer](/docs/ssv/ssv-editor-user-interface#channel-explorer)

### Geräteeigenschaften

**Benutzerdefinierte Einstellungen**

| Einstellung | Beschreibung |
| --- | --- |
| Device Name | Benutzerdefinierter Name |
| Enabled | Das Gerät wird nicht verwendet, wenn es deaktiviert ist |
| Description | Benutzerdefinierte Beschreibung |
| Resource | Ressourcenbeschreibungs-String, der benötigt wird, um die Hardware im System zu finden. Muss entweder mit der Ressourcen- oder der Aliasdefinition im Measurement & Automation Explorer übereinstimmen |
| Options | Gerätespezifischer Konfigurations-String, siehe Hardwaredokumentation. Derzeit nicht verwendet |

**Feste Einstellungen (schreibgeschützt)**

| Einstellung | Beschreibung |
| --- | --- |
| Type | Hardwaretyp |
| Number of Channels | Anzahl der von diesem Gerät unterstützten Kanäle |
| Sample Rate | Feste Abtastrate für jeden Kanal dieses Geräts (in Abtastwerten pro Sekunde) |
| Range Min | Spannung, die den minimalen (maximal negativen) Wert darstellt. Wird auch für die Skalierung verwendet(!) |
| Range Max | Spannung, die den maximalen (positiven) Wert darstellt. Wird auch für die Skalierung verwendet(!) |
| Resolution | Auflösung in [Bit] für jeden Kanal. Beachten Sie, dass 1 Bit als Vorzeichen verwendet wird, ein 14-Bit-Gerät hat also eine Auflösung von ±13 Bit |
| Windows per Channel | Maximale Anzahl von Analysefenstern pro Kanal |
| Max Window Width [ms] | Maximale Größe jedes Fensters in Millisekunden |
| Max Period Width [ms] | Maximale gesamte Periodenbreite in Millisekunden |

## Kanal

Ein Kanal stellt einen Analogeingang des Geräts dar, zu dem er gehört.
Jeder Kanal stellt außerdem eine Triggerquelle dar, die auch von jedem anderen Kanal desselben Geräts verwendet werden kann. Jeder Kanal hat seine eigenen Triggereinstellungen. Ein Window-Set kann mehreren Kanälen zugewiesen werden. Die Fähigkeiten des physischen Kanals hängen vom Modul ab, Einzelheiten finden Sie in der Hardwaredokumentation.

Um einen Kanal zu konfigurieren, verwenden Sie den [Channel Explorer](/docs/ssv/ssv-editor-user-interface#channel-explorer)

### Kanaleigenschaften

**Benutzerdefinierte Einstellungen**

| Einstellung | Beschreibung |
| --- | --- |
| Channel Name | Benutzerdefinierter Name |
| Connector | Dokumentiert die Steckverbinder-Verdrahtung des Kanals im Projekt |
| Enabled | Aktiviert/deaktiviert die Auswertung der Ergebnisse des Kanals. Andere Kanäle können den Trigger dieses Kanals jedoch weiterhin verwenden! |
| Comment | Benutzerdefinierter Kommentar |
| Window Set | Legt fest, welches Window-Set (Sammlung von Analysefenstern und -funktionen) auf diesen Kanal angewendet wird |
| Trigger Delay | Gibt die Verzögerung (in ms) an, die nach dem Empfang des Referenztriggers auf den Abtaststart angewendet wird. Wird nur beim Triggertyp Reference ausgewertet! |
| Channel Range Max | Nur RPLUS! Geben Sie die maximal zu erwartende Spannung ein. Die Software wählt dann den optimalen Bereich für den Messkanal. Mögliche Bereiche: 100 V, 50 V, 25 V, 12 V, 6 V, 3 V, 1,5 V. Hinweis: Der Spannungsbereich des SSV48RPLUS kann nur in Kanalgruppen konfiguriert werden. Die Kanalgruppen sind: ch0 bis ch7, ch8 bis ch15, ch16 bis ch23, ch24 bis ch31, ch32 bis ch40, ch41 bis ch47. Wenn Sie zum Beispiel Kanal 0 auf 1,5 V und Kanal 5 auf 100 V festlegen, wird Channel Range Max von ch0 bis ch7 auf 100 V gesetzt |
| Channel Range Min | Nur RPLUS! Geben Sie die minimal zu erwartende Spannung ein. Die Software wählt dann den optimalen Bereich für den Messkanal. Mögliche Bereiche: - 100 V, - 50 V, - 25 V, - 12 V, - 6 V, - 3 V, - 1,5 V. Hinweis: Der Spannungsbereich des SSV48RPLUS kann nur in Kanalgruppen konfiguriert werden. Die Kanalgruppen sind: ch0 bis ch7, ch8 bis ch15, ch16 bis ch23, ch24 bis ch31, ch32 bis ch40, ch41 bis ch47. Wenn Sie zum Beispiel Kanal 0 auf - 1,5 V und Kanal 5 auf - 100 V festlegen, wird Channel Range Min von ch0 bis ch7 auf - 100 V gesetzt |
| Scaling Factor | Mit diesem Faktor werden die Rohwerte multipliziert (vor dem Addieren des Offsets) |
| Scaling Offset | Dieser Offsetwert wird zu den Rohwerten addiert (nach der Skalierung mit dem Faktor) |
| Scaling Unit | Gibt die Einheit für skalierte Werte an |
| Filter | Digitalfilter für diesen Kanal |
| Options | Kanalspezifischer Options-String, siehe Dokumentation |

**Laufzeiteigenschaften (nicht gespeichert)**

| Eigenschaft | Beschreibung |
| --- | --- |
| Errors | Fehlgeschlagene Fenster im letzten Durchlauf |
| Error Info | Fehlerinformationen aus dem letzten Durchlauf |

**Feste Einstellungen (schreibgeschützt)**

| Einstellung | Beschreibung |
| --- | --- |
| Trigger | Der Triggername dieses Kanals |
| Channel Nr | Nummer dieses Kanaltyps innerhalb des Geräts |
| Channel Type | Typ des Kanals |

## Trigger

Ein Trigger ist ein Ereignis, das den zugehörigen Kanal veranlasst, die Abtastung zu starten oder den Triggerabstand auf 0 zurückzusetzen (Beginn einer neuen Messperiode).
Jeder Trigger kann entweder seinen Kanal (= Selbsttrigger), einen anderen Trigger (= Referenztrigger) oder einen Timer als Quelle verwenden. Einzelheiten finden Sie unter [Triggertypen](/docs/ssv/ssv-concept#triggertypen).

Um einen Trigger zu konfigurieren, verwenden Sie das Fenster [Trigger Setup](/docs/ssv/ssv-editor-user-interface#trigger-setup).

### Triggereigenschaften

**Benutzerdefinierte Einstellungen**

| Einstellung | Beschreibung |
| --- | --- |
| Label | Benutzerdefinierte Bezeichnung des Triggers |
| Show TriggerCounter | Bei true wird den Ergebnissen ein Wert „TriggerCounter“ hinzugefügt |
| Master Trigger | Legt fest, ob dieser Trigger der Master-Trigger ist. Hinweis: Es ist nur ein Master-Trigger zulässig! Wird er entfernt, werden auch alle dadurch ungültig gewordenen Referenzen entfernt |
| Trigger Type | Self: Triggerquelle ist der eigene Kanal; Reference: verwendet die Quelle eines anderen Kanals. Der Trigger wird direkt [StartDelay] ms nach dem Referenztrigger ausgelöst; Timer: softwaredefiniertes periodisches Selbsttriggern nach ms |
| Comment | Benutzerdefinierte zusätzliche Informationen |
| Edge | Richtung der Triggerflanke (fallend / steigend) |
| Threshold | Triggerpegel. Wird dieser Pegel überschritten (in positiver oder negativer Richtung, abhängig von der Flanke), wird der Trigger aktiviert |
| Blackout Time | Nach dem Auslösen wird jedes folgende Triggerereignis für diese Zeit ignoriert |
| Rearming LowerBound | Der Trigger wird wieder scharf geschaltet, wenn das Signal mindestens RearmingTime [ms] lang zwischen RearmingLowerBound und RearmingUpperBound bleibt |
| Rearming UpperBound | Der Trigger wird wieder scharf geschaltet, wenn das Signal mindestens RearmingTime [ms] lang zwischen RearmingLowerBound und RearmingUpperBound bleibt |
| Rearming MinTime | Der Trigger wird wieder scharf geschaltet, wenn das Signal mindestens RearmingTime [ms] lang zwischen RearmingLowerBound und RearmingUpperBound bleibt |
| RefTrigger Delay Min | Minimal zulässige Zeit zwischen diesem und dem Referenztriggerereignis in [ms], wird zur Validierung verwendet. Wird nur beim Triggertyp Reference ausgewertet! |
| RefTrigger Delay Max | Maximal zulässige Zeit zwischen diesem und dem Referenztriggerereignis in [ms], wird zur Validierung verwendet. Wird nur beim Triggertyp Reference ausgewertet! |
| Trigger Distance | Legt die Software-Triggerrate in [ms] fest *(nur für den Triggertyp Timer)* |
| Trigger Distance Min | Minimale Zeit zwischen zwei Triggerereignissen in [ms], wird zur Validierung verwendet |
| Trigger Distance Max | Maximale Zeit zwischen zwei Triggerereignissen in [ms], wird zur Validierung verwendet |
| Reference Trigger | Der Trigger, der für diesen Kanal verwendet wird *(nur für den Triggertyp Reference)* |

**Feste Einstellungen (schreibgeschützt)**

| Einstellung | Beschreibung |
| --- | --- |
| Trigger ID | Eindeutige Kennung |
| Source | Hardwarequelle des Triggers (Kanal-ID) |

### Triggertypen

Jeder Trigger kann konfiguriert werden als

- [Selbsttrigger](/docs/ssv/ssv-concept#selbsttrigger)
- [Referenztrigger](/docs/ssv/ssv-concept#referenztrigger)
- [Timer-Trigger](/docs/ssv/ssv-concept#timer-trigger)

**Beispiel-Setup**

- Channel1: Selbsttrigger
- Channel2: Referenztrigger (Trg01)
- Channel3: Referenztrigger (Trg01)
- Channel4: Selbsttrigger
- Channel5: Timer-Trigger

![Beispiel-Setup: Kanäle 1 bis 5 mit Selbsttriggern, Referenztriggern und einem Timer-Trigger, Window-Sets zugewiesen](/docs/assets/ssv/images/ssv-trigger-types.png)

#### Selbsttrigger

Beim Triggertyp Self verwendet der Trigger den Eingang des zugehörigen Kanals als Triggerquelle. Sie müssen Flankenrichtung, Schwellwert, Blackout Time (optional) und Rearming (optional) angeben.
Ist in diesem Modus zusätzlich ein Referenztrigger definiert, wird der Referenztrigger nur für zusätzliche Timing-Prüfungen verwendet (siehe [Trigger-Testfunktionen](/docs/ssv/ssv-concept#referenztrigger-pruefung)).

![Kanal 1 und Kanal 2 mit eigenen Triggern; RefTrigger DelayMin und RefTrigger DelayMax ab Trigger 1 gemessen](/docs/assets/ssv/images/ssv-self-trigger.png)

#### Referenztrigger

Wird ein Referenztrigger verwendet, wird der physische Kanaleingang ignoriert und stattdessen direkt ein anderes (vorhandenes und konfiguriertes) Triggersignal verwendet. In diesem Fall wird das Triggerereignis einer anderen Triggerquelle verwendet. Auf den Kanal kann eine Startverzögerung angewendet werden, um ähnliche Signale auf verschiedenen Kanälen mit bekanntem Versatz zueinander auszurichten.
Jeder Kanal kann eine eigene [Trigger Delay] [ms] festlegen, die zur ursprünglichen Triggerzeit addiert wird. So lässt sich eine Gruppe ähnlicher, aber kanalweise verzögerter Signale bilden, die sich nach dieser Ausrichtung dasselbe Window-Set teilen können. Das ist nützlich für abhängige Signale, die synchron relativ zu einem bestimmten Ereignis erfasst werden sollen.

![Kanal 2, ausgelöst durch Trigger 1 plus StartDelay](/docs/assets/ssv/images/ssv-reference-trigger.png)

Beispiel: Ein Motorsteuergerät steuert 6 Zylinder mit nahezu identischen Einspritzsignalen an, die pro Umdrehung um 60° versetzt sind. In diesem Fall können Sie den ersten Kanal als Referenz verwenden und auf die Kanäle 2–6 entsprechende Offsets anwenden. Nun haben Sie auf allen 6 Kanälen ähnlich getriggerte Kurven und können ein einziges Window-Set mit Analysefunktionen verwenden.

#### Timer-Trigger

Eine weitere Möglichkeit ist ein „Timer-Trigger“, der alle [Trigger Distance] ms periodisch ein Triggerereignis erzeugt. Das ist besonders nützlich bei statischen oder instabilen Signalen, die sich sonst nicht sauber triggern und überwachen ließen.

![Signal mit periodischen Timer-Triggerereignissen bei konstanter Trigger Distance](/docs/assets/ssv/images/ssv-timer-trigger.png)

#### Blackout Time (Hold-off)

Nach einem Triggerereignis ignoriert der Trigger für diese Zeit (in ms) alle weiteren Ereignisse. Der Wert 0 deaktiviert diese Funktion
Es wird empfohlen, mindestens etwa 20 % der erwarteten Zykluszeit anzugeben, um Fehltrigger durch Rauschen usw. zu vermeiden.

![Blackout Time nach einem Triggerereignis: Schwellwertüberschreitungen innerhalb der Blackout Time werden ignoriert](/docs/assets/ssv/images/ssv-blackout-time.png)

#### Trigger-Rearming

Manche Signale haben keinen charakteristischen Triggerpegel, der ein definiertes Triggern an einem bestimmten Punkt erlaubt. In vielen Fällen hilft hier die Rearming-Funktion.
Bleibt das Signal für eine definierte Mindestzeit (Rearming min time) innerhalb eines bestimmten Spannungsbereichs (Rearming LowerBound/UpperBound), wird der Trigger scharf geschaltet und löst bei der nächsten gültigen Schwellwert-/Flankenbedingung aus. Beachten Sie, dass der Trigger nicht sofort auslöst, wenn die Rearming-Bedingung erfüllt ist! Sie ist lediglich eine Vorbedingung, die das Triggern „erlaubt“.

Ist eine Rearming-Zeit definiert, löst der nächste Trigger erst aus, wenn das Signal die Rearming-Bedingungen erfüllt hat.

![Trigger-Rearming: Das Signal muss vor dem nächsten Trigger für die Rearming min time im Rearming-Bereich bleiben](/docs/assets/ssv/images/ssv-trigger-rearming.png)

#### Referenztrigger-Prüfung

In diesem Fall verwenden zwei Kanäle ihre eigenen Triggerquellen (Selbsttrigger).
Ist zusätzlich eine Referenztriggerquelle konfiguriert, kann sie zur Überwachung von Timing-Bedingungen zwischen eigenem Trigger und Referenztrigger verwendet werden:
Überschreitet der gemessene Abstand die Grenzwerte, wird ein Fehler „TriggerDelay“ gemeldet.

In diesem Beispiel definieren die Parameter TriggerRefDelayMin und TriggerRefDelayMax einen zusätzlichen Test.

![Trigger 2 auf Kanal 2 muss zwischen RefTrigger DelayMin und RefTrigger DelayMax nach Trigger 1 auftreten](/docs/assets/ssv/images/ssv-reference-trigger-check.png)

#### Prüfung des Triggerabstands

Sind die Triggerparameter „Trigger Distance Min“ und „Trigger Distance Max“ ungleich 0 gesetzt, wird zusätzlich die Periode des Selbsttriggers geprüft, um Jitter oder fehlende Trigger zu erkennen. Überschreitet die gemessene Periode die Grenzwerte, wird ein Fehler „TriggerDistance“ gemeldet.

#### Triggerzähler

Ist der Triggerparameter „Show Trigger Counter“ auf „true“ gesetzt, wird jedes Triggerereignis gezählt.
Diese Funktion wird häufig verwendet, um ein „Einzelereignis“ zu prüfen.

> **Hinweis**
> Im SSV Config Editor muss kein Grenzwert angegeben werden. Falls ein Grenzwert erforderlich ist, muss er separat bearbeitet werden, z. B. im Testplan (TestExecSL).

## Window-Sets

Ein Window-Set ist eine benannte Sammlung von Analysefenstern (AnalysisWindows).
Window-Sets können beliebig vielen Kanälen zugewiesen werden, alle zugewiesenen Kanäle müssen jedoch denselben Gerätetyp verwenden.
Die Anzahl der Fenster pro Window-Set und der Analysefunktionen pro Fenster ist durch die Geräteeigenschaften begrenzt.

> **Hinweis**
> Die Mehrfachzuweisung ist lediglich eine Komfortfunktion des Editors. Auch wenn ein Window-Set mehreren Kanälen zugewiesen ist, verwendet tatsächlich jeder Kanal seine eigenen Fenster (die parallel laufen) mit einer individuellen Kopie der Fenstereinstellungen. Das bedeutet, dass jeder Kanal seine eigenen Fenster hat und jede Funktion jedes Fensters ihren eigenen Fehlerzähler verwaltet!

![Window-Set mit mehreren Analysefenstern, jeweils mit mehreren Analysefunktionen](/docs/assets/ssv/images/ssv-window-set.png)

## Analysefenster

Ein Analysefenster definiert einen bestimmten Zeitraum relativ zu einem Triggerereignis.
Ein Analysefenster selbst hat keinerlei Funktionalität, es dient als Container für die [Analysefunktionen](/docs/ssv/ssv-concept#analysefunktionen), die es aufnehmen kann. Im [WindowSet Editor](/docs/ssv/ssv-editor-user-interface#windowset-editor) wird es als rechteckiger Bereich dargestellt (siehe Beispiel unten), der obere und der untere Rand sind jedoch nur für die Funktionen [UpperLimit](/docs/ssv/ssv-concept#upper-lower-limit) und [LowerLimit](/docs/ssv/ssv-concept#upper-lower-limit) relevant. Alle anderen Funktionen verwenden nur den Zeitraum (linker und rechter Rand) und bieten eigene zusätzliche Parameter.

Analysefenster sind in [Window-Sets](/docs/ssv/ssv-concept#window-sets) organisiert.

![WindowSet Editor mit den Analysefenstern I_Peak, I_Peak_Count, I_Hold0, I_Hold1 und I_Hold1ac über einem Injektorstromsignal](/docs/assets/ssv/images/ssv-analysis-windows.png)

## Analysefunktionen

**Definition**

Analysefunktionen führen Echtzeittests innerhalb eines bestimmten [Analysefensters](/docs/ssv/ssv-concept#analysefenster) durch.

**Eigenschaften**

Jedes Analysefenster verfügt über einen festen Satz (physisch fest verdrahteter) anwendbarer Analysefunktionen.

Jedes Fenster kann alle verfügbaren Funktionen gleichzeitig aktivieren, ohne die Gesamtleistung zu beeinträchtigen.
Nur aktivierte Funktionen werden zur Laufzeit ausgewertet und gemeldet.

Jede Funktion verwaltet ihren eigenen Fehlerzähler (pro Kanal und Fenster). Dieser Zähler wird um 1 erhöht, wenn die Testbedingungen innerhalb des Fensters nicht erfüllt sind (auch bei mehreren Fehlschlägen). Die maximale Anzahl an Fehlschlägen ist auf 255 begrenzt. Werden weitere Fehler erkannt, bleibt der Wert bei 255 (kein Überlauf).

Außerdem hat jede Funktion einen Rückgabewert, der üblicherweise als Messwert verwendet wird, auch wenn kein Fehler aufgetreten ist.
Um einen gültigen Wert zurückzugeben, muss das gesamte Fenster mindestens einmal ausgeführt worden sein. Mit anderen Worten: Es kann kein gültiger Messwert zurückgegeben werden, wenn kein Trigger aufgetreten ist oder nicht mindestens eine Periode des Signals gelesen wurde. Zur Unterstützung der Auswertung hat jeder Wert außerdem ein Gültigkeitsflag.

Um alle Fehlerzähler zurückzusetzen, lesen Sie die SSV-Ergebnisse aus dem Modul aus (ein einzelner Fehlerzähler kann nicht zurückgesetzt werden)

**Funktionsübersicht**

- [Average](/docs/ssv/ssv-concept#average)
- [Area Check](/docs/ssv/ssv-concept#area-check)
- [Duty Cycle](/docs/ssv/ssv-concept#duty-cycle)
- [Edge Counter](/docs/ssv/ssv-concept#edge-counter)
- [Lower Limit](/docs/ssv/ssv-concept#upper-lower-limit)
- [Upper Limit](/docs/ssv/ssv-concept#upper-lower-limit)

### Average

Average berechnet den arithmetischen Mittelwert aller Abtastwerte innerhalb der (linken und rechten) Fenstergrenzen.
Die Grenzwerte werden angewendet, wenn der rechte Rand des Fensters erreicht ist. Werden die Grenzwerte überschritten, wird der Fehlerzähler „Average“ um 1 erhöht (bis 255, danach bleibt er bei 255)

> **Hinweis**
> Aufgrund von Einschränkungen des FPGA werden die Abtastwerte innerhalb des Fensters aufsummiert, und die Prüfung erfolgt gegen die berechnete minimale/maximale Summe bezogen auf das gesamte Fenster. Beispiel: 1 Ms/s, 10 ms Fenstergröße (= 1000 Abtastwerte), 4,5–5,5 V Mittelwert bedeutet, dass die Summe der Abtastwerte zwischen 45.000 und 55.000 liegen muss. Wenn die Ergebnisse aus dem FPGA abgerufen werden, wird diese Summe durch die Fenstergröße geteilt, woraus sich der Mittelwert ergibt. Wenn das Fenster die Signalperiode überschreitet, ist der Mittelwert daher falsch. Achten Sie deshalb bei Verwendung der Funktion Average auf die zeitlichen Grenzen des Fensters. Diese Funktion wird am Ende des Fensters ausgewertet. Daher wird auch das Fehlerflag am Ende des Fensters gesetzt.

**Ausgabewert**

Arithmetischer Mittelwert, ausgewertet 1 Abtastwert nach Abschluss des Fensters

**Parameter**

***Minimum***

Niedrigster zulässiger Wert des berechneten Mittelwerts

***Maximum***

Höchster zulässiger Wert des berechneten Mittelwerts

**Beispiel**

![Funktion Average: Mittelwert zwischen Minimum und Maximum innerhalb der Fenstergrenzen (nur zeitlich)](/docs/assets/ssv/images/ssv-average-example.png)

### Area Check

Prüft die minimale/maximale Zeit aufeinanderfolgender Abtastwerte zwischen oberer und unterer Schwelle.

> **Hinweis**
> Diese Funktion wird ausgewertet, wenn das Signal die obere/untere Grenze verlässt. Daher wird auch das Fehlerflag jedes Mal gesetzt, wenn der Grenzwert überschritten wird. Area Check überwacht, ob sich das Signal für eine bestimmte Zeit innerhalb eines bestimmten Bereichs befindet.

#### Testergebnis

Die Funktion ist PASSED, wenn die gemessene Zeit innerhalb des Zeitlimits Min/Max liegt

**Parameter**

***Time Limit Max***

Maximale Zeit (in Millisekunden) aufeinanderfolgender(!) Abtastwerte im Bereich

***Time Limit Min***

Minimale Zeit (in Millisekunden) aufeinanderfolgender (!) Abtastwerte im Bereich

***Upper Bound***

Legt den oberen Pegel des Erkennungsbereichs fest.

***Lower Bound***

Legt den unteren Pegel des Erkennungsbereichs fest.

**Entry Check Mode:** Legt fest, ob jeder Abschnitt des Signals, der zwischen Upper und Lower Bound liegt, innerhalb von Time Limit Min und Max liegen muss oder nur der größte Abschnitt aufeinanderfolgender Abtastwerte.

- 1 = strict: Jeder Abschnitt muss innerhalb der Zeitgrenzen liegen.
- 0 = tolerant: Nur der größte Abschnitt muss innerhalb der Zeitgrenzen liegen.

#### Area-Check-Szenarien

**a) Kein Puls zulässig**

![Area Check no_pulse_allowed: Fenster zwischen 4 und 9 ms, Time Limit Min und Max 0, Entry Check Mode nicht relevant](/docs/assets/ssv/images/ssv-area-check-no-pulse.png)

Dieser Modus dient zur Überprüfung, dass im definierten Zeitraum kein Signal auftritt.
Tritt ein Puls auf, ist dies ein Fehler. Daher werden die Min/Max-Grenzen auf 0 gesetzt.

**b) 100 % Puls**

![Area Check 100%_pulse: Fenster von 4 bis 9 ms, Time Limit Min und Max 5, Entry Check Mode nicht relevant](/docs/assets/ssv/images/ssv-area-check-100-pulse.png)

Das Signal liegt im definierten Zeitraum vollständig von Anfang bis Ende an.
Time Limit muss genau so lang sein wie das Fenster.

> **Hinweis**
> Aufgrund der Skalierung kann das Ergebnis um ±1 Digit abweichen.

**c) Jeder Puls innerhalb der Grenzen**

![Area Check every_pulse_between_the_limit: Pulse von 2, 4, 4 und 2 ms, Entry Check Mode 1, Puls zwischen 1,5 und 5 ms](/docs/assets/ssv/images/ssv-area-check-every-pulse.png)

1 = strict: Jeder Abschnitt muss innerhalb der Grenzen liegen.

**d) Maximaler Puls innerhalb der Grenzen**

![Area Check max_pulse_between_the_limit: längster Puls 14 ms, Entry Check Mode 0, Time Limit Min 12 und Max 16, nur der maximale Puls muss innerhalb der Grenzen liegen](/docs/assets/ssv/images/ssv-area-check-max-pulse.png)

0 = tolerant: Nur der größte Abschnitt muss innerhalb der Zeitgrenzen liegen.

### Duty Cycle

Duty Cycle berechnet das Verhältnis der High-Zeit des Signals (Zeit zwischen den Übergängen an der oberen und der unteren Schwelle) zur Gesamtzeit des Fensters.

Die „High“-Phase beginnt, wenn das Signal mit steigender Flanke die obere Schwelle durchläuft, und dauert an, bis das Signal die untere Schwelle in fallender Richtung durchläuft.
Die Summe der High-Phasen geteilt durch die Gesamtzeit des Fensters wird als Tastverhältnis ausgewertet und ergibt einen Ausgabebereich von 0...100 %

> **Hinweis**
> Aufgrund von Einschränkungen des FPGA wird die Anzahl der Abtastwerte in der „High“-Phase aufsummiert, und die Prüfung erfolgt gegen die berechnete minimale/maximale Anzahl von Abtastwerten der „High“-Phase bezogen auf das gesamte Fenster. Beispiel: 1 ms/s, 10 ms Fenstergröße (= 10.000 Abtastwerte), 10–20 % Tastverhältnis bedeutet, dass das „High“ in der „High“-Phase durch die Fenstergröße geteilt wird, woraus sich der Wert des Tastverhältnisses ergibt. Folglich haben die Fenstergrenzen erheblichen Einfluss auf den Ergebniswert! Diese Funktion wird am Ende des Fensters ausgewertet. Daher wird auch das Fehlerflag am Ende des Fensters gesetzt.

> **Hinweis**
> Beachten Sie, dass die Funktion den Start- oder Endpunkt des Signalzyklus nicht auswertet! Die Fenstergrenzen haben erheblichen Einfluss auf den Ergebniswert!

**Ausgabewert**

Tastverhältnis (0...1)

**Parameter**

***Minimum***

Niedrigstes zulässiges Tastverhältnis (>= 0 %)

***Maximum***

Höchstes zulässiges Tastverhältnis (<= 100 %)

**Testergebnis**

Die Funktion ist PASSED, wenn das Tastverhältnis zwischen Minimal- und Maximalwert liegt (oder ihnen gleich ist).
Andernfalls wird der Fehlerzähler um 1 erhöht (bis 255)

**Beispiel**

![Beispiel Duty Cycle: High-Phasen t1 bis tN zwischen threshold high und threshold low, Tastverhältnis = Summe von t1..N geteilt durch twindow](/docs/assets/ssv/images/ssv-duty-cycle-example.png)

### Edge Counter

Duty Cycle zählt die Übergänge zwischen der Erkennung der oberen und der unteren Schwelle innerhalb der Zeitspanne des Fensters.

Die „High“-Phase beginnt, wenn das Signal mit steigender Flanke die obere Schwelle durchläuft, und dauert an, bis das Signal die untere Schwelle in fallender Richtung durchläuft.
Die Summe der Wechsel innerhalb der Gesamtzeit des Fensters wird als Flankenzahl ausgewertet.

> **Hinweis**
> Beachten Sie, dass die Funktion den Start- oder Endpunkt des Signalzyklus nicht auswertet! Die Fenstergrenzen haben erheblichen Einfluss auf den Ergebniswert!

**Ausgabewert**

Flankenzahl (max. 65.536)

**Parameter**

***Minimum***

Minimale Anzahl erwarteter Flanken (>= 0)

***Maximum***

Höchste Anzahl erwarteter Flanken (<= 65.536)

**Testergebnis**

Die Funktion ist PASSED, wenn die Flankenzahl zwischen Minimal- und Maximalwert liegt.
Andernfalls wird der Fehlerzähler um 1 erhöht (bis 255)

**Beispiel**

![Beispiel Edge Counter: Übergänge zwischen threshold high und threshold low innerhalb der Fenstergrenzen, count = 7](/docs/assets/ssv/images/ssv-edge-counter-example.png)

### Upper/Lower Limit

Upper Limit und Lower Limit erkennen Verletzungen des jeweiligen Fensterrands.
Im Gegensatz zu den meisten anderen Funktionen werden die Fehler unmittelbar nach der ersten Grenzwertverletzung erkannt.

UpperLimit und LowerLimit sind unabhängige Funktionen, beide können optional und unabhängig voneinander auf jedes Fenster angewendet werden. Jede Funktion hat ihren eigenen Fehlerzähler und Rückgabewert.
Werden die Grenzwerte überschritten, wird der Fehlerzähler „Average“ um 1 erhöht (bis 255, danach bleibt er bei 255).

> **Hinweis**
> Dies sind die einzigen Funktionen, die die Fensterränder direkt verwenden, während alle anderen Funktionen eigene Parameter für ihre Grenzwerte definieren.

**Ausgabewert**

Der Minimal-/Maximalwert innerhalb der zeitlichen Fenstergrenzen.

**Parameter**

***Check max (/min) value in window***

Wenn ausgewählt, prüft die Funktion zusätzlich, ob der erkannte Messwert (niedrigster/höchster Wert) innerhalb der Fenstergrenzen liegt. Andernfalls schlägt die Funktion fehl, auch wenn der angegebene Grenzwert nicht verletzt wurde.

***Minimum***

Niedrigster zulässiger Wert innerhalb der zeitlichen Fenstergrenzen.

***Maximum***

Höchster zulässiger Wert innerhalb der zeitlichen Fenstergrenzen.

**Beispiel**

![Beispiel Upper und Lower Limit: Grenzen des Analysefensters und die Messwerte für Upper und Lower Limit](/docs/assets/ssv/images/ssv-limit-example.png)

## Quellen

Jedes einzelne Ergebnis hat im Bericht einen eindeutigen Quell-String. Die [Projekteinstellungen](/docs/ssv/ssv-editor-user-interface#project-settings) legen fest, wie der Quell-String im [Bericht](/docs/ssv/ssv-editor-user-interface#log) und in der [Auswertung](/docs/ssv/ssv-concept#ergebnisauswertung) gebildet wird

**Signalquellen**

Signalquellen werden als Kombination aus `<Device>/<Channel>/<WindowName>/<FunctionName>` gebildet
(wobei der Inhalt von `<Device>` und `<Channel>` von ProjectSettings/Resource Lookup Mode abhängt)

*z. B.*

```text
RIO0/INJ_0_Current/I_Hold0/Average
RIO0/INJ_0_Current/I_Peak/UpperLimit
```

**Virtuelle Quellen**

Die meisten Messungen beziehen sich auf eine eindeutige Kombination aus Gerät/Signal/Fenster/Funktion. In einigen Situationen muss ein Fehler oder eine Warnung gemeldet werden, die sich nicht auf eine Fensterfunktion beziehen kann:

- `Device/Signal/TriggerCounter`
- `Device/Signal/TriggerDelay`
- `Device/Signal/TriggerDistance`

*z. B.*

```text
RIO0/INJ_0_Current/TriggerDistance
```

## Testergebnisse

Nach dem Start überwachen alle SSV-Module die Analogeingänge permanent gemäß den Projekteinstellungen.
Um den aktuellen Überwachungsstatus zu erhalten, ist ein Aufruf von „read results“ erforderlich (API-Funktion).

Dieser Aufruf

- gibt jeden Messwert zurück
- gibt alle Fehlerzähler zurück
- setzt alle Fehlerzähler zurück

Eine Vorschau dieser Aktion ist auch im Projekteditor verfügbar, siehe [Log-Fenster](/docs/ssv/ssv-editor-user-interface#log)

## API

**Übersicht der SSV-Softwarearchitektur**

![SSV-Softwarearchitektur: AnalysisWindows .NET dll, ProjectEditor, IRS.SSV.API COM- und .NET-Assembly, irs_ssv_server.exe, IRS SSV CMI, Agilent TestExec SL Actions, LabVIEW-Quelldateien, irs_ssv_drv.llb, irs_ssv_api.llb und TestStand-Sequenzen](/docs/assets/ssv/images/ssv-software-architecture.png)

### LabVIEW

Siehe `SSV API.LabVIEW.chm`

### .NET

Siehe `SSV API.NET.chm`

### Verwendung der API

Um die Projektkonfigurationsdatei in Ihrer Testumgebung zu verwenden, wählen Sie eine der verfügbaren APIs (Application Programmer Interface):

Die **=>.NET API** ist für den Einsatz in nicht LabVIEW-basierten Umgebungen vorgesehen, die .NET unterstützen. Da FlexRIO stark von LabVIEW abhängt, verwendet der Kerntreiber intern weiterhin LabVIEW und stellt seine Funktionalität einem .NET-Wrapper und, darauf aufbauend, auch COM (ActiveX) zur Verfügung. Mit anderen Worten: Wenn Ihre Testumgebung die direkte Verwendung von LabVIEW-VIs unterstützt (z. B. LabVIEW-Programm, NI TestStand), sollten Sie die **=>LabVIEW API** bevorzugen.
Die Funktionalität ist nahezu gleich, im Detail gibt es jedoch kleine Unterschiede.

Die Installationsvoraussetzungen sind für beide Architekturen identisch, da auch der LabVIEW-Treiber intern einige .NET-Assemblies benötigt.
*Voraussetzungen für LV und .NET siehe [Systemvoraussetzungen](/docs/ssv/installation#systemvoraussetzungen)*

#### Übersicht

Unabhängig von der gewählten API ist die grundsätzliche Handhabung gleich. Das folgende Diagramm zeigt die grundlegende Funktionsweise von SSV (ohne optionale Funktionen wie Baselining, digitale E/A usw.)
Das folgende Bild beschreibt den häufigsten Anwendungsfall von SSV-Modulen in einer Überwachungsschleife.
Weiterführende Funktionen finden Sie in der API-Dokumentation.

![Ablaufdiagramm: Setup (Start Engine, Load Config, Open Devices, Activate Config, Daq Set Event mode, Setup Waveform Recording, Wait), Testschleife (Clear Errors, Wait, Get Results, Save Waveforms, Create Infotext) und Cleanup (Close Devices, Dispose)](/docs/assets/ssv/images/ssv-api-flowchart.png)

#### Ergebnisauswertung

*Read Results / Evaluate Results / Get Results / Get All Values?!*

***Get Results***

Liest die Daten aus dem FPGA, wertet die Rohdaten gemäß den Benutzereinstellungen aus und gibt alle Daten in einem Schritt zurück. Diese Funktion ist der Kombination ReadResults + Evaluate + GetAllValues vorzuziehen, wenn Sie die Daten nicht erneut auswerten müssen.
Der Aufruf dieser Funktion setzt außerdem die SSV-Fehlerzähler aller Geräte zurück. Empfohlene Methode für die meisten Anwendungsfälle. Eine Beschreibung des Datenformats finden Sie unter „Evaluate Results“.

***Read Results***

Liest einen neuen Ergebnissatz aus dem SSV-FPGA und wertet die Ergebnisse (optional) in eine interne Sammlung aus, gibt die Auswerteergebnisse aber nicht zurück! Diese Werte können Sie mit GetAllValues oder GetValue lesen. Außerdem werden alle Fehlerzähler zurückgesetzt
Beachten Sie, dass diese ältere Methode die Option „Include Warnings“ für die Auswertung nicht bietet. Warnungen sind enthalten, wenn „Errors Only“ false ist. Um einen Ergebnissatz nur mit Fehlern, aber auch mit Warnungen zu erhalten, verwenden Sie stattdessen Get Results!

***Evaluate Results***

Wertet die Rohmesswerte eines vorherigen Aufrufs von „Read Results“ pro aktiviertem Gerät und aktivierten Kanälen (erneut) aus. Es werden KEINE Daten von der Hardware gelesen und keine Fehler zurückgesetzt!
Evaluate Results gibt einen menschenlesbaren Satz von Ergebniselementen mit folgenden Bestandteilen zurück:

- Name (Signalname)
- Errors (Anzahl der seit dem letzten Lesevorgang erkannten Fehler)
- Source (eindeutige Datenkennung, z. B. device/signal/window/function)
- Infotext (üblicherweise die angewendeten Grenzwerte)
- Value (Messwert, Bedeutung abhängig von der Funktion)
- Upper Limit (maximaler inklusiver Grenzwert für den Wert)
- Lower Limit (minimaler inklusiver Grenzwert für den Wert)

> **Hinweis**
> Ein direkter Aufruf von Evaluate Results ist nur erforderlich, wenn Sie dieselben Ergebnisse mehr als einmal auswerten müssen, z. B. um aus denselben Messungen zwei verschiedene Berichte zu erzeugen (einen mit allen Kanälen, einen nur mit fehlerhaften Kanälen und Warnungen usw.). In den meisten Fällen können Sie stattdessen Get Results verwenden!

***Get All Values***

Gibt alle ausgewerteten Ergebnisse zurück oder wertet sie aus, falls das noch nicht geschehen ist. Es erfolgt kein Hardwarezugriff! Diese Funktion wurde eingeführt, um die Methode Read Results um den zusätzlichen Parameter „Include Warnings“ zu erweitern und gleichzeitig die Kompatibilität mit älterem Testcode zu wahren. Wird normalerweise nur intern oder zur erneuten Auswertung der Ergebnisse mit „Include Warnings“ aufgerufen.
=> Verwenden Sie entweder „Read Results“ oder „Get All Values“, nicht beides

***Get Value***

Gibt ein einzelnes Ergebniselement zurück, indem dessen Quell-String abgefragt wird. Beachten Sie, dass diese Funktion nicht auf den SSV-Treiber zugreift, sondern den Wert aus der intern zwischengespeicherten Sammlung „Results“ abruft!

*Include Warnings*

Ist diese Option ausgewählt, erhalten Sie auch Ergebnisse, die nicht als Fehler gewertet werden konnten, aber möglicherweise ein Problem darstellen. Eine Warnung meldet eine Fehleranzahl von „-1“
Mögliche Warnungen:

- Fehlender Trigger
- Fensterergebnisse als ungültig gemeldet (z. B. wenn das Fenster die Zykluszeit überschreitet und nie vollständig ausgewertet werden konnte)

#### Verwendung mehrerer Konfigurationsdateien

Der Treiber unterstützt das Laden mehrerer Konfigurationsdateien. Da das Laden einer Konfiguration relativ langsam ist, werden alle Konfigurationsdaten intern zwischengespeichert. Sie müssen jede Konfiguration in Ihrer Testumgebung nur einmal laden.

> **Hinweis**
> Das Aktivieren der Konfiguration (Schreiben der Konfigurationsdaten in das FPGA) dauert je nach Anzahl der Geräte nur etwa 5 bis 20 ms. Das erstmalige Laden der Konfiguration kann bis zu mehrere Sekunden(!) dauern. Vermeiden Sie daher das mehrfache Laden derselben Konfigurationsdatei! Das Aktivieren setzt außerdem die Fehlerzähler zurück

**Ablauf bei mehreren Projektkonfigurationsdateien**

1. Systemeinrichtung
2. Konfigurationsdatei A laden
3. Konfigurationsdatei B laden
4. Konfigurationsdatei C laden
5. Konfigurationsdatei D laden
6. Open Devices
7. Konfigurationsdatei A aktivieren
8. Clear Errors (?)
9. Tests durchführen / warten
10. Read Results
11. Konfigurationsdatei B aktivieren
12. Tests durchführen / warten
13. Read Results
14. Dasselbe für die Dateien C und D …
15. Bei Bedarf ab 7. wiederholen
16. Close Devices
17. Systembereinigung

## Baselining

Baselining ist ein Verfahren, um großzügig definierte allgemeine Grenzwerte während der Messung auf prüflingsspezifische Grenzwerte einzuengen. Dazu wird eine sogenannte Baseline erstellt, die während eines Kalibrierlaufs für jede Messung durchschnittliche Erwartungswerte sammelt. Diese Baseline ist projekt- und prüflingsspezifisch und kann nur als Ergänzung zur ursprünglichen Projektdatei angewendet werden.

Auf Basis dieser Durchschnittswerte kann (optional) für jeden Messwert eine Baseline-Toleranz definiert werden. Während des Testlaufs werden diese neuen Toleranzen mit den Grenzwerten der Fensterfunktionen kombiniert und ergeben in der Regel ein engeres Toleranzband. Die resultierenden dynamischen Grenzwerte können die ursprünglichen Grenzwerte jedoch nicht überschreiten.

Der Testbericht enthält die verwendeten Gesamtgrenzwerte (Projektgrenzwerte + dynamische Toleranz).

**Baselining verwenden**

- SSV-Projektkonfigurationsdatei laden
- Neue Baseline erstellen
- Mehrere Messungen in der gewünschten Umgebung durchführen
- Baseline aktivieren (berechnet die Durchschnittswerte, ändert die ursprünglichen Grenzwerte und schreibt sie in das FPGA)
- (optional) Baseline bereinigen (entfernt die Messwerte und behält die Durchschnittswerte)
- Baseline in einer Datei speichern (`ssv_api:baseline_Save`)
