Diagramm-Anzeige-Funktion

Inhalt dieses Dokumentes

  1. Diagramme
    1. Einleitung
    2. Schnellstart: Einfügen eines Y(t)-Diagramms
  2. Konfigurieren eines Diagramms - Dialog mit drei Registern:
    1. Layout und Vorschau
    2. Kanäle, Modus, Zeitbasis
    3. spezielle Diagramm-Optionen (z.B. Hintergrundbild für den Kurvenbereich)
    4. Konfiguration eines 'schnell abtastenden' Diagramms mit Nutzung der Datenerfassungseinheit
    5. Plotten von Meßwerten aus Script-Arrays
    6. Auslesen der Diagramm-Kanal-Speicher 'als Text' (im Programmiertool)
  3. Zoomen und Scrollen per Touchscreen
    1. Zusätzlicher Kurvenspeicher zum Zoomen und Scrollen
  4. Kommandos zum Steuern der Diagramm-Anzeige (starten, stoppen, löschen)
  5. Polygone als Overlay im Kurvenbereich
    1. Zeichnen von Polygonen in Diagrammen per Script
  6. Diagramm-spezifische Event-Handler (im Script)
    1. OnDiagramTouchEvent
  7. Syntax einer Diagrammdefinition als Backslash-Sequenz

Wie kann man...

  • möglichst einfach den zeitlichen Verlauf einer 'normalen' Display-Variablen als Y(t)-Diagramm darstellen ?
  • die Skalierungs-Parameter des Diagramms zur Laufzeit ändern (z.B. scriptgesteuert in das Diagramm "hineinzoomen") ?
  • wieder "heraus zoomen" (zurück zu den beim Entwurf festgelegten Skalierungsparametern) ?
  • einen kurzen Text im Diagramm in der Nähe eines Polygons (oder Datenpunktes) anzeigen ?
  • ein eigenes Hintergrundbild im Diagramm unter den Kurvenbereich legen ?

Siehe auch:



Diagramme

Einleitung

Die hier beschriebene Diagramm-Anzeige ist bei allen Geräten mit Grafik-Displays verfügbar, z.B. MKT-View III, IV, und vielen Anderen. Bei Geräten mit Touchscreen können Diagramme auch vom Benutzer bedient werden (zoomen, scrollen).

Auf Monochrom-Displays (z.B. das nicht mehr produzierte MKT-View I) sahen Diagramme wie folgt aus:


Y(t) - Diagram mit 3 Kanälen,
mit 'Scheibenwischer' statt Scrolling

 


X/Y - Diagramm mit Gitter

Weitere Beispiele für Y(t) und X/Y-Diagramme finden Sie in den Dateien programs/diag_tst.CVT (für Monochrom-Displays), programs/MKTview2/MV2_Demo.cvt (für Farbdisplays mit 480*272 Pixeln), und programs/MKTview4/MV4_Demo.cvt (für Farbdisplays mit 800*480 Pixeln) .

Um ein Diagramm auf einer Anzeigeseite in Ihrem Programm einzufügen, können Sie eine Seite mit einem vorgefertigten Diagramm aus der Galerie laden, oder sich -wie hier beschrieben- ein eigenes Diagramm erstellen:

  • Klicken Sie mit der rechten Maustaste in das LCD-Simulator-Fenster (dort, wo später das Diagramm erscheinen soll)
  • Im dann angezeigten Popup-Menü wählen Sie "Y(t)-Diagramm einfügen"
  • Das Programmiertool erzeugt nun ein "Default"-Diagramm, welches in einem speziellen Dialogfenster parametriert werden kann (Details im nächsten Kapitel).
Alternativ können Diagramme (wie jedes andere Anzeige-Element) auch mit dem graphischen Editor eingefügt, und deren Größe oder Position per Maus angepasst werden.

Das Dialogfenster zum Einstellen der Diagrammeigenschaften zeigt eine Vorschau des Diagramms an, wie es später auf dem "echten" Terminal aussehen würde. Sie können dieses Dialogfenster auch durch Doppelklick auf ein bereits existierendes Diagramm im LCD-Simulator öffnen. Ab Kapitel 2 wird der Einstelldialog für Diagramme in allen Details erläutert. Für Entwickler, die 'auf die Schnelle' ein einfaches Y(t)-Diagramm in eine bereits existierende Applikation einfügen wollen, folgt ein kurzes Beispiel.

Schnellstart: Einfügen eines Y(t)-Diagramms

Im folgenden Beispiel wird auf einer neuen Anzeige-Seite ein Y(t)-Diagramm eingefügt, um den zeitlichen Verlauf eines Signals (oder einer beliebigen anderen 'Datenquelle') darzustellen.
  1. Wenn nötig, die Simulation im Programmiertool stoppen (denn nur dann ist die Applikation editierbar)
  2. Eine neue Anzeigeseite erzeugen: Im Hauptmenü Bearbeiten, Neue Seite
  3. Im Programmiertool auf Registerkarte 'Seite #X' (mit der neuen, leeren Seite 'X') umschalten.
  4. Dort auf 'Grafischer Editor' wechseln (zweite Ebene von Registerkarten, ganz links).
  5. In der Toolbar das Werkzeug Diagramm () anwählen.
  6. In der karierten Entwurfsfläche des Editors auf die Position klicken, an der das neue Diagramm eingefügt werden soll (obere linke Ecke).
    Das Programmiertool erzeugt daraufhin ein neues Diagramm mit Default-Eigenschaften (Y(t)), und öffnet das Dialogfenster Eigenschaften eines Liniendiagramms. Dort kann ggf. auch die genaue Größe (in Pixeln) eingestellt werden, falls die 'fast bildschirmfüllende' Darstellung unerwünscht ist.
  7. Alternative A : Datenquelle für das Diagramm aus einer Liste von Display-Variablen auswählen:
    1. Im Dialog Eigenschaften eines Liniendiagramm unter Kanäle, Modus, Zeitbasis das darzustellende Signal (bzw. Display-Variable) in der Liste unter 'Variablen und DAQ-Kanäle' markieren.
    2. Button 'Namen + Bereich' anklicken.
      Sowohl der Name des zu plottenden Signals (etc) als auch der Minimal- und Maximalwert werden aus der Variablendeklaration übernommen. Dies kann in der Tabelle unter Kanäle gegebenenfalls angepasst werden, z.B. wenn der aus der CAN-Datenbank (o.Ä.) stammende Wertebereich für die Darstellung im Diagramm zu groß ist.
  8. Alternative B : Manuelle Eingabe eines numerischen Ausdrucks als neue Datenquelle, mit Wertebereich:
    1. Im Dialog Eigenschaften eines Liniendiagramm in der Tabelle 'Kanäle'
      in der mit einem Sternchen markieren Zeile (= erster Kanal des Diagramms) einen numerischen Ausdruck eingeben. Dieser Ausdruck repräsentiert die Datenquelle. Er besteht i.A. aus dem Namen einer Display-Variablen, in diesem Beispiel verwenden wir aber eine Funktion des Display-Interpreters zum Berechnen einer Sinuskurve:
      isin(ti*10)
      Da diese "Integer-Sinusfunktion" einen Wertebereich von -32767 bis +32767 liefert, wird der Bereich z.B. auf -40000 ("min-Wert") bis 40000 ("max-Wert") gesetzt.
    2. Die Kanalnummer der so erzeugten neuen Datenquelle (in der Tabelle 'Kanäle') kann ggf. im Diagramm-Dialog auf der Registerkarte 'Layout und Vorschau' rechts unter 'sichbare Kanäle' als erster und letzter Kanal korrigiert werden. Für dieses einfache Beispiel soll das Diagramm nur einen Kanal anzeigen, die 'sichtbaren Kanäle' sind daher und zwar für die neu definierte Datenquelle).
  9. Für beide o.g. Alternativen: Den Dialog Eigenschaften eines Liniendiagramm per 'Ok'-Button wieder schließen.
  10. Das neu erstellte Diagramm auf der neu erstellten Anzeigeseite per Simulation testen (im Hauptmenü des Programmiertools: 'Run').

Konfigurieren des Diagramms

Um die spezifischen Eigenschaften eines Diagramms zu bearbeiten, können Sie das weiter unten beschriebene Dialogfenster verwenden. Es ist in verschiedene Registerkarten (tabs) unterteilt, auf denen Layout, Kanäle, und einige spezielle Optionen eingestellt werden können.
Wie bei anderen Anzeige-Elemente werden die 'allgemeinen' Eigenschaften wie z.B. Vorder- und Hintergrundfarbe, Position und Größe

Hinweis: Bei einigen Terminals können zur Laufzeit Polygone als "Overlay" über die Diagrammfläche gezeichnet werden. Dies ist nur zur Laufzeit per Interpreter- oder Script-Kommando möglich, aber nicht während des Entwurfs des Diagramms (im hier beschriebenen Dialogfenster).

Layout und Vorschau

Die erste Registerkarte dient zur Definition des Layouts. Es enthält eine Vorschau auf der erkennbar ist wie das Diagramm mit den aktuellen Einstellungen aussehen würde:

Die Zeichenfläche definiert Position (x1,y1) und Fläche (Breite,Höhe) der Diagrammfläche, inklusive der optionalen Skalen. Die Änderung dieser Parameter wirkt sich sofort in der Vorschau aus.

