Beispielprogramm 6 (Verschränken von Messwerten)
Programmbeschreibung/ Funktion
Anmerkung zu diesem Kapitel: Der Einsatz von EL3751/ELM3xxx‑Klemmen gilt entsprechend auch für EPP35xx.
In manchen Anwendungsfällen wird eine zeitlich besonders feine Auflösung des Signals gewünscht, z.B. damit für eine FFT viele Messpunkte zur Verfügung stehen. Im Folgenden werden zwei Möglichkeiten hierfür dargestellt:
- Einsatz einer analogen Eingangsklemme mit der entsprechend hohen Abtastrate z.B. 20 kSps.
- Einsatz von zwei analogen Eingangsklemmen mit der halben Abtastrate von 10 kSps und sogenannter Verschränkung der Messwerte, Resultat sind ebenfalls 20 kSps Abtastung des Signals.
In diesem Beispiel wird der zweite Weg beschrieben: Einsatz von EtherCAT‑Klemmen 2 x EL3751 mit je 10 kSps max. Samplerate (hier somit 100 µs Wandlungszeit, vgl. Weiterführende Dokumentation zu I/O-Komponenten mit analogen Ein- und Ausgängen, Kapitel „Zeitliche Aspekte der analog/digital bzw. digital/analog Wandlung“). Beide Klemmen erhalten durch deren Parallelschaltung das gleiche Signal simultan zugeführt und sind per DistributedClocks derartig konfiguriert, dass sie nicht gleichzeitig, sondern um die halbe Wandlungszeit versetzt sampeln (hier: 50 µs). Werden nun die beiden Messdatenströme in der Steuerung abwechseln zusammengesetzt, d.h. „verschränkt“, ergibt sich ein netto Messdatenstrom von 20 kSps.
![Beispielprogramm 6 (Verschränken von Messwerten) 1:](Images/png/4868666123__de__Web.png)
Hierfür wird folgender Aufbau verwendet:
![Beispielprogramm 6 (Verschränken von Messwerten) 2:](Images/png/4868389515__de__Web.png)
Das Beispiel ist mit entsprechenden Anpassungen für andere EL3xxx/ELM3xxx Klemmen bzw. Box‑Modulen ebenfalls anwendbar. Es liegen dann ggf. andere Oversamplingfaktoren, Shiftzeiten etc. vor. Auch die optional vorhandene Task mit 50 µs im Beispiel 6a kann u.U. nicht zum Einsatz kommen.
Damit die Eingangswerte nacheinander zu einem Gesamtwert zusammengesetzt werden können, ist für jeden Kanal/klemme eine entsprechende Verschiebungszeit „Shift time“ notwendig; in diesem Beispiel für die zweite Klemme 50 µs. Diese wird in den „Erweiterten Einstellungen“ zu DistributedClocks (Karteireiter „DC“) der zweiten Klemme vorgenommen:
![Beispielprogramm 6 (Verschränken von Messwerten) 3:](Images/png/4868999307__de__Web.png)
Einige Hinweise und Einschränkungen
- Dieses Prinzip kann mit zwei (wie oben beschrieben) oder auch mehreren Klemmen umgesetzt werden; es findet seine Grenze in der Shifttime-Feinheit von 1 µs.
- Die verwendeten Klemmen müssen DistributedClocks unterstützen. Oversampling ist hilfreich, aber nicht notwendig. Zu beachten ist die Samplingmethode Simultan vs. Multiplex; siehe entsprechende Dokumentation mit der Fragestellung: „wann die Kanäle bezogen auf DistribuedClocks ihre Werte sampeln“.
- Dieser Ansatz verdoppelt zwar die Abtastrate des unter Beobachtung stehenden Signals, der in den technischen Daten der Klemme gegebene Frequenzgang, die Dämpfung gilt aber weiterhin! Es ist durch die zweifache Abtastung also nicht möglich dann auch doppelt so schnelle Signale einzulesen. Beispiel: die EL3751 mit 10 kSps Abtastrate kann Signale bis halber Abtastrate = 5 kHz sinnvoll (Alias-frei) einlesen. Diese Grenze bleibt auch durch mehrfach parallele Abtastung bestehen! Die z.B. angegebene Dämpfung von -3 dB bei 3 kHz gilt auch für das verschränkte Summensignal.
- Es kann per DistributedClocks Shifttime nur eine EtherCAT‑Klemme funktional als Ganzes zeitlich verschoben werden, nicht der einzelne Kanal einer Klemme. Die Verschiebung wirkt dann auf alle Kanäle einer Klemme. Für das angegebene Prinzip müssen also immer zwei oder mehr Klemmen/Box‑Modulen verwendet werden, eine Verschränkung von zwei Kanälen einer Klemme/Box ist nicht möglich.
- Es ist die angegebene spezifizierte Messunsicherheit zu beachten: die unvermeidbar unterschiedliche reale Messunsicherheit und damit Amplitudenunterschiedlichkeit der beiden verwendeten Klemmen bzw. ihrer Kanäle am selben Signal kann nach dem Verschränken als Rauschanteil sichtbar werden. Deshalb sollten für dieses Prinzip Klemmen verwendet werden, die deutlich geringere Messunsicherheit aufweisen als für die Anwendung erforderlich ist. Es wird ausdrücklich empfohlen, einen expliziten Anwender‑Abgleich zumindest des Offsets der beiden elektrisch zusammengeschalteten Kanäle durchzuführen, um diesen Einfluss zu minimieren.
- Es sollten Klemmen mit gleichem HW/FW-Stand verwendet werden.
Beispielprogramm
Diese genannte Einstellung, wie auch die Basiszeit und die Taskzykluszeit ist bereits in dem Beispielprogramm konfiguriert:
Download TwinCAT 3 Projekt/ Beispielprogramm 6a: Programlink
Im Folgenden ist zunächst mit Oversampling = 1 für jeden Eingangswert die einfachste Variante der Verschränkung der Eingangswerte in „strukturierten Text“ gezeigt: eine Feldvariable mit zwei Elementen erhält je einen Wert von einer Klemme. Diese kann zur Weiterverarbeitung verwendet werden und wird hier im TwinCAT ScopeView dargestellt. Die Programmanweisungen sind bei der EL3751 einer 100 µs Task zugeordnet:
Variablendeklaration Beispielprogramm 6a
PROGRAM MAIN
VAR
nSamples_1 AT%I* :DINT; // EL3751 input with no added shift time
nSamples_2 AT%I* :DINT; // EL3751 input with -50 µs added shift time
aCollectedResult :ARRAY[0..1] OF DINT;
END_VAR
Ausführungsteil:
// Example program 6a:
// 100 µs task
// ============================================================
aCollectedResult[0] := nSamples_1; // Put 1st Value of sequence into array
// Pattern: 1.1.1.1...
aCollectedResult[1] := nSamples_2; // Put n-th Value of sequence into array (2nd here)
// Pattern: .2.2.2.2...
// ============================================================
// Result pattern: 12121212... (--> see scope view dots)
Bei einem Eingangssignal z.B. Sinus 5 kHz und 2,5 V Amplitude liefert das TwinCAT‑ScopeView folgende Ergebnisse:
![Beispielprogramm 6 (Verschränken von Messwerten) 4:](Images/png/4854200843__Web.png)
Die obere Abbildung zeigt das Gesamtsignal und die beiden Eingangssignale (nSample_1, nSample_2), um 50 µs zueinander Zeitversetzt innerhalb von 18 s in gestauchter Form. Das Gesamteingangssignal (nCollectedResult) zeigt hier im groben die Verschränkung der beiden Eingangssignale.
Nachfolgend ist dargestellt (mit Markierungen grafisch nachbearbeitet), wie die Eingangssignale (nSample_1, nSample_2) an der Konstruktion des Gesamteingangssignals beteiligt sind:
![Beispielprogramm 6 (Verschränken von Messwerten) 5:](Images/png/4854207243__Web.png)
Unter bestimmten Voraussetzungen können zudem in einer entsprechend schnellen Task beide Eingänge auf eine einzelne Variable zusammengefasst werden. Das Beispielprogramm enthält hierfür noch eine zusätzliche Task mit 50 µs Zykluszeit, die zum einen für die Darstellung der Eingangssignale im SopeView benötigt wird und zum anderen auch eine Variable (nCollected) enthält, die beide Eingänge abwechselnd zugewiesen bekommt:
// 50 µs task
// ============================================================
// Junction of the two inputs
nCollected := SEL(nToggle, MAIN.nSamples_1_, MAIN.nSamples_2_);
nToggle := NOT nToggle;
Die für das ScopeView erforderlichen Variablen der Eingänge werden in dieser Task aus der 100 µs Task ausgelesen, um die einzelnen Werte im 50 µs Abstand darstellen zu lassen.
Variante mit 2 x Oversampling 10 = Oversampling 20
Wird beispielsweise ein Oversampling‑Faktor von 10 für beide Eingangsklemmen verwendet, wird für den Gesamtmesswert eine Feldvariable das so kann die Verschränkung der Eingangswerte durch eine einfache Programmschleife erfolgen, die die Werte nacheinander in eine Feldvariable für die resultierende Ergebnisvariable einliest:
Variablendeklaration Beispielprogramm 6b
PROGRAM MAIN
VAR
aSamples_1 AT%I* :ARRAY[0..9] OF DINT; // EL3751 input with no added shift time
aSamples_2 AT%I* :ARRAY[0..9] OF DINT; // EL3751 input with -50 µs added shift time
aCollectedResult :ARRAY[0..19] OF DINT;
// ===================================================
nPos :BYTE;
END_VAR
Ausführungsteil:
// Example program 6b:
// 1 ms task
// ============================================================
FOR nPos := 0 TO 9 DO
// Put 1st Value of sequence into array:
aCollectedResult[2*nPos] := aSamples_1[nPos];
// Put n-th value of sequence into array (2nd here):
aCollectedResult[2*nPos+1] := aSamples_2[nPos];
END_FOR
Download TwinCAT 3 Projekt/ Beispielprogramm 6b: Programlink
Das Beispielprogramm 6b liefert das gleiche Ergebnis, nur liegt hier das Gesamteingangssignal lediglich in Form einer Feldvariablen mit 20 Elementen vor.