Skip to main content

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.

. Eine Log-Meldung könnte folgendermaßen aussehen:
  • #### Exception: ID: 0x40000066 <p0>0xb633</p0> <p1>0xbcdd</p1> <p2>0xbce1</p2> <p3>0xb2fd</p3> <p4>0x0</p4>

. Die Ausnahmefehler habe die folgende Bedeutung:
  • 0x40000065: Ausnahmefehler Kanal x: Plausibilitätsprüfung des lokalen Zeitstempels zur Zykluszeit

  • 0x40000066: Ausnahmefehler Kanal x: Plausibilitätsprüfung des entfernten Zeitstempels zur Zykluszeit

  • 0x40000067: 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.

. Die grundlegenden Schritte, die Sie befolgen müssen:
  • 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 ]
Tabelle 9. Die wichtigsten Flags / Filter:

Flag (kurz/lang)

Beschreibung

-D

--list-interfaces

Gibt die Liste der Netzwerkschnittstellen aus, die auf dem System verfügbar sind und auf denen der Befehl tcpdump Packages erfassen kann

-i <interface>

--interface <interface>

Frägt die Schnittstelle ab und gibt folgende Informationen aus:

  • Liste der Link-Layer-Typen

  • Liste der Zeitstempeltypen

  • Ergebnisse der Kompilierung eines Filterausdrucks

-c <Count>

Beendet die Abfrage nach Empfang oder Lesen einer Anzahl von <count> Packages

-n

Verhindert die Konvertierung von Adressen (Hostadressen, Portnummern usw.) in Namen

-A

Gibt jedes Package (abzüglich seines Link-Level-Headers) in ASCII aus

-x

Gibt beim Parsen neben den Kopfzeilen jedes Package auch die Daten jedes Package (abzüglich der Link-Level-Kopfzeilen) in hexadezimal aus

-s <snaplen>

--snapshot-length=<snaplen>

Verwendet <snaplen> Bytes von Daten aus jedem Paket anstelle des Standardwerts von 262144 Bytes

-w <file>

Schreibt die Rohdaten-Packages in eine Datei, anstatt sie zu analysieren und auszugeben

-t

Verhindert die Ausgabe eines Zeitstempels in jeder Dump-Zeile

-tt

Gibt den Zeitstempels in jeder Dump-Zeile aus, als Sekunden seit dem 1. Januar 1970, 00:00:00, UTC, und Sekundenbruchteile seit diesem Zeitpunkt

-ttt

Gibt ein Delta (Mikrosekunden- oder Nanosekunden-Auflösung, abhängig von der Option --time-stamp-precision) aus zwischen der aktuellen und der vorherigen Zeile in jeder Dump-Zeile. Die Standardeinstellung ist eine Auflösung in Mikrosekunden.

-tttt

Gibt einen Zeitstempels in jeder Dump-Zeile aus in Form von Stunden, Minuten, Sekunden und Sekundenbruchteilen seit Mitternacht. Der Ausgabe ist das Datum vorangestellt.

-v

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).

Beispiel 5. Beispiel
> sudo tcpdump -i eno1 -w myfirsttrace.cap -s 200 udp port 60000


Untersuchung / Analyse

. Nachdem ein Trace erstellt wurde, muss dieser analysiert werden. Dies kann mit tcpdump oder grafisch mit WireShark erfolgen
  1. Zeichnen Sie die Aufzeichnung auf dem Host der Safe Control SL (Empfangsseite der Zeitgeberkommunikation) auf, wie im obigen Beispiel gezeigt.

  2. Öffnen Sie dann die pcap-Datei mit Wireshark. Sie sieht dann ähnlich aus wie diese:

    _rtsl_img_iec_wireshark.png

    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ögerung
    • Finden 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.