Die vier Skalen-Einstellgruppen definieren, welche Skalen an den Rändern des Diagramms angezeigt werden, und wie diese aussehen sollen. Der Parameter "Größe" definiert Breite bzw. Höhe einer Skala in Pixel.
Ist das Häkchen "von Kanal" gesetzt, wird der Wertebereich zum Zeichnen der Skala aus der Kanaldefinition (s.U.) übernommen. Andernfalls können Sie zwei beliebige Werte als "min", "max" und "Einheit" eingeben, die nicht in Zusammenhang mit dem tatsächlichen Wertebereich des geplotteten Kanals zusammenhängen. Dies wird häufig verwendet, um z.B. eine Prozentskala statt des tatsächlichen Wertebereichs zu zeichnen, wenn mehrere Kurven mit unterschiedlicher Skalierung in ein gemeinsames Diagramm gezeichnet werden sollen, oder wenn für die "Beschriftung" eine andere (bessere) physikalische Einheit verwendet werden soll (z.B. Druck in Bar statt 'psi', Kraft in Newton statt 'Kilopond', usw.).

Hinweis:
Ändern des Anzeigestils einer Skala auf diesem Panel hat keinen Einfluß auf den innerhalb der Zeichenfläche dargestellten Wertebereich ("Zoom-Factor") ! Um den im Graphen angezeigten Wertebereich zu ändern., verwenden Sie die Tabellenspalten "min. Wert"/"max. Wert" auf der Registerkarte "Kanäle", denn nur dort sind kanalspezifische Parameter verfügbar.
Unter 'Einheit' kann eine Zeichenkette mit maximal 7 Buchstaben mit der physikalischen Einheit definiert werden. Diese wird bei der Beschriftung der entsprechenden Skala verwendet. Der Buchstabe 's' (Sekunde) bedeutet bei horizontalen Skalen in Y(t)-Diagramm, dass diese Skala die Zeit repräsentieren soll. Abhängig von Abtastrate (Zeitbasis) und Zoom werden bei der Anzeige einer Zeitachse nicht nur Sekunden (s), sondern ggf. auch automatisch Stunden (h) oder Minuten (min) verwendet.
Abhängig vom Wertebereich kann das Diagramm der physikalischen Einheit einen technischen Exponenten vorsetzen. Bei sehr hohen oder niedrigen min-/max-Werten stellt das Diagramm der physikalischen Einheit bei der Beschriftung der Skalen einen der folgenden Präfixe voran:
n
nano ( X * 10^-9 )
u
mikro ( X * 10^-6 )
m
milli ( X * 10^-3 )
k
kilo ( X * 10^3 )
M
Mega ( X * 10^-6 )
G
Giga ( X * 10^-9 )
Wurde als Einheit "s" (Sekunden) angegeben, dann wird diese bei entsprechend hohen Werten automatisch durch "min" (Minuten) oder "h" (hours, Stunden) ersetzt.

In der Gruppe 'sichtbare Kanäle' wählen Sie die im Diagramm anzuzeigenden Kanäle aus. Wie später noch erklärt wird, gibt es insgesamt 8 Datenkanäle, die sich alle Diagramme in Ihrer Anwendung "teilen" müssen.
Im Modus "X/Y" wird der erste Kanal an die X-Achse gelegt, der zweite an die Y-Achse.
Im Modus "Y(t)" erscheint der erste Kanal im Diagramm ganz oben, wenn  die Option "geteilte Fläche" angewählt ist. Bei "überlappender" Darstellung werden alle Kurven in einer gemeinsamen Fläche gezeichnet - was bei monochromen Displays irritierend sein kann. In diesem Fall sollten Sie verschiedene Kurvenstile für die Kanäle verwenden, was auf der zweiten Registerkarte erfolgt.

Drei verschiedene Zeichengrößen können für die Achsenbeschriftung (numerische Skalierung) verwendet werden, alternativ kann die Beschriftung auch ganz abgeschaltet werden ("keine Schrift" in der Combo-Liste).
Hinweis: Wird der Parameter "Größe" für eine Skala sehr klein gewählt (z.B. 1 oder 2 Pixel), so wird die Beschriftung der betroffenen Skala automatisch unterdrückt. Die Zeichenroutine versucht nicht, in eine "winzige Skala" auch noch Zahlenwerte zu quetschen. Auf diese Weise wurden im oben abgebildeten Beispiel die obere und rechte Skala realisiert, die jeweils nur zwei Pixel hoch bzw breit sind.

Ein Gitter kann in der Zeichenfläche des Diagramms eingeblendet werden, als vertikale oder horizontale Linien. Das Gitter kann wahlweise als durchgehende schwarze Linie oder als "schattierte" Linie gezeichnet werden. (Eine schattierte Linie wird auf monochromen Displays als dünne gepunktete Linie gezeichnet; auf mehrfarbigen Displays in grauer Farbe).

Kanäle, Modus, Zeitbasis

Auf der zweiten Registerkarte werden die Kanäle definiert und einige weitere Parameter eingestellt:

Die Steuerelemente auf diesem Tab sind:

Anzeigemodus
Kann auf Y(t) oder X/Y gesetzt werden. Im X/Y-Modus steuert der erste Kanal des Diagramms die X-Achse, und der zweite Kanal die Y-Achse. Im Modus Y(t) wird der zeitliche Verlauf alle Kanäle des Diagramms angezeigt (X=Zeichachse).

Zeitbasis (timebase)
Stellt das Aktualisierungsintervall ein (i.A. einige Millisekunden). Im Modus Y(t) wird pro Intervall ein neuer Schritt (Pixel) entlang der Zeitachse gezeichnet. Im Modus X/Y bestimmt die Zeitbasis -zusammen mit der "Nachleuchtdauer"- wie lange ein Meßwert auf dem Display sichtbar ist (außer bei Sonderoption "alte Kurve nicht löschen").
Ist mindestens einer der im Diagramm dargestellten Kanäle mit der DAQ-Einheit verbunden (Datenerfassungseinheit für höherfrequente Abtastung), dann wird die Abtastrate der DAQ-Einheit ggf. automatisch an die Zeitbasis angepasst.
Bei Intervallen unter 100 ms (d.h. Abtastrate über 10 Hz) lesen Sie bitte die Hinweise zu Diagrammen mit 'schneller' Abtastung !

Zeitmarken (Beschriftung)
Aus dieser Liste kann eine der folgenden Methoden zur Beschriftung der Zeitachse ausgewählt werden:

Relativ zum aktuellen Datum und Uhrzeit:
Die Zeitachse wird mit der Differenz zur aktuellen Zeit beschriftet (aktuelle Zeit minus Zeitstempel der Meßdaten).
Abhängig von der Zeitbasis erfolgt dies in Millisekunden, Sekunden, Minuten, oder Stunden.
Bei scrollenden Live-Daten erscheint der Wert "Null" am rechten Rand des Kurvenbereiches, denn dort erscheint der neueste Abtastwert. Daten in der "Vergangenheit" haben negative Vorzeichen.
Relativ zu 'display.dia.unix_time':
Die Zeitachse wird mit der Differenz zur "Zeit des Abtastwerts am linken Rand der Kurve".
Am linken Rand der Zeitachse steht daher (außer beim temporären Hineinzoomen) immer der Wert Null.
Auch hier erfolgt die Beschriftung abhängig von der Zeitbasis in Millisekunden, Sekunden, Minuten, oder Stunden.

Absolut, nur die Uhrzeit ("00:00:00 = Mitternacht")
Eignet sich nur für 'langsame' Diagramme mit Zeitbasen im Bereich von Minuten oder Stunden.
Absolut, mit Datum und Uhrzeit
Eignet sich nur für 'sehr langsame' Diagramme, in denen viel Platz zum Zeichnen der Skala zur Verfügung steht (mindestens 400 Pixel), da sonst keine eindeutige Skalierung erkennbar ist.
Die Anzeige erfolgt im ISO-8601-Format ohne das häßliche 'T' zwischen Datum und Uhrzeit, z.B.
            2018-11-22 23:59:59
   bzw. 2018-11-22 23:59       (bei mehr als 60 Sekunden pro Schritt).

Nachleuchten (persistance)
Nur im Modus X/Y nutzbar. Dieser Parameter bestimmt, wie viele "alte Punkte" (oder Polygon-Segmente) auf dem Schirm sichtbar sein sollen. Dieser Wert muss zwischen 1(*) und 255 liegen. Wenn z.B. die "Zeitbasis" auf 50 Millisekunden gesetzt wurde, und "Nachleuchten"=100, wird alle 0.05 Sekunden ein neuer Punkt (bzw Liniensegment) gezeichnet, der nach 5 Sekunden (100*0.05s) wieder vom Bildschirm verschwindet.
(*) Hinweis: Die Einstellung "Nachleuchten=1" ist nur bei der Darstellung der Kurve aus 'Einzelpunkten' zulässig (siehe Kurvenstil). Bei der Darstellung als 'Linien' muss der Nachleucht-Wert mindestens 2 betragen.

Quelle (in der Definitionstabelle für Diagramm-Kanäle)
Definiert woher die Meßwerte für diesen Kanal stammen. Meistens wird dies der Name einer Variable sein, möglich ist aber auch der Aufruf einer numerischen Funktion des UPT-Interpreters oder eine kurzer numerischer Ausdruck (siehe Unten).
Mit Hilfe der DAQ-Einheit können auch analoge Eingänge (onboard) mit hoher Abtastrate dargestellt werden.
Neben Display-Variablen und DAQ-Kanälen können Diagramme auch direkt mit im Script deklarierten Arrays gekoppelt werden. Referenzen zu geeigneten Arrays werden am Ende der Auswahlliste in der Form script.<name> angezeigt. Darin ist <name> der Name der als Script-Variablen, die zu diesem Zweck als eindimensionales Array deklariert sein sollte.
Siehe auch: Hinweise zum 'frühen Start' der Datenaufnahme,
                    Hinweis zum Plotten von Daten aus Script-Arrays.

