Skip to main content

Il runtime di sicurezza mostra gli errori di temporizzazione nel file di registro.

Preparazioni:

Stai gestendo un CODESYS Safe Control SL o CODESYS Virtual Safe Control SL combinato con CODESYS Safe Time Provider.

Risoluzione dei problemi

Se si riscontrano problemi segnalati dal CODESYS Safe Control Ambiente di runtime SL e menziona i problemi di temporizzazione (da CmpSIL3 componente), allora potreste avere problemi di temporizzazione nella rete Safe Time che dovreste esaminare.

. Un messaggio di registro potrebbe essere simile a questo:
  • #### Exception: ID: 0x40000066 <p0>0xb633</p0> <p1>0xbcdd</p1> <p2>0xbce1</p2> <p3>0xb2fd</p3> <p4>0x0</p4>

. Gli errori di eccezione hanno i seguenti significati:
  • 0x40000065: Canale di eccezione x: verifica della plausibilità del timestamp locale per il tempo di ciclo

  • 0x40000066: Canale di eccezione x: verifica della plausibilità del timestamp remoto rispetto al tempo di ciclo

  • 0x40000067: Canale di eccezione x: verifica della plausibilità del timestamp remoto rispetto al timestamp locale

Avviso

La rete del tempo sicuro (tra CODESYS Safe Time Provider e il CODESYS Safe Control ambiente di runtime) ha gli stessi elevati requisiti di stabilità e tempo reale di una rete fieldbus (ad esempio, EtherCAT o Profinet).

Tracciamento con tcpdump

È possibile creare facilmente una traccia sulla riga di comando di Linux utilizzando tcpdump strumento. Se conosci già Wireshark o un dispositivo di tracciamento hardware, puoi utilizzarlo anche per creare

. I passaggi fondamentali da seguire:
  • Determina la scheda di rete che desideri tracciare.

  • Scopri cosa vuoi tracciare (contenuto, tipo di pacchetto, registro, ecc.) per ridurre la traccia.

Comandi utili

Installare tcpdump (a seconda della distribuzione o della gestione dei pacchetti software)

  • Ad esempio, basato su Debian/Ubuntu «apt»: sudo apt install tcpdump

  • Basato su Red Hat «YUM/DNF»: sudo yum install tcpdump

Puoi vedere tutti gli adattatori di rete disponibili che tcpdump può monitorare:

> tcpdump -D 
1.eno1 [Up, Running, Connected]
2.any (Pseudo-device that captures on all interfaces) [Up, Running]
3.lo [Up, Running, Loopback]

Avviso

È possibile correre tcpdump come utente normale. Se vuoi farlo, leggi il tcpdump documentazione per maggiori dettagli.

argomenti della riga di comando tcpdump

Dettagli su tutti i comandi possibili con tcpdump può essere trovato in tcpdump pagina man: https://www.tcpdump.org/manpages/tcpdump.1.html

Oppure chiama tcpdump:

> 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 ]
Tabella 9. Le bandiere e i filtri più importanti:

Bandiera (corta/lunga)

Descrizione

-D

--list-interfaces

Restituisce l'elenco delle interfacce di rete disponibili sul sistema e in cui tcpdump il comando può catturare pacchetti

-i <interface>

--interface <interface>

Interroga l'interfaccia e restituisce le seguenti informazioni:

  • Elenco dei tipi di livelli di collegamento

  • Elenco dei tipi di timestamp

  • Risultati della compilazione di un'espressione di filtro

-c <Count>

Termina la query dopo aver ricevuto o letto un numero di pacchetti <count>.

-n

Impedisce la conversione degli indirizzi (indirizzi host, numeri di porta, ecc.) in nomi

-A

Emette ogni pacchetto (meno l'intestazione a livello di collegamento) in formato ASCII

-x

Durante l'analisi, oltre alle intestazioni di ciascun pacchetto, stampa i dati di ciascun pacchetto (meno le intestazioni a livello di collegamento) in formato esadecimale

-s <snaplen>

--snapshot-length=<snaplen>

Utilizza <snaplen> byte di dati da ogni pacchetto invece del valore predefinito di 262144 byte

-w <file>

Scrive i pacchetti di dati grezzi in un file invece di analizzarli e stamparli

-t

Impedisce l'emissione di un timestamp in ogni riga di dump

-tt

Restituisce il timestamp, in secondi dal 1° gennaio 1970, 00:00:00, UTC e frazioni di secondo da quel momento, in ogni riga di dump

-ttt

Stampa una risoluzione delta (microsecondi o nanosecondi), a seconda --time-stamp-precision opzione) tra la riga corrente e quella precedente su ciascuna riga di dump. L'impostazione predefinita è una risoluzione in microsecondi

-tttt

Stampa un timestamp, in ore, minuti, secondi e frazioni di secondo dalla mezzanotte, su ogni riga di dump. L'output è preceduto dalla data

-v

Fornisce informazioni aggiuntive (dettagliate)



Tracciamento del pacco

Acquisizione e output semplici sulla console:

> sudo tcpdump -i <interfacename>

# e.g. with interface "eno1":
> sudo tcpdump -i eno1

Acquisizione e riproduzione come file compatibile con Wireshark

> sudo tcpdump -i <interfacename> -w <file>
 
# e.g.
> sudo tcpdump -i eno1 -w myfirsttrace.pcap

Quindi il file myfirsttrace.pcap può essere aperto in Wireshark. (.pcap è l'estensione di file predefinita per i file di traccia di Wireshark.)

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


Indagine/analisi

. Una volta creata, una traccia deve essere analizzata. Questo può essere fatto con tcpdump o graficamente
  1. Registra la traccia sull'host del Safe Control SL (lato ricevente della comunicazione timeprovider), come mostrato nell'esempio precedente.

  2. Quindi apri il file *.pcap con Wireshark. Assomiglierà a questo

    _rtsl_img_iec_wireshark.png

    Noterai che i pacchi vengono normalmente inviati con un intervallo di 1 millisecondo (la differenza di tempo tra i pacchi). (Vedi pacchetto numero 58

    Una tipica situazione problematica in cui CODESYS Safe Control SL emetterà un'eccezione/problema dovuto alla tempistica, visibile nel pacchetto numero 74: questo pacchetto viene ricevuto ~2 ms dopo il pacchetto precedente, quindi il ritardo è di ~1 ms. Questo non è accettabile per CODESYS Safe Control SL come timestamp affidabile e in tempo reale.

    . Azioni per ridurre il ritardo
    • Scopri se il problema è visibile sul lato ricevente o mittente. È necessario considerare sia il lato ricevente (CODESYS Safe Control Host) e il lato mittente (CODESYS Safe Time Provider Host).

    • Migliora le funzionalità in tempo reale e la robustezza di questa comunicazione con timestamp in generale. Puoi farlo rimuovendo le altre comunicazioni e il carico che interferiscono da questa rete (utilizzalo esclusivamente

    • Migliora le prestazioni di invio e ricezione configurando la priorità di processo dell'IRQ corrispondente (del driver di rete).

    • Se non riesci a migliorare ulteriormente e se il tuo processo di sicurezza lo consente, puoi aumentare il tempo di ciclo del CODESYS Safe Time Provider (invio del timestamp).