Funktionsweise

Das Aufzeichnen der Daten mittels des Funktionsbausteins RealTimeScope erfolgt im Single-Shot-Modus auf dem MOVI-C® CONTROLLER. Die Daten werden in einer CSV‑Datei auf einem Windows-System gespeichert (z. B. Windows-Teil des MOVI-C® CONTROLLER oder externer PC). Für das Speichern stellt der Funktionsbaustein eine Puffer-Variable zur Verfügung, über die jeweils eine Zeile der CSV-Datei ausgetauscht wird. Außerdem sind weitere Variablen für das Handshake und die Fortschritts-Information zur Kontrolle der Übertragung enthalten. Der Datenaustausch erfolgt über ein standardisiertes Kommunikationsprotokoll wie z. B. CODESYS ARTI.

Für das Aufzeichnen der Daten wird dem Funktionsbaustein RealTimeScope vom Applikationsprogramm ein Ringpuffer in Form eines statischen Arrays bereitgestellt. Das kürzeste mögliche Abtastintervall ist die Zykluszeit der Task HighPrio des Applikationsprogramms, kann jedoch auch eine beliebiges ganzzahlig Vielfaches der Zykluszeit sein. Da die Größe von REAL-Variablen bei 4 Byte liegt, muss die Puffergröße in Byte ganzzahlig durch 4 teilbar sein. Die notwendige Puffergröße richtet sich einerseits nach dem Abtastintervall, der gewünschten Aufzeichnungsdauer und der Anzahl der aufzuzeichnenden Kanäle (max. 8), andererseits sollte sie so gewählt werden, dass sie nur so viel Speicher belegt wie unbedingt erforderlich.

Die benötigte Puffergröße in Byte berechnet sich wie folgt:

Für eine 4-kanalige Aufzeichnung mit einem Abtastintervall von 1 ms und einer Aufzeichnungsdauer von 5 s ergibt sich so z. B. folgende notwendige Puffergröße:

Für die Übertragung der CSV-Datei vom MOVI-C® CONTROLLER auf das verbundene Windows-System werden in der Struktur Measurement verschiedene Variablen bereitgestellt. Siehe Kapitel Measurement.

Wenn eine Aufzeichnung erfolgreich durchgeführt wurde, wird eine CSV-Datei zur Übertragung bereitgestellt. Die Übertragung erfolgt zeilenweise. Der Funktionsbaustein RealTimeScope prüft in jedem Zyklus zunächst den Zustand der Variable INOUT.xNewData. Wenn diese Variable den Wert "FALSE" hat, ist die Empfängerseite bereit. In diesem Fall wird eine Zeile der CSV-Datei in die Variable OUT.abyLineBuffer geschrieben und die Variablen OUT.diLines2Transfer und OUT.diLinesTransferred werden auf die entsprechenden Werte gesetzt. Anschließend wird die Variable INOUT.xNewData auf "TRUE" gesetzt, um der Empfängerseite zu signalisieren, dass eine neue Zeile zur Übertragung bereitsteht. Sobald die Empfängerseite die Zeile abgeholt hat, muss sie die Variable INOUT.xNewData auf "FALSE" setzen, um dem Funktionsbaustein zu signalisieren, dass die nächste Zeile übertragen werden kann. Diese Prozedur wird solange wiederholt, bis alle Zeilen der Datei erfolgreich übertragen wurden.