Min-Wert, Max-Wert (in der Definitionstabelle für Diagramm-Kanäle)
Hiermit stellen Sie den im Diagramm dargestellten Wertebereich eines bestimmten Kanals dar.Sie können dies z.B. zum Vergrößern eines bestimmten Bereichs verwenden, der für Ihre Anwendung von Interesse ist. Dies kann sich auch auf die Beschriftung einer vertikalen Skala auswirken (nur wenn die Option "von Kanal" für eine vertikale Skala selektiert ist).
Bei der Definition eines neuen Datenkanals werden min/max-Wert zunächst aus den Eigenschaften einer UPT-Variablen übernommen, weil Diagramm-Eingangs-Kanäle normalerweise mit benutzerdefinierten Variablen verbunden sind. Wenn Sie mehrere Kanäle in einem gemeinsamen Diagramm anzeigen wollen, sollten (Konjunktiv!) Sie einen gemeinsamen Wertebereich (min,max) einstellen. Ist dies nicht möglich, bietet es sich an das Diagramm nur mit einer universellen "Prozentskala" zu beschriften, die nichts mit den verschiedenen Wertebereichen zu tun haben muss. Schalten Sie dazu die Option "von Kanal" auf dem Einstellpanel für die linke und/oder rechte vertikale Skala ab.
Für "sehr spezielle" Anwendungen können diese Parameter auch zur Laufzeit per Kommando überschrieben werden.

Kurvenstil (in der Definitionstabelle für Diagramm-Kanäle)
Definiert wie die Kurve für diesen Kanal gezeichnet wird (Linienstil), und wie 'dick' die Linien bzw die Einzelpunkte gezeichnet werden sollen (Linienstärke). Im Y(t)-Modus dürfen nur "Punkte" oder "Linien" (durchgezogen oder gepunktet) verwendet werden. Im Y(t)-Modus außerdem noch "gefüllte Fläche" oder "graues Füllmuster". Den Kurvenstil ändern Sie per Doppelklick in die entsprechende Zeile+Spalte in der Tabelle. Es erscheint ein Popup-Menü, in dem Sie den Kurvenstil und die Linienstärke auswählen können.

Kopiere Namen / Kopiere Namen+Bereich
Übernimmt den Namen einer Variablen (und ggf deren Wertebereich) aus der rechts angezeigten Variablenliste in die aktuell selektierte Zeile der Kanal-Definitions-Tabelle.

Hinweise:

  • Die "Quelle" für einen Diagramm-Kanal ist normalerweise eine Display-Variable. Sie können allerdings auch einen beliebigen numerischen Ausdruck in dieser Tabellenspalte eingeben. Beispielsweise könnten Sie mit dem Ausdruck "sys.vsup" den zeitlichen Verlauf der Versorgungsspannung des Terminals plotten, usw..
  • Die Meßwerte der Diagramm-Kanäle werden intern in einem Array ('Kurvenspeicher') mit z.B. 2048 Punkten pro Kanal abgelegt. Das 'Einsammeln' von Daten (sampling) beginnt bereits kurz nach dem Einschalten des Gerätes, selbst wenn das Diagramm erst später durch Umschalten zur entsprechenden Anzeigeseite sichtbar wird. Die Firmware durchsucht dazu alle Anzeigeseiten nach entsprechenden Diagramm-Kanal-Definitionen.
    Auch wenn die Anzeigeseite mit dem Diagramm verlassen wird, wird das Array (im Hintergrund) weiterhin mit aktuellen Meßwerten gefüllt.
  • Ohne Einsatz der Datenerfassungseinheit (DAQ) ist die maximale Abtastrate durch die Geschwindigkeit der Hauptschleife begrenzt, die je nach Komplexität der Anzeige über 100 Millisekunden pro Schleife benötigen könnte. Zum Erzielen von Abtastraten über 10 Hz ohne Aussetzer sollte daher wie in Kapitel 2.4 beschrieben die DAQ als Quelle (Meßwertspeicher) für die entsprechenden Kanäle verwendet werden.
  • Auch Script-Arrays können als 'Quelle' für Kanäle in Diagrammen verwendet werden.
    Details dazu in einem der folgenden Kapitel.

Spezielle Diagramm-Optionen

Auf der dritten Registerkarte können einige "spezielle" Diagrammoptionen aktiviert werden.


(Screenshot des Dialogs mit 'Diagramm-Eigenschaften', Registerkarte 'Speziell')

Bislang sind die folgenden "speziellen" Optionen implementiert:

  • alte Kurve nicht löschen
    Kann für Langzeit-Beobachtungen eingesetzt werden. Sie können damit beispielsweise "sporadische Ausreißer" in einer ansonsten "flachen" Kurve erkennen.
  • sichtbarer "Scheibenwischer"
    Zeichnet eine dünne vertikale Linie an der aktuellen Position auf der Zeitachse im Modus Y(t). Hat keine Funktion im X/Y-Modus.
    Seit 2016-08-04 wird die horizontale Position des 'Scheibenwischers' beim kompletten Neu-Zeichnen einer Anzeigeseite nicht mehr zurückgesetzt, sondern nur noch bei der Umschaltung von einer Anzeigeseite zur nächsten, oder beim Löschen der alten Kurve mit dem Kommando dia.clear.
    Bei scrollender Anzeige (s.U.) hat der Scheibenwischer keine Funktion, denn die 'neuesten' Daten erscheinen dann immer am rechten Rand des Diagramms.
    Hinweis zum 'Scheibenwischer' vs 'scrollender Anzeige':
    Da die in modernen Geräten verwendeten TFT-Displays bei Kälte nicht träge werden, sollte für neue Anwendungen nicht mehr die Option 'nicht-scrollendes Diagramm mit Schreibenwischer', sondern stattdessem die scrollende Anzeige verwendet werden.
    Für den Bediener bietet dies den Vorteil, daß er die neuesten Daten immer am rechten Rand des Kurvenbereiches sehen kann.
  • Statische Anzeige (kein periodisches Update)
    Für Sonderzwecke, in der die Aktualisierung des Diagramms nicht 'automatisch', sondern z.B. per Befehl im Script erfolgt..
  • Scrollende Anzeige (nur für Y(t)-Diagramm)
    In diesem Modus wird der komplette Kurvenbereich entlang der Zeitachse von rechts nach links gescrollt. Der neueste Abtastwert (Sample) erscheint immer am rechten Rand des Kurvenbereiches, der per Default (mit der Option 'Labels von Kanal') auf der Zeitachse bei "t=0" liegt. Diese Option hat im X/Y-Modus keine Funktion; ebenso wie bei alten Geräten (z.B. MKT-View I) mit bei Kälte zu trägem Monochrom-Display.
  • per Touchscreen scroll- und zoombar
    Ist diese Option gesetzt, darf der Bediener im Normalbetrieb in das Diagramm zoomen, oder den dargestellten Bereich per Touchscreen verschieben. Details dazu finden Sie in Kapitel 3.
  • Event-Handler im Script aufrufen
    Ist diese Option gesetzt, dann werden für dieses Diagramm die in Kapitel 6 beschriebenen Event-Handler aufgerufen (sofern sie im Script vorhanden sind).
  • Datenaufnahme erst starten wenn das Diagramm SICHTBAR wird
    Wählen Sie diese Option, wenn das Einlesen von Abtastwerten in die mit dem Diagramm verbundenen Kanalspeichern erst starten soll, wenn das entsprechende Diagramm sichtbar wird. Dies entspricht dem Verhalten der alten Firmware (vor 09/2018).
  • Debugging aktivieren
    Dieses Flag dient nur zu Testzwecken für die Entwicklung !
  • Hintergrundbild (tCanvas)
    Mit Hilfe der Script-Sprache kann ein optionales Hintergrundbild zur Laufzeit erzeugt werden.
    Ohne spezielles Hintergrundbild wird der Hintergrund mit der Hintergrundfarbe gefüllt.
    Im folgenden Beispiel aus der Applikation DAQ_Test.cvt zeigt das Diagramm den Signalverlauf am Mikrofon im Zeitbereich (rote Kurve), das momentane Spektrum (grüne Kurve, aus einem Array geplottet), und den zeitlichen Verlauf der Kurzzeit-Spektren als Spektrogramm ('Wasserfall') im Hintergrund des Kurvenbereiches. Das Spektrogramm wird als Object vom Typ tCanvas per Script erzeugt. Für die Berechnung der Kurzzeit-Spektren dient die schnelle Fourier-Transformation (FFT).


    Beispiel eines Diagramms mit Hintergrundbild (hier: Spektrogramm aus 'DAQ_Test.cvt')

Weitere Diagramm-Beispiele finden Sie in der Applikation diag_tst.cvt .

Zurück zum Anfang

Konfiguration eines 'schnell abtastenden' Diagramms mit Nutzung der Datenerfassungseinheit

Wie bereits in Kapitel 2 erwähnt, sollten Kanäle mit Abtastraten über 10 Samples/Sekunde (d.h. Abtast-Intervalle kleiner als 100 Millisekunden) per DAQ-Einheit "eingesammelt" werden. Die so erreichbaren Abtastraten sind im Kapitel DAQ-Abtastrate beschrieben. Die Konfiguration der DAQ (als "globale Resource") kann wie hier beschrieben auf der Registerkarte 'Variablen', aber auch im Hauptmenü des Programmiertools unter 'Optionen'..'Datenerfassungseinheit' erfolgen.
Alternativ (falls ein bereits existierendes Diagramm von 'normaler Abtastung' auf 'schnelle Abtastung per DAQ' umgestellt werden soll) bietet sich auch die hier beschriebene Konfiguration mit Hilfe des Buttons
    'Verbinde XYZ mit DAQ'
