Das Safety-Laufzeitsystem zeigt in der Logdatei Timing-Fehler
Vorbereitungen
Sie betreiben eine CODESYS Safe Control SL oder CODESYS Virtual Safe Control SL in Kombination mit dem CODESYS Safe Time Provider.
Fehlerbehebung
Wenn Sie auf Probleme stoßen, die von der CODESYS Safe Control SL-Laufzeitumgebung gemeldet werden und Timing-Probleme erwähnen (von der Komponente CmpSIL3
), haben Sie möglicherweise Timing-Probleme im sicheren Zeitnetzwerk, die Sie untersuchen sollten.
#### Exception: ID: 0x40000066 <p0>0xb633</p0> <p1>0xbcdd</p1> <p2>0xbce1</p2> <p3>0xb2fd</p3> <p4>0x0</p4>
0x40000065
: Ausnahmefehler Kanal x: Plausibilitätsprüfung des lokalen Zeitstempels zur Zykluszeit0x40000066
: Ausnahmefehler Kanal x: Plausibilitätsprüfung des entfernten Zeitstempels zur Zykluszeit0x40000067
: Ausnahmefehler Kanal x: Plausibilitätsprüfung des entfernten Zeitstempels zum lokalen Zeitstempel
Hinweis
Das sichere Zeitnetzwerk (zwischen dem CODESYS Safe Time Provider und der CODESYS Safe Control-Laufzeitumgebung) hat die gleichen hohen Anforderungen an Stabilität und Echtzeit wie ein Feldbusnetzwerk (beispielsweise EtherCAT oder Profinet).
Nachverfolgung mit tcpdump
Mit dem Tool tcpdump
können Sie auf der Linux-Kommandozeile leicht ein Trace erstellen. Wenn Sie bereits mit WireShark oder einem Hardware-Trace-Gerät vertraut sind, können Sie auch damit einen Trace erstellen.
Ermitteln Sie den Netzwerkadapter, den Sie verfolgen möchten.
Finden Sie heraus, was Sie verfolgen wollen (Inhalt/Paketart/Protokoll usw.) (um den Trace kleiner zu machen).
Nützliche Befehle
Installieren Sie tcpdump
(abhängig von Ihrer Distribution / Softwarepaketverwaltung)
beispielsweise debian/ubuntu „apt“-basiert:
sudo apt install tcpdump
RedHat-„yum/dnf“-basiert:
sudo yum install tcpdump
Sie können alle verfügbaren Netzwerkadapter sehen, die tcpdump
monitoren kann:
> tcpdump -D 1.eno1 [Up, Running, Connected] 2.any (Pseudo-device that captures on all interfaces) [Up, Running] 3.lo [Up, Running, Loopback]
Hinweis
Es ist möglich, tcpdump
als normaler Benutzer auszuführen. Wenn Sie dies tun möchten, lesen Sie bitte die tcpdump
-Dokumentation für weitere Details.
tcpdump-Kommandozeilen-Argumente
Details zu allen möglichen Befehlen mit tcpdump
finden Sie in der tcpdump
-Manpage: https://www.tcpdump.org/manpages/tcpdump.1.html
Oder rufen Sie tcpdump
auf:
> tcpdump --help tcpdump version 4.99.3 libpcap version 1.10.3 (with TPACKET_V3) OpenSSL 3.0.15 3 Sep 2024 Usage: tcpdump [-AbdDefhHIJKlLnNOpqStuUvxX#] [ -B size ] [ -c count ] [--count] [ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ] [ -i interface ] [ --immediate-mode ] [ -j tstamptype ] [ -M secret ] [ --number ] [ --print ] [ -Q in|out|inout ] [ -r file ] [ -s snaplen ] [ -T type ] [ --version ] [ -V file ] [ -w file ] [ -W filecount ] [ -y datalinktype ] [ --time-stamp-precision precision ] [ --micro ] [ --nano ] [ -z postrotate-command ] [ -Z user ] [ expression ]
Flag (kurz/lang) | Beschreibung |
---|---|
| Gibt die Liste der Netzwerkschnittstellen aus, die auf dem System verfügbar sind und auf denen der Befehl |
| Frägt die Schnittstelle ab und gibt folgende Informationen aus:
|
| Beendet die Abfrage nach Empfang oder Lesen einer Anzahl von |
| Verhindert die Konvertierung von Adressen (Hostadressen, Portnummern usw.) in Namen |
| Gibt jedes Package (abzüglich seines Link-Level-Headers) in ASCII aus |
| Gibt beim Parsen neben den Kopfzeilen jedes Package auch die Daten jedes Package (abzüglich der Link-Level-Kopfzeilen) in hexadezimal aus |
| Verwendet |
| Schreibt die Rohdaten-Packages in eine Datei, anstatt sie zu analysieren und auszugeben |
| Verhindert die Ausgabe eines Zeitstempels in jeder Dump-Zeile |
| Gibt den Zeitstempels in jeder Dump-Zeile aus, als Sekunden seit dem 1. Januar 1970, 00:00:00, UTC, und Sekundenbruchteile seit diesem Zeitpunkt |
| Gibt ein Delta (Mikrosekunden- oder Nanosekunden-Auflösung, abhängig von der Option |
| Gibt einen Zeitstempels in jeder Dump-Zeile aus in Form von Stunden, Minuten, Sekunden und Sekundenbruchteilen seit Mitternacht. Der Ausgabe ist das Datum vorangestellt. |
| Gibt zusätzliche Informationen aus |
Nachverfolgung des Package
Einfache Erfassung und Ausgabe auf der Konsole:
> sudo tcpdump -i <interfacename> # e.g. with interface "eno1": > sudo tcpdump -i eno1
Erfassung und Ausgabe als „Wireshark“-kompatible Datei
> sudo tcpdump -i <interfacename> -w <file> # e.g. > sudo tcpdump -i eno1 -w myfirsttrace.pcap
Dann kann die Datei myfirsttrace.pcap
in WireShark geöffnet werden (.pcap
ist die Standard-Dateierweiterung für WireShark-Trace-Dateien).
> sudo tcpdump -i eno1 -w myfirsttrace.cap -s 200 udp port 60000
Untersuchung / Analyse
Zeichnen Sie die Aufzeichnung auf dem Host der Safe Control SL (Empfangsseite der Zeitgeberkommunikation) auf, wie im obigen Beispiel gezeigt.
Öffnen Sie dann die pcap-Datei mit Wireshark. Sie sieht dann ähnlich aus wie diese:
Sie werden feststellen, dass die Pakete normalerweise mit einem Intervall von 1 Millisekunde (der Zeitdifferenz zwischen den Paketen) gesendet werden, siehe Paket Nummer 58 und folgende.
Eine typische problematische Situation, in der CODESYS Safe Control SL aufgrund des Timings eine Ausnahme / ein Problem auslöst, ist in Paket Nummer 74 zu sehen: Dieses Paket wird ~ 2 ms nach dem vorherigen Paket empfangen, die Verzögerung beträgt also ~ 1 ms. Dies ist für CODESYS Safe Control SL nicht akzeptabel als ein zuverlässiger und echtzeitfähiger Zeitstempel
. Maßnahmen zur Reduzierung der VerzögerungFinden Sie heraus, ob das Problem auf Empfangsseite oder Sendeseite sichtbar ist. Dabei müssen Sie sowohl die Empfangsseite (CODESYS Safe Control-Host) also auch die sendende Seite (CODESYS Safe Time Provider-Host) betrachten.
Verbessern Sie die Echtzeitfähigkeiten und die Robustheit dieser Zeitstempelkommunikation im Allgemeinen. Dies erreichen Sie, indem Sie andere störende Kommunikation und Last aus diesem Netz entfernen (ausschließliche Verwendung für sichere Zeitstempel).
Verbessern Sie die Sende- und Empfangsleistung durch Konfigurieren der Prozesspriorität des entsprechenden IRQ (des Netzwerktreibers).
Wenn Sie keine weitere Verbesserung erzielen können und Ihr Sicherheitsprozess dies zulässt, können Sie die Zykluszeit des CODESYS Safe Time Provider (Senden des Zeitstempels) erhöhen.