SocketCAN linux нет свободного места в буфере - PullRequest
0 голосов
/ 07 сентября 2018

Я хочу периодически отправлять сообщения, используя socketCAN с этим устройством

Я создал небольшой скрипт для достижения этой цели, который выглядит следующим образом:

import os
import time

msg = "1FF#FFFFF00000000000"

os.system("sudo slcand -o -c -f -s6 /dev/serial/by-id/*CANtact* can0")
os.system("sudo ifconfig can0 up")
os.system("sudo ifconfig can0 txqueuelen 1000") # this does not help

start = time.time()
while True:
    if round(time.time() - start, 1) % 60 == 0.:
        print(str(int((time.time() - start) / 60)) + " minutes")
    os.system("cansend can0 " + msg)
    time.sleep(0.1)

Я уже проводил некоторые исследования и обнаружил, что для некоторых людей он установил txqueuelen. Однако это не помогло мне. Вывод этого скрипта выглядит следующим образом:

0 minutes
1 minutes
[...]
15 minutes
16 minutes
18 minutes
write: No buffer space available
write: No buffer space available
write: No buffer space available
write: No buffer space available
write: No buffer space available
write: No buffer space available
[and so on]

Устройство прекращает отправку этих сообщений до того, как произойдет эта ошибка. Светодиодный индикатор входящего и исходящего трафика перестает мигать примерно за 10 секунд до нескольких минут до появления сообщения об ошибке. Кроме того, я не могу ничего читать на принимающей стороне. Время, необходимое для заполнения буфера, сильно меняется, от нескольких минут до нескольких часов. Обычно в течение 10-20 минут.

Мне казалось, что может быть что-то вроде принимающего буфера, и потому что я никогда не читал, что он просто заполняется. Но я не знаю, так ли это на самом деле, а также не о том, как это проверить, или как очистить буфер или сбросить его или что-то еще. Мне нужно только отправить мои сообщения. Меня больше ничего не волнует.

Единственное решение после этого - перезапустить Raspberry Pi, который питает устройство.

1 Ответ

0 голосов
/ 20 сентября 2018

ifconfig-параметры должны быть установлены до того, как вы откроете ссылку, но вы откроете ссылку перед настройкой параметров. Так что я не уверен, что на самом деле у вас есть txqueuelen 1000, когда вы запускаете скрипт. Вывод вашего ifconfig can0 может показать это.

Попробуйте изменить порядок команд ifconfig.

Вместо:

os.system("sudo ifconfig can0 up")
os.system("sudo ifconfig can0 txqueuelen 1000")`

Do:

os.system("sudo ifconfig can0 txqueuelen 1000")
os.system("sudo ifconfig can0 up")

Я бы лично добавил команду, чтобы отключить can0, когда скрипт завершится.

...