an (darin ist 'XYZ' der Name der Quelle für den aktuell selektierten Kanal, z.B. 'Drehzahl').


Plotten von Meßwerten aus Script-Arrays

Liegen die zu plottenden Meßwerte bereits in Form eines Arrays (im Script) vor, bietet sich die direkte Kopplung des entsprechenden Diagramm-Kanals mit der Script-Variablen an. Ein Beispiel dazu finden Sie im der Applikation programs/DAQ_Test.cvt. Dort wird per Script das Spektrum eines Signals berechnet (per FFT), in Dezibel skaliert, und aus dem wie folgt deklarierten Array 'geplottet'. Dazu wurde der Array-Name (hier: fltLogSpectrum mit dem logarithmierten Amplitudenspektrum) als 'Quelle' bei der Definition des Diagramms angegeben.


Auswahlliste für Diagramm-Quellen mit im Script deklarierten Arrays

Um schon beim Design des Diagramms einen Kanal mit einem im Script deklarierten Array zu verbinden, wählen Sie in der oben gezeigten Auswahlliste zunächst den Namen des Arrays (als "Quelle"), und klicken dann auf 'Kopiere Namen'. Da der Designer (Programmiertool) den Wertebereich des erst später zur 'Laufzeit' gefüllten Arrays nicht kennt, ist der Button 'Kopiere Namen + Bereich' nicht verfügbar, wenn in der Liste ein Script-Array selektiert ist. Geben Sie in diesem Fall den erwarteten Wertebereich manuell in die Kanal-Definitionstabelle ein, oder definieren den Bereich später per Script (display.dia.ch[].min, .max).
const
   C_FFT_SIZE=1024; // number of samples for the FFT in the time domain, 2^N
endconst;

   ...

var
   float  fltFFTin[C_FFT_SIZE];       // FFT input (N real time domain samples)
   float  fltFFTout[C_FFT_SIZE+2];    // FFT output (N+1 complex frequency bins for the REAL FFT)
   float  fltLogSpectrum[C_FFT_SIZE/2]; // logarithmized amplitude spectrum (dB "over" full scale)
   float  re,im,mag,ref;
   int    i;
endvar;

    ...
  daq.read_channel( 7, fltFFTin );  // read input for the FFT from the DAQ into an array
  Math.rfft( fltFFTin, fltFFTout ); // Fourier Transform with real input, complex output
    ...
  display.UpdateDiagram; // update diagram AFTER the new set of data is complete
    ...
Um nach dem Berechnen neuer Werte (per Script) das Neuzeichnen der aktuellen Werte zu erzwingen, wird hier der Befehl display.UpdateDiagram verwendet.
Beim Zeichnen von Y(t)-Diagrammen aus im Script deklarierten Arrays können Zeitstempel und Abtastintervall aus dem Script entnommen werden.
Wurde das Array z.B. per daq.read_channel aus der Datenerfassungseinheit ausgelesen, dann wurden diese Parameter (Zeitstempel und Abtastintervall) bereits durch die DAQ im Script-Array eingetragen.
Array-Funktionen wie z.B. die FFT übernehmen den Zeitstempel automatisch vom Quell- in das Ziel-Array (Details hier).
Die folgenden Situationen werden beim Zeichnen von Array-Daten als Y(t)-Diagramm unterschieden:
  1. Sowohl Zeitstempel (<array>.unix_time) als auch Abtastintervall (<array>.t_sample) im Array-Header definiert (beide ungleich Null):
    In diesem Fall wird die Kurve genau wie "normale" Meßwerte horizontal skaliert, und anhand des Zeitstempels exakt an der passenden Position entlang der Zeitachse gezeichnet. Bei scrollender Darstellung bewegt sich die Kurve wie üblich von rechts nach links.

  2. Kein Zeitstempel (<array>.unix_time = 0), aber das Abtastintervall (<array>.t_sample) im Array-Header definiert:
    In diesem Fall kann die entsprechende Kurve (mangels Zeitstempel) nicht zusammen mit den anderen Kanälen an der Zeitachse ausgerichtet werden. Die Kurve kann aber (anhand des bekannten Abtastintervalls) passend gedehnt oder gestaucht werden.

  3. Kein Abtastintervall im Array-Header definiert (<array>.t_sample = 0):
    In diesem Fall wird (ohne Zoomen durch den Bediener) das erste Element im Array dem ersten Pixel (am linken Rand der Kurve) zugeordnet, das zweite Element dem zweiten Pixel, usw. Es findet (bis auf das interaktive Zoomen durch den Bediener) keine horizontale Skalierung statt. Stattdessem wird die Kurve mit einem Pixel pro Meßwert gezeichnet. Es erfolgt kein automatisches horizontales "Scrollen entlang der Zeitachse". Der erste Wert im Array erscheint immer als 'ältester' Abtastwert am linken Rand des sichtbaren Kurvenbereichs.


Zurück zum Beispiel "Anpassen der Zeitachse für die Anzeige des Spektrums" in programs/DAQ_Test.cvt :
In diesem Fall repräsentiert jedes Element im Array 'fltLogSpectrum' keinen Abtastwert im Zeitbereich, sondern enthält einen 'Frequenz-Eimer' (frequency bin) mit einer bestimmten Breite in Hertz (Kehrwert der Zeit). Die horizontale Skala (in diesem Beispiel die untere, grün gezeichnete Skala) sollte daher als 'Frequenzachse' mit der Einheit Hz (oder kHz) beschriftet werden. Die entsprechende Einstellung wurde im Konfigurationsdialog auf dem Register Layout / Untere Skala / Einheit vorgenommen ('Hz' statt 's').


Spektrogramm aus 'DAQ_Test.cvt'.
Rot: Signal im Zeitbereich, oben: Zeitachse in Millisekunden.
Grün: Signal im Frequenzbereich, unten: Frequenzachse in Hertz.

Der Endwert auf der Frequenzskala könnte notfalls im Diagramm-Konfigurations-Dialog auf der Registerkarte Layout und Vorschau erfolgen, indem der Wertebereich für die Beschriftung der unteren Achse nicht automatisch ("abhängig vom Kanal und dessen Abtastrate"), sondern manuell festgelegt wird. Da das "Y(t)"-Diagramm die Zusammenhänge zwischen Abtastrate, FFT-Länge, und FFT-Bin-Breite nicht kennt, und bei "einem Pixel pro FFT-Bin" der darstellbare Frequenzbereich auch von der Breite des Displays abhängt, wird im Beispielprogramm DAQ_Test.cvt per Script mit den folgenden Anweisungen eine zur Frequenzachse passende Skalierung (bzw. "Beschriftung") erreicht:

   bin_width_Hz := fltFFTout.t_sample; // FFT frequency bin width in Hertz, from array-header
   display.dia.scale[arBottomScale].min := 0.0; // bottom scale, here: FREQUENCY AXIS, begins at zero
   display.dia.scale[arBottomScale].max := display.dia.width_pixels * bin_width_Hz;

Beim MKT-View III mit einer Breite des Kurvenbereiches von 367 Pixeln, und einer FFT-Bin-Breite von 9.765 Hz, ergab sich daraus ein Skalenendwert von 367 * 9.765 Hz = 3583.76 Hz (= Ende der sichtbaren Frequenzskala).

Siehe auch (im Zusammenhang mit dem Plotten von Meßwerten aus Script-Arrays):
  • Auslesen eines Arrays aus der Datenerfassungseinheit (DAQ) per Zeitstempel
    (mit Beispiel für eine per CAN-Signal getriggerte Darstellung von Audio-Signalen)
  • Messung von Zeitdifferenzen zwischen CAN- und Audio-Signalen
    (interaktiv aber script-gesteuert, im Beispielprogramm script_demos/diagrams.cvt)


Auslesen der Diagramm-Kanal-Speicher 'als Text' (im Programmiertool)

Zu Testzwecken (und bei Problemen mit der Anzeige von Diagrammen) kann der Inhalt der Diagramm-eigenen Messwertspeicher im Programmiertool kontrolliert bzw. numerisch angezeigt werden. Wählen Sie dazu im Hauptmenü die Funktion 'Ansicht'. Im Eintrag 'Diagramm-Kanalspeicher' wird eine Zusammenfassung der verwendeten (mit mindestens einem Abtastwert gefüllten) und der momentan laufenden Kanäle (d.h. Kanäle, die momentan mit neuen Abtastwerten gefüllt werden).
Details zu den einzelnen Diagramm-Kanälen sind dem Untermenü ("Ch[0]" bis "Ch[11]") zu entnehmen:
'Leer':
In diesem Speicher ist momentan kein einziger Abtastwert enthalten,
z.B. weil er von keinem Diagramm verwendet wird oder der Inhalt durch den Befehl dia.clear gelöscht wurde.

'Gestoppt':
Dieser Speicher wird momentan nicht mit neuen Abtastwerten versorgt,
z.B. weil er von keinem Diagramm verwendet wird oder das Diagramm per Kommando dia.run=0 gestoppt wurde.

'Laufend':
Dieser Speicher wird entsprechend seiner Abtastrate mit neuen Abtastwerten versorgt.

Durch Anklicken des Kanalspeicher-Untermenüs (z.B. "Ch[0]" für den ersten Kanal) kann ein Textfenster geöffnet werden, in dem nicht nur die Anzahl vorhandener Abtastwerte ("samples"), sondern auch die Abtastwerte selbst angezeigt werden. Die angezeiten Daten können per 'Copy and Paste' (Ctrl-C, Ctrl-V) bequem als Text in andere Programme (Editoren, Email-Bowser) übernommen werden.


