Verwendung des ToFile Blocks

Mit Hilfe des ToFile Blocks aus der Simulink Standardbibliothek ist es möglich Signale in einem MAT-file zu loggen. Auch aus einem erstellten TcCOM heraus, lässt sich dieser Block weiterhin aus der TwinCAT-Runtime heraus nutzen.

Für den Dateisystemzugriff aus der Echtzeit wird ein zusätzliches TcCOM „TcExtendedFilewriter“ erzeugt und mit dem TcCOM mit dem ToFile Block (im folgenden Simulink-TcCOM genannt) verknüpft. Der TcExtendedFilewriter empfängt dann die Daten aus dem zugeordneten TcCOM und schreibt diese in ein MAT-File (mat4).

Im Folgenden sind Schritt für Schritt anhand eines Beispiels die Einstellungen in Simulink und in TwinCAT beschrieben.

Konfiguration im Simulink-Modell

Als einfaches Beispiel diene ein Modell mit einer Sinus- und ein Cosinus-Quelle. Beide Signale sollen mit je einem ToFile Block geloggt werden.

Verwendung des ToFile Blocks 1:

Um die Codegenerierung für die ToFile-Blöcke zu ermöglichen, muss als Format Array eingestellt werden:

Verwendung des ToFile Blocks 2:

Das Modell ist nun bereit für die Codegenerierung.

Konfiguration in TwinCAT

Um aus dem generierten Simulink-TcCOM schreiben zu können, wird das mit dem TE1400 installierte TcCOM TcExtendedFilewriter benötigt. Dieses nimmt die Daten aus dem Simulink Objekt an und legt die Daten im Dateisystem ab. Das Modul ist im TcCOM-Browser unter Beckhoff Automation > Extended File Access > TcExtendedFileWriter zu finden:

Verwendung des ToFile Blocks 3:

Zunächst werden beide TcCOM instanziiert. Beide Objekte können an eine gemeinsame oder an getrennte Tasks gehängt werden. Um eine Verbindung zwischen beiden Objekten herzustellen wird dem Simulink-TcCOM die ObjektID der TcExtendedFilewriter-Instanz mitgeteilt.

Die ObjectID ist unter dem Karteireiter Object zu finden.

Verwendung des ToFile Blocks 4:

Die ObjectID wird dann unter dem Karteireiter „Parameter (Init)“ des Simulink-TcCOM für den Parameter ExtendedFileAccessOID eingefügt:

Verwendung des ToFile Blocks 5:

Es lassen sich auch mehrere Simulink-TcCOM mit einer TcExtendedFileWriter- Instanz verknüpfen. Hierbei ist zu beachten, dass keine Konflikte zwischen den verwendeten Dateinamen auftreten. Es lassen sich auch mehrere TcExtendedFileWriter-Instanzen parallel benutzen. Beispielsweise kann jedes Simulink-TcCOM mit einem ToFile-Block ein eine eigene TcExtendedFileWriter-Instanz verwenden.

Parametrierung der TcExtendedFileWriter-Instanz

Unter dem Karteireiter Parameter (init) der Instanz des TcExtendedFileWriter kann das Verhalten des Objekts angepasst werden.

Verwendung des ToFile Blocks 6:

Timeout:

Es kann ein Timeout gesetzt werden

Working Directory:

Wird im ToFile Block ein relativer Pfad genutzt, z.B. /logData, wird der volle Pfad über den Parameter Working Directory aufgelöst.

Number of Files:

Es ist möglich die Dateianzahl zu begrenzen. Steht der Parameter auf 0, wird keine Begrenzung vorgenommen.

Max File Size:

Um auch während des laufenden Moduls auf die aufgenommenen Daten zugreifen zu können, wird nach dem Erreichen einer festgelegten Dateigröße (standardmäßig 1MB) die Datei abgeschlossen und eine neue geöffnet.

Internal Buffer Size:

TwinCAT-seitig wird ein Puffer der Größe InternalBufferSize angelegt, aus welchem dann die Daten geschrieben werden.

Segment Size:

Es wird mit jedem Schreibbefehl der TcExtendedFileWriter-Instanz ein Segment der Größe SegmentSize aus dem Internal Buffer in das spezifizierte File geschrieben. Die theoretisch maximal mögliche Datenrate zum Schreiben setzt sich entsprechend aus der SegmentSize und der Zykluszeit des TcExtendetFileWriter zusammen (die TcExtendedFileWriter-Instanz muss nicht die gleiche Zykluszeit haben wie das zugeordnete Simulink-TcCOM Modul). Jedoch ist zu beachten, dass ein Schreibbefehl möglicherweise noch nicht abgeschlossen ist, wenn der nächste Zyklus beginnt. Dann wird in diesem Zyklus der Schreibbefehl ausgesetzt. Es handelt sich somit um eine Abschätzung für den best-case.

Das TwinCAT-Projekt kann nun aktiviert werden.

Um auch während des laufenden Moduls auf die aufgenommenen Daten zugreifen zu können, wird nach dem Erreichen einer festgelegten Dateigröße (standardmäßig 1MB) die Datei abgeschlossen und eine neue geöffnet, (im Bild: *_part1.mat und *_part2.mat sind abgeschlossen, an *_part3.mat wird noch geschrieben):

Verwendung des ToFile Blocks 7:

Um ein dauerhaftes Schreiben zu unterbinden, besitzt das TcExtendedFilewriter-Objekt den Eingang Pause. Wenn der Eingang auf TRUE gesetzt wird, wird die aktuell geschriebene Datei geschlossen und alle nun eingehenden Daten verworfen. Wird der Eingang wieder auf FALSE gesetzt, so wird eine neue Datei geöffnet um die eingehenden Daten zu schreiben.

In MATLAB lassen sich die geschlossenen Dateien wie gewohnt öffnen:

Verwendung des ToFile Blocks 8:

Der Plot zeigt die erwartete Sinusschwingung:

Verwendung des ToFile Blocks 9: