La porta can0 di Socketcan smette di funzionare dopo che alcuni messaggi sono stati inviati e non si ripristina.


0

Ho lavorato su un progetto e ho riscontrato un problema con il comando port, ma prima di porre la domanda devo spiegare l'impostazione, il mio obiettivo e il mio problema.

Impostare:

Quindi ho un Raspberry Pi 3 B + collegato all'interfaccia CANable CAN tramite USB. Il Pi ha il software Raspian installato e io uso il desktop per gestire i file e usare la riga di comando per eseguire programmi e comunicare con l'interfaccia CAN. Ho anche installato can-utils e python-can usando i comandi:

apt-get install can-utils

pip installa python-can

Nel CANable è installato il software Candlelight, che mi consente di utilizzare i comandi can-utils per comunicare con esso.

Obbiettivo:

Devo essere in grado di riprodurre (inviare) i messaggi CAN memorizzati nei miei file .asc dal mio Pi attraverso la mia interfaccia CANable CAN per essere ricevuti da un altro nodo CAN.

Problema:

Quindi sono stato in grado di impostare la porta can0 plugginando il CANable con USB e quindi usando questo comando:

set di collegamenti ip sudo can0 up tipo può bitrate 1000000 restart-ms 100;

Volevo testare can0, quindi ho aperto due prompt dei comandi. Uno per inviare messaggi CAN e l'altro per monitorare i messaggi ricevuti. Per monitorare ho usato:

candump -e any, 0: 0, # FFFFFFFF

e per inviare messaggi casuali a can0:

cangen can0

Questi sono i risultati:

Invio dei risultati dei messaggi

Monitoraggio dei messaggi

Inoltre, se apro lo stato di can0 utilizzando " ip -det -stats link show can0 " Mostra che è in modalità "Errore passivo" e che 10 pacchetti sono stati eliminati in TX. Quindi sembra che ci sia un problema di riconoscimento e un problema di spazio nel buffer TX. Ho pensato che fosse necessario riconoscere il messaggio e, in caso contrario, il buffer si riempie e la connessione si interrompe. Quello che ho fatto per ovviare a questo è stato attivare la funzione di loopback da:

sudo ifconfig can0 down;

set di collegamenti ip sudo can0 up tipo può bitrate 1000000 restart-ms 100 loopback attivo;

Quando lo faccio, non ci sono errori e sono in grado di vedere i messaggi usando candump, ma il problema è che ogni riga di messaggio viene ripetuta su can0 e vedo due delle stesse righe ripetute in candump. Inoltre, non riesco a trovare un modo per ripristinare can0 per cancellare il buffer oltre a scollegare il CANable o spegnere il Pi. Provai:

sudo ip link set can0 type può essere riavviato;

Ottengo: "RTNETLINK risponde: argomento non valido"

Non ottengo questi problemi se creo e utilizzo una porta CAN virtuale (vcan0) invece di utilizzare un nodo CAN fisico effettivo come CANable (can0).

Domande

Esiste un modo per passare il problema di riconoscimento senza l'uso della funzione di loopback in modo da poter inviare i messaggi desiderati senza l'eco? (Come magari usare il nodo CAN virtuale per riconoscere i messaggi)

Se collego un altro CANable al mio CANable, i messaggi riconosceranno?

Perché can0 non si resetta anche se ho il comando "restart-ms 100" nel comando?

Perché non riesco a ripristinare il buffer o le informazioni sui pacchetti utilizzando il comando restart?

Qualsiasi aiuto sarebbe apprezzato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.