Zoomen und Scrollen per Touchscreen

Bei Geräten mit Touchscreen kann der Bediener wie in diesem Kapitel beschrieben in den Kurvenbereich 'hineinzoomen', oder den dargestellten Wertebereich durch verschieben der Achsen (Skalen am Rand des Kurvenbereichs) anpassen. Um dies zu erlauben, setzen Sie bei der Erstellung Ihrer Applikation im Dialog 'Eigenschaften eines Liniendiagramms' auf der Registerkarte 'Speziell' die Option
    per Touchscreen scroll- und zoombar.

Mit dieser Option können Y(t)-Diagramme wie folgt bedient werden:

  • Per Touchscreen können vertikale Skalen nach oben oder unten geschoben werden, um den dargestellten Wertebereich der Ordinate ("Y-Achse") zu ändern. Der Kurvenbereich wird während der Bewegung mitgescrollt.
  • Bei Y(t)-Diagrammen mit einer horizontalen Zeitachse (d.h. physikalische Einheit "s") kann die Zeitachse seitlich verschoben werden. Falls für den entsprechenden Zeitbereich noch (oder 'schon') Daten im Speicher vorhanden sind, wird auch die Kurve neu gezeichnet.
    Wie schon in Kapitel 2 beschrieben wurde, kann die Zeitachse mit der physikalischen Einheit "s" (Sekunde) abhängig vom dargestellten Bereich automatisch auch in Stunden (h), Minuten (min), oder Millisekunden (ms) beschriftet werden. Unabhängig davon erfolgt die Angabe immer relativ zur aktuellen Zeit, d.h. der Wert 'Null' repräsentiert die aktuelle Zeit, und negative Werte liegen in der Vergangenheit.
  • Um den dargestellten Wertebereich zu vergrößern oder zu verkleinern, tippen Sie zweimal in schneller Folge (*) in die Skala. Beim zweiten Mal halten Sie den Finger (bzw. Touch-Pen) auf dem Display, und ziehen ihn anschließend nach oben, um den Bereich zu vergrößern, oder nach unten um den Bereich zu verkleinern. Der anfangs angetippte Punkt bleibt in der Mitte des gezoomten Bereiches.
  • (mit multi-touch-fähiger Hardware könnten Sie wie beim Smartphone oder Tablet-PC per zwei-Finger-Spreiz-Geste in den Kurvenbereich zoomen. Im August 2018 existierte allerdings nur ein Prototyp (UPT 800) mit kapazitivem Multi-Touch-Display.)
  • Um wieder zu den per Designer eingestellten Wertebereichen zurückzukehren, tippen Sie dreimal in schneller Folge (*) in die Skala.
    Ohne dieses 'manuelle Rücksetzen' bleiben die o.g. Zoom-Einstellungen auch beim Umschalten zwischen zwei Anzeigeseiten erhalten. Der Bediener kann so z.B. zwischen Diagramm und einer numerischen Anzeigeseite hin- und herschalten, ohne den gezoomten Bereich zu verlieren.

  * Für die Erkennung von Doppel- oder Dreifach-Klicks dürfen maximal
    500 Millisekunden zwischen zwei Touchscreen-Betätigungen vergehen.


Y(t)-Diagramm mit Temperaturverläufen aus der Applikation script_demos/Thermo.cvt.
Die hier orange eingezeichneten Kreise und Pfeile markieren die Bereiche,
in denen per Touchscreen gescrollt oder gezoomt werden kann.

Touchscreen-Betätigungen innerhalb des Kurvenbereiches sind für die 'Marker-Funktion', bzw. für die interaktive Steuerung des Diagramms unter Script-Kontrolle ("OnDiagramTouchEvent") reserviert.
Hinweis für Script-Entwickler:
Die momentanen Scroll-/Zoom-Parameter können mit Hilfe der Funktion
display.dia.horz_zoom_factor bzw.
display.dia.horz_zoom_offset ermittelt werden.


Zusätzlicher Kurvenspeicher (zum Zoomen und Scrollen von Diagrammen)

Zum Zeitpunkt der Erstellung dieser Dokumentation (2018-08-17) verfügte jeder Diagramm-Kanal über einen internen (Diagramm-eigenen) Speicher mit maximal 2048 Abtastpunkten (samples). Sollen größere Datenmengen im Diagramm angezeigt werden (z.B. um weit zurückzuscrollen), bietet sich ein großes im Script deklariertes Array als zusätzlicher Speicher an.
Bei Interesse wäre auch eine Callback-Funktion (im Script) denkbar, die z.B. darzustellende Daten blockweise aus einer Datei liest, oder per Netzwerk von einem externen Server abruft.

Zurück zum Anfang


Kommandos zum Steuern der Diagramm-Anzeige

Die folgenden Interpreterkommandos (und -Funktionen) dienen zum Steuern der Diagramm-Anzeige während der Laufzeit.
Diese Kommandos waren ursprünglich nur im Display-Interpreter implementiert. Später (anno 2018) folgten einige in der Script-Sprache verwendbare Kommandos und Funktionen. Für den Aufrif aus der Script-Sprache muss diesen Kommandos der Präfix 'display.' vorangestellt werden (z.B. liefert beim Aufruf aus der Script-Sprache nur display.dia.unix_time die Zeitmarke des am linken Rand des Diagramms sichtbaren Abtastwertwertes).
dia.clear             (Display-Interpreter)
display.dia.clear      (Script-Kommando)
Dieses Kommando löscht die alte Kurve im Diagramm. Bei nicht scrollender Y(t)-Darstellung beginnt ein neuer Durchgang am linken Rand des Diagramms. Alle Abtastwerte in Kanalspeichern (Arrays) des momentan sichtbaren Diagramms gehen dabei verloren. Kanalspeicher von Diagrammen auf anderen Display-Seiten sind davon nur betroffen, wenn sie die gleichen Kanäle verwenden.

dia.run=X                    (Display-Interpreter)
display.dia.run := TRUE bzw. FALSE(Script)
Dieses Kommando stoppt und startet die Diagrammanzeige im "Echtzeitbetrieb".
"dia.run=0" (bzw. FALSE) bedeutet "Pause" (keine laufende Aktualisierung),
"dia.run=1" (bzw TRUE) bedeutet "Ende der Pause, weiterlaufen im Echtzeitbetrieb".
Der aktuelle Status (Diagramm gestoppt / laufend) kann auch per Auslesen des Flags "dia.run" abgefragt werden. Daher eignet sich das folgende Beispiel, um ein laufendes Diagramm zu stoppen bzw. ein gestopptes Diagramm weiterlaufen zu lassen:
dia.run=!dia.run                          (per Display-Interpreter)
display.dia.run := !display.dia.run;  // starten/stoppen   (per Script)
(Der Operator "!" bedeutet "boolesche Negation").

dia.ready
Diese Funktion liefert den Zustand des "Scan-Komplett"-Flags. Es wird gesetzt, wenn die Schreibposition des Diagramms am rechten Rand ankommt (woraufhin sie normalerweise wieder zum linken Rand springt). Dies kann zur Implementierung eines "Single-Shot"-Modus verwendet werden, wie bei einem Speicheroszilloskop. Z.B. könnte das Diagramm per Tastendruck vom Anwender gestartet werden, und automatisch wieder stoppen wenn der Bildschirm "voll" ist. Verwenden Sie dazu "dia.ready" in einer Event-Definition, und "dia.run=0" als Reaktion beim Eintreffen dieses Ereignisses. Ein Beispiel dazu finden Sie in der Datei "diag_test1.cvt".
Das Scan-Komplett-Flag wird automatisch durch die Kommandos dia.clear und dia.run gelöscht.

display.dia.unix_time(Script-Funktion)
Dieser schreib- und lesbare Parameter enthält die absolute Zeitmarke des momentan am linken Rand des Diagramms sichtbaren Abtastwertwertes.
Solange das Diagramm nicht vom Bediener 'in der Zeit zurückgescrollt' oder per display.dia.run := FALSE gestoppt wurde, ist dieser Wert nahezu (*) identisch mit dem vom Ausdruck
  system.unix_time - display.dia.timespan_sec
gelieferten "aktuellen, absoluten Zeit [Anzahl seit dem 1. Januar 1970 verstrichener Sekunden]".
Aus den hier erläuterten Gründen sollte im Script zum Speichern der Unix-Zeit bei schnellaufenden Diagrammen (Zeitbasis unter einer Sekunde) eine Variable des Typs double (nicht float) verwendet werden.
Seit 12/2018 kann das Diagramm per Zuweisung an display.dia.unix_time auch horizontal gescrollt werden (wenn für den angegebenen Zeitpunkt Daten im Sample-Speicher vorhanden sind). Die Anzeige neuer 'live'-Daten in Echtzeit wird dabei automatisch gestoppt (wie display.dia.run := FALSE). Ferner wird ein eventuell durch den Bediener per Touchscreen gesetzter horizontaler Offset automatisch zurückgesetzt (display.dia.horz_zoom_offset := 0.0), so daß die neu gezeichnete Kurve wirklich mit der zugewiesenen Zeitmarke beginnt.
(*) Hinweis zu im 'Echtzeitbetrieb' laufenden Diagrammen (mit display.dia.run == TRUE):
Da bei schnelllaufenden Diagrammen mit Speisung der Messkanäle per DAQ eine kanalabhängige Latenz von einigen Millisekunden auftreten kann, wird für die Anzeige eine absichtliche Verzögerung von 50 Millisekunden eingefügt. Während dieser Zeit sollten auch verzögerte (z.B. über Netzwerke und Gateways bezogene) Daten mit entsprechend 'alter' Zeitmarke im Datenspeicher (DAQ) eingetroffen sein.
Aus diesem Grund tritt auch bei einem 'laufenden' Diagramm eine Differenz
zwischen display.dia.unix_time - display.dia.timespan_sec und system.unix_time von etwa 50 ms auf.

