Beispiel20a: FileIO-Cyclic Read / Write
Dieser Artikel stellt ein umfassenderes Beispiel als S20 und S19 dar. Es beschreibt zyklischen Lese- und/oder Schreibzugriff auf Dateien von einem TC3-C++ Modul aus.
Download
Hier erhalten Sie den Quellcode für dieses Beispiel.
- 1. Entpacken Sie die heruntergeladene ZIP-Datei.
- 2. Öffnen Sie mittels eines Visual Studios, in dem TwinCAT installiert ist, das Projekt über Open Project ….
- 3. Konfigurieren Sie das Signieren für dieses Projekt, indem Sie auf der Seite unter Rechtsklick auf dem Projekt->Properties->Tc Sign die TwinCAT Signierung anschalten und Ihr Zertifikat und ggf. Passwort konfigurieren.
Weitere Informationen zur Signierung der C++ Projekte erhalten Sie hier. - 4. Wählen Sie Ihr Zielsystem aus.
- 5. Bauen Sie das Beispiel (z. B. Build->Build Solution).
- 6. Aktivieren Sie die Konfiguration mit einem Klick auf .
- Das Beispiel ist einsatzbereit.
Beschreibung
Das Beispiel beschreibt den Zugriff auf Dateien für Lesen und/oder Schreiben über die Methode CycleUpdate, also auf zyklische Weise.
Dieses Beispiel beinhaltet die folgenden Projekte und Modulinstanzen.
- Eine statische Bibliothek (TcAsyncFileIo) bietet den Dateizugriff.
Der Code für den Dateizugriff kann geteilt werden, also befindet sich dieser Code in einer statischen Bibliothek, die von den Treiberprojekten genutzt wird. - Ein Treiber (TcAsyncBufferReadingDrv) stellt zwei Instanzen zur Verfügung:
- ReadingModule: verwendet die statische Bibliothek, um die Datei AsyncTest.txt zu lesen.
- WriteDetectModule: Schreiboperationen erkennen und Leseoperationen veranlassen.
- Ein Treiber (TcAsyncBufferWritingDrv) stellt eine Instanz zur Verfügung:
- WriteModule: Verwendet die statische Bibliothek, um die Datei AsyncTest.txt zu schreiben.
Beim Starten des Beispiels beginnt das Schreibmodul mit dem Schreiben von Daten in die Datei, die sich im Bootprojekt-Pfad (Windows: C:\TwinCAT\3.x\Boot\AsyncTest.txt; TwinCAT/BSD: /usr/local/etc/TwinCAT/3.x/Boot/AsyncTest.txt) befindet. Die Eingangsvariable bDisableWriting kann für die Verhinderung des Schreibens verwendet werden.
Die Objekte sind miteinander verbunden: wenn das Schreiben erledigt ist, triggert das WritingModule das DetectModule von TcAsyncBufferReadingDrv. Dadurch wird ein Lesevorgang durch das ReadingModule veranlasst.
Beobachten Sie die nBytesWritten- / nBytesRead-Ausgangsvariablen des WritingModules / ReadingModules. Darüber hinaus werden Protokollnachrichten auf Ebene verbose generiert. Diese können - wie gehabt - mit Hilfe des TraceLevelMax Parameters der Module konfiguriert werden.
- Ein Treiber (TcAsyncFileFindDrv) stellt eine Instanz zur Verfügung
- FileFindModule: listen Sie die Dateien eines Verzeichnisses mit Hilfe der statischen Bibliothek auf.
Lösen Sie die Aktion mit Hilfe der Eingangsvariablen bExecute aus. Der Parameter FilePath beinhaltet das Verzeichnis, dessen Dateien aufzulisten sind (Windows: c:\TwinCAT\3.1\Boot\*; TwinCAT/BSD: /usr/local/etc/TwinCAT/3.x/Boot/*).
Beobachten Sie die Ablaufverfolgung (Protokollebene Verbose) bezüglich der Liste der gefundenen Dateien.
Das Beispiel verstehen
Das Projekt TcAsyncFileIO beinhaltet verschiedene, in einer statischen Bibliothek befindliche Klassen. Diese Bibliothek wird von Treiberprojekten für das Lesen und Schreiben verwendet.
Jede Klasse ist für eine Dateizugriffsoperation wie Öffnen / Lesen / Schreiben / Auflisten / Schließen / ... bestimmt. Da die Ausführung innerhalb eines zyklischen Echtzeitkontextes stattfindet, hat jede Operation einen Status und die Klasse kapselt diese Zustandsmaschine ein.
Als Einstiegspunkt zum Verständnis des Dateizugriffs, beginnen Sie mit den Klassen TcFsmFileReader und TcFsmFileWriter.
Sollten zu viele Verlaufsverfolgungsmeldungen auftreten, die das Verständnis des Beispiels erschweren, deaktivieren Sie Module!