display.dia.timespan_sec(Script-Funktion)
Liefert bei Y(t)-Diagrammen die "Breite des momentan sichtbaren Kurvenbereichs in Sekunden", d.h. die dort angezeigte Zeitspanne.
Dieser nur lesbare Parameter hängt von der Breite des Diagramms in Pixeln, aber auch von der Einstellung der Zeitbasis, und vom Vergrößerungsfaktor (z.B. per Touchscreen) ab.

display.dia.horz_zoom_factor(Script-Funktion)
Liefert bei Y(t)-Diagrammen den "aktuellen horizontalen Vergrößerungsfaktor" (dimensionslos).
Dieser Parameter wird normalerweise nur durch den Bediener durch horizontales Zoomen per Touchscreen modifiziert.
Solange nicht in ein Y(t)-Diagramm "gezoomt" wurde, ist der Zoom-Faktor 1.0, d.h. "ein Pixel entlang der X-Achse entspricht einem Abtastwert mit dem hier festgelegten Intervall ("Zeitbasis in Sekunden pro Sample").
Ein Zoom-Faktor über 1.0 dehnt, ein Wert zwischen 0.01 und 0.99 staucht die Anzeige.

display.dia.horz_zoom_offset(Script-Funktion)
Liefert bei Y(t)-Diagrammen die "aktuelle horizontale Verschiebung beim Zoomen oder Scrollen" (i.A. in Sekunden).
Dieser Parameter wird normalerweise nur durch den Bediener beim horizontalen Zoomen/Scrollen per Touchscreen modifiziert.
Solange nicht "gezoomt" wurde, ist der Zoom-Offset 0.0, d.h. bei einem Y(t)-Diagramm zeigt "das Pixel am rechten Rand der Kurve" den neuesten verfügbaren Abtastwert.
Der Zoom-Offset wird beim Zugriff auf die Meßwertspeicher zur Zeitmarke addiert (statt Array-Indizes werden i.A. nur Zeitmarken zur "Adressierung" eines bestimmten Abtastwertes verwendet, um auch bei voneinander abweichenden Kanal-Abtastraten eine korrekte Ausrichtung der Kurven bei mehrkanaliger Anzeige sicherzustellen).
Siehe auch: display.dia.unix_time (dient zum Scrollen der Anzeige zu einer bestimmten Zeitmarke per Script).

dia.plot_daq
Plottet die aktuellen Daten aus der DAQ-Einheit in das Y(t)-Diagramm. Bei Geräten mit Datenerfassungs-Einheit (DAQ) kann mit diesem Befehl der Inhalt des Messdatenspeichers in ein Diagramm übertragen werden. Das Diagramm wird dabei komplett neu gezeichnet, und in einen 'statischen' Zustand geschaltet ( wie mit display.dia.run := FALSE ).

dia.ch[N].min, dia.ch[N].max                (Zugriff per Display-Interpreter)
display.dia.ch[N].min, display.dia.ch[N].max   (Zugriff per Script)
Ermöglicht den Zugriff auf die Skalierungsparameter aller Kanäle zur Laufzeit. Kann z.B. verwendet werden, um in bestimmte Bereiche der Kurve "hineinzuzoomen". Dazu überschreibt man mit diesen Kommandos die min/max - Parameter des Kanals, die zur Entwurfszeit mit dem Programmiertool festgelegt wurden. Der Kanalindex [N] ist der gleiche wie auf der Registerkarte "Kanäle, Modus, Zeitbasis", die Zählung beginnt beim ersten Kanal mit Index 0 (Null) !
Um in ein X/Y-Diagram zu zoomen, müssen i.A. vier dieser Parameter überschrieben werden ! Je nachdem welcher Kanal die X-Achse und welcher die Y-Achse steuert, könnten dies z.B. die Parameter dia.ch[0].min, dia.ch[0].max,  dia.ch[1].max, und dia.ch[1].max sein. Das Diagramm wird automatisch neu gezeichnet, wenn neue Werte an die Skalierungsparameter zugewiesen werden.
Um zu den beim Entwurf festgelegten Parametern zurückzukehren, verwenden Sie das Kommando dia.ch[N].reset .
Beim Zoomen per Touchscreen ändern sich die o.g. Parameter auch während der Laufzeit.

dia.ch[N].reset
Setzt die Skalierungsparameter des angegebenen Kanals auf die beim Entwurf festgelegten Werte (min,max) zurück. Kann verwendet werden, um nach der Vergrößerung (mit den Kommandos dia.ch[N].min and dia.ch[N].max) wieder zur Originaleinstellung zurückzukehren ("Zoom Out").

dia.ch[N].n_samples                     (Nur Lesezugriff)
Liefert die Anzahl der momentan im Kanal 'N' gespeicherten Abtastwerte. Nur für Diagnosezwecke, z.B. für die Anzeige im Watch-window.

dia.sc.X.min,  dia.sc.X.max               (Zugriff per Display-Interpreter)
display.dia.scale[<index>].min,   ..max      (Zugriff per Script)
Ändert die Beschriftung (bzw. deren Wertebereich) einer Diagrammskala während der Laufzeit.
Per Display-Interpreter:
X : l=left (linke Skala), r=right (rechte Skala), t=top (obere Skala), b=bottom (untere Skala).
Beispiel: dia.sc.t.min = -1.5 : dia.sc.t.max = 100.0 

Per Script:
<index> : arLeftScale = Skala am linken Rand,   arRightScale = Skala am rechten Rand,
                arTopScale = Skala am oberen Rand,   arBottomScale = Skala am unteren Rand.
Beispiel: display.dia.scale[arTopScale].min := -1.5; 

Dies funktioniert nur, wenn die Skala nicht mit einem Datenkanal verbunden ist (d.h. das Häkchen "von Kanal" darf für diese Skala nicht gesetzt sein) ! Um die Skalierung eines bestimmten Kanals zu ändern, verwenden Sie stattdessem display.dia.ch[N].min / .max.

display.dia.width_pixels      (Lesezugriff per Script)
Liefert die Breite des Kurvenbereiches in Pixeln. Dieser nur lesbare Parameter hängt auch von der Bildschirmauflösung ab, denn Diagramme (bzw. deren Fläche) wird automatisch skaliert, wenn die Applikation ursprünglich für ein anderes Gerät entwickelt wurde.
Zweck / Beispiel : Berechnen des Skalenendwertes für eine Frequenzachse.

display.UpdateDiagram(Script-Prozedur)
Kann nach dem Berechnen neuer Werte (im Script) aufgerufen werden, um ein eventuell vorhandenes Diagramm zum Neuzeichnen zu veranlassen. Bei mit Script-Arrays verbundenen Diagramm-Kanälen werden die Daten (Abtastwerte und Zeitmarken) aus den Array in die Diagramm-eigenen 'Kurvenspeicher' - auch bei gestopptem Diagramm (d.h. unabhängig davon, ob display.dia.run == TRUE oder FALSE).
Zweck: Ohne (durch das Script erkannten) Trigger soll sich der Inhalt des Kurvenspeichers im Diagramm nicht ändern, selbst wenn z.B. der Bediener durch Scrollen der Kurve ein Neu-Zeichnen erzwingt.
Bei Diagramm-Kanälen ohne Verbindung mit Script-Arrays hat dieser Befehl keine Wirkung, denn dann werden Abtastwerte direkt im Kurvenspeicher 'eingesammelt' (durch das Diagramm, wenn dia.run==TRUE).
Das Beispielprogramm script_demos/diagrams.cvt verwendet diesen Befehl in der Prozedur CheckTriggerAndUpdateDiagram, um nach dem Erkennen eines Trigger-Ereignisses die 'aufbereiteten' Daten aus zwei Script-Arrays in den Kurvenspeicher zu übernehmen.

Weitere Befehle zur Diagramm-Steuerung per Script könnten noch folgen.

Polygone innerhalb des Kurvenbereiches eines Diagramms

Bei allen neueren Geräten (ab MKT-View II) können offene und geschlossene Polygone innerhalb des Kurvenbereichs eines X/Y-Diagramms gezeichnet werden. Sie dienen z.B. zum Einzeichnen eines 'Toleranzbereiches' in einem Drehzahl / Drehmoment-Diagramm, zur Kennzeichung des Nullpunkts, oder zur Markierung bestimmter Mess- oder Zielpunkte.
Dazu werden die Eckpunkte der Polygone in einem mehrdimensionalen Array gespeichert. Dies erfolgt erst während der Laufzeit (per Display-Interpreter oder Script), so dass die Polygon-Eckpunkte auch per CAN (etc) aus einem Steuergerät gelesen werden können (z.B. abhängig vom zulässigen Drehzahl- und Drehmomentenbereiches). Die Polygone werden dann bei jedem Neu-Zeichnen des Diagramms mit der gleichen Koordinatentransformation wie für die Kurvenpunkte skaliert. Am Ende dieses Kapitel werden einige Beispiel-Applikationen vorgestellt, in denen Polygone in Diagramme gezeichnet werden.
Zum Einblenden von Polygonen in ein Diagramm dienen die folgenden Display-Interpreter- bzw Script-Kommandos):

dia.poly(from_row, to_row, from_column, to_column)                                  (Display-Interpreter, alte Syntax)
dia.poly[Index].draw(arr[from_row~to_row][from_column~to_column])      (Display-Interpreter, neuere Syntax)
display.dia.poly[Index].draw( <Quelle> [,Farbe][,Text][,Optionen])    (per Script, bevorzugte Methode)
Zeichnet ein oder mehrere Polygone im Kurvenbereich des Diagramms. Die Koordinaten der Polygonpunkte werden im globalen Array des Display-Interpreters abgelegt (bzw. beim Zeichnen von dort gelesen).
Beispiel zum Zeichnen von Polygonen per Display-Interpreter:
dia.poly[9].draw(arr[10][0~3],o) Zeichnet nur polygon #9, unter Verwendung der 11-ten Zeile des Arrays, als OFFENES Polygon (Kleinbuchstabe "o").

Beispiele zum Zeichnen von Polygonen per Script folgen in Kapitel 5.1.

dia.poly.clear                                         (Interpreterkommando)
Entfernt alle Polygone aus der Zeichenfläche des Diagramms.

dia.poly[N].dmode=<Zeichenmodus>     (Interpreterkommando)
dia.poly.dmode                                         (Interpreterfunktion)
Ändert den Zeichenmodus (display mode) eines bzw. aller Polygone für die Anzeige auf einem Monochrom-Display. N ist der Polygon-Index (die Index-Zählung beginnt auch hier bei Null, d.h. N=0 ist das ERSTE Polygon; das Maximum liegt bei N=19 - s.U.). Brauchbare Zeichenmodi für Linienzüge sind: 0=deckend, nicht blinkend, 1=blinkend in Phase 1, usw. Blinken funktioniert allerdings nicht bei Farb-Displays). Wird der Polygon-Index [N] weggelassen, wirkt sich der Befehl auf alle Polygone des Diagramms aus.
Bei Farbdisplays hat der 'draw mode' (dmode) keinen Effekt. Verwenden Sie stattdessem eine geeignete Farbe:
dia.poly[N].color=<color>
Ändert die Linienfarbe eines bzw. aller Polygone (falls das Gerät mit einem Farbdisplay ausgestattet ist). Eine Übersicht der verwendbaren Farben finden Sie hier .

dia.poly[N].width=<Linienbreite>    (Interpreterkommando)
dia.poly.width                                    (Interpreterfunktion)
Ändert die Linienbreite des Polygone ("Dicke"), gemessen in Pixel. Wird der Polygon-Index weggelassen, wirkt sich der Befehl auf alle Polygone des Diagramms aus. Verwenden Sie die Linienbreite sparsam, denn zu viele breite Linien verlangsamen den Bildaufbau. Der Default-Wert beträgt 1 (ein) Pixel.

dia.poly[N].text="<string>"            (Interpreterkommando)
Zeigt einen kurzen Text (max. 20 Zeichen) dicht neben dem angegebenen Polygon an. Der Text kann während der Laufzeit per Interpreterkommando gesetzt werden, bevor das Polygon gezeichnet wird. In der Script-Sprache kann der Text als optionaler String-Parameter beim Aufruf von display.dia.poly.draw als Funktionsargument übergeben werden. Die Definition eines Textes beim Entwurf des Anzeigeprogrammes ist (wie auch die Definition der Polygon-Koordinaten) nicht möglich.

(*) Die Anzahl von Polygonen pro Diagramm ist auf 20 begrenzt, selbst wenn die Kapazität des zur Speicherung der Koordinaten verwendeten Arrays größer wäre. Da, wie in fast allen Programmiersprachen, die Index-Zählung bei Null beginnt, ist der maximal zulässige Polygon-Index 19.

Weitere Befehle zur Diagramm-Steuerung könnten noch folgen.
Ein Beispiel für Fortgeschrittene mit zur Laufzeit erzeugten, und z.T. bewegten Polygonen finden Sie in der Applikation MKTview2/MV2_Poly.cvt.


Screenshot aus Applikation 'programs/MKTview2/MV2_Poly.cvt'
(Test für Diagramme mit Polygonen, hier auf einem MKT-View III)

Der weiße Punkt im obigen Screenshot markiert den aktuellen Messwert (hier: X, Y). Er wurde mit dem folgenden Anweisungen (auf der entsprechenden Display-Seite unter 'lokale Events') als Polygon mit nur einem fünf Pixel großen Eckpunkt realisiert:
  Ereignis  Reaktion
  always    arr[4][0][0~1]={X,Y};         // copy X and Y into the array (one point)
  always    dia.poly[3].color = white : dia.poly[3].width = 5; // prepare drawing ..
  always    dia.poly[3].draw(arr[4][0][0~1],o); // draw X,Y as polygon with a single point 
Im oben gezeigten Beispiel ist das Diagramm selbst transparent, und der Farbgradient im Hintergrund 'scheint durch'. Um alte Teile der Kurve und bewegte Polygone vom Bildschirm ohne 'Schleifspur' zu entfernen, wird die gesamte Seite jedesmal komplett neu gezeichnet. Dies wird im 'Kopf' der Seitendefinition eingestellt.

Zeichnen von Polygonen in Diagrammen per Script

Die in der Übersicht dieses Kapitels beschriebenen Funktionen zum Zeichnen von Polygonen per Display-Interpreter wurden im Oktober 2018 durch die nachfolgend beschriebene Funktionen zum Zeichnen von Polygonen per Script ersetzt. Die alten Interpreterfunktionen sind nur noch aus Kompatibilitätsgründen verfügbar.
Neue Syntax (seit Oktober 2018):
 display.dia.poly[Index].draw( <Quelle> [,Farbe][,Text][,Optionen] )
                    |             |         |      |      |
                    |             |         |      |      |__ Optionale Flags
             Polygon-Index,       |         |      |
             optional, 0..19      |         |      |__ Optionaler in der Nähe des
                                  |         |          Polygons anzuzeigender Text
                                  |         |__ Optionale Angabe der Zeichenfarbe
                                  z.B. Array, mit optionaler Anzahl zu zeichnender Punkte
Ist die Quelle (wie in den weiter unten präsentierten Beispielen) ein Array, dann kann im direkt danach folgenden Argument die Anzahl zu zeichnender Punkte als Integer-Wert angegeben werden. Andernfalls ergibt sich die Anzahl aus der 'momentan verwendeten Länge' des Arrays (array.len).
Als weiterer optionaler Parameter kann die Farbe (Wert mit dem Datentyp tColor) und ein in der Nähe des Polygons anzuzeigender Text (Wert mit dem Datentyp string) übergeben werden.

Intern werden Polygonkoordinaten weiterhin in das globale Array ("arr") des Display-Interpreters kopiert (bzw. beim Zeichnen von dort gelesen).
Die Script-Sprache bietet selbstdefinierbare Arrays, die üblicherweise als Quelle für Koordinaten der Eckpunkte von Polygonen verwendet werden. In einem dreidimensionalen Array können dabei die Koordinaten für mehrere Polygone abgelegt werden, in einem zweidimensionalen Array wird üblicherweise nur ein Polygon (mit N Punkten) gespeichert.
Die niederwertigste Dimension des Arrays (in den eckigen Index-Klammern ganz rechts) wird wie folgt verwendet:
  Index 0 dient zum Speichern der X-Koordinate (bzw. der Zeitmarke bei Y(t)-Diagrammen),
  Index 1 dient zum Speichern der Y-Koordinate,
  Index 2 wird zum Speichern einer Z-Koordinate für zukünftige Anwendungen reserviert,
  Index 3 könnte zum Speichern individueller 'Flags' für jeden Punkt des Polygons dienen.

Für einfache Anwendungen wird daher im Script mindestens ein zweidimensionales Array benötigt, mit mindestens zwei Elementen (Index 0 für X und 1 für Y) in der niederwertigsten Dimension.
Beispiel (Deklaration eines dreidimensionalen Arrays für Polygon-Koordinaten in script_demos/diagrams.cvt):

var
   float PeakIndicator[3][5][2];
         //            |  |  |___ coordinate : 0=x, 1=y
         //            |  |______ point index (here, up to 5 points per polygon)
         //            |_________ polygon index : 0..2 (for up to 3 polygons)
endvar;
Um nach dem (hier nicht gezeigten) Initialisieren des Arrays 'PeakIndicator' dieses als Polygon innerhalb eines Diagramms zur Anzeige zu bringen, wurde in script_demos/diagrams.cvt der folgende Befehl verwendet:

  display.dia.poly[0].draw( PeakIndicator[0], 3, clRed, "Indicator 1", pfClosed ); 
 //                         | Quelle, hier mit |   |         |           |
 //                         |    Anzahl Punkte |   Farbe     Text        |
 //                         |_______(optional)_|  (optional) (optional)  |
 //  ____________________________________________________________________|
 // |
 // |
 // Option
Als 'Option' kann als letzter Parameter eine bitweise Kombination der folgenden Flags verwendet werden:
  pfOpen : Zeichnen eines offenen Polygons
  pfClosed : Zeichnen eines geschlossenen Polygons
  pfNoScroll : Zeichnen eines Polygons, welches bei Y(t)-Diagrammen nicht zusammen mit den Kurven gescrollt wird.
      Ohne dieses Flag werden die X-Koordinaten im Array bei Y(t)-Diagrammen als Zeitstempel interpretiert,
      und bewegen sich daher zusammen mit den Meßwerten (Kurven) langsam von rechts nach links.
      Andernfalls (mit pfNoScroll) müssen die X-Koordinaten im Array bei Y(t)-Diagrammen
      zwischen 0 (= linker Rand des Kurvenbereiches) und N Sekunden (= rechter Rand) liegen,
      wobei N von der Breite und Konfiguration des Diagramms (Zeitbasis) abhängt.
      Diese "sichtbare Breite in Sekunden" (N) kann per display.dia.timespan_sec abgefragt werden.

Weitere ausführlich kommentierte Beispiele zum Zeichnen von Polygonen per Script finden Sie in der Beispielapplikation
script_demos/diagrams.cvt.


Siehe auch:
Polygone außerhalb von Diagrammen, erzeugt oder eingefügt per Editor
Zurück zum Anfang


Diagramm-spezifische Event-Handler (im Script)

Für besondere Anwendungen können im Script spezifische Event-Handler(*) definiert werden, die beim Auftreten eines bestimmten Ereignisses (im Zusammenhang mit dem Anzeige-Element 'Diagramm') aufgerufen werden.
Die Namen dieser optionalen Event-Handler sind durch das System fest vorgegeben.
Existiert ein entsprechender Handler in Ihrem Script, dann wird er beim Auftreten des entsprechenden Ereignisses immer dann aufgerufen, wenn beim Design des Diagramms die spezielle Option 'Event-Handler im Script aufrufen' gesetzt ist. So können Diagramme auf bestimmten Seiten von der Event-Verarbeitung ausgeschlossen werden.

func OnDiagramTouchEvent( int event, int area, float scaled_x, float scaled_y ) // touch event in a diagram

Dieser Handler kann bei Touchscreen-Ereignissen im Diagramm aufgerufen werden. Das erste Funktionsargument teilt dem Handler mit, welches Ereignis zur Verarbeitung ansteht :

event : Typ des Ereignisses. Dies kann eine der folgenden, in der Script-Sprache fest eingebauten Konstanten sein (Integer):
evPenDown : "der Touchscreen wurde gedrückt, und die Koordinate lag innerhalb der Fläche dieses Elements"
evPenMove : "Stift oder Finger wurde auf dem Touchscreen bewegt, Koordinate weiterhin innerhalb des Elements"
evPenUp   : "Stift oder Finger wurde vom Touchscreen abgehoben" (nachdem die Koordinate vorher im Bereich des Elements lag)

curve_area : repräsentiert den Bereich, in dem das Touchscreen-Event auftrat:
arLeftScale  : Vertikale Skala am linken Rand des Diagramms (erste 'Y-Achse')
arRightScale : Vertikale Skala am rechten Rand des Diagramms (zweite 'Y-Achse')
arTopScale   : Horizontale Skala am oberen Rand des Diagramms
arBottomScale: Horizontale Skala am unteren Rand des Diagramms ('X'- oder Zeitachse)
arCurve1 : erster Kurvenbereich des Diagramms
arCurve2 : zweiter Kurvenbereich (nur bei mehrkanaligen Diagrammen mit getrennten Bereichen)

scaled_x : horizontale Position, skaliert wie ein entsprechender Meßwert.
Bei X/Y-Diagrammen passend zu den Messwerten im 'X'-Kanal skaliert.
Bei Y(t)-Diagrammen ist 'x' eine Zeitmarke in Sekunden (relativ zu display.dia.unix_time).
Da die Auflösung eines 'single precision'-Fliesskommawertes ('float') zum Speichern einer Unix-Zeit in Sekunden (für Y(t)-Diagramme nicht ausreicht, kann dieses Funktionsargument seit 2018-12-21 auch als 'double' übergeben werden. Mit einer 52-Bit-Mantisse wird eine Zeitspanne von 48 Jahren (2018 - 1970) noch mit
 (1e6*60*60*24*365*(2018-1970)) / (2^52) = 0.34 Mikrosekunden
aufgelöst. Entsprechendes gilt auch für display.dia.unix_time.

scaled_y : vertikale Position, skaliert wie ein entsprechender Meßwert.
Bei X/Y-Diagrammen passend zu den Messwerten im 'Y'-Kanal skaliert.
Bei Y(t)-Diagrammen passend zum ersten im Kurvenbereich sichtbaren Kanal skaliert.

Ähnlich wie bei den Low-Level-Handlern (z.B. 'OnPenDown', 'OnPenMove', 'OnPenUp') steuert auch bei OnDiagramTouchEvent der Return-Wert, ob das Ereignis mit dem systemeigenen Default-Handler verarbeitet werden soll. Wurden Touchscreen-Events bereits in einem der o.g. Low-Level-Handler per 'return TRUE' abgefangen, dann wird OnDiagramTouchEvent() nicht aufgerufen.

Ein Beispiel zur Messung von Zeitdifferenzen unter Verwendung des Handlers 'OnDiagramTouchEvent' finden Sie in der Applikation script_demos/diagrams.cvt . Dort wird per Script ein rechteckiges Marker-Fenster (als Polygon) im Kurvenbereich des Diagramms aufgezogen, mit dem z.B. Zeitdifferenzen gemessen werden können.


Diagramm mit per Touchscreen aufgezogenem 'Marker' (blau, im Script: Polygon) zur Messung von Zeitdifferenzen.
  Rot: Vom CAN-Bus empfangenes Signal zum Erzeugen eines Klicks,
  Grün: Mikrofonsignal (aufgenommen vom MKT-View IV per DAQ).
  Türkis: Zweites per CAN empfangenes Testsignal, wenige us später.

(*) Zusätzlich zum in diesem Kapitel vorgestellten Diagramm-spezifischen Touchscreen- Event-Handler besteht auch die Möglichkeit, Touchscreen-Events mit einem unspezifischen Event-Handler (OnControlEvent) zu verarbeiten. Die Abfrage, in welchem Bereich des Diagramms die Koordinate lag, und die Transformation von Pixelkoordinaten in physikalische Werte müsste dann im Script erfolgen.


Syntax einer Diagrammdefinition als Backslash-Sequenz

Intern wird jedes Diagramm als Backslash-Sequenz codiert. Der in der UPT-Firmware enthaltene Interpreter analysiert diese Sequenz als Teil des Format Strings in einer Displayzeilen-Definition. Falls Sie es vorziehen, den "Quelltext" für eine Anzeigeseite per Texteditor zu schreiben statt ihn per Maus zusammenzuklicken, hier die Syntaxbeschreibung:

Syntax:

\dia( width,height, 1st_chn,last_chn,style,diagram_flags,timebase)   (veraltetes Format)
\dia2( 1st_channel,last_channel,style,diagram_flags,timebase)     (bevorzugtes Format)
Die Haupt-Definitionszeile. Bei neueren Geräten stehen Breite und Höhe nicht mehr innerhalb der Parameterliste (in Klammern), sondern zählen zu den 'allgemeinen Eigenschaften' eines Anzeige-Elements bei der Definition eines Anzeige-Elements.

\dia.sc.X(scale_flags,size,min,max)
Definition einer Skala (scale). 'X' ist einer der Buchstaben 'l','r','t','b' (left, right, top, bottom).
Parameter:
scale_flags : Bitweise codierte "Flags" für eine bestimmte Skala.
    Bit 0 (Maske 1) : 1=sichtbar, 0=unsichtbar
    Bit 1 (Maske 2) : 2=min/max aus Kanaldefinition übernehmen, 0=unabhängige min/max-Werte.

size :
    Breite einer verikalen Skala bzw. Höhe einer horizontalen Skala,
    gemessen in Pixel. 0 = "automatisch".

min :
    Wert "am unteren Ende der Skala" (bedeutungslos wenn der Wertebereich aus einem Kanal übernommen wird)

max :
    Wert "am oberen Ende der Skala" (bedeutungslos wenn der Wertebereich aus einem Kanal übernommen wird)

Als optionaler Parameter nach den 'Flags' kann mit dem Token "u=" eine physikalische Einheit (unit) definiert werden, die bei der Beschriftung der Skala an den Zahlenwert angehängt werden kann.

\dia.chX(graph_style,channel_flags,sampling_interval,min,max,idle)
Definition eines Diagramm-Daten-Kanals (channel). 'X' ist der Kanal-Index, zulässige Werte sind '0'...'7'.
Parameter:
graph_style :
    Bits 3..0 : Linienmuster:
      0 = einzelne Punkte,
      1 = durchgezogene Line,
      2 = gefüllte Fläche (nur für Y(t)-Diagramme),
      3 = grau schraffierte Fläche (für Y(t)-Diagramme auf Monochrom-Displays),
      4 = punktierte Linie,
      5 = gestrichelte Linie.
    Bits 7..4 : Breite der Linie in Pixel

channel_flags :
    Dieser Paramter existiert nur noch aus Kompatibilitätsgründen.

sampling_interval :
    Abtastintervall für diesen Kanal beim "Einsammeln" von Daten für das Diagramm.
    Dieser Parameter kann in Millisekunden, Sekunden oder Minuten definiert werden.
    Fehlt der Anhang "ms", "s" oder "min", wird das Abtastintervall aus
    Kompatibilitätsgründen in 10-ms-Schritten (ehemals "Timer-Ticks") definiert.

min :
    Min-Wert für die Skalierung im Diagramm (unteres Ende des Kurvenbereiches).

max :
    Max-Wert für die Skalierung im Diagramm (oberes Ende des Kurvenbereiches).

idle :
    Dieser Wert wird verwendet, wenn keine gültigen Werte für
    diesen Kanal vorliegen (z.B. bei CAN-Bus-Störung, etc).

Die oben beschriebenen Definitionszeilen werden automatisch erzeugt (und ersetzen die alten Definitionen), wenn das in Kapitel 2 beschriebene Dialogfenster per "OK"-Button verlassen wird.


Letzte Änderung: 2018-11-08 durch WB / MKT Systemtechnik .